diff --git a/.github/workflows/jan-electron-linter-and-test.yml b/.github/workflows/jan-electron-linter-and-test.yml index d4689ca60..040d834ae 100644 --- a/.github/workflows/jan-electron-linter-and-test.yml +++ b/.github/workflows/jan-electron-linter-and-test.yml @@ -28,6 +28,9 @@ on: - "node_modules/**" - "yarn.lock" - "Makefile" + - "extensions/**" + - "core/**" + - "!README.md" jobs: test-on-macos: diff --git a/.github/workflows/update-release-url.yml b/.github/workflows/update-release-url.yml index 5fd270120..545d6542e 100644 --- a/.github/workflows/update-release-url.yml +++ b/.github/workflows/update-release-url.yml @@ -37,7 +37,7 @@ jobs: sed -i "s|||" README.md sed -i "s|||" README.md sed -i "s|||" README.md - sed -i "s|||" README.md + sed -i "s|||" README.md - name: Commit and Push changes if: github.event_name == 'release' diff --git a/README.md b/README.md index 25a7c37af..e84f2577d 100644 --- a/README.md +++ b/README.md @@ -76,31 +76,31 @@ Jan is an open-source ChatGPT alternative that runs 100% offline on your compute Experimental (Nightly Build) - + jan.exe - + Intel - + M1/M2 - + jan.deb - + jan.AppImage @@ -166,6 +166,20 @@ To reset your installation: - Delete all `node_modules` in current folder - Clear Application cache in `~/Library/Caches/jan` +## Requirements for running Jan +- MacOS: 13 or higher +- Windows: + - Windows 10 or higher + - To enable GPU support: + - Nvidia GPU with CUDA Toolkit 11.4 or higher + - Nvidia driver 470.63.01 or higher +- Linux: + - glibc 2.27 or higher (check with `ldd --version`) + - gcc 11, g++ 11, cpp 11 or higher, refer to this [link](https://jan.ai/guides/troubleshooting/gpu-not-used/#specific-requirements-for-linux) for more information + - To enable GPU support: + - Nvidia GPU with CUDA Toolkit 11.4 or higher + - Nvidia driver 470.63.01 or higher + ## Contributing Contributions are welcome! Please read the [CONTRIBUTING.md](CONTRIBUTING.md) file diff --git a/USAGE.md b/USAGE.md deleted file mode 100644 index c42c309e7..000000000 --- a/USAGE.md +++ /dev/null @@ -1,92 +0,0 @@ -## Requirements for running Jan App in GPU mode on Windows and Linux -- You must have an NVIDIA driver that supports CUDA 11.4 or higher. Refer [here](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver). - To check if the NVIDIA driver is installed, open PowerShell or Terminal and enter the following command: - ```bash - nvidia-smi - ``` - If you see a result similar to the following, you have successfully installed the NVIDIA driver: - ```bash - +-----------------------------------------------------------------------------+ - | NVIDIA-SMI 470.57.02 Driver Version: 470.57.02 CUDA Version: 11.4 | - |-------------------------------+----------------------+----------------------+ - | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | - | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | - | | | MIG M. | - |===============================+======================+======================| - | 0 NVIDIA GeForce ... Off | 00000000:01:00.0 On | N/A | - | 0% 51C P8 10W / 170W | 364MiB / 7982MiB | 0% Default | - | | | N/A | - +-------------------------------+----------------------+----------------------+ - ``` - -- You must have CUDA 11.4 or higher (refer [here](https://developer.nvidia.com/cuda-toolkit-archive)). - To check if CUDA is installed, open PowerShell or Terminal and enter the following command: - ```bash - nvcc --version - ``` - If you see a result similar to the following, you have successfully installed CUDA: - ```bash - nvcc: NVIDIA (R) Cuda compiler driver - - Cuda compilation tools, release 11.4, V11.4.100 - Build cuda_11.4.r11.4/compiler.30033411_0 - ``` - -- Specifically for Linux: - - you must have `gcc-11`, `g++-11`, `cpp-11` or higher, refer [here](https://gcc.gnu.org/projects/cxx-status.html#cxx17). For Ubuntu, you can install g++ 11 by following the instructions [here](https://linuxconfig.org/how-to-switch-between-multiple-gcc-and-g-compiler-versions-on-ubuntu-20-04-lts-focal-fossa). - ```bash - # Example for ubuntu - # Add the following PPA repository - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - # Update the package list - sudo apt update - # Install g++ 11 - sudo apt-get install -y gcc-11 g++-11 cpp-11 - - # Update the default g++ version - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 \ - --slave /usr/bin/g++ g++ /usr/bin/g++-11 \ - --slave /usr/bin/gcov gcov /usr/bin/gcov-11 \ - --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-11 \ - --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-11 - sudo update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-11 110 - # Check the default g++ version - g++ --version - ``` - - You must add the `.so` libraries of CUDA to the `LD_LIBRARY_PATH` environment variable, refer [here](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions). - ```bash - # Example for ubuntu with CUDA 11.4 - sudo nano /etc/environment - # Add /usr/local/cuda-11.4/bin to the PATH environment variable - the first line - # Add the following line to the end of the file - LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64 - - # Save and exit - # Restart your computer or log out and log in again, the changes will take effect - ``` -## How to switch mode CPU/GPU Jan app - -By default, Jan app will run in CPU mode. When starting Jan app, the program will automatically check if your computer meets the requirements to run in GPU mode. If it does, we will automatically enable GPU mode and pick the GPU has highest VGRAM for you (feature allowing users to select one or more GPU devices for use - currently in planning). You can check whether you are using CPU mode or GPU mode in the settings/advance section of Jan app. (see image below). ![](/docs/static/img/usage/jan-gpu-enable-setting.png) - -If you have GPU mode but it is not enabled by default, the following possibilities may exist, you can follow the next steps to fix the error: - -1. You have not installed the NVIDIA driver, refer to the NVIDIA driver that supports CUDA 11.4 [here](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver). - -2. You have not installed the CUDA toolkit or your CUDA toolkit is not compatible with the NVIDIA driver, refer to CUDA compatibility [here](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver). - -3. You have not installed a CUDA compatible driver, refer [here](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver), and you must add the `.so` libraries of CUDA and the CUDA compatible driver to the `LD_LIBRARY_PATH` environment variable, refer [here](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions). For Windows, add the `.dll` libraries of CUDA and the CUDA compatible driver to the `PATH` environment variable. Usually, when installing CUDA on Windows, this environment variable is automatically added, but if you do not see it, you can add it manually by referring [here](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#environment-setup). - -## To check the current GPU-related settings that Jan app has detected, you can go to the Settings/Advanced section as shown in the image below. -![](/docs/static/img/usage/jan-open-home-directory.png) -![](/docs/static/img/usage/jan-open-settings-1.png) -![](/docs/static/img/usage/jan-open-settings-2.png) -![](/docs/static/img/usage/jan-open-settings-3.png) - -When you have an issue with GPU mode, share the `settings.json` with us will help us to solve the problem faster. - -## Tested on - -- Windows 11 Pro 64-bit, NVIDIA GeForce RTX 4070ti GPU, CUDA 12.2, NVIDIA driver 531.18 (Bare metal) -- Ubuntu 22.04 LTS, NVIDIA GeForce RTX 4070ti GPU, CUDA 12.2, NVIDIA driver 545 (Bare metal) -- Ubuntu 18.04 LTS, NVIDIA GeForce GTX 1660ti GPU, CUDA 12.1, NVIDIA driver 535 (Proxmox VM passthrough GPU) -- Ubuntu 20.04 LTS, NVIDIA GeForce GTX 1660ti GPU, CUDA 12.1, NVIDIA driver 535 (Proxmox VM passthrough GPU) \ No newline at end of file diff --git a/core/rollup.config.ts b/core/rollup.config.ts index d982db659..d78130a4d 100644 --- a/core/rollup.config.ts +++ b/core/rollup.config.ts @@ -53,6 +53,8 @@ export default [ 'crypto', 'url', 'http', + 'os', + 'util' ], watch: { include: 'src/node/**', diff --git a/core/src/api/index.ts b/core/src/api/index.ts index 75fc3f007..3cf70a105 100644 --- a/core/src/api/index.ts +++ b/core/src/api/index.ts @@ -12,6 +12,7 @@ export enum AppRoute { baseName = 'baseName', startServer = 'startServer', stopServer = 'stopServer', + log = 'log' } export enum AppEvent { diff --git a/core/src/core.ts b/core/src/core.ts index 11683bdc5..4480697f6 100644 --- a/core/src/core.ts +++ b/core/src/core.ts @@ -77,13 +77,12 @@ const openExternalUrl: (url: string) => Promise = (url) => const getResourcePath: () => Promise = () => global.core.api?.getResourcePath() /** - * Gets the file's stats. + * Log to file from browser processes. * - * @param path - The path to the file. - * @returns {Promise} - A promise that resolves with the file's stats. + * @param message - Message to log. */ -const fileStat: (path: string) => Promise = (path) => - global.core.api?.fileStat(path) +const log: (message: string, fileName?: string) => void = (message, fileName) => + global.core.api?.log(message, fileName) /** * Register extension point function type definition @@ -108,5 +107,6 @@ export { joinPath, openExternalUrl, baseName, - fileStat, + log, + FileStat } diff --git a/core/src/fs.ts b/core/src/fs.ts index 34d915ef1..ea636977a 100644 --- a/core/src/fs.ts +++ b/core/src/fs.ts @@ -1,3 +1,5 @@ +import { FileStat } from "./types" + /** * Writes data to a file at the specified path. * @returns {Promise} A Promise that resolves when the file is written successfully. @@ -58,6 +60,17 @@ const syncFile: (src: string, dest: string) => Promise = (src, dest) => */ const copyFileSync = (...args: any[]) => global.core.api?.copyFileSync(...args) + +/** + * Gets the file's stats. + * + * @param path - The path to the file. + * @returns {Promise} - A promise that resolves with the file's stats. + */ +const fileStat: (path: string) => Promise = (path) => + global.core.api?.fileStat(path) + + // TODO: Export `dummy` fs functions automatically // Currently adding these manually export const fs = { @@ -71,4 +84,5 @@ export const fs = { appendFileSync, copyFileSync, syncFile, + fileStat } diff --git a/core/src/node/api/common/builder.ts b/core/src/node/api/common/builder.ts index 54ce9159f..90b05540c 100644 --- a/core/src/node/api/common/builder.ts +++ b/core/src/node/api/common/builder.ts @@ -1,13 +1,8 @@ import fs from 'fs' import { JanApiRouteConfiguration, RouteConfiguration } from './configuration' import { join } from 'path' -import { Model, ThreadMessage } from './../../../index' +import { ContentType, MessageStatus, Model, ThreadMessage } from './../../../index' -import fetch from 'node-fetch' -import { ulid } from 'ulid' -import request from 'request' - -const progress = require('request-progress') const os = require('os') const path = join(os.homedir(), 'jan') @@ -207,17 +202,28 @@ const generateThreadId = (assistantId: string) => { export const createMessage = async (threadId: string, message: any) => { const threadMessagesFileName = 'messages.jsonl' - // TODO: add validation + try { + const { ulid } = require('ulid') const msgId = ulid() const createdAt = Date.now() const threadMessage: ThreadMessage = { - ...message, id: msgId, thread_id: threadId, + status: MessageStatus.Ready, created: createdAt, updated: createdAt, object: 'thread.message', + role: message.role, + content: [ + { + type: ContentType.Text, + text: { + value: message.content, + annotations: [], + }, + }, + ], } const threadDirPath = join(path, 'threads', threadId) @@ -250,8 +256,10 @@ export const downloadModel = async (modelId: string) => { // path to model binary const modelBinaryPath = join(directoryPath, modelId) - const rq = request(model.source_url) + const request = require('request') + const rq = request(model.source_url) + const progress = require('request-progress') progress(rq, {}) .on('progress', function (state: any) { console.log('progress', JSON.stringify(state, null, 2)) @@ -312,8 +320,9 @@ export const chatCompletions = async (request: any, reply: any) => { headers['Authorization'] = `Bearer ${apiKey}` headers['api-key'] = apiKey } - console.log(apiUrl) - console.log(JSON.stringify(headers)) + console.debug(apiUrl) + console.debug(JSON.stringify(headers)) + const fetch = require('node-fetch') const response = await fetch(apiUrl, { method: 'POST', headers: headers, diff --git a/core/src/node/api/routes/download.ts b/core/src/node/api/routes/download.ts index 26945bada..f62ee0258 100644 --- a/core/src/node/api/routes/download.ts +++ b/core/src/node/api/routes/download.ts @@ -1,11 +1,10 @@ import { DownloadRoute } from '../../../api' import { join } from 'path' -import { userSpacePath, DownloadManager, HttpServer } from '../../index' +import { userSpacePath } from '../../extension/manager' +import { DownloadManager } from '../../download' +import { HttpServer } from '../HttpServer' import { createWriteStream } from 'fs' -const request = require('request') -const progress = require('request-progress') - export const downloadRouter = async (app: HttpServer) => { app.post(`/${DownloadRoute.downloadFile}`, async (req, res) => { const body = JSON.parse(req.body as any) @@ -19,6 +18,9 @@ export const downloadRouter = async (app: HttpServer) => { const localPath = normalizedArgs[1] const fileName = localPath.split('/').pop() ?? '' + const request = require('request') + const progress = require('request-progress') + const rq = request(normalizedArgs[0]) progress(rq, {}) .on('progress', function (state: any) { diff --git a/core/src/node/api/routes/extension.ts b/core/src/node/api/routes/extension.ts index abd6a6f0c..a3a3a2e19 100644 --- a/core/src/node/api/routes/extension.ts +++ b/core/src/node/api/routes/extension.ts @@ -1,12 +1,10 @@ import { join, extname } from 'path' -import { ExtensionRoute } from '../../../api' -import { - userSpacePath, - ModuleManager, - getActiveExtensions, - installExtensions, - HttpServer, -} from '../../index' +import { ExtensionRoute } from '../../../api/index' +import { userSpacePath } from '../../extension/manager' +import { ModuleManager } from '../../module' +import { getActiveExtensions, installExtensions } from '../../extension/store' +import { HttpServer } from '../HttpServer' + import { readdirSync } from 'fs' export const extensionRouter = async (app: HttpServer) => { diff --git a/core/src/node/api/routes/fs.ts b/core/src/node/api/routes/fs.ts index f0cf1eeed..9c34498b6 100644 --- a/core/src/node/api/routes/fs.ts +++ b/core/src/node/api/routes/fs.ts @@ -1,6 +1,7 @@ import { FileSystemRoute } from '../../../api' import { join } from 'path' -import { HttpServer, userSpacePath } from '../../index' +import { HttpServer } from '../HttpServer' +import { userSpacePath } from '../../extension/manager' export const fsRouter = async (app: HttpServer) => { const moduleName = 'fs' diff --git a/core/src/node/api/routes/v1.ts b/core/src/node/api/routes/v1.ts index 5994ae6e0..a2a48cd8b 100644 --- a/core/src/node/api/routes/v1.ts +++ b/core/src/node/api/routes/v1.ts @@ -1,5 +1,9 @@ import { HttpServer } from '../HttpServer' -import { commonRouter, threadRouter, fsRouter, extensionRouter, downloadRouter } from './index' +import { commonRouter } from './common' +import { threadRouter } from './thread' +import { fsRouter } from './fs' +import { extensionRouter } from './extension' +import { downloadRouter } from './download' export const v1Router = async (app: HttpServer) => { // MARK: External Routes diff --git a/core/src/node/download.ts b/core/src/node/download.ts index 08c089b74..6d15fc344 100644 --- a/core/src/node/download.ts +++ b/core/src/node/download.ts @@ -1,4 +1,3 @@ -import { Request } from "request"; /** * Manages file downloads and network requests. @@ -18,7 +17,7 @@ export class DownloadManager { * @param {string} fileName - The name of the file. * @param {Request | undefined} request - The network request to set, or undefined to clear the request. */ - setRequest(fileName: string, request: Request | undefined) { + setRequest(fileName: string, request: any | undefined) { this.networkRequests[fileName] = request; } } diff --git a/core/src/node/extension/extension.ts b/core/src/node/extension/extension.ts index 0460eca5e..070703688 100644 --- a/core/src/node/extension/extension.ts +++ b/core/src/node/extension/extension.ts @@ -1,7 +1,5 @@ import { rmdirSync } from 'fs' import { resolve, join } from 'path' -import { manifest, extract } from 'pacote' -import * as Arborist from '@npmcli/arborist' import { ExtensionManager } from './manager' /** @@ -41,6 +39,7 @@ export default class Extension { * @param {Object} [options] Options provided to pacote when fetching the manifest. */ constructor(origin?: string, options = {}) { + const Arborist = require('@npmcli/arborist') const defaultOpts = { version: false, fullMetadata: false, @@ -74,13 +73,15 @@ export default class Extension { async getManifest() { // Get the package's manifest (package.json object) try { - const mnf = await manifest(this.specifier, this.installOptions) - - // set the Package properties based on the it's manifest - this.name = mnf.name - this.version = mnf.version - this.main = mnf.main - this.description = mnf.description + await import('pacote').then((pacote) => { + return pacote.manifest(this.specifier, this.installOptions).then((mnf) => { + // set the Package properties based on the it's manifest + this.name = mnf.name + this.version = mnf.version + this.main = mnf.main + this.description = mnf.description + }) + }) } catch (error) { throw new Error(`Package ${this.origin} does not contain a valid manifest: ${error}`) } @@ -99,7 +100,8 @@ export default class Extension { await this.getManifest() // Install the package in a child folder of the given folder - await extract( + const pacote = await import('pacote') + await pacote.extract( this.specifier, join(ExtensionManager.instance.extensionsPath ?? '', this.name ?? ''), this.installOptions, @@ -164,10 +166,13 @@ export default class Extension { * @returns the latest available version if a new version is available or false if not. */ async isUpdateAvailable() { - if (this.origin) { - const mnf = await manifest(this.origin) - return mnf.version !== this.version ? mnf.version : false - } + return import('pacote').then((pacote) => { + if (this.origin) { + return pacote.manifest(this.origin).then((mnf) => { + return mnf.version !== this.version ? mnf.version : false + }) + } + }) } /** diff --git a/core/src/node/extension/manager.ts b/core/src/node/extension/manager.ts index 3e52ac02d..abfe916c0 100644 --- a/core/src/node/extension/manager.ts +++ b/core/src/node/extension/manager.ts @@ -1,7 +1,6 @@ import { join, resolve } from "path"; import { existsSync, mkdirSync, writeFileSync } from "fs"; -import { init } from "./index"; import { homedir } from "os" /** * Manages extension installation and migration. @@ -20,22 +19,6 @@ export class ExtensionManager { } } - /** - * Sets up the extensions by initializing the `extensions` module with the `confirmInstall` and `extensionsPath` options. - * The `confirmInstall` function always returns `true` to allow extension installation. - * The `extensionsPath` option specifies the path to install extensions to. - */ - setupExtensions() { - init({ - // Function to check from the main process that user wants to install a extension - confirmInstall: async (_extensions: string[]) => { - return true; - }, - // Path to install extension to - extensionsPath: join(userSpacePath, "extensions"), - }); - } - setExtensionsPath(extPath: string) { // Create folder if it does not exist let extDir; diff --git a/core/src/node/log.ts b/core/src/node/log.ts index 7291516cd..6c9712b6a 100644 --- a/core/src/node/log.ts +++ b/core/src/node/log.ts @@ -3,16 +3,24 @@ import util from 'util' import path from 'path' import os from 'os' -const appDir = path.join(os.homedir(), 'jan') +export const logDir = path.join(os.homedir(), 'jan', 'logs') -export const logPath = path.join(appDir, 'app.log') +export const log = function (message: string, fileName: string = 'app.log') { + if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir, { recursive: true }) + } + if (!message.startsWith('[')) { + message = `[APP]::${message}` + } -export const log = function (d: any) { - if (fs.existsSync(appDir)) { - var log_file = fs.createWriteStream(logPath, { + message = `${new Date().toISOString()} ${message}` + + if (fs.existsSync(logDir)) { + var log_file = fs.createWriteStream(path.join(logDir, fileName), { flags: 'a', }) - log_file.write(util.format(d) + '\n') + log_file.write(util.format(message) + '\n') log_file.close() + console.debug(message) } } diff --git a/core/src/types/message/messageEntity.ts b/core/src/types/message/messageEntity.ts index a74f059a0..199743796 100644 --- a/core/src/types/message/messageEntity.ts +++ b/core/src/types/message/messageEntity.ts @@ -61,6 +61,8 @@ export enum MessageStatus { Pending = 'pending', /** Message loaded with error. **/ Error = 'error', + /** Message is cancelled streaming */ + Stopped = "stopped" } /** diff --git a/docs/docs/about/about.md b/docs/docs/about/about.md index 96749754c..16e0e2b84 100644 --- a/docs/docs/about/about.md +++ b/docs/docs/about/about.md @@ -20,7 +20,7 @@ Jan's long-term technical endeavor is to build a cognitive framework for future ## Quicklinks -- Core product vision for [Jan Framework](http://localhost:3001/docs/) +- Core product vision for [Jan Framework](../docs) - R&D and model training efforts [Discord](https://discord.gg/9NfUSyzp3y) (via our small data-center which is `free & open to all researchers who lack GPUs`!) - Current implementations of Jan Framework: [Jan Desktop](https://jan.ai/), [Nitro](https://nitro.jan.ai/) diff --git a/docs/docs/guides/02-installation/03-linux.md b/docs/docs/guides/02-installation/03-linux.md index 4abde7be8..21dfac1a9 100644 --- a/docs/docs/guides/02-installation/03-linux.md +++ b/docs/docs/guides/02-installation/03-linux.md @@ -21,12 +21,36 @@ keywords: Jan is available for download via our homepage, [https://jan.ai](https://jan.ai/). -For Linux, the download should be available as a `.deb` file in the following format. +For Linux, the download should be available as a `.AppImage` file or a `.deb` file in the following format. ```bash +# AppImage +jan-linux-x86_64-{version}.AppImage + +# Debian Linux distribution jan-linux-amd64-{version}.deb ``` +To install Jan on Linux, you should use your package manager's install or `dpkg``. For Debian/Ubuntu-based distributions, you can install Jan using the following command: + +```bash +# Install Jan using dpkg +sudo dpkg -i jan-linux-amd64-{version}.deb + +# Install Jan using apt-get +sudo apt-get install ./jan-linux-amd64-{version}.deb +# where jan-linux-amd64-{version}.deb is path to the Jan package +``` + +For other Linux distributions, you launch the AppImage file without installation. To do so, you need to make the AppImage file executable and then run it. You can do this either through your file manager's properties dialog or with the following commands: + +```bash +# Install Jan using AppImage +chmod +x jan-linux-x86_64-{version}.AppImage +./jan-linux-x86_64-{version}.AppImage +# where jan-linux-x86_64-{version}.AppImage is path to the Jan package +``` + The typical installation process takes around a minute. ### GitHub Releases @@ -38,6 +62,10 @@ Within the Releases' assets, you will find the following files for Linux: ```bash # Debian Linux distribution jan-linux-amd64-{version}.deb + +# AppImage +jan-linux-x86_64-{version}.AppImage +``` ``` ## Uninstall Jan @@ -49,4 +77,6 @@ sudo apt-get remove jan # where jan is the name of Jan package ``` +For other Linux distributions, if you installed Jan via the `.AppImage` file, you can uninstall Jan by deleting the `.AppImage` file. + In case you wish to completely remove all user data associated with Jan after uninstallation, you can delete the user data folders located at ~/jan. This will return your system to its state prior to the installation of Jan. This method can also be used to reset all settings if you are experiencing any issues with Jan. diff --git a/docs/docs/guides/07-integrations/01-integrate-continue.mdx b/docs/docs/guides/07-integrations/01-integrate-continue.mdx index bfb860b2d..3a0e9f282 100644 --- a/docs/docs/guides/07-integrations/01-integrate-continue.mdx +++ b/docs/docs/guides/07-integrations/01-integrate-continue.mdx @@ -1,7 +1,7 @@ --- -title: Integrate Continue with Jan and VSCode +title: Integrate Continue with Jan and VS Code slug: /guides/integrations/continue -description: Guide to integrate Continue with Jan and VSCode +description: Guide to integrate Continue with Jan and VS Code keywords: [ Jan AI, @@ -25,13 +25,13 @@ import TabItem from "@theme/TabItem"; [Continue](https://continue.dev/docs/intro) is an open-source autopilot for VS Code and JetBrains—the easiest way to code with any LLM. -In this guide, we will show you how to integrate Continue with Jan and VSCode, enhancing your coding experience with the power of the local AI language model. +In this guide, we will show you how to integrate Continue with Jan and VS Code, enhancing your coding experience with the power of the local AI language model. -## Steps to Integrate Continue with Jan and VSCode +## Steps to Integrate Continue with Jan and VS Code -### 1. Install Continue for VSCode +### 1. Install Continue for VS Code -You need to install Continue for VSCode. You can follow this [guide to install Continue for VSCode](https://continue.dev/docs/quickstart). +To get started with Continue in VS Code, please follow this [guide to install Continue for VS Code](https://continue.dev/docs/quickstart). ### 2. Enable Jan API Server @@ -95,7 +95,7 @@ Navigate to `Settings` > `Models`. Activate the model that you want to use in Ja ![Active Models](assets/01-start-model.png) -### 5. Try Out the Integration of Jan and Continue in Vscode +### 5. Try Out the Integration of Jan and Continue in VS Code #### Asking questions about the code diff --git a/docs/docs/guides/08-troubleshooting/02-failed-to-fetch.mdx b/docs/docs/guides/08-troubleshooting/02-somethings-amiss.mdx similarity index 81% rename from docs/docs/guides/08-troubleshooting/02-failed-to-fetch.mdx rename to docs/docs/guides/08-troubleshooting/02-somethings-amiss.mdx index a3dee23c2..56700cd0d 100644 --- a/docs/docs/guides/08-troubleshooting/02-failed-to-fetch.mdx +++ b/docs/docs/guides/08-troubleshooting/02-somethings-amiss.mdx @@ -1,7 +1,7 @@ --- -title: Failed to Fetch -slug: /troubleshooting/failed-to-fetch -description: Troubleshooting "Failed to Fetch" +title: Something's amiss +slug: /troubleshooting/somethings-amiss +description: Troubleshooting "Something's amiss" keywords: [ Jan AI, Jan, @@ -16,7 +16,7 @@ keywords: [ ] --- -You may receive an "Error occured: Failed to Fetch" response when you first start chatting with a selected model. +You may receive an "Something's amiss" response when you first start chatting with a selected model. This may occur due to several reasons. Please follow these steps to resolve it: diff --git a/docs/docs/guides/08-troubleshooting/03-gpu-not-used.mdx b/docs/docs/guides/08-troubleshooting/03-gpu-not-used.mdx index 64f20ee3e..2e9ec2336 100644 --- a/docs/docs/guides/08-troubleshooting/03-gpu-not-used.mdx +++ b/docs/docs/guides/08-troubleshooting/03-gpu-not-used.mdx @@ -1,5 +1,7 @@ --- title: Jan is Not Using GPU +slug: /troubleshooting/gpu-not-used +description: Jan is not using GPU keywords: [ Jan AI, Jan, @@ -60,8 +62,8 @@ If you see a result similar to the following, you have successfully installed CU ```bash nvcc: NVIDIA (R) Cuda compiler driver -Cuda compilation tools, release 11.4, V11.4.100 -Build cuda_11.4.r11.4/compiler.30033411_0 +Cuda compilation tools, release 11.4, V11.7.100 +Build cuda_11.7.r11.7/compiler.30033411_0 ``` ### Specific Requirements for Linux diff --git a/docs/docs/handbook/00-overview.md b/docs/docs/handbook/00-overview.md new file mode 100644 index 000000000..a1127f7d0 --- /dev/null +++ b/docs/docs/handbook/00-overview.md @@ -0,0 +1,18 @@ +--- +title: Overview +slug: /handbook +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + ] +--- + +Welcome to Jan Handbook! We’re really excited to bring you onboard. diff --git a/docs/docs/handbook/02-meet-jan/01-why-we-exist.mdx b/docs/docs/handbook/02-meet-jan/01-why-we-exist.mdx new file mode 100644 index 000000000..f5613e029 --- /dev/null +++ b/docs/docs/handbook/02-meet-jan/01-why-we-exist.mdx @@ -0,0 +1,17 @@ +--- +title: Why we exist +slug: /handbook/meet-jan/why-we-exist +description: Why we exist +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/02-meet-jan/02-vision-and-mission.mdx b/docs/docs/handbook/02-meet-jan/02-vision-and-mission.mdx new file mode 100644 index 000000000..86b6e9336 --- /dev/null +++ b/docs/docs/handbook/02-meet-jan/02-vision-and-mission.mdx @@ -0,0 +1,17 @@ +--- +title: Vision and Mission +slug: /handbook/meet-jan/vision-and-mission +description: Vision and mission of Jan +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- \ No newline at end of file diff --git a/docs/docs/handbook/02-meet-jan/README.mdx b/docs/docs/handbook/02-meet-jan/README.mdx new file mode 100644 index 000000000..c8f02812d --- /dev/null +++ b/docs/docs/handbook/02-meet-jan/README.mdx @@ -0,0 +1,21 @@ +--- +title: Meet Jan +slug: /handbook/meet-jan +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/03-products-and-innovations/01-overview-of-jan-framework-and-its-applications.mdx b/docs/docs/handbook/03-products-and-innovations/01-overview-of-jan-framework-and-its-applications.mdx new file mode 100644 index 000000000..9e120e53a --- /dev/null +++ b/docs/docs/handbook/03-products-and-innovations/01-overview-of-jan-framework-and-its-applications.mdx @@ -0,0 +1,17 @@ +--- +title: Overview of Jan Framework and Its Applications +slug: /handbook/products-and-innovations/overview-of-jan-framework-and-its-applications +description: Overview of Jan Framework and Its Applications +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/03-products-and-innovations/02-philosophy-behind-product-development.mdx b/docs/docs/handbook/03-products-and-innovations/02-philosophy-behind-product-development.mdx new file mode 100644 index 000000000..f16df8e02 --- /dev/null +++ b/docs/docs/handbook/03-products-and-innovations/02-philosophy-behind-product-development.mdx @@ -0,0 +1,17 @@ +--- +title: Philosophy Behind Product Development +slug: /handbook/products-and-innovations/philosophy-behind-product-development +description: Philosophy Behind Product Development +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/03-products-and-innovations/03-roadmap-present-and-future-directions.mdx b/docs/docs/handbook/03-products-and-innovations/03-roadmap-present-and-future-directions.mdx new file mode 100644 index 000000000..e34fc6ec7 --- /dev/null +++ b/docs/docs/handbook/03-products-and-innovations/03-roadmap-present-and-future-directions.mdx @@ -0,0 +1,17 @@ +--- +title: Roadmap - Present and Future Directions +slug: /handbook/products-and-innovations/roadmap-present-and-future-directions +description: Roadmap - Present and Future Directions +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/03-products-and-innovations/README.mdx b/docs/docs/handbook/03-products-and-innovations/README.mdx new file mode 100644 index 000000000..795814975 --- /dev/null +++ b/docs/docs/handbook/03-products-and-innovations/README.mdx @@ -0,0 +1,21 @@ +--- +title: Our Products and Innovations +slug: /handbook/products-and-innovations +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/04-core-contributors/01-how-we-hire.mdx b/docs/docs/handbook/04-core-contributors/01-how-we-hire.mdx new file mode 100644 index 000000000..b57b2f89d --- /dev/null +++ b/docs/docs/handbook/04-core-contributors/01-how-we-hire.mdx @@ -0,0 +1,17 @@ +--- +title: How We Hire +slug: /handbook/core-contributors/how-we-hire +description: How We Hire +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/04-core-contributors/02-embracing-pod-structure.mdx b/docs/docs/handbook/04-core-contributors/02-embracing-pod-structure.mdx new file mode 100644 index 000000000..5adc486b6 --- /dev/null +++ b/docs/docs/handbook/04-core-contributors/02-embracing-pod-structure.mdx @@ -0,0 +1,17 @@ +--- +title: Embracing Pod Structure +slug: /handbook/core-contributors/embracing-pod-structure +description: Embracing Pod Structure +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/04-core-contributors/03-the-art-of-conflict.mdx b/docs/docs/handbook/04-core-contributors/03-the-art-of-conflict.mdx new file mode 100644 index 000000000..7a7f30921 --- /dev/null +++ b/docs/docs/handbook/04-core-contributors/03-the-art-of-conflict.mdx @@ -0,0 +1,17 @@ +--- +title: The Art of Conflict +slug: /handbook/core-contributors/the-art-of-conflict +description: The Art of Conflict +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/04-core-contributors/04-OpSec.mdx b/docs/docs/handbook/04-core-contributors/04-OpSec.mdx new file mode 100644 index 000000000..408e90e02 --- /dev/null +++ b/docs/docs/handbook/04-core-contributors/04-OpSec.mdx @@ -0,0 +1,17 @@ +--- +title: OpSec +slug: /handbook/core-contributors/opsec +description: OpSec +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/04-core-contributors/05-see-a-problem-own-a-problem.mdx b/docs/docs/handbook/04-core-contributors/05-see-a-problem-own-a-problem.mdx new file mode 100644 index 000000000..eb4c2ec35 --- /dev/null +++ b/docs/docs/handbook/04-core-contributors/05-see-a-problem-own-a-problem.mdx @@ -0,0 +1,17 @@ +--- +title: See a Problem, Own a Problem +slug: /handbook/core-contributors/see-a-problem-own-a-problem +description: See a Problem, Own a Problem - How we function without management +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/04-core-contributors/README.mdx b/docs/docs/handbook/04-core-contributors/README.mdx new file mode 100644 index 000000000..bb0057e35 --- /dev/null +++ b/docs/docs/handbook/04-core-contributors/README.mdx @@ -0,0 +1,21 @@ +--- +title: Our Contributors +slug: /handbook/core-contributors +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/05-what-we-do/01-no-PMs-allowed.mdx b/docs/docs/handbook/05-what-we-do/01-no-PMs-allowed.mdx new file mode 100644 index 000000000..21edd1738 --- /dev/null +++ b/docs/docs/handbook/05-what-we-do/01-no-PMs-allowed.mdx @@ -0,0 +1,17 @@ +--- +title: No PMs Allowed +slug: /handbook/what-we-do/no-pms-allowed +description: No PMs Allowed +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/05-what-we-do/02-our-support-methodology copy.mdx b/docs/docs/handbook/05-what-we-do/02-our-support-methodology copy.mdx new file mode 100644 index 000000000..1265f3d59 --- /dev/null +++ b/docs/docs/handbook/05-what-we-do/02-our-support-methodology copy.mdx @@ -0,0 +1,17 @@ +--- +title: Our Support Methodology - Open Source, Collaborative, and Self-serve +slug: /handbook/what-we-do/our-support-methodology +description: Our Support Methodology - Open Source, Collaborative, and Self-serve +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/05-what-we-do/03-our-approach-to-design copy.mdx b/docs/docs/handbook/05-what-we-do/03-our-approach-to-design copy.mdx new file mode 100644 index 000000000..dfe094078 --- /dev/null +++ b/docs/docs/handbook/05-what-we-do/03-our-approach-to-design copy.mdx @@ -0,0 +1,17 @@ +--- +title: Our Approach to Design +slug: /handbook/what-we-do/our-approach-to-design +description: Our Approach to Design +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/05-what-we-do/04-shipping-now-shipping-later copy.mdx b/docs/docs/handbook/05-what-we-do/04-shipping-now-shipping-later copy.mdx new file mode 100644 index 000000000..c96902778 --- /dev/null +++ b/docs/docs/handbook/05-what-we-do/04-shipping-now-shipping-later copy.mdx @@ -0,0 +1,17 @@ +--- +title: Shipping Now, Shipping Later +slug: /handbook/what-we-do/shipping-now-shipping-later +description: Shipping Now, Shipping Later +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/05-what-we-do/05-trial-by-fire.mdx b/docs/docs/handbook/05-what-we-do/05-trial-by-fire.mdx new file mode 100644 index 000000000..234af33f8 --- /dev/null +++ b/docs/docs/handbook/05-what-we-do/05-trial-by-fire.mdx @@ -0,0 +1,17 @@ +--- +title: Trial by Fire +slug: /handbook/what-we-do/trial-by-fire +description: Trial by Fire +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/05-what-we-do/README.mdx b/docs/docs/handbook/05-what-we-do/README.mdx new file mode 100644 index 000000000..a7e6b7476 --- /dev/null +++ b/docs/docs/handbook/05-what-we-do/README.mdx @@ -0,0 +1,21 @@ +--- +title: What We Do +slug: /handbook/what-we-do +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/06-engineering-excellence/01-on-the-tools-what-we-use-and-why.mdx b/docs/docs/handbook/06-engineering-excellence/01-on-the-tools-what-we-use-and-why.mdx new file mode 100644 index 000000000..496df41a7 --- /dev/null +++ b/docs/docs/handbook/06-engineering-excellence/01-on-the-tools-what-we-use-and-why.mdx @@ -0,0 +1,17 @@ +--- +title: On the Tools - What We Use and Why +slug: /handbook/engineering-exellence/one-the-tools-what-we-use-and-why +description: On the Tools - What We Use and Why +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/06-engineering-excellence/02-jan-choices.mdx b/docs/docs/handbook/06-engineering-excellence/02-jan-choices.mdx new file mode 100644 index 000000000..a28bdfbec --- /dev/null +++ b/docs/docs/handbook/06-engineering-excellence/02-jan-choices.mdx @@ -0,0 +1,17 @@ +--- +title: Jan Choices - Why FOSS and Why C++ +slug: /handbook/engineering-exellence/jan-choices +description: Jan Choices - Why FOSS and Why C++ +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/06-engineering-excellence/03-engineering-processes copy.mdx b/docs/docs/handbook/06-engineering-excellence/03-engineering-processes copy.mdx new file mode 100644 index 000000000..f2efb66eb --- /dev/null +++ b/docs/docs/handbook/06-engineering-excellence/03-engineering-processes copy.mdx @@ -0,0 +1,17 @@ +--- +title: Engineering Processes - From Plan to Launch +slug: /handbook/engineering-exellence/engineering-processes +description: Engineering Processes - From Plan to Launch +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/06-engineering-excellence/04-data-management-and-deployment-strategies.mdx b/docs/docs/handbook/06-engineering-excellence/04-data-management-and-deployment-strategies.mdx new file mode 100644 index 000000000..e2b7a6cf4 --- /dev/null +++ b/docs/docs/handbook/06-engineering-excellence/04-data-management-and-deployment-strategies.mdx @@ -0,0 +1,17 @@ +--- +title: Data Management and Deployment Strategies +slug: /handbook/engineering-exellence/data-management-and-deployment-strategies +description: Data Management and Deployment Strategies +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/06-engineering-excellence/README.mdx b/docs/docs/handbook/06-engineering-excellence/README.mdx new file mode 100644 index 000000000..5c192ddd7 --- /dev/null +++ b/docs/docs/handbook/06-engineering-excellence/README.mdx @@ -0,0 +1,21 @@ +--- +title: Engineering Excellence +slug: /handbook/engineering-exellence +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/07-product-and-community/01-how-do-we-know-what-to-work-on.mdx b/docs/docs/handbook/07-product-and-community/01-how-do-we-know-what-to-work-on.mdx new file mode 100644 index 000000000..a4c772f27 --- /dev/null +++ b/docs/docs/handbook/07-product-and-community/01-how-do-we-know-what-to-work-on.mdx @@ -0,0 +1,17 @@ +--- +title: How Do We Know What to Work On? +slug: /handbook/product-and-community/how-dowe-know-what-to-work-on +description: How Do We Know What to Work On? +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/07-product-and-community/02-our-OKRs.mdx b/docs/docs/handbook/07-product-and-community/02-our-OKRs.mdx new file mode 100644 index 000000000..79370f2a7 --- /dev/null +++ b/docs/docs/handbook/07-product-and-community/02-our-OKRs.mdx @@ -0,0 +1,17 @@ +--- +title: Our OKRs +slug: /handbook/product-and-community/our-okrs +description: Our OKRs +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/07-product-and-community/03-approaches-to-beta-testing-and-user-engagement.mdx b/docs/docs/handbook/07-product-and-community/03-approaches-to-beta-testing-and-user-engagement.mdx new file mode 100644 index 000000000..f77a68803 --- /dev/null +++ b/docs/docs/handbook/07-product-and-community/03-approaches-to-beta-testing-and-user-engagement.mdx @@ -0,0 +1,17 @@ +--- +title: Approaches to Beta Testing and User Engagement +slug: /handbook/product-and-community/approaches-to-beta-testing-and-user-engagement +description: Approaches to Beta Testing and User Engagement +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/07-product-and-community/README.mdx b/docs/docs/handbook/07-product-and-community/README.mdx new file mode 100644 index 000000000..c61d77395 --- /dev/null +++ b/docs/docs/handbook/07-product-and-community/README.mdx @@ -0,0 +1,21 @@ +--- +title: Product and Community +slug: /handbook/product-and-community +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/01-jan-pivot-and-journey-so-far.mdx b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/01-jan-pivot-and-journey-so-far.mdx new file mode 100644 index 000000000..dc78e2764 --- /dev/null +++ b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/01-jan-pivot-and-journey-so-far.mdx @@ -0,0 +1,17 @@ +--- +title: Jan’s Pivot and Journey So Far +slug: /handbook/from-spaghetti-flinging-to-strategy/jan-pivot-and-journey-so-far +description: Jan’s Pivot and Journey So Far +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/02-ESOP-philosophy.mdx b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/02-ESOP-philosophy.mdx new file mode 100644 index 000000000..81d4af6dc --- /dev/null +++ b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/02-ESOP-philosophy.mdx @@ -0,0 +1,17 @@ +--- +title: ESOP Philosophy +slug: /handbook/from-spaghetti-flinging-to-strategy/esop-philosophy +description: ESOP Philosophy +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/03-how-we-GTM.mdx b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/03-how-we-GTM.mdx new file mode 100644 index 000000000..fa5bb43fb --- /dev/null +++ b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/03-how-we-GTM.mdx @@ -0,0 +1,17 @@ +--- +title: How We GTM +slug: /handbook/from-spaghetti-flinging-to-strategy/how-we-gtm +description: How We GTM +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/README.mdx b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/README.mdx new file mode 100644 index 000000000..bdc9f9283 --- /dev/null +++ b/docs/docs/handbook/08-from-spaghetti-flinging-to-strategy/README.mdx @@ -0,0 +1,21 @@ +--- +title: From Spaghetti Flinging to Strategy +slug: /handbook/from-spaghetti-flinging-to-strategy +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/09-contributing-to-jan/01-how-to-get-involved-and-FAQ.mdx b/docs/docs/handbook/09-contributing-to-jan/01-how-to-get-involved-and-FAQ.mdx new file mode 100644 index 000000000..158f9fa95 --- /dev/null +++ b/docs/docs/handbook/09-contributing-to-jan/01-how-to-get-involved-and-FAQ.mdx @@ -0,0 +1,17 @@ +--- +title: How to Get Involved and FAQ +slug: /handbook/contributing-to-jan/how-to-get-involved-and-faq +description: How to Get Involved and FAQ +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/09-contributing-to-jan/02-feedback-channels.mdx b/docs/docs/handbook/09-contributing-to-jan/02-feedback-channels.mdx new file mode 100644 index 000000000..20a33b507 --- /dev/null +++ b/docs/docs/handbook/09-contributing-to-jan/02-feedback-channels.mdx @@ -0,0 +1,17 @@ +--- +title: Feedback Channels/ Where to Get Help/ Use Your Voice +slug: /handbook/contributing-to-jan/feedback-channels +description: Feedback Channels/ Where to Get Help/ Use Your Voice +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- diff --git a/docs/docs/handbook/09-contributing-to-jan/README.mdx b/docs/docs/handbook/09-contributing-to-jan/README.mdx new file mode 100644 index 000000000..fa5e60515 --- /dev/null +++ b/docs/docs/handbook/09-contributing-to-jan/README.mdx @@ -0,0 +1,21 @@ +--- +title: Contributing to Jan +slug: /handbook/contributing-to-jan +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + handbook, + ] +--- + +import DocCardList from "@theme/DocCardList"; + + diff --git a/docs/docs/handbook/10-engineering.md b/docs/docs/handbook/10-engineering.md new file mode 100644 index 000000000..0b68d0949 --- /dev/null +++ b/docs/docs/handbook/10-engineering.md @@ -0,0 +1,146 @@ +--- +title: Engineering +description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. +keywords: + [ + Jan AI, + Jan, + ChatGPT alternative, + local AI, + private AI, + conversational AI, + no-subscription fee, + large language model, + ] +--- + +## Connecting to Rigs + +### Pritunl Setup + +1. **Install Pritunl**: [Download here](https://client.pritunl.com/#install) +2. **Import .ovpn file** +3. **VSCode**: Install the "Remote-SSH" extension for connection + +### Llama.cpp Setup + +1. **Clone Repo**: `git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp` +2. **Build**: + +```bash +mkdir build && cd build +cmake .. -DLLAMA_CUBLAS=ON -DLLAMA_CUDA_F16=ON -DLLAMA_CUDA_MMV_Y=8 +cmake --build . --config Release +``` + +3. **Download Model:** + +```bash +cd ../models && wget https://huggingface.co/TheBloke/Llama-2-7B-GGUF/resolve/main/llama-2-7b.Q8_0.gguf +``` + +4. **Run:** + +```bash +cd ../build/bin/ +./main -m ./models/llama-2-7b.Q8_0.gguf -p "Writing a thesis proposal can be done in 10 simple steps:\nStep 1:" -n 2048 -e -ngl 100 -t 48 +``` + +For the llama.cpp CLI arguments you can see here: + +| Short Option | Long Option | Param Value | Description | +| --------------- | --------------------- | ----------- | ---------------------------------------------------------------- | +| `-h` | `--help` | | Show this help message and exit | +| `-i` | `--interactive` | | Run in interactive mode | +| | `--interactive-first` | | Run in interactive mode and wait for input right away | +| | `-ins`, `--instruct` | | Run in instruction mode (use with Alpaca models) | +| `-r` | `--reverse-prompt` | `PROMPT` | Run in interactive mode and poll user input upon seeing `PROMPT` | +| | `--color` | | Colorise output to distinguish prompt and user input from | +| **Generations** | +| `-s` | `--seed` | `SEED` | Seed for random number generator | +| `-t` | `--threads` | `N` | Number of threads to use during computation | +| `-p` | `--prompt` | `PROMPT` | Prompt to start generation with | +| | `--random-prompt` | | Start with a randomized prompt | +| | `--in-prefix` | `STRING` | String to prefix user inputs with | +| `-f` | `--file` | `FNAME` | Prompt file to start generation | +| `-n` | `--n_predict` | `N` | Number of tokens to predict | +| | `--top_k` | `N` | Top-k sampling | +| | `--top_p` | `N` | Top-p sampling | +| | `--repeat_last_n` | `N` | Last n tokens to consider for penalize | +| | `--repeat_penalty` | `N` | Penalize repeat sequence of tokens | +| `-c` | `--ctx_size` | `N` | Size of the prompt context | +| | `--ignore-eos` | | Ignore end of stream token and continue generating | +| | `--memory_f32` | | Use `f32` instead of `f16` for memory key+value | +| | `--temp` | `N` | Temperature | +| | `--n_parts` | `N` | Number of model parts | +| `-b` | `--batch_size` | `N` | Batch size for prompt processing | +| | `--perplexity` | | Compute perplexity over the prompt | +| | `--keep` | | Number of tokens to keep from the initial prompt | +| | `--mlock` | | Force system to keep model in RAM | +| | `--mtest` | | Determine the maximum memory usage | +| | `--verbose-prompt` | | Print prompt before generation | +| `-m` | `--model` | `FNAME` | Model path | + +### TensorRT-LLM Setup + +#### **Docker and TensorRT-LLM build** + +> Note: You should run with admin permission to make sure everything works fine + +1. **Docker Image:** + +```bash +sudo make -C docker build +``` + +2. **Run Container:** + +```bash +sudo make -C docker run +``` + +Once in the container, TensorRT-LLM can be built from the source using the following: + +3. **Build:** + +```bash +# To build the TensorRT-LLM code. +python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt +# Deploy TensorRT-LLM in your environment. +pip install ./build/tensorrt_llm*.whl +``` + +> Note: You can specify the GPU architecture (e.g. for 4090 is ADA) for compilation time reduction +> The list of supported architectures can be found in the `CMakeLists.txt` file. + +```bash +python3 ./scripts/build_wheel.py --cuda_architectures "89-real;90-real" +``` + +#### Running TensorRT-LLM + +1. **Requirements:** + +```bash +pip install -r examples/bloom/requirements.txt && git lfs install +``` + +2. **Download Weights:** + +```bash +cd examples/llama && rm -rf ./llama/7B && mkdir -p ./llama/7B && git clone https://huggingface.co/NousResearch/Llama-2-7b-hf ./llama/7B +``` + +3. **Build Engine:** + +```bash +python build.py --model_dir ./llama/7B/ --dtype float16 --remove_input_padding --use_gpt_attention_plugin float16 --enable_context_fmha --use_gemm_plugin float16 --use_weight_only --output_dir ./llama/7B/trt_engines/weight_only/1-gpu/ +``` + +4. Run Inference: + +```bash +python3 run.py --max_output_len=2048 --tokenizer_dir ./llama/7B/ --engine_dir=./llama/7B/trt_engines/weight_only/1-gpu/ --input_text "Writing a thesis proposal can be done in 10 simple steps:\nStep 1:" +``` + +For the tensorRT-LLM CLI arguments, you can see in the `run.py`. diff --git a/docs/docs/handbook/onboarding.md b/docs/docs/handbook/11-onboarding.md similarity index 99% rename from docs/docs/handbook/onboarding.md rename to docs/docs/handbook/11-onboarding.md index 969a1dc07..921534dc1 100644 --- a/docs/docs/handbook/onboarding.md +++ b/docs/docs/handbook/11-onboarding.md @@ -1,6 +1,5 @@ --- title: Onboarding -slug: /handbook description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. keywords: [ diff --git a/docs/docs/handbook/product.md b/docs/docs/handbook/12-product.md similarity index 100% rename from docs/docs/handbook/product.md rename to docs/docs/handbook/12-product.md diff --git a/docs/docs/handbook/engineering.md b/docs/docs/handbook/engineering.md deleted file mode 100644 index ebd7e188c..000000000 --- a/docs/docs/handbook/engineering.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Engineering -description: Jan is a ChatGPT-alternative that runs on your own computer, with a local API server. -keywords: [Jan AI, Jan, ChatGPT alternative, local AI, private AI, conversational AI, no-subscription fee, large language model ] ---- - -## Connecting to Rigs - -### Pritunl Setup - -1. **Install Pritunl**: [Download here](https://client.pritunl.com/#install) -2. **Import .ovpn file** -3. **VSCode**: Install the "Remote-SSH" extension for connection - -### Llama.cpp Setup - -1. **Clone Repo**: `git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp` -2. **Build**: -```bash -mkdir build && cd build -cmake .. -DLLAMA_CUBLAS=ON -DLLAMA_CUDA_F16=ON -DLLAMA_CUDA_MMV_Y=8 -cmake --build . --config Release -``` -3. **Download Model:** -```bash -cd ../models && wget https://huggingface.co/TheBloke/Llama-2-7B-GGUF/resolve/main/llama-2-7b.Q8_0.gguf -``` -4. **Run:** -```bash -cd ../build/bin/ -./main -m ./models/llama-2-7b.Q8_0.gguf -p "Writing a thesis proposal can be done in 10 simple steps:\nStep 1:" -n 2048 -e -ngl 100 -t 48 -``` - -For the llama.cpp CLI arguments you can see here: - -| Short Option | Long Option | Param Value | Description | -|--------------|-----------------------|-------------|-------------| -| `-h` | `--help` | | Show this help message and exit | -| `-i` | `--interactive` | | Run in interactive mode | -| | `--interactive-first` | | Run in interactive mode and wait for input right away | -| | `-ins`, `--instruct` | | Run in instruction mode (use with Alpaca models) | -| `-r` | `--reverse-prompt` | `PROMPT` | Run in interactive mode and poll user input upon seeing `PROMPT` | -| | `--color` | | Colorise output to distinguish prompt and user input from | -|**Generations**| -| `-s` | `--seed` | `SEED` | Seed for random number generator | -| `-t` | `--threads` | `N` | Number of threads to use during computation | -| `-p` | `--prompt` | `PROMPT` | Prompt to start generation with | -| | `--random-prompt` | | Start with a randomized prompt | -| | `--in-prefix` | `STRING` | String to prefix user inputs with | -| `-f` | `--file` | `FNAME` | Prompt file to start generation | -| `-n` | `--n_predict` | `N` | Number of tokens to predict | -| | `--top_k` | `N` | Top-k sampling | -| | `--top_p` | `N` | Top-p sampling | -| | `--repeat_last_n` | `N` | Last n tokens to consider for penalize | -| | `--repeat_penalty` | `N` | Penalize repeat sequence of tokens | -| `-c` | `--ctx_size` | `N` | Size of the prompt context | -| | `--ignore-eos` | | Ignore end of stream token and continue generating | -| | `--memory_f32` | | Use `f32` instead of `f16` for memory key+value | -| | `--temp` | `N` | Temperature | -| | `--n_parts` | `N` | Number of model parts | -| `-b` | `--batch_size` | `N` | Batch size for prompt processing | -| | `--perplexity` | | Compute perplexity over the prompt | -| | `--keep` | | Number of tokens to keep from the initial prompt | -| | `--mlock` | | Force system to keep model in RAM | -| | `--mtest` | | Determine the maximum memory usage | -| | `--verbose-prompt` | | Print prompt before generation | -| `-m` | `--model` | `FNAME` | Model path | - - -### TensorRT-LLM Setup -#### **Docker and TensorRT-LLM build** - -> Note: You should run with admin permission to make sure everything works fine - -1. **Docker Image:** -```bash -sudo make -C docker build -``` -2. **Run Container:** -```bash -sudo make -C docker run -``` - -Once in the container, TensorRT-LLM can be built from the source using the following: - -3. **Build:** -```bash -# To build the TensorRT-LLM code. -python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt -# Deploy TensorRT-LLM in your environment. -pip install ./build/tensorrt_llm*.whl -``` - -> Note: You can specify the GPU architecture (e.g. for 4090 is ADA) for compilation time reduction -> The list of supported architectures can be found in the `CMakeLists.txt` file. - -```bash -python3 ./scripts/build_wheel.py --cuda_architectures "89-real;90-real" -``` - -#### Running TensorRT-LLM -1. **Requirements:** -```bash -pip install -r examples/bloom/requirements.txt && git lfs install -``` - -2. **Download Weights:** -```bash -cd examples/llama && rm -rf ./llama/7B && mkdir -p ./llama/7B && git clone https://huggingface.co/NousResearch/Llama-2-7b-hf ./llama/7B -``` - -3. **Build Engine:** -```bash -python build.py --model_dir ./llama/7B/ --dtype float16 --remove_input_padding --use_gpt_attention_plugin float16 --enable_context_fmha --use_gemm_plugin float16 --use_weight_only --output_dir ./llama/7B/trt_engines/weight_only/1-gpu/ -``` - -4. Run Inference: -```bash -python3 run.py --max_output_len=2048 --tokenizer_dir ./llama/7B/ --engine_dir=./llama/7B/trt_engines/weight_only/1-gpu/ --input_text "Writing a thesis proposal can be done in 10 simple steps:\nStep 1:" -``` - -For the tensorRT-LLM CLI arguments, you can see in the `run.py`. \ No newline at end of file diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 12f5f8db6..f65074bbe 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -61,6 +61,21 @@ const config = { enableInDevelopment: false, // optional }, ], + [ + "@docusaurus/plugin-client-redirects", + { + redirects: [ + { + from: "/troubleshooting/failed-to-fetch", + to: "/troubleshooting/somethings-amiss", + }, + { + from: "/guides/troubleshooting/gpu-not-used/", + to: "/troubleshooting/gpu-not-used", + }, + ], + }, + ], ], // The classic preset will relay each option entry to the respective sub plugin/theme. @@ -136,6 +151,14 @@ const config = { autoCollapseCategories: false, }, }, + // Agolia DocSearch + algolia: { + appId: process.env.ALGOLIA_APP_ID || "XXX", + apiKey: process.env.ALGOLIA_API_KEY || "XXX", + indexName: "jan", + insights: true, + debug: false, + }, // SEO Docusarus metadata: [ { diff --git a/docs/package.json b/docs/package.json index 246398992..2764786ba 100644 --- a/docs/package.json +++ b/docs/package.json @@ -14,7 +14,10 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { + "@docsearch/js": "3", + "@docsearch/react": "3", "@docusaurus/core": "^3.0.0", + "@docusaurus/plugin-client-redirects": "^3.0.0", "@docusaurus/plugin-content-docs": "^3.0.0", "@docusaurus/preset-classic": "^3.0.0", "@docusaurus/theme-live-codeblock": "^3.0.0", diff --git a/docs/sidebars.js b/docs/sidebars.js index c81d6b663..a50c9ed49 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -59,15 +59,9 @@ const sidebars = { id: "about/about", }, { - type: "category", + type: "doc", label: "Company Handbook", - collapsible: true, - collapsed: false, - items: [ - "handbook/onboarding", - "handbook/product", - "handbook/engineering", - ], + id: "handbook/overview", }, { type: "link", @@ -75,6 +69,13 @@ const sidebars = { href: "https://janai.bamboohr.com/careers", }, ], + + handbookSidebar: [ + { + type: "autogenerated", + dirName: "handbook", + }, + ], }; module.exports = sidebars; diff --git a/docs/src/containers/DownloadApp/index.js b/docs/src/containers/DownloadApp/index.js index 43b27a14c..d1b586698 100644 --- a/docs/src/containers/DownloadApp/index.js +++ b/docs/src/containers/DownloadApp/index.js @@ -22,7 +22,12 @@ const systemsTemplate = [ fileFormat: "{appname}-win-x64-{tag}.exe", }, { - name: "Linux", + name: "Linux (AppImage)", + logo: FaLinux, + fileFormat: "{appname}-linux-x86_64-{tag}.AppImage", + }, + { + name: "Linux (deb)", logo: FaLinux, fileFormat: "{appname}-linux-amd64-{tag}.deb", }, @@ -44,7 +49,7 @@ export default function DownloadApp() { const extractAppName = (fileName) => { // Extract appname using a regex that matches the provided file formats - const regex = /^(.*?)-(?:mac|win|linux)-(?:arm64|x64|amd64)-.*$/; + const regex = /^(.*?)-(?:mac|win|linux)-(?:arm64|x64|amd64|x86_64)-.*$/; const match = fileName.match(regex); return match ? match[1] : null; }; diff --git a/docs/src/containers/Elements/dropdown.js b/docs/src/containers/Elements/dropdown.js index 4d0781491..91115c811 100644 --- a/docs/src/containers/Elements/dropdown.js +++ b/docs/src/containers/Elements/dropdown.js @@ -22,10 +22,15 @@ const systemsTemplate = [ fileFormat: "{appname}-win-x64-{tag}.exe", }, { - name: "Download for Linux", + name: "Download for Linux (AppImage)", + logo: FaLinux, + fileFormat: "{appname}-linux-x86_64-{tag}.AppImage", + }, + { + name: "Download for Linux (deb)", logo: FaLinux, fileFormat: "{appname}-linux-amd64-{tag}.deb", - }, + } ]; function classNames(...classes) { @@ -49,7 +54,7 @@ export default function Dropdown() { const extractAppName = (fileName) => { // Extract appname using a regex that matches the provided file formats - const regex = /^(.*?)-(?:mac|win|linux)-(?:arm64|x64|amd64)-.*$/; + const regex = /^(.*?)-(?:mac|win|linux)-(?:arm64|x64|x86_64|amd64)-.*$/; const match = fileName.match(regex); return match ? match[1] : null; }; diff --git a/docs/yarn.lock b/docs/yarn.lock index 47b51555e..339364c21 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -29,114 +29,114 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== -"@algolia/cache-browser-local-storage@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.20.0.tgz#357318242fc542ffce41d6eb5b4a9b402921b0bb" - integrity sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ== +"@algolia/cache-browser-local-storage@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz#14b6dc9abc9e3a304a5fffb063d15f30af1032d1" + integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== dependencies: - "@algolia/cache-common" "4.20.0" + "@algolia/cache-common" "4.22.1" -"@algolia/cache-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.20.0.tgz#ec52230509fce891091ffd0d890618bcdc2fa20d" - integrity sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ== +"@algolia/cache-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.22.1.tgz#c625dff4bc2a74e79f9aed67b4e053b0ef1b3ec1" + integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== -"@algolia/cache-in-memory@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.20.0.tgz#5f18d057bd6b3b075022df085c4f83bcca4e3e67" - integrity sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg== +"@algolia/cache-in-memory@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz#858a3d887f521362e87d04f3943e2810226a0d71" + integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== dependencies: - "@algolia/cache-common" "4.20.0" + "@algolia/cache-common" "4.22.1" -"@algolia/client-account@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.20.0.tgz#23ce0b4cffd63100fb7c1aa1c67a4494de5bd645" - integrity sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q== +"@algolia/client-account@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.22.1.tgz#a7fb8b66b9a4f0a428e1426b2561144267d76d43" + integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/transporter" "4.20.0" + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/transporter" "4.22.1" -"@algolia/client-analytics@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.20.0.tgz#0aa6bef35d3a41ac3991b3f46fcd0bf00d276fa9" - integrity sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug== +"@algolia/client-analytics@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.22.1.tgz#506558740b4d49b1b1e3393861f729a8ce921851" + integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" + "@algolia/client-common" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" -"@algolia/client-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.20.0.tgz#ca60f04466515548651c4371a742fbb8971790ef" - integrity sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ== +"@algolia/client-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.22.1.tgz#042b19c1b6157c485fa1b551349ab313944d2b05" + integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== dependencies: - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" -"@algolia/client-personalization@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.20.0.tgz#ca81308e8ad0db3b27458b78355f124f29657181" - integrity sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ== +"@algolia/client-personalization@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.22.1.tgz#ff088d797648224fb582e9fe5828f8087835fa3d" + integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" -"@algolia/client-search@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.20.0.tgz#3bcce817ca6caedc835e0eaf6f580e02ee7c3e15" - integrity sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg== +"@algolia/client-search@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.22.1.tgz#508cc6ab3d1f4e9c02735a630d4dff6fbb8514a2" + integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== dependencies: - "@algolia/client-common" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/transporter" "4.20.0" + "@algolia/client-common" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/transporter" "4.22.1" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/logger-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.20.0.tgz#f148ddf67e5d733a06213bebf7117cb8a651ab36" - integrity sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ== +"@algolia/logger-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.22.1.tgz#79cf4cd295de0377a94582c6aaac59b1ded731d9" + integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== -"@algolia/logger-console@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.20.0.tgz#ac443d27c4e94357f3063e675039cef0aa2de0a7" - integrity sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA== +"@algolia/logger-console@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.22.1.tgz#0355345f6940f67aaa78ae9b81c06e44e49f2336" + integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== dependencies: - "@algolia/logger-common" "4.20.0" + "@algolia/logger-common" "4.22.1" -"@algolia/requester-browser-xhr@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.20.0.tgz#db16d0bdef018b93b51681d3f1e134aca4f64814" - integrity sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw== +"@algolia/requester-browser-xhr@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz#f04df6fe9690a071b267c77d26b83a3be9280361" + integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== dependencies: - "@algolia/requester-common" "4.20.0" + "@algolia/requester-common" "4.22.1" -"@algolia/requester-common@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.20.0.tgz#65694b2263a8712b4360fef18680528ffd435b5c" - integrity sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng== +"@algolia/requester-common@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.22.1.tgz#27be35f3718aafcb6b388ff9c3aa2defabd559ff" + integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== -"@algolia/requester-node-http@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.20.0.tgz#b52b182b52b0b16dec4070832267d484a6b1d5bb" - integrity sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng== +"@algolia/requester-node-http@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz#589a6fa828ad0f325e727a6fcaf4e1a2343cc62b" + integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== dependencies: - "@algolia/requester-common" "4.20.0" + "@algolia/requester-common" "4.22.1" -"@algolia/transporter@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.20.0.tgz#7e5b24333d7cc9a926b2f6a249f87c2889b944a9" - integrity sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg== +"@algolia/transporter@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.22.1.tgz#8843841b857dc021668f31647aa557ff19cd9cb1" + integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== dependencies: - "@algolia/cache-common" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/requester-common" "4.20.0" + "@algolia/cache-common" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/requester-common" "4.22.1" "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -159,38 +159,38 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== "@babel/core@^7.19.6", "@babel/core@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.5.tgz#6e23f2acbcb77ad283c5ed141f824fd9f70101c7" - integrity sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.5" - "@babel/parser" "^7.23.5" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.3", "@babel/generator@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.5.tgz#17d0a1ea6b62f351d281350a5f80b87a810c4755" - integrity sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA== +"@babel/generator@^7.23.3", "@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== dependencies: - "@babel/types" "^7.23.5" + "@babel/types" "^7.23.6" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -209,21 +209,21 @@ dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz#2a8792357008ae9ce8c0f2b78b9f646ac96b314b" - integrity sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A== +"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz#b2e6826e0e20d337143655198b79d58fdc9bd43d" + integrity sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.20" @@ -244,10 +244,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz#64df615451cb30e94b59a9696022cffac9a10088" + integrity sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -375,14 +375,14 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.5.tgz#52f522840df8f1a848d06ea6a79b79eefa72401e" - integrity sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg== +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.5" - "@babel/types" "^7.23.5" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" "@babel/highlight@^7.23.4": version "7.23.4" @@ -393,10 +393,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.5.tgz#37dee97c4752af148e1d38c34b856b2507660563" - integrity sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ== +"@babel/parser@^7.22.15", "@babel/parser@^7.22.7", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": version "7.23.3" @@ -414,10 +414,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-optional-chaining" "^7.23.3" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -575,10 +575,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz#3aa0b4f2fa3788b5226ef9346cf6d16ec61f99cd" + integrity sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" @@ -625,16 +625,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz#e7a75f815e0c534cc4c9a39c56636c84fc0d64f2" - integrity sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg== +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" @@ -694,12 +693,13 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-function-name@^7.23.3": version "7.23.3" @@ -930,15 +930,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.22.9": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz#5132b388580002fc5cb7c84eccfb968acdc231cb" - integrity sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw== + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz#52bbd20054855beb9deae3bee9ceb05289c343e6" + integrity sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw== dependencies: "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.7" + babel-plugin-polyfill-corejs3 "^0.8.7" + babel-plugin-polyfill-regenerator "^0.5.4" semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.23.3": @@ -978,12 +978,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.23.3": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.5.tgz#83da13ef62a1ebddf2872487527094b31c9adb84" - integrity sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA== + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" + integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.5" + "@babel/helper-create-class-features-plugin" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.23.3" @@ -1019,17 +1019,17 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.22.9": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.5.tgz#350a3aedfa9f119ad045b068886457e895ba0ca1" - integrity sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A== + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.8.tgz#7d6f8171ea7c221ecd28059e65ad37c20e441e3e" + integrity sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA== dependencies: "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -1050,13 +1050,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.4" + "@babel/plugin-transform-async-generator-functions" "^7.23.7" "@babel/plugin-transform-async-to-generator" "^7.23.3" "@babel/plugin-transform-block-scoped-functions" "^7.23.3" "@babel/plugin-transform-block-scoping" "^7.23.4" "@babel/plugin-transform-class-properties" "^7.23.3" "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.5" + "@babel/plugin-transform-classes" "^7.23.8" "@babel/plugin-transform-computed-properties" "^7.23.3" "@babel/plugin-transform-destructuring" "^7.23.3" "@babel/plugin-transform-dotall-regex" "^7.23.3" @@ -1064,7 +1064,7 @@ "@babel/plugin-transform-dynamic-import" "^7.23.4" "@babel/plugin-transform-exponentiation-operator" "^7.23.3" "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-for-of" "^7.23.6" "@babel/plugin-transform-function-name" "^7.23.3" "@babel/plugin-transform-json-strings" "^7.23.4" "@babel/plugin-transform-literals" "^7.23.3" @@ -1098,9 +1098,9 @@ "@babel/plugin-transform-unicode-regex" "^7.23.3" "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" + babel-plugin-polyfill-corejs2 "^0.4.7" + babel-plugin-polyfill-corejs3 "^0.8.7" + babel-plugin-polyfill-regenerator "^0.5.4" core-js-compat "^3.31.0" semver "^6.3.1" @@ -1142,17 +1142,17 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.22.6": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.5.tgz#818778beea4f23d40b77b5ad213894404c14f3f3" - integrity sha512-7+ziVclejQTLYhXl+Oi1f6gTGD1XDCeLa4R472TNGQxb08zbEJ0OdNoh5Piz+57Ltmui6xR88BXR4gS3/Toslw== + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.8.tgz#b8aa3d47570bdd08fed77fdfd69542118af0df26" + integrity sha512-2ZzmcDugdm0/YQKFVYsXiwUN7USPX8PM7cytpb4PFl87fM+qYPSvTZX//8tyeJB1j0YDmafBJEbl5f8NfLyuKw== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.22.6", "@babel/runtime@^7.23.5", "@babel/runtime@^7.8.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.5.tgz#11edb98f8aeec529b82b211028177679144242db" - integrity sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w== + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" + integrity sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw== dependencies: regenerator-runtime "^0.14.0" @@ -1165,26 +1165,26 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.5.tgz#f546bf9aba9ef2b042c0e00d245990c15508e7ec" - integrity sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w== +"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.5" + "@babel/generator" "^7.23.6" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.5" - "@babel/types" "^7.23.5" - debug "^4.1.0" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.5", "@babel/types@^7.4.4": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.5.tgz#48d730a00c95109fa4393352705954d74fb5b602" - integrity sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w== +"@babel/types@^7.20.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.4.4": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1210,7 +1210,15 @@ resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.5.2.tgz#610f47b48814ca94041df969d9fcc47b91fc5aac" integrity sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA== -"@docsearch/react@^3.5.2": +"@docsearch/js@3": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.5.2.tgz#a11cb2e7e62890e9e940283fed6972ecf632629d" + integrity sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg== + dependencies: + "@docsearch/react" "3.5.2" + preact "^10.0.0" + +"@docsearch/react@3", "@docsearch/react@3.5.2", "@docsearch/react@^3.5.2": version "3.5.2" resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.5.2.tgz#2e6bbee00eb67333b64906352734da6aef1232b9" integrity sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng== @@ -1220,10 +1228,10 @@ "@docsearch/css" "3.5.2" algoliasearch "^4.19.1" -"@docusaurus/core@3.0.1", "@docusaurus/core@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.0.1.tgz#ad9a66b20802ea81b25e65db75d4ca952eda7e01" - integrity sha512-CXrLpOnW+dJdSv8M5FAJ3JBwXtL6mhUWxFA8aS0ozK6jBG/wgxERk5uvH28fCeFxOGbAT9v1e9dOMo1X2IEVhQ== +"@docusaurus/core@3.1.0", "@docusaurus/core@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-3.1.0.tgz#b66e7eaf867c1f44738d725d217a1c0e879629d7" + integrity sha512-GWudMGYA9v26ssbAWJNfgeDZk+lrudUTclLPRsmxiknEBk7UMp7Rglonhqbsf3IKHOyHkMU4Fr5jFyg5SBx9jQ== dependencies: "@babel/core" "^7.23.3" "@babel/generator" "^7.23.3" @@ -1235,13 +1243,13 @@ "@babel/runtime" "^7.22.6" "@babel/runtime-corejs3" "^7.22.6" "@babel/traverse" "^7.22.8" - "@docusaurus/cssnano-preset" "3.0.1" - "@docusaurus/logger" "3.0.1" - "@docusaurus/mdx-loader" "3.0.1" + "@docusaurus/cssnano-preset" "3.1.0" + "@docusaurus/logger" "3.1.0" + "@docusaurus/mdx-loader" "3.1.0" "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-common" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-common" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" "@slorber/static-site-generator-webpack-plugin" "^4.0.7" "@svgr/webpack" "^6.5.1" autoprefixer "^10.4.14" @@ -1295,34 +1303,34 @@ webpack-merge "^5.9.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.0.1.tgz#22fbf2e97389e338747864baf011743846e8fd26" - integrity sha512-wjuXzkHMW+ig4BD6Ya1Yevx9UJadO4smNZCEljqBoQfIQrQskTswBs7lZ8InHP7mCt273a/y/rm36EZhqJhknQ== +"@docusaurus/cssnano-preset@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.0.tgz#b3fe7134cc4d0c1950eeb1c940089a190591ad4e" + integrity sha512-ned7qsgCqSv/e7KyugFNroAfiszuxLwnvMW7gmT2Ywxb/Nyt61yIw7KHyAZCMKglOalrqnYA4gMhLUCK/mVePA== dependencies: cssnano-preset-advanced "^5.3.10" postcss "^8.4.26" postcss-sort-media-queries "^4.4.1" tslib "^2.6.0" -"@docusaurus/logger@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.0.1.tgz#06f512eef6c6ae4e2da63064257e01b1cdc41a82" - integrity sha512-I5L6Nk8OJzkVA91O2uftmo71LBSxe1vmOn9AMR6JRCzYeEBrqneWMH02AqMvjJ2NpMiviO+t0CyPjyYV7nxCWQ== +"@docusaurus/logger@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-3.1.0.tgz#eef6475c2d59a3ae7e138ac1f60007d6fafd76b0" + integrity sha512-p740M+HCst1VnKKzL60Hru9xfG4EUYJDarjlEC4hHeBy9+afPmY3BNPoSHx9/8zxuYfUlv/psf7I9NvRVdmdvg== dependencies: chalk "^4.1.2" tslib "^2.6.0" -"@docusaurus/mdx-loader@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.0.1.tgz#89f221e5bcc570983fd61d7ab56d6fbe36810b59" - integrity sha512-ldnTmvnvlrONUq45oKESrpy+lXtbnTcTsFkOTIDswe5xx5iWJjt6eSa0f99ZaWlnm24mlojcIGoUWNCS53qVlQ== +"@docusaurus/mdx-loader@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-3.1.0.tgz#61d562ff442f62ef04cc31d3f0d5865a8dd390e4" + integrity sha512-D7onDz/3mgBonexWoQXPw3V2E5Bc4+jYRf9gGUUK+KoQwU8xMDaDkUUfsr7t6UBa/xox9p5+/3zwLuXOYMzGSg== dependencies: "@babel/parser" "^7.22.7" "@babel/traverse" "^7.22.8" - "@docusaurus/logger" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/logger" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" "@mdx-js/mdx" "^3.0.0" "@slorber/remark-comment" "^1.0.0" escape-html "^1.0.3" @@ -1345,13 +1353,13 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@3.0.1", "@docusaurus/module-type-aliases@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.0.1.tgz#d45990fe377d7ffaa68841cf89401188a5d65293" - integrity sha512-DEHpeqUDsLynl3AhQQiO7AbC7/z/lBra34jTcdYuvp9eGm01pfH1wTVq8YqWZq6Jyx0BgcVl/VJqtE9StRd9Ag== +"@docusaurus/module-type-aliases@3.1.0", "@docusaurus/module-type-aliases@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.0.tgz#f3451702f143557bfde0502287713a08086a0415" + integrity sha512-XUl7Z4PWlKg4l6KF05JQ3iDHQxnPxbQUqTNKvviHyuHdlalOFv6qeDAm7IbzyQPJD5VA6y4dpRbTWSqP9ClwPg== dependencies: "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "3.0.1" + "@docusaurus/types" "3.1.0" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1359,18 +1367,33 @@ react-helmet-async "*" react-loadable "npm:@docusaurus/react-loadable@5.5.2" -"@docusaurus/plugin-content-blog@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.0.1.tgz#dee6147187c2d8b634252444d60312d12c9571a6" - integrity sha512-cLOvtvAyaMQFLI8vm4j26svg3ktxMPSXpuUJ7EERKoGbfpJSsgtowNHcRsaBVmfuCsRSk1HZ/yHBsUkTmHFEsg== +"@docusaurus/plugin-client-redirects@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.1.0.tgz#1d107a319d83da24edac0a672681b098129eee8f" + integrity sha512-CuFbdciMGvtGYiIPSOpj5idsHOQUcqZWTLCmZV3ePhviekm4dRZm1+QK/BxigmSTL5ICJMGbtOQnz7bgFSWHqg== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/logger" "3.0.1" - "@docusaurus/mdx-loader" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-common" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/logger" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-common" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" + eta "^2.2.0" + fs-extra "^11.1.1" + lodash "^4.17.21" + tslib "^2.6.0" + +"@docusaurus/plugin-content-blog@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.0.tgz#d2102e9286486e526dbc0dfc741e53dc5cee0ff0" + integrity sha512-iMa6WBaaEdYuxckvJtLcq/HQdlA4oEbCXf/OFfsYJCCULcDX7GDZpKxLF3X1fLsax3sSm5bmsU+CA0WD+R1g3A== + dependencies: + "@docusaurus/core" "3.1.0" + "@docusaurus/logger" "3.1.0" + "@docusaurus/mdx-loader" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-common" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" cheerio "^1.0.0-rc.12" feed "^4.2.2" fs-extra "^11.1.1" @@ -1382,18 +1405,18 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-docs@3.0.1", "@docusaurus/plugin-content-docs@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.0.1.tgz#d9b1884562186573d5c4521ac3546b68512c1126" - integrity sha512-dRfAOA5Ivo+sdzzJGXEu33yAtvGg8dlZkvt/NEJ7nwi1F2j4LEdsxtfX2GKeETB2fP6XoGNSQnFXqa2NYGrHFg== +"@docusaurus/plugin-content-docs@3.1.0", "@docusaurus/plugin-content-docs@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.0.tgz#55d7bdb8e14f854ea6c6e256f1b51b8c17963c19" + integrity sha512-el5GxhT8BLrsWD0qGa8Rq+Ttb/Ni6V3DGT2oAPio0qcs/mUAxeyXEAmihkvmLCnAgp6xD27Ce7dISZ5c6BXeqA== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/logger" "3.0.1" - "@docusaurus/mdx-loader" "3.0.1" - "@docusaurus/module-type-aliases" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/logger" "3.1.0" + "@docusaurus/mdx-loader" "3.1.0" + "@docusaurus/module-type-aliases" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" "@types/react-router-config" "^5.0.7" combine-promises "^1.1.0" fs-extra "^11.1.1" @@ -1403,96 +1426,96 @@ utility-types "^3.10.0" webpack "^5.88.1" -"@docusaurus/plugin-content-pages@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.0.1.tgz#27e6424c77173f867760efe53f848bbab8849ea6" - integrity sha512-oP7PoYizKAXyEttcvVzfX3OoBIXEmXTMzCdfmC4oSwjG4SPcJsRge3mmI6O8jcZBgUPjIzXD21bVGWEE1iu8gg== +"@docusaurus/plugin-content-pages@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.0.tgz#cdb73c804ded307e81ceea39874dc0bb540c2dc4" + integrity sha512-9gntYQFpk+93+Xl7gYczJu8I9uWoyRLnRwS0+NUFcs9iZtHKsdqKWPRrONC9elfN3wJ9ORwTbcVzsTiB8jvYlg== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/mdx-loader" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/mdx-loader" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" fs-extra "^11.1.1" tslib "^2.6.0" webpack "^5.88.1" -"@docusaurus/plugin-debug@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.0.1.tgz#886b5dd03c066e970484ca251c1b79613df90700" - integrity sha512-09dxZMdATky4qdsZGzhzlUvvC+ilQ2hKbYF+wez+cM2mGo4qHbv8+qKXqxq0CQZyimwlAOWQLoSozIXU0g0i7g== +"@docusaurus/plugin-debug@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-3.1.0.tgz#545872bc8f9cd697d9f1d6c695f8a1674bfc149c" + integrity sha512-AbvJwCVRbmQ8w9d8QXbF4Iq/ui0bjPZNYFIhtducGFnm2YQRN1mraK8mCEQb0Aq0T8SqRRvSfC/far4n/s531w== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils" "3.1.0" fs-extra "^11.1.1" react-json-view-lite "^1.2.0" tslib "^2.6.0" -"@docusaurus/plugin-google-analytics@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.0.1.tgz#ec69902131ea3aad8b062eeb1d17bf0962986f80" - integrity sha512-jwseSz1E+g9rXQwDdr0ZdYNjn8leZBnKPjjQhMBEiwDoenL3JYFcNW0+p0sWoVF/f2z5t7HkKA+cYObrUh18gg== +"@docusaurus/plugin-google-analytics@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.0.tgz#3035eace3121db16aec7c10852ebb4cd860f4434" + integrity sha512-zvUOMzu9Uhz0ciqnSbtnp/5i1zEYlzarQrOXG90P3Is3efQI43p2YLW/rzSGdLb5MfQo2HvKT6Q5+tioMO045Q== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" tslib "^2.6.0" -"@docusaurus/plugin-google-gtag@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.0.1.tgz#bb5526377d3a324ebec235127846fda386562b05" - integrity sha512-UFTDvXniAWrajsulKUJ1DB6qplui1BlKLQZjX4F7qS/qfJ+qkKqSkhJ/F4VuGQ2JYeZstYb+KaUzUzvaPK1aRQ== +"@docusaurus/plugin-google-gtag@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.0.tgz#2f4040da81d36bfc6324abc1a12b258e6c7f202a" + integrity sha512-0txshvaY8qIBdkk2UATdVcfiCLGq3KAUfuRQD2cRNgO39iIf4/ihQxH9NXcRTwKs4Q5d9yYHoix3xT6pFuEYOg== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" "@types/gtag.js" "^0.0.12" tslib "^2.6.0" -"@docusaurus/plugin-google-tag-manager@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.0.1.tgz#4e36d13279cf90c2614b62438aa1109dd4696ec8" - integrity sha512-IPFvuz83aFuheZcWpTlAdiiX1RqWIHM+OH8wS66JgwAKOiQMR3+nLywGjkLV4bp52x7nCnwhNk1rE85Cpy/CIw== +"@docusaurus/plugin-google-tag-manager@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.0.tgz#4c026e9f65468a332326770f95ccd9c6e12d564b" + integrity sha512-zOWPEi8kMyyPtwG0vhyXrdbLs8fIZmY5vlbi9lUU+v8VsroO5iHmfR2V3SMsrsfOanw5oV/ciWqbxezY00qEZg== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" tslib "^2.6.0" -"@docusaurus/plugin-sitemap@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.0.1.tgz#ab55857e90d4500f892e110b30e4bc3289202bd4" - integrity sha512-xARiWnjtVvoEniZudlCq5T9ifnhCu/GAZ5nA7XgyLfPcNpHQa241HZdsTlLtVcecEVVdllevBKOp7qknBBaMGw== +"@docusaurus/plugin-sitemap@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.0.tgz#9d9dbb4d87e6dc46ae9321badf6ac7cd9aa96b23" + integrity sha512-TkR5vGBpUooEB9SoW42thahqqwKzfHrQQhkB+JrEGERsl4bKODSuJNle4aA4h6LSkg4IyfXOW8XOI0NIPWb9Cg== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/logger" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-common" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/logger" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-common" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" fs-extra "^11.1.1" sitemap "^7.1.1" tslib "^2.6.0" "@docusaurus/preset-classic@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.0.1.tgz#d363ac837bba967095ed2a896d13c54f3717d6b5" - integrity sha512-il9m9xZKKjoXn6h0cRcdnt6wce0Pv1y5t4xk2Wx7zBGhKG1idu4IFHtikHlD0QPuZ9fizpXspXcTzjL5FXc1Gw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-3.1.0.tgz#ca67d5e416c211b4c23f0fb01f0e3e36b759dfa0" + integrity sha512-xGLQRFmmT9IinAGUDVRYZ54Ys28USNbA3OTXQXnSJLPr1rCY7CYnHI4XoOnKWrNnDiAI4ruMzunXWyaElUYCKQ== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/plugin-content-blog" "3.0.1" - "@docusaurus/plugin-content-docs" "3.0.1" - "@docusaurus/plugin-content-pages" "3.0.1" - "@docusaurus/plugin-debug" "3.0.1" - "@docusaurus/plugin-google-analytics" "3.0.1" - "@docusaurus/plugin-google-gtag" "3.0.1" - "@docusaurus/plugin-google-tag-manager" "3.0.1" - "@docusaurus/plugin-sitemap" "3.0.1" - "@docusaurus/theme-classic" "3.0.1" - "@docusaurus/theme-common" "3.0.1" - "@docusaurus/theme-search-algolia" "3.0.1" - "@docusaurus/types" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/plugin-content-blog" "3.1.0" + "@docusaurus/plugin-content-docs" "3.1.0" + "@docusaurus/plugin-content-pages" "3.1.0" + "@docusaurus/plugin-debug" "3.1.0" + "@docusaurus/plugin-google-analytics" "3.1.0" + "@docusaurus/plugin-google-gtag" "3.1.0" + "@docusaurus/plugin-google-tag-manager" "3.1.0" + "@docusaurus/plugin-sitemap" "3.1.0" + "@docusaurus/theme-classic" "3.1.0" + "@docusaurus/theme-common" "3.1.0" + "@docusaurus/theme-search-algolia" "3.1.0" + "@docusaurus/types" "3.1.0" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -1502,23 +1525,23 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.0.1.tgz#3ba4dc77553d2c1608e433c0d01bed7c6db14eb9" - integrity sha512-XD1FRXaJiDlmYaiHHdm27PNhhPboUah9rqIH0lMpBt5kYtsGjJzhqa27KuZvHLzOP2OEpqd2+GZ5b6YPq7Q05Q== +"@docusaurus/theme-classic@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-3.1.0.tgz#6ee68bf4d4db53c8d9b18d4866512abadb00a802" + integrity sha512-/+jMl2Z9O8QQxves5AtHdt91gWsEZFgOV3La/6eyKEd7QLqQUtM5fxEJ40rq9NKYjqCd1HzZ9egIMeJoWwillw== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/mdx-loader" "3.0.1" - "@docusaurus/module-type-aliases" "3.0.1" - "@docusaurus/plugin-content-blog" "3.0.1" - "@docusaurus/plugin-content-docs" "3.0.1" - "@docusaurus/plugin-content-pages" "3.0.1" - "@docusaurus/theme-common" "3.0.1" - "@docusaurus/theme-translations" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-common" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/mdx-loader" "3.1.0" + "@docusaurus/module-type-aliases" "3.1.0" + "@docusaurus/plugin-content-blog" "3.1.0" + "@docusaurus/plugin-content-docs" "3.1.0" + "@docusaurus/plugin-content-pages" "3.1.0" + "@docusaurus/theme-common" "3.1.0" + "@docusaurus/theme-translations" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-common" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" "@mdx-js/react" "^3.0.0" clsx "^2.0.0" copy-text-to-clipboard "^3.2.0" @@ -1533,18 +1556,18 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-common@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.0.1.tgz#29a5bcb286296a52bc10afa5308e360cbed6b49c" - integrity sha512-cr9TOWXuIOL0PUfuXv6L5lPlTgaphKP+22NdVBOYah5jSq5XAAulJTjfe+IfLsEG4L7lJttLbhW7LXDFSAI7Ag== +"@docusaurus/theme-common@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-3.1.0.tgz#d176af1d0fc8ea27fea0afb298157f9a75256336" + integrity sha512-YGwEFALLIbF5ocW/Fy6Ae7tFWUOugEN3iwxTx8UkLAcLqYUboDSadesYtVBmRCEB4FVA2qoP7YaW3lu3apUPPw== dependencies: - "@docusaurus/mdx-loader" "3.0.1" - "@docusaurus/module-type-aliases" "3.0.1" - "@docusaurus/plugin-content-blog" "3.0.1" - "@docusaurus/plugin-content-docs" "3.0.1" - "@docusaurus/plugin-content-pages" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-common" "3.0.1" + "@docusaurus/mdx-loader" "3.1.0" + "@docusaurus/module-type-aliases" "3.1.0" + "@docusaurus/plugin-content-blog" "3.1.0" + "@docusaurus/plugin-content-docs" "3.1.0" + "@docusaurus/plugin-content-pages" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-common" "3.1.0" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1555,14 +1578,14 @@ utility-types "^3.10.0" "@docusaurus/theme-live-codeblock@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-3.0.1.tgz#55624fba479da9816419f80b40d070b67cab364a" - integrity sha512-1NfV6pi7uoFTq7Yj3Rc9NBWMVj3OZbwWxV5tcCY/TNvlJOWerSNZQIz0oF2cqU7QPfw/ZOCPz5imM1uQ4pKN2g== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-live-codeblock/-/theme-live-codeblock-3.1.0.tgz#f25ae96f06b4a669a54b59a842c59148ccd137f8" + integrity sha512-wJMa5iIA9LwJxBoPu/bCOiffdOggeU2VfGmu9l83gzLQ2l3CL2zUrdOcZzeU3FqFCns5mUSZfDZXmZp2tbWPiw== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/theme-common" "3.0.1" - "@docusaurus/theme-translations" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/theme-common" "3.1.0" + "@docusaurus/theme-translations" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" "@philpl/buble" "^0.19.7" clsx "^2.0.0" fs-extra "^11.1.1" @@ -1570,31 +1593,31 @@ tslib "^2.6.0" "@docusaurus/theme-mermaid@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.0.1.tgz#a8e3db9f8ccb680f0a4359e2b0f6427f52223c15" - integrity sha512-jquSDnZfazABnC5i+02GzRIvufXKruKgvbYkQjKbI7/LWo0XvBs0uKAcCDGgHhth0t/ON5+Sn27joRfpeSk3Lw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-mermaid/-/theme-mermaid-3.1.0.tgz#1e7f8e96e21b5d180043f8f7793f1b38045c5806" + integrity sha512-63y08fvRWIe9satRV1e/Dps9he+sPjQ+kwl4ccQQEzkM2nxeAgWwk8WzpbVhm1Pf02N/11y0C6FcvFqn4dERHA== dependencies: - "@docusaurus/core" "3.0.1" - "@docusaurus/module-type-aliases" "3.0.1" - "@docusaurus/theme-common" "3.0.1" - "@docusaurus/types" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/module-type-aliases" "3.1.0" + "@docusaurus/theme-common" "3.1.0" + "@docusaurus/types" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" mermaid "^10.4.0" tslib "^2.6.0" -"@docusaurus/theme-search-algolia@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.0.1.tgz#d8fb6bddca8d8355e4706c4c7d30d3b800217cf4" - integrity sha512-DDiPc0/xmKSEdwFkXNf1/vH1SzJPzuJBar8kMcBbDAZk/SAmo/4lf6GU2drou4Ae60lN2waix+jYWTWcJRahSA== +"@docusaurus/theme-search-algolia@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.0.tgz#3cdb1f0e8d15698a60110856ca5a06f10d3b049d" + integrity sha512-8cJH0ZhPsEDjq3jR3I+wHmWzVY2bXMQJ59v2QxUmsTZxbWA4u+IzccJMIJx4ooFl9J6iYynwYsFuHxyx/KUmfQ== dependencies: "@docsearch/react" "^3.5.2" - "@docusaurus/core" "3.0.1" - "@docusaurus/logger" "3.0.1" - "@docusaurus/plugin-content-docs" "3.0.1" - "@docusaurus/theme-common" "3.0.1" - "@docusaurus/theme-translations" "3.0.1" - "@docusaurus/utils" "3.0.1" - "@docusaurus/utils-validation" "3.0.1" + "@docusaurus/core" "3.1.0" + "@docusaurus/logger" "3.1.0" + "@docusaurus/plugin-content-docs" "3.1.0" + "@docusaurus/theme-common" "3.1.0" + "@docusaurus/theme-translations" "3.1.0" + "@docusaurus/utils" "3.1.0" + "@docusaurus/utils-validation" "3.1.0" algoliasearch "^4.18.0" algoliasearch-helper "^3.13.3" clsx "^2.0.0" @@ -1604,19 +1627,20 @@ tslib "^2.6.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.0.1.tgz#837a01a166ccd698a3eceaed0c2f798555bc024b" - integrity sha512-6UrbpzCTN6NIJnAtZ6Ne9492vmPVX+7Fsz4kmp+yor3KQwA1+MCzQP7ItDNkP38UmVLnvB/cYk/IvehCUqS3dg== +"@docusaurus/theme-translations@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-3.1.0.tgz#1c6bdc19723a87e042b5e89b6cdc8b747fdcbc13" + integrity sha512-DApE4AbDI+WBajihxB54L4scWQhVGNZAochlC9fkbciPuFAgdRBD3NREb0rgfbKexDC/rioppu/WJA0u8tS+yA== dependencies: fs-extra "^11.1.1" tslib "^2.6.0" -"@docusaurus/types@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.0.1.tgz#4fe306aa10ef7c97dbc07588864f6676a40f3b6f" - integrity sha512-plyX2iU1tcUsF46uQ01pAd4JhexR7n0iiQ5MSnBFX6M6NSJgDYdru/i1/YNPKOnQHBoXGLHv0dNT6OAlDWNjrg== +"@docusaurus/types@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-3.1.0.tgz#1dbb60ea38e98ba869f8d7ea2323e4460f05ab65" + integrity sha512-VaczOZf7+re8aFBIWnex1XENomwHdsSTkrdX43zyor7G/FY4OIsP6X28Xc3o0jiY0YdNuvIDyA5TNwOtpgkCVw== dependencies: + "@mdx-js/mdx" "^3.0.0" "@types/history" "^4.7.11" "@types/react" "*" commander "^5.1.0" @@ -1626,30 +1650,30 @@ webpack "^5.88.1" webpack-merge "^5.9.0" -"@docusaurus/utils-common@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.0.1.tgz#111f450089d5f0a290c0c25f8a574a270d08436f" - integrity sha512-W0AxD6w6T8g6bNro8nBRWf7PeZ/nn7geEWM335qHU2DDDjHuV4UZjgUGP1AQsdcSikPrlIqTJJbKzer1lRSlIg== +"@docusaurus/utils-common@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-3.1.0.tgz#846ce9c12b9ebf1ebf513e65303fb8158dcd2e1b" + integrity sha512-SfvnRLHoZ9bwTw67knkSs7IcUR0GY2SaGkpdB/J9pChrDiGhwzKNUhcieoPyPYrOWGRPk3rVNYtoy+Bc7psPAw== dependencies: tslib "^2.6.0" -"@docusaurus/utils-validation@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.0.1.tgz#3c5f12941b328a19fc9acb34d070219f3e865ec6" - integrity sha512-ujTnqSfyGQ7/4iZdB4RRuHKY/Nwm58IIb+41s5tCXOv/MBU2wGAjOHq3U+AEyJ8aKQcHbxvTKJaRchNHYUVUQg== +"@docusaurus/utils-validation@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-3.1.0.tgz#3e88c42caec29cd3eedbbd17af97f88719613340" + integrity sha512-dFxhs1NLxPOSzmcTk/eeKxLY5R+U4cua22g9MsAMiRWcwFKStZ2W3/GDY0GmnJGqNS8QAQepJrxQoyxXkJNDeg== dependencies: - "@docusaurus/logger" "3.0.1" - "@docusaurus/utils" "3.0.1" + "@docusaurus/logger" "3.1.0" + "@docusaurus/utils" "3.1.0" joi "^17.9.2" js-yaml "^4.1.0" tslib "^2.6.0" -"@docusaurus/utils@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.0.1.tgz#c64f68980a90c5bc6d53a5b8f32deb9026b1e303" - integrity sha512-TwZ33Am0q4IIbvjhUOs+zpjtD/mXNmLmEgeTGuRq01QzulLHuPhaBTTAC/DHu6kFx3wDgmgpAlaRuCHfTcXv8g== +"@docusaurus/utils@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-3.1.0.tgz#6ef821bc4c40a91586835a385110b5c0082c590c" + integrity sha512-LgZfp0D+UBqAh7PZ//MUNSFBMavmAPku6Si9x8x3V+S318IGCNJ6hUr2O29UO0oLybEWUjD5Jnj9IUN6XyZeeg== dependencies: - "@docusaurus/logger" "3.0.1" + "@docusaurus/logger" "3.1.0" "@svgr/webpack" "^6.5.1" escape-string-regexp "^4.0.0" file-loader "^6.2.0" @@ -1667,7 +1691,7 @@ url-loader "^4.1.1" webpack "^5.88.1" -"@emotion/is-prop-valid@^1.2.1": +"@emotion/is-prop-valid@1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== @@ -1679,10 +1703,10 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/unitless@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== +"@emotion/unitless@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== "@exodus/schemasafe@^1.0.0-rc.2": version "1.3.0" @@ -1702,16 +1726,29 @@ "@hapi/hoek" "^9.0.0" "@headlessui/react@^1.7.17": - version "1.7.17" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.17.tgz#a0ec23af21b527c030967245fd99776aa7352bc6" - integrity sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow== + version "1.7.18" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.18.tgz#30af4634d2215b2ca1aa29d07f33d02bea82d9d7" + integrity sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ== dependencies: + "@tanstack/react-virtual" "^3.0.0-beta.60" client-only "^0.0.1" "@heroicons/react@^2.0.18": - version "2.0.18" - resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.0.18.tgz#f80301907c243df03c7e9fd76c0286e95361f7c1" - integrity sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-2.1.1.tgz#422deb80c4d6caf3371aec6f4bee8361a354dc13" + integrity sha512-JyyN9Lo66kirbCMuMMRPtJxtKJoIsXKS569ebHGGRKbl8s4CtUfLnyKJxteA+vIKySocO4s1SkTkGS4xtG/yEA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@jest/schemas@^29.6.3": version "29.6.3" @@ -1764,7 +1801,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": version "0.3.20" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== @@ -1849,6 +1886,11 @@ os-homedir "^1.0.1" regexpu-core "^4.5.4" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pnpm/config.env-replace@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" @@ -1870,7 +1912,7 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@polka/url@^1.0.0-next.20": +"@polka/url@^1.0.0-next.24": version "1.0.0-next.24" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== @@ -1886,11 +1928,11 @@ uri-js "^4.2.2" "@redocly/cli@^1.4.1": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.5.0.tgz#60a13abe62303eb0e52980069643f1c2d661698b" - integrity sha512-2E6yhYIs/dj6pFM9ahzuyI4AzFOjmOK1dkwYCtTWT1w5kROlW4HVVgHrxnOIUupRDTD5TdScWSH28n2U1VivWQ== + version "1.6.0" + resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.6.0.tgz#d3f6c8d6822eead487c2cb814d131e17d05c961f" + integrity sha512-0naVFJGR2tVcpMIHSFRr2HAoyy70qMqDAP6kXcnOdkGkwLRJ8s/5n1STwsym/yZwNkhrt2M0cKT6KAMlTUeCeg== dependencies: - "@redocly/openapi-core" "1.5.0" + "@redocly/openapi-core" "1.6.0" chokidar "^3.5.1" colorette "^1.2.0" core-js "^3.32.1" @@ -1923,10 +1965,10 @@ pluralize "^8.0.0" yaml-ast-parser "0.0.43" -"@redocly/openapi-core@1.5.0", "@redocly/openapi-core@^1.0.0-rc.2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.5.0.tgz#aacdb9030a041a53e38c9b5c51b1caa25ab7957b" - integrity sha512-AnDLoDl1+a7mZO4+lx0KG8zH04BQx4ez6yh403PuNl9/0ygbicPPc9QG/y0/0OImChOA+knKLpJazNFjzhOAeg== +"@redocly/openapi-core@1.6.0", "@redocly/openapi-core@^1.0.0-rc.2": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.6.0.tgz#09aee5e21a9cbad08f3230ced16685d043a9b197" + integrity sha512-oao6Aey4peLKfagzWGb6N7OBI6CoDWEP4ka/XjrUNZw+UoKVVg3hVBXW4Vr3CJ2O8j6wEa2i+Lbb92VQQsoxwg== dependencies: "@redocly/ajv" "^8.11.0" "@types/node" "^14.11.8" @@ -2102,6 +2144,18 @@ dependencies: defer-to-connect "^2.0.1" +"@tanstack/react-virtual@^3.0.0-beta.60": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.0.1.tgz#b04c492e4dd5733b72b10a974870880f83ff4698" + integrity sha512-IFOFuRUTaiM/yibty9qQ9BfycQnYXIDHGP2+cU+0LrFFGNhVxCXSQnaY6wkX8uJVteFEBjUondX0Hmpp7TNcag== + dependencies: + "@tanstack/virtual-core" "3.0.0" + +"@tanstack/virtual-core@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz#637bee36f0cabf96a1d436887c90f138a7e9378b" + integrity sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -2177,9 +2231,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.44.8" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.8.tgz#f4fe1dab9b3d3dd98082d4b9f80e59ab40f1261c" - integrity sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw== + version "8.56.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.1.tgz#988cabb39c973e9200f35fdbb29d17992965bb08" + integrity sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2314,16 +2368,16 @@ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node-forge@^1.3.0": - version "1.3.10" - resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" - integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== + version "1.3.11" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== dependencies: "@types/node" "*" "@types/node@*": - version "20.10.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" - integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg== + version "20.10.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.8.tgz#f1e223cbde9e25696661d167a5b93a9b2a5d57c7" + integrity sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA== dependencies: undici-types "~5.26.4" @@ -2353,9 +2407,9 @@ integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== "@types/qs@*": - version "6.9.10" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" - integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== "@types/range-parser@*": version "1.2.7" @@ -2389,9 +2443,9 @@ "@types/react" "*" "@types/react@*": - version "18.2.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.43.tgz#c58e5abe241e6f71f60ce30e2a9aceb9d3a2a374" - integrity sha512-nvOV01ZdBdd/KW6FahSbcNplt2jCJfyWdTos61RYHV+FVv5L/g9AOX1bmbVcWcLFL8+KHQfh1zVIQrud6ihyQA== + version "18.2.47" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" + integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2445,10 +2499,10 @@ dependencies: "@types/node" "*" -"@types/stylis@^4.0.2": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.4.tgz#14b61f022e832d87d442ae1795e0f0f0b7daa879" - integrity sha512-36ZrGJ8fgtBr6nwNnuJ9jXIj+bn/pF6UoqmrQT7+Y99+tFFeHHsoR54+194dHdyhPjgbeoNz3Qru0oRt0l6ASQ== +"@types/stylis@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.0.tgz#199a3f473f0c3a6f6e4e1b17cdbc967f274bdc6b" + integrity sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw== "@types/unist@*", "@types/unist@^3.0.0": version "3.0.2" @@ -2654,9 +2708,9 @@ acorn@^6.1.1: integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2711,31 +2765,31 @@ ajv@^8.0.0, ajv@^8.9.0: uri-js "^4.2.2" algoliasearch-helper@^3.13.3: - version "3.16.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.16.0.tgz#42c7c8cecf5fa91fb9dd467011fa68c9050be7dc" - integrity sha512-RxOtBafSQwyqD5BLO/q9VsVw/zuNz8kjb51OZhCIWLr33uvKB+vrRis+QK+JFlNQXbXf+w28fsTWiBupc1pHew== + version "3.16.1" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.16.1.tgz#421e3554ec86e14e60e7e0bf796aef61cf4a06ec" + integrity sha512-qxAHVjjmT7USVvrM8q6gZGaJlCK1fl4APfdAA7o8O6iXEc68G0xMNrzRkxoB/HmhhvyHnoteS/iMTiHiTcQQcg== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^4.18.0, algoliasearch@^4.19.1: - version "4.20.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.20.0.tgz#700c2cb66e14f8a288460036c7b2a554d0d93cf4" - integrity sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g== + version "4.22.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.22.1.tgz#f10fbecdc7654639ec20d62f109c1b3a46bc6afc" + integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== dependencies: - "@algolia/cache-browser-local-storage" "4.20.0" - "@algolia/cache-common" "4.20.0" - "@algolia/cache-in-memory" "4.20.0" - "@algolia/client-account" "4.20.0" - "@algolia/client-analytics" "4.20.0" - "@algolia/client-common" "4.20.0" - "@algolia/client-personalization" "4.20.0" - "@algolia/client-search" "4.20.0" - "@algolia/logger-common" "4.20.0" - "@algolia/logger-console" "4.20.0" - "@algolia/requester-browser-xhr" "4.20.0" - "@algolia/requester-common" "4.20.0" - "@algolia/requester-node-http" "4.20.0" - "@algolia/transporter" "4.20.0" + "@algolia/cache-browser-local-storage" "4.22.1" + "@algolia/cache-common" "4.22.1" + "@algolia/cache-in-memory" "4.22.1" + "@algolia/client-account" "4.22.1" + "@algolia/client-analytics" "4.22.1" + "@algolia/client-common" "4.22.1" + "@algolia/client-personalization" "4.22.1" + "@algolia/client-search" "4.22.1" + "@algolia/logger-common" "4.22.1" + "@algolia/logger-console" "4.22.1" + "@algolia/requester-browser-xhr" "4.22.1" + "@algolia/requester-common" "4.22.1" + "@algolia/requester-node-http" "4.22.1" + "@algolia/transporter" "4.22.1" ansi-align@^3.0.1: version "3.0.1" @@ -2813,11 +2867,6 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" @@ -2851,11 +2900,11 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.14, autoprefixer@^10.4.16: postcss-value-parser "^4.2.0" axios@^1.5.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2" - integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + version "1.6.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.4" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -2874,29 +2923,29 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz#679d1b94bf3360f7682e11f2cb2708828a24fe8c" + integrity sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.4.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== +babel-plugin-polyfill-corejs3@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz#941855aa7fdaac06ed24c730a93450d2b2b76d04" + integrity sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.4.4" core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz#c6fc8eab610d3a11eb475391e52584bacfc020f4" + integrity sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/helper-define-polyfill-provider" "^0.4.4" bail@^2.0.0: version "2.0.2" @@ -2942,12 +2991,10 @@ body-parser@1.20.1: unpipe "1.0.0" bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -3006,7 +3053,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.2: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2: version "4.22.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== @@ -3107,9 +3154,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565: - version "1.0.30001568" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz#53fa9297273c9a977a560663f48cbea1767518b7" - integrity sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A== + version "1.0.30001576" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" + integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== ccount@^2.0.0: version "2.0.1" @@ -3214,9 +3261,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== clean-css@^5.2.2, clean-css@^5.3.2, clean-css@~5.3.2: version "5.3.3" @@ -3282,9 +3329,9 @@ clsx@^1.1.0, clsx@^1.2.1: integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== clsx@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.0.0.tgz#12658f3fd98fafe62075595a5c30e43d18f3d00b" - integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + version "2.1.0" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" + integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== collapse-white-space@^2.0.0: version "2.1.0" @@ -3499,21 +3546,21 @@ copyfiles@^2.4.1: yargs "^16.1.0" core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.34.0.tgz#61a4931a13c52f8f08d924522bba65f8c94a5f17" - integrity sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA== + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.35.0.tgz#c149a3d1ab51e743bc1da61e39cb51f461a41873" + integrity sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw== dependencies: browserslist "^4.22.2" core-js-pure@^3.30.2: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.34.0.tgz#981e462500708664c91b827a75b011f04a8134a0" - integrity sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg== + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.35.0.tgz#4660033304a050215ae82e476bd2513a419fbb34" + integrity sha512-f+eRYmkou59uh7BPcyJ8MC76DiGhspj1KMxVIcF24tzP8NA9HVa1uC7BTW2tgx7E1QVCzDzsgp7kArrzhlz8Ew== core-js@^3.31.1, core-js@^3.32.1: - version "3.34.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.34.0.tgz#5705e6ad5982678612e96987d05b27c6c7c274a5" - integrity sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag== + version "3.35.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.35.0.tgz#58e651688484f83c34196ca13f099574ee53d6b4" + integrity sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg== core-util-is@~1.0.0: version "1.0.3" @@ -3556,7 +3603,7 @@ cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.2.0: +cosmiconfig@^8.3.5: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== @@ -3566,7 +3613,7 @@ cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" -cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3593,18 +3640,18 @@ css-declaration-sorter@^6.3.1: integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== css-loader@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + version "6.9.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.9.0.tgz#0cc2f14df94ed97c526c5ae42b6b13916d1d8d0e" + integrity sha512-3I5Nu4ytWlHvOP6zItjiHlefBNtrH+oehq8tnQa2kO305qpVyx9XNIT1CXIj5bgCJs7qICBCkgCYxQLKPANoLA== dependencies: icss-utils "^5.1.0" - postcss "^8.4.21" + postcss "^8.4.31" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" + postcss-modules-scope "^3.1.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.8" + semver "^7.5.4" css-minimizer-webpack-plugin@^4.2.2: version "4.2.2" @@ -3640,7 +3687,7 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-to-react-native@^3.2.0: +css-to-react-native@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== @@ -3735,7 +3782,12 @@ csso@^4.2.0: dependencies: css-tree "^1.1.2" -csstype@^3.0.2, csstype@^3.1.2: +csstype@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +csstype@^3.0.2: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -3755,9 +3807,9 @@ cytoscape-fcose@^2.1.0: cose-base "^2.2.0" cytoscape@^3.23.0: - version "3.27.0" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.27.0.tgz#5141cd694570807c91075b609181bce102e0bb88" - integrity sha512-pPZJilfX9BxESwujODz5pydeGi+FBrXq1rcaB1mfhFXXFJ9GjE6CNndAk+8jPzoXGD+16LtSS4xlYEIUiW4Abg== + version "3.28.1" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.28.1.tgz#f32c3e009bdf32d47845a16a4cd2be2bbc01baf7" + integrity sha512-xyItz4O/4zp9/239wCcH8ZcFuuZooEeF8KHRmzjDfGdXsj3OG9MFSMA0pJE0uX3uCN/ygof6hHf4L7lst+JaDg== dependencies: heap "^0.2.6" lodash "^4.17.21" @@ -4225,11 +4277,6 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - dns-packet@^5.2.2: version "5.6.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" @@ -4315,9 +4362,9 @@ dompurify@^2.2.8: integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== dompurify@^3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.6.tgz#925ebd576d54a9531b5d76f0a5bef32548351dae" - integrity sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w== + version "3.0.8" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.8.tgz#e0021ab1b09184bc8af7e35c7dd9063f43a8a437" + integrity sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ== domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -4373,9 +4420,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.601: - version "1.4.609" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.609.tgz#5790a70aaa96de232501b56e14b64d17aff93988" - integrity sha512-ihiCP7PJmjoGNuLpl7TjNA8pCQWu09vGyjlPYw1Rqww4gvNuCcmvl+44G+2QyJ6S2K4o+wbTS++Xz0YN8Q9ERw== + version "1.4.626" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.626.tgz#c20e1706354a31721b65e81496800534dd04b222" + integrity sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg== elkjs@^0.8.2: version "0.8.2" @@ -4692,9 +4739,9 @@ fast-url-parser@1.1.3: punycode "^1.3.2" fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== dependencies: reusify "^1.0.4" @@ -4788,16 +4835,24 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.0.0, follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== +follow-redirects@^1.0.0, follow-redirects@^1.15.4: + version "1.15.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.4.tgz#cdc7d308bf6493126b17ea2191ea0ccf3e535adf" + integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== foreach@^2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" @@ -4916,9 +4971,9 @@ get-own-enumerable-property-symbols@^3.0.0: integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-port-please@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.1.tgz#2556623cddb4801d823c0a6a15eec038abb483be" - integrity sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" + integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" @@ -4949,17 +5004,16 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@^7.0.0, glob@^7.0.5, glob@^7.1.3, glob@^7.1.6: version "7.2.3" @@ -5331,9 +5385,9 @@ html-void-elements@^3.0.0: integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== html-webpack-plugin@^5.5.3: - version "5.5.4" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.4.tgz#517a48e6f046ff1ae1a172c983cd993eb79d2f6a" - integrity sha512-3wNSaVVxdxcu0jd4FpQFoICdqgxs4zIQQvj+2yQKFfBOnLETQ6X5CDWdeasuGlSsooFlMkEioWDTqBv1wvw5Iw== + version "5.6.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" + integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -5460,9 +5514,9 @@ ignore@^5.2.0, ignore@^5.2.4: integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== image-size@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" - integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.1.1.tgz#ddd67d4dc340e52ac29ce5f546a09f4e29e840ac" + integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ== dependencies: queue "6.0.2" @@ -5769,6 +5823,15 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" @@ -5800,7 +5863,7 @@ jest-worker@^29.1.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jiti@^1.18.2, jiti@^1.19.1, jiti@^1.20.0: +jiti@^1.19.1, jiti@^1.20.0: version "1.21.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== @@ -6078,6 +6141,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +"lru-cache@^9.1.1 || ^10.0.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -7076,11 +7144,23 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -7108,10 +7188,10 @@ mri@^1.1.0: resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms@2.0.0: version "2.0.0" @@ -7145,7 +7225,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.3.7: +nanoid@^3.3.6, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -7584,6 +7664,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -7744,13 +7832,13 @@ postcss-load-config@^4.0.1: yaml "^2.3.4" postcss-loader@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.3.tgz#6da03e71a918ef49df1bb4be4c80401df8e249dd" - integrity sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA== + version "7.3.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" + integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== dependencies: - cosmiconfig "^8.2.0" - jiti "^1.18.2" - semver "^7.3.8" + cosmiconfig "^8.3.5" + jiti "^1.20.0" + semver "^7.5.4" postcss-merge-idents@^5.1.1: version "5.1.1" @@ -7824,10 +7912,10 @@ postcss-modules-local-by-default@^4.0.3: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.1.0.tgz#fbfddfda93a31f310f1d152c2bb4d3f3c5592ee0" + integrity sha512-SaIbK8XW+MZbd0xHPf7kdfA/3eOt7vxJ72IRecn3EzuZVLr1r0orzf0MX/pN8m+NMDoo6X/SQd8oeKqGZd8PXg== dependencies: postcss-selector-parser "^6.0.4" @@ -7939,9 +8027,9 @@ postcss-reduce-transforms@^5.1.0: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + version "6.0.15" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535" + integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -7978,10 +8066,19 @@ postcss-zindex@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@^8.4.17, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.26, postcss@^8.4.30, postcss@^8.4.31: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== + version "8.4.33" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" + integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" @@ -7992,6 +8089,11 @@ posthog-docusaurus@^2.0.0: resolved "https://registry.yarnpkg.com/posthog-docusaurus/-/posthog-docusaurus-2.0.0.tgz#8b8ac890a2d780c8097a1a9766a3d24d2a1f1177" integrity sha512-nDSTIhmH/Fexv347Gx6wBCE97Z+fZTj0p/gqVYAaolMwSdVuzwyFWcFA+aW9uzA5Y5hjzRwwKJJOrIv8smkYkA== +preact@^10.0.0: + version "10.19.3" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.3.tgz#7a7107ed2598a60676c943709ea3efb8aaafa899" + integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ== + pretty-error@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" @@ -8011,9 +8113,9 @@ prism-react-renderer@^1.3.5: integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== prism-react-renderer@^2.0.6, prism-react-renderer@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz#5f8f615af6af8201a0b734bd8c946df3d818ea54" - integrity sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz#e59e5450052ede17488f6bc85de1553f584ff8d5" + integrity sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw== dependencies: "@types/prismjs" "^1.26.0" clsx "^2.0.0" @@ -8195,9 +8297,9 @@ react-fast-compare@^3.2.0, react-fast-compare@^3.2.2: integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-helmet-async@*: - version "2.0.3" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.3.tgz#904f79d906f91da6728dab6a062c3b8354930881" - integrity sha512-7/X3ehSCbjCaIljWa39Bb7F1Y2JWM23FN80kLozx2TdgzUmxKDSLN6qu06NG0Srzm8ljGOjgk7r7CXeEOx4MPw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.4.tgz#50a4377778f380ed1d0136303916b38eff1bf153" + integrity sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ== dependencies: invariant "^2.2.4" react-fast-compare "^3.2.2" @@ -8420,9 +8522,9 @@ regenerate@^1.4.2: integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regenerator-transform@^0.15.2: version "0.15.2" @@ -8717,9 +8819,9 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass-loader@^10.1.1: - version "10.5.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.5.0.tgz#011c92ea529029e296aea37508e034b94f7dd2dc" - integrity sha512-VsU71W7VR6SChMJZUqtrfLeMSA8ns7QTHbnA7cfevtjb3c392mX93lr0Dmr4uU1ch5uIbEmfmHjdrDYcXXkQ7w== + version "10.5.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.5.2.tgz#1ca30534fff296417b853c7597ca3b0bbe8c37d0" + integrity sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -8728,9 +8830,9 @@ sass-loader@^10.1.1: semver "^7.3.2" sass@^1.69.3: - version "1.69.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" - integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== + version "1.69.7" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.7.tgz#6e7e1c8f51e8162faec3e9619babc7da780af3b7" + integrity sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -8809,7 +8911,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.4: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -8836,9 +8938,9 @@ send@0.18.0: statuses "2.0.1" serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -8906,7 +9008,7 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@^1.1.0: +shallowequal@1.1.0, shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== @@ -8995,6 +9097,11 @@ signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-websocket@^9.0.0: version "9.1.0" resolved "https://registry.yarnpkg.com/simple-websocket/-/simple-websocket-9.1.0.tgz#91cbb39eafefbe7e66979da6c639109352786a7f" @@ -9007,12 +9114,12 @@ simple-websocket@^9.0.0: ws "^7.4.2" sirv@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446" - integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" totalist "^3.0.0" sisteransi@^1.0.5: @@ -9148,16 +9255,16 @@ statuses@2.0.1: integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.0.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.6.0.tgz#94807562bddc68fa90f2e02c5fd5b6865bb4e98e" - integrity sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg== + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== stickyfill@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stickyfill/-/stickyfill-1.1.1.tgz#39413fee9d025c74a7e59ceecb23784cc0f17f02" integrity sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9211,7 +9318,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9260,19 +9367,19 @@ style-to-object@^1.0.0: inline-style-parser "0.2.2" styled-components@^6.0.7, styled-components@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.1.tgz#a5414ada07fb1c17b96a26a05369daa4e2ad55e5" - integrity sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ== + version "6.1.8" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.8.tgz#c109d36aeea52d8f049e12de2f3be39a6fc86201" + integrity sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw== dependencies: - "@emotion/is-prop-valid" "^1.2.1" - "@emotion/unitless" "^0.8.0" - "@types/stylis" "^4.0.2" - css-to-react-native "^3.2.0" - csstype "^3.1.2" - postcss "^8.4.31" - shallowequal "^1.1.0" - stylis "^4.3.0" - tslib "^2.5.0" + "@emotion/is-prop-valid" "1.2.1" + "@emotion/unitless" "0.8.0" + "@types/stylis" "4.2.0" + css-to-react-native "3.2.0" + csstype "3.1.2" + postcss "8.4.31" + shallowequal "1.1.0" + stylis "4.3.1" + tslib "2.5.0" stylehacks@^5.1.1: version "5.1.1" @@ -9282,19 +9389,19 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylis@^4.1.3, stylis@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" - integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== +stylis@4.3.1, stylis@^4.1.3: + version "4.3.1" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.1.tgz#ed8a9ebf9f76fe1e12d462f5cc3c4c980b23a7eb" + integrity sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ== sucrase@^3.31.0, sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -9362,9 +9469,9 @@ swagger2openapi@^7.0.6: yargs "^17.0.1" tailwind-merge@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.1.0.tgz#541b407e0ec255651e92571d96b685e48f01999c" - integrity sha512-l11VvI4nSwW7MtLSLYT4ldidDEUwQAMWuSHk7l4zcXZDgnCRa0V3OdCwFfM7DCzakVXMNRwAeje9maFFXT71dQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.2.0.tgz#b6bb1c63ef26283c9e6675ba237df83bbd554688" + integrity sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ== dependencies: "@babel/runtime" "^7.23.5" @@ -9374,9 +9481,9 @@ tailwindcss-animate@^1.0.7: integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== tailwindcss@^3.3.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.6.tgz#4dd7986bf4902ad385d90d45fd4b2fa5fab26d5f" - integrity sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw== + version "3.4.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" + integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -9412,17 +9519,17 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== terser-webpack-plugin@^5.3.7, terser-webpack-plugin@^5.3.9: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + version "5.3.10" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" + integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.20" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.8" + terser "^5.26.0" -terser@^5.10.0, terser@^5.15.1, terser@^5.16.8: +terser@^5.10.0, terser@^5.15.1, terser@^5.26.0: version "5.26.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.26.0.tgz#ee9f05d929f4189a9c28a0feb889d96d50126fe1" integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== @@ -9521,7 +9628,12 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.0: +tslib@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +tslib@^2.0.3, tslib@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -9834,9 +9946,9 @@ web-namespaces@^2.0.0: integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== web-worker@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" - integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.3.0.tgz#e5f2df5c7fe356755a5fb8f8410d4312627e6776" + integrity sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA== webidl-conversions@^3.0.0: version "3.0.1" @@ -10016,7 +10128,8 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + name wrap-ansi-cjs version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -10055,9 +10168,9 @@ ws@^7.3.1, ws@^7.4.2: integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.13.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.15.0.tgz#db080a279260c5f532fc668d461b8346efdfcf86" - integrity sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw== + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: version "5.1.0" diff --git a/electron/handlers/app.ts b/electron/handlers/app.ts index d0d9dae72..2a84b0de9 100644 --- a/electron/handlers/app.ts +++ b/electron/handlers/app.ts @@ -1,9 +1,9 @@ -import { app, ipcMain, shell, nativeTheme } from 'electron' +import { app, ipcMain, shell } from 'electron' import { join, basename } from 'path' import { WindowManager } from './../managers/window' import { getResourcePath, userSpacePath } from './../utils/path' import { AppRoute } from '@janhq/core' -import { ExtensionManager, ModuleManager } from '@janhq/core/node' +import { ModuleManager, init, log } from '@janhq/core/node' import { startServer, stopServer } from '@janhq/server' export function handleAppIPCs() { @@ -59,7 +59,7 @@ export function handleAppIPCs() { app.isPackaged ? join(getResourcePath(), 'docs', 'openapi') : undefined ) ) - + /** * Stop Jan API Server. */ @@ -82,8 +82,22 @@ export function handleAppIPCs() { require.resolve(join(userSpacePath, 'extensions', modulePath)) ] } - ExtensionManager.instance.setupExtensions() + init({ + // Function to check from the main process that user wants to install a extension + confirmInstall: async (_extensions: string[]) => { + return true + }, + // Path to install extension to + extensionsPath: join(userSpacePath, 'extensions'), + }) WindowManager.instance.currentWindow?.reload() } }) + + /** + * Log message to log file. + */ + ipcMain.handle(AppRoute.log, async (_event, message, fileName) => + log(message, fileName) + ) } diff --git a/electron/handlers/fileManager.ts b/electron/handlers/fileManager.ts index f8b8ee6f1..bfbd9af45 100644 --- a/electron/handlers/fileManager.ts +++ b/electron/handlers/fileManager.ts @@ -6,7 +6,7 @@ import { FileManagerRoute } from '@janhq/core' import { userSpacePath, getResourcePath } from './../utils/path' import fs from 'fs' import { join } from 'path' -import { FileStat } from '@janhq/core/.' +import { FileStat } from '@janhq/core' /** * Handles file system extensions operations. diff --git a/electron/main.ts b/electron/main.ts index 97b3e79e3..75ba9b062 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -6,7 +6,7 @@ import { createUserSpace } from './utils/path' * Managers **/ import { WindowManager } from './managers/window' -import { ExtensionManager, ModuleManager } from '@janhq/core/node' +import { log, ModuleManager } from '@janhq/core/node' /** * IPC Handlers @@ -17,14 +17,19 @@ import { handleFileMangerIPCs } from './handlers/fileManager' import { handleAppIPCs } from './handlers/app' import { handleAppUpdates } from './handlers/update' import { handleFsIPCs } from './handlers/fs' + +/** + * Utils + **/ import { migrateExtensions } from './utils/migration' import { cleanUpAndQuit } from './utils/clean' +import { setupExtensions } from './utils/extension' app .whenReady() .then(createUserSpace) .then(migrateExtensions) - .then(ExtensionManager.instance.setupExtensions) + .then(setupExtensions) .then(setupMenu) .then(handleIPCs) .then(handleAppUpdates) @@ -93,5 +98,5 @@ function handleIPCs() { */ process.on('uncaughtException', function (err) { // TODO: Write error to log file in #1447 - console.error(err) + log(`Error: ${err}`) }) diff --git a/electron/package.json b/electron/package.json index 65af601a0..82b569495 100644 --- a/electron/package.json +++ b/electron/package.json @@ -69,7 +69,7 @@ "build:publish": "run-script-os", "build:publish:darwin": "tsc -p . && electron-builder -p onTagOrDraft -m --x64 --arm64", "build:publish:win32": "tsc -p . && electron-builder -p onTagOrDraft -w", - "build:publish:linux": "tsc -p . && electron-builder -p onTagOrDraft -l deb" + "build:publish:linux": "tsc -p . && electron-builder -p onTagOrDraft -l deb -l AppImage" }, "dependencies": { "@alumna/reflect": "^1.1.3", diff --git a/electron/utils/extension.ts b/electron/utils/extension.ts new file mode 100644 index 000000000..20bb50b46 --- /dev/null +++ b/electron/utils/extension.ts @@ -0,0 +1,13 @@ +import { init, userSpacePath } from '@janhq/core/node' +import path from 'path' + +export const setupExtensions = () => { + init({ + // Function to check from the main process that user wants to install a extension + confirmInstall: async (_extensions: string[]) => { + return true + }, + // Path to install extension to + extensionsPath: path.join(userSpacePath, 'extensions'), + }) +} diff --git a/extensions/inference-nitro-extension/package.json b/extensions/inference-nitro-extension/package.json index 479cc51dc..5659853bf 100644 --- a/extensions/inference-nitro-extension/package.json +++ b/extensions/inference-nitro-extension/package.json @@ -50,6 +50,7 @@ "bundleDependencies": [ "tcp-port-used", "fetch-retry", - "os-utils" + "os-utils", + "@janhq/core" ] } diff --git a/extensions/inference-nitro-extension/src/@types/global.d.ts b/extensions/inference-nitro-extension/src/@types/global.d.ts index 62eb65e52..6bcdc4adc 100644 --- a/extensions/inference-nitro-extension/src/@types/global.d.ts +++ b/extensions/inference-nitro-extension/src/@types/global.d.ts @@ -1,5 +1,6 @@ declare const MODULE: string; declare const INFERENCE_URL: string; +declare const TROUBLESHOOTING_URL: string; /** * The parameters for the initModel function. diff --git a/extensions/inference-nitro-extension/src/helpers/nvidia.ts b/extensions/inference-nitro-extension/src/helpers/nvidia.ts new file mode 100644 index 000000000..365798356 --- /dev/null +++ b/extensions/inference-nitro-extension/src/helpers/nvidia.ts @@ -0,0 +1,138 @@ +/** + * Default GPU settings + **/ +const DEFALT_SETTINGS = { + notify: true, + run_mode: "cpu", + nvidia_driver: { + exist: false, + version: "", + }, + cuda: { + exist: false, + version: "", + }, + gpus: [], + gpu_highest_vram: "", +}; + +/** + * Validate nvidia and cuda for linux and windows + */ +async function updateNvidiaDriverInfo(): Promise { + exec( + "nvidia-smi --query-gpu=driver_version --format=csv,noheader", + (error, stdout) => { + let data; + try { + data = JSON.parse(readFileSync(NVIDIA_INFO_FILE, "utf-8")); + } catch (error) { + data = DEFALT_SETTINGS; + } + + if (!error) { + const firstLine = stdout.split("\n")[0].trim(); + data["nvidia_driver"].exist = true; + data["nvidia_driver"].version = firstLine; + } else { + data["nvidia_driver"].exist = false; + } + + writeFileSync(NVIDIA_INFO_FILE, JSON.stringify(data, null, 2)); + Promise.resolve(); + } + ); +} + +function checkFileExistenceInPaths(file: string, paths: string[]): boolean { + return paths.some((p) => existsSync(path.join(p, file))); +} + +function updateCudaExistence() { + let filesCuda12: string[]; + let filesCuda11: string[]; + let paths: string[]; + let cudaVersion: string = ""; + + if (process.platform === "win32") { + filesCuda12 = ["cublas64_12.dll", "cudart64_12.dll", "cublasLt64_12.dll"]; + filesCuda11 = ["cublas64_11.dll", "cudart64_11.dll", "cublasLt64_11.dll"]; + paths = process.env.PATH ? process.env.PATH.split(path.delimiter) : []; + } else { + filesCuda12 = ["libcudart.so.12", "libcublas.so.12", "libcublasLt.so.12"]; + filesCuda11 = ["libcudart.so.11.0", "libcublas.so.11", "libcublasLt.so.11"]; + paths = process.env.LD_LIBRARY_PATH + ? process.env.LD_LIBRARY_PATH.split(path.delimiter) + : []; + paths.push("/usr/lib/x86_64-linux-gnu/"); + } + + let cudaExists = filesCuda12.every( + (file) => existsSync(file) || checkFileExistenceInPaths(file, paths) + ); + + if (!cudaExists) { + cudaExists = filesCuda11.every( + (file) => existsSync(file) || checkFileExistenceInPaths(file, paths) + ); + if (cudaExists) { + cudaVersion = "11"; + } + } else { + cudaVersion = "12"; + } + + let data; + try { + data = JSON.parse(readFileSync(NVIDIA_INFO_FILE, "utf-8")); + } catch (error) { + data = DEFALT_SETTINGS; + } + + data["cuda"].exist = cudaExists; + data["cuda"].version = cudaVersion; + if (cudaExists) { + data.run_mode = "gpu"; + } + writeFileSync(NVIDIA_INFO_FILE, JSON.stringify(data, null, 2)); +} + +async function updateGpuInfo(): Promise { + exec( + "nvidia-smi --query-gpu=index,memory.total --format=csv,noheader,nounits", + (error, stdout) => { + let data; + try { + data = JSON.parse(readFileSync(NVIDIA_INFO_FILE, "utf-8")); + } catch (error) { + data = DEFALT_SETTINGS; + } + + if (!error) { + // Get GPU info and gpu has higher memory first + let highestVram = 0; + let highestVramId = "0"; + let gpus = stdout + .trim() + .split("\n") + .map((line) => { + let [id, vram] = line.split(", "); + vram = vram.replace(/\r/g, ""); + if (parseFloat(vram) > highestVram) { + highestVram = parseFloat(vram); + highestVramId = id; + } + return { id, vram }; + }); + + data["gpus"] = gpus; + data["gpu_highest_vram"] = highestVramId; + } else { + data["gpus"] = []; + } + + writeFileSync(NVIDIA_INFO_FILE, JSON.stringify(data, null, 2)); + Promise.resolve(); + } + ); +} diff --git a/extensions/inference-nitro-extension/src/index.ts b/extensions/inference-nitro-extension/src/index.ts index 34e95667b..5c00421fa 100644 --- a/extensions/inference-nitro-extension/src/index.ts +++ b/extensions/inference-nitro-extension/src/index.ts @@ -20,8 +20,9 @@ import { fs, Model, joinPath, + InferenceExtension, + log, } from "@janhq/core"; -import { InferenceExtension } from "@janhq/core"; import { requestInference } from "./helpers/sse"; import { ulid } from "ulid"; import { join } from "path"; @@ -36,9 +37,14 @@ export default class JanInferenceNitroExtension implements InferenceExtension { private static readonly _settingsDir = "file://settings"; private static readonly _engineMetadataFileName = "nitro.json"; - private static _currentModel: Model; + /** + * Checking the health for Nitro's process each 5 secs. + */ + private static readonly _intervalHealthCheck = 5 * 1000; - private static _engineSettings: EngineSettings = { + private _currentModel: Model; + + private _engineSettings: EngineSettings = { ctx_len: 2048, ngl: 100, cpu_threads: 1, @@ -48,6 +54,18 @@ export default class JanInferenceNitroExtension implements InferenceExtension { controller = new AbortController(); isCancelled = false; + + /** + * The interval id for the health check. Used to stop the health check. + */ + private getNitroProcesHealthIntervalId: NodeJS.Timeout | undefined = + undefined; + + /** + * Tracking the current state of nitro process. + */ + private nitroProcessInfo: any = undefined; + /** * Returns the type of the extension. * @returns {ExtensionType} The type of the extension. @@ -71,21 +89,13 @@ export default class JanInferenceNitroExtension implements InferenceExtension { this.writeDefaultEngineSettings(); // Events subscription - events.on(EventName.OnMessageSent, (data) => - JanInferenceNitroExtension.handleMessageRequest(data, this) - ); + events.on(EventName.OnMessageSent, (data) => this.onMessageRequest(data)); - events.on(EventName.OnModelInit, (model: Model) => { - JanInferenceNitroExtension.handleModelInit(model); - }); + events.on(EventName.OnModelInit, (model: Model) => this.onModelInit(model)); - events.on(EventName.OnModelStop, (model: Model) => { - JanInferenceNitroExtension.handleModelStop(model); - }); + events.on(EventName.OnModelStop, (model: Model) => this.onModelStop(model)); - events.on(EventName.OnInferenceStopped, () => { - JanInferenceNitroExtension.handleInferenceStopped(this); - }); + events.on(EventName.OnInferenceStopped, () => this.onInferenceStopped()); // Attempt to fetch nvidia info await executeOnMain(MODULE, "updateNvidiaInfo", {}); @@ -104,12 +114,12 @@ export default class JanInferenceNitroExtension implements InferenceExtension { ); if (await fs.existsSync(engineFile)) { const engine = await fs.readFileSync(engineFile, "utf-8"); - JanInferenceNitroExtension._engineSettings = + this._engineSettings = typeof engine === "object" ? engine : JSON.parse(engine); } else { await fs.writeFileSync( engineFile, - JSON.stringify(JanInferenceNitroExtension._engineSettings, null, 2) + JSON.stringify(this._engineSettings, null, 2) ); } } catch (err) { @@ -117,10 +127,9 @@ export default class JanInferenceNitroExtension implements InferenceExtension { } } - private static async handleModelInit(model: Model) { - if (model.engine !== "nitro") { - return; - } + private async onModelInit(model: Model) { + if (model.engine !== "nitro") return; + const modelFullPath = await joinPath(["models", model.id]); const nitroInitResult = await executeOnMain(MODULE, "initModel", { @@ -130,26 +139,49 @@ export default class JanInferenceNitroExtension implements InferenceExtension { if (nitroInitResult.error === null) { events.emit(EventName.OnModelFail, model); - } else { - JanInferenceNitroExtension._currentModel = model; - events.emit(EventName.OnModelReady, model); - } - } - - private static async handleModelStop(model: Model) { - if (model.engine !== "nitro") { return; - } else { - await executeOnMain(MODULE, "stopModel"); - events.emit(EventName.OnModelStopped, model); + } + + this._currentModel = model; + events.emit(EventName.OnModelReady, model); + + this.getNitroProcesHealthIntervalId = setInterval( + () => this.periodicallyGetNitroHealth(), + JanInferenceNitroExtension._intervalHealthCheck + ); + } + + private async onModelStop(model: Model) { + if (model.engine !== "nitro") return; + + await executeOnMain(MODULE, "stopModel"); + events.emit(EventName.OnModelStopped, {}); + + // stop the periocally health check + if (this.getNitroProcesHealthIntervalId) { + console.debug("Stop calling Nitro process health check"); + clearInterval(this.getNitroProcesHealthIntervalId); + this.getNitroProcesHealthIntervalId = undefined; } } - private static async handleInferenceStopped( - instance: JanInferenceNitroExtension - ) { - instance.isCancelled = true; - instance.controller?.abort(); + /** + * Periodically check for nitro process's health. + */ + private async periodicallyGetNitroHealth(): Promise { + const health = await executeOnMain(MODULE, "getCurrentNitroProcessInfo"); + + const isRunning = this.nitroProcessInfo?.isRunning ?? false; + if (isRunning && health.isRunning === false) { + console.debug("Nitro process is stopped"); + events.emit(EventName.OnModelStopped, {}); + } + this.nitroProcessInfo = health; + } + + private async onInferenceStopped() { + this.isCancelled = true; + this.controller?.abort(); } /** @@ -171,10 +203,7 @@ export default class JanInferenceNitroExtension implements InferenceExtension { }; return new Promise(async (resolve, reject) => { - requestInference( - data.messages ?? [], - JanInferenceNitroExtension._currentModel - ).subscribe({ + requestInference(data.messages ?? [], this._currentModel).subscribe({ next: (_content) => {}, complete: async () => { resolve(message); @@ -192,13 +221,9 @@ export default class JanInferenceNitroExtension implements InferenceExtension { * Pass instance as a reference. * @param {MessageRequest} data - The data for the new message request. */ - private static async handleMessageRequest( - data: MessageRequest, - instance: JanInferenceNitroExtension - ) { - if (data.model.engine !== "nitro") { - return; - } + private async onMessageRequest(data: MessageRequest) { + if (data.model.engine !== "nitro") return; + const timestamp = Date.now(); const message: ThreadMessage = { id: ulid(), @@ -213,13 +238,13 @@ export default class JanInferenceNitroExtension implements InferenceExtension { }; events.emit(EventName.OnMessageResponse, message); - instance.isCancelled = false; - instance.controller = new AbortController(); + this.isCancelled = false; + this.controller = new AbortController(); requestInference( data.messages ?? [], - { ...JanInferenceNitroExtension._currentModel, ...data.model }, - instance.controller + { ...this._currentModel, ...data.model }, + this.controller ).subscribe({ next: (content) => { const messageContent: ThreadContent = { @@ -239,21 +264,14 @@ export default class JanInferenceNitroExtension implements InferenceExtension { events.emit(EventName.OnMessageUpdate, message); }, error: async (err) => { - if (instance.isCancelled || message.content.length) { - message.status = MessageStatus.Error; + if (this.isCancelled || message.content.length) { + message.status = MessageStatus.Stopped; events.emit(EventName.OnMessageUpdate, message); return; } - const messageContent: ThreadContent = { - type: ContentType.Text, - text: { - value: "Error occurred: " + err.message, - annotations: [], - }, - }; - message.content = [messageContent]; - message.status = MessageStatus.Ready; + message.status = MessageStatus.Error; events.emit(EventName.OnMessageUpdate, message); + log(`[APP]::Error: ${err.message}`); }, }); } diff --git a/extensions/inference-nitro-extension/src/module.ts b/extensions/inference-nitro-extension/src/module.ts index 3654410d4..1fdcc682a 100644 --- a/extensions/inference-nitro-extension/src/module.ts +++ b/extensions/inference-nitro-extension/src/module.ts @@ -1,18 +1,17 @@ const fs = require("fs"); -const fsPromises = fs.promises; const path = require("path"); const { exec, spawn } = require("child_process"); const tcpPortUsed = require("tcp-port-used"); const fetchRetry = require("fetch-retry")(global.fetch); const osUtils = require("os-utils"); const { readFileSync, writeFileSync, existsSync } = require("fs"); +const { log } = require("@janhq/core/node"); // The PORT to use for the Nitro subprocess const PORT = 3928; const LOCAL_HOST = "127.0.0.1"; const NITRO_HTTP_SERVER_URL = `http://${LOCAL_HOST}:${PORT}`; const NITRO_HTTP_LOAD_MODEL_URL = `${NITRO_HTTP_SERVER_URL}/inferences/llamacpp/loadmodel`; -const NITRO_HTTP_UNLOAD_MODEL_URL = `${NITRO_HTTP_SERVER_URL}/inferences/llamacpp/unloadModel`; const NITRO_HTTP_VALIDATE_MODEL_URL = `${NITRO_HTTP_SERVER_URL}/inferences/llamacpp/modelstatus`; const NITRO_HTTP_KILL_URL = `${NITRO_HTTP_SERVER_URL}/processmanager/destroy`; const SUPPORTED_MODEL_FORMAT = ".gguf"; @@ -23,26 +22,13 @@ const NVIDIA_INFO_FILE = path.join( "settings.json" ); -const DEFALT_SETTINGS = { - notify: true, - run_mode: "cpu", - nvidia_driver: { - exist: false, - version: "", - }, - cuda: { - exist: false, - version: "", - }, - gpus: [], - gpu_highest_vram: "", -}; - // The subprocess instance for Nitro let subprocess = undefined; let currentModelFile: string = undefined; let currentSettings = undefined; +let nitroProcessInfo = undefined; + /** * Stops a Nitro subprocess. * @param wrapper - The model wrapper. @@ -52,137 +38,6 @@ function stopModel(): Promise { return killSubprocess(); } -/** - * Validate nvidia and cuda for linux and windows - */ -async function updateNvidiaDriverInfo(): Promise { - exec( - "nvidia-smi --query-gpu=driver_version --format=csv,noheader", - (error, stdout) => { - let data; - try { - data = JSON.parse(readFileSync(NVIDIA_INFO_FILE, "utf-8")); - } catch (error) { - data = DEFALT_SETTINGS; - } - - if (!error) { - const firstLine = stdout.split("\n")[0].trim(); - data["nvidia_driver"].exist = true; - data["nvidia_driver"].version = firstLine; - } else { - data["nvidia_driver"].exist = false; - } - - writeFileSync(NVIDIA_INFO_FILE, JSON.stringify(data, null, 2)); - Promise.resolve(); - } - ); -} - -function checkFileExistenceInPaths(file: string, paths: string[]): boolean { - return paths.some((p) => existsSync(path.join(p, file))); -} - -function updateCudaExistence() { - let filesCuda12: string[]; - let filesCuda11: string[]; - let paths: string[]; - let cudaVersion: string = ""; - - if (process.platform === "win32") { - filesCuda12 = ["cublas64_12.dll", "cudart64_12.dll", "cublasLt64_12.dll"]; - filesCuda11 = ["cublas64_11.dll", "cudart64_11.dll", "cublasLt64_11.dll"]; - paths = process.env.PATH ? process.env.PATH.split(path.delimiter) : []; - } else { - filesCuda12 = ["libcudart.so.12", "libcublas.so.12", "libcublasLt.so.12"]; - filesCuda11 = ["libcudart.so.11.0", "libcublas.so.11", "libcublasLt.so.11"]; - paths = process.env.LD_LIBRARY_PATH - ? process.env.LD_LIBRARY_PATH.split(path.delimiter) - : []; - paths.push("/usr/lib/x86_64-linux-gnu/"); - } - - let cudaExists = filesCuda12.every( - (file) => existsSync(file) || checkFileExistenceInPaths(file, paths) - ); - - if (!cudaExists) { - cudaExists = filesCuda11.every( - (file) => existsSync(file) || checkFileExistenceInPaths(file, paths) - ); - if (cudaExists) { - cudaVersion = "11"; - } - } else { - cudaVersion = "12"; - } - - let data; - try { - data = JSON.parse(readFileSync(NVIDIA_INFO_FILE, "utf-8")); - } catch (error) { - data = DEFALT_SETTINGS; - } - - data["cuda"].exist = cudaExists; - data["cuda"].version = cudaVersion; - if (cudaExists) { - data.run_mode = "gpu"; - } - writeFileSync(NVIDIA_INFO_FILE, JSON.stringify(data, null, 2)); -} - -async function updateGpuInfo(): Promise { - exec( - "nvidia-smi --query-gpu=index,memory.total --format=csv,noheader,nounits", - (error, stdout) => { - let data; - try { - data = JSON.parse(readFileSync(NVIDIA_INFO_FILE, "utf-8")); - } catch (error) { - data = DEFALT_SETTINGS; - } - - if (!error) { - // Get GPU info and gpu has higher memory first - let highestVram = 0; - let highestVramId = "0"; - let gpus = stdout - .trim() - .split("\n") - .map((line) => { - let [id, vram] = line.split(", "); - vram = vram.replace(/\r/g, ""); - if (parseFloat(vram) > highestVram) { - highestVram = parseFloat(vram); - highestVramId = id; - } - return { id, vram }; - }); - - data["gpus"] = gpus; - data["gpu_highest_vram"] = highestVramId; - } else { - data["gpus"] = []; - } - - writeFileSync(NVIDIA_INFO_FILE, JSON.stringify(data, null, 2)); - Promise.resolve(); - } - ); -} - -async function updateNvidiaInfo() { - if (process.platform !== "darwin") { - await Promise.all([ - updateNvidiaDriverInfo(), - updateCudaExistence(), - updateGpuInfo(), - ]); - } -} - /** * Initializes a Nitro subprocess to load a machine learning model. * @param wrapper - The model wrapper. @@ -236,31 +91,28 @@ async function initModel(wrapper: any): Promise { async function loadModel(nitroResourceProbe: any | undefined) { // Gather system information for CPU physical cores and memory if (!nitroResourceProbe) nitroResourceProbe = await getResourcesInfo(); - return ( - killSubprocess() - .then(() => tcpPortUsed.waitUntilFree(PORT, 300, 5000)) - // wait for 500ms to make sure the port is free for windows platform - .then(() => { - if (process.platform === "win32") { - return sleep(500); - } else { - return sleep(0); - } - }) - .then(() => spawnNitroProcess(nitroResourceProbe)) - .then(() => loadLLMModel(currentSettings)) - .then(validateModelStatus) - .catch((err) => { - console.error("error: ", err); - // TODO: Broadcast error so app could display proper error message - return { error: err, currentModelFile }; - }) - ); -} - -// Add function sleep -function sleep(ms) { - return new Promise((resolve) => setTimeout(resolve, ms)); + return killSubprocess() + .then(() => tcpPortUsed.waitUntilFree(PORT, 300, 5000)) + .then(() => { + /** + * There is a problem with Windows process manager + * Should wait for awhile to make sure the port is free and subprocess is killed + * The tested threshold is 500ms + **/ + if (process.platform === "win32") { + return new Promise((resolve) => setTimeout(resolve, 500)); + } else { + return Promise.resolve(); + } + }) + .then(() => spawnNitroProcess(nitroResourceProbe)) + .then(() => loadLLMModel(currentSettings)) + .then(validateModelStatus) + .catch((err) => { + log(`[NITRO]::Error: ${err}`); + // TODO: Broadcast error so app could display proper error message + return { error: err, currentModelFile }; + }); } function promptTemplateConverter(promptTemplate) { @@ -310,6 +162,7 @@ function promptTemplateConverter(promptTemplate) { * @returns A Promise that resolves when the model is loaded successfully, or rejects with an error message if the model is not found or fails to load. */ function loadLLMModel(settings): Promise { + log(`[NITRO]::Debug: Loading model with params ${settings}`); return fetchRetry(NITRO_HTTP_LOAD_MODEL_URL, { method: "POST", headers: { @@ -318,6 +171,8 @@ function loadLLMModel(settings): Promise { body: JSON.stringify(settings), retries: 3, retryDelay: 500, + }).catch((err) => { + log(`[NITRO]::Error: Load model failed with error ${err}`); }); } @@ -358,7 +213,8 @@ async function validateModelStatus(): Promise { async function killSubprocess(): Promise { const controller = new AbortController(); setTimeout(() => controller.abort(), 5000); - console.debug("Start requesting to kill Nitro..."); + log(`[NITRO]::Debug: Request to kill Nitro`); + return fetch(NITRO_HTTP_KILL_URL, { method: "DELETE", signal: controller.signal, @@ -369,20 +225,17 @@ async function killSubprocess(): Promise { }) .catch(() => {}) .then(() => tcpPortUsed.waitUntilFree(PORT, 300, 5000)) - .then(() => console.debug("Nitro is killed")); + .then(() => log(`[NITRO]::Debug: Nitro process is terminated`)); } -/** - * Look for the Nitro binary and execute it - * Using child-process to spawn the process - * Should run exactly platform specified Nitro binary version - */ + /** * Spawns a Nitro subprocess. * @param nitroResourceProbe - The Nitro resource probe. * @returns A promise that resolves when the Nitro subprocess is started. */ function spawnNitroProcess(nitroResourceProbe: any): Promise { - console.debug("Starting Nitro subprocess..."); + log(`[NITRO]::Debug: Spawning Nitro subprocess...`); + return new Promise(async (resolve, reject) => { let binaryFolder = path.join(__dirname, "bin"); // Current directory by default let cudaVisibleDevices = ""; @@ -424,7 +277,7 @@ function spawnNitroProcess(nitroResourceProbe: any): Promise { const binaryPath = path.join(binaryFolder, binaryName); // Execute the binary - subprocess = spawn(binaryPath, [1, LOCAL_HOST, PORT], { + subprocess = spawn(binaryPath, ["1", LOCAL_HOST, PORT.toString()], { cwd: binaryFolder, env: { ...process.env, @@ -434,16 +287,15 @@ function spawnNitroProcess(nitroResourceProbe: any): Promise { // Handle subprocess output subprocess.stdout.on("data", (data) => { - console.debug(`stdout: ${data}`); + log(`[NITRO]::Debug: ${data}`); }); subprocess.stderr.on("data", (data) => { - console.error("subprocess error:" + data.toString()); - console.error(`stderr: ${data}`); + log(`[NITRO]::Error: ${data}`); }); subprocess.on("close", (code) => { - console.debug(`child process exited with code ${code}`); + log(`[NITRO]::Debug: Nitro exited with code: ${code}`); subprocess = null; reject(`child process exited with code ${code}`); }); @@ -461,7 +313,7 @@ function spawnNitroProcess(nitroResourceProbe: any): Promise { function getResourcesInfo(): Promise { return new Promise(async (resolve) => { const cpu = await osUtils.cpuCount(); - console.log("cpu: ", cpu); + log(`[NITRO]::CPU informations - ${cpu}`); const response: ResourcesInfo = { numCpuPhysicalCore: cpu, memAvailable: 0, @@ -470,6 +322,35 @@ function getResourcesInfo(): Promise { }); } +/** + * This will retrive GPU informations and persist settings.json + * Will be called when the extension is loaded to turn on GPU acceleration if supported + */ +async function updateNvidiaInfo() { + if (process.platform !== "darwin") { + await Promise.all([ + updateNvidiaDriverInfo(), + updateCudaExistence(), + updateGpuInfo(), + ]); + } +} + +/** + * Retrieve current nitro process + */ +const getCurrentNitroProcessInfo = (): Promise => { + nitroProcessInfo = { + isRunning: subprocess != null, + }; + return nitroProcessInfo; +}; + +/** + * Every module should have a dispose function + * This will be called when the extension is unloaded and should clean up any resources + * Also called when app is closed + */ function dispose() { // clean other registered resources here killSubprocess(); @@ -481,4 +362,5 @@ module.exports = { killSubprocess, dispose, updateNvidiaInfo, + getCurrentNitroProcessInfo, }; diff --git a/extensions/inference-nitro-extension/webpack.config.js b/extensions/inference-nitro-extension/webpack.config.js index 45be62271..2927affbc 100644 --- a/extensions/inference-nitro-extension/webpack.config.js +++ b/extensions/inference-nitro-extension/webpack.config.js @@ -22,6 +22,7 @@ module.exports = { process.env.INFERENCE_URL || "http://127.0.0.1:3928/inferences/llamacpp/chat_completion" ), + TROUBLESHOOTING_URL: JSON.stringify("https://jan.ai/guides/troubleshooting") }), ], output: { diff --git a/extensions/model-extension/package.json b/extensions/model-extension/package.json index 94211a11d..46e92b0ed 100644 --- a/extensions/model-extension/package.json +++ b/extensions/model-extension/package.json @@ -1,6 +1,6 @@ { "name": "@janhq/model-extension", - "version": "1.0.20", + "version": "1.0.21", "description": "Model Management Extension provides model exploration and seamless downloads", "main": "dist/index.js", "module": "dist/module.js", diff --git a/extensions/model-extension/src/index.ts b/extensions/model-extension/src/index.ts index 5062096e6..b26036b89 100644 --- a/extensions/model-extension/src/index.ts +++ b/extensions/model-extension/src/index.ts @@ -5,7 +5,6 @@ import { abortDownload, getResourcePath, getUserSpace, - fileStat, InferenceEngine, joinPath, ModelExtension, @@ -281,7 +280,7 @@ export default class JanModelExtension implements ModelExtension { if (file.endsWith('.json')) continue const path = await joinPath([JanModelExtension._homeDir, dirName, file]) - const fileStats = await fileStat(path) + const fileStats = await fs.fileStat(path) if (fileStats.isDirectory) continue binaryFileSize = fileStats.size binaryFileName = file diff --git a/models/capybara-34b/model.json b/models/capybara-34b/model.json index 521fb5301..ffca28c6d 100644 --- a/models/capybara-34b/model.json +++ b/models/capybara-34b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/codeninja-1.0-7b/model.json b/models/codeninja-1.0-7b/model.json index c543f1a40..98fbac5df 100644 --- a/models/codeninja-1.0-7b/model.json +++ b/models/codeninja-1.0-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": ["<|end_of_turn|>"], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/deepseek-coder-1.3b/model.json b/models/deepseek-coder-1.3b/model.json index 46f7a80ea..8c454802f 100644 --- a/models/deepseek-coder-1.3b/model.json +++ b/models/deepseek-coder-1.3b/model.json @@ -16,6 +16,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/deepseek-coder-34b/model.json b/models/deepseek-coder-34b/model.json index 594470626..905a66033 100644 --- a/models/deepseek-coder-34b/model.json +++ b/models/deepseek-coder-34b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/dolphin-2.7-mixtral-8x7b/model.json b/models/dolphin-2.7-mixtral-8x7b/model.json index 4b16b5035..482f1a30e 100644 --- a/models/dolphin-2.7-mixtral-8x7b/model.json +++ b/models/dolphin-2.7-mixtral-8x7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/llama2-chat-70b-q4/model.json b/models/llama2-chat-70b-q4/model.json index 84e22d1f0..2595ab677 100644 --- a/models/llama2-chat-70b-q4/model.json +++ b/models/llama2-chat-70b-q4/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/llama2-chat-7b-q4/model.json b/models/llama2-chat-7b-q4/model.json index ec8bb2cd3..68eab3790 100644 --- a/models/llama2-chat-7b-q4/model.json +++ b/models/llama2-chat-7b-q4/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/mistral-ins-7b-q4/model.json b/models/mistral-ins-7b-q4/model.json index f06bddaad..6db1aa35b 100644 --- a/models/mistral-ins-7b-q4/model.json +++ b/models/mistral-ins-7b-q4/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/mixtral-8x7b-instruct/model.json b/models/mixtral-8x7b-instruct/model.json index 5167e8335..31ff2838a 100644 --- a/models/mixtral-8x7b-instruct/model.json +++ b/models/mixtral-8x7b-instruct/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/noromaid-7b/model.json b/models/noromaid-7b/model.json index dd919bb65..fbb7858e1 100644 --- a/models/noromaid-7b/model.json +++ b/models/noromaid-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/openchat-3.5-7b/model.json b/models/openchat-3.5-7b/model.json index 09b95eb64..e4b72f9c6 100644 --- a/models/openchat-3.5-7b/model.json +++ b/models/openchat-3.5-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": ["<|end_of_turn|>"], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/openhermes-neural-7b/model.json b/models/openhermes-neural-7b/model.json index 230ef65f2..ca3e88502 100644 --- a/models/openhermes-neural-7b/model.json +++ b/models/openhermes-neural-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/phi-2-3b/model.json b/models/phi-2-3b/model.json index 10e39c292..97ff369e7 100644 --- a/models/phi-2-3b/model.json +++ b/models/phi-2-3b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/phind-34b/model.json b/models/phind-34b/model.json index 29ef7572b..7fc77ed71 100644 --- a/models/phind-34b/model.json +++ b/models/phind-34b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/solar-10.7b-slerp/model.json b/models/solar-10.7b-slerp/model.json index 7963bd05f..9177fa013 100644 --- a/models/solar-10.7b-slerp/model.json +++ b/models/solar-10.7b-slerp/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/starling-7b/model.json b/models/starling-7b/model.json index d5f5b57c8..1a6d7e55c 100644 --- a/models/starling-7b/model.json +++ b/models/starling-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": ["<|end_of_turn|>"], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/stealth-v1.2-7b/model.json b/models/stealth-v1.2-7b/model.json index dee5d68f5..92bfe46e1 100644 --- a/models/stealth-v1.2-7b/model.json +++ b/models/stealth-v1.2-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/tinyllama-1.1b/model.json b/models/tinyllama-1.1b/model.json index 50a68f1a9..641511569 100644 --- a/models/tinyllama-1.1b/model.json +++ b/models/tinyllama-1.1b/model.json @@ -15,13 +15,14 @@ "top_p": 0.95, "stream": true, "max_tokens": 2048, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, "metadata": { "author": "TinyLlama", "tags": ["Tiny", "Foundation Model"], - "size": 1170000000 + "size": 669000000 }, "engine": "nitro" } \ No newline at end of file diff --git a/models/trinity-v1.2-7b/model.json b/models/trinity-v1.2-7b/model.json index 1532b1f09..ce5e7a4cf 100644 --- a/models/trinity-v1.2-7b/model.json +++ b/models/trinity-v1.2-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/tulu-2-70b/model.json b/models/tulu-2-70b/model.json index 4437dcbbd..ae95b870d 100644 --- a/models/tulu-2-70b/model.json +++ b/models/tulu-2-70b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/wizardcoder-13b/model.json b/models/wizardcoder-13b/model.json index f73c93e8e..1605ed362 100644 --- a/models/wizardcoder-13b/model.json +++ b/models/wizardcoder-13b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/yarn-mistral-7b/model.json b/models/yarn-mistral-7b/model.json index 8b048dd3d..2676fbb58 100644 --- a/models/yarn-mistral-7b/model.json +++ b/models/yarn-mistral-7b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/models/yi-34b/model.json b/models/yi-34b/model.json index d5b90febe..8ff23aaa0 100644 --- a/models/yi-34b/model.json +++ b/models/yi-34b/model.json @@ -15,6 +15,7 @@ "top_p": 0.95, "stream": true, "max_tokens": 4096, + "stop": [], "frequency_penalty": 0, "presence_penalty": 0 }, diff --git a/server/index.ts b/server/index.ts index 55b4a8d3c..49d37a447 100644 --- a/server/index.ts +++ b/server/index.ts @@ -9,12 +9,13 @@ dotenv.config(); const JAN_API_HOST = process.env.JAN_API_HOST || "127.0.0.1"; const JAN_API_PORT = Number.parseInt(process.env.JAN_API_PORT || "1337"); -const serverLogPath = path.join(os.homedir(), "jan", "server.log"); +const serverLogPath = path.join(os.homedir(), "jan", "logs", "server.log"); let server: any | undefined = undefined; export const startServer = async (schemaPath?: string, baseDir?: string) => { try { + log(`[API]::Debug: Starting JAN API server...`, "server.log") server = fastify({ logger: { level: "info", @@ -62,17 +63,18 @@ export const startServer = async (schemaPath?: string, baseDir?: string) => { host: JAN_API_HOST, }) .then(() => { - log(`JAN API listening at: http://${JAN_API_HOST}:${JAN_API_PORT}`); + log(`[API]::Debug: JAN API listening at: http://${JAN_API_HOST}:${JAN_API_PORT}`); }); } catch (e) { - log(e); + log(`[API]::Error: ${e}`); } }; export const stopServer = async () => { try { + log(`[API]::Debug: Server stopped`, "server.log") await server.close(); } catch (e) { - log(e); + log(`[API]::Error: ${e}`); } }; diff --git a/web/containers/CardSidebar/index.tsx b/web/containers/CardSidebar/index.tsx index ac564c2f2..8222c4918 100644 --- a/web/containers/CardSidebar/index.tsx +++ b/web/containers/CardSidebar/index.tsx @@ -5,12 +5,10 @@ import { ChevronDownIcon, MoreVerticalIcon, FolderOpenIcon, - Code2Icon, PencilIcon, } from 'lucide-react' import { twMerge } from 'tailwind-merge' -import { useActiveModel } from '@/hooks/useActiveModel' import { useClickOutside } from '@/hooks/useClickOutside' import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' @@ -33,16 +31,15 @@ export default function CardSidebar({ const [more, setMore] = useState(false) const [menu, setMenu] = useState(null) const [toggle, setToggle] = useState(null) - const { activeModel } = useActiveModel() const activeThread = useAtomValue(activeThreadAtom) useClickOutside(() => setMore(false), null, [menu, toggle]) let openFolderTitle: string = 'Open Containing Folder' if (isMac) { - openFolderTitle = 'Reveal in Finder' + openFolderTitle = 'Show in Finder' } else if (isWindows) { - openFolderTitle = 'Reveal in File Explorer' + openFolderTitle = 'Show in File Explorer' } return ( @@ -108,7 +105,7 @@ export default function CardSidebar({ {title === 'Model' ? (
- Show in Finder + {openFolderTitle} Opens thread.json. Changes affect this thread only. diff --git a/web/containers/Providers/EventHandler.tsx b/web/containers/Providers/EventHandler.tsx index 2c81f4c23..66622b1b6 100644 --- a/web/containers/Providers/EventHandler.tsx +++ b/web/containers/Providers/EventHandler.tsx @@ -8,8 +8,8 @@ import { ExtensionType, MessageStatus, Model, + ConversationalExtension, } from '@janhq/core' -import { ConversationalExtension } from '@janhq/core' import { useAtomValue, useSetAtom } from 'jotai' import { activeModelAtom, stateModelAtom } from '@/hooks/useActiveModel' @@ -64,14 +64,10 @@ export default function EventHandler({ children }: { children: ReactNode }) { })) } - async function handleModelStopped(model: Model) { + async function handleModelStopped() { setTimeout(async () => { setActiveModel(undefined) setStateModel({ state: 'start', loading: false, model: '' }) - // toaster({ - // title: 'Success!', - // description: `Model ${model.id} has been stopped.`, - // }) }, 500) } @@ -92,10 +88,7 @@ export default function EventHandler({ children }: { children: ReactNode }) { message.content, message.status ) - if ( - message.status === MessageStatus.Ready || - message.status === MessageStatus.Error - ) { + if (message.status !== MessageStatus.Pending) { // Mark the thread as not waiting for response updateThreadWaiting(message.thread_id, false) diff --git a/web/hooks/useUpdateModelParameters.ts b/web/hooks/useUpdateModelParameters.ts index db7c759fc..632e9f631 100644 --- a/web/hooks/useUpdateModelParameters.ts +++ b/web/hooks/useUpdateModelParameters.ts @@ -42,7 +42,9 @@ export default function useUpdateModelParameters() { } const updatedModelParams: ModelParams = { ...activeModelParams, - [name]: value, + // Explicitly set the value to an array if the name is 'stop' + // This is because the inference engine would only accept an array for the 'stop' parameter + [name]: name === 'stop' ? (value === '' ? [] : [value]) : value, } // update the state diff --git a/web/screens/Chat/ChatBody/index.tsx b/web/screens/Chat/ChatBody/index.tsx index d2a34388e..f56e13845 100644 --- a/web/screens/Chat/ChatBody/index.tsx +++ b/web/screens/Chat/ChatBody/index.tsx @@ -2,17 +2,9 @@ import { Fragment } from 'react' import ScrollToBottom from 'react-scroll-to-bottom' -import { - ChatCompletionRole, - ConversationalExtension, - ExtensionType, - InferenceEngine, - MessageStatus, -} from '@janhq/core' +import { InferenceEngine, MessageStatus } from '@janhq/core' import { Button } from '@janhq/uikit' -import { useAtomValue, useSetAtom } from 'jotai' - -import { RefreshCcw } from 'lucide-react' +import { useAtomValue } from 'jotai' import LogoMark from '@/containers/Brand/Logo/Mark' @@ -22,45 +14,16 @@ import { useGetDownloadedModels } from '@/hooks/useGetDownloadedModels' import { useMainViewState } from '@/hooks/useMainViewState' -import useSendChatMessage from '@/hooks/useSendChatMessage' - import ChatItem from '../ChatItem' -import { extensionManager } from '@/extension' -import { - deleteMessageAtom, - getCurrentChatMessagesAtom, -} from '@/helpers/atoms/ChatMessage.atom' -import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' +import ErrorMessage from '../ErrorMessage' + +import { getCurrentChatMessagesAtom } from '@/helpers/atoms/ChatMessage.atom' const ChatBody: React.FC = () => { const messages = useAtomValue(getCurrentChatMessagesAtom) const { downloadedModels } = useGetDownloadedModels() const { setMainViewState } = useMainViewState() - const thread = useAtomValue(activeThreadAtom) - const deleteMessage = useSetAtom(deleteMessageAtom) - const { resendChatMessage } = useSendChatMessage() - - const regenerateMessage = async () => { - const lastMessageIndex = messages.length - 1 - const message = messages[lastMessageIndex] - if (message.role !== ChatCompletionRole.User) { - // Delete last response before regenerating - deleteMessage(message.id ?? '') - if (thread) { - await extensionManager - .get(ExtensionType.Conversational) - ?.writeMessages( - thread.id, - messages.filter((msg) => msg.id !== message.id) - ) - } - const targetMessage = messages[lastMessageIndex - 1] - if (targetMessage) resendChatMessage(targetMessage) - } else { - resendChatMessage(message) - } - } if (downloadedModels.length === 0) return ( @@ -118,26 +81,10 @@ const ChatBody: React.FC = () => { {messages.map((message, index) => (
- {message.status === MessageStatus.Error && + {(message.status === MessageStatus.Error || + message.status === MessageStatus.Stopped) && index === messages.length - 1 && ( -
- - Oops! The generation was interrupted. Let's give it - another go! - - -
+ )}
))} diff --git a/web/screens/Chat/ErrorMessage/index.tsx b/web/screens/Chat/ErrorMessage/index.tsx new file mode 100644 index 000000000..f4c5fc45a --- /dev/null +++ b/web/screens/Chat/ErrorMessage/index.tsx @@ -0,0 +1,93 @@ +import { + ChatCompletionRole, + ConversationalExtension, + ExtensionType, + MessageStatus, + ThreadMessage, +} from '@janhq/core' +import { Button } from '@janhq/uikit' +import { useAtomValue, useSetAtom } from 'jotai' +import { RefreshCcw } from 'lucide-react' + +import useSendChatMessage from '@/hooks/useSendChatMessage' + +import { extensionManager } from '@/extension' +import { + deleteMessageAtom, + getCurrentChatMessagesAtom, +} from '@/helpers/atoms/ChatMessage.atom' +import { activeThreadAtom } from '@/helpers/atoms/Thread.atom' + +const ErrorMessage = ({ message }: { message: ThreadMessage }) => { + const messages = useAtomValue(getCurrentChatMessagesAtom) + const thread = useAtomValue(activeThreadAtom) + const deleteMessage = useSetAtom(deleteMessageAtom) + const { resendChatMessage } = useSendChatMessage() + + const regenerateMessage = async () => { + const lastMessageIndex = messages.length - 1 + const message = messages[lastMessageIndex] + if (message.role !== ChatCompletionRole.User) { + // Delete last response before regenerating + deleteMessage(message.id ?? '') + if (thread) { + await extensionManager + .get(ExtensionType.Conversational) + ?.writeMessages( + thread.id, + messages.filter((msg) => msg.id !== message.id) + ) + } + const targetMessage = messages[lastMessageIndex - 1] + if (targetMessage) resendChatMessage(targetMessage) + } else { + resendChatMessage(message) + } + } + + return ( + <> + {message.status === MessageStatus.Stopped && ( +
+ + Oops! The generation was interrupted. Let's give it another go! + + +
+ )} + {message.status === MessageStatus.Error && ( +
+ +

Apologies, something's amiss!

+ Jan's in beta. Find troubleshooting guides{' '} + + here + {' '} + or reach out to us on{' '} + + Discord + {' '} + for assistance. +
+
+ )} + + ) +} +export default ErrorMessage diff --git a/web/screens/Chat/SimpleTextMessage/index.tsx b/web/screens/Chat/SimpleTextMessage/index.tsx index 11e34442a..8754664aa 100644 --- a/web/screens/Chat/SimpleTextMessage/index.tsx +++ b/web/screens/Chat/SimpleTextMessage/index.tsx @@ -85,11 +85,10 @@ const SimpleTextMessage: React.FC = (props) => { const codeBlockCopyEvent = useRef((e: Event) => { const target: HTMLElement = e.target as HTMLElement if (typeof target.className !== 'string') return null - const isCopyActionClassName = target?.className.includes('copy-action') - const isCodeBlockParent = - target.parentElement?.parentElement?.className.includes('code-block') - if (isCopyActionClassName || isCodeBlockParent) { + const isCopyActionClassName = target?.className.includes('copy-action') + + if (isCopyActionClassName) { const content = target?.parentNode?.querySelector('code')?.innerText ?? '' clipboard.copy(content) } @@ -104,10 +103,7 @@ const SimpleTextMessage: React.FC = (props) => { }, []) useEffect(() => { - if ( - props.status === MessageStatus.Ready || - props.status === MessageStatus.Error - ) { + if (props.status !== MessageStatus.Pending) { return } const currentTimestamp = new Date().getTime() // Get current time in milliseconds diff --git a/web/screens/ExploreModels/ExploreModelItemHeader/index.tsx b/web/screens/ExploreModels/ExploreModelItemHeader/index.tsx index ceab733bd..c35e480f2 100644 --- a/web/screens/ExploreModels/ExploreModelItemHeader/index.tsx +++ b/web/screens/ExploreModels/ExploreModelItemHeader/index.tsx @@ -2,7 +2,7 @@ import { useCallback, useMemo } from 'react' import { Model } from '@janhq/core' -import { Button } from '@janhq/uikit' +import { Badge, Button } from '@janhq/uikit' import { atom, useAtomValue } from 'jotai' @@ -14,6 +14,7 @@ import ModalCancelDownload from '@/containers/ModalCancelDownload' import { MainViewState } from '@/constants/screens' +import { useActiveModel } from '@/hooks/useActiveModel' import { useCreateNewThread } from '@/hooks/useCreateNewThread' import useDownloadModel from '@/hooks/useDownloadModel' import { useDownloadState } from '@/hooks/useDownloadState' @@ -23,6 +24,8 @@ import { useMainViewState } from '@/hooks/useMainViewState' import { toGibibytes } from '@/utils/converter' +import { totalRamAtom, usedRamAtom } from '@/helpers/atoms/SystemBar.atom' + type Props = { model: Model onClick: () => void @@ -34,6 +37,8 @@ const ExploreModelItemHeader: React.FC = ({ model, onClick, open }) => { const { downloadedModels } = useGetDownloadedModels() const { modelDownloadStateAtom, downloadStates } = useDownloadState() const { requestCreateNewThread } = useCreateNewThread() + const totalRam = useAtomValue(totalRamAtom) + const usedRam = useAtomValue(usedRamAtom) const downloadAtom = useMemo( () => atom((get) => get(modelDownloadStateAtom)[model.id]), @@ -79,6 +84,35 @@ const ExploreModelItemHeader: React.FC = ({ model, onClick, open }) => { downloadButton = } + const { activeModel } = useActiveModel() + + const getLabel = (size: number) => { + const minimumRamModel = size * 1.25 + const availableRam = totalRam - usedRam + (activeModel?.metadata.size ?? 0) + + if (minimumRamModel > totalRam) { + return ( + + Not enough RAM + + ) + } + if (minimumRamModel < availableRam) { + return ( + + Recommended + + ) + } + if (minimumRamModel < totalRam && minimumRamModel > availableRam) { + return ( + + Slow on your device + + ) + } + } + return (
= ({ model, onClick, open }) => { {toGibibytes(model.metadata.size)} + {getLabel(model.metadata.size)} + {downloadButton} (false) @@ -37,6 +39,16 @@ const Advanced = () => { }) }, []) + const clearLogs = async () => { + if (await fs.existsSync(`file://logs`)) { + await fs.rmdirSync(`file://logs`, { recursive: true }) + } + toaster({ + title: 'Logs cleared', + description: 'All logs have been cleared.', + }) + } + return (
{/* CPU / GPU switching */} @@ -137,6 +149,19 @@ const Advanced = () => {
)} +
+
+
+
Clear logs
+
+

+ Clear all logs from Jan app. +

+
+ +