From 90b8769ef376eeaff7d706bd98b4e050ee4aa3c0 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Tue, 1 Apr 2025 03:50:32 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat:=20Use=20Model=20Specs=20+?= =?UTF-8?q?=20Specific=20Endpoints,=20Limit=20Providers=20for=20Agents=20(?= =?UTF-8?q?#6650)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 refactor: Remove modelSpecs prop from ModelSelector and related components * fix: Update submission.conversationId references in SSE hooks and data types as was incorrectly typed * feat: Allow showing specific endpoints alongside model specs via `addedEndpoints` field * feat: allowed agents providers via `agents.allowedProviders` field * fix: bump dicebear/sharp dependencies to resolve CVE-2024-12905 and improve avatar gen logic * fix: rename variable for clarity in loadDefaultInterface function * fix: add keepAddedConvos option to newConversation calls for modular chat support * fix: include model information in endpoint selection for improved context * fix: update data-provider version to 0.7.78 and increment config version to 1.2.4 --- api/package.json | 2 +- api/server/services/AppService.js | 2 +- .../services/Config/getEndpointsConfig.js | 4 +- .../services/Endpoints/agents/initialize.js | 12 + api/server/services/start/interface.js | 5 +- api/server/services/start/modelSpecs.js | 16 +- client/package.json | 4 +- client/src/common/selector.ts | 1 - client/src/components/Chat/Header.tsx | 3 +- .../Chat/Menus/Endpoints/ModelSelector.tsx | 4 +- .../Menus/Endpoints/ModelSelectorContext.tsx | 13 +- .../src/components/Messages/Content/Error.tsx | 7 +- client/src/components/Nav/AccountSettings.tsx | 8 +- .../SidePanel/Agents/AgentPanel.tsx | 8 +- .../SidePanel/Agents/ModelPanel.tsx | 2 +- client/src/hooks/Endpoint/useEndpoints.ts | 9 +- client/src/hooks/Input/useSelectMention.ts | 10 +- client/src/hooks/Messages/useAvatar.ts | 31 +- client/src/hooks/SSE/useEventHandlers.ts | 3 +- client/src/hooks/SSE/useSSE.ts | 7 +- client/src/locales/en/translation.json | 3 +- client/src/utils/forms.tsx | 2 +- package-lock.json | 1515 +++++++++-------- packages/data-provider/package.json | 2 +- packages/data-provider/src/config.ts | 7 +- packages/data-provider/src/models.ts | 1 + packages/data-provider/src/types.ts | 1 - 27 files changed, 905 insertions(+), 777 deletions(-) diff --git a/api/package.json b/api/package.json index 5a04b25b7..2a2c8be6d 100644 --- a/api/package.json +++ b/api/package.json @@ -104,7 +104,7 @@ "passport-ldapauth": "^3.0.1", "passport-local": "^1.0.0", "rate-limit-redis": "^4.2.0", - "sharp": "^0.32.6", + "sharp": "^0.33.5", "tiktoken": "^1.0.15", "traverse": "^0.6.7", "ua-parser-js": "^1.0.36", diff --git a/api/server/services/AppService.js b/api/server/services/AppService.js index 871599712..f245c1f73 100644 --- a/api/server/services/AppService.js +++ b/api/server/services/AppService.js @@ -146,7 +146,7 @@ const AppService = async (app) => { ...defaultLocals, fileConfig: config?.fileConfig, secureImageLinks: config?.secureImageLinks, - modelSpecs: processModelSpecs(endpoints, config.modelSpecs), + modelSpecs: processModelSpecs(endpoints, config.modelSpecs, interfaceConfig), ...endpointLocals, }; }; diff --git a/api/server/services/Config/getEndpointsConfig.js b/api/server/services/Config/getEndpointsConfig.js index 016f5f744..8ae022e4b 100644 --- a/api/server/services/Config/getEndpointsConfig.js +++ b/api/server/services/Config/getEndpointsConfig.js @@ -33,10 +33,12 @@ async function getEndpointsConfig(req) { }; } if (mergedConfig[EModelEndpoint.agents] && req.app.locals?.[EModelEndpoint.agents]) { - const { disableBuilder, capabilities, ..._rest } = req.app.locals[EModelEndpoint.agents]; + const { disableBuilder, capabilities, allowedProviders, ..._rest } = + req.app.locals[EModelEndpoint.agents]; mergedConfig[EModelEndpoint.agents] = { ...mergedConfig[EModelEndpoint.agents], + allowedProviders, disableBuilder, capabilities, }; diff --git a/api/server/services/Endpoints/agents/initialize.js b/api/server/services/Endpoints/agents/initialize.js index 26a476527..0a76f906e 100644 --- a/api/server/services/Endpoints/agents/initialize.js +++ b/api/server/services/Endpoints/agents/initialize.js @@ -1,5 +1,6 @@ const { createContentAggregator, Providers } = require('@librechat/agents'); const { + ErrorTypes, EModelEndpoint, getResponseSender, AgentCapabilities, @@ -117,6 +118,7 @@ function optionalChainWithEmptyCheck(...values) { * @param {ServerRequest} params.req * @param {ServerResponse} params.res * @param {Agent} params.agent + * @param {Set} [params.allowedProviders] * @param {object} [params.endpointOption] * @param {boolean} [params.isInitialAgent] * @returns {Promise} @@ -126,8 +128,14 @@ const initializeAgentOptions = async ({ res, agent, endpointOption, + allowedProviders, isInitialAgent = false, }) => { + if (allowedProviders.size > 0 && !allowedProviders.has(agent.provider)) { + throw new Error( + `{ "type": "${ErrorTypes.INVALID_AGENT_PROVIDER}", "info": "${agent.provider}" }`, + ); + } let currentFiles; /** @type {Array} */ const requestFiles = req.body.files ?? []; @@ -263,6 +271,8 @@ const initializeClient = async ({ req, res, endpointOption }) => { } const agentConfigs = new Map(); + /** @type {Set} */ + const allowedProviders = new Set(req?.app?.locals?.[EModelEndpoint.agents]?.allowedProviders); // Handle primary agent const primaryConfig = await initializeAgentOptions({ @@ -270,6 +280,7 @@ const initializeClient = async ({ req, res, endpointOption }) => { res, agent: primaryAgent, endpointOption, + allowedProviders, isInitialAgent: true, }); @@ -285,6 +296,7 @@ const initializeClient = async ({ req, res, endpointOption }) => { res, agent, endpointOption, + allowedProviders, }); agentConfigs.set(agentId, config); } diff --git a/api/server/services/start/interface.js b/api/server/services/start/interface.js index 5365c4af7..d9f171ca4 100644 --- a/api/server/services/start/interface.js +++ b/api/server/services/start/interface.js @@ -18,12 +18,15 @@ async function loadDefaultInterface(config, configDefaults, roleName = SystemRol const { interface: interfaceConfig } = config ?? {}; const { interface: defaults } = configDefaults; const hasModelSpecs = config?.modelSpecs?.list?.length > 0; + const includesAddedEndpoints = config?.modelSpecs?.addedEndpoints?.length > 0; /** @type {TCustomConfig['interface']} */ const loadedInterface = removeNullishValues({ endpointsMenu: interfaceConfig?.endpointsMenu ?? (hasModelSpecs ? false : defaults.endpointsMenu), - modelSelect: interfaceConfig?.modelSelect ?? (hasModelSpecs ? false : defaults.modelSelect), + modelSelect: + interfaceConfig?.modelSelect ?? + (hasModelSpecs ? includesAddedEndpoints : defaults.modelSelect), parameters: interfaceConfig?.parameters ?? (hasModelSpecs ? false : defaults.parameters), presets: interfaceConfig?.presets ?? (hasModelSpecs ? false : defaults.presets), sidePanel: interfaceConfig?.sidePanel ?? defaults.sidePanel, diff --git a/api/server/services/start/modelSpecs.js b/api/server/services/start/modelSpecs.js index f249a9c90..71387edb6 100644 --- a/api/server/services/start/modelSpecs.js +++ b/api/server/services/start/modelSpecs.js @@ -6,9 +6,10 @@ const { logger } = require('~/config'); * Sets up Model Specs from the config (`librechat.yaml`) file. * @param {TCustomConfig['endpoints']} [endpoints] - The loaded custom configuration for endpoints. * @param {TCustomConfig['modelSpecs'] | undefined} [modelSpecs] - The loaded custom configuration for model specs. + * @param {TCustomConfig['interface'] | undefined} [interfaceConfig] - The loaded interface configuration. * @returns {TCustomConfig['modelSpecs'] | undefined} The processed model specs, if any. */ -function processModelSpecs(endpoints, _modelSpecs) { +function processModelSpecs(endpoints, _modelSpecs, interfaceConfig) { if (!_modelSpecs) { return undefined; } @@ -20,6 +21,19 @@ function processModelSpecs(endpoints, _modelSpecs) { const customEndpoints = endpoints?.[EModelEndpoint.custom] ?? []; + if (interfaceConfig.modelSelect !== true && _modelSpecs.addedEndpoints.length > 0) { + logger.warn( + `To utilize \`addedEndpoints\`, which allows provider/model selections alongside model specs, set \`modelSelect: true\` in the interface configuration. + + Example: + \`\`\`yaml + interface: + modelSelect: true + \`\`\` + `, + ); + } + for (const spec of list) { if (EModelEndpoint[spec.preset.endpoint] && spec.preset.endpoint !== EModelEndpoint.custom) { modelSpecs.push(spec); diff --git a/client/package.json b/client/package.json index c8b6c5192..32c3bc32b 100644 --- a/client/package.json +++ b/client/package.json @@ -31,8 +31,8 @@ "@ariakit/react": "^0.4.15", "@ariakit/react-core": "^0.4.15", "@codesandbox/sandpack-react": "^2.19.10", - "@dicebear/collection": "^7.0.4", - "@dicebear/core": "^7.0.4", + "@dicebear/collection": "^9.2.2", + "@dicebear/core": "^9.2.2", "@headlessui/react": "^2.1.2", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.2", diff --git a/client/src/common/selector.ts b/client/src/common/selector.ts index 1c7061d16..619d8e8f8 100644 --- a/client/src/common/selector.ts +++ b/client/src/common/selector.ts @@ -20,5 +20,4 @@ export interface SelectedValues { export interface ModelSelectorProps { startupConfig: TStartupConfig | undefined; - modelSpecs: TModelSpec[]; } diff --git a/client/src/components/Chat/Header.tsx b/client/src/components/Chat/Header.tsx index 5988035d2..b5379c72a 100644 --- a/client/src/components/Chat/Header.tsx +++ b/client/src/components/Chat/Header.tsx @@ -16,7 +16,6 @@ const defaultInterface = getConfigDefaults().interface; export default function Header() { const { data: startupConfig } = useGetStartupConfig(); const { navVisible } = useOutletContext(); - const modelSpecs = useMemo(() => startupConfig?.modelSpecs?.list ?? [], [startupConfig]); const interfaceConfig = useMemo( () => startupConfig?.interface ?? defaultInterface, [startupConfig], @@ -39,7 +38,7 @@ export default function Header() {
{!navVisible && } - {} + {} {interfaceConfig.presets === true && interfaceConfig.modelSelect && } {hasAccessToBookmarks === true && } {hasAccessToMultiConvo === true && } diff --git a/client/src/components/Chat/Menus/Endpoints/ModelSelector.tsx b/client/src/components/Chat/Menus/Endpoints/ModelSelector.tsx index bcab56fb5..78d356fc8 100644 --- a/client/src/components/Chat/Menus/Endpoints/ModelSelector.tsx +++ b/client/src/components/Chat/Menus/Endpoints/ModelSelector.tsx @@ -98,9 +98,9 @@ function ModelSelectorContent() { ); } -export default function ModelSelector({ startupConfig, modelSpecs }: ModelSelectorProps) { +export default function ModelSelector({ startupConfig }: ModelSelectorProps) { return ( - + ); diff --git a/client/src/components/Chat/Menus/Endpoints/ModelSelectorContext.tsx b/client/src/components/Chat/Menus/Endpoints/ModelSelectorContext.tsx index 79caa67d3..01fc0e5a7 100644 --- a/client/src/components/Chat/Menus/Endpoints/ModelSelectorContext.tsx +++ b/client/src/components/Chat/Menus/Endpoints/ModelSelectorContext.tsx @@ -44,24 +44,20 @@ export function useModelSelectorContext() { interface ModelSelectorProviderProps { children: React.ReactNode; - modelSpecs: t.TModelSpec[]; startupConfig: t.TStartupConfig | undefined; } -export function ModelSelectorProvider({ - children, - modelSpecs, - startupConfig, -}: ModelSelectorProviderProps) { +export function ModelSelectorProvider({ children, startupConfig }: ModelSelectorProviderProps) { const agentsMap = useAgentsMapContext(); const assistantsMap = useAssistantsMapContext(); const { data: endpointsConfig } = useGetEndpointsQuery(); const { conversation, newConversation } = useChatContext(); + const modelSpecs = useMemo(() => startupConfig?.modelSpecs?.list ?? [], [startupConfig]); const { mappedEndpoints, endpointRequiresUserKey } = useEndpoints({ agentsMap, assistantsMap, - endpointsConfig, startupConfig, + endpointsConfig, }); const { onSelectEndpoint, onSelectSpec } = useSelectMention({ // presets, @@ -146,6 +142,7 @@ export function ModelSelectorProvider({ if (isAgentsEndpoint(endpoint.value)) { onSelectEndpoint?.(endpoint.value, { agent_id: model, + model: agentsMap?.[model]?.model ?? '', }); } else if (isAssistantsEndpoint(endpoint.value)) { onSelectEndpoint?.(endpoint.value, { @@ -157,7 +154,7 @@ export function ModelSelectorProvider({ } setSelectedValues({ endpoint: endpoint.value, - model: model, + model, modelSpec: '', }); }; diff --git a/client/src/components/Messages/Content/Error.tsx b/client/src/components/Messages/Content/Error.tsx index 1b19792c5..8a9391ccd 100644 --- a/client/src/components/Messages/Content/Error.tsx +++ b/client/src/components/Messages/Content/Error.tsx @@ -1,5 +1,5 @@ // file deepcode ignore HardcodedNonCryptoSecret: No hardcoded secrets -import { ViolationTypes, ErrorTypes } from 'librechat-data-provider'; +import { ViolationTypes, ErrorTypes, alternateName } from 'librechat-data-provider'; import type { TOpenAIMessage } from 'librechat-data-provider'; import type { LocalizeFunction } from '~/common'; import { formatJSON, extractJson, isJson } from '~/utils/json'; @@ -53,6 +53,11 @@ const errorMessages = { const { info } = json; return localize('com_error_input_length', { 0: info }); }, + [ErrorTypes.INVALID_AGENT_PROVIDER]: (json: TGenericError, localize: LocalizeFunction) => { + const { info } = json; + const provider = (alternateName[info] as string | undefined) ?? info; + return localize('com_error_invalid_agent_provider', { 0: provider }); + }, [ErrorTypes.GOOGLE_ERROR]: (json: TGenericError) => { const { info } = json; return info; diff --git a/client/src/components/Nav/AccountSettings.tsx b/client/src/components/Nav/AccountSettings.tsx index ec6b52fd5..70bf90d7c 100644 --- a/client/src/components/Nav/AccountSettings.tsx +++ b/client/src/components/Nav/AccountSettings.tsx @@ -1,6 +1,6 @@ +import { useState, memo } from 'react'; import { useRecoilState } from 'recoil'; import * as Select from '@ariakit/react/select'; -import { Fragment, useState, memo } from 'react'; import { FileText, LogOut } from 'lucide-react'; import { LinkIcon, GearIcon, DropdownMenuSeparator } from '~/components'; import { useGetStartupConfig, useGetUserBalance } from '~/data-provider'; @@ -23,7 +23,7 @@ function AccountSettings() { const [showFiles, setShowFiles] = useRecoilState(store.showFiles); const avatarSrc = useAvatar(user); - const name = user?.avatar ?? user?.username ?? ''; + const avatarSeed = user?.avatar || user?.name || user?.username || ''; return ( @@ -34,7 +34,7 @@ function AccountSettings() { >
- {name.length === 0 ? ( + {avatarSeed.length === 0 ? (
)}
diff --git a/client/src/components/SidePanel/Agents/AgentPanel.tsx b/client/src/components/SidePanel/Agents/AgentPanel.tsx index fd96e673d..7e0e80be7 100644 --- a/client/src/components/SidePanel/Agents/AgentPanel.tsx +++ b/client/src/components/SidePanel/Agents/AgentPanel.tsx @@ -56,18 +56,24 @@ export default function AgentPanel({ const { control, handleSubmit, reset } = methods; const agent_id = useWatch({ control, name: 'id' }); + const allowedProviders = useMemo( + () => new Set(agentsConfig?.allowedProviders), + [agentsConfig?.allowedProviders], + ); + const providers = useMemo( () => Object.keys(endpointsConfig ?? {}) .filter( (key) => !isAssistantsEndpoint(key) && + (allowedProviders.size > 0 ? allowedProviders.has(key) : true) && key !== EModelEndpoint.agents && key !== EModelEndpoint.chatGPTBrowser && key !== EModelEndpoint.gptPlugins, ) .map((provider) => createProviderOption(provider)), - [endpointsConfig], + [endpointsConfig, allowedProviders], ); /* Mutations */ diff --git a/client/src/components/SidePanel/Agents/ModelPanel.tsx b/client/src/components/SidePanel/Agents/ModelPanel.tsx index 75e393d57..d7e5dd1b4 100644 --- a/client/src/components/SidePanel/Agents/ModelPanel.tsx +++ b/client/src/components/SidePanel/Agents/ModelPanel.tsx @@ -12,7 +12,7 @@ import { getEndpointField, cn } from '~/utils'; import { useLocalize } from '~/hooks'; import { Panel } from '~/common'; -export default function Parameters({ +export default function ModelPanel({ setActivePanel, providers, models: modelsData, diff --git a/client/src/hooks/Endpoint/useEndpoints.ts b/client/src/hooks/Endpoint/useEndpoints.ts index 34b8ab446..4f579e1cd 100644 --- a/client/src/hooks/Endpoint/useEndpoints.ts +++ b/client/src/hooks/Endpoint/useEndpoints.ts @@ -37,6 +37,10 @@ export const useEndpoints = ({ const { data: endpoints = [] } = useGetEndpointsQuery({ select: mapEndpoints }); const { instanceProjectId } = startupConfig ?? {}; const interfaceConfig = startupConfig?.interface ?? {}; + const includedEndpoints = useMemo( + () => new Set(startupConfig?.modelSpecs?.addedEndpoints ?? []), + [startupConfig?.modelSpecs?.addedEndpoints], + ); const { endpoint } = conversation ?? {}; @@ -73,11 +77,14 @@ export const useEndpoints = ({ if (endpoints[i] === EModelEndpoint.agents && !hasAgentAccess) { continue; } + if (includedEndpoints.size > 0 && !includedEndpoints.has(endpoints[i])) { + continue; + } result.push(endpoints[i]); } return result; - }, [endpoints, hasAgentAccess]); + }, [endpoints, hasAgentAccess, includedEndpoints]); const endpointRequiresUserKey = useCallback( (ep: string) => { diff --git a/client/src/hooks/Input/useSelectMention.ts b/client/src/hooks/Input/useSelectMention.ts index 8ba53966b..ce5d2ed55 100644 --- a/client/src/hooks/Input/useSelectMention.ts +++ b/client/src/hooks/Input/useSelectMention.ts @@ -172,13 +172,19 @@ export default function useSelectMention({ }); /* We don't reset the latest message, only when changing settings mid-converstion */ - newConversation({ template: currentConvo, preset: currentConvo, keepLatestMessage: true }); + newConversation({ + template: currentConvo, + preset: currentConvo, + keepLatestMessage: true, + keepAddedConvos: true, + }); return; } newConversation({ template: { ...(template as Partial) }, preset: { ...kwargs, spec: null, iconURL: null, modelLabel: null, endpoint: newEndpoint }, + keepAddedConvos: isNewModular, }); }, [conversation, getDefaultConversation, modularChat, newConversation, endpointsConfig], @@ -233,7 +239,7 @@ export default function useSelectMention({ return; } - newConversation({ preset: newPreset, keepAddedConvos: true }); + newConversation({ preset: newPreset, keepAddedConvos: isModular }); }, [ modularChat, diff --git a/client/src/hooks/Messages/useAvatar.ts b/client/src/hooks/Messages/useAvatar.ts index c7f0cada8..e79d9c864 100644 --- a/client/src/hooks/Messages/useAvatar.ts +++ b/client/src/hooks/Messages/useAvatar.ts @@ -7,36 +7,35 @@ const avatarCache: Record = {}; const useAvatar = (user: TUser | undefined) => { return useMemo(() => { - if (!user?.username) { + const { username, name } = user ?? {}; + const seed = name || username; + if (!seed) { return ''; } - if (user.avatar) { + if (user?.avatar && user?.avatar !== '') { return user.avatar; } - const { username } = user; - - if (avatarCache[username]) { - return avatarCache[username]; + if (avatarCache[seed]) { + return avatarCache[seed]; } const avatar = createAvatar(initials, { - seed: username, + seed, fontFamily: ['Verdana'], fontSize: 36, }); let avatarDataUri = ''; - avatar - .toDataUri() - .then((dataUri) => { - avatarDataUri = dataUri; - avatarCache[username] = dataUri; // Store in cache - }) - .catch((error) => { - console.error('Failed to generate avatar:', error); - }); + try { + avatarDataUri = avatar.toDataUri(); + if (avatarDataUri) { + avatarCache[seed] = avatarDataUri; + } + } catch (error) { + console.error('Failed to generate avatar:', error); + } return avatarDataUri; }, [user]); diff --git a/client/src/hooks/SSE/useEventHandlers.ts b/client/src/hooks/SSE/useEventHandlers.ts index e1cd08f37..63e2e4aa3 100644 --- a/client/src/hooks/SSE/useEventHandlers.ts +++ b/client/src/hooks/SSE/useEventHandlers.ts @@ -528,7 +528,8 @@ export default function useEventHandlers({ setCompleted((prev) => new Set(prev.add(initialResponse.messageId))); - const conversationId = userMessage.conversationId ?? submission.conversationId ?? ''; + const conversationId = + userMessage.conversationId ?? submission.conversation?.conversationId ?? ''; const parseErrorResponse = (data: TResData | Partial) => { const metadata = data['responseMessage'] ?? data; diff --git a/client/src/hooks/SSE/useSSE.ts b/client/src/hooks/SSE/useSSE.ts index 3e5b3eda4..7d733cfb7 100644 --- a/client/src/hooks/SSE/useSSE.ts +++ b/client/src/hooks/SSE/useSSE.ts @@ -124,7 +124,7 @@ export default function useSSE( const data = JSON.parse(e.data); if (data.final != null) { - clearDraft(submission.conversationId); + clearDraft(submission.conversation?.conversationId); const { plugins } = data; finalHandler(data, { ...submission, plugins } as EventSubmission); (startupConfig?.balance?.enabled ?? false) && balanceQuery.refetch(); @@ -190,7 +190,10 @@ export default function useSSE( const latestMessages = getMessages(); const conversationId = latestMessages?.[latestMessages.length - 1]?.conversationId; return await abortConversation( - conversationId ?? userMessage.conversationId ?? submission.conversationId, + conversationId ?? + userMessage.conversationId ?? + submission.conversation?.conversationId ?? + '', submission as EventSubmission, latestMessages, ); diff --git a/client/src/locales/en/translation.json b/client/src/locales/en/translation.json index 9b83d9065..d20ce8af3 100644 --- a/client/src/locales/en/translation.json +++ b/client/src/locales/en/translation.json @@ -268,6 +268,7 @@ "com_error_files_upload_canceled": "The file upload request was canceled. Note: the file upload may still be processing and will need to be manually deleted.", "com_error_files_validation": "An error occurred while validating the file.", "com_error_input_length": "The latest message token count is too long, exceeding the token limit, or your token limit parameters are misconfigured, adversely affecting the context window. More info: {{0}}. Please shorten your message, adjust the max context size from the conversation parameters, or fork the conversation to continue.", + "com_error_invalid_agent_provider": "The \"{{0}}\" provider is not available for use with Agents. Please go to your agent's settings and select a currently available provider.", "com_error_invalid_user_key": "Invalid key provided. Please provide a valid key and try again.", "com_error_moderation": "It appears that the content submitted has been flagged by our moderation system for not aligning with our community guidelines. We're unable to proceed with this specific topic. If you have any other questions or topics you'd like to explore, please edit your message, or create a new conversation.", "com_error_no_base_url": "No base URL found. Please provide one and try again.", @@ -863,4 +864,4 @@ "com_endpoint_deprecated_info_a11y": "The plugin endpoint is deprecated and may be removed in future versions, please use the agent endpoint instead", "com_user_message": "You", "com_warning_resubmit_unsupported": "Resubmitting the AI message is not supported for this endpoint." -} \ No newline at end of file +} diff --git a/client/src/utils/forms.tsx b/client/src/utils/forms.tsx index f8ccc7cb4..cfd99f9d7 100644 --- a/client/src/utils/forms.tsx +++ b/client/src/utils/forms.tsx @@ -1,8 +1,8 @@ import { EarthIcon } from 'lucide-react'; import { + FileSources, alternateName, EModelEndpoint, - FileSources, EToolResources, } from 'librechat-data-provider'; import type { Agent, TFile } from 'librechat-data-provider'; diff --git a/package-lock.json b/package-lock.json index 514a033dc..e6b7e9d1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,7 @@ "passport-ldapauth": "^3.0.1", "passport-local": "^1.0.0", "rate-limit-redis": "^4.2.0", - "sharp": "^0.32.6", + "sharp": "^0.33.5", "tiktoken": "^1.0.15", "traverse": "^0.6.7", "ua-parser-js": "^1.0.36", @@ -1538,6 +1538,44 @@ } } }, + "api/node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, "api/node_modules/superagent": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", @@ -1625,8 +1663,8 @@ "@ariakit/react": "^0.4.15", "@ariakit/react-core": "^0.4.15", "@codesandbox/sandpack-react": "^2.19.10", - "@dicebear/collection": "^7.0.4", - "@dicebear/core": "^7.0.4", + "@dicebear/collection": "^9.2.2", + "@dicebear/core": "^9.2.2", "@headlessui/react": "^2.1.2", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.2", @@ -3073,6 +3111,390 @@ "react-dom": "^16.8.0 || ^17 || ^18" } }, + "client/node_modules/@dicebear/adventurer": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/adventurer/-/adventurer-9.2.2.tgz", + "integrity": "sha512-WjBXCP9EXbUul2zC3BS2/R3/4diw1uh/lU4jTEnujK1mhqwIwanFboIMzQsasNNL/xf+m3OHN7MUNJfHZ1fLZA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/adventurer-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/adventurer-neutral/-/adventurer-neutral-9.2.2.tgz", + "integrity": "sha512-XVAjhUWjav6luTZ7txz8zVJU/H0DiUy4uU1Z7IO5MDO6kWvum+If1+0OUgEWYZwM+RDI7rt2CgVP910DyZGd1w==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/avataaars": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/avataaars/-/avataaars-9.2.2.tgz", + "integrity": "sha512-WqJPQEt0OhBybTpI0TqU1uD1pSk9M2+VPIwvBye/dXo46b+0jHGpftmxjQwk6tX8z0+mRko8pwV5n+cWht1/+w==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/avataaars-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/avataaars-neutral/-/avataaars-neutral-9.2.2.tgz", + "integrity": "sha512-pRj16P27dFDBI3LtdiHUDwIXIGndHAbZf5AxaMkn6/+0X93mVQ/btVJDXyW0G96WCsyC88wKAWr6/KJotPxU6Q==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/big-ears": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/big-ears/-/big-ears-9.2.2.tgz", + "integrity": "sha512-hz4UXdPq4qqZpu0YVvlqM4RDFhk5i0WgPcuwj/MOLlgTjuj63uHUhCQSk6ZiW1DQOs12qpwUBMGWVHxBRBas9g==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/big-ears-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/big-ears-neutral/-/big-ears-neutral-9.2.2.tgz", + "integrity": "sha512-IPHt8fi3dv9cyfBJBZ4s8T+PhFCrQvOCf91iRHBT3iOLNPdyZpI5GNLmGiV0XMAvIDP5NvA5+f6wdoBLhYhbDA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/big-smile": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/big-smile/-/big-smile-9.2.2.tgz", + "integrity": "sha512-D4td0GL8or1nTNnXvZqkEXlzyqzGPWs3znOnm1HIohtFTeIwXm72Ob2lNDsaQJSJvXmVlwaQQ0CCTvyCl8Stjw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/bottts": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/bottts/-/bottts-9.2.2.tgz", + "integrity": "sha512-wugFkzw8JNWV1nftq/Wp/vmQsLAXDxrMtRK3AoMODuUpSVoP3EHRUfKS043xggOsQFvoj0HZ7kadmhn0AMLf5A==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/bottts-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/bottts-neutral/-/bottts-neutral-9.2.2.tgz", + "integrity": "sha512-lSgpqmSJtlnyxVuUgNdBwyzuA0O9xa5zRJtz7x2KyWbicXir5iYdX0MVMCkp1EDvlcxm9rGJsclktugOyakTlw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/collection": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/collection/-/collection-9.2.2.tgz", + "integrity": "sha512-vZAmXhPWCK3sf8Fj9/QflFC6XOLroJOT5K1HdnzHaPboEvffUQideGCrrEamnJtlH0iF0ZDXh8gqmwy2fu+yHA==", + "dependencies": { + "@dicebear/adventurer": "9.2.2", + "@dicebear/adventurer-neutral": "9.2.2", + "@dicebear/avataaars": "9.2.2", + "@dicebear/avataaars-neutral": "9.2.2", + "@dicebear/big-ears": "9.2.2", + "@dicebear/big-ears-neutral": "9.2.2", + "@dicebear/big-smile": "9.2.2", + "@dicebear/bottts": "9.2.2", + "@dicebear/bottts-neutral": "9.2.2", + "@dicebear/croodles": "9.2.2", + "@dicebear/croodles-neutral": "9.2.2", + "@dicebear/dylan": "9.2.2", + "@dicebear/fun-emoji": "9.2.2", + "@dicebear/glass": "9.2.2", + "@dicebear/icons": "9.2.2", + "@dicebear/identicon": "9.2.2", + "@dicebear/initials": "9.2.2", + "@dicebear/lorelei": "9.2.2", + "@dicebear/lorelei-neutral": "9.2.2", + "@dicebear/micah": "9.2.2", + "@dicebear/miniavs": "9.2.2", + "@dicebear/notionists": "9.2.2", + "@dicebear/notionists-neutral": "9.2.2", + "@dicebear/open-peeps": "9.2.2", + "@dicebear/personas": "9.2.2", + "@dicebear/pixel-art": "9.2.2", + "@dicebear/pixel-art-neutral": "9.2.2", + "@dicebear/rings": "9.2.2", + "@dicebear/shapes": "9.2.2", + "@dicebear/thumbs": "9.2.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/core": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/core/-/core-9.2.2.tgz", + "integrity": "sha512-ROhgHG249dPtcXgBHcqPEsDeAPRPRD/9d+tZCjLYyueO+cXDlIA8dUlxpwIVcOuZFvCyW6RJtqo8BhNAi16pIQ==", + "dependencies": { + "@types/json-schema": "^7.0.11" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "client/node_modules/@dicebear/croodles": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/croodles/-/croodles-9.2.2.tgz", + "integrity": "sha512-OzvAXQWsOgMwL3Sl+lBxCubqSOWoBJpC78c4TKnNTS21rR63TtXUyVdLLzgKVN4YHRnvMgtPf8F/W9YAgIDK4w==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/croodles-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/croodles-neutral/-/croodles-neutral-9.2.2.tgz", + "integrity": "sha512-/4mNirxoQ+z1kHXnpDRbJ1JV1ZgXogeTeNp0MaFYxocCgHfJ7ckNM23EE1I7akoo9pqPxrKlaeNzGAjKHdS9vA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/dylan": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/dylan/-/dylan-9.2.2.tgz", + "integrity": "sha512-s7e3XliC1YXP+Wykj+j5kwdOWFRXFzYHYk/PB4oZ1F3sJandXiG0HS4chaNu4EoP0yZgKyFMUVTGZx+o6tMaYg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/fun-emoji": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/fun-emoji/-/fun-emoji-9.2.2.tgz", + "integrity": "sha512-M+rYTpB3lfwz18f+/i+ggNwNWUoEj58SJqXJ1wr7Jh/4E5uL+NmJg9JGwYNaVtGbCFrKAjSaILNUWGQSFgMfog==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/glass": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/glass/-/glass-9.2.2.tgz", + "integrity": "sha512-imCMxcg+XScHYtQq2MUv1lCzhQSCUglMlPSezKEpXhTxgbgUpmGlSGVkOfmX5EEc7SQowKkF1W/1gNk6CXvBaQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/icons": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/icons/-/icons-9.2.2.tgz", + "integrity": "sha512-Tqq2OVCdS7J02DNw58xwlgLGl40sWEckbqXT3qRvIF63FfVq+wQZBGuhuiyAURcSgvsc3h2oQeYFi9iXh7HTOA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/identicon": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/identicon/-/identicon-9.2.2.tgz", + "integrity": "sha512-POVKFulIrcuZf3rdAgxYaSm2XUg/TJg3tg9zq9150reEGPpzWR7ijyJ03dzAADPzS3DExfdYVT9+z3JKwwJnTQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/initials": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/initials/-/initials-9.2.2.tgz", + "integrity": "sha512-/xNnsEmsstWjmF77htAOuwOMhFlP6eBVXgcgFlTl/CCH/Oc6H7t0vwX1he8KLQBBzjGpvJcvIAn4Wh9rE4D5/A==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/lorelei": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/lorelei/-/lorelei-9.2.2.tgz", + "integrity": "sha512-koXqVr/vcWUPo00VP5H6Czsit+uF1tmwd2NK7Q/e34/9Sd1f4QLLxHjjBNm/iNjCI1+UNTOvZ2Qqu0N5eo7Flw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/lorelei-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/lorelei-neutral/-/lorelei-neutral-9.2.2.tgz", + "integrity": "sha512-Eys9Os6nt2Xll7Mvu66CfRR2YggTopWcmFcRZ9pPdohS96kT0MsLI2iTcfZXQ51K8hvT3IbwoGc86W8n0cDxAQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/micah": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/micah/-/micah-9.2.2.tgz", + "integrity": "sha512-NCajcJV5yw8uMKiACp694w1T/UyYme2CUEzyTzWHgWnQ+drAuCcH8gpAoLWd67viNdQB/MTpNlaelUgTjmI4AQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/miniavs": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/miniavs/-/miniavs-9.2.2.tgz", + "integrity": "sha512-vvkWXttdw+KHF3j+9qcUFzK+P0nbNnImGjvN48wwkPIh2h08WWFq0MnoOls4IHwUJC4GXBjWtiyVoCxz6hhtOA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/notionists": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/notionists/-/notionists-9.2.2.tgz", + "integrity": "sha512-Z9orRaHoj7Y9Ap4wEu8XOrFACsG1KbbBQUPV1R50uh6AHwsyNrm4cS84ICoGLvxgLNHHOae3YCjd8aMu2z19zg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/notionists-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/notionists-neutral/-/notionists-neutral-9.2.2.tgz", + "integrity": "sha512-AhOzk+lz6kB4uxGun8AJhV+W1nttnMlxmxd+5KbQ/txCIziYIaeD3il44wsAGegEpGFvAZyMYtR/jjfHcem3TA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/open-peeps": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/open-peeps/-/open-peeps-9.2.2.tgz", + "integrity": "sha512-6PeQDHYyjvKrGSl/gP+RE5dSYAQGKpcGnM65HorgyTIugZK7STo0W4hvEycedupZ3MCCEH8x/XyiChKM2sHXog==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/personas": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/personas/-/personas-9.2.2.tgz", + "integrity": "sha512-705+ObNLC0w1fcgE/Utav+8bqO+Esu53TXegpX5j7trGEoIMf2bThqJGHuhknZ3+T2az3Wr89cGyOGlI0KLzLA==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/pixel-art": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/pixel-art/-/pixel-art-9.2.2.tgz", + "integrity": "sha512-BvbFdrpzQl04+Y9UsWP63YGug+ENGC7GMG88qbEFWxb/IqRavGa4H3D0T4Zl2PSLiw7f2Ctv98bsCQZ1PtCznQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/pixel-art-neutral": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/pixel-art-neutral/-/pixel-art-neutral-9.2.2.tgz", + "integrity": "sha512-CdUY77H6Aj7dKLW3hdkv7tu0XQJArUjaWoXihQxlhl3oVYplWaoyu9omYy5pl8HTqs8YgVTGljjMXYoFuK0JUw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/rings": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/rings/-/rings-9.2.2.tgz", + "integrity": "sha512-eD1J1k364Arny+UlvGrk12HP/XGG6WxPSm4BarFqdJGSV45XOZlwqoi7FlcMr9r9yvE/nGL8OizbwMYusEEdjw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/shapes": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/shapes/-/shapes-9.2.2.tgz", + "integrity": "sha512-e741NNWBa7fg0BjomxXa0fFPME2XCIR0FA+VHdq9AD2taTGHEPsg5x1QJhCRdK6ww85yeu3V3ucpZXdSrHVw5Q==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, + "client/node_modules/@dicebear/thumbs": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@dicebear/thumbs/-/thumbs-9.2.2.tgz", + "integrity": "sha512-FkPLDNu7n5kThLSk7lR/0cz/NkUqgGdZGfLZv6fLkGNGtv6W+e2vZaO7HCXVwIgJ+II+kImN41zVIZ6Jlll7pQ==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@dicebear/core": "^9.0.0" + } + }, "client/node_modules/@types/jest": { "version": "29.5.14", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", @@ -14435,393 +14857,13 @@ "kuler": "^2.0.0" } }, - "node_modules/@dicebear/adventurer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/adventurer/-/adventurer-7.0.4.tgz", - "integrity": "sha512-1ya9lD0S8YHaW+1+bky9HCnLWve/gjiFtZ1wjEM26nBxrFBCmvgiqPn/+L/Uf0ercHIyXMRElHylWmLxtWztfQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/adventurer-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/adventurer-neutral/-/adventurer-neutral-7.0.4.tgz", - "integrity": "sha512-meAMZFLzvqf58p8Qno4vKRmwss2XdKn5osG5/xPkiXVUVhtNEtVoKSIG0KK9ukjC18UOHo6mjZab7xUclz6o4Q==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/avataaars": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/avataaars/-/avataaars-7.0.4.tgz", - "integrity": "sha512-mkQDtGYfj4rVguuPednpKj2RQWyV1pew3GqcKfjz77HBfhHeXDDwlMqWPQkaKyYkI0V9q3LtApGECyxYiisDvA==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/avataaars-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/avataaars-neutral/-/avataaars-neutral-7.0.4.tgz", - "integrity": "sha512-EpbeiY23G4fuL2DnZ7fjnSn8WZvdALgg/N3pQpn8yPDdulgaV4vRDOit94pvp/DjW0Zz7mPPkSEN//0zijcXvA==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/big-ears": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/big-ears/-/big-ears-7.0.4.tgz", - "integrity": "sha512-yOvIVFOB8Wv9ulSp6vIyEHiIHkishnLEuKIPAcgGScxjlbtcAo9OmeUsgSmM03wYsV62jInaiA4hAHRPfLYzfQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/big-ears-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/big-ears-neutral/-/big-ears-neutral-7.0.4.tgz", - "integrity": "sha512-kxydevCihleTG5TnIh604i/zi+1MMvPuFuecattcUoa3NIPx4zi08j2zb7gwTUX54l49ENG1ZSO058S9c03yrA==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/big-smile": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/big-smile/-/big-smile-7.0.4.tgz", - "integrity": "sha512-vHuedMXdK5RGhXDSCY+U9vDyfby20m3eteYSgEwLKmi3ZJBLXw2xAuAb8cGMPmK7zsyj4eH50r93hKcaTaOTag==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/bottts": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/bottts/-/bottts-7.0.4.tgz", - "integrity": "sha512-Nni2Y5rL6+CJ8/Cij1lCvV/YhI+i3cy//nWQQGqmGTqlCGZdOziDGCWuf7Ufmv8081sbKWj++QOP+ueAX8E7ZA==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/bottts-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/bottts-neutral/-/bottts-neutral-7.0.4.tgz", - "integrity": "sha512-C9McuZSdrMypTAOSsNJMgsbb2wylHbrvkPyksyouSgeIRrr3vdJFAsa+N1UfApNj4YdsznmoBIMl2XAGktTBAg==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/collection": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/collection/-/collection-7.0.4.tgz", - "integrity": "sha512-5jXmitM/DGwmorp9hGh5coEhrMLsygEYNJiOf6eH0loVeXjI0/X3TEmQabtXzwp/nVhBGYyvuBmPIg50fnUhxQ==", + "node_modules/@emnapi/runtime": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", + "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "optional": true, "dependencies": { - "@dicebear/adventurer": "7.0.4", - "@dicebear/adventurer-neutral": "7.0.4", - "@dicebear/avataaars": "7.0.4", - "@dicebear/avataaars-neutral": "7.0.4", - "@dicebear/big-ears": "7.0.4", - "@dicebear/big-ears-neutral": "7.0.4", - "@dicebear/big-smile": "7.0.4", - "@dicebear/bottts": "7.0.4", - "@dicebear/bottts-neutral": "7.0.4", - "@dicebear/croodles": "7.0.4", - "@dicebear/croodles-neutral": "7.0.4", - "@dicebear/fun-emoji": "7.0.4", - "@dicebear/icons": "7.0.4", - "@dicebear/identicon": "7.0.4", - "@dicebear/initials": "7.0.4", - "@dicebear/lorelei": "7.0.4", - "@dicebear/lorelei-neutral": "7.0.4", - "@dicebear/micah": "7.0.4", - "@dicebear/miniavs": "7.0.4", - "@dicebear/notionists": "7.0.4", - "@dicebear/notionists-neutral": "7.0.4", - "@dicebear/open-peeps": "7.0.4", - "@dicebear/personas": "7.0.4", - "@dicebear/pixel-art": "7.0.4", - "@dicebear/pixel-art-neutral": "7.0.4", - "@dicebear/rings": "7.0.4", - "@dicebear/shapes": "7.0.4", - "@dicebear/thumbs": "7.0.4" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/converter": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/converter/-/converter-7.0.4.tgz", - "integrity": "sha512-oiA2Oc5izWf6ipPtHYCi2c9W565VzyryObtSL6xB36V9MHRD8wvH5mYr9AvbViDGEOOeNE3EtIELQIMdNtB7Rg==", - "dependencies": { - "@types/json-schema": "^7.0.11", - "tmp-promise": "^3.0.3" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@resvg/resvg-js": "^2.4.1", - "exiftool-vendored": "^23.0.0", - "sharp": "^0.32.6" - }, - "peerDependenciesMeta": { - "@resvg/resvg-js": { - "optional": true - }, - "exiftool-vendored": { - "optional": true - }, - "sharp": { - "optional": true - } - } - }, - "node_modules/@dicebear/core": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/core/-/core-7.0.4.tgz", - "integrity": "sha512-Xi8Au8K4pWj61jKMKqlhqmg83DvMAG6PfDuDbp7F75ZNvrGGh0BkJt9keSHe4WpHs+BbXDXSMOivSS10QB20fA==", - "dependencies": { - "@dicebear/converter": "7.0.4", - "@types/json-schema": "^7.0.11" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@dicebear/croodles": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/croodles/-/croodles-7.0.4.tgz", - "integrity": "sha512-PMe7W2IE8R9yqEXuccfEaTF0D+1VXrCXnShw52D5C23qPDTxL1XxZKXcOoeXYi5o1jeIVagZjHiX8XaQK18ftQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/croodles-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/croodles-neutral/-/croodles-neutral-7.0.4.tgz", - "integrity": "sha512-b7v1WPEDKWzJAcCMo8OQMMgRTI0c2Ae3dCLBbFXtkhJ6oqzuFUbWwcrUWsp0segBXlPAM3lZrH1gy1GJBHrSuQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/fun-emoji": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/fun-emoji/-/fun-emoji-7.0.4.tgz", - "integrity": "sha512-rlaID1EQW8pj/TmM805+dA6XVLge2hkiVaQkoM+4Df/RGj/GPbDeBgu8dRKLwORPNY5ug3zfFgERStZcSyYmqQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/icons": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/icons/-/icons-7.0.4.tgz", - "integrity": "sha512-wkWjjkDD43lmYKgCBDdUc54y6llCsCOSPND2RnKi6noOGpThsN6aTE6nN2Hwf0ORxWPEzBFRmgoat+frWd9a4A==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/identicon": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/identicon/-/identicon-7.0.4.tgz", - "integrity": "sha512-Q68lP7dqqt0fMx9SONPJSi94aieNveTyrCgv/kuU3F9upeQyesmdAeQ+e2QOojOOMrEuM+ujFuPInvwwkaZF7w==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/initials": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/initials/-/initials-7.0.4.tgz", - "integrity": "sha512-cNkuG/3cPbF4UScmLk+2nYF2LaB9N1k3Pw1gmd3PST+oUsdlkNIM6e4Wym/0fgDLGPWyxbiGsbhe371ACWJVNQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/lorelei": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/lorelei/-/lorelei-7.0.4.tgz", - "integrity": "sha512-pFDNHns7lke3M+TGPHFizjsjBMM/70okdH4Y+WKg9WHe+Y0dV54OgXf9/I6A10ipdVTCtM4i2xfNkSW+QP/spQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/lorelei-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/lorelei-neutral/-/lorelei-neutral-7.0.4.tgz", - "integrity": "sha512-QtyKGJhExocZse662b1W5LGh0ykFh4AFf827f5FkXiOGmAgghsm1m/0bFuF9giwqFJ7W3eZu5oTSn97+s3z17A==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/micah": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/micah/-/micah-7.0.4.tgz", - "integrity": "sha512-c6U9iqsEsuPqHxiZuM5O7xqJIv98rIMergdi6O8jlINXacNLzF9DUHLAkxMiFeiqDDqQ34wUQq+M6qt9xBq0eQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/miniavs": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/miniavs/-/miniavs-7.0.4.tgz", - "integrity": "sha512-p1sWveGT3gvtnwplhDakB6wEu5jT/EHbRzsTMOT3Lz9nqkF08sJCe7KCRsji1EVGyX4nOjA+dQcHK9yUAdqQAg==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/notionists": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/notionists/-/notionists-7.0.4.tgz", - "integrity": "sha512-twmpHy2S6FkTiPzNd0wXuWhBv0XgkCPIuzJiUeyTadVEjlijOvPeAr9kuGuhDMO7MTHnuQoFRw1sctQmj+xbXA==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/notionists-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/notionists-neutral/-/notionists-neutral-7.0.4.tgz", - "integrity": "sha512-tk06h7uj1IR42g/RhhLVv1rbxy+rNROhXSto5ADX0/Ovk+HaR8yQGQyO3Tt/rXpGuf5+5JK0sVAiRgGaMFSxig==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/open-peeps": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/open-peeps/-/open-peeps-7.0.4.tgz", - "integrity": "sha512-c4oMnOvzLiMXoj+oBKILzF0DRWRd3I/ykBC7zhr3904R/dp6PXQnMDiMFIjCYeifCl8W30ggTzvNEX7nwbxJaQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/personas": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/personas/-/personas-7.0.4.tgz", - "integrity": "sha512-gbWqNakXeWSKjW4s4zw4dSmuHOGF9+tgwzjwilrQvZMODOESYUCKPql/3KFJLVG9Rr00BH83QGZEn6vYiBLbVg==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/pixel-art": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/pixel-art/-/pixel-art-7.0.4.tgz", - "integrity": "sha512-H0OZ7JyLyiBYOa9NJI6yr1x/XjXl4P17U8lvRuQhCYHntdgDvuIwv1/kulq4vLBGRK1afXBTm/NPWi0Optyg/Q==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/pixel-art-neutral": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/pixel-art-neutral/-/pixel-art-neutral-7.0.4.tgz", - "integrity": "sha512-4hzHw7I4f4bj4C7L2xQ28oA7XS1uonwGE7jTCqjRzg3YkzjTthxf7kEE/WWiP0Lk1onPhSdB8kqDejPGvNUXLQ==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/rings": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/rings/-/rings-7.0.4.tgz", - "integrity": "sha512-LJzSWronkeWefFLwaOWg3tr0jSOuW2hien4Uv+nG2alYSkJ6hGH4zLtGo/SRQdNWQg4j/6838fWJDdoryWQM2w==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/shapes": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/shapes/-/shapes-7.0.4.tgz", - "integrity": "sha512-C1OhdAGwCmEK9JDjK9wERBxaZIOp2x4yWVsra/VCfba+fJSKmmorhbYIw33vE5ZV3/PseztnDB3sWOMMl/jCdw==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" - } - }, - "node_modules/@dicebear/thumbs": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@dicebear/thumbs/-/thumbs-7.0.4.tgz", - "integrity": "sha512-mAOWbaNtWKLIHGtTZxHVei1UFWz/l0h4aP8h97UE71av2QTM7CEw2RpF8Q19MxxoDlHi+oZ7Jvjblzi5k96LtA==", - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@dicebear/core": "^7.0.0" + "tslib": "^2.4.0" } }, "node_modules/@esbuild/aix-ppc64": { @@ -16223,6 +16265,348 @@ "undici-types": "~5.26.4" } }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@ioredis/commands": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", @@ -24603,7 +24987,8 @@ "node_modules/b4a": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true }, "node_modules/babel-jest": { "version": "29.7.0", @@ -24931,6 +25316,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -25399,11 +25785,6 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -25849,7 +26230,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -26426,20 +26808,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -26491,14 +26859,6 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -26927,14 +27287,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", @@ -28057,14 +28409,6 @@ "node": ">= 0.8.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", @@ -28265,7 +28609,8 @@ "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", @@ -28819,11 +29164,6 @@ "node": ">= 0.6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -28837,7 +29177,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -29089,11 +29430,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -30130,6 +30466,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -30140,11 +30477,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/inline-style-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", @@ -34475,17 +34807,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -34510,6 +34831,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -34545,11 +34867,6 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/module-alias": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", @@ -34668,11 +34985,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -34719,22 +35031,6 @@ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, - "node_modules/node-abi": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", - "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -35724,6 +36020,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -36751,103 +37048,6 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/prebuild-install/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", @@ -37512,15 +37712,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -37603,7 +37794,8 @@ "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, "node_modules/random-bytes": { "version": "1.0.0", @@ -37663,20 +37855,6 @@ "node": ">= 0.8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, "node_modules/rc-input-number": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.4.2.tgz", @@ -37705,14 +37883,6 @@ "react-dom": ">=16.9.0" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -39244,6 +39414,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -39258,6 +39429,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -39761,28 +39933,6 @@ "sha.js": "bin.js" } }, - "node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -39885,49 +40035,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -40277,6 +40384,7 @@ "version": "2.15.7", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.7.tgz", "integrity": "sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA==", + "dev": true, "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -40848,16 +40956,6 @@ "node": ">=6" } }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, "node_modules/tar-mini": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/tar-mini/-/tar-mini-0.2.0.tgz", @@ -40869,6 +40967,7 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -41135,25 +41234,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/tmp-promise/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -41403,17 +41483,6 @@ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/type": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", @@ -43639,7 +43708,7 @@ }, "packages/data-provider": { "name": "librechat-data-provider", - "version": "0.7.77", + "version": "0.7.78", "license": "ISC", "dependencies": { "axios": "^1.8.2", diff --git a/packages/data-provider/package.json b/packages/data-provider/package.json index f8d53974e..bb9ea9ddb 100644 --- a/packages/data-provider/package.json +++ b/packages/data-provider/package.json @@ -1,6 +1,6 @@ { "name": "librechat-data-provider", - "version": "0.7.77", + "version": "0.7.78", "description": "data services for librechat apps", "main": "dist/index.js", "module": "dist/index.es.js", diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index 226cb7a61..7ce88b6fa 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -237,6 +237,7 @@ export const agentsEndpointSChema = baseEndpointSchema.merge( recursionLimit: z.number().optional(), disableBuilder: z.boolean().optional(), maxRecursionLimit: z.number().optional(), + allowedProviders: z.array(z.union([z.string(), eModelEndpointSchema])).optional(), capabilities: z .array(z.nativeEnum(AgentCapabilities)) .optional() @@ -1102,6 +1103,10 @@ export enum ErrorTypes { * Google provider returned an error */ GOOGLE_ERROR = 'google_error', + /** + * Invalid Agent Provider (excluded by Admin) + */ + INVALID_AGENT_PROVIDER = 'invalid_agent_provider', } /** @@ -1214,7 +1219,7 @@ export enum Constants { /** Key for the app's version. */ VERSION = 'v0.7.7', /** Key for the Custom Config's version (librechat.yaml). */ - CONFIG_VERSION = '1.2.3', + CONFIG_VERSION = '1.2.4', /** Standard value for the first message's `parentMessageId` value, to indicate no parent exists. */ NO_PARENT = '00000000-0000-0000-0000-000000000000', /** Standard value for the initial conversationId before a request is sent */ diff --git a/packages/data-provider/src/models.ts b/packages/data-provider/src/models.ts index c6076233b..c925781bf 100644 --- a/packages/data-provider/src/models.ts +++ b/packages/data-provider/src/models.ts @@ -38,6 +38,7 @@ export const specsConfigSchema = z.object({ enforce: z.boolean().default(false), prioritize: z.boolean().default(true), list: z.array(tModelSpecSchema).min(1), + addedEndpoints: z.array(z.union([z.string(), eModelEndpointSchema])).optional(), }); export type TSpecsConfig = z.infer; diff --git a/packages/data-provider/src/types.ts b/packages/data-provider/src/types.ts index 18b6f69c0..2f16db171 100644 --- a/packages/data-provider/src/types.ts +++ b/packages/data-provider/src/types.ts @@ -57,7 +57,6 @@ export type TSubmission = { isTemporary: boolean; messages: TMessage[]; isRegenerate?: boolean; - conversationId?: string; initialResponse?: TMessage; conversation: Partial; endpointOption: TEndpointOption;