diff --git a/.github/workflows/bump-js-version.yml b/.github/workflows/bump-js-version.yml index 8a253b6fcb..98c20aec16 100644 --- a/.github/workflows/bump-js-version.yml +++ b/.github/workflows/bump-js-version.yml @@ -228,8 +228,8 @@ jobs: default: ${{ inputs.releaseType }} version-type: ${{ inputs.releaseType }} preid: ${{ inputs.preid }} - commit-message: 'chore: bump genkitx-mcp version to {{version}}' - tag-prefix: 'genkitx-mcp@' + commit-message: 'chore: bump @genkit-ai/mcp version to {{version}}' + tag-prefix: '@genkit-ai/mcp@' - name: 'js/plugins/express version bump' uses: 'phips28/gh-action-bump-version@master' env: diff --git a/js/ai/src/prompt.ts b/js/ai/src/prompt.ts index e235e8657e..447dae723c 100644 --- a/js/ai/src/prompt.ts +++ b/js/ai/src/prompt.ts @@ -147,6 +147,9 @@ export interface ExecutablePrompt< O extends z.ZodTypeAny = z.ZodTypeAny, CustomOptions extends z.ZodTypeAny = z.ZodTypeAny, > { + /** Prompt reference. */ + ref: { name: string; metadata?: Record }; + /** * Generates a response by rendering the prompt template with given user input and then calling the model. * @@ -234,7 +237,8 @@ export function definePrompt< return definePromptAsync( registry, `${options.name}${options.variant ? `.${options.variant}` : ''}`, - Promise.resolve(options) + Promise.resolve(options), + options.metadata ); } @@ -245,7 +249,8 @@ function definePromptAsync< >( registry: Registry, name: string, - optionsPromise: PromiseLike> + optionsPromise: PromiseLike>, + metadata?: Record ): ExecutablePrompt, O, CustomOptions> { const promptCache = {} as PromptCache; @@ -399,11 +404,13 @@ function definePromptAsync< } ) as Promise>; - const executablePrompt = wrapInExecutablePrompt( + const executablePrompt = wrapInExecutablePrompt({ registry, + name, renderOptionsFn, - rendererAction - ); + rendererAction, + metadata, + }); return executablePrompt; } @@ -436,23 +443,25 @@ function wrapInExecutablePrompt< I extends z.ZodTypeAny = z.ZodTypeAny, O extends z.ZodTypeAny = z.ZodTypeAny, CustomOptions extends z.ZodTypeAny = z.ZodTypeAny, ->( - registry: Registry, +>(wrapOpts: { + registry: Registry; + name: string; renderOptionsFn: ( input: z.infer, renderOptions: PromptGenerateOptions | undefined - ) => Promise, - rendererAction: Promise> -) { + ) => Promise; + rendererAction: Promise>; + metadata?: Record; +}) { const executablePrompt = (async ( input?: I, opts?: PromptGenerateOptions ): Promise>> => { return await runInNewSpan( - registry, + wrapOpts.registry, { metadata: { - name: (await rendererAction).__action.name, + name: (await wrapOpts.rendererAction).__action.name, input, }, labels: { @@ -460,8 +469,8 @@ function wrapInExecutablePrompt< }, }, async (metadata) => { - const output = await generate(registry, { - ...(await renderOptionsFn(input, opts)), + const output = await generate(wrapOpts.registry, { + ...(await wrapOpts.renderOptionsFn(input, opts)), }); metadata.output = output; return output; @@ -469,12 +478,14 @@ function wrapInExecutablePrompt< ); }) as ExecutablePrompt, O, CustomOptions>; + executablePrompt.ref = { name: wrapOpts.name, metadata: wrapOpts.metadata }; + executablePrompt.render = async ( input?: I, opts?: PromptGenerateOptions ): Promise> => { return { - ...(await renderOptionsFn(input, opts)), + ...(await wrapOpts.renderOptionsFn(input, opts)), } as GenerateOptions; }; @@ -482,11 +493,14 @@ function wrapInExecutablePrompt< input?: I, opts?: PromptGenerateOptions ): GenerateStreamResponse> => { - return generateStream(registry, renderOptionsFn(input, opts)); + return generateStream( + wrapOpts.registry, + wrapOpts.renderOptionsFn(input, opts) + ); }; executablePrompt.asTool = async (): Promise> => { - return (await rendererAction) as unknown as ToolAction; + return (await wrapOpts.rendererAction) as unknown as ToolAction; }; return executablePrompt; } diff --git a/js/genkit/package.json b/js/genkit/package.json index 5262e00de3..b228e36db7 100644 --- a/js/genkit/package.json +++ b/js/genkit/package.json @@ -28,19 +28,20 @@ "author": "genkit", "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "workspace:*", "@genkit-ai/ai": "workspace:*", + "@genkit-ai/core": "workspace:*", "uuid": "^10.0.0" }, "devDependencies": { + "@types/body-parser": "^1.19.5", "@types/express": "^4.17.21", + "@types/node": "^22.15.3", "@types/uuid": "^9.0.6", "npm-run-all": "^4.1.5", "rimraf": "^6.0.1", "tsup": "^8.3.5", - "typescript": "^4.9.0", "tsx": "^4.19.2", - "@types/body-parser": "^1.19.5" + "typescript": "^4.9.0" }, "files": [ "genkit-ui", diff --git a/js/genkit/src/common.ts b/js/genkit/src/common.ts index 52fa249d44..5b2b8368ed 100644 --- a/js/genkit/src/common.ts +++ b/js/genkit/src/common.ts @@ -19,6 +19,8 @@ export { BaseDataPointSchema, Document, DocumentDataSchema, + GenerateResponse, + GenerateResponseChunk, GenerationBlockedError, GenerationCommonConfigSchema, GenerationResponseError, @@ -57,8 +59,6 @@ export { type GenerateOptions, type GenerateRequest, type GenerateRequestData, - type GenerateResponse, - type GenerateResponseChunk, type GenerateResponseChunkData, type GenerateResponseData, type GenerateStreamOptions, @@ -82,6 +82,7 @@ export { type Part, type PromptAction, type PromptConfig, + type PromptGenerateOptions, type RankedDocument, type RerankerAction, type RerankerArgument, diff --git a/js/genkit/src/genkit.ts b/js/genkit/src/genkit.ts index 56ce72067c..0c32679727 100644 --- a/js/genkit/src/genkit.ts +++ b/js/genkit/src/genkit.ts @@ -326,6 +326,8 @@ export class Genkit implements HasRegistry { return (await promise)(input, opts); }) as ExecutablePrompt, O, CustomOptions>; + executablePrompt.ref = { name }; + executablePrompt.render = async ( input?: I, opts?: PromptGenerateOptions diff --git a/js/genkit/tests/prompts_test.ts b/js/genkit/tests/prompts_test.ts index a6fed70dc1..90746c8b4c 100644 --- a/js/genkit/tests/prompts_test.ts +++ b/js/genkit/tests/prompts_test.ts @@ -72,6 +72,36 @@ describe('definePrompt', () => { defineEchoModel(ai); }); + it('should define the prompt', async () => { + const prompt = ai.definePrompt({ + name: 'hi', + metadata: { foo: 'bar' }, + input: { + schema: z.object({ + name: z.string(), + }), + }, + messages: async (input) => { + return [ + { + role: 'user', + content: [{ text: `hi ${input.name}` }], + }, + ]; + }, + }); + + assert.deepStrictEqual(prompt.ref, { + name: 'hi', + metadata: { foo: 'bar' }, + }); + + const lookedUpPrompt = ai.prompt('hi'); + // This is a known limitation -- prompt lookup is async under the hood, + // so we can't actually get the metadata... + assert.deepStrictEqual(lookedUpPrompt.ref, { name: 'hi' }); // ideally metadatashould be: { foo: 'bar' } + }); + it('should apply middleware to a prompt call', async () => { const prompt = ai.definePrompt({ name: 'hi', diff --git a/js/plugins/mcp/README.md b/js/plugins/mcp/README.md index 0d85f4d6cd..551b81abe5 100644 --- a/js/plugins/mcp/README.md +++ b/js/plugins/mcp/README.md @@ -1,65 +1,138 @@ # Genkit MCP -> [!WARNING] -> This plugin is experimental, meaning it may not be supported long-term and APIs are subject to more often breaking changes. - -This plugin provides integration between Genkit and the [Model Context Protocol](https://modelcontextprotocol.io) (MCP). MCP is an open standard allowing developers to build "servers" which provide tools, resources, and prompts to clients. Genkit MCP allows Genkit developers to both consume MCP tools, prompts, and resources as a client and provide tools and prompts as a server. +This plugin provides integration between Genkit and the [Model Context Protocol](https://modelcontextprotocol.io) (MCP). MCP is an open standard allowing developers to build "servers" which provide tools, resources, and prompts to clients. Genkit MCP allows Genkit developers to: +- Consume MCP tools, prompts, and resources as a client using `createMcpHost` or `createMcpClient`. +- Provide Genkit tools and prompts as an MCP server using `createMcpServer`. ## Installation To get started, you'll need Genkit and the MCP plugin: ```bash -npm i genkit genkitx-mcp +npm i genkit @genkit-ai/mcp ``` -## MCP Client +## MCP Host -To create an MCP client, you call the `mcpClient` function to generate a Genkit plugin for an MCP server. For example, to use MCP's example [filesystem server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem): +To connect to one or more MCP servers, you use the `createMcpHost` function. This function returns a `GenkitMcpHost` instance that manages connections to the configured MCP servers. ```ts import { genkit } from 'genkit'; -import { mcpClient } from 'genkitx-mcp'; +import { createMcpHost } from '@genkit-ai/mcp'; -// the filesystem server requires one or more allowed directories +// Example: Configure a MCP host for a local filesystem server +// and a hypothetical remote Git server. const ALLOWED_DIRS = ['/Users/yourusername/Desktop']; -const filesystemClient = mcpClient({ - name: 'filesystem', - serverProcess: { - command: 'npx', - args: ['-y', '@modelcontextprotocol/server-everything', ...ALLOWED_DIRS], +const mcpHost = createMcpHost({ + name: 'myMcpClients', // A name for the host plugin itself + mcpServers: { + // Each key (e.g., 'fs', 'git') becomes a namespace for the server's tools. + fs: { + command: 'npx', + args: ['-y', '@modelcontextprotocol/server-filesystem', ...ALLOWED_DIRS], + }, + git: { // Configuration for a second MCP server (hypothetical) + url: 'http://localhost:8080/mcp', + // disabled: true, // Optionally disable a server + }, }, }); const ai = genkit({ plugins: [ - filesystemClient /* ... other plugins such as model providers ...*/, + /* ... install plugins such as model providers ...*/ + ], +}); + + +// Retrieve tools from all active MCP servers +const mcpTools = await McpHost.getActiveTools(genkit); + +// Provide MCP tools to the model of your choice. +const response = await ai.generate({ + model: googleAI.model('gemini-2.0-flash'), + prompt: 'What are the last 5 commits in the repo `/home/yourusername/Desktop/test-repo/?`', + tools: mcpTools, +}); + +console.log(response.text); +``` + +The `createMcpHost` function initializes a `GenkitMcpHost` instance, which handles the lifecycle and communication with the defined MCP servers. + +### `createMcpHost()` Options + +- **`name`**: (optional, string) A name for the MCP host plugin itself. Defaults to 'genkitx-mcp'. +- **`version`**: (optional, string) The version of the MCP host plugin. Defaults to "1.0.0". +- **`rawToolResponses`**: (optional, boolean) If `true`, tool responses from this server are returned in their raw MCP format; otherwise, they are processed for Genkit compatibility. Defaults to `false`. +- **`mcpServers`**: (required, object) An object where each key is a client-side name (namespace) for an MCP server, and the value is the configuration for that server. + + Each server configuration object can include: + - **`disabled`**: (optional, boolean) If `true`, this server connection will not be attempted. Defaults to `false`. + - One of the following server connection configurations: + - Parameters for launching a local server process using the stdio MCP transport. + - **`command`**: (required, string) Shell command path for launching the MCP server (e.g., `npx`, `python`). + - **`args`**: (optional, string[]) Array of string arguments to pass to the command. + - **`env`**: (optional, Record) Key-value object of environment variables. + - **`url`**: (string) The URL of a remote server to connect to using the Streamable HTTP MCP transport. + - **`transport`**: An existing MCP transport object for connecting to the server. + + +## MCP Client (Single Server) + +For scenarios where you only need to connect to a single MCP server, or prefer to manage client instances individually, you can use `createMcpClient`. + +```ts +import { genkit } from 'genkit'; +import { createMcpClient } from '@genkit-ai/mcp'; + +const myFsClient = createMcpClient({ + name: 'myFileSystemClient', // A unique name for this client instance + command: 'npx', + args: ['-y', '@modelcontextprotocol/server-everything', '/Users/yourusername/Documents'], + // rawToolResponses: true, // Optional: get raw MCP responses +}); + +// In your Genkit configuration: +genkit({ + plugins: [ + /* ... other plugins ... */ + // Individual clients are not Genkit plugins themselves. ], }); + +async function runSingleClient() { + // Retrieve tools from this specific client + const fsTools = await myFsClient.getActiveTools(genkit); + + const response = await genkit.generate({ + model: googleAI.model('gemini-2.0-flash'), // Replace with your model + prompt: 'List files in my Documents folder.', + tools: fsTools, + }); + console.log(response.text); +} + +runSingleClient(); ``` -Most MCP servers are built to run as spawned processes on the same machine using the `stdio` transport. When you supply the `serverProcess` option, you are specifying the command, arguments, and environment variables for spawning the server as a subprocess. +### `createMcpClient()` Options -### mcpClient() Options +The `createMcpClient` function takes an `McpClientOptions` object: +- **`name`**: (required, string) A unique name for this client instance. This name will be used as the namespace for its tools and prompts. +- **`version`**: (optional, string) Version for this client instance. Defaults to "1.0.0". +- Plus, all options from `McpServerConfig` (see `disabled`, `rawToolResponses`, and transport configurations under `createMcpHost` options). -- **`name`**: (required) The name for this client, which namespaces its tools and prompts. -- **`version`**: (optional) The client's version number. Defaults to "1.0.0". -- You must supply one of: - - **`serverProcess`**: Parameters for launching a local server process using the stdio MCP transport. - - **`command`**: Shell command path for launching the MCP server. Can be e.g. `npx` or `uvx` to download and run the server from a package manager. - - **`args`**: (optional) Array of string arguments to pass to the command. - - **`env`**: (optional) Key value object of environment variables to pass to the command. - - **`serverUrl`**: The URL of a remote server to connect to using the SSE MCP transport. - - **`serverWebsocketUrl`: The URL of a remote server to connect to using the WebSocket MCP transport. - - **`transport`**: An existing MCP transport object for connecting to the server. -- **`rawToolResponses`**: (optional) A boolean flag. If `true`, tool responses are returned in their raw MCP format; otherwise, they are processed for Genkit compatibility. +### Using MCP Actions (Tools, Prompts) -### Using MCP Actions +Both `GenkitMcpHost` (via `getActiveTools()`) and `GenkitMcpClient` (via `getActiveTools()`) discover available tools from their connected and enabled MCP server(s). These tools are standard Genkit `ToolAction` instances and can be provided to Genkit models. -The Genkit MCP client automatically discovers available tools and prompts and registers them with Genkit making them available anywhere other tools and prompts can be used. To access resources, special `list_resources` and `read_resource` tools are registered that will access resources for the server. +MCP prompts can be fetched using `McpHost.getPrompt(serverName, promptName)` or `mcpClient.getPrompt(promptName)`. These return an `ExecutablePrompt`. -All MCP actions are namespaced under the name you supply, so a client called `filesystem` will register tools such as `filesystem/read_file`. +All MCP actions (tools, prompts, resources) are namespaced. +- For `createMcpHost`, the namespace is the key you provide for that server in the `mcpServers` configuration (e.g., `localFs/read_file`). +- For `createMcpClient`, the namespace is the `name` you provide in its options (e.g., `myFileSystemClient/list_resources`). ### Tool Responses @@ -72,11 +145,11 @@ MCP tools return a `content` array as opposed to a structured response like most ## MCP Server -You can also expose all of the tools and prompts from a Genkit instance as an MCP server: +You can also expose all of the tools and prompts from a Genkit instance as an MCP server using the `createMcpServer` function. ```ts import { genkit, z } from 'genkit'; -import { mcpServer } from 'genkitx-mcp'; +import { createMcpServer } from '@genkit-ai/mcp'; // Updated import const ai = genkit({}); @@ -105,10 +178,17 @@ ai.definePrompt( `If you're happy and you know it, {{action}}.` ); -mcpServer(ai, { name: 'example_server', version: '0.0.1' }).start(); +// Use createMcpServer +const server = createMcpServer(ai, { name: 'example_server', version: '0.0.1' }); +// Setup (async) then starts with stdio transport by default +server.setup().then(() => server.start()) ``` -The above will start up an MCP server with the stdio transport that exposes a tool called `add` and a prompt called `happy`. To start the server with a different transport, use `mcpServer(...).start(otherTransport)`. +The `createMcpServer` function returns a `GenkitMcpServer` instance. The `start()` method on this instance will start an MCP server (using the stdio transport by default) that exposes all registered Genkit tools and prompts. To start the server with a different MCP transport, you can pass the transport instance to the `start()` method (e.g., `server.start(customMcpTransport)`). + +### `createMcpServer()` Options +- **`name`**: (required, string) The name you want to give your server for MCP inspection. +- **`version`**: (optional, string) The version your server will advertise to clients. Defaults to "1.0.0". ### Known Limitations diff --git a/js/plugins/mcp/examples/client/index.js b/js/plugins/mcp/examples/client/index.js index ea6f02f250..61eaa702f5 100644 --- a/js/plugins/mcp/examples/client/index.js +++ b/js/plugins/mcp/examples/client/index.js @@ -15,13 +15,13 @@ */ import { gemini15Pro, googleAI } from '@genkit-ai/googleai'; +import { createMcpClient } from '@genkit-ai/mcp'; import { genkit } from 'genkit'; import { logger } from 'genkit/logging'; -import { mcpClient } from 'genkitx-mcp'; logger.setLogLevel('debug'); -const everythingClient = mcpClient({ +const everythingClient = createMcpClient({ name: 'everything', version: '1.0.0', serverProcess: { diff --git a/js/plugins/mcp/examples/client/package.json b/js/plugins/mcp/examples/client/package.json index 9acf429c84..bd9e05302c 100644 --- a/js/plugins/mcp/examples/client/package.json +++ b/js/plugins/mcp/examples/client/package.json @@ -16,7 +16,7 @@ "@modelcontextprotocol/server-filesystem": "^0.5.1", "@modelcontextprotocol/server-github": "^0.5.1", "genkit": "file:../../../../genkit", - "genkitx-mcp": "file:../../" + "@genkit-ai/mcp": "file:../../" }, "devDependencies": { "@modelcontextprotocol/server-puppeteer": "^0.5.1", diff --git a/js/plugins/mcp/examples/server/index.js b/js/plugins/mcp/examples/server/index.js index b9ecc7c5db..76e98711dd 100644 --- a/js/plugins/mcp/examples/server/index.js +++ b/js/plugins/mcp/examples/server/index.js @@ -14,8 +14,8 @@ * limitations under the License. */ +import { createMcpServer } from '@genkit-ai/mcp'; import { genkit, z } from 'genkit'; -import { mcpServer } from 'genkitx-mcp'; const ai = genkit({}); @@ -43,4 +43,4 @@ ai.definePrompt( `If you're happy and you know it, {{action}}.` ); -mcpServer(ai, { name: 'example_server', version: '0.0.1' }).start(); +createMcpServer(ai, { name: 'example_server', version: '0.0.1' }).start(); diff --git a/js/plugins/mcp/examples/server/package.json b/js/plugins/mcp/examples/server/package.json index 6983b3fb8e..beb03b29e7 100644 --- a/js/plugins/mcp/examples/server/package.json +++ b/js/plugins/mcp/examples/server/package.json @@ -12,7 +12,7 @@ "license": "ISC", "dependencies": { "genkit": "file:../../../../genkit", - "genkitx-mcp": "file:../.." + "@genkit-ai/mcp": "file:../.." }, "type": "module" } diff --git a/js/plugins/mcp/package.json b/js/plugins/mcp/package.json index 6e53d5544b..fdbbab9bcb 100644 --- a/js/plugins/mcp/package.json +++ b/js/plugins/mcp/package.json @@ -1,5 +1,5 @@ { - "name": "genkitx-mcp", + "name": "@genkit-ai/mcp", "keywords": [ "genkit", "genkit-plugin", @@ -11,7 +11,7 @@ ], "version": "1.13.0", "description": "A Genkit plugin that provides interoperability between Genkit and Model Context Protocol (MCP). Both client and server use cases are supported.", - "main": "dist/index.js", + "main": "./lib/index.js", "types": "./lib/index.d.ts", "exports": { ".": { @@ -38,10 +38,12 @@ "author": "genkit", "license": "Apache-2.0", "peerDependencies": { - "@genkit-ai/core": "workspace:^", - "genkit": "workspace:^" + "genkit": "workspace:^", + "@modelcontextprotocol/sdk": "^1.13.0" }, "devDependencies": { + "get-port": "^5.1.0", + "express": "^5.1.0", "@jest/globals": "^29.7.0", "@types/node": "^20.11.16", "jest": "^29.7.0", @@ -51,8 +53,5 @@ "tsup": "^8.3.5", "tsx": "^4.19.2", "typescript": "^5.3.0" - }, - "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0" } } diff --git a/js/plugins/mcp/src/client/client.ts b/js/plugins/mcp/src/client/client.ts new file mode 100644 index 0000000000..7096a20369 --- /dev/null +++ b/js/plugins/mcp/src/client/client.ts @@ -0,0 +1,383 @@ +/** + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import type { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js'; +import type { StreamableHTTPClientTransportOptions } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'; +import { + ListRootsRequestSchema, + Root, +} from '@modelcontextprotocol/sdk/types.js'; +import { + ExecutablePrompt, + Genkit, + GenkitError, + PromptGenerateOptions, + ToolAction, +} from 'genkit'; +import { logger } from 'genkit/logging'; +import { + fetchAllPrompts, + fetchDynamicTools, + getExecutablePrompt, + transportFrom, +} from '../util'; + +interface McpServerRef { + client: Client; + transport: Transport; + error?: string; +} + +export interface McpServerControls { + /** when true, the server will be stopped and its registered components will + * not appear in lists/plugins/etc */ + disabled?: boolean; + + // MCP roots configuration. See: https://modelcontextprotocol.io/docs/concepts/roots + roots?: Root[]; +} + +export type McpStdioServerConfig = StdioServerParameters & { + url?: never; + transport?: never; +}; + +export type McpStreamableHttpConfig = { + url: string; + command?: never; + transport?: never; +} & Omit; + +export type McpTransportServerConfig = { + transport: Transport; + command?: never; + url?: never; +}; + +/** + * Configuration for an individual MCP server. The interface should be familiar + * and compatible with existing tool configurations e.g. Cursor or Claude + * Desktop. + * + * In addition to stdio servers, remote servers are supported via URL and + * custom/arbitary transports are supported as well. + */ +export type McpServerConfig = ( + | McpStdioServerConfig + | McpStreamableHttpConfig + | McpTransportServerConfig +) & + McpServerControls; + +/** + * Configuration options for an individual `GenkitMcpClient` instance. + * This defines how the client connects to a single MCP server and how it behaves. + */ +export type McpClientOptions = { + /** Client name to advertise to the server. */ + name: string; + /** Name for the server, defaults to the server's advertised name. */ + serverName?: string; + + /** + * An optional version number for this client. This is primarily for logging + * and identification purposes. Defaults to '1.0.0'. + */ + version?: string; + /** + * If true, tool responses from the MCP server will be returned in their raw + * MCP format. Otherwise (default), they are processed and potentially + * simplified for better compatibility with Genkit's typical data structures. + */ + rawToolResponses?: boolean; + /** The server configuration to connect. */ + mcpServer: McpServerConfig; + /** Manually supply a session id for HTTP streaming clients if desired. */ + sessionId?: string; +}; + +/** + * Represents a client connection to a single MCP (Model Context Protocol) server. + * It handles the lifecycle of the connection (connect, disconnect, disable, re-enable, reconnect) + * and provides methods to fetch tools from the connected server. + * + * An instance of `GenkitMcpClient` is typically managed by a `GenkitMcpHost` + * when dealing with multiple MCP server connections. + */ +export class GenkitMcpClient { + _server?: McpServerRef; + + sessionId?: string; + readonly name: string; + readonly suppliedServerName?: string; + private version: string; + private serverConfig: McpServerConfig; + private rawToolResponses?: boolean; + private disabled: boolean; + private roots?: Root[]; + + private _readyListeners: { + resolve: () => void; + reject: (err: Error) => void; + }[] = []; + private _ready = false; + + constructor(options: McpClientOptions) { + this.name = options.name; + this.suppliedServerName = options.serverName; + this.version = options.version || '1.0.0'; + this.serverConfig = options.mcpServer; + this.rawToolResponses = !!options.rawToolResponses; + this.disabled = !!options.mcpServer.disabled; + this.roots = options.mcpServer.roots; + this.sessionId = options.sessionId; + + this._initializeConnection(); + } + + get serverName(): string { + return ( + this.suppliedServerName ?? + this._server?.client.getServerVersion()?.name ?? + 'unknown-server' + ); + } + + async updateRoots(roots: Root[]) { + this.roots = roots; + await this._server?.client.sendRootsListChanged(); + } + + /** + * Sets up a connection based on a provided map of server configurations. + * - Reconnects existing servers if their configuration appears to have + * changed (implicitly handled by `connectServer`). + * - Sets the client's ready state once all connection attempts are complete. + * @param mcpServers A record mapping server names to their configurations. + */ + private async _initializeConnection() { + this._ready = false; + try { + await this._connect(); + this._ready = true; + while (this._readyListeners.length) { + this._readyListeners.pop()?.resolve(); + } + } catch (err) { + while (this._readyListeners.length) { + this._readyListeners.pop()?.reject(err as Error); + } + } + if (this.roots) { + await this.updateRoots(this.roots); + } + } + + /** + * Returns a Promise that resolves when the client has attempted to connect + * to all configured servers, or rejects if a critical error occurs during + * the initial connection phase. + */ + async ready() { + if (this._ready) return; + return new Promise((resolve, reject) => { + this._readyListeners.push({ resolve, reject }); + }); + } + + /** + * Connects to a single MCP server defined by the provided configuration. + * @param config The configuration object for the server. + */ + private async _connect() { + if (this._server) await this._server.transport.close(); + logger.debug( + `[MCP Client] Connecting MCP server '${this.serverName}' in client '${this.name}'.` + ); + + const { transport, type: transportType } = await transportFrom( + this.serverConfig, + this.sessionId + ); + if (!transport) { + throw new GenkitError({ + status: 'INVALID_ARGUMENT', + message: `[MCP Client] Could not determine valid transport config from supplied options.`, + }); + } + + let error: string | undefined; + + const client = new Client( + { name: this.name, version: this.version }, + { capabilities: { roots: { listChanged: true } } } + ); + client.setRequestHandler(ListRootsRequestSchema, () => { + logger.debug(`[MCP Client] fetching roots for ${this.name}`); + return { roots: this.roots || [] }; + }); + + try { + await client.connect(transport); + } catch (e) { + logger.warn( + `[MCP Client] Error connecting server via ${transportType} transport: ${e}` + ); + this.disabled = true; + error = (e as Error).toString(); + } + + this._server = { + client, + transport, + error, + } as McpServerRef; + } + + /** + * Disconnects the MCP server and removes its registration + * from this client instance. + */ + async _disconnect() { + if (this._server) { + logger.debug( + `[MCP Client] Disconnecting MCP server in client '${this.name}'.` + ); + await this._server.client.close(); + this._server = undefined; + } + } + + /** + * Disables a server. Closes the underlying transport and server's configuration. Does nothing if the server is + * already disabled. + */ + async disable() { + if (!this.isEnabled()) return; + if (this._server) { + logger.debug( + `[MCP Client] Disabling MCP server in client '${this.name}'` + ); + await this._disconnect(); + this.disabled = true; + } + } + + /** + * Whether this client-server connection is enabled or not. + */ + isEnabled() { + return !this.disabled; + } + + /** + * Enables a server connection, including previously disabled ones. Does nothing if the + * server is not disabled. + */ + async enable() { + if (this.isEnabled()) return; + logger.debug(`[MCP Client] Reenabling MCP server in client '${this.name}'`); + await this._initializeConnection(); + this.disabled = !!this._server!.error; + } + + /** + * Closes and then restarts the transport connection for the specified server. + * Useful for attempting to recover from connection issues without full + * reconfiguration. + */ + async restart() { + if (this._server) { + logger.debug( + `[MCP Client] Restarting connection to MCP server in client '${this.name}'` + ); + await this._disconnect(); + await this._initializeConnection(); + } + } + + /** + * Fetches all tools available through this client, if the server + * configuration is not disabled. + */ + async getActiveTools(ai: Genkit): Promise { + await this.ready(); + let tools: ToolAction[] = []; + + if (this._server) { + const capabilities = this._server.client.getServerCapabilities(); + if (capabilities?.tools) + tools.push( + ...(await fetchDynamicTools(ai, this._server.client, { + rawToolResponses: this.rawToolResponses, + serverName: this.serverName, + name: this.name, + })) + ); + } + + return tools; + } + + async getActivePrompts( + ai: Genkit, + options?: PromptGenerateOptions + ): Promise { + if (this._server?.client.getServerCapabilities()?.prompts) { + return fetchAllPrompts(this._server.client, { + ai, + serverName: this.serverName, + name: this.name, + options, + }); + } + return []; + } + + /** + * Get the specified prompt as an `ExecutablePrompt` available through this + * client. If no such prompt is found, return undefined. + */ + async getPrompt( + ai: Genkit, + promptName: string, + opts?: PromptGenerateOptions + ): Promise { + await this.ready(); + + if (this._server) { + const capabilities = await this._server.client.getServerCapabilities(); + if (capabilities?.prompts) { + return await getExecutablePrompt(this._server.client, { + ai, + serverName: this.name, + promptName, + name: this.name, + options: opts, + }); + } + logger.debug(`[MCP Client] No prompts are found in this MCP server.`); + } + return; + } + + /** Returns the underlying MCP SDK client if one has been initialized. */ + get mcpClient(): Client | undefined { + return this._server?.client; + } +} diff --git a/js/plugins/mcp/src/client/host.ts b/js/plugins/mcp/src/client/host.ts new file mode 100644 index 0000000000..b24d3502b9 --- /dev/null +++ b/js/plugins/mcp/src/client/host.ts @@ -0,0 +1,429 @@ +/** + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Root } from '@modelcontextprotocol/sdk/types.js'; +import { + ExecutablePrompt, + Genkit, + PromptGenerateOptions, + ToolAction, +} from 'genkit'; +import { logger } from 'genkit/logging'; +import { GenkitMcpClient, McpServerConfig } from './client.js'; + +export interface McpHostOptions { + /** + * An optional client name for this MCP host. This name is advertised to MCP Servers + * as the connecting client name. Defaults to 'genkit-mcp'. + */ + name?: string; + /** + * An optional version for this MCP host. Primarily for + * logging and identification within Genkit. + * Defaults to '1.0.0'. + */ + version?: string; + /** + * A record for configuring multiple MCP servers. Each server connection is + * controlled by a `GenkitMcpClient` instance managed by `GenkitMcpHost`. + * The key in the record is used as the identifier for the MCP server. + */ + mcpServers?: Record; + + /** + * If true, tool responses from the MCP server will be returned in their raw + * MCP format. Otherwise (default), they are processed and potentially + * simplified for better compatibility with Genkit's typical data structures. + */ + rawToolResponses?: boolean; + + /** + * When provided, each connected MCP server will be sent the roots specified here. Overridden by any specific roots sent in the `mcpServers` config for a given server. + */ + roots?: Root[]; +} + +/** Internal representation of client state for logging. */ +interface ClientState { + error?: { + message: string; + detail?: any; + }; +} + +/** + * Manages connections to multiple MCP (Model Context Protocol) servers. + * Each server connection is individually configured and managed by an instance of `GenkitMcpClient`. + * This host provides a centralized way to initialize, update, and interact with these clients. + * + * It allows for dynamic registration of tools from all connected and enabled MCP servers + * into a Genkit instance. + */ +export class GenkitMcpHost { + name: string; + private _clients: Record = {}; + private _clientStates: Record = {}; + private _readyListeners: { + resolve: () => void; + reject: (err: Error) => void; + }[] = []; + private _ready = false; + private roots: Root[] | undefined; + rawToolResponses?: boolean; + + constructor(options: McpHostOptions) { + this.name = options.name || 'genkit-mcp'; + this.rawToolResponses = options.rawToolResponses; + this.roots = options.roots; + + if (options.mcpServers) { + this.updateServers(options.mcpServers); + } else { + this._ready = true; + } + } + + /** + * Returns a Promise that resolves when the host has attempted to connect + * to all configured clients, or rejects if a critical error occurs during + * the initial connection phase. + */ + async ready() { + if (this._ready) return; + return new Promise((resolve, reject) => { + this._readyListeners.push({ resolve, reject }); + }); + } + + /** + * Connects to a single MCP server defined by the provided configuration. + * If a server with the same name already exists, it will be disconnected first. + * Stores the client and transport references internally. Handles connection errors + * by marking the server as disabled. + * @param serverName The name to assign to this server connection. + * @param config The configuration object for the server. + */ + async connect(serverName: string, config: McpServerConfig) { + const existingEntry = this._clients[serverName]; + if (existingEntry) { + try { + await existingEntry._disconnect(); + } catch (e) { + existingEntry.disable(); + this.setError(serverName, { + message: `[MCP Host] Error disconnecting from existing connection for ${serverName}`, + detail: `Details: ${e}`, + }); + } + } + + logger.debug( + `[MCP Host] Connecting to MCP server '${serverName}' in host '${this.name}'.` + ); + try { + const client = new GenkitMcpClient({ + name: this.name, + serverName: serverName, + mcpServer: { ...config, roots: config.roots || this.roots }, + rawToolResponses: this.rawToolResponses, + }); + this._clients[serverName] = client; + } catch (e) { + this.setError(serverName, { + message: `[MCP Host] Error connecting to ${serverName} with config ${config}`, + detail: `Details: ${e}`, + }); + } + } + + /** + * Disconnects the specified MCP server and removes its registration + * from this client instance. + * @param serverName The name of the server to disconnect. + */ + async disconnect(serverName: string) { + const client = this._clients[serverName]; + if (!client) { + logger.warn(`[MCP Host] unable to find server ${serverName}`); + return; + } + + logger.debug( + `[MCP Host] Disconnecting MCP server '${serverName}' in host '${this.name}'.` + ); + try { + await client._disconnect(); + } catch (e) { + client.disable(); + this.setError(serverName, { + message: `[MCP Host] Error disconnecting from existing connection for ${serverName}`, + detail: `Details: ${e}`, + }); + } + delete this._clients[serverName]; + } + + /** + * Temporarily disables a server connection. Closes the underlying transport + * but retains the server's configuration. Does nothing if the server is + * already disabled. + * @param serverName The name of the server to disable. + */ + async disable(serverName: string) { + const client = this._clients[serverName]; + if (!client) { + logger.warn(`[MCP Host] unable to find server ${serverName}`); + return; + } + if (!client.isEnabled()) { + logger.warn(`[MCP Host] server ${serverName} already disabled`); + return; + } + + logger.debug( + `[MCP Host] Disabling MCP server '${serverName}' in host '${this.name}'` + ); + await client.disable(); + } + + /** + * Enables a server connection, including previously disabled ones. Attempts to reconnect + * using the stored transport. Does nothing if the server is not disabled. + * @param serverName The name of the server to re-enable. + */ + async enable(serverName: string) { + const client = this._clients[serverName]; + if (!client) { + logger.warn(`[MCP Host] unable to find server ${serverName}`); + return; + } + + logger.debug( + `[MCP Host] Reenabling MCP server '${serverName}' in host '${this.name}'` + ); + try { + await client.enable(); + } catch (e) { + client.disable(); + this.setError(serverName, { + message: `[MCP Host] Error reenabling server ${serverName}`, + detail: `Details: ${e}`, + }); + } + } + + /** + * Closes and then restarts the transport connection for the specified server. + * Useful for attempting to recover from connection issues without full + * reconfiguration. + * @param serverName The name of the server to reconnect. + */ + async reconnect(serverName: string) { + const client = this._clients[serverName]; + if (!client) { + logger.warn(`[MCP Host] unable to find server ${serverName}`); + return; + } + + logger.debug( + `[MCP Host] Restarting connection to MCP server '${serverName}' in host '${this.name}'` + ); + try { + await client.restart(); + } catch (e) { + client.disable(); + this.setError(serverName, { + message: `[MCP Host] Error restarting to server ${serverName}`, + detail: `Details: ${e}`, + }); + } + } + + /** + * Updates the connections based on a provided map of server configurations. + * - Connects any new servers defined in `mcpServers`. + * - Disconnects any servers currently connected but not present in `mcpServers`. + * - Reconnects existing servers if their configuration appears to have changed (implicitly handled by `connectServer`). + * Sets the client's ready state once all connection attempts are complete. + * @param mcpServers A record mapping server names to their configurations. + */ + updateServers(mcpServers: Record) { + this._ready = false; + const newServerNames = new Set(Object.keys(mcpServers)); + const currentServerNames = new Set(Object.keys(this._clients)); + + const promises: Promise[] = []; + for (const serverName in mcpServers) { + promises.push(this.connect(serverName, mcpServers[serverName])); + } + + // Disconnect servers that are no longer in the config + for (const serverName of currentServerNames) { + if (!newServerNames.has(serverName)) { + this.disconnect(serverName); + } + } + + Promise.all(promises) + .then(() => { + this._ready = true; + while (this._readyListeners.length) { + this._readyListeners.pop()?.resolve(); + } + }) + .catch((err) => { + while (this._readyListeners.length) { + this._readyListeners.pop()?.reject(err); + } + }); + } + + /** + * Retrieves all tools from all connected and enabled MCP clients managed by + * this instance. This method waits for the host to be ready (all initial + * connection attempts made) before fetching tools. + * + * It iterates through each managed `GenkitMcpClient`, and if the client is + * not disabled, it calls the client's `getTools` method to fetch its + * available tools. These are then aggregated into a single array. + * + * This is useful for dynamically providing a list of all available MCP tools + * to Genkit, for example, when setting up a Genkit plugin. + * + * ```ts + * const mcpHost = createMcpHost({ ... }); + * // In your Genkit configuration: + * // const allMcpTools = await McpHost.getActiveTools(ai); + * // Then, these tools can be used or registered with Genkit. + * ``` + * + * @param ai The Genkit instance, used by individual clients to define dynamic + * tools. + * @returns A Promise that resolves to an array of `ToolAction` from all + * active MCP clients. + */ + async getActiveTools(ai: Genkit): Promise { + await this.ready(); + let allTools: ToolAction[] = []; + + for (const serverName in this._clients) { + const client = this._clients[serverName]; + if (client.isEnabled() && !this.hasError(serverName)) { + try { + const tools = await client.getActiveTools(ai); + allTools.push(...tools); + } catch (e) { + logger.error( + `Error fetching active tools from client ${serverName}.`, + JSON.stringify(e) + ); + } + } + } + return allTools; + } + + async getActivePrompts(ai: Genkit): Promise { + await this.ready(); + let allPrompts: ExecutablePrompt[] = []; + + for (const serverName in this._clients) { + const client = this._clients[serverName]; + if (client.isEnabled() && !this.hasError(serverName)) { + allPrompts.push(...(await client.getActivePrompts(ai))); + } + } + return allPrompts; + } + + /** + * Get the specified prompt as an `ExecutablePrompt` available through the + * specified server. If no such prompt is found, return undefined. + */ + async getPrompt( + ai: Genkit, + serverName: string, + promptName: string, + opts?: PromptGenerateOptions + ): Promise | undefined> { + await this.ready(); + const client = this._clients[serverName]; + if (!client) { + logger.error(`No client found with name '${serverName}'.`); + return; + } + if (this.hasError(serverName)) { + const errorStringified = JSON.stringify( + this._clientStates[serverName].error + ); + logger.error( + `Client '${serverName}' is in an error state. ${errorStringified}` + ); + } + if (client.isEnabled()) { + const prompt = await client.getPrompt(ai, promptName, opts); + if (!prompt) { + logger.error( + `[MCP Host] Unable to fetch the specified ${promptName} in server ${serverName}.` + ); + return; + } + return prompt; + } + return; + } + + async close() { + for (const client of Object.values(this._clients)) { + await client._disconnect(); + } + } + + /** Helper method to track and log client errors. */ + private setError( + serverName: string, + error: { + message: string; + detail?: any; + } + ) { + this._clientStates[serverName] = { error }; + logger.warn( + `An error has occured while managing your MCP client '${serverName}'. The client may be disabled to avoid further issues. Please resolve the issue and reenable the client '${serverName}' to continue using its resources.` + ); + logger.warn(error); + } + + private hasError(serverName: string) { + return ( + this._clientStates[serverName] && !!this._clientStates[serverName].error + ); + } + + /** + * Returns an array of all active clients. + */ + get activeClients(): GenkitMcpClient[] { + return Object.values(this._clients).filter((c) => c.isEnabled()); + } + + /** + * Returns the client by name. + */ + getClient(name: string) { + return this._clients[name]; + } +} diff --git a/js/plugins/mcp/src/client/index.ts b/js/plugins/mcp/src/client/index.ts new file mode 100644 index 0000000000..2032da820f --- /dev/null +++ b/js/plugins/mcp/src/client/index.ts @@ -0,0 +1,29 @@ +/** + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { SSEClientTransportOptions } from '@modelcontextprotocol/sdk/client/sse.js'; +import { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js'; +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'; +import { GenkitMcpClient, McpClientOptions } from './client.js'; +import { GenkitMcpHost, McpHostOptions } from './host.js'; +export { GenkitMcpClient, GenkitMcpHost }; +export type { + McpClientOptions, + McpHostOptions, + SSEClientTransportOptions, + StdioServerParameters, + Transport, +}; diff --git a/js/plugins/mcp/src/client/prompts.ts b/js/plugins/mcp/src/client/prompts.ts deleted file mode 100644 index 70f2287cbf..0000000000 --- a/js/plugins/mcp/src/client/prompts.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type { Client } from '@modelcontextprotocol/sdk/client/index.js' with { 'resolution-mode': 'import' }; -import type { Prompt } from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' }; -import type { Genkit, JSONSchema } from 'genkit'; -import { logger } from 'genkit/logging'; -import type { McpClientOptions } from '../index.js'; -import { fromMcpPromptMessage } from './message.js'; - -function toSchema(args: Prompt['arguments']) { - if (!args) return {}; - const schema: JSONSchema = { type: 'object', properties: {}, required: [] }; - for (const arg of args) { - schema.properties[arg.name] = { - type: 'string', - description: arg.description, - }; - if (arg.required) schema.required.push(arg.name); - } - return schema; -} - -function registerPrompt( - ai: Genkit, - client: Client, - prompt: Prompt, - params: McpClientOptions -) { - logger.debug( - `[@genkit-ai/mcp] Registering MCP prompt ${params.name}/${prompt.name}` - ); - ai.definePrompt({ - name: prompt.name, - description: prompt.description || '', - input: { jsonSchema: toSchema(prompt.arguments) }, - output: { format: 'text' }, - messages: async (args) => { - logger.debug( - `[@genkit-ai/mcp] Calling MCP prompt ${params.name}/${prompt.name} with arguments`, - JSON.stringify(args) - ); - const result = await client.getPrompt({ - name: prompt.name, - arguments: args, - }); - return result.messages.map(fromMcpPromptMessage); - }, - }); -} - -/** - * Lookup all tools available in the server and register each as a Genkit tool. - */ -export async function registerAllPrompts( - ai: Genkit, - client: Client, - params: McpClientOptions -): Promise { - let cursor: string | undefined; - while (true) { - const { nextCursor, prompts } = await client.listPrompts({ cursor }); - prompts.forEach((p) => registerPrompt(ai, client, p, params)); - cursor = nextCursor; - if (!cursor) break; - } -} diff --git a/js/plugins/mcp/src/client/resources.ts b/js/plugins/mcp/src/client/resources.ts deleted file mode 100644 index 2ce4d9d0de..0000000000 --- a/js/plugins/mcp/src/client/resources.ts +++ /dev/null @@ -1,100 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type { Client } from '@modelcontextprotocol/sdk/client/index.js' with { 'resolution-mode': 'import' }; -import type { - Resource, - ResourceTemplate, -} from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' }; -import { z, type Genkit } from 'genkit'; -import type { McpClientOptions } from '../index.js'; - -export async function registerResourceTools( - ai: Genkit, - client: Client, - params: McpClientOptions -) { - ai.defineTool( - { - name: `${params.name}/list_resources`, - description: `list all available resources for '${params.name}'`, - inputSchema: z.object({ - /** Provide a cursor for accessing additional paginated results. */ - cursor: z.string().optional(), - /** When specified, automatically paginate and fetch all resources. */ - all: z.boolean().optional(), - }), - }, - async ({ cursor, all }) => { - if (!all) { - return client.listResources(); - } - - let currentCursor: string | undefined = cursor; - const resources: Resource[] = []; - while (true) { - const { nextCursor, resources: newResources } = - await client.listResources({ cursor: currentCursor }); - resources.push(...newResources); - currentCursor = nextCursor; - if (!currentCursor) break; - } - return { resources }; - } - ); - - ai.defineTool( - { - name: `${params.name}/list_resource_templates`, - description: `list all available resource templates for '${params.name}'`, - inputSchema: z.object({ - /** Provide a cursor for accessing additional paginated results. */ - cursor: z.string().optional(), - /** When specified, automatically paginate and fetch all resources. */ - all: z.boolean().optional(), - }), - }, - async ({ cursor, all }) => { - if (!all) { - return client.listResourceTemplates(); - } - - let currentCursor: string | undefined = cursor; - const resourceTemplates: ResourceTemplate[] = []; - while (true) { - const { nextCursor, resourceTemplates: newResourceTemplates } = - await client.listResourceTemplates({ cursor: currentCursor }); - resourceTemplates.push(...newResourceTemplates); - currentCursor = nextCursor; - if (!currentCursor) break; - } - return { resourceTemplates }; - } - ); - - ai.defineTool( - { - name: `${params.name}/read_resource`, - description: `this tool can read resources from '${params.name}'`, - inputSchema: z.object({ - uri: z.string().describe('the URI of the resource to retrieve'), - }), - }, - async ({ uri }) => { - return client.readResource({ uri }); - } - ); -} diff --git a/js/plugins/mcp/src/client/tools.ts b/js/plugins/mcp/src/client/tools.ts deleted file mode 100644 index 6bc09f48bb..0000000000 --- a/js/plugins/mcp/src/client/tools.ts +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type { Client } from '@modelcontextprotocol/sdk/client/index.js' with { 'resolution-mode': 'import' }; -import type { - CallToolResult, - Tool, -} from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' }; -import { z, type Genkit, type JSONSchema7 } from 'genkit'; -import { logger } from 'genkit/logging'; -import type { McpClientOptions } from '../index.js'; - -const toText = (c: CallToolResult['content']) => - c.map((p) => p.text || '').join(''); - -function processResult(result: CallToolResult) { - if (result.isError) return { error: toText(result.content) }; - if (result.content.every((c) => !!c.text)) { - const text = toText(result.content); - if (text.trim().startsWith('{') || text.trim().startsWith('[')) { - try { - return JSON.parse(text); - } catch (e) { - return text; - } - } - return text; - } - if (result.content.length === 1) return result.content[0]; - return result; -} - -function registerTool( - ai: Genkit, - client: Client, - tool: Tool, - params: McpClientOptions -) { - logger.debug( - `[@genkit-ai/mcp] Registering MCP tool ${params.name}/${tool.name}` - ); - ai.defineTool( - { - name: `${params.name}/${tool.name}`, - description: tool.description || '', - inputJsonSchema: tool.inputSchema as JSONSchema7, - outputSchema: z.any(), - }, - async (args) => { - logger.debug( - `[@genkit-ai/mcp] Calling MCP tool ${params.name}/${tool.name} with arguments`, - JSON.stringify(args) - ); - const result = await client.callTool({ - name: tool.name, - arguments: args, - }); - logger.debug( - `MCP tool ${tool.name} result:`, - JSON.stringify(result, null, 2) - ); - if (params.rawToolResponses) return result; - return processResult(result as CallToolResult); - } - ); -} - -/** - * Lookup all tools available in the server and register each as a Genkit tool. - */ -export async function registerAllTools( - ai: Genkit, - client: Client, - params: McpClientOptions -): Promise { - let cursor: string | undefined; - while (true) { - const { nextCursor, tools } = await client.listTools({ cursor }); - tools.forEach((t) => registerTool(ai, client, t, params)); - cursor = nextCursor; - if (!cursor) break; - } -} diff --git a/js/plugins/mcp/src/index.ts b/js/plugins/mcp/src/index.ts index 97b5edc277..afad3a8cdd 100644 --- a/js/plugins/mcp/src/index.ts +++ b/js/plugins/mcp/src/index.ts @@ -14,93 +14,101 @@ * limitations under the License. */ -import type { StdioServerParameters } from '@modelcontextprotocol/sdk/client/stdio.js' with { 'resolution-mode': 'import' }; -import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' with { 'resolution-mode': 'import' }; -import { GenkitError, type Genkit } from 'genkit'; -import { genkitPlugin } from 'genkit/plugin'; -import { registerAllPrompts } from './client/prompts.js'; -import { registerResourceTools } from './client/resources.js'; -import { registerAllTools } from './client/tools.js'; +import type { Genkit } from 'genkit'; +import { + GenkitMcpClient, + McpClientOptions, + McpServerConfig, + McpStdioServerConfig, +} from './client/client.js'; +import { GenkitMcpHost, McpHostOptions } from './client/index.js'; import { GenkitMcpServer } from './server.js'; +export { + GenkitMcpClient, + GenkitMcpHost, + type McpClientOptions, + type McpHostOptions, + type McpServerConfig, + type McpStdioServerConfig, +}; -export interface McpClientOptions { - /** Provide a name for this client which will be its namespace for all tools and prompts. */ +export interface McpServerOptions { + /** The name you want to give your server for MCP inspection. */ name: string; - /** Provide a version number for this client (defaults to 1.0.0). */ + /** The version you want the server to advertise to clients. Defaults to + * 1.0.0. */ version?: string; - /** If you already have an MCP transport you'd like to use, pass it here to connect to the server. */ - transport?: Transport; - /** Start a local server process using the stdio MCP transport. */ - serverProcess?: StdioServerParameters; - /** Connect to a remote server process using the SSE MCP transport. */ - serverUrl?: string; - /** Connect to a remote server process using the WebSocket MCP transport. */ - serverWebsocketUrl?: string | URL; - /** Return tool responses in raw MCP form instead of processing them for Genkit compatibility. */ - rawToolResponses?: boolean; } -async function transportFrom(params: McpClientOptions): Promise { - if (params.transport) return params.transport; - if (params.serverUrl) { - const { SSEClientTransport } = await import( - '@modelcontextprotocol/sdk/client/sse.js' - ); - return new SSEClientTransport(new URL(params.serverUrl)); - } - if (params.serverProcess) { - const { StdioClientTransport } = await import( - '@modelcontextprotocol/sdk/client/stdio.js' - ); - return new StdioClientTransport(params.serverProcess); - } - if (params.serverWebsocketUrl) { - const { WebSocketClientTransport } = await import( - '@modelcontextprotocol/sdk/client/websocket.js' - ); - let url = params.serverWebsocketUrl; - if (typeof url === 'string') url = new URL(url); - return new WebSocketClientTransport(url); - } - - throw new GenkitError({ - status: 'INVALID_ARGUMENT', - message: - 'Unable to create a server connection with supplied options. Must provide transport, stdio, or sseUrl.', - }); -} - -export function mcpClient(params: McpClientOptions) { - return genkitPlugin(params.name, async (ai: Genkit) => { - const { Client } = await import( - '@modelcontextprotocol/sdk/client/index.js' - ); - - const transport = await transportFrom(params); - ai.options.model; - const client = new Client( - { name: params.name, version: params.version || '1.0.0' }, - { capabilities: {} } - ); - await client.connect(transport); - const capabilties = await client.getServerCapabilities(); - const promises: Promise[] = []; - if (capabilties?.tools) promises.push(registerAllTools(ai, client, params)); - if (capabilties?.prompts) - promises.push(registerAllPrompts(ai, client, params)); - if (capabilties?.resources) - promises.push(registerResourceTools(ai, client, params)); - await Promise.all(promises); - }); +/** + * Creates an MCP Client Host that connects to one or more MCP servers. + * Each server is defined in the `mcpClients` option, where the key is a + * client-side name for the server and the value is the server's configuration. + * + * By default, all servers in the config will be attempted to connect unless + * their configuration includes `{disabled: true}`. + * + * ```ts + * const clientHost = createMcpHost({ + * name: "my-mcp-client-host", // Name for the host itself + * mcpServers: { + * // Each key is a name for this client/server configuration + * // Each value is an McpServerConfig object + * gitToolServer: { command: "uvx", args: ["mcp-server-git"] }, + * customApiServer: { url: "http://localhost:1234/mcp" } + * } + * }); + * ``` + * + * @param options Configuration for the MCP Client Host, including the definitions of MCP servers to connect to. + * @returns A new instance of GenkitMcpHost. + */ +export function createMcpHost(options: McpHostOptions) { + return new GenkitMcpHost(options); } -export interface McpServerOptions { - /** The name you want to give your server for MCP inspection. */ - name: string; - /** The version you want the server to advertise to clients. Defaults to 1.0.0. */ - version?: string; +/** + * Creates an MCP Client that connects to a single MCP server. + * This is useful when you only need to interact with one MCP server, + * or if you want to manage client instances individually. + * + * ```ts + * const client = createMcpClient({ + * name: "mySingleMcpClient", // A name for this client instance + * command: "npx", // Example: Launching a local server + * args: ["-y", "@modelcontextprotocol/server-everything", "/path/to/allowed/dir"], + * }); + * + * // To get tools from this client: + * // const tools = await client.getActiveTools(ai); + * ``` + * + * @param options Configuration for the MCP Client, defining how it connects + * to the MCP server and its behavior. + * @returns A new instance of GenkitMcpClient. + */ +export function createMcpClient(options: McpClientOptions) { + return new GenkitMcpClient(options); } -export function mcpServer(ai: Genkit, options: McpServerOptions) { +/** + * Creates an MCP server based on the supplied Genkit instance. All tools and prompts + * will be automatically converted to MCP compatibility. + * + * ```ts + * const mcpServer = createMcpServer(ai, {name: 'my-mcp-server', version: '0.1.0'}); + * + * await mcpServer.start(); // starts a stdio transport, OR + * await mcpServer.start(customMcpTransport); // starts server using supplied transport + * ``` + * + * @param ai Your Genkit instance with registered tools and prompts. + * @param options Configuration metadata for the server. + * @returns GenkitMcpServer instance. + */ +export function createMcpServer( + ai: Genkit, + options: McpServerOptions +): GenkitMcpServer { return new GenkitMcpServer(ai, options); } diff --git a/js/plugins/mcp/src/server.ts b/js/plugins/mcp/src/server.ts index f4c4baa682..9bc5e755cf 100644 --- a/js/plugins/mcp/src/server.ts +++ b/js/plugins/mcp/src/server.ts @@ -23,7 +23,6 @@ import { } from 'genkit'; import type { McpServerOptions } from './index.js'; -import { toJsonSchema } from '@genkit-ai/core/schema'; import type { Server } from '@modelcontextprotocol/sdk/server/index.js' with { 'resolution-mode': 'import' }; import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' with { 'resolution-mode': 'import' }; import type { @@ -40,7 +39,15 @@ import type { Tool, } from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' }; import { logger } from 'genkit/logging'; -import { toToolDefinition, type ToolAction } from 'genkit/tool'; +import { toJsonSchema } from 'genkit/schema'; +import { ToolAction, toToolDefinition } from 'genkit/tool'; + +/** + * Represents an MCP (Model Context Protocol) server that exposes Genkit tools + * and prompts. This class wraps a Genkit instance and makes its registered + * actions (tools, prompts) available to MCP clients. It handles the translation + * between Genkit's action definitions and MCP's expected formats. + */ export class GenkitMcpServer { ai: Genkit; options: McpServerOptions; @@ -49,12 +56,25 @@ export class GenkitMcpServer { toolActions: ToolAction[] = []; promptActions: PromptAction[] = []; + /** + * Creates an instance of GenkitMcpServer. + * @param ai The Genkit instance whose actions will be exposed. + * @param options Configuration options for the MCP server, like its name and version. + */ constructor(ai: Genkit, options: McpServerOptions) { this.ai = ai; this.options = options; - this.setup(); } + /** + * Initializes the MCP server instance and registers request handlers. It + * dynamically imports MCP SDK components and sets up handlers for listing + * tools, calling tools, listing prompts, and getting prompts. It also + * resolves and stores all tool and prompt actions from the Genkit instance. + * + * This method is called by the constructor and ensures the server is ready + * before any requests are handled. It's idempotent. + */ async setup(): Promise { if (this.actionsResolved) return; const { Server } = await import( @@ -95,6 +115,7 @@ export class GenkitMcpServer { this.getPrompt.bind(this) ); + // TODO -- use listResolvableActions. const allActions = await this.ai.registry.listActions(); const toolList: ToolAction[] = []; const promptList: PromptAction[] = []; @@ -110,6 +131,12 @@ export class GenkitMcpServer { this.actionsResolved = true; } + /** + * Handles MCP requests to list available tools. + * It maps the resolved Genkit tool actions to the MCP Tool format. + * @param req The MCP ListToolsRequest. + * @returns A Promise resolving to an MCP ListToolsResult. + */ async listTools(req: ListToolsRequest): Promise { await this.setup(); return { @@ -119,11 +146,20 @@ export class GenkitMcpServer { name: def.name, inputSchema: (def.inputSchema as any) || { type: 'object' }, description: def.description, + _meta: t.__action.metadata?.mcp?._meta, }; }), }; } + /** + * Handles MCP requests to call a specific tool. It finds the corresponding + * Genkit tool action and executes it with the provided arguments. The result + * is then formatted as an MCP CallToolResult. + * @param req The MCP CallToolRequest containing the tool name and arguments. + * @returns A Promise resolving to an MCP CallToolResult. + * @throws GenkitError if the requested tool is not found. + */ async callTool(req: CallToolRequest): Promise { await this.setup(); const tool = this.toolActions.find( @@ -135,9 +171,23 @@ export class GenkitMcpServer { message: `Tried to call tool '${req.params.name}' but it could not be found.`, }); const result = await tool(req.params.arguments); - return { content: [{ type: 'text', text: JSON.stringify(result) }] }; + return { + content: [ + { + type: 'text', + text: typeof result === 'string' ? result : JSON.stringify(result), + }, + ], + }; } + /** + * Handles MCP requests to list available prompts. + * It maps the resolved Genkit prompt actions to the MCP Prompt format, + * including converting input schemas to MCP argument definitions. + * @param req The MCP ListPromptsRequest. + * @returns A Promise resolving to an MCP ListPromptsResult. + */ async listPrompts(req: ListPromptsRequest): Promise { await this.setup(); return { @@ -146,11 +196,22 @@ export class GenkitMcpServer { name: p.__action.name, description: p.__action.description, arguments: toMcpPromptArguments(p), + _meta: p.__action.metadata?.mcp?._meta, }; }), }; } + /** + * Handles MCP requests to get (render) a specific prompt. It finds the + * corresponding Genkit prompt action, executes it with the provided + * arguments, and then formats the resulting messages into the MCP + * PromptMessage format. + * @param req The MCP GetPromptRequest containing the prompt name and + * arguments. + * @returns A Promise resolving to an MCP GetPromptResult. + * @throws GenkitError if the requested prompt is not found. + */ async getPrompt(req: GetPromptRequest): Promise { await this.setup(); const prompt = this.promptActions.find( @@ -159,7 +220,7 @@ export class GenkitMcpServer { if (!prompt) throw new GenkitError({ status: 'NOT_FOUND', - message: `[@genkit-ai/mcp] Tried to call prompt '${req.params.name}' but it could not be found.`, + message: `[MCP Server] Tried to call prompt '${req.params.name}' but it could not be found.`, }); const result = await prompt(req.params.arguments); return { @@ -168,6 +229,13 @@ export class GenkitMcpServer { }; } + /** + * Starts the MCP server with the specified transport or a default + * StdioServerTransport. Ensures the server is set up before connecting the + * transport. + * @param transport Optional MCP transport instance. If not provided, a + * StdioServerTransport will be created and used. + */ async start(transport?: Transport) { if (!transport) { const { StdioServerTransport } = await import( @@ -178,11 +246,18 @@ export class GenkitMcpServer { await this.setup(); await this.server!.connect(transport); logger.info( - `[@genkit-ai/mcp] MCP server '${this.options.name}' started successfully.` + `[MCP Server] MCP server '${this.options.name}' started successfully.` ); } } +/** + * Converts a Genkit prompt's input schema to an array of MCP prompt arguments. + * MCP prompts currently only support string arguments. + * @param p The Genkit PromptAction. + * @returns An array of MCP prompt arguments, or undefined if the schema is not defined. + * @throws GenkitError if the input schema is not an object or if any property is not a string. + */ function toMcpPromptArguments( p: PromptAction ): Prompt['arguments'] | undefined { @@ -195,8 +270,7 @@ function toMcpPromptArguments( if (!jsonSchema.properties) throw new GenkitError({ status: 'FAILED_PRECONDITION', - message: - '[@genkit-ai/mcp] MCP prompts must take objects as input schema.', + message: '[MCP Server] MCP prompts must take objects as input schema.', }); const args: Prompt['arguments'] = []; @@ -208,7 +282,7 @@ function toMcpPromptArguments( ) { throw new GenkitError({ status: 'FAILED_PRECONDITION', - message: `[@genkit-ai/mcp] MCP prompts may only take string arguments, but ${p.__action.name} has property '${k}' of type '${type}'.`, + message: `[MCP Server] MCP prompts may only take string arguments, but ${p.__action.name} has property '${k}' of type '${type}'.`, }); } args.push({ @@ -222,11 +296,19 @@ function toMcpPromptArguments( const ROLE_MAP = { model: 'assistant', user: 'user' } as const; +/** + * Converts a Genkit MessageData object to an MCP PromptMessage. + * Handles mapping of roles and content types (text, image). + * MCP only supports 'user' and 'assistant' (model) roles and base64 data images. + * @param messageData The Genkit MessageData object. + * @returns An MCP PromptMessage. + * @throws GenkitError if the role is unsupported or if media is not a data URL. + */ function toMcpPromptMessage(messageData: MessageData): PromptMessage { if (messageData.role !== 'model' && messageData.role !== 'user') { throw new GenkitError({ status: 'UNIMPLEMENTED', - message: `[@genkit-ai/mcp] MCP prompt messages do not support role '${messageData.role}'. Only 'user' and 'model' messages are supported.`, + message: `[MCP Server] MCP prompt messages do not support role '${messageData.role}'. Only 'user' and 'model' messages are supported.`, }); } const message = new Message(messageData); @@ -236,7 +318,7 @@ function toMcpPromptMessage(messageData: MessageData): PromptMessage { if (!url.startsWith('data:')) throw new GenkitError({ status: 'UNIMPLEMENTED', - message: `[@genkit-ai/mcp] MCP prompt messages only support base64 data images.`, + message: `[MCP Server] MCP prompt messages only support base64 data images.`, }); const mimeType = contentType || url.substring(url.indexOf(':')! + 1, url.indexOf(';')); diff --git a/js/plugins/mcp/tests/mcp_test.ts b/js/plugins/mcp/src/util/index.ts similarity index 79% rename from js/plugins/mcp/tests/mcp_test.ts rename to js/plugins/mcp/src/util/index.ts index 0849c3e82b..1f82dbca8c 100644 --- a/js/plugins/mcp/tests/mcp_test.ts +++ b/js/plugins/mcp/src/util/index.ts @@ -1,5 +1,5 @@ /** - * Copyright 2024 Google LLC + * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,4 +14,7 @@ * limitations under the License. */ -// no tests... :( +export * from './message.js'; +export * from './prompts.js'; +export * from './tools.js'; +export * from './transport.js'; diff --git a/js/plugins/mcp/src/client/message.ts b/js/plugins/mcp/src/util/message.ts similarity index 57% rename from js/plugins/mcp/src/client/message.ts rename to js/plugins/mcp/src/util/message.ts index ad97daec33..fdeb8e746e 100644 --- a/js/plugins/mcp/src/client/message.ts +++ b/js/plugins/mcp/src/util/message.ts @@ -15,13 +15,22 @@ */ import type { PromptMessage } from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' }; -import type { MessageData, Part } from 'genkit'; +import { GenkitError, type MessageData, type Part } from 'genkit'; const ROLE_MAP = { user: 'user', assistant: 'model', } as const; +/** + * Converts an MCP (Model Context Protocol) PromptMessage into Genkit's + * MessageData format. This involves mapping MCP roles (user, assistant) to + * Genkit roles (user, model) and transforming the MCP content part into a + * Genkit Part. + * + * @param message The MCP PromptMessage to convert. + * @returns The corresponding Genkit MessageData object. + */ export function fromMcpPromptMessage(message: PromptMessage): MessageData { return { role: ROLE_MAP[message.role], @@ -29,6 +38,17 @@ export function fromMcpPromptMessage(message: PromptMessage): MessageData { }; } +/** + * Converts an MCP message content part (text, image, or resource) into a Genkit + * Part. + * - Text parts are directly mapped. + * - Image parts are converted to Genkit media parts with a data URL. + * - Resource parts currently result in an empty Genkit Part (further + * implementation may be needed). + * + * @param part The MCP PromptMessage content part to convert. + * @returns The corresponding Genkit Part. + */ export function fromMcpPart(part: PromptMessage['content']): Part { switch (part.type) { case 'text': @@ -45,4 +65,8 @@ export function fromMcpPart(part: PromptMessage['content']): Part { default: return {}; } + throw new GenkitError({ + status: 'UNIMPLEMENTED', + message: `Part type ${part.type} is not currently supported.`, + }); } diff --git a/js/plugins/mcp/src/util/prompts.ts b/js/plugins/mcp/src/util/prompts.ts new file mode 100644 index 0000000000..bff90c6736 --- /dev/null +++ b/js/plugins/mcp/src/util/prompts.ts @@ -0,0 +1,223 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import type { Prompt } from '@modelcontextprotocol/sdk/types.js'; +import { + ExecutablePrompt, + GenerateOptions, + GenerateResponse, + GenerateStreamResponse, + Genkit, + GenkitError, + JSONSchema, + ToolAction, + z, + type PromptGenerateOptions, +} from 'genkit'; +import { logger } from 'genkit/logging'; +import { fromMcpPromptMessage } from './message.js'; + +function toSchema(args: Prompt['arguments']) { + if (!args) return {}; + const schema: JSONSchema = { type: 'object', properties: {}, required: [] }; + for (const arg of args) { + schema.properties[arg.name] = { + type: 'string', + description: arg.description, + }; + if (arg.required) schema.required.push(arg.name); + } + return schema; +} + +/** + * Registers a single MCP prompt as a Genkit prompt. + * It defines a new Genkit prompt action that, when called, will + * interact with the MCP client to fetch and render the corresponding MCP prompt. + * + * @param ai The Genkit instance to define the prompt on. + * @param client The MCP client instance used to interact with the MCP server. + * @param prompt The MCP Prompt object to register. + * @param params Contains the Genkit client name and the MCP server name for namespacing and logging. + */ +function registerPrompt( + ai: Genkit, + client: Client, + prompt: Prompt, + params: { name: string; serverName: string } +) { + logger.debug(`[MCP] Registering MCP prompt ${params.name}/${prompt.name}`); + ai.definePrompt({ + name: prompt.name, + description: prompt.description || '', + input: { jsonSchema: toSchema(prompt.arguments) }, + output: { format: 'text' }, + metadata: { mcp: { _meta: prompt._meta || {} } }, + messages: async (args, { context }) => { + logger.debug( + `[MCP] Calling MCP prompt ${params.name}/${prompt.name} with arguments`, + JSON.stringify(args) + ); + const result = await client.getPrompt({ + name: prompt.name, + arguments: args, + _meta: context?.mcp?._meta, + }); + return result.messages.map(fromMcpPromptMessage); + }, + }); +} + +function createExecutablePrompt< + I extends z.ZodTypeAny = z.ZodTypeAny, + O extends z.ZodTypeAny = z.ZodTypeAny, + CustomOptions extends z.ZodTypeAny = z.ZodTypeAny, +>( + client: Client, + prompt: Prompt, + params: { + ai: Genkit; + name: string; + serverName: string; + promptName: string; + options?: PromptGenerateOptions; + } +): ExecutablePrompt, O, CustomOptions> { + const callPrompt = (async ( + input?: z.infer, + opts?: PromptGenerateOptions + ): Promise>> => { + logger.debug(`[MCP] Calling MCP prompt ${params.name}/${prompt.name}`); + return params.ai.generate(callPrompt.render(input, opts)); + }) as ExecutablePrompt, O, CustomOptions>; + + callPrompt.ref = { + name: prompt.name, + metadata: { + description: prompt.description, + arguments: prompt.arguments, + mcp: { _meta: prompt._meta || {} }, + }, + }; + + callPrompt.stream = ( + input?: z.infer, + opts?: PromptGenerateOptions + ): GenerateStreamResponse> => { + logger.debug(`[MCP] Streaming MCP prompt ${params.name}/${prompt.name}`); + return params.ai.generateStream(callPrompt.render(input, opts)); + }; + + callPrompt.render = async ( + input?: I, + opts?: PromptGenerateOptions + ): Promise> => { + logger.debug(`[MCP] Rendering MCP prompt ${params.name}/${prompt.name}`); + const result = await client.getPrompt({ + name: prompt.name, + arguments: input as any, + _meta: opts?.context?.mcp?._meta, + }); + const messages = result.messages.map(fromMcpPromptMessage); + return { + ...params.options, + ...opts, + messages, + }; + }; + + callPrompt.asTool = async (): Promise => { + throw new GenkitError({ + status: 'UNIMPLEMENTED', + message: `[MCP] prompt.asTool not supported with MCP`, + }); + }; + + return callPrompt; +} + +/** + * Lookup all prompts available in the server and register each as a Genkit + * prompt. + */ +export async function registerAllPrompts( + ai: Genkit, + client: Client, + params: { name: string; serverName: string } +): Promise { + let cursor: string | undefined; + while (true) { + const { nextCursor, prompts } = await client.listPrompts({ cursor }); + prompts.forEach((p) => registerPrompt(ai, client, p, params)); + cursor = nextCursor; + if (!cursor) break; + } +} + +/** + * Lookup a specified prompt from the server and return as an ExecutablePrompt. + */ +export async function getExecutablePrompt( + client: Client, + params: { + name: string; + serverName: string; + promptName: string; + ai: Genkit; + options?: PromptGenerateOptions; + } +): Promise { + let cursor: string | undefined; + + while (true) { + const { nextCursor, prompts } = await client.listPrompts({ cursor }); + const maybePrompt = prompts.find( + (p: Prompt) => p.name === params.promptName + ); + if (maybePrompt) { + return createExecutablePrompt(client, maybePrompt, params); + } + cursor = nextCursor; + if (!cursor) break; + } + return undefined; +} + +export async function fetchAllPrompts( + client: Client, + params: { + name: string; + serverName: string; + ai: Genkit; + options?: PromptGenerateOptions; + } +): Promise { + let cursor: string | undefined; + const out: ExecutablePrompt[] = []; + + while (true) { + const { nextCursor, prompts } = await client.listPrompts({ cursor }); + for (const p of prompts) { + out.push( + createExecutablePrompt(client, p, { ...params, promptName: p.name }) + ); + } + cursor = nextCursor; + if (!cursor) break; + } + return out; +} diff --git a/js/plugins/mcp/src/util/tools.ts b/js/plugins/mcp/src/util/tools.ts new file mode 100644 index 0000000000..68def09f41 --- /dev/null +++ b/js/plugins/mcp/src/util/tools.ts @@ -0,0 +1,164 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import type { + CallToolResult, + Tool, +} from '@modelcontextprotocol/sdk/types.js' with { 'resolution-mode': 'import' }; +import { Genkit, JSONSchema7, ToolAction, z } from 'genkit'; +import { logger } from 'genkit/logging'; + +const toText = (c: CallToolResult['content']) => + c.map((p) => p.text || '').join(''); + +function processResult(result: CallToolResult) { + if (result.isError) return { error: toText(result.content) }; + if (result.content.every((c) => !!c.text)) { + const text = toText(result.content); + if (text.trim().startsWith('{') || text.trim().startsWith('[')) { + try { + return JSON.parse(text); + } catch (e) { + return text; + } + } + return text; + } + if (result.content.length === 1) return result.content[0]; + return result; +} + +/** + * Registers a single MCP tool as a Genkit tool. + * It defines a new Genkit tool action that, when called, will + * interact with the MCP client to execute the corresponding MCP tool. + * + * @param ai The Genkit instance to define the tool on. + * @param client The MCP client instance used to interact with the MCP server. + * @param tool The MCP Tool object to register. + * @param params Contains the Genkit client name, MCP server name for namespacing, + * and a flag for raw tool responses. + */ +function registerTool( + ai: Genkit, + client: Client, + tool: Tool, + params: { serverName: string; name: string; rawToolResponses?: boolean } +) { + logger.debug( + `[MCP] Registering tool '${params.name}/${tool.name}'' from server '${params.serverName}'` + ); + ai.defineTool( + { + name: `${params.serverName}/${tool.name}`, + description: tool.description || '', + inputJsonSchema: tool.inputSchema as JSONSchema7, + outputSchema: z.any(), + metadata: { mcp: { _meta: tool._meta || {} } }, + }, + async (args) => { + logger.debug( + `[MCP] Calling MCP tool '${params.serverName}/${tool.name}' with arguments`, + JSON.stringify(args) + ); + const result = await client.callTool({ + name: tool.name, + arguments: args, + }); + if (params.rawToolResponses) return result; + return processResult(result as CallToolResult); + } + ); +} + +/** + * Creates a Genkit dynamic tool action for a given MCP tool. + * This is similar to `registerTool` but returns the `ToolAction` directly + * instead of defining it on the Genkit instance. + * + * @param ai The Genkit instance, used for creating the dynamic tool. + * @param client The MCP client instance. + * @param tool The MCP Tool object. + * @param params Configuration parameters including namespacing and raw response flag. + * @returns A Genkit `ToolAction` representing the MCP tool. + */ +function createDynamicTool( + ai: Genkit, + client: Client, + tool: Tool, + params: { serverName: string; name: string; rawToolResponses?: boolean } +): ToolAction { + return ai.dynamicTool( + { + name: `${params.serverName}/${tool.name}`, + description: tool.description || '', + inputJsonSchema: tool.inputSchema as JSONSchema7, + outputSchema: z.any(), + metadata: { mcp: { _meta: tool._meta || {} } }, + }, + async (args, { context }) => { + logger.debug( + `[MCP] calling tool '${params.serverName}/${tool.name}' in host '${params.name}'` + ); + const result = await client.callTool({ + name: tool.name, + arguments: args, + _meta: context?.mcp?._meta, + }); + if (params.rawToolResponses) return result; + return processResult(result as CallToolResult); + } + ); +} + +/** + * Lookup all tools available in the server and register each as a Genkit tool. + */ +export async function registerAllTools( + ai: Genkit, + client: Client, + params: { name: string; serverName: string; rawToolResponses?: boolean } +): Promise { + let cursor: string | undefined; + while (true) { + const { nextCursor, tools } = await client.listTools({ cursor }); + tools.forEach((t) => registerTool(ai, client, t, params)); + cursor = nextCursor; + if (!cursor) break; + } +} + +/** + * Lookup all tools available in the server and fetches as a Genkit dynamic tool. + */ +export async function fetchDynamicTools( + ai: Genkit, + client: Client, + params: { name: string; serverName: string; rawToolResponses?: boolean } +): Promise { + let cursor: string | undefined; + let allTools: ToolAction[] = []; + while (true) { + const { nextCursor, tools } = await client.listTools({ cursor }); + allTools.push( + ...tools.map((t) => createDynamicTool(ai, client, t, params)) + ); + cursor = nextCursor; + if (!cursor) break; + } + return allTools; +} diff --git a/js/plugins/mcp/src/util/transport.ts b/js/plugins/mcp/src/util/transport.ts new file mode 100644 index 0000000000..8eee0f87bc --- /dev/null +++ b/js/plugins/mcp/src/util/transport.ts @@ -0,0 +1,67 @@ +/** + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { McpServerConfig } from '../client/client.js'; +import type { StdioServerParameters, Transport } from '../client/index.js'; + +/** + * Creates an MCP transport instance based on the provided server configuration. + * It supports creating SSE, Stdio, or using a pre-configured custom transport. + * + * @param config The configuration for the MCP server, determining the type of transport to create. + * @returns A Promise resolving to an object containing the created `Transport` instance + * (or `null` if configuration is invalid) and a string indicating the `type` of transport. + * @throws May throw an error if essential MCP SDK components cannot be imported. + */ +export async function transportFrom( + config: McpServerConfig, + sessionId?: string +): Promise<{ + transport: Transport | null; + type: string; +}> { + // Handle pre-configured transport first + if ('transport' in config && config.transport) { + return { transport: config.transport, type: 'custom' }; + } + // Handle SSE config + if ('url' in config && config.url) { + const { url, ...httpConfig } = config; + const { StreamableHTTPClientTransport } = await import( + '@modelcontextprotocol/sdk/client/streamableHttp.js' + ); + return { + transport: new StreamableHTTPClientTransport(new URL(url), { + ...httpConfig, + sessionId, + }), + type: 'http', + }; + } + // Handle Stdio config + if ('command' in config && config.command) { + // Create a copy and remove McpServerControls properties + const stdioConfig = { ...config }; + const { StdioClientTransport } = await import( + '@modelcontextprotocol/sdk/client/stdio.js' + ); + return { + transport: new StdioClientTransport(stdioConfig as StdioServerParameters), + type: 'stdio', + }; + } + return { transport: null, type: 'unknown' }; +} diff --git a/js/plugins/mcp/tests/fakes.ts b/js/plugins/mcp/tests/fakes.ts new file mode 100644 index 0000000000..6913cba428 --- /dev/null +++ b/js/plugins/mcp/tests/fakes.ts @@ -0,0 +1,220 @@ +/** + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js'; +import { + CallToolResult, + GetPromptResult, + JSONRPCMessage, + JSONRPCRequest, + Prompt, + ReadResourceResult, + Resource, + ResourceTemplate, + Root, + Tool, +} from '@modelcontextprotocol/sdk/types.js'; +import { Genkit } from 'genkit'; +import { ModelAction } from 'genkit/model'; + +export function defineEchoModel(ai: Genkit): ModelAction { + const model = ai.defineModel( + { + name: 'echoModel', + }, + async (request, streamingCallback) => { + (model as any).__test__lastRequest = request; + (model as any).__test__lastStreamingCallback = streamingCallback; + if (streamingCallback) { + streamingCallback({ + content: [ + { + text: '3', + }, + ], + }); + streamingCallback({ + content: [ + { + text: '2', + }, + ], + }); + streamingCallback({ + content: [ + { + text: '1', + }, + ], + }); + } + return { + message: { + role: 'model', + content: [ + { + text: + 'Echo: ' + + request.messages + .map( + (m) => + (m.role === 'user' || m.role === 'model' + ? '' + : `${m.role}: `) + m.content.map((c) => c.text).join() + ) + .join(), + }, + { + text: '; config: ' + JSON.stringify(request.config), + }, + ], + }, + finishReason: 'stop', + }; + } + ); + return model; +} + +export class FakeTransport implements Transport { + tools: Tool[] = []; + prompts: Prompt[] = []; + resources: Resource[] = []; + resourceTemplates: ResourceTemplate[] = []; + callToolResult?: CallToolResult; + getPromptResult?: GetPromptResult; + readResourceResult?: ReadResourceResult; + roots?: Root[]; + + async start(): Promise {} + + async send(message: JSONRPCMessage): Promise { + const request = message as JSONRPCRequest; + console.log(' - - - - -send', JSON.stringify(request, undefined, 2)); + if (request.method === 'initialize') { + this.onmessage?.({ + result: { + protocolVersion: '2024-11-05', + capabilities: { + prompts: {}, + tools: {}, + }, + serverInfo: { + name: 'mock-server', + version: '0.0.1', + }, + }, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'notifications/initialized') { + // do nothing... + } else if (request.method === 'tools/list') { + this.onmessage?.({ + result: { + tools: this.tools, + }, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'tools/call') { + const result = { + ...this.callToolResult, + }; + if (request.params?._meta) + result.content = [ + ...(result.content || []), + { type: 'text', text: JSON.stringify(request.params._meta) }, + ]; + this.onmessage?.({ + result, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'prompts/list') { + this.onmessage?.({ + result: { + prompts: this.prompts, + }, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'prompts/get') { + const result = { + ...this.getPromptResult, + }; + if (request.params?._meta) + result.messages = [ + ...(result.messages || []), + { + role: 'assistant', + content: { + type: 'text', + text: JSON.stringify(request.params._meta), + }, + }, + ]; + this.onmessage?.({ + result, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'resources/list') { + this.onmessage?.({ + result: { + resources: this.resources, + }, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'resources/templates/list') { + this.onmessage?.({ + result: { + resourceTemplates: this.resourceTemplates, + }, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'resources/read') { + this.onmessage?.({ + result: { + ...this.readResourceResult, + }, + jsonrpc: '2.0', + id: request.id, + }); + } else if (request.method === 'notifications/roots/list_changed') { + this.onmessage?.({ + jsonrpc: '2.0', + id: 1, + method: 'roots/list', + }); + } else if ((request as any).result?.roots) { + this.roots = (request as any).result?.roots; + console.log('updated roots', this.roots); + } else { + throw new Error(`Unknown request method: ${request.method}`); + } + } + + async close(): Promise { + this.onclose?.(); + } + + onclose?: () => void; + onerror?: (error: Error) => void; + onmessage?: (message: JSONRPCMessage) => void; +} diff --git a/js/plugins/mcp/tests/host_test.ts b/js/plugins/mcp/tests/host_test.ts new file mode 100644 index 0000000000..91f9eb12f8 --- /dev/null +++ b/js/plugins/mcp/tests/host_test.ts @@ -0,0 +1,463 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as assert from 'assert'; +import { Genkit, genkit, ToolAction } from 'genkit'; +import { logger } from 'genkit/logging'; +import { afterEach, beforeEach, describe, it } from 'node:test'; +import { createMcpHost, GenkitMcpHost } from '../src/index.js'; +import { defineEchoModel, FakeTransport } from './fakes.js'; + +logger.setLogLevel('debug'); + +describe('createMcpHost', () => { + let ai: Genkit; + + beforeEach(async () => { + ai = genkit({}); + defineEchoModel(ai); + }); + + describe('host', () => { + let fakeTransport1: FakeTransport; + let fakeTransport2: FakeTransport; + let clientHost: GenkitMcpHost; + + beforeEach(() => { + clientHost = createMcpHost({ + name: 'test-mcp-host', + }); + + fakeTransport1 = new FakeTransport(); + fakeTransport1.tools.push({ + name: 'testTool1', + inputSchema: { + type: 'object', + properties: { + foo: { + type: 'string', + }, + }, + required: ['foo'], + additionalProperties: true, + $schema: 'http://json-schema.org/draft-07/schema#', + }, + description: 'test tool 1', + }); + + fakeTransport2 = new FakeTransport(); + fakeTransport2.tools.push({ + name: 'testTool2', + inputSchema: { + type: 'object', + properties: { + foo: { + type: 'string', + }, + }, + required: ['foo'], + additionalProperties: true, + $schema: 'http://json-schema.org/draft-07/schema#', + }, + description: 'test tool 2', + }); + }); + + afterEach(async () => { + await clientHost?.close(); + }); + + it('should dynamically connect clients', async () => { + // no server connected, no tools + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + [] + ); + + // connect fakeTransport1 + await clientHost.connect('test-mcp-host1', { + transport: fakeTransport1, + }); + + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + ['test-mcp-host1/testTool1'] + ); + + // connect fakeTransport2 + await clientHost.connect('test-mcp-host2', { + transport: fakeTransport2, + }); + + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + ['test-mcp-host1/testTool1', 'test-mcp-host2/testTool2'] + ); + + // disable + await clientHost.disable('test-mcp-host1'); + + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + ['test-mcp-host2/testTool2'] + ); + + // reconnect + await clientHost.enable('test-mcp-host1'); + + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + ['test-mcp-host1/testTool1', 'test-mcp-host2/testTool2'] + ); + + // disconnect + await clientHost.disconnect('test-mcp-host1'); + + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + ['test-mcp-host2/testTool2'] + ); + }); + + it('updated roots', async () => { + // no server connected, no tools + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + [] + ); + + // connect fakeTransport1 + await clientHost.connect('test-mcp-host1', { + transport: fakeTransport1, + roots: [ + { + uri: `file:///foo`, + name: 'foo', + }, + ], + }); + + // MCP communicates roots async... + await new Promise((r) => setTimeout(r, 10)); + + assert.deepStrictEqual(fakeTransport1.roots, [ + { + name: 'foo', + uri: 'file:///foo', + }, + ]); + + await clientHost.getClient('test-mcp-host1').updateRoots([ + { + uri: `file:///bar`, + name: 'bar', + }, + ]); + // MCP communicates roots async... + await new Promise((r) => setTimeout(r, 10)); + + assert.deepStrictEqual(fakeTransport1.roots, [ + { + name: 'bar', + uri: 'file:///bar', + }, + ]); + }); + }); + + describe('tools', () => { + let fakeTransport: FakeTransport; + let clientHost: GenkitMcpHost; + + beforeEach(() => { + fakeTransport = new FakeTransport(); + clientHost = createMcpHost({ + name: 'test-mcp-host', + mcpServers: { + 'test-server': { + transport: fakeTransport, + }, + }, + }); + + fakeTransport.tools.push({ + name: 'testTool', + inputSchema: { + type: 'object', + properties: { + foo: { + type: 'string', + }, + }, + required: ['foo'], + additionalProperties: true, + $schema: 'http://json-schema.org/draft-07/schema#', + }, + description: 'test tool', + }); + }); + + afterEach(() => { + clientHost?.close(); + }); + + it('should list tools', async () => { + assert.deepStrictEqual( + (await clientHost.getActiveTools(ai)).map((t) => t.__action.name), + ['test-server/testTool'] + ); + }); + + it('should call the tool', async () => { + fakeTransport.callToolResult = { + content: [ + { + type: 'text', + text: 'yep {"foo":"bar"}', + }, + ], + }; + + const tool: ToolAction = (await clientHost.getActiveTools(ai))[0]; + const response = await tool( + { + foo: 'bar', + }, + { context: { mcp: { _meta: { soMeta: true } } } } + ); + assert.deepStrictEqual(response, 'yep {"foo":"bar"}{"soMeta":true}'); + }); + + it('should call the tool with _meta', async () => { + fakeTransport.callToolResult = { + content: [ + { + type: 'text', + text: 'yep {"foo":"bar"}', + }, + ], + }; + + const tool = (await clientHost.getActiveTools(ai))[0]; + const response = await tool({ + foo: 'bar', + }); + assert.deepStrictEqual(response, 'yep {"foo":"bar"}'); + }); + }); + + describe('prompts', () => { + let fakeTransport: FakeTransport; + let clientHost: GenkitMcpHost; + + beforeEach(() => { + fakeTransport = new FakeTransport(); + + clientHost = createMcpHost({ + name: 'test-mcp-host', + mcpServers: { + 'test-server': { + transport: fakeTransport, + }, + }, + }); + + // Note: fakeTransport.prompts.push({ name: 'testPrompt' }); is moved to specific tests + fakeTransport.getPromptResult = { + messages: [ + { + role: 'user', + content: { + type: 'text', + text: 'prompt says: hello', + }, + }, + ], + }; + }); + + afterEach(() => { + clientHost?.close(); + }); + + it('should list active prompts', async () => { + // Initially no prompts + assert.deepStrictEqual(await clientHost.getActivePrompts(ai), []); + + // Add a prompt to the first transport + fakeTransport.prompts.push({ + name: 'testPrompt1', + arguments: [ + { + name: 'foo', + description: 'foo arg', + required: false, + }, + ], + description: 'descr', + _meta: { foo: true }, + }); + let activePrompts = await clientHost.getActivePrompts(ai); + assert.strictEqual(activePrompts.length, 1); + assert.deepStrictEqual(await activePrompts[0].render(), { + messages: [ + { + role: 'user', + content: [ + { + text: 'prompt says: hello', + }, + ], + }, + ], + }); + + // Add a second transport with another prompt + const fakeTransport2 = new FakeTransport(); + fakeTransport2.prompts.push({ + name: 'testPrompt2', + }); + await clientHost.connect('test-server-2', { + transport: fakeTransport2, + }); + + activePrompts = await clientHost.getActivePrompts(ai); + assert.deepStrictEqual(activePrompts[0].ref.metadata, { + arguments: [ + { + description: 'foo arg', + name: 'foo', + required: false, + }, + ], + description: 'descr', + mcp: { _meta: { foo: true } }, + }); + assert.deepStrictEqual( + activePrompts.map((p) => p.ref.name), + ['testPrompt1', 'testPrompt2'] + ); + + // Disable the first server + await clientHost.disable('test-server'); + activePrompts = await clientHost.getActivePrompts(ai); + assert.deepStrictEqual( + activePrompts.map((p) => p.ref.name), + ['testPrompt2'] + ); + + // Enable the first server again + await clientHost.enable('test-server'); + activePrompts = await clientHost.getActivePrompts(ai); + assert.deepStrictEqual( + activePrompts.map((p) => p.ref.name), + ['testPrompt1', 'testPrompt2'] + ); + }); + + it('should execute prompt', async () => { + fakeTransport.prompts.push({ + name: 'testPrompt', + }); + const prompt = await clientHost.getPrompt( + ai, + 'test-server', + 'testPrompt', + { model: 'echoModel', config: { temperature: 11 } } + ); + assert.ok(prompt); + const { text } = await prompt({ + input: 'hello', + }); + + assert.strictEqual( + text, + 'Echo: prompt says: hello; config: {"temperature":11}' + ); + }); + + it('should render prompt', async () => { + fakeTransport.prompts.push({ + name: 'testPrompt', + }); + const prompt = await clientHost.getPrompt( + ai, + 'test-server', + 'testPrompt', + { model: 'echoModel', config: { temperature: 11 } } + ); + assert.ok(prompt); + const request = await prompt.render({ + input: 'hello', + }); + + assert.deepStrictEqual(request.messages, [ + { role: 'user', content: [{ text: 'prompt says: hello' }] }, + ]); + }); + + it('should render prompt with _meta', async () => { + fakeTransport.prompts.push({ + name: 'testPrompt', + }); + const prompt = await clientHost.getPrompt( + ai, + 'test-server', + 'testPrompt', + { model: 'echoModel', config: { temperature: 11 } } + ); + assert.ok(prompt); + const request = await prompt.render( + { + input: 'hello', + }, + { context: { mcp: { _meta: { soMeta: true } } } } + ); + + assert.deepStrictEqual(request.messages, [ + { role: 'user', content: [{ text: 'prompt says: hello' }] }, + { role: 'model', content: [{ text: '{"soMeta":true}' }] }, + ]); + }); + + it('should stream prompt', async () => { + fakeTransport.prompts.push({ + name: 'testPrompt', + }); + const prompt = await clientHost.getPrompt( + ai, + 'test-server', + 'testPrompt', + { model: 'echoModel', config: { temperature: 11 } } + ); + assert.ok(prompt); + const { stream, response } = prompt.stream({ + input: 'hello', + }); + + const chunks = [] as string[]; + for await (const chunk of stream) { + chunks.push(chunk.text); + } + + assert.deepStrictEqual(chunks, ['3', '2', '1']); + assert.strictEqual( + (await response).text, + 'Echo: prompt says: hello; config: {"temperature":11}' + ); + }); + }); +}); diff --git a/js/plugins/mcp/tests/server_test.ts b/js/plugins/mcp/tests/server_test.ts new file mode 100644 index 0000000000..b31e29acdb --- /dev/null +++ b/js/plugins/mcp/tests/server_test.ts @@ -0,0 +1,165 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Client } from '@modelcontextprotocol/sdk/client/index.js'; +import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; +import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; +import * as assert from 'assert'; +import express from 'express'; +import { Genkit, genkit, z } from 'genkit'; +import { logger } from 'genkit/logging'; +import getPort from 'get-port'; +import * as http from 'http'; +import { afterEach, beforeEach, describe, it } from 'node:test'; +import { createMcpServer } from '../src/index.js'; +import { GenkitMcpServer } from '../src/server.js'; +import { defineEchoModel } from './fakes.js'; + +logger.setLogLevel('debug'); + +describe('createMcpServer', async () => { + let ai: Genkit; + let mcpServer: GenkitMcpServer; + let mcpHttpServer: http.Server; + let port: number; + let client: Client; + + beforeEach(async () => { + ai = genkit({}); + defineEchoModel(ai); + + ai.definePrompt({ + name: 'testPrompt', + model: 'echoModel', + prompt: 'prompt says: {{input}}', + }); + + ai.defineTool( + { + name: 'testTool', + description: 'test tool', + inputSchema: z.object({ foo: z.string() }), + }, + async (input) => `yep ${JSON.stringify(input)}` + ); + + mcpServer = createMcpServer(ai, { name: 'test-server', version: '0.0.1' }); + await mcpServer.setup(); + + const app = express(); + let transport: SSEServerTransport | null = null; + + app.get('/sse', (req, res) => { + transport = new SSEServerTransport('/messages', res); + mcpServer.server!.connect(transport); + }); + + app.post('/messages', (req, res) => { + if (transport) { + transport.handlePostMessage(req, res); + } + }); + + port = await getPort(); + let serverResolver; + const serverPromise = new Promise((r) => { + serverResolver = r; + }); + mcpHttpServer = app.listen(port, () => { + console.log(`MCP server listening on http://localhost:${port}`); + serverResolver(); + }); + await serverPromise; // wait for server to start up + + client = new Client({ name: 'test', version: '0.0.1' }); + await client.connect( + new SSEClientTransport(new URL(`http://localhost:${port}/sse`)) + ); + }); + + afterEach(async () => { + mcpHttpServer.close(); + await mcpServer.server?.close(); + await client?.close(); + }); + + describe('tools', () => { + it('should list tools', async () => { + const r = await client.listTools(); + + assert.deepStrictEqual(r.tools, [ + { + description: 'test tool', + inputSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: true, + properties: { + foo: { + type: 'string', + }, + }, + required: ['foo'], + type: 'object', + }, + name: 'testTool', + }, + ]); + }); + + it('should call the tool', async () => { + const response = await client.callTool({ + name: 'testTool', + arguments: { + foo: 'bar', + }, + }); + assert.deepStrictEqual(response, { + content: [ + { + text: 'yep {"foo":"bar"}', + type: 'text', + }, + ], + }); + }); + }); + + describe('prompts', () => { + it('should list prompts', async () => { + const r = await client.listPrompts(); + assert.deepStrictEqual(r.prompts, [{ name: 'testPrompt' }]); + }); + + it('should render prompt', async () => { + const prompt = await client.getPrompt({ + name: 'testPrompt', + arguments: { + input: 'hello', + }, + }); + + assert.deepStrictEqual(prompt.messages, [ + { + content: { + text: 'prompt says: hello', + type: 'text', + }, + role: 'user', + }, + ]); + }); + }); +}); diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index 866eb48de6..a55554096b 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -46,7 +46,7 @@ importers: version: 1.9.0 '@types/node': specifier: ^20.11.19 - version: 20.19.1 + version: 20.17.17 colorette: specifier: ^2.0.20 version: 2.0.20 @@ -77,7 +77,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -86,7 +86,7 @@ importers: version: 4.9.5 yaml: specifier: ^2.7.0 - version: 2.8.0 + version: 2.7.0 core: dependencies: @@ -140,17 +140,17 @@ importers: version: 0.4.0 zod: specifier: ^3.23.8 - version: 3.25.67 + version: 3.24.1 zod-to-json-schema: specifier: ^3.22.4 - version: 3.24.5(zod@3.25.67) + version: 3.24.1(zod@3.24.1) devDependencies: '@types/express': specifier: ^4.17.21 - version: 4.17.23 + version: 4.17.21 '@types/node': specifier: ^20.11.30 - version: 20.19.1 + version: 20.17.17 genversion: specifier: ^3.2.0 version: 3.2.0 @@ -162,7 +162,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -186,7 +186,7 @@ importers: version: 5.0.0 firebase-functions: specifier: ^6.3.1 - version: 6.3.2(firebase-admin@13.4.0(encoding@0.1.13)) + version: 6.3.1(firebase-admin@12.3.1(encoding@0.1.13)) genkit: specifier: workspace:* version: link:../genkit @@ -202,7 +202,7 @@ importers: version: 6.0.1 typescript: specifier: ^5.6.3 - version: 5.8.3 + version: 5.6.3 genkit: dependencies: @@ -218,10 +218,13 @@ importers: devDependencies: '@types/body-parser': specifier: ^1.19.5 - version: 1.19.6 + version: 1.19.5 '@types/express': specifier: ^4.17.21 - version: 4.17.23 + version: 4.17.21 + '@types/node': + specifier: ^22.15.3 + version: 22.15.17 '@types/uuid': specifier: ^9.0.6 version: 9.0.8 @@ -233,7 +236,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -248,17 +251,17 @@ importers: version: link:../../ai '@googleapis/checks': specifier: ^4.0.2 - version: 4.2.0(encoding@0.1.13) + version: 4.0.2(encoding@0.1.13) genkit: specifier: workspace:^ version: link:../../genkit google-auth-library: specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -267,7 +270,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.0.2 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.7.0 version: 4.20.3 @@ -279,7 +282,7 @@ importers: dependencies: chromadb: specifier: 1.8.1 - version: 1.8.1(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)) + version: 1.8.1(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)) genkit: specifier: workspace:^ version: link:../../genkit @@ -289,7 +292,7 @@ importers: devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -298,7 +301,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -313,29 +316,29 @@ importers: version: link:../../genkit openai: specifier: ^4.95.0 - version: 4.104.0(encoding@0.1.13)(zod@3.25.67) + version: 4.97.0(encoding@0.1.13)(zod@3.24.1) devDependencies: '@jest/globals': specifier: ^29.7.0 version: 29.7.0 '@types/node': specifier: ^20.12.12 - version: 20.19.1 + version: 20.17.17 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) npm-run-all: specifier: ^4.1.5 version: 4.1.5 ts-jest: specifier: ^29.1.2 - version: 29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)))(typescript@5.6.3) tsup: specifier: ^8.0.2 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@5.6.3)(yaml@2.7.0) typescript: specifier: ^5.4.5 - version: 5.8.3 + version: 5.6.3 plugins/dev-local-vectorstore: dependencies: @@ -351,7 +354,7 @@ importers: devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -360,7 +363,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -391,7 +394,7 @@ importers: devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -400,7 +403,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -428,16 +431,16 @@ importers: devDependencies: '@types/body-parser': specifier: ^1.19.5 - version: 1.19.6 + version: 1.19.5 '@types/cors': specifier: ^2.8.17 - version: 2.8.19 + version: 2.8.17 '@types/express': specifier: ^4.17.21 - version: 4.17.23 + version: 4.17.21 '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 get-port: specifier: ^5.1.0 version: 5.1.1 @@ -449,7 +452,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -464,29 +467,29 @@ importers: version: link:../google-cloud '@google-cloud/firestore': specifier: ^7.11.0 - version: 7.11.1(encoding@0.1.13) + version: 7.11.0(encoding@0.1.13) firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) devDependencies: '@jest/globals': specifier: ^29.7.0 version: 29.7.0 '@types/jest': specifier: ^29.5.12 - version: 29.5.14 + version: 29.5.13 '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 firebase: specifier: ^11.5.0 - version: 11.9.1 + version: 11.6.0 genkit: specifier: workspace:* version: link:../../genkit jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + version: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -495,10 +498,10 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.1.2 - version: 29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)))(typescript@4.9.5) + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)))(typescript@4.9.5) tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -510,7 +513,7 @@ importers: dependencies: '@google-cloud/logging-winston': specifier: ^6.0.0 - version: 6.0.1(encoding@0.1.13)(winston@3.17.0) + version: 6.0.0(encoding@0.1.13)(winston@3.13.0) '@google-cloud/opentelemetry-cloud-monitoring-exporter': specifier: ^0.19.0 version: 0.19.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) @@ -525,7 +528,7 @@ importers: version: 1.9.0 '@opentelemetry/auto-instrumentations-node': specifier: ^0.49.1 - version: 0.49.2(@opentelemetry/api@1.9.0)(encoding@0.1.13) + version: 0.49.1(@opentelemetry/api@1.9.0)(encoding@0.1.13) '@opentelemetry/core': specifier: ~1.25.0 version: 1.25.1(@opentelemetry/api@1.9.0) @@ -555,23 +558,23 @@ importers: version: link:../../genkit google-auth-library: specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) node-fetch: specifier: ^3.3.2 version: 3.3.2 winston: specifier: ^3.12.0 - version: 3.17.0 + version: 3.13.0 devDependencies: '@jest/globals': specifier: ^29.7.0 version: 29.7.0 '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + version: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -580,10 +583,10 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.1.2 - version: 29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)))(typescript@4.9.5) + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)))(typescript@4.9.5) tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -598,11 +601,11 @@ importers: version: link:../../genkit google-auth-library: specifier: ^9.14.2 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 '@types/sinon': specifier: ^17.0.4 version: 17.0.4 @@ -617,7 +620,7 @@ importers: version: 21.0.0 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -629,20 +632,20 @@ importers: dependencies: '@google/generative-ai': specifier: ^0.24.0 - version: 0.24.1 + version: 0.24.0 genkit: specifier: workspace:^ version: link:../../genkit google-auth-library: specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) node-fetch: specifier: ^3.3.2 version: 3.3.2 devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -651,7 +654,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -663,10 +666,10 @@ importers: dependencies: '@langchain/community': specifier: ^0.0.53 - version: 0.0.53(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(jsonwebtoken@9.0.2) + version: 0.0.53(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(jsonwebtoken@9.0.2) '@langchain/core': specifier: ^0.1.61 - version: 0.1.63 + version: 0.1.61 '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 @@ -675,11 +678,11 @@ importers: version: link:../../genkit langchain: specifier: ^0.1.36 - version: 0.1.37(@google-cloud/storage@7.16.0(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(fast-xml-parser@4.5.3)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(pdf-parse@1.1.1) + version: 0.1.36(@google-cloud/storage@7.10.1(encoding@0.1.13))(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(fast-xml-parser@4.3.6)(firebase-admin@12.3.1(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(pdf-parse@1.1.1) devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -688,7 +691,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -698,12 +701,9 @@ importers: plugins/mcp: dependencies: - '@genkit-ai/core': - specifier: workspace:^ - version: link:../../core '@modelcontextprotocol/sdk': - specifier: ^1.8.0 - version: 1.12.3 + specifier: ^1.13.0 + version: 1.13.1 genkit: specifier: workspace:^ version: link:../../genkit @@ -713,10 +713,16 @@ importers: version: 29.7.0 '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 + express: + specifier: ^5.1.0 + version: 5.1.0 + get-port: + specifier: ^5.1.0 + version: 5.1.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -725,16 +731,16 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.1.2 - version: 29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)))(typescript@5.6.3) tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@5.6.3)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 typescript: specifier: ^5.3.0 - version: 5.8.3 + version: 5.6.3 plugins/next: devDependencies: @@ -743,25 +749,25 @@ importers: version: 29.7.0 '@types/jest': specifier: ^29.5.12 - version: 29.5.14 + version: 29.5.13 '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 '@types/react': specifier: ^19 - version: 19.1.8 + version: 19.0.8 '@types/react-dom': specifier: ^19 - version: 19.1.6(@types/react@19.1.8) + version: 19.0.3(@types/react@19.0.8) genkit: specifier: workspace:* version: link:../../genkit jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + version: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) next: specifier: ^15.2.4 - version: 15.3.3(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.2.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -770,10 +776,10 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.1.2 - version: 29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)))(typescript@4.9.5) + version: 29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)))(typescript@4.9.5) tsup: specifier: ^8.0.2 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.7.0 version: 4.20.3 @@ -782,7 +788,7 @@ importers: version: 4.9.5 zod: specifier: ^3.24.1 - version: 3.25.67 + version: 3.24.1 plugins/ollama: dependencies: @@ -791,11 +797,11 @@ importers: version: link:../../genkit ollama: specifier: ^0.5.9 - version: 0.5.16 + version: 0.5.9 devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -804,7 +810,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -816,7 +822,7 @@ importers: dependencies: '@pinecone-database/pinecone': specifier: ^2.0.1 - version: 2.2.2 + version: 2.2.0 genkit: specifier: workspace:^ version: link:../../genkit @@ -826,7 +832,7 @@ importers: devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -835,7 +841,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -850,22 +856,22 @@ importers: version: 0.24.3(encoding@0.1.13) '@anthropic-ai/vertex-sdk': specifier: ^0.4.0 - version: 0.4.3(encoding@0.1.13) + version: 0.4.0(encoding@0.1.13) '@google-cloud/aiplatform': specifier: ^3.23.0 - version: 3.35.0(encoding@0.1.13) + version: 3.25.0(encoding@0.1.13) '@google-cloud/vertexai': specifier: ^1.9.3 - version: 1.10.0(encoding@0.1.13) + version: 1.9.3(encoding@0.1.13) '@mistralai/mistralai-gcp': specifier: ^1.3.5 - version: 1.5.0(encoding@0.1.13)(zod@3.25.67) + version: 1.3.5(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.24.1) genkit: specifier: workspace:^ version: link:../../genkit google-auth-library: specifier: ^9.14.2 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) googleapis: specifier: ^140.0.1 version: 140.0.1(encoding@0.1.13) @@ -874,14 +880,14 @@ importers: version: 3.3.2 openai: specifier: ^4.52.7 - version: 4.104.0(encoding@0.1.13)(zod@3.25.67) + version: 4.97.0(encoding@0.1.13)(zod@3.24.1) devDependencies: '@types/node': specifier: ^20.11.16 - version: 20.19.1 + version: 20.17.17 google-gax: specifier: ^4.4.1 - version: 4.6.1(encoding@0.1.13) + version: 4.4.1(encoding@0.1.13) npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -890,7 +896,7 @@ importers: version: 6.0.1 tsup: specifier: ^8.3.5 - version: 8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0) + version: 8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0) tsx: specifier: ^4.19.2 version: 4.20.3 @@ -900,10 +906,10 @@ importers: optionalDependencies: '@google-cloud/bigquery': specifier: ^7.8.0 - version: 7.9.4(encoding@0.1.13) + version: 7.8.0(encoding@0.1.13) firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) testapps/basic-gemini: dependencies: @@ -928,7 +934,7 @@ importers: devDependencies: typescript: specifier: ^5.6.2 - version: 5.8.3 + version: 5.6.3 testapps/compat-oai: dependencies: @@ -937,7 +943,7 @@ importers: version: link:../../plugins/compat-oai '@genkit-ai/express': specifier: ^1.1.0 - version: 1.12.0(@genkit-ai/core@1.12.0)(express@5.1.0)(genkit@genkit) + version: 1.8.0(@genkit-ai/core@1.13.0)(express@5.1.0)(genkit@genkit) genkit: specifier: workspace:* version: link:../../genkit @@ -950,10 +956,10 @@ importers: version: 7.0.3 dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.4.5 typescript: specifier: ^5.6.2 - version: 5.8.3 + version: 5.6.3 testapps/context-caching: dependencies: @@ -975,7 +981,7 @@ importers: version: 7.0.3 typescript: specifier: ^5.6.2 - version: 5.8.3 + version: 5.6.3 testapps/context-caching2: dependencies: @@ -994,7 +1000,7 @@ importers: version: 7.0.3 typescript: specifier: ^5.6.2 - version: 5.8.3 + version: 5.6.3 testapps/custom-evaluators: dependencies: @@ -1019,7 +1025,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/dev-ui-gallery: dependencies: @@ -1043,10 +1049,10 @@ importers: version: link:../../plugins/vertexai firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) firebase-functions: specifier: ^6.3.1 - version: 6.3.2(firebase-admin@13.4.0(encoding@0.1.13)) + version: 6.3.1(firebase-admin@12.3.1(encoding@0.1.13)) genkit: specifier: workspace:* version: link:../../genkit @@ -1071,7 +1077,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/docs-menu-basic: dependencies: @@ -1096,7 +1102,7 @@ importers: version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/docs-menu-rag: dependencies: @@ -1121,13 +1127,13 @@ importers: devDependencies: '@types/pdf-parse': specifier: ^1.1.4 - version: 1.1.5 + version: 1.1.4 rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/esm: dependencies: @@ -1152,6 +1158,9 @@ importers: '@genkit-ai/googleai': specifier: workspace:* version: link:../../plugins/googleai + '@genkit-ai/mcp': + specifier: workspace:* + version: link:../../plugins/mcp '@genkit-ai/next': specifier: workspace:^ version: link:../../plugins/next @@ -1160,7 +1169,7 @@ importers: version: link:../../plugins/vertexai firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) genkit: specifier: workspace:* version: link:../../genkit @@ -1175,11 +1184,11 @@ importers: version: link:../../plugins/pinecone google-auth-library: specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: '@types/pdf-parse': specifier: ^1.1.4 - version: 1.1.5 + version: 1.1.4 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -1191,7 +1200,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/evals: dependencies: @@ -1221,7 +1230,7 @@ importers: version: 1.1.1 pdfjs-dist: specifier: ^4.0.379 - version: 4.10.38 + version: 4.8.69 pdfjs-dist-legacy: specifier: ^1.0.1 version: 1.0.1 @@ -1237,7 +1246,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/express: dependencies: @@ -1265,13 +1274,13 @@ importers: devDependencies: '@types/express': specifier: ^4.17.21 - version: 4.17.23 + version: 4.17.21 rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/flow-sample1: dependencies: @@ -1287,7 +1296,7 @@ importers: version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/flow-simple-ai: dependencies: @@ -1323,7 +1332,7 @@ importers: version: 4.21.2 firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) genkit: specifier: workspace:* version: link:../../genkit @@ -1342,7 +1351,7 @@ importers: version: 3.0.4 '@types/node-fetch': specifier: ~2.6.11 - version: 2.6.12 + version: 2.6.11 '@types/wav': specifier: ^1.0.4 version: 1.0.4 @@ -1354,7 +1363,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/format-tester: dependencies: @@ -1379,7 +1388,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/google-ai-code-execution: dependencies: @@ -1391,7 +1400,7 @@ importers: version: link:../../plugins/googleai dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.4.5 express: specifier: ^4.21.0 version: 4.21.2 @@ -1401,7 +1410,7 @@ importers: devDependencies: typescript: specifier: ^5.5.3 - version: 5.8.3 + version: 5.6.3 testapps/langchain: dependencies: @@ -1416,10 +1425,10 @@ importers: version: link:../../plugins/vertexai '@langchain/community': specifier: ^0.0.53 - version: 0.0.53(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(jsonwebtoken@9.0.2) + version: 0.0.53(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(jsonwebtoken@9.0.2) '@langchain/core': specifier: ^0.1.61 - version: 0.1.63 + version: 0.1.61 '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 @@ -1437,20 +1446,84 @@ importers: version: link:../../plugins/ollama langchain: specifier: ^0.1.36 - version: 0.1.37(@google-cloud/storage@7.16.0(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(fast-xml-parser@4.5.3)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(pdf-parse@1.1.1) + version: 0.1.36(@google-cloud/storage@7.10.1(encoding@0.1.13))(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(fast-xml-parser@4.3.6)(firebase-admin@12.3.1(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(pdf-parse@1.1.1) + pdf-parse: + specifier: ^1.1.1 + version: 1.1.1 + devDependencies: + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + typescript: + specifier: ^5.3.3 + version: 5.6.3 + + testapps/mcp: + dependencies: + '@genkit-ai/dev-local-vectorstore': + specifier: workspace:* + version: link:../../plugins/dev-local-vectorstore + '@genkit-ai/evaluator': + specifier: workspace:* + version: link:../../plugins/evaluators + '@genkit-ai/googleai': + specifier: workspace:* + version: link:../../plugins/googleai + '@genkit-ai/mcp': + specifier: workspace:* + version: link:../../plugins/mcp + '@genkit-ai/vertexai': + specifier: workspace:* + version: link:../../plugins/vertexai + '@modelcontextprotocol/sdk': + specifier: ^1.13.0 + version: 1.13.0 + express: + specifier: ^5.1.0 + version: 5.1.0 + genkit: + specifier: workspace:* + version: link:../../genkit + genkitx-langchain: + specifier: workspace:* + version: link:../../plugins/langchain + llm-chunk: + specifier: ^0.0.1 + version: 0.0.1 pdf-parse: specifier: ^1.1.1 version: 1.1.1 + pdfjs-dist: + specifier: ^4.0.379 + version: 4.8.69 + pdfjs-dist-legacy: + specifier: ^1.0.1 + version: 1.0.1 devDependencies: + '@modelcontextprotocol/server-everything': + specifier: ^2025.5.12 + version: 2025.5.12 + '@modelcontextprotocol/server-filesystem': + specifier: ^2025.3.28 + version: 2025.3.28(zod@3.24.1) '@types/express': specifier: ^4.17.21 - version: 4.17.23 + version: 4.17.21 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 rimraf: specifier: ^6.0.1 version: 6.0.1 + tsx: + specifier: ^4.19.2 + version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/menu: dependencies: @@ -1475,7 +1548,7 @@ importers: version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/model-tester: dependencies: @@ -1499,14 +1572,14 @@ importers: version: link:../../plugins/ollama genkitx-openai: specifier: ^0.10.1 - version: 0.10.1(@genkit-ai/ai@1.12.0)(@genkit-ai/core@1.12.0) + version: 0.10.1(@genkit-ai/ai@1.13.0)(@genkit-ai/core@1.13.0) devDependencies: rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/multimodal: dependencies: @@ -1533,7 +1606,7 @@ importers: version: link:../../plugins/vertexai file-type-checker: specifier: ^1.1.2 - version: 1.1.4 + version: 1.1.3 genkit: specifier: workspace:* version: link:../../genkit @@ -1548,7 +1621,7 @@ importers: version: link:../../plugins/pinecone google-auth-library: specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) llm-chunk: specifier: ^0.0.1 version: 0.0.1 @@ -1561,7 +1634,7 @@ importers: devDependencies: '@types/pdf-parse': specifier: ^1.1.4 - version: 1.1.5 + version: 1.1.4 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -1573,7 +1646,7 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 vertexai: specifier: link:@types/@genkit-ai/vertexai version: link:@types/@genkit-ai/vertexai @@ -1591,10 +1664,10 @@ importers: version: link:../../genkit next: specifier: ^15.2.4 - version: 15.3.3(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 15.2.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) zod: specifier: ^3.24.1 - version: 3.25.67 + version: 3.24.1 devDependencies: '@types/react': specifier: 19.0.8 @@ -1604,7 +1677,7 @@ importers: version: 6.0.1 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/ollama: dependencies: @@ -1620,7 +1693,7 @@ importers: version: 7.0.3 typescript: specifier: ^5.6.2 - version: 5.8.3 + version: 5.6.3 testapps/prompt-file: dependencies: @@ -1633,7 +1706,7 @@ importers: devDependencies: typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/rag: dependencies: @@ -1654,10 +1727,10 @@ importers: version: link:../../plugins/vertexai '@google-cloud/firestore': specifier: ^7.11.0 - version: 7.11.1(encoding@0.1.13) + version: 7.11.0(encoding@0.1.13) firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) genkit: specifier: workspace:* version: link:../../genkit @@ -1669,7 +1742,7 @@ importers: version: link:../../plugins/pinecone google-auth-library: specifier: ^9.6.3 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) llm-chunk: specifier: ^0.0.1 version: 0.0.1 @@ -1679,7 +1752,7 @@ importers: devDependencies: '@types/pdf-parse': specifier: ^1.1.4 - version: 1.1.5 + version: 1.1.4 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -1691,13 +1764,13 @@ importers: version: 4.20.3 typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/tools-config-test1: devDependencies: typescript: specifier: ^5.3.3 - version: 5.8.3 + version: 5.6.3 testapps/vertexai-modelgarden: dependencies: @@ -1709,7 +1782,7 @@ importers: version: link:../../plugins/vertexai '@mistralai/mistralai-gcp': specifier: ^1.3.4 - version: 1.5.0(zod@3.22.4) + version: 1.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.22.4) express: specifier: ^4.21.0 version: 4.21.2 @@ -1722,7 +1795,7 @@ importers: devDependencies: typescript: specifier: ^5.5.3 - version: 5.8.3 + version: 5.6.3 testapps/vertexai-reranker: dependencies: @@ -1740,7 +1813,7 @@ importers: version: link:../../plugins/vertexai dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.4.5 express: specifier: ^4.21.0 version: 4.21.2 @@ -1749,14 +1822,14 @@ importers: version: link:../../genkit google-auth-library: specifier: ^9.11.0 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.5.2 - version: 5.8.3 + version: 5.6.3 testapps/vertexai-vector-search-bigquery: dependencies: @@ -1777,10 +1850,10 @@ importers: version: link:../../plugins/vertexai '@google-cloud/bigquery': specifier: ^7.8.0 - version: 7.9.4(encoding@0.1.13) + version: 7.8.0(encoding@0.1.13) dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.4.5 express: specifier: ^4.21.0 version: 4.21.2 @@ -1798,14 +1871,14 @@ importers: version: link:../../plugins/pinecone google-auth-library: specifier: ^9.11.0 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.5.2 - version: 5.8.3 + version: 5.6.3 testapps/vertexai-vector-search-custom: dependencies: @@ -1826,10 +1899,10 @@ importers: version: link:../../plugins/vertexai '@google-cloud/bigquery': specifier: ^7.8.0 - version: 7.9.4(encoding@0.1.13) + version: 7.8.0(encoding@0.1.13) dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.4.5 express: specifier: ^4.21.0 version: 4.21.2 @@ -1847,14 +1920,14 @@ importers: version: link:../../plugins/pinecone google-auth-library: specifier: ^9.11.0 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.5.2 - version: 5.8.3 + version: 5.6.3 testapps/vertexai-vector-search-firestore: dependencies: @@ -1875,13 +1948,13 @@ importers: version: link:../../plugins/vertexai dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.4.5 express: specifier: ^4.21.0 version: 4.21.2 firebase-admin: specifier: '>=12.2' - version: 13.4.0(encoding@0.1.13) + version: 12.3.1(encoding@0.1.13) genkit: specifier: workspace:* version: link:../../genkit @@ -1896,14 +1969,14 @@ importers: version: link:../../plugins/pinecone google-auth-library: specifier: ^9.11.0 - version: 9.15.1(encoding@0.1.13) + version: 9.14.2(encoding@0.1.13) devDependencies: rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: specifier: ^5.5.2 - version: 5.8.3 + version: 5.6.3 packages: @@ -1917,8 +1990,8 @@ packages: '@anthropic-ai/sdk@0.9.1': resolution: {integrity: sha512-wa1meQ2WSfoY8Uor3EdrJq0jTiZJoKoSii2ZVWRY1oN4Tlr5s59pADg9T79FTbPe1/se5c3pBeZgJL63wmuoBA==} - '@anthropic-ai/vertex-sdk@0.4.3': - resolution: {integrity: sha512-2Uef0C5P2Hx+T88RnUSRA3u4aZqmqnrRSOb2N64ozgKPiSUPTM5JlggAq2b32yWMj5d3MLYa6spJXKMmHXOcoA==} + '@anthropic-ai/vertex-sdk@0.4.0': + resolution: {integrity: sha512-E/FL/P1+wDNrhuVg7DYmbiLdW6+xU9d2Vn/dmpJbKF7Vt81SnGxUFYn9zjDk2QOptvQFSOcUb5OCtpEvej+daQ==} '@babel/code-frame@7.25.7': resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} @@ -2100,155 +2173,299 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@esbuild/aix-ppc64@0.25.5': - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==} + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.5': - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==} + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.5': - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==} + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.5': - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==} + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.5': - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==} + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.5': - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==} + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.5': - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==} + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.5': - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==} + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.5': - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==} + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.5': - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==} + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.5': - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==} + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.5': - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==} + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.5': - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==} + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.5': - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==} + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.5': - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==} + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.5': - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==} + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.5': - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==} + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.5': - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==} + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.5': - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==} + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.5': - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==} + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.5': - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==} + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.5': - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==} + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.5': - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==} + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.5': - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==} + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.5': - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==} + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2256,37 +2473,27 @@ packages: '@fastify/busboy@3.0.0': resolution: {integrity: sha512-83rnH2nCvclWaPQQKvkJ2pdOjG4TZyEVuFDnlOF6KP08lDaaceVyw/W63mDuafQT+MKHCvXIPpE5uYWeM0rT4w==} - '@fastify/busboy@3.1.1': - resolution: {integrity: sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==} - - '@firebase/ai@1.4.0': - resolution: {integrity: sha512-wvF33gtU6TXb6Co8TEC1pcl4dnVstYmRE/vs9XjUGE7he7Sgf5TqSu+EoXk/fuzhw5tKr1LC5eG9KdYFM+eosw==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@firebase/app': 0.x - '@firebase/app-types': 0.x - - '@firebase/analytics-compat@0.2.22': - resolution: {integrity: sha512-VogWHgwkdYhjWKh8O1XU04uPrRaiDihkWvE/EMMmtWtaUtVALnpLnUurc3QtSKdPnvTz5uaIGKlW84DGtSPFbw==} + '@firebase/analytics-compat@0.2.18': + resolution: {integrity: sha512-Hw9mzsSMZaQu6wrTbi3kYYwGw9nBqOHr47pVLxfr5v8CalsdrG5gfs9XUlPOZjHRVISp3oQrh1j7d3E+ulHPjQ==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/analytics-types@0.8.3': resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} - '@firebase/analytics@0.10.16': - resolution: {integrity: sha512-cMtp19He7Fd6uaj/nDEul+8JwvJsN8aRSJyuA1QN3QrKvfDDp+efjVurJO61sJpkVftw9O9nNMdhFbRcTmTfRQ==} + '@firebase/analytics@0.10.12': + resolution: {integrity: sha512-iDCGnw6qdFqwI5ywkgece99WADJNoymu+nLIQI4fZM/vCZ3bEo4wlpEetW71s1HqGpI0hQStiPhqVjFxDb2yyw==} peerDependencies: '@firebase/app': 0.x - '@firebase/app-check-compat@0.3.25': - resolution: {integrity: sha512-3zrsPZWAKfV7DVC20T2dgfjzjtQnSJS65OfMOiddMUtJL1S5i0nAZKsdX0bOEvvrd0SBIL8jYnfpfDeQRnhV3w==} + '@firebase/app-check-compat@0.3.20': + resolution: {integrity: sha512-/twgmlnNAaZ/wbz3kcQrL/26b+X+zUX+lBmu5LwwEcWcpnb+mrVEAKhD7/ttm52dxYiSWtLDeuXy3FXBhqBC5A==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/app-check-interop-types@0.3.2': - resolution: {integrity: sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==} + '@firebase/app-check-interop-types@0.3.1': + resolution: {integrity: sha512-NILZbe6RH3X1pZmJnfOfY2gLIrlKmrkUMMrrK6VSXHcSE0eQv28xFEcw16D198i9JYZpy5Kwq394My62qCMaIw==} '@firebase/app-check-interop-types@0.3.3': resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==} @@ -2294,34 +2501,34 @@ packages: '@firebase/app-check-types@0.5.3': resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} - '@firebase/app-check@0.10.0': - resolution: {integrity: sha512-AZlRlVWKcu8BH4Yf8B5EI8sOi2UNGTS8oMuthV45tbt6OVUTSQwFPIEboZzhNJNKY+fPsg7hH8vixUWFZ3lrhw==} + '@firebase/app-check@0.8.13': + resolution: {integrity: sha512-ONsgml8/dplUOAP42JQO6hhiWDEwR9+RUTLenxAN9S8N6gel/sDQ9Ci721Py1oASMGdDU8v9R7xAZxzvOX5lPg==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/app-compat@0.4.1': - resolution: {integrity: sha512-9VGjnY23Gc1XryoF/ABWtZVJYnaPOnjHM7dsqq9YALgKRtxI1FryvELUVkDaEIUf4In2bfkb9ZENF1S9M273Dw==} + '@firebase/app-compat@0.2.53': + resolution: {integrity: sha512-vDeZSit0q4NyaDIVcaiJF3zhLgguP6yc0JwQAfpTyllgt8XMtkMFyY/MxJtFrK2ocpQX/yCbV2DXwvpY2NVuJw==} engines: {node: '>=18.0.0'} - '@firebase/app-types@0.9.2': - resolution: {integrity: sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==} + '@firebase/app-types@0.9.1': + resolution: {integrity: sha512-nFGqTYsnDFn1oXf1tCwPAc+hQPxyvBT/QB7qDjwK+IDYThOn63nGhzdUTXxVD9Ca8gUY/e5PQMngeo0ZW/E3uQ==} '@firebase/app-types@0.9.3': resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} - '@firebase/app@0.13.1': - resolution: {integrity: sha512-0O33PKrXLoIWkoOO5ByFaLjZehBctSYWnb+xJkIdx2SKP/K9l1UPFXPwASyrOIqyY3ws+7orF/1j7wI5EKzPYQ==} + '@firebase/app@0.11.4': + resolution: {integrity: sha512-GPREsZjfSaHzwyC6cI/Cqvzf6zxqMzya+25tSpUstdqC2w0IdfxEfOMjfdW7bDfVEf4Rb4Nb6gfoOAgVSp4c4g==} engines: {node: '>=18.0.0'} - '@firebase/auth-compat@0.5.27': - resolution: {integrity: sha512-axZx/MgjNO7uPA8/nMQiuVotGCngUFMppt5w0pxFIoIPD0kac0bsFdSEh5S2ttuEE0Aq1iUB6Flzwn+wvMgXnQ==} + '@firebase/auth-compat@0.5.20': + resolution: {integrity: sha512-8FwODTSBnaqGQbKfML7LcpzGGPyouB7YHg3dZq+CZMziVc7oBY1jJeNvpnM1hAQoVuTjWPXoRrCltdGeOlkKfQ==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/auth-interop-types@0.2.3': - resolution: {integrity: sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==} + '@firebase/auth-interop-types@0.2.2': + resolution: {integrity: sha512-k3NA28Jfoo0+o391bFjoV9X5QLnUL1WbLhZZRbTQhZdmdGYJfX8ixtNNlHsYQ94bwG0QRbsmvkzDnzuhHrV11w==} '@firebase/auth-interop-types@0.2.4': resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} @@ -2332,8 +2539,8 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/auth@1.10.7': - resolution: {integrity: sha512-77o0aBKCfchdL1gkahARdawHyYefh+wRYn7o60tbwW6bfJNq2idbrRb3WSYCT4yBKWL0+9kKdwxBHPZ6DEiB+g==} + '@firebase/auth@1.10.0': + resolution: {integrity: sha512-S7SqBsN7sIQsftNE3bitLlK+4bWrTHY+Rx2JFlNitgVYu2nK8W8ZQrkG8GCEwiFPq0B2vZ9pO5kVTFfq2sP96A==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app': 0.x @@ -2342,42 +2549,40 @@ packages: '@react-native-async-storage/async-storage': optional: true - '@firebase/component@0.6.10': - resolution: {integrity: sha512-OsNbEKyz9iLZSmMUhsl6+kCADzte00iisJIRUspnUqvDCX+RSGZOBIqekukv/jN177ovjApBQNFaxSYIDc/SyQ==} + '@firebase/component@0.6.13': + resolution: {integrity: sha512-I/Eg1NpAtZ8AAfq8mpdfXnuUpcLxIDdCDtTzWSh+FXnp/9eCKJ3SNbOCKrUCyhLzNa2SiPJYruei0sxVjaOTeg==} engines: {node: '>=18.0.0'} - '@firebase/component@0.6.17': - resolution: {integrity: sha512-M6DOg7OySrKEFS8kxA3MU5/xc37fiOpKPMz6cTsMUcsuKB6CiZxxNAvgFta8HGRgEpZbi8WjGIj6Uf+TpOhyzg==} - engines: {node: '>=18.0.0'} + '@firebase/component@0.6.6': + resolution: {integrity: sha512-pp7sWqHmAAlA3os6ERgoM3k5Cxff510M9RLXZ9Mc8KFKMBc2ct3RkZTWUF7ixJNvMiK/iNgRLPDrLR2gtRJ9iQ==} - '@firebase/data-connect@0.3.9': - resolution: {integrity: sha512-B5tGEh5uQrQeH0i7RvlU8kbZrKOJUmoyxVIX4zLA8qQJIN6A7D+kfBlGXtSwbPdrvyaejcRPcbOtqsDQ9HPJKw==} + '@firebase/data-connect@0.3.3': + resolution: {integrity: sha512-JsgppNX1wcQYP5bg4Sg6WTS7S0XazklSjr1fG3ox9DHtt4LOQwJ3X1/c81mKMIZxocV22ujiwLYQWG6Y9D1FiQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/database-compat@1.0.10': - resolution: {integrity: sha512-x3baGMzEKG5BE5orwFRg+Zpaa33N9lZkcOFXoZSeN9Muw/Mx37stePZpa1YMpcAPqX3aDx1cSv55Nxh4ObgpUQ==} + '@firebase/database-compat@1.0.4': + resolution: {integrity: sha512-GEEDAvsSMAkqy0BIFSVtFzoOIIcKHFfDM4aXHtWL/JCaNn4OOjH7td73jDfN3ALvpIN4hQki0FcxQ89XjqaTjQ==} - '@firebase/database-compat@2.0.10': - resolution: {integrity: sha512-3sjl6oGaDDYJw/Ny0E5bO6v+KM3KoD4Qo/sAfHGdRFmcJ4QnfxOX9RbG9+ce/evI3m64mkPr24LlmTDduqMpog==} + '@firebase/database-compat@2.0.5': + resolution: {integrity: sha512-CNf1UbvWh6qIaSf4sn6sx2DTDz/em/D7QxULH1LTxxDQHr9+CeYGvlAqrKnk4ZH0P0eIHyQFQU7RwkUJI0B9gQ==} engines: {node: '>=18.0.0'} - '@firebase/database-types@1.0.14': - resolution: {integrity: sha512-8a0Q1GrxM0akgF0RiQHliinhmZd+UQPrxEmUv7MnQBYfVFiLtKOgs3g6ghRt/WEGJHyQNslZ+0PocIwNfoDwKw==} + '@firebase/database-types@1.0.10': + resolution: {integrity: sha512-mH6RC1E9/Pv8jf1/p+M8YFTX+iu+iHDN89hecvyO7wHrI4R1V0TXjxOHvX3nLJN1sfh0CWG6CHZ0VlrSmK/cwg==} - '@firebase/database-types@1.0.6': - resolution: {integrity: sha512-sMI7IynSZBsyGbUugc8PKE1jwKbnvaieAz/RxuM57PZQNCi6Rteiviwcw/jqZOX6igqYJwXWZ3UzKOZo2nUDRA==} + '@firebase/database-types@1.0.2': + resolution: {integrity: sha512-JRigr5JNLEHqOkI99tAGHDZF47469/cJz1tRAgGs8Feh+3ZmQy/vVChSqwMp2DuVUGp9PlmGsNSlpINJ/hDuIA==} - '@firebase/database@1.0.19': - resolution: {integrity: sha512-khE+MIYK+XlIndVn/7mAQ9F1fwG5JHrGKaG72hblCC6JAlUBDd3SirICH6SMCf2PQ0iYkruTECth+cRhauacyQ==} + '@firebase/database@1.0.14': + resolution: {integrity: sha512-9nxYtkHAG02/Nh2Ssms1T4BbWPPjiwohCvkHDUl4hNxnki1kPgsLo5xe9kXNzbacOStmVys+RUXvwzynQSKmUQ==} engines: {node: '>=18.0.0'} - '@firebase/database@1.0.9': - resolution: {integrity: sha512-EkiPSKSu2TJJGtOjyISASf3UFpFJDil1lMbfqnxilfbmIsilvC8DzgjuLoYD+eOitcug4wtU9Fh1tt2vgBhskA==} - engines: {node: '>=18.0.0'} + '@firebase/database@1.0.4': + resolution: {integrity: sha512-k84cXh+dtpzvY6yOhfyr1B+I1vjvSMtmlqotE0lTNVylc8m5nmOohjzpTLEQDrBWvwACX/VP5fEyajAdmnOKqA==} - '@firebase/firestore-compat@0.3.52': - resolution: {integrity: sha512-nzt3Sag+EBdm1Jkw/FnnKBPk0LpUUxOlMHMADPBXYhhXrLszxn1+vb64nJsbgRIHfsCn+rg8gyGrb+8frzXrjg==} + '@firebase/firestore-compat@0.3.45': + resolution: {integrity: sha512-uRvi7AYPmsDl7UZwPyV7jgDGYusEZ2+U2g7MndbQHKIA8fNHpYC6QrzMs58+/IjX+kF/lkUn67Vrr0AkVjlY+Q==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -2388,14 +2593,14 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/firestore@4.7.17': - resolution: {integrity: sha512-YhXWA7HlSnekExhZ5u4i0e+kpPxsh/qMrzeNDgsAva71JXK8OOuOx+yLyYBFhmu3Hr5JJDO2fsZA/wrWoQYHDg==} + '@firebase/firestore@4.7.10': + resolution: {integrity: sha512-6nKsyo2U+jYSCcSE5sjMdDNA23DMUvYPUvsYGg09CNvcTO8GGKsPs7SpOhspsB91mbacq+u627CDAx3FUhPSSQ==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/functions-compat@0.3.25': - resolution: {integrity: sha512-V0JKUw5W/7aznXf9BQ8LIYHCX6zVCM8Hdw7XUQ/LU1Y9TVP8WKRCnPB/qdPJ0xGjWWn7fhtwIYbgEw/syH4yTQ==} + '@firebase/functions-compat@0.3.20': + resolution: {integrity: sha512-iIudmYDAML6n3c7uXO2YTlzra2/J6lnMzmJTXNthvrKVMgNMaseNoQP1wKfchK84hMuSF8EkM4AvufwbJ+Juew==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -2403,14 +2608,14 @@ packages: '@firebase/functions-types@0.6.3': resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} - '@firebase/functions@0.12.8': - resolution: {integrity: sha512-p+ft6dQW0CJ3BLLxeDb5Hwk9ARw01kHTZjLqiUdPRzycR6w7Z75ThkegNmL6gCss3S0JEpldgvehgZ3kHybVhA==} + '@firebase/functions@0.12.3': + resolution: {integrity: sha512-Wv7JZMUkKLb1goOWRtsu3t7m97uK6XQvjQLPvn8rncY91+VgdU72crqnaYCDI/ophNuBEmuK8mn0/pAnjUeA6A==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/installations-compat@0.2.17': - resolution: {integrity: sha512-J7afeCXB7yq25FrrJAgbx8mn1nG1lZEubOLvYgG7ZHvyoOCK00sis5rj7TgDrLYJgdj/SJiGaO1BD3BAp55TeA==} + '@firebase/installations-compat@0.2.13': + resolution: {integrity: sha512-f/o6MqCI7LD/ulY9gvgkv6w5k6diaReD8BFHd/y/fEdpsXmFWYS/g28GXCB72bRVBOgPpkOUNl+VsMvDwlRKmw==} peerDependencies: '@firebase/app-compat': 0.x @@ -2419,60 +2624,59 @@ packages: peerDependencies: '@firebase/app-types': 0.x - '@firebase/installations@0.6.17': - resolution: {integrity: sha512-zfhqCNJZRe12KyADtRrtOj+SeSbD1H/K8J24oQAJVv/u02eQajEGlhZtcx9Qk7vhGWF5z9dvIygVDYqLL4o1XQ==} + '@firebase/installations@0.6.13': + resolution: {integrity: sha512-6ZpkUiaygPFwgVneYxuuOuHnSPnTA4KefLEaw/sKk/rNYgC7X6twaGfYb0sYLpbi9xV4i5jXsqZ3WO+yaguNgg==} peerDependencies: '@firebase/app': 0.x - '@firebase/logger@0.4.3': - resolution: {integrity: sha512-Th42bWJg18EF5bJwhRosn2M/eYxmbWCwXZr4hHX7ltO0SE3QLrpgiMKeRBR/NW7vJke7i0n3i8esbCW2s93qBw==} - engines: {node: '>=18.0.0'} + '@firebase/logger@0.4.1': + resolution: {integrity: sha512-tTIixB5UJbG9ZHSGZSZdX7THr3KWOLrejZ9B7jYsm6fpwgRNngKznQKA2wgYVyvBc1ta7dGFh9NtJ8n7qfiYIw==} '@firebase/logger@0.4.4': resolution: {integrity: sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==} engines: {node: '>=18.0.0'} - '@firebase/messaging-compat@0.2.21': - resolution: {integrity: sha512-1yMne+4BGLbHbtyu/VyXWcLiefUE1+K3ZGfVTyKM4BH4ZwDFRGoWUGhhx+tKRX4Tu9z7+8JN67SjnwacyNWK5g==} + '@firebase/messaging-compat@0.2.17': + resolution: {integrity: sha512-5Q+9IG7FuedusdWHVQRjpA3OVD9KUWp/IPegcv0s5qSqRLBjib7FlAeWxN+VL0Ew43tuPJBY2HKhEecuizmO1Q==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/messaging-interop-types@0.2.3': resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} - '@firebase/messaging@0.12.21': - resolution: {integrity: sha512-bYJ2Evj167Z+lJ1ach6UglXz5dUKY1zrJZd15GagBUJSR7d9KfiM1W8dsyL0lDxcmhmA/sLaBYAAhF1uilwN0g==} + '@firebase/messaging@0.12.17': + resolution: {integrity: sha512-W3CnGhTm6Nx8XGb6E5/+jZTuxX/EK8Vur4QXvO1DwZta/t0xqWMRgO9vNsZFMYBqFV4o3j4F9qK/iddGYwWS6g==} peerDependencies: '@firebase/app': 0.x - '@firebase/performance-compat@0.2.19': - resolution: {integrity: sha512-4cU0T0BJ+LZK/E/UwFcvpBCVdkStgBMQwBztM9fJPT6udrEUk3ugF5/HT+E2Z22FCXtIaXDukJbYkE/c3c6IHw==} + '@firebase/performance-compat@0.2.15': + resolution: {integrity: sha512-wUxsw7hGBEMN6XfvYQqwPIQp5LcJXawWM5tmYp6L7ClCoTQuEiCKHWWVurJgN8Q1YHzoHVgjNfPQAOVu29iMVg==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/performance-types@0.2.3': resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} - '@firebase/performance@0.7.6': - resolution: {integrity: sha512-AsOz74dSTlyQGlnnbLWXiHFAsrxhpssPOsFFi4HgOJ5DjzkK7ZdZ/E9uMPrwFoXJyMVoybGRuqsL/wkIbFITsA==} + '@firebase/performance@0.7.2': + resolution: {integrity: sha512-DXLLp0R0jdxH/yTmv+WTkOzsLl8YYecXh4lGZE0dzqC0IV8k+AxpLSSWvOTCkAETze8yEU/iF+PtgYVlGjfMMQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/remote-config-compat@0.2.17': - resolution: {integrity: sha512-KelsBD0sXSC0u3esr/r6sJYGRN6pzn3bYuI/6pTvvmZbjBlxQkRabHAVH6d+YhLcjUXKIAYIjZszczd1QJtOyA==} + '@firebase/remote-config-compat@0.2.13': + resolution: {integrity: sha512-UmHoO7TxAEJPIZf8e1Hy6CeFGMeyjqSCpgoBkQZYXFI2JHhzxIyDpr8jVKJJN1dmAePKZ5EX7dC13CmcdTOl7Q==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/remote-config-types@0.4.0': resolution: {integrity: sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg==} - '@firebase/remote-config@0.6.4': - resolution: {integrity: sha512-ZyLJRT46wtycyz2+opEkGaoFUOqRQjt/0NX1WfUISOMCI/PuVoyDjqGpq24uK+e8D5NknyTpiXCVq5dowhScmg==} + '@firebase/remote-config@0.6.0': + resolution: {integrity: sha512-Yrk4l5+6FJLPHC6irNHMzgTtJ3NfHXlAXVChCBdNFtgmzyGmufNs/sr8oA0auEfIJ5VpXCaThRh3P4OdQxiAlQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/storage-compat@0.3.23': - resolution: {integrity: sha512-B/ufkT/R/tSvc2av+vP6ZYybGn26FwB9YVDYg/6Bro+5TN3VEkCeNmfnX3XLa2DSdXUTZAdWCbMxW0povGa4MA==} + '@firebase/storage-compat@0.3.17': + resolution: {integrity: sha512-CBlODWEZ5b6MJWVh21VZioxwxNwVfPA9CAdsk+ZgVocJQQbE2oDW1XJoRcgthRY1HOitgbn4cVrM+NlQtuUYhw==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -2483,45 +2687,51 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/storage@0.13.13': - resolution: {integrity: sha512-E+MTNcBgpoAynicgVb2ZsHCuEOO4aAiUX5ahNwe/1dEyZpo2H4DwFqKQRNK/sdAIgBbjBwcfV2p0MdPFGIR0Ew==} + '@firebase/storage@0.13.7': + resolution: {integrity: sha512-FkRyc24rK+Y6EaQ1tYFm3TevBnnfSNA0VyTfew2hrYyL/aYfatBg7HOgktUdB4kWMHNA9VoTotzZTGoLuK92wg==} engines: {node: '>=18.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/util@1.10.1': - resolution: {integrity: sha512-AIhFnCCjM8FmCqSNlNPTuOk3+gpHC1RkeNUBLtPbcqGYpN5MxI5q7Yby+rxycweOZOCboDzfIj8WyaY4tpQG/g==} + '@firebase/util@1.11.0': + resolution: {integrity: sha512-PzSrhIr++KI6y4P6C/IdgBNMkEx0Ex6554/cYd0Hm+ovyFSJtJXqb/3OSIdnBoa2cpwZT1/GW56EmRc5qEc5fQ==} engines: {node: '>=18.0.0'} - '@firebase/util@1.12.0': - resolution: {integrity: sha512-Z4rK23xBCwgKDqmzGVMef+Vb4xso2j5Q8OG0vVL4m4fA5ZjPMYQazu8OJJC3vtQRC3SQ/Pgx/6TPNVsCd70QRw==} + '@firebase/util@1.9.5': + resolution: {integrity: sha512-PP4pAFISDxsf70l3pEy34Mf3GkkUcVQ3MdKp6aSVb7tcpfUQxnsdV7twDd8EkfB6zZylH6wpUAoangQDmCUMqw==} + + '@firebase/vertexai@1.2.1': + resolution: {integrity: sha512-cukZ5ne2RsOWB4PB1EO6nTXgOLxPMKDJfEn+XnSV5ZKWM0ID5o0DvbyS59XihFaBzmy2SwJldP5ap7/xUnW4jA==} engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + '@firebase/app-types': 0.x '@firebase/webchannel-wrapper@1.0.3': resolution: {integrity: sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ==} - '@genkit-ai/ai@1.12.0': - resolution: {integrity: sha512-0xNVb90JsgxmY4zEtHf4y6qgUXUCa3NfCsirEXKMSjgPYG/HRjxEQD9/qOL4LXL0WZmESJZZ5A+eTNv2TTJO1w==} + '@genkit-ai/ai@1.13.0': + resolution: {integrity: sha512-AFwQXrSfD51J3AeJjzD/k77d2ccfhLmqhPOj0YcUpCjopY+NeVobsNZRJkYOtZdnRBDDYdHDnnHBSetFg+yyYQ==} - '@genkit-ai/core@1.12.0': - resolution: {integrity: sha512-DyS47N+rzqOvVTnQOJTiRkm9ksLxnn1cR3ehRoV1AeT6q335pIpGxilelD9jEpCCKEFXTk2dtaowWWLC3Mw6uw==} + '@genkit-ai/core@1.13.0': + resolution: {integrity: sha512-L6oljw7C/fZ2JcR3/iAllXRb7gVWpZhzMHyX73e5wyI+sbgx92KM36Gh3GxC/7nEtzhUFcRmQqV5MYK1lidl0Q==} - '@genkit-ai/express@1.12.0': - resolution: {integrity: sha512-QAxSS07dX5ovSfsUB4s90KaDnv4zg1wnoxCZCa+jBsYUyv9NvCCTsOk25xAQgGxc7xi3+MD+3AsPier5oZILIg==} + '@genkit-ai/express@1.8.0': + resolution: {integrity: sha512-Cq5BdxslixkrEJujtMQh8WoSy/gHCBE/hCjqfa6MCqy6CwYGf9p/Y5P8C00gsaf4ymnfTK4HTfLfm60GunA+Mg==} peerDependencies: - '@genkit-ai/core': 1.12.0 + '@genkit-ai/core': 1.8.0 express: ^4.21.1 - genkit: ^1.12.0 + genkit: ^1.8.0 - '@gerrit0/mini-shiki@1.27.2': - resolution: {integrity: sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==} + '@gerrit0/mini-shiki@1.24.4': + resolution: {integrity: sha512-YEHW1QeAg6UmxEmswiQbOVEg1CW22b1XUD/lNTliOsu0LD0wqoyleFMnmbTp697QE0pcadQiR5cVtbbAPncvpw==} - '@google-cloud/aiplatform@3.35.0': - resolution: {integrity: sha512-Eo+ckr1KbTxAOew9P+MeeR0aQXeW5PeOzrSM1JyGny/SGKejwX/RcGWSFpeapnlegTfI9N9xJeUeo3M+XBOeFg==} + '@google-cloud/aiplatform@3.25.0': + resolution: {integrity: sha512-qKnJgbyCENjed8e1G5zZGFTxxNKhhaKQN414W2KIVHrLxMFmlMuG+3QkXPOWwXBnT5zZ7aMxypt5og0jCirpHg==} engines: {node: '>=14.0.0'} - '@google-cloud/bigquery@7.9.4': - resolution: {integrity: sha512-C7jeI+9lnCDYK3cRDujcBsPgiwshWKn/f0BiaJmClplfyosCLfWE83iGQ0eKH113UZzjR9c9q7aZQg0nU388sw==} + '@google-cloud/bigquery@7.8.0': + resolution: {integrity: sha512-SVWjoNkLixBGi6ZZSuQYDviSJJwUHd3LDCWoy3IDDXP10MxZWjfClc2FLILgsYz2BL4y4L/tdy3DEqSSt+92EA==} engines: {node: '>=14.0.0'} '@google-cloud/common@5.0.1': @@ -2532,12 +2742,8 @@ packages: resolution: {integrity: sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==} engines: {node: '>=14.0.0'} - '@google-cloud/firestore@7.11.1': - resolution: {integrity: sha512-ZxOdH8Wr01hBDvKCQfMWqwUcfNcN3JY19k1LtS1fTFhEyorYPLsbWN+VxIRL46pOYGHTPkU3Or5HbT/SLQM5nA==} - engines: {node: '>=14.0.0'} - - '@google-cloud/logging-winston@6.0.1': - resolution: {integrity: sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==} + '@google-cloud/logging-winston@6.0.0': + resolution: {integrity: sha512-/lVp7CyT3nFOr+AjQlZnJhTIOf+kcNGB4JTziL0fkX6Ov/2qNKtRGS/NqE6cD+VSPiv5jLOty3LgkRsXMpYxQQ==} engines: {node: '>=14.0.0'} peerDependencies: winston: '>=3.2.1' @@ -2590,12 +2796,12 @@ packages: resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} engines: {node: '>=14'} - '@google-cloud/storage@7.16.0': - resolution: {integrity: sha512-7/5LRgykyOfQENcm6hDKP8SX/u9XxE5YOiWOkgkwcoO+cG8xT/cyOvp9wwN3IxfdYgpHs8CE7Nq2PKX2lNaEXw==} + '@google-cloud/storage@7.10.1': + resolution: {integrity: sha512-sZW14pfxEQZSIbBPs6doFYtcbK31Bs3E4jH5Ly3jJnBkYfkMPX8sXG3ZQXCJa88MKtUNPlgBdMN2OJUzmFe5/g==} engines: {node: '>=14'} - '@google-cloud/vertexai@1.10.0': - resolution: {integrity: sha512-HqYqoivNtkq59po8m7KI0n+lWKdz4kabENncYQXZCX/hBWJfXtKAfR/2nUQsP+TwSfHKoA7zDL2RrJYIv/j3VQ==} + '@google-cloud/vertexai@1.9.3': + resolution: {integrity: sha512-35o5tIEMLW3JeFJOaaMNR2e5sq+6rpnhrF97PuAxeOm0GlqVTESKhkGj7a5B5mmJSSSU3hUfIhcQCRRsw4Ipzg==} engines: {node: '>=18.0.0'} '@google/generative-ai@0.15.0': @@ -2606,144 +2812,137 @@ packages: resolution: {integrity: sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==} engines: {node: '>=18.0.0'} - '@google/generative-ai@0.24.1': - resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} + '@google/generative-ai@0.24.0': + resolution: {integrity: sha512-fnEITCGEB7NdX0BhoYZ/cq/7WPZ1QS5IzJJfC3Tg/OwkvBetMiVJciyaan297OvE4B9Jg1xvo0zIazX/9sGu1Q==} engines: {node: '>=18.0.0'} - '@googleapis/checks@4.2.0': - resolution: {integrity: sha512-D1pHc/Pb3xv+BCzvRRbz+rnRixX2CHwTrOQbj8af80yLgboT5PWnt/hnXOB9QWRd9g3vVWlUrpbacN36pCLpGg==} + '@googleapis/checks@4.0.2': + resolution: {integrity: sha512-YV6sX7o2pS7ZFYp5N2EyGgnvC8F+0Wxoo3Mx+DFF3PFOsCfOUFZE35/ZQBdUFY6l1L0hcyz1lJQIzwmM7TeiCg==} engines: {node: '>=12.0.0'} '@grpc/grpc-js@1.10.10': resolution: {integrity: sha512-HPa/K5NX6ahMoeBv15njAc/sfF4/jmiXLar9UlC2UfHFKZzsCVLc3wbe7+7qua7w9VPh2/L6EBxyAV7/E8Wftg==} engines: {node: '>=12.10.0'} + '@grpc/grpc-js@1.10.4': + resolution: {integrity: sha512-MqBisuxTkYvPFnEiu+dag3xG/NBUDzSbAFAWlzfkGnQkjVZ6by3h4atbBc+Ikqup1z5BfB4BN18gKWR1YyppNw==} + engines: {node: '>=12.10.0'} + '@grpc/grpc-js@1.9.15': resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==} engines: {node: ^8.13.0 || >=10.10.0} - '@grpc/proto-loader@0.7.13': - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + '@grpc/proto-loader@0.7.12': + resolution: {integrity: sha512-DCVwMxqYzpUCiDMl7hQ384FqP4T3DbNpXU8pt681l3UWCip1WUiD5JrkImUwCB9a7f2cq4CUTmi5r/xIMRPY1Q==} engines: {node: '>=6'} hasBin: true - '@grpc/proto-loader@0.7.15': - resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} engines: {node: '>=6'} hasBin: true - '@img/sharp-darwin-arm64@0.34.2': - resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.2': - resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} - cpu: [ppc64] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.2': - resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.2': - resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.34.2': - resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.2': - resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.2': - resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.2': - resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.2': - resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.2': - resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [win32] - - '@img/sharp-win32-ia32@0.34.2': - resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.2': - resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -3135,8 +3334,8 @@ packages: ws: optional: true - '@langchain/core@0.1.63': - resolution: {integrity: sha512-+fjyYi8wy6x1P+Ee1RWfIIEyxd9Ee9jksEwvrggPwwI/p45kIDTdYTblXsM13y4mNWTiACyLSdbwnPaxxdoz+w==} + '@langchain/core@0.1.61': + resolution: {integrity: sha512-C8OkAly+ugvXsL8TACCmFv9WTTcT4gvQaG6NbrXCOzibBCywfxxcTqEMOyg3zIKpxHEmR0DHqh0OiJRHocnsCg==} engines: {node: '>=18'} '@langchain/openai@0.0.28': @@ -3147,126 +3346,79 @@ packages: resolution: {integrity: sha512-3hPesWomnmVeYMppEGYbyv0v/sRUugUdlFBNn9m1ueJYHAIKbvCErkWxNUH3guyKKYgJVrkvZoQxcd9faucSaw==} engines: {node: '>=18'} - '@mistralai/mistralai-gcp@1.5.0': - resolution: {integrity: sha512-KUv4GziIN8do4gmPe7T85gpYW1o2Q89e0hs8PQfZhFRMYz7uYPwxHyVI5UaxWlHFcmAvyxfaOAH0OuCC38Hb6g==} + '@mistralai/mistralai-gcp@1.3.5': + resolution: {integrity: sha512-eykxLojLv0AcgGui2D+D/S98Toc18j9g0GCvjyah3E8YtQW0dMb6UyQjmB+2+qDXN3OZjp8+dOkoJ+r7DmwbOQ==} peerDependencies: + react: ^18 || ^19 + react-dom: ^18 || ^19 zod: '>= 3' - '@modelcontextprotocol/sdk@1.12.3': - resolution: {integrity: sha512-DyVYSOafBvk3/j1Oka4z5BWT8o4AFmoNyZY9pALOm7Lh3GZglR71Co4r4dEUoqDWdDazIZQHBe7J2Nwkg6gHgQ==} - engines: {node: '>=18'} - - '@napi-rs/canvas-android-arm64@0.1.71': - resolution: {integrity: sha512-cxi3VCotIOS9kNFQI7dcysbVJi106pxryVY1Hi85pX+ZeqahRyeqc/NsLaZ998Ae99+F3HI5X/39G1Y/Byrf0A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@napi-rs/canvas-darwin-arm64@0.1.71': - resolution: {integrity: sha512-7Y4D/6vIuMLYsVNtRM/w2j0+fB1GyqeOxc7I0BTx8eLP1S6BZE2Rj6zJfdG+zmLEOW0IlHa+VQq1q2MUAjW84w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@napi-rs/canvas-darwin-x64@0.1.71': - resolution: {integrity: sha512-Z0IUqxclrYdfVt/SK9nKCzUHTOXKTWiygtO71YCzs0OtxKdNI7GJRJdYG48wXZEDQ/pqTF4F7Ifgtidfc2tYpg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.71': - resolution: {integrity: sha512-KlpqqCASak5ruY+UIolJgmhMZ9Pa2o1QyaNu648L8sz4WNBbNa+aOT60XCLCL1VIKLv11B3MlNgiOHoYNmDhXQ==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@napi-rs/canvas-linux-arm64-gnu@0.1.71': - resolution: {integrity: sha512-bdGZCGu8YQNAiu3nkIVVUp6nIn6fPd36IuZsLXTG027E52KyIuZ3obCxehSwjDIUNkFWvmff5D6JYfWwAoioEw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@napi-rs/canvas-linux-arm64-musl@0.1.71': - resolution: {integrity: sha512-1R5sMWe9ur8uM+hAeylBwG0b6UHDR+iWQNgzXmF9vbBYRooQvmDWqpcgytKLJAC0vnWhIkKwqd7yExn7cwczmg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@napi-rs/canvas-linux-riscv64-gnu@0.1.71': - resolution: {integrity: sha512-xjjKsipueuG+LdKIk6/uAlqdo+rzGcmNpTZPXdakIT1sHX4NNSnQTzjRaj9Gh96Czjd9G89UWR0KIlE7fwOgFA==} - engines: {node: '>= 10'} - cpu: [riscv64] - os: [linux] + '@modelcontextprotocol/sdk@0.5.0': + resolution: {integrity: sha512-RXgulUX6ewvxjAG0kOpLMEdXXWkzWgaoCGaA2CwNW7cQCIphjpJhjpHSiaPdVCnisjRF/0Cm9KWHUuIoeiAblQ==} - '@napi-rs/canvas-linux-x64-gnu@0.1.71': - resolution: {integrity: sha512-3s6YpklXDB4OeeULG1XTRyKrKAOo7c3HHEqM9A6N4STSjMaJtzmpp7tB/JTvAFeOeFte6gWN8IwC+7AjGJ6MpQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] + '@modelcontextprotocol/sdk@1.13.0': + resolution: {integrity: sha512-P5FZsXU0kY881F6Hbk9GhsYx02/KgWK1DYf7/tyE/1lcFKhDYPQR9iYjhQXJn+Sg6hQleMo3DB7h7+p4wgp2Lw==} + engines: {node: '>=18'} - '@napi-rs/canvas-linux-x64-musl@0.1.71': - resolution: {integrity: sha512-5v9aCLzCXw7u10ray5juQMdl7TykZSn1X5AIGYwBvTAcKSgrqaR9QkRxp1Lqk3njQmFekOW1SFN9bZ/i/6y6kA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] + '@modelcontextprotocol/sdk@1.13.1': + resolution: {integrity: sha512-8q6+9aF0yA39/qWT/uaIj6zTpC+Qu07DnN/lb9mjoquCJsAh6l3HyYqc9O3t2j7GilseOQOQimLg7W3By6jqvg==} + engines: {node: '>=18'} - '@napi-rs/canvas-win32-x64-msvc@0.1.71': - resolution: {integrity: sha512-oJughk6xjsRIr0Rd9EqjmZmhIMkvcPuXgr3MNn2QexTqn+YFOizrwHS5ha0BDfFl7TEGRvwaDUXBQtu8JKXb8A==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] + '@modelcontextprotocol/server-everything@2025.5.12': + resolution: {integrity: sha512-u5gJgXdZFIxP82S3LRE2CbTo301wcaPdbWNNlearX85PkcV4x/3b1sZgX+TVgNd3hIYdbFyhB1NSekY2hqSYDg==} + hasBin: true - '@napi-rs/canvas@0.1.71': - resolution: {integrity: sha512-92ybDocKl6JM48ZpYbj+A7Qt45IaTABDk0y3sDecEQfgdhfNzJtEityqNHoCZ4Vty2dldPkJhxgvOnbrQMXTTA==} - engines: {node: '>= 10'} + '@modelcontextprotocol/server-filesystem@2025.3.28': + resolution: {integrity: sha512-1AMqM0EZnF7n6L5njMASDR12ppyvtj89HinePbvB8UtT5JKWQ6LJJcbsTYIt/gerFNssf17gH5qXvqSM+eCQSg==} + hasBin: true - '@next/env@15.3.3': - resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} + '@next/env@15.2.4': + resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} - '@next/swc-darwin-arm64@15.3.3': - resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} + '@next/swc-darwin-arm64@15.2.4': + resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.3': - resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} + '@next/swc-darwin-x64@15.2.4': + resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.3': - resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} + '@next/swc-linux-arm64-gnu@15.2.4': + resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.3': - resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} + '@next/swc-linux-arm64-musl@15.2.4': + resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.3': - resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} + '@next/swc-linux-x64-gnu@15.2.4': + resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.3': - resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} + '@next/swc-linux-x64-musl@15.2.4': + resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.3': - resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} + '@next/swc-win32-arm64-msvc@15.2.4': + resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.3': - resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} + '@next/swc-win32-x64-msvc@15.2.4': + resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3279,8 +3431,8 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/auto-instrumentations-node@0.49.2': - resolution: {integrity: sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==} + '@opentelemetry/auto-instrumentations-node@0.49.1': + resolution: {integrity: sha512-oF8g0cOEL4u1xkoAgSFAhOwMVVwDyZod6g1hVL1TtmpHTGMeEP2FfM6pPHE1soAFyddxd4B3NahZX3xczEbLdA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.4.1 @@ -3297,12 +3449,6 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@1.30.1': - resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-trace-otlp-grpc@0.52.1': resolution: {integrity: sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==} engines: {node: '>=14'} @@ -3399,8 +3545,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-generic-pool@0.38.1': - resolution: {integrity: sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==} + '@opentelemetry/instrumentation-generic-pool@0.38.0': + resolution: {integrity: sha512-0/ULi6pIco1fEnDPmmAul8ZoudFL7St0hjgBbWZlZPBCSyslDll1J7DFeEbjiRSSyUd+0tu73ae0DOKVKNd7VA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -3471,8 +3617,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongoose@0.41.0': - resolution: {integrity: sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==} + '@opentelemetry/instrumentation-mongoose@0.40.0': + resolution: {integrity: sha512-niRi5ZUnkgzRhIGMOozTyoZIvJKNJyhijQI4nF4iFSb+FUx2v5fngfR+8XLmdQAO7xmsD8E5vEGdDVYVtKbZew==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -3513,8 +3659,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-redis-4@0.41.1': - resolution: {integrity: sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==} + '@opentelemetry/instrumentation-redis-4@0.41.0': + resolution: {integrity: sha512-H7IfGTqW2reLXqput4yzAe8YpDC0fmVNal95GHMLOrS89W+qWUKIqxolSh63hJyfmwPSFwXASzj7wpSk8Az+Dg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -3543,14 +3689,14 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-tedious@0.13.0': - resolution: {integrity: sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==} + '@opentelemetry/instrumentation-tedious@0.12.0': + resolution: {integrity: sha512-53xx7WQmpBPfxtVxOKRzzZxOjv9JzSdoy1aIvCtPM5/O407aYcdvj8wXxCQEiEfctFEovEHG4QgmdHz9BKidSQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-undici@0.5.0': - resolution: {integrity: sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==} + '@opentelemetry/instrumentation-undici@0.4.0': + resolution: {integrity: sha512-UdMQBpz11SqtWlmDnk5SoqF5QDom4VmW8SVDt9Q2xuMWVh8lc0kVROfoo2pl7zU6H6gFR8eudb3eFXIdrFn0ew==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.7.0 @@ -3619,20 +3765,20 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-aws@1.12.0': - resolution: {integrity: sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==} + '@opentelemetry/resource-detector-aws@1.5.2': + resolution: {integrity: sha512-LNwKy5vJM5fvCDcbXVKwg6Y1pKT4WgZUsddGMnWMEhxJcQVZm2Z9vUkyHdQU7xvJtGwCO2/TkMWHPjU1KQNDJQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-azure@0.2.12': - resolution: {integrity: sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ==} + '@opentelemetry/resource-detector-azure@0.2.9': + resolution: {integrity: sha512-16Z6kyrmszoa7J1uj1kbSAgZuk11K07yEDj6fa3I9XBf8Debi8y4K8ex94kpxbCfEraWagXji3bCWvaq3k4dRg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-container@0.4.4': - resolution: {integrity: sha512-ZEN2mq7lIjQWJ8NTt1umtr6oT/Kb89856BOmESLSvgSHbIwOFYs7cSfSRH5bfiVw6dXTQAVbZA/wLgCHKrebJA==} + '@opentelemetry/resource-detector-container@0.3.11': + resolution: {integrity: sha512-22ndMDakxX+nuhAYwqsciexV8/w26JozRUV0FN9kJiqSWtA1b5dCVtlp3J6JivG5t8kDN9UF5efatNnVbqRT9Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 @@ -3691,10 +3837,6 @@ packages: resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} - '@opentelemetry/semantic-conventions@1.34.0': - resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} - engines: {node: '>=14'} - '@opentelemetry/sql-common@0.40.1': resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} engines: {node: '>=14'} @@ -3707,8 +3849,8 @@ packages: '@pdf-lib/upng@1.0.1': resolution: {integrity: sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==} - '@pinecone-database/pinecone@2.2.2': - resolution: {integrity: sha512-gbe/4SowHc64pHIm0kBdgY9hVdzsQnnnpcWviwYMB33gOmsL8brvE8fUSpl1dLDvdyXzKcQkzdBsjCDlqgpdMA==} + '@pinecone-database/pinecone@2.2.0': + resolution: {integrity: sha512-qfVs9n5YyTmerIV1GE1u89xF1W3oFSF53STW68Oqyxey0dGq4775cCw8G5pnwoy872uqfh+tMRDME9bcWfinUw==} engines: {node: '>=14.0.0'} '@pkgjs/parseargs@0.11.0': @@ -3745,114 +3887,104 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@rollup/rollup-android-arm-eabi@4.43.0': - resolution: {integrity: sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==} + '@rollup/rollup-android-arm-eabi@4.25.0': + resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.43.0': - resolution: {integrity: sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==} + '@rollup/rollup-android-arm64@4.25.0': + resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.43.0': - resolution: {integrity: sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==} + '@rollup/rollup-darwin-arm64@4.25.0': + resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.43.0': - resolution: {integrity: sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==} + '@rollup/rollup-darwin-x64@4.25.0': + resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.43.0': - resolution: {integrity: sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==} + '@rollup/rollup-freebsd-arm64@4.25.0': + resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.43.0': - resolution: {integrity: sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==} + '@rollup/rollup-freebsd-x64@4.25.0': + resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.43.0': - resolution: {integrity: sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==} + '@rollup/rollup-linux-arm-gnueabihf@4.25.0': + resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.43.0': - resolution: {integrity: sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==} + '@rollup/rollup-linux-arm-musleabihf@4.25.0': + resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.43.0': - resolution: {integrity: sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==} + '@rollup/rollup-linux-arm64-gnu@4.25.0': + resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.43.0': - resolution: {integrity: sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==} + '@rollup/rollup-linux-arm64-musl@4.25.0': + resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.43.0': - resolution: {integrity: sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-powerpc64le-gnu@4.43.0': - resolution: {integrity: sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': + resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.43.0': - resolution: {integrity: sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.43.0': - resolution: {integrity: sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==} + '@rollup/rollup-linux-riscv64-gnu@4.25.0': + resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.43.0': - resolution: {integrity: sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==} + '@rollup/rollup-linux-s390x-gnu@4.25.0': + resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.43.0': - resolution: {integrity: sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==} + '@rollup/rollup-linux-x64-gnu@4.25.0': + resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.43.0': - resolution: {integrity: sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==} + '@rollup/rollup-linux-x64-musl@4.25.0': + resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.43.0': - resolution: {integrity: sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==} + '@rollup/rollup-win32-arm64-msvc@4.25.0': + resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.43.0': - resolution: {integrity: sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==} + '@rollup/rollup-win32-ia32-msvc@4.25.0': + resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.43.0': - resolution: {integrity: sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==} + '@rollup/rollup-win32-x64-msvc@4.25.0': + resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} cpu: [x64] os: [win32] - '@shikijs/engine-oniguruma@1.29.2': - resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} + '@shikijs/engine-oniguruma@1.24.2': + resolution: {integrity: sha512-ZN6k//aDNWRJs1uKB12pturKHh7GejKugowOFGAuG7TxDRLod1Bd5JhpOikOiFqPmKjKEPtEA6mRCf7q3ulDyQ==} - '@shikijs/types@1.29.2': - resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} + '@shikijs/types@1.24.2': + resolution: {integrity: sha512-bdeWZiDtajGLG9BudI0AHet0b6e7FbR0EsE4jpGaI0YwHm/XJunI9+3uZnzFtX65gsyJ6ngCIWUfA4NWRPnBkQ==} - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@shikijs/vscode-textmate@9.3.1': + resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -3912,9 +4044,6 @@ packages: '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - '@types/bunyan@1.8.9': resolution: {integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==} @@ -3927,20 +4056,20 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} '@types/data-urls@3.0.4': resolution: {integrity: sha512-XRY2WVaOFSTKpNMaplqY1unPgAGk/DosOJ+eFrB6LJcFFbRH3nVbwJuGqLmDwdTWWx+V7U614/kmrj1JmCDl2A==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/express-serve-static-core@4.17.43': resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} - '@types/express@4.17.23': - resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -3964,15 +4093,12 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + '@types/jest@29.5.13': + resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/jsonwebtoken@9.0.10': - resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} - '@types/jsonwebtoken@9.0.6': resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} @@ -3988,32 +4114,23 @@ packages: '@types/mime@3.0.4': resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/mysql@2.15.22': resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} '@types/node-fetch@2.6.11': resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} - - '@types/node@18.19.112': - resolution: {integrity: sha512-i+Vukt9POdS/MBI7YrrkkI5fMfwFtOjphSmt4WXYLfwqsfr6z/HdCx7LqT9M7JktGob8WNgj8nFB4TbGNE4Cog==} + '@types/node@18.19.53': + resolution: {integrity: sha512-GLxgUgHhDKO1Edw9Q0lvMbiO/IQXJwJlMaqxSGBXMpPy8uhkCs2iiPFaB2Q/gmobnFkckD3rqTBMVjXdwq+nKg==} - '@types/node@20.19.1': - resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==} + '@types/node@20.17.17': + resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} - '@types/node@22.15.32': - resolution: {integrity: sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==} + '@types/node@22.15.17': + resolution: {integrity: sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==} - '@types/node@24.0.3': - resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} - - '@types/pdf-parse@1.1.5': - resolution: {integrity: sha512-kBfrSXsloMnUJOKi25s3+hRmkycHfLK6A09eRGqF/N8BkQoPUmaCr+q8Cli5FnfohEz/rsv82zAiPz/LXtOGhA==} + '@types/pdf-parse@1.1.4': + resolution: {integrity: sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==} '@types/pg-pool@2.0.4': resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} @@ -4027,17 +4144,14 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.0.3': + resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} peerDependencies: '@types/react': ^19.0.0 '@types/react@19.0.8': resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} - '@types/request@2.48.12': resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} @@ -4121,8 +4235,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -4134,10 +4248,6 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - agentkeepalive@4.5.0: resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} engines: {node: '>= 8.0.0'} @@ -4200,25 +4310,21 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - async-mutex@0.5.0: resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} @@ -4282,6 +4388,9 @@ packages: binary-search@1.3.6: resolution: {integrity: sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4290,15 +4399,12 @@ packages: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -4330,8 +4436,11 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bundle-require@5.0.0: + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.18' @@ -4356,10 +4465,6 @@ packages: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} @@ -4379,6 +4484,10 @@ packages: caniuse-lite@1.0.30001667: resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + canvas@3.0.0-rc2: + resolution: {integrity: sha512-esx4bYDznnqgRX4G8kaEaf0W3q8xIc51WpmrIitDzmcoEgwnv9wSKdzT6UxWZ4wkVu5+ileofppX0TpyviJRdQ==} + engines: {node: ^18.12.0 || >= 20.9.0} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4394,10 +4503,13 @@ packages: charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chromadb@1.8.1: resolution: {integrity: sha512-NpbYydbg4Uqt/9BXKgkZXn0fqpsh2Z1yjhkhKH+rcHMoq0pwI18BFSU2QU7Fk/ZypwGefW2AvqyE/3ZJIgy4QA==} engines: {node: '>=14.17.0'} @@ -4506,11 +4618,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} content-disposition@0.5.4: @@ -4539,10 +4648,6 @@ packages: resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -4584,16 +4689,16 @@ packages: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} engines: {node: '>= 0.4'} - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} debug@2.6.9: @@ -4630,19 +4735,18 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dedent@1.5.3: resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: @@ -4651,6 +4755,10 @@ packages: babel-plugin-macros: optional: true + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -4675,8 +4783,8 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} detect-newline@3.1.0: @@ -4691,6 +4799,10 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + diff@7.0.0: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} @@ -4706,8 +4818,8 @@ packages: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} dotprompt@1.1.1: @@ -4774,8 +4886,8 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.23.2: + resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==} engines: {node: '>= 0.4'} es-define-property@1.0.0: @@ -4790,20 +4902,29 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - esbuild@0.25.5: - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} hasBin: true @@ -4862,6 +4983,10 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4896,14 +5021,11 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-text-encoding@1.0.6: - resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} - fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fast-xml-parser@4.5.3: - resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} + fast-xml-parser@4.3.6: + resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==} hasBin: true faye-websocket@0.11.4: @@ -4913,8 +5035,8 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4928,8 +5050,8 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - file-type-checker@1.1.4: - resolution: {integrity: sha512-ZqDOywUE+cXb2PVb1iPHQP5/6ZLVCCJPIWJBStDXK1dWspUYNXtPRvU+Ae2ovWU5gmUXkmOQizTTGQZsqdekzg==} + file-type-checker@1.1.3: + resolution: {integrity: sha512-SLMNPu0RZEQsfR+GRNnVBlBPdtXn2BTpvSzBRw9MDjDacobK+Vc0WtbQ/mZx7vqNy+b6juKsza5DvEN5i7LwCw==} filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -4957,22 +5079,15 @@ packages: resolution: {integrity: sha512-vEr3s3esl8nPIA9r/feDT4nzIXCfov1CyyCSpMQWp6x63Q104qke0MEGZlrHUZVROtl8FLus6niP/M9I1s4VBA==} engines: {node: '>=14'} - firebase-admin@13.4.0: - resolution: {integrity: sha512-Y8DcyKK+4pl4B93ooiy1G8qvdyRMkcNFfBSh+8rbVcw4cW8dgG0VXCCTp5NUwub8sn9vSPsOwpb9tE2OuFmcfQ==} - engines: {node: '>=18'} - - firebase-functions@6.3.2: - resolution: {integrity: sha512-FC3A1/nhqt1ZzxRnj5HZLScQaozAcFSD/vSR8khqSoFNOfxuXgwJS6ZABTB7+v+iMD5z6Mmxw6OfqITUBuI7OQ==} + firebase-functions@6.3.1: + resolution: {integrity: sha512-LTbmsEkSgaOhzTzGUoF7dv906JJJW89o0/spXgnU8gASyR8JLMrCqwV7FnWLso5hyF0fUqNPaEEw/TzLdZMVXw==} engines: {node: '>=14.10.0'} hasBin: true peerDependencies: firebase-admin: ^11.10.0 || ^12.0.0 || ^13.0.0 - firebase@11.9.1: - resolution: {integrity: sha512-nbQbQxNlkHHRDn4cYwHdAKHwJPeZ0jRXxlNp6PCOb9CQx8Dc6Vjve97R34r1EZJnzOsPYZ3+ssJH7fkovDjvCw==} - - fix-dts-default-cjs-exports@1.0.1: - resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + firebase@11.6.0: + resolution: {integrity: sha512-Xqm6j6zszIEmI5nW1MPR8yTafoRTSrW3mWG9Lk9elCJtQDQSiTEkKZiNtUm9y6XfOPl8xoF1TNpxZe8HjgA0Og==} flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} @@ -4981,9 +5096,8 @@ packages: fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -5020,6 +5134,9 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -5031,8 +5148,8 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} functional-red-black-tree@1.0.1: @@ -5041,22 +5158,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gaxios@5.1.3: - resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} - engines: {node: '>=12'} - gaxios@6.3.0: resolution: {integrity: sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==} engines: {node: '>=14'} - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - - gcp-metadata@5.3.0: - resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} - engines: {node: '>=12'} - gcp-metadata@6.1.0: resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} engines: {node: '>=14'} @@ -5104,12 +5209,15 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} glob@10.3.12: resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} @@ -5129,27 +5237,25 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} - google-auth-library@8.9.0: - resolution: {integrity: sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==} - engines: {node: '>=12'} + google-auth-library@9.14.2: + resolution: {integrity: sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA==} + engines: {node: '>=14'} - google-auth-library@9.15.1: - resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} + google-gax@4.3.2: + resolution: {integrity: sha512-2mw7qgei2LPdtGrmd1zvxQviOcduTnsvAWYzCxhOWXK4IQKmQztHnDQwD0ApB690fBQJemFKSU7DnceAy3RLzw==} engines: {node: '>=14'} - google-gax@4.6.1: - resolution: {integrity: sha512-V6eky/xz2mcKfAd1Ioxyd6nmA61gao3n01C+YeuIwu3vzM9EDR6wcVzMSIbLMDXWeoi9SHYctXuKYC5uJUT3eQ==} + google-gax@4.3.7: + resolution: {integrity: sha512-3bnD8RASQyaxOYTdWLgwpQco/aytTxFavoI/UN5QN5txDLp8QRrBHNtCUJ5+Ago+551GD92jG8jJduwvmaneUw==} engines: {node: '>=14'} - google-p12-pem@4.0.1: - resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} - engines: {node: '>=12.0.0'} - deprecated: Package is no longer maintained - hasBin: true + google-gax@4.4.1: + resolution: {integrity: sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==} + engines: {node: '>=14'} googleapis-common@7.2.0: resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} @@ -5163,6 +5269,9 @@ packages: resolution: {integrity: sha512-ZGvBX4mQcFXO9ACnVNg6Aqy3KtBPB5zTuue43YVLxwn8HSv8jB7w+uDKoIPSoWuxGROgnj2kbng6acXncOQRNA==} engines: {node: '>=14.0.0'} + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5170,10 +5279,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gtoken@6.1.2: - resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==} - engines: {node: '>=12.0.0'} - gtoken@7.1.0: resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} engines: {node: '>=14.0.0'} @@ -5183,9 +5288,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -5202,10 +5306,6 @@ packages: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -5225,9 +5325,6 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -5235,8 +5332,8 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-parser-js@0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} @@ -5250,10 +5347,6 @@ packages: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -5272,6 +5365,9 @@ packages: idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} @@ -5298,8 +5394,11 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} ipaddr.js@1.9.1: @@ -5309,8 +5408,8 @@ packages: is-any-array@2.0.1: resolution: {integrity: sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} is-arrayish@0.2.1: @@ -5319,16 +5418,11 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} is-buffer@1.1.6: @@ -5341,20 +5435,12 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: @@ -5365,20 +5451,12 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} is-number@7.0.0: @@ -5392,45 +5470,32 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} is@3.3.0: resolution: {integrity: sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==} @@ -5616,9 +5681,6 @@ packages: jose@4.15.5: resolution: {integrity: sha512-jc7BFxgKPKi94uOvEmzlSWFFe2+vASyXaKUpdQKatWAESU2MWjDfFf0fdfc83CDKcA5QecabZeNLyfhe3yKNkg==} - jose@4.15.9: - resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==} - joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -5626,9 +5688,6 @@ packages: js-tiktoken@1.0.11: resolution: {integrity: sha512-PajXFLq2vx7/8jllQZ43vzNpAai/0MOVdJjW/UrNyJorNQRTjHrqdGJG/mjHVy7h9M6dW6CaG43eNLMYFkTh6w==} - js-tiktoken@1.0.20: - resolution: {integrity: sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -5690,10 +5749,6 @@ packages: resolution: {integrity: sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==} engines: {node: '>=14'} - jwks-rsa@3.2.0: - resolution: {integrity: sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==} - engines: {node: '>=14'} - jws@3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} @@ -5707,8 +5762,8 @@ packages: kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - langchain@0.1.37: - resolution: {integrity: sha512-rpaLEJtRrLYhAViEp7/aHfSkxbgSqHJ5n10tXv3o4kHP/wOin85RpTgewwvGjEaKc3797jOg+sLSk6a7e0UlMg==} + langchain@0.1.36: + resolution: {integrity: sha512-NTbnCL/jKWIeEI//Nm1oG8nhW3vkYWvEMr1MPotmTThTfeKfO87eV/OAzAyh6Ruy6GFs/qofRgQZGIe6XvXTNQ==} engines: {node: '>=18'} peerDependencies: '@aws-sdk/client-s3': ^3.310.0 @@ -5716,7 +5771,6 @@ packages: '@aws-sdk/client-sfn': ^3.310.0 '@aws-sdk/credential-provider-node': ^3.388.0 '@azure/storage-blob': ^12.15.0 - '@browserbasehq/sdk': '*' '@gomomento/sdk': ^1.51.1 '@gomomento/sdk-core': ^1.51.1 '@gomomento/sdk-web': ^1.51.1 @@ -5775,8 +5829,6 @@ packages: optional: true '@azure/storage-blob': optional: true - '@browserbasehq/sdk': - optional: true '@gomomento/sdk': optional: true '@gomomento/sdk-core': @@ -5957,10 +6009,6 @@ packages: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - long@1.1.5: resolution: {integrity: sha512-TU6nAF5SdasnTr28c7e74P4Crbn9o3/zwo1pM22Wvg2i2vlZ4Eelxwu4QT7j21z0sDBlJDEnEZjXTZg2J8WJrg==} engines: {node: '>=0.6'} @@ -5968,9 +6016,6 @@ packages: long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -5996,15 +6041,9 @@ packages: lru-memoizer@2.2.0: resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==} - lru-memoizer@2.3.0: - resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} - lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -6071,10 +6110,6 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime-types@3.0.0: - resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==} - engines: {node: '>= 0.6'} - mime-types@3.0.1: resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} engines: {node: '>= 0.6'} @@ -6093,6 +6128,14 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} @@ -6115,6 +6158,9 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + ml-array-mean@1.1.6: resolution: {integrity: sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ==} @@ -6130,9 +6176,6 @@ packages: ml-tree-similarity@1.0.0: resolution: {integrity: sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg==} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} - module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} @@ -6149,16 +6192,14 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -6173,8 +6214,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next@15.3.3: - resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} + next@15.2.4: + resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -6194,6 +6235,13 @@ packages: sass: optional: true + node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + engines: {node: '>=10'} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -6264,12 +6312,12 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - ollama@0.5.16: - resolution: {integrity: sha512-OEbxxOIUZtdZgOaTPAULo051F5y+Z1vosxEYOoABPnQKeW7i4O8tJNlxCB+xioyoorVqgjkdj+TA1f1Hy2ug/w==} + ollama@0.5.9: + resolution: {integrity: sha512-F/KZuDRC+ZsVCuMvcOYuQ6zj42/idzCkkuknGyyGVmNStMZ/sU3jQpvhnl4SyC0+zBzLiKNZJnJeuPFuieWZvQ==} on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} @@ -6289,8 +6337,8 @@ packages: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} hasBin: true - openai@4.104.0: - resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} + openai@4.97.0: + resolution: {integrity: sha512-LRoiy0zvEf819ZUEJhgfV8PfsE8G5WpQi4AwA1uCV8SKvvtXQkoWUFkepD6plqyJQRghy2+AEPQ07FrJFKHZ9Q==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -6304,10 +6352,6 @@ packages: openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -6402,12 +6446,13 @@ packages: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} engines: {node: '>=4'} + path2d@0.2.2: + resolution: {integrity: sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==} + engines: {node: '>=6'} + path@0.12.7: resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pdf-lib@1.17.1: resolution: {integrity: sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==} @@ -6418,9 +6463,9 @@ packages: pdfjs-dist-legacy@1.0.1: resolution: {integrity: sha512-kZQ7eiHsm1uxImngh56yi4Cd2qL7eQauQYzvqLgVIDEuO0ruDEbRTZ1GRmv5SkqkRkJwI09tdowgTin7Smusqg==} - pdfjs-dist@4.10.38: - resolution: {integrity: sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==} - engines: {node: '>=20'} + pdfjs-dist@4.8.69: + resolution: {integrity: sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ==} + engines: {node: '>=18'} pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -6465,11 +6510,8 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} postcss-load-config@6.0.1: @@ -6514,6 +6556,11 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + prebuild-install@7.1.2: + resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} + engines: {node: '>=10'} + hasBin: true + pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6526,6 +6573,10 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + proto3-json-serializer@2.0.1: + resolution: {integrity: sha512-8awBvjO+FwkMd6gNoGFZyqkHZXCFd54CIYTb6De7dPaufGJ2XNW+QUNqbMr8MaAocMdb+KpsD4rxEOaTBDCffA==} + engines: {node: '>=14.0.0'} + proto3-json-serializer@2.0.2: resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} engines: {node: '>=14.0.0'} @@ -6533,12 +6584,12 @@ packages: protobuf.js@1.1.2: resolution: {integrity: sha512-USO7Xus/pzPw549M1TguiyoOrKEhm9VMXv+CkDufcjMC8Rd7EPbxeRQPEjCV8ua1tm0k7z9xHkogcxovZogWdA==} - protobufjs@7.3.2: - resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} + protobufjs@7.2.6: + resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} engines: {node: '>=12.0.0'} - protobufjs@7.5.3: - resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: @@ -6585,6 +6636,10 @@ packages: resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} engines: {node: '>= 0.8'} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -6608,16 +6663,12 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} require-directory@2.1.1: @@ -6647,11 +6698,6 @@ packages: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -6669,8 +6715,8 @@ packages: engines: {node: 20 || >=22} hasBin: true - rollup@4.43.0: - resolution: {integrity: sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==} + rollup@4.25.0: + resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -6678,19 +6724,15 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} safe-stable-stringify@2.4.3: @@ -6721,19 +6763,10 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - send@0.19.0: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} - send@1.1.0: - resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} - engines: {node: '>= 18'} - send@1.2.0: resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} engines: {node: '>= 18'} @@ -6754,15 +6787,11 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sharp@0.34.2: - resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -6773,9 +6802,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -6807,6 +6835,15 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -6844,8 +6881,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.21: - resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -6861,10 +6898,6 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - stream-events@1.0.5: resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} @@ -6894,13 +6927,12 @@ packages: resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -6932,12 +6964,16 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} stubs@3.0.0: resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} @@ -6976,6 +7012,13 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + teeny-request@9.0.0: resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} engines: {node: '>=14'} @@ -6994,11 +7037,11 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} tmpl@1.0.5: @@ -7037,18 +7080,17 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.4.0: - resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 || ^30.0.0 - '@jest/types': ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 esbuild: '*' - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.0.0 + jest: ^29.0.0 typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': @@ -7061,8 +7103,6 @@ packages: optional: true esbuild: optional: true - jest-util: - optional: true ts-md5@1.3.1: resolution: {integrity: sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==} @@ -7091,8 +7131,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.5.0: - resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + tsup@8.3.5: + resolution: {integrity: sha512-Tunf6r6m6tnZsG9GYWndg0z8dEV7fD733VBFzFJ5Vcm1FtlXB8xBD/rtrBi2a3YKEV7hHtxiZtW5EAVADoe1pA==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -7115,6 +7155,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -7127,10 +7170,6 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -7139,20 +7178,20 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} typedoc-github-theme@0.2.1: @@ -7184,35 +7223,31 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -7243,10 +7278,6 @@ packages: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -7327,24 +7358,15 @@ packages: whatwg-url@7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} which-pm-runs@1.1.0: resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} engines: {node: '>=4'} - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} which@2.0.2: @@ -7356,12 +7378,8 @@ packages: resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} engines: {node: '>= 12.0.0'} - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + winston@3.13.0: + resolution: {integrity: sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==} engines: {node: '>= 12.0.0'} wordwrap@1.0.0: @@ -7404,11 +7422,6 @@ packages: engines: {node: '>= 14'} hasBin: true - yaml@2.8.0: - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} - engines: {node: '>= 14.6'} - hasBin: true - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -7425,16 +7438,16 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + zod-to-json-schema@3.24.1: + resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} peerDependencies: zod: ^3.24.1 zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - zod@3.25.67: - resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} snapshots: @@ -7445,7 +7458,7 @@ snapshots: '@anthropic-ai/sdk@0.24.3(encoding@0.1.13)': dependencies: - '@types/node': 18.19.112 + '@types/node': 18.19.53 '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 @@ -7458,8 +7471,8 @@ snapshots: '@anthropic-ai/sdk@0.9.1(encoding@0.1.13)': dependencies: - '@types/node': 18.19.112 - '@types/node-fetch': 2.6.12 + '@types/node': 18.19.53 + '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 digest-fetch: 1.3.0 @@ -7470,10 +7483,10 @@ snapshots: transitivePeerDependencies: - encoding - '@anthropic-ai/vertex-sdk@0.4.3(encoding@0.1.13)': + '@anthropic-ai/vertex-sdk@0.4.0(encoding@0.1.13)': dependencies: '@anthropic-ai/sdk': 0.24.3(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color @@ -7692,331 +7705,383 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.3.1': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.5': + '@esbuild/aix-ppc64@0.24.0': optional: true - '@esbuild/android-arm64@0.25.5': + '@esbuild/aix-ppc64@0.25.4': optional: true - '@esbuild/android-arm@0.25.5': + '@esbuild/android-arm64@0.24.0': optional: true - '@esbuild/android-x64@0.25.5': + '@esbuild/android-arm64@0.25.4': optional: true - '@esbuild/darwin-arm64@0.25.5': + '@esbuild/android-arm@0.24.0': optional: true - '@esbuild/darwin-x64@0.25.5': + '@esbuild/android-arm@0.25.4': optional: true - '@esbuild/freebsd-arm64@0.25.5': + '@esbuild/android-x64@0.24.0': optional: true - '@esbuild/freebsd-x64@0.25.5': + '@esbuild/android-x64@0.25.4': optional: true - '@esbuild/linux-arm64@0.25.5': + '@esbuild/darwin-arm64@0.24.0': optional: true - '@esbuild/linux-arm@0.25.5': + '@esbuild/darwin-arm64@0.25.4': optional: true - '@esbuild/linux-ia32@0.25.5': + '@esbuild/darwin-x64@0.24.0': optional: true - '@esbuild/linux-loong64@0.25.5': + '@esbuild/darwin-x64@0.25.4': optional: true - '@esbuild/linux-mips64el@0.25.5': + '@esbuild/freebsd-arm64@0.24.0': optional: true - '@esbuild/linux-ppc64@0.25.5': + '@esbuild/freebsd-arm64@0.25.4': optional: true - '@esbuild/linux-riscv64@0.25.5': + '@esbuild/freebsd-x64@0.24.0': optional: true - '@esbuild/linux-s390x@0.25.5': + '@esbuild/freebsd-x64@0.25.4': optional: true - '@esbuild/linux-x64@0.25.5': + '@esbuild/linux-arm64@0.24.0': optional: true - '@esbuild/netbsd-arm64@0.25.5': + '@esbuild/linux-arm64@0.25.4': optional: true - '@esbuild/netbsd-x64@0.25.5': + '@esbuild/linux-arm@0.24.0': optional: true - '@esbuild/openbsd-arm64@0.25.5': + '@esbuild/linux-arm@0.25.4': optional: true - '@esbuild/openbsd-x64@0.25.5': + '@esbuild/linux-ia32@0.24.0': optional: true - '@esbuild/sunos-x64@0.25.5': + '@esbuild/linux-ia32@0.25.4': optional: true - '@esbuild/win32-arm64@0.25.5': + '@esbuild/linux-loong64@0.24.0': optional: true - '@esbuild/win32-ia32@0.25.5': + '@esbuild/linux-loong64@0.25.4': optional: true - '@esbuild/win32-x64@0.25.5': + '@esbuild/linux-mips64el@0.24.0': optional: true - '@fastify/busboy@3.0.0': {} + '@esbuild/linux-mips64el@0.25.4': + optional: true - '@fastify/busboy@3.1.1': + '@esbuild/linux-ppc64@0.24.0': optional: true - '@firebase/ai@1.4.0(@firebase/app-types@0.9.3)(@firebase/app@0.13.1)': - dependencies: - '@firebase/app': 0.13.1 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/app-types': 0.9.3 - '@firebase/component': 0.6.17 - '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 - tslib: 2.8.1 + '@esbuild/linux-ppc64@0.25.4': + optional: true + + '@esbuild/linux-riscv64@0.24.0': + optional: true + + '@esbuild/linux-riscv64@0.25.4': + optional: true + + '@esbuild/linux-s390x@0.24.0': + optional: true + + '@esbuild/linux-s390x@0.25.4': + optional: true + + '@esbuild/linux-x64@0.24.0': + optional: true + + '@esbuild/linux-x64@0.25.4': + optional: true + + '@esbuild/netbsd-arm64@0.25.4': + optional: true + + '@esbuild/netbsd-x64@0.24.0': + optional: true + + '@esbuild/netbsd-x64@0.25.4': + optional: true + + '@esbuild/openbsd-arm64@0.24.0': + optional: true + + '@esbuild/openbsd-arm64@0.25.4': + optional: true + + '@esbuild/openbsd-x64@0.24.0': + optional: true + + '@esbuild/openbsd-x64@0.25.4': + optional: true + + '@esbuild/sunos-x64@0.24.0': + optional: true + + '@esbuild/sunos-x64@0.25.4': + optional: true + + '@esbuild/win32-arm64@0.24.0': + optional: true + + '@esbuild/win32-arm64@0.25.4': + optional: true + + '@esbuild/win32-ia32@0.24.0': + optional: true + + '@esbuild/win32-ia32@0.25.4': + optional: true + + '@esbuild/win32-x64@0.24.0': + optional: true + + '@esbuild/win32-x64@0.25.4': + optional: true + + '@fastify/busboy@3.0.0': {} - '@firebase/analytics-compat@0.2.22(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1)': + '@firebase/analytics-compat@0.2.18(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: - '@firebase/analytics': 0.10.16(@firebase/app@0.13.1) + '@firebase/analytics': 0.10.12(@firebase/app@0.11.4) '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 - '@firebase/util': 1.12.0 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/analytics-types@0.8.3': {} - '@firebase/analytics@0.10.16(@firebase/app@0.13.1)': + '@firebase/analytics@0.10.12(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 - '@firebase/installations': 0.6.17(@firebase/app@0.13.1) + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 + '@firebase/installations': 0.6.13(@firebase/app@0.11.4) '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/app-check-compat@0.3.25(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1)': + '@firebase/app-check-compat@0.3.20(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-check': 0.10.0(@firebase/app@0.13.1) + '@firebase/app-check': 0.8.13(@firebase/app@0.11.4) '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-check-interop-types@0.3.2': - optional: true + '@firebase/app-check-interop-types@0.3.1': {} '@firebase/app-check-interop-types@0.3.3': {} '@firebase/app-check-types@0.5.3': {} - '@firebase/app-check@0.10.0(@firebase/app@0.13.1)': + '@firebase/app-check@0.8.13(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/app-compat@0.4.1': + '@firebase/app-compat@0.2.53': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/app-types@0.9.2': - optional: true + '@firebase/app-types@0.9.1': {} '@firebase/app-types@0.9.3': {} - '@firebase/app@0.13.1': + '@firebase/app@0.11.4': dependencies: - '@firebase/component': 0.6.17 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/auth-compat@0.5.27(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1)': + '@firebase/auth-compat@0.5.20(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/auth': 1.10.7(@firebase/app@0.13.1) - '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.12.0) - '@firebase/component': 0.6.17 - '@firebase/util': 1.12.0 + '@firebase/app-compat': 0.2.53 + '@firebase/auth': 1.10.0(@firebase/app@0.11.4) + '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.11.0) + '@firebase/component': 0.6.13 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@react-native-async-storage/async-storage' - '@firebase/auth-interop-types@0.2.3': - optional: true + '@firebase/auth-interop-types@0.2.2': {} '@firebase/auth-interop-types@0.2.4': {} - '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.12.0)': + '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.11.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 - '@firebase/auth@1.10.7(@firebase/app@0.13.1)': + '@firebase/auth@1.10.0(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/component@0.6.10': + '@firebase/component@0.6.13': dependencies: - '@firebase/util': 1.10.1 + '@firebase/util': 1.11.0 tslib: 2.8.1 - optional: true - '@firebase/component@0.6.17': + '@firebase/component@0.6.6': dependencies: - '@firebase/util': 1.12.0 + '@firebase/util': 1.9.5 tslib: 2.8.1 - '@firebase/data-connect@0.3.9(@firebase/app@0.13.1)': + '@firebase/data-connect@0.3.3(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 + '@firebase/app': 0.11.4 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.17 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/database-compat@1.0.10': + '@firebase/database-compat@1.0.4': dependencies: - '@firebase/component': 0.6.10 - '@firebase/database': 1.0.9 - '@firebase/database-types': 1.0.6 - '@firebase/logger': 0.4.3 - '@firebase/util': 1.10.1 + '@firebase/component': 0.6.6 + '@firebase/database': 1.0.4 + '@firebase/database-types': 1.0.2 + '@firebase/logger': 0.4.1 + '@firebase/util': 1.9.5 tslib: 2.8.1 - optional: true - '@firebase/database-compat@2.0.10': + '@firebase/database-compat@2.0.5': dependencies: - '@firebase/component': 0.6.17 - '@firebase/database': 1.0.19 - '@firebase/database-types': 1.0.14 + '@firebase/component': 0.6.13 + '@firebase/database': 1.0.14 + '@firebase/database-types': 1.0.10 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/database-types@1.0.14': + '@firebase/database-types@1.0.10': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 - '@firebase/database-types@1.0.6': + '@firebase/database-types@1.0.2': dependencies: - '@firebase/app-types': 0.9.2 - '@firebase/util': 1.10.1 - optional: true + '@firebase/app-types': 0.9.1 + '@firebase/util': 1.9.5 - '@firebase/database@1.0.19': + '@firebase/database@1.0.14': dependencies: '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.17 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 faye-websocket: 0.11.4 tslib: 2.8.1 - '@firebase/database@1.0.9': + '@firebase/database@1.0.4': dependencies: - '@firebase/app-check-interop-types': 0.3.2 - '@firebase/auth-interop-types': 0.2.3 - '@firebase/component': 0.6.10 - '@firebase/logger': 0.4.3 - '@firebase/util': 1.10.1 + '@firebase/app-check-interop-types': 0.3.1 + '@firebase/auth-interop-types': 0.2.2 + '@firebase/component': 0.6.6 + '@firebase/logger': 0.4.1 + '@firebase/util': 1.9.5 faye-websocket: 0.11.4 tslib: 2.8.1 - optional: true - '@firebase/firestore-compat@0.3.52(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1)': + '@firebase/firestore-compat@0.3.45(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 - '@firebase/firestore': 4.7.17(@firebase/app@0.13.1) - '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.0) - '@firebase/util': 1.12.0 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 + '@firebase/firestore': 4.7.10(@firebase/app@0.11.4) + '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0) + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.0)': + '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 - '@firebase/firestore@4.7.17(@firebase/app@0.13.1)': + '@firebase/firestore@4.7.10(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 '@firebase/webchannel-wrapper': 1.0.3 '@grpc/grpc-js': 1.9.15 - '@grpc/proto-loader': 0.7.15 + '@grpc/proto-loader': 0.7.13 tslib: 2.8.1 - '@firebase/functions-compat@0.3.25(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1)': + '@firebase/functions-compat@0.3.20(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 - '@firebase/functions': 0.12.8(@firebase/app@0.13.1) + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 + '@firebase/functions': 0.12.3(@firebase/app@0.11.4) '@firebase/functions-types': 0.6.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/functions-types@0.6.3': {} - '@firebase/functions@0.12.8(@firebase/app@0.13.1)': + '@firebase/functions@0.12.3(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 + '@firebase/app': 0.11.4 '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.6.17 + '@firebase/component': 0.6.13 '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/installations-compat@0.2.17(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1)': + '@firebase/installations-compat@0.2.13(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 - '@firebase/installations': 0.6.17(@firebase/app@0.13.1) + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 + '@firebase/installations': 0.6.13(@firebase/app@0.11.4) '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -8026,132 +8091,140 @@ snapshots: dependencies: '@firebase/app-types': 0.9.3 - '@firebase/installations@0.6.17(@firebase/app@0.13.1)': + '@firebase/installations@0.6.13(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 - '@firebase/util': 1.12.0 + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 + '@firebase/util': 1.11.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/logger@0.4.3': + '@firebase/logger@0.4.1': dependencies: tslib: 2.8.1 - optional: true '@firebase/logger@0.4.4': dependencies: tslib: 2.8.1 - '@firebase/messaging-compat@0.2.21(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1)': + '@firebase/messaging-compat@0.2.17(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 - '@firebase/messaging': 0.12.21(@firebase/app@0.13.1) - '@firebase/util': 1.12.0 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 + '@firebase/messaging': 0.12.17(@firebase/app@0.11.4) + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/messaging-interop-types@0.2.3': {} - '@firebase/messaging@0.12.21(@firebase/app@0.13.1)': + '@firebase/messaging@0.12.17(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 - '@firebase/installations': 0.6.17(@firebase/app@0.13.1) + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 + '@firebase/installations': 0.6.13(@firebase/app@0.11.4) '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/performance-compat@0.2.19(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1)': + '@firebase/performance-compat@0.2.15(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/performance': 0.7.6(@firebase/app@0.13.1) + '@firebase/performance': 0.7.2(@firebase/app@0.11.4) '@firebase/performance-types': 0.2.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/performance-types@0.2.3': {} - '@firebase/performance@0.7.6(@firebase/app@0.13.1)': + '@firebase/performance@0.7.2(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 - '@firebase/installations': 0.6.17(@firebase/app@0.13.1) + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 + '@firebase/installations': 0.6.13(@firebase/app@0.11.4) '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 web-vitals: 4.2.4 - '@firebase/remote-config-compat@0.2.17(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1)': + '@firebase/remote-config-compat@0.2.13(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 '@firebase/logger': 0.4.4 - '@firebase/remote-config': 0.6.4(@firebase/app@0.13.1) + '@firebase/remote-config': 0.6.0(@firebase/app@0.11.4) '@firebase/remote-config-types': 0.4.0 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/remote-config-types@0.4.0': {} - '@firebase/remote-config@0.6.4(@firebase/app@0.13.1)': + '@firebase/remote-config@0.6.0(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 - '@firebase/installations': 0.6.17(@firebase/app@0.13.1) + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 + '@firebase/installations': 0.6.13(@firebase/app@0.11.4) '@firebase/logger': 0.4.4 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/storage-compat@0.3.23(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1)': + '@firebase/storage-compat@0.3.17(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4)': dependencies: - '@firebase/app-compat': 0.4.1 - '@firebase/component': 0.6.17 - '@firebase/storage': 0.13.13(@firebase/app@0.13.1) - '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.0) - '@firebase/util': 1.12.0 + '@firebase/app-compat': 0.2.53 + '@firebase/component': 0.6.13 + '@firebase/storage': 0.13.7(@firebase/app@0.11.4) + '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0) + '@firebase/util': 1.11.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.12.0)': + '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.11.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.12.0 + '@firebase/util': 1.11.0 - '@firebase/storage@0.13.13(@firebase/app@0.13.1)': + '@firebase/storage@0.13.7(@firebase/app@0.11.4)': dependencies: - '@firebase/app': 0.13.1 - '@firebase/component': 0.6.17 - '@firebase/util': 1.12.0 + '@firebase/app': 0.11.4 + '@firebase/component': 0.6.13 + '@firebase/util': 1.11.0 tslib: 2.8.1 - '@firebase/util@1.10.1': + '@firebase/util@1.11.0': + dependencies: + tslib: 2.8.1 + + '@firebase/util@1.9.5': dependencies: tslib: 2.8.1 - optional: true - '@firebase/util@1.12.0': + '@firebase/vertexai@1.2.1(@firebase/app-types@0.9.3)(@firebase/app@0.11.4)': dependencies: + '@firebase/app': 0.11.4 + '@firebase/app-check-interop-types': 0.3.3 + '@firebase/app-types': 0.9.3 + '@firebase/component': 0.6.13 + '@firebase/logger': 0.4.4 + '@firebase/util': 1.11.0 tslib: 2.8.1 '@firebase/webchannel-wrapper@1.0.3': {} - '@genkit-ai/ai@1.12.0': + '@genkit-ai/ai@1.13.0': dependencies: - '@genkit-ai/core': 1.12.0 + '@genkit-ai/core': 1.13.0 '@opentelemetry/api': 1.9.0 - '@types/node': 20.19.1 + '@types/node': 20.17.17 colorette: 2.0.20 dotprompt: 1.1.1 json5: 2.2.3 @@ -8161,7 +8234,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@genkit-ai/core@1.12.0': + '@genkit-ai/core@1.13.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) @@ -8179,14 +8252,14 @@ snapshots: express: 4.21.2 get-port: 5.1.1 json-schema: 0.4.0 - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) transitivePeerDependencies: - supports-color - '@genkit-ai/express@1.12.0(@genkit-ai/core@1.12.0)(express@5.1.0)(genkit@genkit)': + '@genkit-ai/express@1.8.0(@genkit-ai/core@1.13.0)(express@5.1.0)(genkit@genkit)': dependencies: - '@genkit-ai/core': 1.12.0 + '@genkit-ai/core': 1.13.0 body-parser: 1.20.3 cors: 2.8.5 express: 5.1.0 @@ -8194,21 +8267,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@gerrit0/mini-shiki@1.27.2': + '@gerrit0/mini-shiki@1.24.4': dependencies: - '@shikijs/engine-oniguruma': 1.29.2 - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/engine-oniguruma': 1.24.2 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 - '@google-cloud/aiplatform@3.35.0(encoding@0.1.13)': + '@google-cloud/aiplatform@3.25.0(encoding@0.1.13)': dependencies: - google-gax: 4.6.1(encoding@0.1.13) + google-gax: 4.3.7(encoding@0.1.13) protobuf.js: 1.1.2 transitivePeerDependencies: - encoding - supports-color - '@google-cloud/bigquery@7.9.4(encoding@0.1.13)': + '@google-cloud/bigquery@7.8.0(encoding@0.1.13)': dependencies: '@google-cloud/common': 5.0.1(encoding@0.1.13) '@google-cloud/paginator': 5.0.2 @@ -8233,7 +8306,7 @@ snapshots: duplexify: 4.1.3 ent: 2.2.0 extend: 3.0.2 - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) retry-request: 7.0.2(encoding@0.1.13) teeny-request: 9.0.0(encoding@0.1.13) transitivePeerDependencies: @@ -8245,30 +8318,18 @@ snapshots: '@opentelemetry/api': 1.9.0 fast-deep-equal: 3.1.3 functional-red-black-tree: 1.0.1 - google-gax: 4.6.1(encoding@0.1.13) - protobufjs: 7.3.2 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - - '@google-cloud/firestore@7.11.1(encoding@0.1.13)': - dependencies: - '@opentelemetry/api': 1.9.0 - fast-deep-equal: 3.1.3 - functional-red-black-tree: 1.0.1 - google-gax: 4.6.1(encoding@0.1.13) + google-gax: 4.4.1(encoding@0.1.13) protobufjs: 7.3.2 transitivePeerDependencies: - encoding - supports-color - '@google-cloud/logging-winston@6.0.1(encoding@0.1.13)(winston@3.17.0)': + '@google-cloud/logging-winston@6.0.0(encoding@0.1.13)(winston@3.13.0)': dependencies: '@google-cloud/logging': 11.0.0(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) lodash.mapvalues: 4.6.0 - winston: 3.17.0 + winston: 3.13.0 winston-transport: 4.7.0 transitivePeerDependencies: - encoding @@ -8285,8 +8346,8 @@ snapshots: eventid: 2.0.1 extend: 3.0.2 gcp-metadata: 6.1.0(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) - google-gax: 4.6.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) + google-gax: 4.3.2(encoding@0.1.13) on-finished: 2.4.1 pumpify: 2.0.1 stream-events: 1.0.5 @@ -8303,7 +8364,7 @@ snapshots: '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) googleapis: 137.1.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -8318,7 +8379,7 @@ snapshots: '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color @@ -8348,7 +8409,7 @@ snapshots: '@google-cloud/promisify@4.0.0': {} - '@google-cloud/storage@7.16.0(encoding@0.1.13)': + '@google-cloud/storage@7.10.1(encoding@0.1.13)': dependencies: '@google-cloud/paginator': 5.0.2 '@google-cloud/projectify': 4.0.0 @@ -8356,10 +8417,10 @@ snapshots: abort-controller: 3.0.0 async-retry: 1.3.3 duplexify: 4.1.3 - fast-xml-parser: 4.5.3 - gaxios: 6.7.1(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) - html-entities: 2.6.0 + ent: 2.2.0 + fast-xml-parser: 4.3.6 + gaxios: 6.3.0(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) mime: 3.0.0 p-limit: 3.1.0 retry-request: 7.0.2(encoding@0.1.13) @@ -8370,9 +8431,9 @@ snapshots: - supports-color optional: true - '@google-cloud/vertexai@1.10.0(encoding@0.1.13)': + '@google-cloud/vertexai@1.9.3(encoding@0.1.13)': dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color @@ -8381,9 +8442,9 @@ snapshots: '@google/generative-ai@0.21.0': {} - '@google/generative-ai@0.24.1': {} + '@google/generative-ai@0.24.0': {} - '@googleapis/checks@4.2.0(encoding@0.1.13)': + '@googleapis/checks@4.0.2(encoding@0.1.13)': dependencies: googleapis-common: 7.2.0(encoding@0.1.13) transitivePeerDependencies: @@ -8395,104 +8456,103 @@ snapshots: '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 + '@grpc/grpc-js@1.10.4': + dependencies: + '@grpc/proto-loader': 0.7.12 + '@js-sdsl/ordered-map': 4.4.2 + '@grpc/grpc-js@1.9.15': dependencies: - '@grpc/proto-loader': 0.7.15 - '@types/node': 20.19.1 + '@grpc/proto-loader': 0.7.13 + '@types/node': 20.17.17 - '@grpc/proto-loader@0.7.13': + '@grpc/proto-loader@0.7.12': dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 protobufjs: 7.3.2 yargs: 17.7.2 - '@grpc/proto-loader@0.7.15': + '@grpc/proto-loader@0.7.13': dependencies: lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.5.3 + long: 5.2.3 + protobufjs: 7.3.2 yargs: 17.7.2 - '@img/sharp-darwin-arm64@0.34.2': + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-arm64': 1.0.4 optional: true - '@img/sharp-darwin-x64@0.34.2': + '@img/sharp-darwin-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.0.4 optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': + '@img/sharp-libvips-darwin-arm64@1.0.4': optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': + '@img/sharp-libvips-darwin-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': + '@img/sharp-libvips-linux-arm64@1.0.4': optional: true - '@img/sharp-libvips-linux-arm@1.1.0': + '@img/sharp-libvips-linux-arm@1.0.5': optional: true - '@img/sharp-libvips-linux-ppc64@1.1.0': + '@img/sharp-libvips-linux-s390x@1.0.4': optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': + '@img/sharp-libvips-linux-x64@1.0.4': optional: true - '@img/sharp-libvips-linux-x64@1.1.0': + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + '@img/sharp-libvips-linuxmusl-x64@1.0.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 optional: true - '@img/sharp-linux-arm64@0.34.2': + '@img/sharp-linux-arm@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.0.5 optional: true - '@img/sharp-linux-arm@0.34.2': + '@img/sharp-linux-s390x@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.0.4 optional: true - '@img/sharp-linux-s390x@0.34.2': + '@img/sharp-linux-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.0.4 optional: true - '@img/sharp-linux-x64@0.34.2': + '@img/sharp-linuxmusl-arm64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.2': + '@img/sharp-linuxmusl-x64@0.33.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.2': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - optional: true - - '@img/sharp-wasm32@0.34.2': + '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.4.3 - optional: true - - '@img/sharp-win32-arm64@0.34.2': + '@emnapi/runtime': 1.3.1 optional: true - '@img/sharp-win32-ia32@0.34.2': + '@img/sharp-win32-ia32@0.33.5': optional: true - '@img/sharp-win32-x64@0.34.2': + '@img/sharp-win32-x64@0.33.5': optional: true '@isaacs/cliui@8.0.2': @@ -8517,27 +8577,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + jest-config: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8558,21 +8618,21 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8597,7 +8657,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8615,7 +8675,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.1 + '@types/node': 20.17.17 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8637,7 +8697,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.19.1 + '@types/node': 20.17.17 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8707,7 +8767,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -8723,7 +8783,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.0': + optional: true '@jridgewell/trace-mapping@0.3.25': dependencies: @@ -8738,73 +8799,82 @@ snapshots: '@js-sdsl/ordered-map@4.4.2': {} - '@langchain/community@0.0.53(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(jsonwebtoken@9.0.2)': + '@langchain/community@0.0.53(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(jsonwebtoken@9.0.2)': dependencies: - '@langchain/core': 0.1.63 + '@langchain/core': 0.1.61 '@langchain/openai': 0.0.28(encoding@0.1.13) expr-eval: 2.0.2 flat: 5.0.2 langsmith: 0.1.14 uuid: 9.0.1 - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: - '@pinecone-database/pinecone': 2.2.2 - chromadb: 1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)) + '@pinecone-database/pinecone': 2.2.0 + chromadb: 1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)) firebase-admin: 12.3.1(encoding@0.1.13) - google-auth-library: 8.9.0(encoding@0.1.13) jsonwebtoken: 9.0.2 transitivePeerDependencies: - encoding - '@langchain/core@0.1.63': + '@langchain/core@0.1.61': dependencies: ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 - js-tiktoken: 1.0.20 + js-tiktoken: 1.0.11 langsmith: 0.1.14 ml-distance: 4.0.1 mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) '@langchain/openai@0.0.28(encoding@0.1.13)': dependencies: - '@langchain/core': 0.1.63 + '@langchain/core': 0.1.61 js-tiktoken: 1.0.11 - openai: 4.104.0(encoding@0.1.13)(zod@3.25.67) - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + openai: 4.97.0(encoding@0.1.13)(zod@3.24.1) + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) transitivePeerDependencies: - encoding - ws '@langchain/textsplitters@0.0.0': dependencies: - '@langchain/core': 0.1.63 + '@langchain/core': 0.1.61 js-tiktoken: 1.0.11 - '@mistralai/mistralai-gcp@1.5.0(encoding@0.1.13)(zod@3.25.67)': + '@mistralai/mistralai-gcp@1.3.5(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.24.1)': dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) - zod: 3.25.67 + google-auth-library: 9.14.2(encoding@0.1.13) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + zod: 3.24.1 transitivePeerDependencies: - encoding - supports-color - '@mistralai/mistralai-gcp@1.5.0(zod@3.22.4)': + '@mistralai/mistralai-gcp@1.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.22.4)': dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) zod: 3.22.4 transitivePeerDependencies: - encoding - supports-color - '@modelcontextprotocol/sdk@1.12.3': + '@modelcontextprotocol/sdk@0.5.0': + dependencies: + content-type: 1.0.5 + raw-body: 3.0.0 + zod: 3.24.1 + + '@modelcontextprotocol/sdk@1.13.0': dependencies: ajv: 6.12.6 content-type: 1.0.5 @@ -8815,79 +8885,70 @@ snapshots: express-rate-limit: 7.5.0(express@5.1.0) pkce-challenge: 5.0.0 raw-body: 3.0.0 - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) transitivePeerDependencies: - supports-color - '@napi-rs/canvas-android-arm64@0.1.71': - optional: true - - '@napi-rs/canvas-darwin-arm64@0.1.71': - optional: true - - '@napi-rs/canvas-darwin-x64@0.1.71': - optional: true - - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.71': - optional: true - - '@napi-rs/canvas-linux-arm64-gnu@0.1.71': - optional: true - - '@napi-rs/canvas-linux-arm64-musl@0.1.71': - optional: true - - '@napi-rs/canvas-linux-riscv64-gnu@0.1.71': - optional: true - - '@napi-rs/canvas-linux-x64-gnu@0.1.71': - optional: true - - '@napi-rs/canvas-linux-x64-musl@0.1.71': - optional: true + '@modelcontextprotocol/sdk@1.13.1': + dependencies: + ajv: 6.12.6 + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.5 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0 + raw-body: 3.0.0 + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) + transitivePeerDependencies: + - supports-color - '@napi-rs/canvas-win32-x64-msvc@0.1.71': - optional: true + '@modelcontextprotocol/server-everything@2025.5.12': + dependencies: + '@modelcontextprotocol/sdk': 1.13.1 + express: 4.21.2 + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) + transitivePeerDependencies: + - supports-color - '@napi-rs/canvas@0.1.71': - optionalDependencies: - '@napi-rs/canvas-android-arm64': 0.1.71 - '@napi-rs/canvas-darwin-arm64': 0.1.71 - '@napi-rs/canvas-darwin-x64': 0.1.71 - '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.71 - '@napi-rs/canvas-linux-arm64-gnu': 0.1.71 - '@napi-rs/canvas-linux-arm64-musl': 0.1.71 - '@napi-rs/canvas-linux-riscv64-gnu': 0.1.71 - '@napi-rs/canvas-linux-x64-gnu': 0.1.71 - '@napi-rs/canvas-linux-x64-musl': 0.1.71 - '@napi-rs/canvas-win32-x64-msvc': 0.1.71 - optional: true + '@modelcontextprotocol/server-filesystem@2025.3.28(zod@3.24.1)': + dependencies: + '@modelcontextprotocol/sdk': 0.5.0 + diff: 5.2.0 + glob: 10.3.12 + minimatch: 10.0.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) + transitivePeerDependencies: + - zod - '@next/env@15.3.3': {} + '@next/env@15.2.4': {} - '@next/swc-darwin-arm64@15.3.3': + '@next/swc-darwin-arm64@15.2.4': optional: true - '@next/swc-darwin-x64@15.3.3': + '@next/swc-darwin-x64@15.2.4': optional: true - '@next/swc-linux-arm64-gnu@15.3.3': + '@next/swc-linux-arm64-gnu@15.2.4': optional: true - '@next/swc-linux-arm64-musl@15.3.3': + '@next/swc-linux-arm64-musl@15.2.4': optional: true - '@next/swc-linux-x64-gnu@15.3.3': + '@next/swc-linux-x64-gnu@15.2.4': optional: true - '@next/swc-linux-x64-musl@15.3.3': + '@next/swc-linux-x64-musl@15.2.4': optional: true - '@next/swc-win32-arm64-msvc@15.3.3': + '@next/swc-win32-arm64-msvc@15.2.4': optional: true - '@next/swc-win32-x64-msvc@15.3.3': + '@next/swc-win32-x64-msvc@15.2.4': optional: true '@opentelemetry/api-logs@0.52.1': @@ -8896,7 +8957,7 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@opentelemetry/auto-instrumentations-node@0.49.2(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + '@opentelemetry/auto-instrumentations-node@0.49.1(@opentelemetry/api@1.9.0)(encoding@0.1.13)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) @@ -8912,7 +8973,7 @@ snapshots: '@opentelemetry/instrumentation-express': 0.41.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-fastify': 0.38.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-fs': 0.14.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-generic-pool': 0.38.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.38.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-graphql': 0.42.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-grpc': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-hapi': 0.40.0(@opentelemetry/api@1.9.0) @@ -8924,7 +8985,7 @@ snapshots: '@opentelemetry/instrumentation-lru-memoizer': 0.39.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-memcached': 0.38.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-mongodb': 0.46.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongoose': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.40.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-mysql': 0.40.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-mysql2': 0.40.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-nestjs-core': 0.39.0(@opentelemetry/api@1.9.0) @@ -8932,17 +8993,17 @@ snapshots: '@opentelemetry/instrumentation-pg': 0.43.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-pino': 0.41.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-redis': 0.41.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-redis-4': 0.41.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.41.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-restify': 0.40.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-router': 0.39.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-socket.io': 0.41.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-tedious': 0.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-undici': 0.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.12.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.4.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-winston': 0.39.0(@opentelemetry/api@1.9.0) '@opentelemetry/resource-detector-alibaba-cloud': 0.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-aws': 1.12.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-azure': 0.2.12(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-container': 0.4.4(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 1.5.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.2.9(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.3.11(@opentelemetry/api@1.9.0) '@opentelemetry/resource-detector-gcp': 0.29.10(@opentelemetry/api@1.9.0)(encoding@0.1.13) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-node': 0.52.1(@opentelemetry/api@1.9.0) @@ -8959,11 +9020,6 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.25.1 - '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.52.1(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.10.10 @@ -9005,7 +9061,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9015,7 +9071,7 @@ snapshots: '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagator-aws-xray': 1.3.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@types/aws-lambda': 8.10.122 transitivePeerDependencies: - supports-color @@ -9026,7 +9082,7 @@ snapshots: '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/propagation-utils': 0.30.10(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9043,7 +9099,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9052,7 +9108,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@types/connect': 3.4.36 transitivePeerDependencies: - supports-color @@ -9061,7 +9117,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9076,7 +9132,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - semver: 7.7.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -9085,7 +9141,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9094,7 +9150,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9106,7 +9162,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-generic-pool@0.38.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-generic-pool@0.38.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) @@ -9133,7 +9189,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9143,7 +9199,7 @@ snapshots: '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.25.1 - semver: 7.7.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -9152,7 +9208,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9160,7 +9216,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9168,7 +9224,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9177,7 +9233,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9192,7 +9248,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@types/memcached': 2.2.10 transitivePeerDependencies: - supports-color @@ -9202,16 +9258,16 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongoose@0.41.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongoose@0.40.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9219,7 +9275,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color @@ -9228,7 +9284,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@types/mysql': 2.15.22 transitivePeerDependencies: - supports-color @@ -9237,7 +9293,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9245,7 +9301,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9253,7 +9309,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) '@types/pg': 8.6.1 '@types/pg-pool': 2.0.4 @@ -9269,12 +9325,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis-4@0.41.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-redis-4@0.41.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9283,7 +9339,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9292,7 +9348,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9300,7 +9356,7 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color @@ -9308,20 +9364,20 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-tedious@0.13.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-tedious@0.12.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@types/tedious': 4.0.14 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-undici@0.5.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-undici@0.4.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) @@ -9399,35 +9455,33 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-aws@1.12.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-aws@1.5.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-azure@0.2.12(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-azure@0.2.9(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-container@0.4.4(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-container@0.3.11(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 '@opentelemetry/resource-detector-gcp@0.29.10(@opentelemetry/api@1.9.0)(encoding@0.1.13)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.28.0 gcp-metadata: 6.1.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -9495,8 +9549,6 @@ snapshots: '@opentelemetry/semantic-conventions@1.28.0': {} - '@opentelemetry/semantic-conventions@1.34.0': {} - '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -9510,7 +9562,7 @@ snapshots: dependencies: pako: 1.0.11 - '@pinecone-database/pinecone@2.2.2': + '@pinecone-database/pinecone@2.2.0': dependencies: '@sinclair/typebox': 0.29.6 ajv: 8.17.1 @@ -9543,77 +9595,71 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@rollup/rollup-android-arm-eabi@4.43.0': + '@rollup/rollup-android-arm-eabi@4.25.0': optional: true - '@rollup/rollup-android-arm64@4.43.0': + '@rollup/rollup-android-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-arm64@4.43.0': + '@rollup/rollup-darwin-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-x64@4.43.0': + '@rollup/rollup-darwin-x64@4.25.0': optional: true - '@rollup/rollup-freebsd-arm64@4.43.0': + '@rollup/rollup-freebsd-arm64@4.25.0': optional: true - '@rollup/rollup-freebsd-x64@4.43.0': + '@rollup/rollup-freebsd-x64@4.25.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.43.0': + '@rollup/rollup-linux-arm-gnueabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.43.0': + '@rollup/rollup-linux-arm-musleabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.43.0': + '@rollup/rollup-linux-arm64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.43.0': + '@rollup/rollup-linux-arm64-musl@4.25.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.43.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.43.0': + '@rollup/rollup-linux-riscv64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.43.0': + '@rollup/rollup-linux-s390x-gnu@4.25.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.43.0': + '@rollup/rollup-linux-x64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.43.0': + '@rollup/rollup-linux-x64-musl@4.25.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.43.0': + '@rollup/rollup-win32-arm64-msvc@4.25.0': optional: true - '@rollup/rollup-linux-x64-musl@4.43.0': + '@rollup/rollup-win32-ia32-msvc@4.25.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.43.0': + '@rollup/rollup-win32-x64-msvc@4.25.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.43.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.43.0': - optional: true - - '@shikijs/engine-oniguruma@1.29.2': + '@shikijs/engine-oniguruma@1.24.2': dependencies: - '@shikijs/types': 1.29.2 - '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/types': 1.24.2 + '@shikijs/vscode-textmate': 9.3.1 - '@shikijs/types@1.29.2': + '@shikijs/types@1.24.2': dependencies: - '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@10.0.2': {} + '@shikijs/vscode-textmate@9.3.1': {} '@sinclair/typebox@0.27.8': {} @@ -9683,46 +9729,41 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.19.1 - - '@types/body-parser@1.19.6': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 24.0.3 + '@types/node': 20.17.17 '@types/bunyan@1.8.9': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/caseless@0.12.5': {} '@types/connect@3.4.36': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/connect@3.4.38': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.17.17 - '@types/cors@2.8.19': + '@types/cors@2.8.17': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/data-urls@3.0.4': dependencies: '@types/whatwg-mimetype': 3.0.2 '@types/whatwg-url': 11.0.5 - '@types/estree@1.0.7': {} + '@types/estree@1.0.6': {} '@types/express-serve-static-core@4.17.43': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/qs': 6.9.14 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express@4.17.23': + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.43 @@ -9731,7 +9772,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/handlebars@4.1.0': dependencies: @@ -9753,69 +9794,49 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.14': + '@types/jest@29.5.13': dependencies: expect: 29.7.0 pretty-format: 29.7.0 '@types/json-schema@7.0.15': {} - '@types/jsonwebtoken@9.0.10': - dependencies: - '@types/ms': 2.1.0 - '@types/node': 20.19.1 - optional: true - '@types/jsonwebtoken@9.0.6': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/long@4.0.2': {} '@types/memcached@2.2.10': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/mime@1.3.5': {} '@types/mime@3.0.4': {} - '@types/ms@2.1.0': - optional: true - '@types/mysql@2.15.22': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/node-fetch@2.6.11': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 form-data: 4.0.0 - '@types/node-fetch@2.6.12': - dependencies: - '@types/node': 24.0.3 - form-data: 4.0.0 - - '@types/node@18.19.112': + '@types/node@18.19.53': dependencies: undici-types: 5.26.5 - '@types/node@20.19.1': + '@types/node@20.17.17': dependencies: - undici-types: 6.21.0 + undici-types: 6.19.8 - '@types/node@22.15.32': + '@types/node@22.15.17': dependencies: undici-types: 6.21.0 - '@types/node@24.0.3': - dependencies: - undici-types: 7.8.0 - - '@types/pdf-parse@1.1.5': - dependencies: - '@types/node': 24.0.3 + '@types/pdf-parse@1.1.4': {} '@types/pg-pool@2.0.4': dependencies: @@ -9823,7 +9844,7 @@ snapshots: '@types/pg@8.6.1': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 pg-protocol: 1.6.0 pg-types: 2.2.0 @@ -9831,22 +9852,18 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.0.3(@types/react@19.0.8)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.0.8 '@types/react@19.0.8': dependencies: csstype: 3.1.3 - '@types/react@19.1.8': - dependencies: - csstype: 3.1.3 - '@types/request@2.48.12': dependencies: '@types/caseless': 0.12.5 - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/tough-cookie': 4.0.5 form-data: 2.5.1 @@ -9855,13 +9872,13 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/shimmer@1.0.5': {} @@ -9875,7 +9892,7 @@ snapshots: '@types/tedious@4.0.14': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 '@types/tough-cookie@4.0.5': {} @@ -9887,7 +9904,7 @@ snapshots: '@types/wav@1.0.4': dependencies: - '@types/node': 24.0.3 + '@types/node': 20.17.17 '@types/webidl-conversions@7.0.3': {} @@ -9914,7 +9931,7 @@ snapshots: accepts@2.0.0: dependencies: - mime-types: 3.0.0 + mime-types: 3.0.1 negotiator: 1.0.0 acorn-import-attributes@1.9.5(acorn@8.11.3): @@ -9923,16 +9940,17 @@ snapshots: acorn-walk@8.3.4: dependencies: - acorn: 8.15.0 + acorn: 8.14.0 optional: true acorn@8.11.3: {} - acorn@8.15.0: {} + acorn@8.14.0: + optional: true agent-base@6.0.2: dependencies: - debug: 4.4.1 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -9942,9 +9960,6 @@ snapshots: transitivePeerDependencies: - supports-color - agent-base@7.1.3: - optional: true - agentkeepalive@4.5.0: dependencies: humanize-ms: 1.2.1 @@ -10003,27 +10018,26 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.2: + array-buffer-byte-length@1.0.1: dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 array-flatten@1.1.1: {} - arraybuffer.prototype.slice@1.0.4: + arraybuffer.prototype.slice@1.0.3: dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.23.2 es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 arrify@2.0.1: {} - async-function@1.0.0: {} - async-mutex@0.5.0: dependencies: tslib: 2.6.2 @@ -10039,7 +10053,7 @@ snapshots: available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.1.0 + possible-typed-array-names: 1.0.0 babel-jest@29.7.0(@babel/core@7.25.7): dependencies: @@ -10110,6 +10124,13 @@ snapshots: binary-search@1.3.6: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -10131,7 +10152,7 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.1 + debug: 4.4.0 http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 @@ -10141,7 +10162,7 @@ snapshots: transitivePeerDependencies: - supports-color - brace-expansion@1.1.12: + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 @@ -10150,10 +10171,6 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - braces@3.0.2: dependencies: fill-range: 7.0.1 @@ -10186,9 +10203,15 @@ snapshots: buffer-from@1.1.2: {} - bundle-require@5.1.0(esbuild@0.25.5): + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + optional: true + + bundle-require@5.0.0(esbuild@0.24.0): dependencies: - esbuild: 0.25.5 + esbuild: 0.24.0 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -10212,13 +10235,6 @@ snapshots: get-intrinsic: 1.2.4 set-function-length: 1.2.2 - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 @@ -10232,6 +10248,13 @@ snapshots: caniuse-lite@1.0.30001667: {} + canvas@3.0.0-rc2: + dependencies: + node-addon-api: 7.1.1 + prebuild-install: 7.1.2 + simple-get: 3.1.1 + optional: true + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -10247,25 +10270,28 @@ snapshots: charenc@0.0.2: {} - chokidar@4.0.3: + chokidar@4.0.1: dependencies: - readdirp: 4.1.2 + readdirp: 4.0.2 + + chownr@1.1.4: + optional: true - chromadb@1.8.1(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)): + chromadb@1.8.1(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)): dependencies: cliui: 8.0.1 isomorphic-fetch: 3.0.0(encoding@0.1.13) optionalDependencies: - openai: 4.104.0(encoding@0.1.13)(zod@3.25.67) + openai: 4.97.0(encoding@0.1.13)(zod@3.24.1) transitivePeerDependencies: - encoding - chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)): + chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)): dependencies: cliui: 8.0.1 isomorphic-fetch: 3.0.0(encoding@0.1.13) optionalDependencies: - openai: 4.104.0(encoding@0.1.13)(zod@3.25.67) + openai: 4.97.0(encoding@0.1.13)(zod@3.24.1) transitivePeerDependencies: - encoding optional: true @@ -10350,9 +10376,7 @@ snapshots: concat-map@0.0.1: {} - confbox@0.1.8: {} - - consola@3.4.2: {} + consola@3.2.3: {} content-disposition@0.5.4: dependencies: @@ -10372,8 +10396,6 @@ snapshots: cookie@0.7.1: {} - cookie@0.7.2: {} - core-util-is@1.0.3: {} cors@2.8.5: @@ -10381,13 +10403,13 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - create-jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)): + create-jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + jest-config: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10396,13 +10418,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + create-jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10441,23 +10463,23 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 14.0.0 - data-view-buffer@1.0.2: + data-view-buffer@1.0.1: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - is-data-view: 1.0.2 + is-data-view: 1.0.1 - data-view-byte-length@1.0.2: + data-view-byte-length@1.0.1: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - is-data-view: 1.0.2 + is-data-view: 1.0.1 - data-view-byte-offset@1.0.1: + data-view-byte-offset@1.0.0: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - is-data-view: 1.0.2 + is-data-view: 1.0.1 debug@2.6.9: dependencies: @@ -10475,21 +10497,30 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1: + decamelize@1.2.0: {} + + decompress-response@4.2.1: dependencies: - ms: 2.1.3 + mimic-response: 2.1.0 + optional: true - decamelize@1.2.0: {} + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + optional: true dedent@1.5.3: {} + deep-extend@0.6.0: + optional: true + deepmerge@4.3.1: {} define-data-property@1.1.4: dependencies: - es-define-property: 1.0.1 + es-define-property: 1.0.0 es-errors: 1.3.0 - gopd: 1.2.0 + gopd: 1.0.1 define-properties@1.2.1: dependencies: @@ -10503,7 +10534,7 @@ snapshots: destroy@1.2.0: {} - detect-libc@2.0.4: + detect-libc@2.0.3: optional: true detect-newline@3.1.0: {} @@ -10513,6 +10544,8 @@ snapshots: diff@4.0.2: optional: true + diff@5.2.0: {} + diff@7.0.0: {} digest-fetch@1.3.0: @@ -10526,7 +10559,7 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@16.5.0: {} + dotenv@16.4.5: {} dotprompt@1.1.1: dependencies: @@ -10589,62 +10622,54 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.24.0: + es-abstract@1.23.2: dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 + has-proto: 1.0.3 + has-symbols: 1.0.3 hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-data-view: 1.0.2 + is-data-view: 1.0.1 is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 es-define-property@1.0.0: dependencies: @@ -10654,50 +10679,80 @@ snapshots: es-errors@1.3.0: {} - es-object-atoms@1.1.1: + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.1.0: + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - get-intrinsic: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - es-to-primitive@1.3.0: + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 + is-date-object: 1.0.5 + is-symbol: 1.0.4 - esbuild@0.25.5: + esbuild@0.24.0: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 + + esbuild@0.25.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.5 - '@esbuild/android-arm': 0.25.5 - '@esbuild/android-arm64': 0.25.5 - '@esbuild/android-x64': 0.25.5 - '@esbuild/darwin-arm64': 0.25.5 - '@esbuild/darwin-x64': 0.25.5 - '@esbuild/freebsd-arm64': 0.25.5 - '@esbuild/freebsd-x64': 0.25.5 - '@esbuild/linux-arm': 0.25.5 - '@esbuild/linux-arm64': 0.25.5 - '@esbuild/linux-ia32': 0.25.5 - '@esbuild/linux-loong64': 0.25.5 - '@esbuild/linux-mips64el': 0.25.5 - '@esbuild/linux-ppc64': 0.25.5 - '@esbuild/linux-riscv64': 0.25.5 - '@esbuild/linux-s390x': 0.25.5 - '@esbuild/linux-x64': 0.25.5 - '@esbuild/netbsd-arm64': 0.25.5 - '@esbuild/netbsd-x64': 0.25.5 - '@esbuild/openbsd-arm64': 0.25.5 - '@esbuild/openbsd-x64': 0.25.5 - '@esbuild/sunos-x64': 0.25.5 - '@esbuild/win32-arm64': 0.25.5 - '@esbuild/win32-ia32': 0.25.5 - '@esbuild/win32-x64': 0.25.5 + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 escalade@3.1.2: {} @@ -10741,6 +10796,9 @@ snapshots: exit@0.1.2: {} + expand-template@2.0.3: + optional: true + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 @@ -10797,9 +10855,9 @@ snapshots: body-parser: 2.2.0 content-disposition: 1.0.0 content-type: 1.0.5 - cookie: 0.7.2 + cookie: 0.7.1 cookie-signature: 1.2.2 - debug: 4.4.1 + debug: 4.4.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -10807,7 +10865,7 @@ snapshots: fresh: 2.0.0 http-errors: 2.0.0 merge-descriptors: 2.0.0 - mime-types: 3.0.0 + mime-types: 3.0.1 on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 @@ -10815,7 +10873,7 @@ snapshots: qs: 6.14.0 range-parser: 1.2.1 router: 2.2.0 - send: 1.1.0 + send: 1.2.0 serve-static: 2.2.0 statuses: 2.0.1 type-is: 2.0.1 @@ -10831,14 +10889,11 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-text-encoding@1.0.6: - optional: true - fast-uri@3.0.6: {} - fast-xml-parser@4.5.3: + fast-xml-parser@4.3.6: dependencies: - strnum: 1.1.2 + strnum: 1.0.5 optional: true faye-websocket@0.11.4: @@ -10849,7 +10904,7 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.4.6(picomatch@4.0.2): + fdir@6.4.2(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -10860,7 +10915,7 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - file-type-checker@1.1.4: {} + file-type-checker@1.1.3: {} filelist@1.0.4: dependencies: @@ -10884,7 +10939,7 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.1 + debug: 4.4.0 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -10903,98 +10958,72 @@ snapshots: path-exists: 4.0.0 firebase-admin@12.3.1(encoding@0.1.13): - dependencies: - '@fastify/busboy': 3.1.1 - '@firebase/database-compat': 1.0.10 - '@firebase/database-types': 1.0.14 - '@types/node': 22.15.32 - farmhash-modern: 1.1.0 - jsonwebtoken: 9.0.2 - jwks-rsa: 3.2.0 - node-forge: 1.3.1 - uuid: 10.0.0 - optionalDependencies: - '@google-cloud/firestore': 7.11.1(encoding@0.1.13) - '@google-cloud/storage': 7.16.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - optional: true - - firebase-admin@13.4.0(encoding@0.1.13): dependencies: '@fastify/busboy': 3.0.0 - '@firebase/database-compat': 2.0.10 - '@firebase/database-types': 1.0.14 - '@types/node': 22.15.32 + '@firebase/database-compat': 1.0.4 + '@firebase/database-types': 1.0.2 + '@types/node': 22.15.17 farmhash-modern: 1.1.0 - google-auth-library: 9.15.1(encoding@0.1.13) jsonwebtoken: 9.0.2 jwks-rsa: 3.1.0 node-forge: 1.3.1 - uuid: 11.1.0 + uuid: 10.0.0 optionalDependencies: '@google-cloud/firestore': 7.11.0(encoding@0.1.13) - '@google-cloud/storage': 7.16.0(encoding@0.1.13) + '@google-cloud/storage': 7.10.1(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - firebase-functions@6.3.2(firebase-admin@13.4.0(encoding@0.1.13)): + firebase-functions@6.3.1(firebase-admin@12.3.1(encoding@0.1.13)): dependencies: - '@types/cors': 2.8.19 - '@types/express': 4.17.23 + '@types/cors': 2.8.17 + '@types/express': 4.17.21 cors: 2.8.5 express: 4.21.2 - firebase-admin: 13.4.0(encoding@0.1.13) + firebase-admin: 12.3.1(encoding@0.1.13) protobufjs: 7.3.2 transitivePeerDependencies: - supports-color - firebase@11.9.1: + firebase@11.6.0: dependencies: - '@firebase/ai': 1.4.0(@firebase/app-types@0.9.3)(@firebase/app@0.13.1) - '@firebase/analytics': 0.10.16(@firebase/app@0.13.1) - '@firebase/analytics-compat': 0.2.22(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1) - '@firebase/app': 0.13.1 - '@firebase/app-check': 0.10.0(@firebase/app@0.13.1) - '@firebase/app-check-compat': 0.3.25(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1) - '@firebase/app-compat': 0.4.1 + '@firebase/analytics': 0.10.12(@firebase/app@0.11.4) + '@firebase/analytics-compat': 0.2.18(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4) + '@firebase/app': 0.11.4 + '@firebase/app-check': 0.8.13(@firebase/app@0.11.4) + '@firebase/app-check-compat': 0.3.20(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4) + '@firebase/app-compat': 0.2.53 '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.10.7(@firebase/app@0.13.1) - '@firebase/auth-compat': 0.5.27(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1) - '@firebase/data-connect': 0.3.9(@firebase/app@0.13.1) - '@firebase/database': 1.0.19 - '@firebase/database-compat': 2.0.10 - '@firebase/firestore': 4.7.17(@firebase/app@0.13.1) - '@firebase/firestore-compat': 0.3.52(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1) - '@firebase/functions': 0.12.8(@firebase/app@0.13.1) - '@firebase/functions-compat': 0.3.25(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1) - '@firebase/installations': 0.6.17(@firebase/app@0.13.1) - '@firebase/installations-compat': 0.2.17(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1) - '@firebase/messaging': 0.12.21(@firebase/app@0.13.1) - '@firebase/messaging-compat': 0.2.21(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1) - '@firebase/performance': 0.7.6(@firebase/app@0.13.1) - '@firebase/performance-compat': 0.2.19(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1) - '@firebase/remote-config': 0.6.4(@firebase/app@0.13.1) - '@firebase/remote-config-compat': 0.2.17(@firebase/app-compat@0.4.1)(@firebase/app@0.13.1) - '@firebase/storage': 0.13.13(@firebase/app@0.13.1) - '@firebase/storage-compat': 0.3.23(@firebase/app-compat@0.4.1)(@firebase/app-types@0.9.3)(@firebase/app@0.13.1) - '@firebase/util': 1.12.0 + '@firebase/auth': 1.10.0(@firebase/app@0.11.4) + '@firebase/auth-compat': 0.5.20(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4) + '@firebase/data-connect': 0.3.3(@firebase/app@0.11.4) + '@firebase/database': 1.0.14 + '@firebase/database-compat': 2.0.5 + '@firebase/firestore': 4.7.10(@firebase/app@0.11.4) + '@firebase/firestore-compat': 0.3.45(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4) + '@firebase/functions': 0.12.3(@firebase/app@0.11.4) + '@firebase/functions-compat': 0.3.20(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4) + '@firebase/installations': 0.6.13(@firebase/app@0.11.4) + '@firebase/installations-compat': 0.2.13(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4) + '@firebase/messaging': 0.12.17(@firebase/app@0.11.4) + '@firebase/messaging-compat': 0.2.17(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4) + '@firebase/performance': 0.7.2(@firebase/app@0.11.4) + '@firebase/performance-compat': 0.2.15(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4) + '@firebase/remote-config': 0.6.0(@firebase/app@0.11.4) + '@firebase/remote-config-compat': 0.2.13(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4) + '@firebase/storage': 0.13.7(@firebase/app@0.11.4) + '@firebase/storage-compat': 0.3.17(@firebase/app-compat@0.2.53)(@firebase/app-types@0.9.3)(@firebase/app@0.11.4) + '@firebase/util': 1.11.0 + '@firebase/vertexai': 1.2.1(@firebase/app-types@0.9.3)(@firebase/app@0.11.4) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - fix-dts-default-cjs-exports@1.0.1: - dependencies: - magic-string: 0.30.17 - mlly: 1.7.4 - rollup: 4.43.0 - flat@5.0.2: {} fn.name@1.1.0: {} - for-each@0.3.5: + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -11032,6 +11061,9 @@ snapshots: fresh@2.0.0: {} + fs-constants@1.0.0: + optional: true + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -11039,30 +11071,17 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.8: + function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 + call-bind: 1.0.7 define-properties: 1.2.1 + es-abstract: 1.23.2 functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 functional-red-black-tree@1.0.1: {} functions-have-names@1.2.3: {} - gaxios@5.1.3(encoding@0.1.13): - dependencies: - extend: 3.0.2 - https-proxy-agent: 5.0.1 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - optional: true - gaxios@6.3.0(encoding@0.1.13): dependencies: extend: 3.0.2 @@ -11073,27 +11092,6 @@ snapshots: - encoding - supports-color - gaxios@6.7.1(encoding@0.1.13): - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - - gcp-metadata@5.3.0(encoding@0.1.13): - dependencies: - gaxios: 5.1.3(encoding@0.1.13) - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - gcp-metadata@6.1.0(encoding@0.1.13): dependencies: gaxios: 6.3.0(encoding@0.1.13) @@ -11102,12 +11100,12 @@ snapshots: - encoding - supports-color - genkitx-openai@0.10.1(@genkit-ai/ai@1.12.0)(@genkit-ai/core@1.12.0): + genkitx-openai@0.10.1(@genkit-ai/ai@1.13.0)(@genkit-ai/core@1.13.0): dependencies: - '@genkit-ai/ai': 1.12.0 - '@genkit-ai/core': 1.12.0 - openai: 4.104.0(encoding@0.1.13)(zod@3.25.67) - zod: 3.25.67 + '@genkit-ai/ai': 1.13.0 + '@genkit-ai/core': 1.13.0 + openai: 4.97.0(encoding@0.1.13)(zod@3.24.1) + zod: 3.24.1 transitivePeerDependencies: - encoding - ws @@ -11154,16 +11152,19 @@ snapshots: get-stream@6.0.1: {} - get-symbol-description@1.1.0: + get-symbol-description@1.0.2: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 - get-tsconfig@4.10.1: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 + github-from-package@0.0.0: + optional: true + glob@10.3.12: dependencies: foreground-child: 3.1.1 @@ -11192,47 +11193,48 @@ snapshots: globals@11.12.0: {} - globalthis@1.0.4: + globalthis@1.0.3: dependencies: define-properties: 1.2.1 - gopd: 1.2.0 - google-auth-library@8.9.0(encoding@0.1.13): + google-auth-library@9.14.2(encoding@0.1.13): dependencies: - arrify: 2.0.1 base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - fast-text-encoding: 1.0.6 - gaxios: 5.1.3(encoding@0.1.13) - gcp-metadata: 5.3.0(encoding@0.1.13) - gtoken: 6.1.2(encoding@0.1.13) + gaxios: 6.3.0(encoding@0.1.13) + gcp-metadata: 6.1.0(encoding@0.1.13) + gtoken: 7.1.0(encoding@0.1.13) jws: 4.0.0 - lru-cache: 6.0.0 transitivePeerDependencies: - encoding - supports-color - optional: true - google-auth-library@9.15.1(encoding@0.1.13): + google-gax@4.3.2(encoding@0.1.13): dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 6.3.0(encoding@0.1.13) - gcp-metadata: 6.1.0(encoding@0.1.13) - gtoken: 7.1.0(encoding@0.1.13) - jws: 4.0.0 + '@grpc/grpc-js': 1.10.4 + '@grpc/proto-loader': 0.7.12 + '@types/long': 4.0.2 + abort-controller: 3.0.0 + duplexify: 4.1.3 + google-auth-library: 9.14.2(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) + object-hash: 3.0.0 + proto3-json-serializer: 2.0.1 + protobufjs: 7.2.6 + retry-request: 7.0.2(encoding@0.1.13) + uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color - google-gax@4.6.1(encoding@0.1.13): + google-gax@4.3.7(encoding@0.1.13): dependencies: '@grpc/grpc-js': 1.10.10 '@grpc/proto-loader': 0.7.13 '@types/long': 4.0.2 abort-controller: 3.0.0 duplexify: 4.1.3 - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) node-fetch: 2.7.0(encoding@0.1.13) object-hash: 3.0.0 proto3-json-serializer: 2.0.2 @@ -11243,16 +11245,29 @@ snapshots: - encoding - supports-color - google-p12-pem@4.0.1: + google-gax@4.4.1(encoding@0.1.13): dependencies: - node-forge: 1.3.1 - optional: true + '@grpc/grpc-js': 1.10.10 + '@grpc/proto-loader': 0.7.13 + '@types/long': 4.0.2 + abort-controller: 3.0.0 + duplexify: 4.1.3 + google-auth-library: 9.14.2(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) + object-hash: 3.0.0 + proto3-json-serializer: 2.0.2 + protobufjs: 7.3.2 + retry-request: 7.0.2(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color googleapis-common@7.2.0(encoding@0.1.13): dependencies: extend: 3.0.2 gaxios: 6.3.0(encoding@0.1.13) - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) qs: 6.13.0 url-template: 2.0.8 uuid: 9.0.1 @@ -11262,7 +11277,7 @@ snapshots: googleapis@137.1.0(encoding@0.1.13): dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) googleapis-common: 7.2.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -11270,26 +11285,20 @@ snapshots: googleapis@140.0.1(encoding@0.1.13): dependencies: - google-auth-library: 9.15.1(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) googleapis-common: 7.2.0(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + gopd@1.2.0: {} graceful-fs@4.2.11: {} - gtoken@6.1.2(encoding@0.1.13): - dependencies: - gaxios: 5.1.3(encoding@0.1.13) - google-p12-pem: 4.0.1 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - optional: true - gtoken@7.1.0(encoding@0.1.13): dependencies: gaxios: 6.3.0(encoding@0.1.13) @@ -11307,7 +11316,7 @@ snapshots: optionalDependencies: uglify-js: 3.17.4 - has-bigints@1.1.0: {} + has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -11315,21 +11324,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.1 + es-define-property: 1.0.0 has-proto@1.0.3: {} - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.0.3: {} has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.1.0 + has-symbols: 1.0.3 hasown@2.0.2: dependencies: @@ -11337,9 +11342,6 @@ snapshots: hosted-git-info@2.8.9: {} - html-entities@2.6.0: - optional: true - html-escaper@2.0.2: {} http-errors@2.0.0: @@ -11350,20 +11352,20 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-parser-js@0.5.10: {} + http-parser-js@0.5.8: {} http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -11374,14 +11376,6 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - optional: true - human-signals@2.1.0: {} humanize-ms@1.2.1: @@ -11398,6 +11392,9 @@ snapshots: idb@7.1.1: {} + ieee754@1.2.1: + optional: true + ignore@5.3.1: optional: true @@ -11424,7 +11421,10 @@ snapshots: inherits@2.0.4: {} - internal-slot@1.1.0: + ini@1.3.8: + optional: true + + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 @@ -11434,31 +11434,22 @@ snapshots: is-any-array@2.0.1: {} - is-array-buffer@3.0.5: + is-array-buffer@3.0.4: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-arrayish@0.2.1: {} is-arrayish@0.3.2: {} - is-async-function@2.1.1: + is-bigint@1.0.4: dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 + has-bigints: 1.0.2 - is-bigint@1.1.0: + is-boolean-object@1.1.2: dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 has-tostringtag: 1.0.2 is-buffer@1.1.6: {} @@ -11469,43 +11460,22 @@ snapshots: dependencies: hasown: 2.0.2 - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: + is-data-view@1.0.1: dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 + is-typed-array: 1.1.13 - is-date-object@1.1.0: + is-date-object@1.0.5: dependencies: - call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-map@2.0.3: {} - is-negative-zero@2.0.3: {} - is-number-object@1.1.1: + is-number-object@1.0.7: dependencies: - call-bound: 1.0.4 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -11514,46 +11484,32 @@ snapshots: is-promise@4.0.0: {} - is-regex@1.2.1: + is-regex@1.1.4: dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 + call-bind: 1.0.7 has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - is-shared-array-buffer@1.0.4: + is-shared-array-buffer@1.0.3: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 is-stream@2.0.1: {} - is-string@1.1.1: + is-string@1.0.7: dependencies: - call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-symbol@1.1.1: + is-symbol@1.0.4: dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-weakmap@2.0.2: {} + has-symbols: 1.0.3 - is-weakref@1.1.1: + is-typed-array@1.1.13: dependencies: - call-bound: 1.0.4 + which-typed-array: 1.1.15 - is-weakset@2.0.4: + is-weakref@1.0.2: dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + call-bind: 1.0.7 is@3.3.0: {} @@ -11588,7 +11544,7 @@ snapshots: '@babel/parser': 7.25.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -11600,7 +11556,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -11640,7 +11596,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -11660,16 +11616,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)): + jest-cli@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + create-jest: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + jest-config: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11679,16 +11635,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest-cli@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + create-jest: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11698,7 +11654,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)): + jest-config@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)): dependencies: '@babel/core': 7.25.7 '@jest/test-sequencer': 29.7.0 @@ -11723,13 +11679,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.19.1 - ts-node: 10.9.2(@types/node@20.19.1)(typescript@4.9.5) + '@types/node': 20.17.17 + ts-node: 10.9.2(@types/node@20.17.17)(typescript@4.9.5) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)): dependencies: '@babel/core': 7.25.7 '@jest/test-sequencer': 29.7.0 @@ -11754,8 +11710,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.19.1 - ts-node: 10.9.2(@types/node@20.19.1)(typescript@5.8.3) + '@types/node': 20.17.17 + ts-node: 10.9.2(@types/node@20.17.17)(typescript@5.6.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -11784,7 +11740,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -11794,7 +11750,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.1 + '@types/node': 20.17.17 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -11833,7 +11789,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -11868,7 +11824,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -11896,7 +11852,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -11942,7 +11898,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -11961,7 +11917,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.17.17 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -11970,29 +11926,29 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.19.1 + '@types/node': 20.17.17 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)): + jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + jest-cli: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-cli: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12001,19 +11957,12 @@ snapshots: jose@4.15.5: {} - jose@4.15.9: - optional: true - joycon@3.1.1: {} js-tiktoken@1.0.11: dependencies: base64-js: 1.5.1 - js-tiktoken@1.0.20: - dependencies: - base64-js: 1.5.1 - js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -12058,7 +12007,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.2 + semver: 7.6.3 jwa@1.4.1: dependencies: @@ -12074,27 +12023,15 @@ snapshots: jwks-rsa@3.1.0: dependencies: - '@types/express': 4.17.23 + '@types/express': 4.17.21 '@types/jsonwebtoken': 9.0.6 - debug: 4.4.1 + debug: 4.4.0 jose: 4.15.5 limiter: 1.1.5 lru-memoizer: 2.2.0 transitivePeerDependencies: - supports-color - jwks-rsa@3.2.0: - dependencies: - '@types/express': 4.17.23 - '@types/jsonwebtoken': 9.0.10 - debug: 4.4.1 - jose: 4.15.9 - limiter: 1.1.5 - lru-memoizer: 2.3.0 - transitivePeerDependencies: - - supports-color - optional: true - jws@3.2.2: dependencies: jwa: 1.4.1 @@ -12109,11 +12046,11 @@ snapshots: kuler@2.0.0: {} - langchain@0.1.37(@google-cloud/storage@7.16.0(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(fast-xml-parser@4.5.3)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(pdf-parse@1.1.1): + langchain@0.1.36(@google-cloud/storage@7.10.1(encoding@0.1.13))(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(fast-xml-parser@4.3.6)(firebase-admin@12.3.1(encoding@0.1.13))(handlebars@4.7.8)(ignore@5.3.1)(jsonwebtoken@9.0.2)(pdf-parse@1.1.1): dependencies: '@anthropic-ai/sdk': 0.9.1(encoding@0.1.13) - '@langchain/community': 0.0.53(@pinecone-database/pinecone@2.2.2)(chromadb@1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(google-auth-library@8.9.0(encoding@0.1.13))(jsonwebtoken@9.0.2) - '@langchain/core': 0.1.63 + '@langchain/community': 0.0.53(@pinecone-database/pinecone@2.2.0)(chromadb@1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(firebase-admin@12.3.1(encoding@0.1.13))(jsonwebtoken@9.0.2) + '@langchain/core': 0.1.61 '@langchain/openai': 0.0.28(encoding@0.1.13) '@langchain/textsplitters': 0.0.0 binary-extensions: 2.3.0 @@ -12126,15 +12063,14 @@ snapshots: openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 9.0.1 - yaml: 2.8.0 - zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + yaml: 2.7.0 + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) optionalDependencies: - '@google-cloud/storage': 7.16.0(encoding@0.1.13) - '@pinecone-database/pinecone': 2.2.2 - chromadb: 1.9.2(encoding@0.1.13)(openai@4.104.0(encoding@0.1.13)(zod@3.25.67)) - fast-xml-parser: 4.5.3 - google-auth-library: 8.9.0(encoding@0.1.13) + '@google-cloud/storage': 7.10.1(encoding@0.1.13) + '@pinecone-database/pinecone': 2.2.0 + chromadb: 1.9.2(encoding@0.1.13)(openai@4.97.0(encoding@0.1.13)(zod@3.24.1)) + fast-xml-parser: 4.3.6 handlebars: 4.7.8 ignore: 5.3.1 pdf-parse: 1.1.1 @@ -12282,21 +12218,10 @@ snapshots: safe-stable-stringify: 2.4.3 triple-beam: 1.4.1 - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.4.3 - triple-beam: 1.4.1 - long@1.1.5: {} long@5.2.3: {} - long@5.3.2: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -12323,21 +12248,11 @@ snapshots: lodash.clonedeep: 4.5.0 lru-cache: 4.0.2 - lru-memoizer@2.3.0: - dependencies: - lodash.clonedeep: 4.5.0 - lru-cache: 6.0.0 - optional: true - lunr@2.3.9: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - make-dir@4.0.0: dependencies: - semver: 7.7.2 + semver: 7.6.3 make-error@1.3.6: {} @@ -12391,10 +12306,6 @@ snapshots: dependencies: mime-db: 1.52.0 - mime-types@3.0.0: - dependencies: - mime-db: 1.54.0 - mime-types@3.0.1: dependencies: mime-db: 1.54.0 @@ -12406,26 +12317,35 @@ snapshots: mimic-fn@2.1.0: {} + mimic-response@2.1.0: + optional: true + + mimic-response@3.1.0: + optional: true + minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.11 minimatch@5.1.6: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.1 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.1 minimist@1.2.8: {} minipass@7.1.2: {} + mkdirp-classic@0.5.3: + optional: true + ml-array-mean@1.1.6: dependencies: ml-array-sum: 1.1.6 @@ -12447,13 +12367,6 @@ snapshots: binary-search: 1.3.6 num-sort: 2.1.0 - mlly@1.7.4: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - module-details-from-path@1.0.3: {} ms@2.0.0: {} @@ -12468,11 +12381,11 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.11: - optional: true - nanoid@3.3.8: {} + napi-build-utils@1.0.2: + optional: true + natural-compare@1.4.0: {} negotiator@0.6.3: {} @@ -12481,9 +12394,9 @@ snapshots: neo-async@2.6.2: {} - next@15.3.3(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@15.2.4(@babel/core@7.25.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 15.3.3 + '@next/env': 15.2.4 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -12493,20 +12406,28 @@ snapshots: react-dom: 18.3.1(react@18.3.1) styled-jsx: 5.1.6(@babel/core@7.25.7)(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.3 - '@next/swc-darwin-x64': 15.3.3 - '@next/swc-linux-arm64-gnu': 15.3.3 - '@next/swc-linux-arm64-musl': 15.3.3 - '@next/swc-linux-x64-gnu': 15.3.3 - '@next/swc-linux-x64-musl': 15.3.3 - '@next/swc-win32-arm64-msvc': 15.3.3 - '@next/swc-win32-x64-msvc': 15.3.3 + '@next/swc-darwin-arm64': 15.2.4 + '@next/swc-darwin-x64': 15.2.4 + '@next/swc-linux-arm64-gnu': 15.2.4 + '@next/swc-linux-arm64-musl': 15.2.4 + '@next/swc-linux-x64-gnu': 15.2.4 + '@next/swc-linux-x64-musl': 15.2.4 + '@next/swc-win32-arm64-msvc': 15.2.4 + '@next/swc-win32-x64-msvc': 15.2.4 '@opentelemetry/api': 1.9.0 - sharp: 0.34.2 + sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + node-abi@3.71.0: + dependencies: + semver: 7.6.3 + optional: true + + node-addon-api@7.1.1: + optional: true + node-domexception@1.0.0: {} node-ensure@0.0.0: {} @@ -12532,7 +12453,7 @@ snapshots: normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.10 + resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -12547,7 +12468,7 @@ snapshots: minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.8.3 + shell-quote: 1.8.1 string.prototype.padend: 3.1.6 npm-run-path@4.0.1: @@ -12566,16 +12487,14 @@ snapshots: object-keys@1.1.1: {} - object.assign@4.1.7: + object.assign@4.1.5: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 + call-bind: 1.0.7 define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 + has-symbols: 1.0.3 object-keys: 1.1.1 - ollama@0.5.16: + ollama@0.5.9: dependencies: whatwg-fetch: 3.6.20 @@ -12599,9 +12518,9 @@ snapshots: dependencies: which-pm-runs: 1.1.0 - openai@4.104.0(encoding@0.1.13)(zod@3.25.67): + openai@4.97.0(encoding@0.1.13)(zod@3.24.1): dependencies: - '@types/node': 18.19.112 + '@types/node': 18.19.53 '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 @@ -12609,18 +12528,12 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - zod: 3.25.67 + zod: 3.24.1 transitivePeerDependencies: - encoding openapi-types@12.1.3: {} - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-finally@1.0.0: {} p-limit@2.3.0: @@ -12703,13 +12616,14 @@ snapshots: dependencies: pify: 3.0.0 + path2d@0.2.2: + optional: true + path@0.12.7: dependencies: process: 0.11.10 util: 0.10.4 - pathe@2.0.3: {} - pdf-lib@1.17.1: dependencies: '@pdf-lib/standard-fonts': 1.0.0 @@ -12729,9 +12643,10 @@ snapshots: dommatrix: 1.0.3 web-streams-polyfill: 3.3.3 - pdfjs-dist@4.10.38: + pdfjs-dist@4.8.69: optionalDependencies: - '@napi-rs/canvas': 0.1.71 + canvas: 3.0.0-rc2 + path2d: 0.2.2 pg-int8@1.0.1: {} @@ -12763,21 +12678,15 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.7.4 - pathe: 2.0.3 - - possible-typed-array-names@1.1.0: {} + possible-typed-array-names@1.0.0: {} - postcss-load-config@6.0.1(postcss@8.4.47)(tsx@4.20.3)(yaml@2.8.0): + postcss-load-config@6.0.1(postcss@8.4.47)(tsx@4.20.3)(yaml@2.7.0): dependencies: lilconfig: 3.1.2 optionalDependencies: postcss: 8.4.47 tsx: 4.20.3 - yaml: 2.8.0 + yaml: 2.7.0 postcss@8.4.31: dependencies: @@ -12787,7 +12696,7 @@ snapshots: postcss@8.4.47: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 optional: true @@ -12802,6 +12711,22 @@ snapshots: dependencies: xtend: 4.0.2 + prebuild-install@7.1.2: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.71.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + optional: true + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -12815,6 +12740,10 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + proto3-json-serializer@2.0.1: + dependencies: + protobufjs: 7.3.2 + proto3-json-serializer@2.0.2: dependencies: protobufjs: 7.3.2 @@ -12823,7 +12752,7 @@ snapshots: dependencies: long: 1.1.5 - protobufjs@7.3.2: + protobufjs@7.2.6: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -12835,10 +12764,10 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.19.1 + '@types/node': 20.17.17 long: 5.2.3 - protobufjs@7.5.3: + protobufjs@7.3.2: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -12850,8 +12779,8 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.19.1 - long: 5.3.2 + '@types/node': 20.17.17 + long: 5.2.3 proxy-addr@2.0.7: dependencies: @@ -12901,6 +12830,14 @@ snapshots: iconv-lite: 0.6.3 unpipe: 1.0.0 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + optional: true + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -12932,26 +12869,13 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@4.1.2: {} + readdirp@4.0.2: {} - reflect.getprototypeof@1.0.10: + regexp.prototype.flags@1.5.2: dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 set-function-name: 2.0.2 require-directory@2.1.1: {} @@ -12976,12 +12900,6 @@ snapshots: resolve.exports@2.0.2: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: dependencies: is-core-module: 2.13.1 @@ -13004,35 +12922,33 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.1 - rollup@4.43.0: + rollup@4.25.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.43.0 - '@rollup/rollup-android-arm64': 4.43.0 - '@rollup/rollup-darwin-arm64': 4.43.0 - '@rollup/rollup-darwin-x64': 4.43.0 - '@rollup/rollup-freebsd-arm64': 4.43.0 - '@rollup/rollup-freebsd-x64': 4.43.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.43.0 - '@rollup/rollup-linux-arm-musleabihf': 4.43.0 - '@rollup/rollup-linux-arm64-gnu': 4.43.0 - '@rollup/rollup-linux-arm64-musl': 4.43.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.43.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.43.0 - '@rollup/rollup-linux-riscv64-gnu': 4.43.0 - '@rollup/rollup-linux-riscv64-musl': 4.43.0 - '@rollup/rollup-linux-s390x-gnu': 4.43.0 - '@rollup/rollup-linux-x64-gnu': 4.43.0 - '@rollup/rollup-linux-x64-musl': 4.43.0 - '@rollup/rollup-win32-arm64-msvc': 4.43.0 - '@rollup/rollup-win32-ia32-msvc': 4.43.0 - '@rollup/rollup-win32-x64-msvc': 4.43.0 + '@rollup/rollup-android-arm-eabi': 4.25.0 + '@rollup/rollup-android-arm64': 4.25.0 + '@rollup/rollup-darwin-arm64': 4.25.0 + '@rollup/rollup-darwin-x64': 4.25.0 + '@rollup/rollup-freebsd-arm64': 4.25.0 + '@rollup/rollup-freebsd-x64': 4.25.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.25.0 + '@rollup/rollup-linux-arm-musleabihf': 4.25.0 + '@rollup/rollup-linux-arm64-gnu': 4.25.0 + '@rollup/rollup-linux-arm64-musl': 4.25.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0 + '@rollup/rollup-linux-riscv64-gnu': 4.25.0 + '@rollup/rollup-linux-s390x-gnu': 4.25.0 + '@rollup/rollup-linux-x64-gnu': 4.25.0 + '@rollup/rollup-linux-x64-musl': 4.25.0 + '@rollup/rollup-win32-arm64-msvc': 4.25.0 + '@rollup/rollup-win32-ia32-msvc': 4.25.0 + '@rollup/rollup-win32-x64-msvc': 4.25.0 fsevents: 2.3.3 router@2.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.0 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -13040,26 +12956,20 @@ snapshots: transitivePeerDependencies: - supports-color - safe-array-concat@1.1.3: + safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 isarray: 2.0.5 safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: + safe-regex-test@1.0.3: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - is-regex: 1.2.1 + is-regex: 1.1.4 safe-stable-stringify@2.4.3: {} @@ -13079,8 +12989,6 @@ snapshots: semver@7.6.3: {} - semver@7.7.2: {} - send@0.19.0: dependencies: debug: 2.6.9 @@ -13099,26 +13007,9 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.1.0: - dependencies: - debug: 4.4.1 - destroy: 1.2.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime-types: 2.1.35 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - send@1.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -13155,8 +13046,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -13166,41 +13057,33 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - setprototypeof@1.2.0: {} - sharp@0.34.2: + sharp@0.33.5: dependencies: color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.2 + detect-libc: 2.0.3 + semver: 7.6.3 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.2 - '@img/sharp-darwin-x64': 0.34.2 - '@img/sharp-libvips-darwin-arm64': 1.1.0 - '@img/sharp-libvips-darwin-x64': 1.1.0 - '@img/sharp-libvips-linux-arm': 1.1.0 - '@img/sharp-libvips-linux-arm64': 1.1.0 - '@img/sharp-libvips-linux-ppc64': 1.1.0 - '@img/sharp-libvips-linux-s390x': 1.1.0 - '@img/sharp-libvips-linux-x64': 1.1.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.2 - '@img/sharp-linux-arm64': 0.34.2 - '@img/sharp-linux-s390x': 0.34.2 - '@img/sharp-linux-x64': 0.34.2 - '@img/sharp-linuxmusl-arm64': 0.34.2 - '@img/sharp-linuxmusl-x64': 0.34.2 - '@img/sharp-wasm32': 0.34.2 - '@img/sharp-win32-arm64': 0.34.2 - '@img/sharp-win32-ia32': 0.34.2 - '@img/sharp-win32-x64': 0.34.2 + '@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 optional: true shebang-command@2.0.0: @@ -13209,7 +13092,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.3: {} + shell-quote@1.8.1: {} shimmer@1.2.1: {} @@ -13252,6 +13135,23 @@ snapshots: signal-exit@4.1.0: {} + simple-concat@1.0.1: + optional: true + + simple-get@3.1.1: + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -13284,16 +13184,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 + spdx-license-ids: 3.0.17 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 + spdx-license-ids: 3.0.17 - spdx-license-ids@3.0.21: {} + spdx-license-ids@3.0.17: {} sprintf-js@1.0.3: {} @@ -13305,11 +13205,6 @@ snapshots: statuses@2.0.1: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - stream-events@1.0.5: dependencies: stubs: 3.0.0 @@ -13343,33 +13238,29 @@ snapshots: string.prototype.padend@3.1.6: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 - string.prototype.trim@1.2.10: + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 + es-abstract: 1.23.2 + es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.9: + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 + call-bind: 1.0.7 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.0.0 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.8 + call-bind: 1.0.7 define-properties: 1.2.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.0.0 string_decoder@0.10.31: {} @@ -13391,9 +13282,12 @@ snapshots: strip-final-newline@2.0.0: {} + strip-json-comments@2.0.1: + optional: true + strip-json-comments@3.1.1: {} - strnum@1.1.2: + strnum@1.0.5: optional: true stubs@3.0.0: {} @@ -13429,6 +13323,23 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + tar-fs@2.1.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + optional: true + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true + teeny-request@9.0.0(encoding@0.1.13): dependencies: http-proxy-agent: 5.0.0 @@ -13456,11 +13367,11 @@ snapshots: dependencies: any-promise: 1.3.0 - tinyexec@0.3.2: {} + tinyexec@0.3.1: {} - tinyglobby@0.2.14: + tinyglobby@0.2.10: dependencies: - fdir: 6.4.6(picomatch@4.0.2) + fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 tmpl@1.0.5: {} @@ -13489,17 +13400,17 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)))(typescript@4.9.5): + ts-jest@29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5)) + jest: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5)) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.2 - type-fest: 4.41.0 + semver: 7.6.3 typescript: 4.9.5 yargs-parser: 21.1.1 optionalDependencies: @@ -13507,39 +13418,37 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.7) - jest-util: 29.7.0 - ts-jest@29.4.0(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.2.5(@babel/core@7.25.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.7))(jest@29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest: 29.7.0(@types/node@20.17.17)(ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3)) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.7.2 - type-fest: 4.41.0 - typescript: 5.8.3 + semver: 7.6.3 + typescript: 5.6.3 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.25.7 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.7) - jest-util: 29.7.0 ts-md5@1.3.1: {} - ts-node@10.9.2(@types/node@20.19.1)(typescript@4.9.5): + ts-node@10.9.2(@types/node@20.17.17)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.1 - acorn: 8.15.0 + '@types/node': 20.17.17 + acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 @@ -13550,21 +13459,21 @@ snapshots: yn: 3.1.1 optional: true - ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3): + ts-node@10.9.2(@types/node@20.17.17)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.1 - acorn: 8.15.0 + '@types/node': 20.17.17 + acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.8.3 + typescript: 5.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optional: true @@ -13575,24 +13484,23 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.8.0): + tsup@8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@4.9.5)(yaml@2.7.0): dependencies: - bundle-require: 5.1.0(esbuild@0.25.5) + bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.1 - esbuild: 0.25.5 - fix-dts-default-cjs-exports: 1.0.1 + chokidar: 4.0.1 + consola: 3.2.3 + debug: 4.3.7 + esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.4.47)(tsx@4.20.3)(yaml@2.8.0) + postcss-load-config: 6.0.1(postcss@8.4.47)(tsx@4.20.3)(yaml@2.7.0) resolve-from: 5.0.0 - rollup: 4.43.0 + rollup: 4.25.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyexec: 0.3.1 + tinyglobby: 0.2.10 tree-kill: 1.2.2 optionalDependencies: postcss: 8.4.47 @@ -13603,28 +13511,27 @@ snapshots: - tsx - yaml - tsup@8.5.0(postcss@8.4.47)(tsx@4.20.3)(typescript@5.8.3)(yaml@2.8.0): + tsup@8.3.5(postcss@8.4.47)(tsx@4.20.3)(typescript@5.6.3)(yaml@2.7.0): dependencies: - bundle-require: 5.1.0(esbuild@0.25.5) + bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.1 - esbuild: 0.25.5 - fix-dts-default-cjs-exports: 1.0.1 + chokidar: 4.0.1 + consola: 3.2.3 + debug: 4.3.7 + esbuild: 0.24.0 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.4.47)(tsx@4.20.3)(yaml@2.8.0) + postcss-load-config: 6.0.1(postcss@8.4.47)(tsx@4.20.3)(yaml@2.7.0) resolve-from: 5.0.0 - rollup: 4.43.0 + rollup: 4.25.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyexec: 0.3.1 + tinyglobby: 0.2.10 tree-kill: 1.2.2 optionalDependencies: postcss: 8.4.47 - typescript: 5.8.3 + typescript: 5.6.3 transitivePeerDependencies: - jiti - supports-color @@ -13633,19 +13540,22 @@ snapshots: tsx@4.20.3: dependencies: - esbuild: 0.25.5 - get-tsconfig: 4.10.1 + esbuild: 0.25.4 + get-tsconfig: 4.8.1 optionalDependencies: fsevents: 2.3.3 + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + optional: true + type-detect@4.0.8: {} type-detect@4.1.0: {} type-fest@0.21.3: {} - type-fest@4.41.0: {} - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -13655,40 +13565,39 @@ snapshots: dependencies: content-type: 1.0.5 media-typer: 1.1.0 - mime-types: 3.0.0 + mime-types: 3.0.1 - typed-array-buffer@1.0.3: + typed-array-buffer@1.0.2: dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - is-typed-array: 1.1.15 + is-typed-array: 1.1.13 - typed-array-byte-length@1.0.3: + typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.4: + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - typed-array-length@1.0.7: + typed-array-length@1.0.6: dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 typedoc-github-theme@0.2.1(typedoc@0.27.9(typescript@4.9.5)): dependencies: @@ -13704,36 +13613,34 @@ snapshots: typedoc@0.27.9(typescript@4.9.5): dependencies: - '@gerrit0/mini-shiki': 1.27.2 + '@gerrit0/mini-shiki': 1.24.4 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 typescript: 4.9.5 - yaml: 2.8.0 + yaml: 2.7.0 typescript@4.9.5: {} - typescript@5.8.3: {} + typescript@5.6.3: {} uc.micro@2.1.0: {} - ufo@1.6.1: {} - uglify-js@3.17.4: optional: true - unbox-primitive@1.1.0: + unbox-primitive@1.0.2: dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 undici-types@5.26.5: {} - undici-types@6.21.0: {} + undici-types@6.19.8: {} - undici-types@7.8.0: {} + undici-types@6.21.0: {} unpipe@1.0.0: {} @@ -13759,8 +13666,6 @@ snapshots: uuid@10.0.0: {} - uuid@11.1.0: {} - uuid@8.3.2: {} uuid@9.0.1: {} @@ -13813,7 +13718,7 @@ snapshots: websocket-driver@0.7.4: dependencies: - http-parser-js: 0.5.10 + http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 @@ -13839,47 +13744,22 @@ snapshots: tr46: 1.0.1 webidl-conversions: 4.0.2 - which-boxed-primitive@1.1.1: + which-boxed-primitive@1.0.2: dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 which-pm-runs@1.1.0: {} - which-typed-array@1.1.19: + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 has-tostringtag: 1.0.2 which@2.0.2: @@ -13892,25 +13772,19 @@ snapshots: readable-stream: 3.6.2 triple-beam: 1.4.1 - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: + winston@3.13.0: dependencies: '@colors/colors': 1.6.0 '@dabh/diagnostics': 2.0.3 async: 3.2.5 is-stream: 2.0.1 - logform: 2.7.0 + logform: 2.6.0 one-time: 1.0.0 readable-stream: 3.6.2 safe-stable-stringify: 2.4.3 stack-trace: 0.0.10 triple-beam: 1.4.1 - winston-transport: 4.9.0 + winston-transport: 4.7.0 wordwrap@1.0.0: {} @@ -13945,8 +13819,6 @@ snapshots: yaml@2.7.0: {} - yaml@2.8.0: {} - yargs-parser@21.1.1: {} yargs@17.7.2: @@ -13964,10 +13836,10 @@ snapshots: yocto-queue@0.1.0: {} - zod-to-json-schema@3.24.5(zod@3.25.67): + zod-to-json-schema@3.24.1(zod@3.24.1): dependencies: - zod: 3.25.67 + zod: 3.24.1 zod@3.22.4: {} - zod@3.25.67: {} + zod@3.24.1: {} diff --git a/js/testapps/esm/package.json b/js/testapps/esm/package.json index b0d3b75f62..b0b77fbebc 100644 --- a/js/testapps/esm/package.json +++ b/js/testapps/esm/package.json @@ -25,6 +25,7 @@ "@genkit-ai/firebase": "workspace:*", "@genkit-ai/google-cloud": "workspace:*", "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/mcp": "workspace:*", "@genkit-ai/next": "workspace:^", "@genkit-ai/vertexai": "workspace:*", "firebase-admin": ">=12.2", diff --git a/js/testapps/esm/src/index.ts b/js/testapps/esm/src/index.ts index fbf61e20d5..7d0cedce07 100644 --- a/js/testapps/esm/src/index.ts +++ b/js/testapps/esm/src/index.ts @@ -22,6 +22,11 @@ import { enableFirebaseTelemetry } from '@genkit-ai/firebase'; import { firebaseContext } from '@genkit-ai/firebase/context'; import { enableGoogleCloudTelemetry } from '@genkit-ai/google-cloud'; import { googleAI } from '@genkit-ai/googleai'; +import { + createMcpClient, + createMcpHost, + createMcpServer, +} from '@genkit-ai/mcp'; import { appRoute } from '@genkit-ai/next'; import { vertexAI } from '@genkit-ai/vertexai'; import { vertexAIEvaluation } from '@genkit-ai/vertexai/evaluation'; @@ -46,6 +51,9 @@ pinecone; chroma; devLocalVectorstore; genkitEval; +createMcpClient; +createMcpServer; +createMcpHost; export const ai = genkit({}); const hello = ai.defineFlow('hello', () => 'hello'); diff --git a/js/testapps/flow-simple-ai/photo.mp4 b/js/testapps/flow-simple-ai/photo.mp4 new file mode 100644 index 0000000000..e15bc8cae4 Binary files /dev/null and b/js/testapps/flow-simple-ai/photo.mp4 differ diff --git a/js/testapps/mcp/README.md b/js/testapps/mcp/README.md new file mode 100644 index 0000000000..04f7026a0d --- /dev/null +++ b/js/testapps/mcp/README.md @@ -0,0 +1 @@ +# MCP sample diff --git a/js/testapps/mcp/package.json b/js/testapps/mcp/package.json new file mode 100644 index 0000000000..4fa6651c2b --- /dev/null +++ b/js/testapps/mcp/package.json @@ -0,0 +1,42 @@ +{ + "name": "mcp", + "version": "1.0.0", + "description": "", + "main": "lib/index.js", + "scripts": { + "start": "node lib/index.js", + "compile": "tsc", + "build": "pnpm build:clean && pnpm compile", + "build:clean": "rimraf ./lib", + "build:watch": "tsc --watch", + "dev": "tsx --watch src/index.ts", + "genkit:dev": "genkit start -- tsx --watch src/index.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@genkit-ai/dev-local-vectorstore": "workspace:*", + "@genkit-ai/evaluator": "workspace:*", + "@genkit-ai/googleai": "workspace:*", + "@genkit-ai/mcp": "workspace:*", + "@genkit-ai/vertexai": "workspace:*", + "@modelcontextprotocol/sdk": "^1.13.0", + "express": "^5.1.0", + "genkit": "workspace:*", + "genkitx-langchain": "workspace:*", + "llm-chunk": "^0.0.1", + "pdf-parse": "^1.1.1", + "pdfjs-dist": "^4.0.379", + "pdfjs-dist-legacy": "^1.0.1" + }, + "devDependencies": { + "@modelcontextprotocol/server-everything": "^2025.5.12", + "@modelcontextprotocol/server-filesystem": "^2025.3.28", + "@types/express": "^4.17.21", + "cross-env": "^7.0.3", + "rimraf": "^6.0.1", + "tsx": "^4.19.2", + "typescript": "^5.3.3" + } +} diff --git a/js/testapps/mcp/src/http-server.ts b/js/testapps/mcp/src/http-server.ts new file mode 100644 index 0000000000..3ac196329b --- /dev/null +++ b/js/testapps/mcp/src/http-server.ts @@ -0,0 +1,120 @@ +/** + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; +import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; +import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js'; +import express from 'express'; +import { randomUUID } from 'node:crypto'; + +export async function startTestServer() { + return new Promise>(async (resolve, reject) => { + const app = express(); + app.use(express.json()); + + // Map to store transports by session ID + const transports: { [sessionId: string]: StreamableHTTPServerTransport } = + {}; + + // Handle POST requests for client-to-server communication + app.post('/mcp', async (req, res) => { + // Check for existing session ID + const sessionId = req.headers['mcp-session-id'] as string | undefined; + let transport: StreamableHTTPServerTransport; + + if (sessionId && transports[sessionId]) { + // Reuse existing transport + transport = transports[sessionId]; + } else if (!sessionId && isInitializeRequest(req.body)) { + // New initialization request + transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: () => randomUUID(), + onsessioninitialized: (sessionId) => { + // Store the transport by session ID + transports[sessionId] = transport; + }, + }); + + // Clean up transport when closed + transport.onclose = () => { + if (transport.sessionId) { + delete transports[transport.sessionId]; + } + }; + const server = new McpServer({ + name: 'example-server', + version: '1.0.0', + }); + + server.tool('test_http', {}, async () => { + return { + content: [{ type: 'text', text: transport.sessionId || '' }], + }; + }); + + // Connect to the MCP server + await server.connect(transport); + } else { + // Invalid request + res.status(400).json({ + jsonrpc: '2.0', + error: { + code: -32000, + message: 'Bad Request: No valid session ID provided', + }, + id: null, + }); + return; + } + + // Handle the request + await transport.handleRequest(req, res, req.body); + }); + + // Reusable handler for GET and DELETE requests + const handleSessionRequest = async ( + req: express.Request, + res: express.Response + ) => { + const sessionId = req.headers['mcp-session-id'] as string | undefined; + if (!sessionId || !transports[sessionId]) { + res.status(400).send('Invalid or missing session ID'); + return; + } + + const transport = transports[sessionId]; + await transport.handleRequest(req, res); + }; + + // Handle GET requests for server-to-client notifications via SSE + app.get('/mcp', handleSessionRequest); + + // Handle DELETE requests for session termination + app.delete('/mcp', handleSessionRequest); + + app.listen(3334, () => resolve(app)); + }); +} + +async function main() { + const app = await startTestServer(); + const { ai, mcpHost } = await import('./index.js'); + await mcpHost.connect('http', { url: 'http://localhost:3334/mcp' }); + + console.log((await mcpHost.getActiveTools(ai)).map((t) => t.__action.name)); +} + +main(); diff --git a/js/testapps/mcp/src/index.ts b/js/testapps/mcp/src/index.ts new file mode 100644 index 0000000000..397d6ac6be --- /dev/null +++ b/js/testapps/mcp/src/index.ts @@ -0,0 +1,130 @@ +/** + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { googleAI } from '@genkit-ai/googleai'; +import { createMcpHost } from '@genkit-ai/mcp'; +import { genkit, z } from 'genkit'; +import { logger } from 'genkit/logging'; +import path from 'path'; + +// Turn off safety checks for evaluation so that the LLM as an evaluator can +// respond appropriately to potentially harmful content without error. +export const PERMISSIVE_SAFETY_SETTINGS: any = { + safetySettings: [ + { + category: 'HARM_CATEGORY_HATE_SPEECH', + threshold: 'BLOCK_NONE', + }, + { + category: 'HARM_CATEGORY_DANGEROUS_CONTENT', + threshold: 'BLOCK_NONE', + }, + { + category: 'HARM_CATEGORY_HARASSMENT', + threshold: 'BLOCK_NONE', + }, + { + category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT', + threshold: 'BLOCK_NONE', + }, + ], +}; + +export const ai = genkit({ + plugins: [googleAI()], + model: googleAI.model('gemini-2.5-pro-preview-03-25'), +}); + +logger.setLogLevel('debug'); // Set the logging level to debug for detailed output + +export const mcpHost = createMcpHost({ + name: 'test-mcp-manager', + mcpServers: { + 'git-client': { + command: 'uvx', + args: ['mcp-server-git'], + }, + fs: { + command: 'npx', + args: [ + '-y', + '@modelcontextprotocol/server-filesystem', + `${process.cwd()}/test-workspace`, + ], + }, + everything: { + command: 'npx', + args: ['-y', '@modelcontextprotocol/server-everything'], + }, + }, +}); + +ai.defineFlow('git-commits', async (q) => { + const { text } = await ai.generate({ + prompt: `summarize last 5 commits in '${path.resolve(process.cwd(), '../../..')}'`, + tools: await mcpHost.getActiveTools(ai), + }); + + return text; +}); + +ai.defineFlow('get-file', async (q) => { + const { text } = await ai.generate({ + prompt: `summarize contexts of hello-world.txt (in '${process.cwd()}/test-workspace')`, + tools: await mcpHost.getActiveTools(ai), + }); + + return text; +}); + +ai.defineFlow('update-file', async (q) => { + const { text } = await ai.generate({ + prompt: `Improve hello-world.txt (in '${process.cwd()}/test-workspace') by rewriting the text, making it longer, just do it, use your imagination.`, + tools: await mcpHost.getActiveTools(ai), + }); + + return text; +}); + +// MCP Controls +export const controlMcp = ai.defineFlow( + { + name: 'controlMcp', + inputSchema: z.object({ + action: z.enum(['RECONNECT', 'ENABLE', 'DISABLE', 'DISCONNECT'] as const), + clientId: z.string().optional(), + }), + outputSchema: z.string(), + }, + async ({ action, clientId }) => { + const id = clientId ?? 'git-client'; + switch (action) { + case 'DISABLE': + await mcpHost.disable(id); + break; + case 'DISCONNECT': + await mcpHost.disconnect(id); + break; + case 'RECONNECT': + await mcpHost.reconnect(id); + break; + case 'ENABLE': + await mcpHost.enable(id); + break; + } + return action; + } +); diff --git a/js/testapps/mcp/test-workspace/hello-world.txt b/js/testapps/mcp/test-workspace/hello-world.txt new file mode 100644 index 0000000000..2f9031f0ec --- /dev/null +++ b/js/testapps/mcp/test-workspace/hello-world.txt @@ -0,0 +1 @@ +Hi! \ No newline at end of file diff --git a/js/testapps/mcp/tsconfig.json b/js/testapps/mcp/tsconfig.json new file mode 100644 index 0000000000..e51f33ae38 --- /dev/null +++ b/js/testapps/mcp/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "NodeNext", + "noImplicitReturns": true, + "noUnusedLocals": false, + "outDir": "lib", + "sourceMap": true, + "strict": true, + "target": "es2017", + "skipLibCheck": true, + "esModuleInterop": true + }, + "compileOnSave": true, + "include": ["src"] +}