From 4199b3f13f9c1150899baf46d6ede56c3fe2d3f7 Mon Sep 17 00:00:00 2001 From: maplexu Date: Wed, 24 Jun 2026 17:06:24 -0400 Subject: [PATCH 1/6] AI-283: Add google-adk-agents samples for the Google ADK integration Seven scenarios under google-adk-agents/src/, each with its own README, all against @temporalio/google-adk-agents: basic (an LlmAgent whose model is a TemporalModel), tools (a Temporal Activity exposed to the agent with activityAsTool), agent-patterns (a transfer_to_agent relay across three agents), mcp (a TemporalMCPToolset backed by a filesystem MCP server the Worker opens over stdio), streaming (token streaming over a Workflow Stream from a direct TemporalModel call), human-approval (a LongRunningFunctionTool gated by a Signal or Update), and observability (agent-loop token usage and latency, by composing OpenTelemetryPlugin onto the Worker alongside GoogleAdkPlugin). One package.json and one set of configs at google-adk-agents/ rather than a project per scenario: one dependency set and one toolchain cover all seven, and the handful of packages only one or two scenarios import don't earn a project boundary. Registered in CI and CODEOWNERS, and excluded from the shared .post-create copy since the suite has its own. Every scenario is tested against a real Worker on TestWorkflowEnvironment, six of them driving a BaseLlm double and human-approval needing no model at all, so the suite runs in CI without a GEMINI_API_KEY. --- .github/CODEOWNERS | 11 ++- .github/workflows/ci.yml | 1 + .scripts/copy-shared-files.mjs | 1 + .scripts/list-of-samples.json | 1 + README.md | 8 ++ google-adk-agents/.eslintignore | 3 + google-adk-agents/.eslintrc.js | 48 +++++++++ google-adk-agents/.gitignore | 2 + google-adk-agents/.npmrc | 1 + google-adk-agents/.nvmrc | 1 + google-adk-agents/.post-create | 20 ++++ google-adk-agents/.prettierignore | 1 + google-adk-agents/.prettierrc | 2 + google-adk-agents/README.md | 28 ++++++ google-adk-agents/package.json | 44 +++++++++ .../src/agent-patterns/README.md | 25 +++++ .../src/agent-patterns/client.ts | 21 ++++ .../agent-patterns/mocha/workflows.test.ts | 81 ++++++++++++++++ .../src/agent-patterns/worker.ts | 22 +++++ .../src/agent-patterns/workflows.ts | 40 ++++++++ google-adk-agents/src/basic/README.md | 23 +++++ google-adk-agents/src/basic/client.ts | 21 ++++ .../src/basic/mocha/workflows.test.ts | 79 +++++++++++++++ google-adk-agents/src/basic/worker.ts | 22 +++++ google-adk-agents/src/basic/workflows.ts | 23 +++++ .../src/human-approval/README.md | 23 +++++ .../src/human-approval/client.ts | 22 +++++ .../human-approval/mocha/workflows.test.ts | 70 +++++++++++++ .../src/human-approval/worker.ts | 22 +++++ .../src/human-approval/workflows.ts | 43 ++++++++ google-adk-agents/src/mcp/README.md | 23 +++++ google-adk-agents/src/mcp/client.ts | 21 ++++ .../src/mcp/mocha/workflows.test.ts | 93 ++++++++++++++++++ .../src/mcp/sample-files/hello.txt | 2 + google-adk-agents/src/mcp/worker.ts | 37 +++++++ google-adk-agents/src/mcp/workflows.ts | 24 +++++ google-adk-agents/src/observability/README.md | 37 +++++++ .../observability/adk-usage-span-processor.ts | 33 +++++++ google-adk-agents/src/observability/client.ts | 21 ++++ .../src/observability/mocha/workflows.test.ts | 72 ++++++++++++++ google-adk-agents/src/observability/worker.ts | 38 ++++++++ .../src/observability/workflows.ts | 27 ++++++ google-adk-agents/src/streaming/README.md | 29 ++++++ google-adk-agents/src/streaming/client.ts | 35 +++++++ .../src/streaming/mocha/workflows.test.ts | 88 +++++++++++++++++ google-adk-agents/src/streaming/worker.ts | 22 +++++ google-adk-agents/src/streaming/workflows.ts | 44 +++++++++ google-adk-agents/src/tools/README.md | 23 +++++ google-adk-agents/src/tools/activities.ts | 3 + google-adk-agents/src/tools/client.ts | 21 ++++ .../src/tools/mocha/workflows.test.ts | 97 +++++++++++++++++++ google-adk-agents/src/tools/worker.ts | 24 +++++ google-adk-agents/src/tools/workflows.ts | 35 +++++++ google-adk-agents/tsconfig.json | 13 +++ 54 files changed, 1566 insertions(+), 5 deletions(-) create mode 100644 google-adk-agents/.eslintignore create mode 100644 google-adk-agents/.eslintrc.js create mode 100644 google-adk-agents/.gitignore create mode 100644 google-adk-agents/.npmrc create mode 100644 google-adk-agents/.nvmrc create mode 100644 google-adk-agents/.post-create create mode 100644 google-adk-agents/.prettierignore create mode 100644 google-adk-agents/.prettierrc create mode 100644 google-adk-agents/README.md create mode 100644 google-adk-agents/package.json create mode 100644 google-adk-agents/src/agent-patterns/README.md create mode 100644 google-adk-agents/src/agent-patterns/client.ts create mode 100644 google-adk-agents/src/agent-patterns/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/agent-patterns/worker.ts create mode 100644 google-adk-agents/src/agent-patterns/workflows.ts create mode 100644 google-adk-agents/src/basic/README.md create mode 100644 google-adk-agents/src/basic/client.ts create mode 100644 google-adk-agents/src/basic/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/basic/worker.ts create mode 100644 google-adk-agents/src/basic/workflows.ts create mode 100644 google-adk-agents/src/human-approval/README.md create mode 100644 google-adk-agents/src/human-approval/client.ts create mode 100644 google-adk-agents/src/human-approval/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/human-approval/worker.ts create mode 100644 google-adk-agents/src/human-approval/workflows.ts create mode 100644 google-adk-agents/src/mcp/README.md create mode 100644 google-adk-agents/src/mcp/client.ts create mode 100644 google-adk-agents/src/mcp/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/mcp/sample-files/hello.txt create mode 100644 google-adk-agents/src/mcp/worker.ts create mode 100644 google-adk-agents/src/mcp/workflows.ts create mode 100644 google-adk-agents/src/observability/README.md create mode 100644 google-adk-agents/src/observability/adk-usage-span-processor.ts create mode 100644 google-adk-agents/src/observability/client.ts create mode 100644 google-adk-agents/src/observability/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/observability/worker.ts create mode 100644 google-adk-agents/src/observability/workflows.ts create mode 100644 google-adk-agents/src/streaming/README.md create mode 100644 google-adk-agents/src/streaming/client.ts create mode 100644 google-adk-agents/src/streaming/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/streaming/worker.ts create mode 100644 google-adk-agents/src/streaming/workflows.ts create mode 100644 google-adk-agents/src/tools/README.md create mode 100644 google-adk-agents/src/tools/activities.ts create mode 100644 google-adk-agents/src/tools/client.ts create mode 100644 google-adk-agents/src/tools/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/tools/worker.ts create mode 100644 google-adk-agents/src/tools/workflows.ts create mode 100644 google-adk-agents/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a5a57c7ed..cb8381d47 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -3,8 +3,9 @@ # @temporalio/sdk will be requested for review when # someone opens a pull request. * @temporalio/sdk -/ai-sdk/ @temporalio/sdk @temporalio/ai-sdk -/langsmith/ @temporalio/sdk @temporalio/ai-sdk -/openai-agents/ @temporalio/sdk @temporalio/ai-sdk -/strands-agents/ @temporalio/sdk @temporalio/ai-sdk -/workflow-streams/ @temporalio/sdk @temporalio/ai-sdk +/ai-sdk/ @temporalio/sdk @temporalio/ai-sdk +/google-adk-agents/ @temporalio/sdk @temporalio/ai-sdk +/langsmith/ @temporalio/sdk @temporalio/ai-sdk +/openai-agents/ @temporalio/sdk @temporalio/ai-sdk +/strands-agents/ @temporalio/sdk @temporalio/ai-sdk +/workflow-streams/ @temporalio/sdk @temporalio/ai-sdk diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e79c09b2..82c72fc4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -60,6 +60,7 @@ jobs: eager-workflow-start early-return empty + google-adk-agents hello-world langsmith mutex diff --git a/.scripts/copy-shared-files.mjs b/.scripts/copy-shared-files.mjs index 8cb77b4b7..19fa5928a 100644 --- a/.scripts/copy-shared-files.mjs +++ b/.scripts/copy-shared-files.mjs @@ -62,6 +62,7 @@ const ESLINTIGNORE_EXCLUDE = [ const POST_CREATE_EXCLUDE = [ 'openai-agents', + 'google-adk-agents', 'env-config', 'dsl-interpreter', 'eager-workflow-start', diff --git a/.scripts/list-of-samples.json b/.scripts/list-of-samples.json index 56d850fe2..f0f769a6d 100644 --- a/.scripts/list-of-samples.json +++ b/.scripts/list-of-samples.json @@ -19,6 +19,7 @@ "expense", "fetch-esm", "food-delivery", + "google-adk-agents", "grpc-calls", "hello-world", "hello-world-js", diff --git a/README.md b/README.md index 34d6a84de..22cc6f879 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,14 @@ and you'll be given the list of sample options. - [**Customer Service**](./openai-agents/customer-service): A long-running, multi-turn Workflow driven by Updates and Queries, with triage handoffs and `continueAsNew` to bound history. - [**Nexus Tools**](./openai-agents/nexus-tools): Expose a Nexus Operation as an agent tool with `nexusOperationAsTool`. - [**Streaming**](./openai-agents/src/streaming): Run an agent in streaming mode over a Workflow Stream, with an external client subscribing to the model's deltas live. +- [**Google ADK Agents**](./google-adk-agents): Run [Google Agent Development Kit](https://github.com/google/adk-js) (`@google/adk`) agents as Temporal Workflows with the `@temporalio/google-adk-agents` integration. The [`google-adk-agents/`](./google-adk-agents) directory contains seven samples: + - [**Basic**](./google-adk-agents/src/basic): A single `LlmAgent` whose model is a `TemporalModel`, driven by `InMemoryRunner` for one durable model call. + - [**Tools**](./google-adk-agents/src/tools): An existing Temporal Activity exposed to the agent as an ADK tool with `activityAsTool`. + - [**Agent Patterns**](./google-adk-agents/src/agent-patterns): A coordinator `LlmAgent` starts an ADK `transfer_to_agent` relay through a researcher and a writer, each with its own `TemporalModel`. + - [**MCP**](./google-adk-agents/src/mcp): A `TemporalMCPToolset` backed by a filesystem MCP server the Worker opens over stdio. + - [**Streaming**](./google-adk-agents/src/streaming): Token streaming from a direct `TemporalModel` call — no agent loop — over a Workflow Stream, with an external client printing the deltas as they arrive. + - [**Human Approval**](./google-adk-agents/src/human-approval): A `LongRunningFunctionTool` whose completion is gated by a Temporal Signal or Update. + - [**Observability**](./google-adk-agents/src/observability): Token usage, latency, and call counts from the agent loop's OpenTelemetry spans, by composing `OpenTelemetryPlugin` onto the Worker alongside `GoogleAdkPlugin`. ### Full-stack apps diff --git a/google-adk-agents/.eslintignore b/google-adk-agents/.eslintignore new file mode 100644 index 000000000..7bd99a41b --- /dev/null +++ b/google-adk-agents/.eslintignore @@ -0,0 +1,3 @@ +node_modules +lib +.eslintrc.js \ No newline at end of file diff --git a/google-adk-agents/.eslintrc.js b/google-adk-agents/.eslintrc.js new file mode 100644 index 000000000..9f199cd97 --- /dev/null +++ b/google-adk-agents/.eslintrc.js @@ -0,0 +1,48 @@ +const { builtinModules } = require('module'); + +const ALLOWED_NODE_BUILTINS = new Set(['assert']); + +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, + plugins: ['@typescript-eslint', 'deprecation'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + ], + rules: { + // recommended for safety + '@typescript-eslint/no-floating-promises': 'error', // forgetting to await Activities and Workflow APIs is bad + 'deprecation/deprecation': 'warn', + + // code style preference + 'object-shorthand': ['error', 'always'], + + // relaxed rules, for convenience + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/no-explicit-any': 'off', + }, + overrides: [ + { + files: ['src/**/workflows.ts', 'src/**/workflows-*.ts', 'src/**/workflows/*.ts'], + rules: { + 'no-restricted-imports': [ + 'error', + ...builtinModules.filter((m) => !ALLOWED_NODE_BUILTINS.has(m)).flatMap((m) => [m, `node:${m}`]), + ], + }, + }, + ], +}; diff --git a/google-adk-agents/.gitignore b/google-adk-agents/.gitignore new file mode 100644 index 000000000..a9f4ed545 --- /dev/null +++ b/google-adk-agents/.gitignore @@ -0,0 +1,2 @@ +lib +node_modules \ No newline at end of file diff --git a/google-adk-agents/.npmrc b/google-adk-agents/.npmrc new file mode 100644 index 000000000..9cf949503 --- /dev/null +++ b/google-adk-agents/.npmrc @@ -0,0 +1 @@ +package-lock=false \ No newline at end of file diff --git a/google-adk-agents/.nvmrc b/google-adk-agents/.nvmrc new file mode 100644 index 000000000..2bd5a0a98 --- /dev/null +++ b/google-adk-agents/.nvmrc @@ -0,0 +1 @@ +22 diff --git a/google-adk-agents/.post-create b/google-adk-agents/.post-create new file mode 100644 index 000000000..23ce8a44c --- /dev/null +++ b/google-adk-agents/.post-create @@ -0,0 +1,20 @@ +To begin development, install the Temporal CLI: + +Mac: {cyan brew install temporal} +Other: Download and extract the latest release from https://github.com/temporalio/cli/releases/latest + +Start Temporal Server: + +{cyan temporal server start-dev} + +Use Node version 22 or later: + +Mac: {cyan brew install node@22} +Other: https://nodejs.org/en/download/ + +This sample has several scenarios under {cyan src/}. Using two other shells, start a Worker for one scenario and run its client (example: {cyan basic}): + +{cyan GEMINI_API_KEY= npx ts-node src/basic/worker.ts} +{cyan npx ts-node src/basic/client.ts} + +See README.md for the full list of scenarios. diff --git a/google-adk-agents/.prettierignore b/google-adk-agents/.prettierignore new file mode 100644 index 000000000..7951405f8 --- /dev/null +++ b/google-adk-agents/.prettierignore @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/google-adk-agents/.prettierrc b/google-adk-agents/.prettierrc new file mode 100644 index 000000000..965d50bff --- /dev/null +++ b/google-adk-agents/.prettierrc @@ -0,0 +1,2 @@ +printWidth: 120 +singleQuote: true diff --git a/google-adk-agents/README.md b/google-adk-agents/README.md new file mode 100644 index 000000000..380894322 --- /dev/null +++ b/google-adk-agents/README.md @@ -0,0 +1,28 @@ +# Google ADK Agents + +These samples use the `@temporalio/google-adk-agents` integration to run [Google Agent Development Kit](https://github.com/google/adk-js) (`@google/adk`) agents as durable Temporal Workflows. The ADK agent graph — the `Runner` loop, `LlmAgent`s, tools, and MCP toolsets — runs inside the Workflow and replays deterministically, while its non-deterministic I/O — model calls, MCP tool calls, and Activities exposed as tools — runs as durable Activities, so they retry on failure and are not repeated during Workflow replay. + +This is a single project: one `package.json` and one set of configs at the `google-adk-agents/` root, with each scenario in its own subdirectory under `src/`. Run `npm install` once here, then run any scenario by path (see each scenario's README). The integration package itself is documented in the [`@temporalio/google-adk-agents` README](https://github.com/temporalio/sdk-typescript/tree/main/contrib/google-adk-agents). + +## Prerequisites + +These apply to every sample in this directory: + +- A running Temporal dev server: `temporal server start-dev`. +- Node 22 or later. +- A Gemini API key for live runs: `export GEMINI_API_KEY=...`. +- Dependencies installed once at the `google-adk-agents/` root: `npm install`. + +Each scenario's README describes how to start its Worker and run its scenarios by path. + +## Samples + +| Sample | Demonstrates | +| :--------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | +| [`basic`](./src/basic) | A single `LlmAgent` whose model is a `TemporalModel`, driven by `InMemoryRunner` for one durable model call. | +| [`tools`](./src/tools) | An existing Temporal Activity exposed to the agent as an ADK tool via `activityAsTool`. | +| [`agent-patterns`](./src/agent-patterns) | A `transfer_to_agent` relay from a coordinator `LlmAgent` through a researcher and a writer, each with its own `TemporalModel`. | +| [`mcp`](./src/mcp) | A `TemporalMCPToolset` backed by an `mcpToolsets` factory on the plugin (a filesystem MCP server over stdio). | +| [`streaming`](./src/streaming) | Token streaming from a direct `TemporalModel` call — no agent loop — over the Workflow streams API. | +| [`human-approval`](./src/human-approval) | A `LongRunningFunctionTool` whose completion is gated by a Temporal Signal or Update. | +| [`observability`](./src/observability) | Token usage, latency, and call counts, by composing `OpenTelemetryPlugin` onto the Worker alongside `GoogleAdkPlugin`. | diff --git a/google-adk-agents/package.json b/google-adk-agents/package.json new file mode 100644 index 000000000..a73f0369a --- /dev/null +++ b/google-adk-agents/package.json @@ -0,0 +1,44 @@ +{ + "name": "temporal-google-adk-agents", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "tsc --build", + "build.watch": "tsc --build --watch", + "format": "prettier --write .", + "format:check": "prettier --check .", + "lint": "eslint .", + "test": "mocha --exit --require ts-node/register --require source-map-support/register \"src/*/mocha/*.test.ts\"" + }, + "dependencies": { + "@temporalio/client": "^1.22.0", + "@temporalio/common": "^1.22.0", + "@temporalio/google-adk-agents": "^1.22.0", + "@temporalio/interceptors-opentelemetry": "^1.22.0", + "@temporalio/worker": "^1.22.0", + "@temporalio/workflow": "^1.22.0", + "@temporalio/workflow-streams": "^1.22.0", + "@google/adk": ">=1.5.0 <1.6.0", + "@google/genai": "^2.9.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/resources": "^1.25.1", + "@opentelemetry/sdk-trace-base": "^1.25.1", + "nanoid": "3.x" + }, + "devDependencies": { + "@temporalio/testing": "^1.22.0", + "@tsconfig/node22": "^22.0.0", + "@types/mocha": "8.x", + "@types/node": "^22.9.1", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-deprecation": "^3.0.0", + "mocha": "8.x", + "prettier": "^3.4.2", + "ts-node": "^10.9.2", + "typescript": "^5.6.3", + "source-map-support": "^0.5.21" + } +} diff --git a/google-adk-agents/src/agent-patterns/README.md b/google-adk-agents/src/agent-patterns/README.md new file mode 100644 index 000000000..c5ca34220 --- /dev/null +++ b/google-adk-agents/src/agent-patterns/README.md @@ -0,0 +1,25 @@ +# Google ADK Agents: Agent Patterns + +A relay of three `LlmAgent`s over ADK's built-in `transfer_to_agent` tool, all of it running durably inside the Workflow: a coordinator transfers to a researcher, and the researcher transfers on to a writer, which produces the final answer. + +Each agent's `TemporalModel` sets a `summary` — the label the Temporal UI puts on that turn's `adk-invokeModel` Activity. + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). + +```bash +# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): +GEMINI_API_KEY=... npx ts-node src/agent-patterns/worker.ts + +# In another terminal, run the scenario: +npx ts-node src/agent-patterns/client.ts +``` + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/agent-patterns/mocha/*.test.ts" +``` + +The test runs a real Worker against `TestWorkflowEnvironment` with a scripted `BaseLlm` double of its own, which answers each turn according to the agent ADK names as the asker: a transfer for the coordinator and the researcher, the haiku for the writer. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/agent-patterns/client.ts b/google-adk-agents/src/agent-patterns/client.ts new file mode 100644 index 000000000..15ddd325c --- /dev/null +++ b/google-adk-agents/src/agent-patterns/client.ts @@ -0,0 +1,21 @@ +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { multiAgent } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const result = await client.workflow.execute(multiAgent, { + taskQueue: 'google-adk-agent-patterns', + workflowId: 'google-adk-agent-patterns-' + nanoid(), + args: ['durable execution'], + }); + + console.log(result); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/agent-patterns/mocha/workflows.test.ts b/google-adk-agents/src/agent-patterns/mocha/workflows.test.ts new file mode 100644 index 000000000..6005940f8 --- /dev/null +++ b/google-adk-agents/src/agent-patterns/mocha/workflows.test.ts @@ -0,0 +1,81 @@ +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { multiAgent } from '../workflows'; + +function text(s: string): LlmResponse { + return { content: { role: 'model', parts: [{ text: s }] }, turnComplete: true }; +} + +// ADK JS's `transfer_to_agent` tool reads `args.agentName` (camelCase). +function transferTo(agentName: string): LlmResponse { + return { + content: { role: 'model', parts: [{ functionCall: { name: 'transfer_to_agent', args: { agentName } } }] }, + turnComplete: true, + }; +} + +// Keyed by the asking agent rather than by call order, so an Activity retry re-serves the same turn. +function scriptedModelProvider(script: Record): (model: string) => BaseLlm { + class ScriptedLlm extends BaseLlm { + override async *generateContentAsync( + llmRequest: LlmRequest, + _stream = false, + _abortSignal?: AbortSignal, + ): AsyncGenerator { + const asking = llmRequest.config?.labels?.['adk_agent_name']; + const next = asking === undefined ? undefined : script[asking]; + if (next === undefined) { + throw new Error(`scripted model has no turn for agent '${asking}'`); + } + yield next; + } + + override async connect(_llmRequest: LlmRequest): Promise { + throw new Error('ScriptedLlm does not support connect().'); + } + } + return (model: string) => new ScriptedLlm({ model }); +} + +describe('google-adk-agents/agent-patterns workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + it('multiAgent: the relay reaches the writer, and only the writer produces the final text', async () => { + const modelProvider = scriptedModelProvider({ + coordinator: transferTo('researcher'), + researcher: transferTo('writer'), + writer: text('snow on the mountain'), + }); + + const taskQueue = 'test-google-adk-agent-patterns'; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider })], + }); + const result = await worker.runUntil( + testEnv.client.workflow.execute(multiAgent, { + args: ['mountains'], + workflowId: 'test-google-adk-agent-patterns-' + Date.now(), + taskQueue, + }), + ); + assert.strictEqual(result, 'snow on the mountain'); + }); +}); diff --git a/google-adk-agents/src/agent-patterns/worker.ts b/google-adk-agents/src/agent-patterns/worker.ts new file mode 100644 index 000000000..5edb64c26 --- /dev/null +++ b/google-adk-agents/src/agent-patterns/worker.ts @@ -0,0 +1,22 @@ +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; + +async function run() { + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-agent-patterns', + workflowsPath: require.resolve('./workflows'), + plugins: [new GoogleAdkPlugin()], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/agent-patterns/workflows.ts b/google-adk-agents/src/agent-patterns/workflows.ts new file mode 100644 index 000000000..b1bd5a5bb --- /dev/null +++ b/google-adk-agents/src/agent-patterns/workflows.ts @@ -0,0 +1,40 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; + +export async function multiAgent(topic: string): Promise { + const researcher = new LlmAgent({ + name: 'researcher', + description: 'Reads a topic and hands it to whoever should write about it.', + model: new TemporalModel('gemini-2.5-flash', { summary: 'Researcher Agent' }), + instruction: 'You are a researcher. You write nothing yourself. Transfer the topic to the writer.', + }); + + const writer = new LlmAgent({ + name: 'writer', + description: 'Turns a topic into a haiku.', + model: new TemporalModel('gemini-2.5-flash', { summary: 'Writer Agent' }), + instruction: 'You are a poet. Write a haiku about the topic in the conversation.', + }); + + const coordinator = new LlmAgent({ + name: 'coordinator', + description: + 'Starts the relay by handing the incoming request to the first agent. Researches nothing and writes nothing.', + model: new TemporalModel('gemini-2.5-flash', { summary: 'Coordinator Agent' }), + instruction: 'You are a coordinator. Transfer the request to the researcher.', + subAgents: [researcher, writer], + }); + + const runner = new InMemoryRunner({ agent: coordinator }); + + let finalText = ''; + for await (const event of runner.runEphemeral({ + userId: 'user', + newMessage: { role: 'user', parts: [{ text: `Write a haiku about ${topic}.` }] }, + })) { + if (isFinalResponse(event)) { + finalText = stringifyContent(event); + } + } + return finalText; +} diff --git a/google-adk-agents/src/basic/README.md b/google-adk-agents/src/basic/README.md new file mode 100644 index 000000000..989108fe7 --- /dev/null +++ b/google-adk-agents/src/basic/README.md @@ -0,0 +1,23 @@ +# Google ADK Agents: Basic + +A single ADK `LlmAgent` whose model is a `TemporalModel`, driven by `InMemoryRunner` for one durable model call. Two things change from a vanilla ADK agent: the agent's `model` becomes `new TemporalModel('gemini-2.5-flash')` where the model name would otherwise go, and the Worker registers `GoogleAdkPlugin`. The agent loop then runs inside the Workflow while the model call runs as an Activity. + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). + +```bash +# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): +GEMINI_API_KEY=... npx ts-node src/basic/worker.ts + +# In another terminal, run the scenario: +npx ts-node src/basic/client.ts +``` + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/basic/mocha/*.test.ts" +``` + +The tests run a real Worker against `TestWorkflowEnvironment`, so no `GEMINI_API_KEY` is required: one answers through `fakeModelProvider`, the other fails the model call and asserts the Workflow fails with it. diff --git a/google-adk-agents/src/basic/client.ts b/google-adk-agents/src/basic/client.ts new file mode 100644 index 000000000..c7454a340 --- /dev/null +++ b/google-adk-agents/src/basic/client.ts @@ -0,0 +1,21 @@ +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { helloWorld } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const result = await client.workflow.execute(helloWorld, { + taskQueue: 'google-adk-basic', + workflowId: 'google-adk-basic-' + nanoid(), + args: ['Write a haiku about durable execution.'], + }); + + console.log(result); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/basic/mocha/workflows.test.ts b/google-adk-agents/src/basic/mocha/workflows.test.ts new file mode 100644 index 000000000..ed0890bf3 --- /dev/null +++ b/google-adk-agents/src/basic/mocha/workflows.test.ts @@ -0,0 +1,79 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmResponse } from '@google/adk'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { ActivityFailure, ApplicationFailure } from '@temporalio/common'; +import { WorkflowFailedError } from '@temporalio/client'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { helloWorld } from '../workflows'; + +function failingModelProvider(): (model: string) => BaseLlm { + class FailingLlm extends BaseLlm { + override generateContentAsync(): AsyncGenerator { + throw ApplicationFailure.nonRetryable('the model rejected the request'); + } + + override async connect(): Promise { + throw new Error('FailingLlm does not support connect().'); + } + } + return (model: string) => new FailingLlm({ model }); +} + +describe('google-adk-agents/basic workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + it('helloWorld: runs an LlmAgent through the runner with durable model calls', async () => { + const taskQueue = 'test-google-adk-basic'; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider: fakeModelProvider() })], + }); + const result = await worker.runUntil( + testEnv.client.workflow.execute(helloWorld, { + args: ['Say hello.'], + workflowId: 'test-google-adk-basic-' + Date.now(), + taskQueue, + }), + ); + assert.strictEqual(result, 'fake-response:gemini-2.5-flash'); + }); + + it('helloWorld: a failed model call fails the Workflow rather than answering with an empty string', async () => { + const taskQueue = 'test-google-adk-basic-model-failure'; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider: failingModelProvider() })], + }); + await worker.runUntil( + assert.rejects( + testEnv.client.workflow.execute(helloWorld, { + args: ['Say hello.'], + workflowId: taskQueue + '-' + Date.now(), + taskQueue, + }), + (err: unknown) => + err instanceof WorkflowFailedError && + err.cause instanceof ActivityFailure && + err.cause.cause?.message === 'the model rejected the request', + ), + ); + }); +}); diff --git a/google-adk-agents/src/basic/worker.ts b/google-adk-agents/src/basic/worker.ts new file mode 100644 index 000000000..20d242f27 --- /dev/null +++ b/google-adk-agents/src/basic/worker.ts @@ -0,0 +1,22 @@ +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; + +async function run() { + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-basic', + workflowsPath: require.resolve('./workflows'), + plugins: [new GoogleAdkPlugin()], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/basic/workflows.ts b/google-adk-agents/src/basic/workflows.ts new file mode 100644 index 000000000..f1a99e9c7 --- /dev/null +++ b/google-adk-agents/src/basic/workflows.ts @@ -0,0 +1,23 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; + +export async function helloWorld(prompt: string): Promise { + const agent = new LlmAgent({ + name: 'assistant', + model: new TemporalModel('gemini-2.5-flash'), + instruction: 'You are a helpful assistant. Respond in a single sentence.', + }); + + const runner = new InMemoryRunner({ agent }); + + let finalText = ''; + for await (const event of runner.runEphemeral({ + userId: 'user', + newMessage: { role: 'user', parts: [{ text: prompt }] }, + })) { + if (isFinalResponse(event)) { + finalText = stringifyContent(event); + } + } + return finalText; +} diff --git a/google-adk-agents/src/human-approval/README.md b/google-adk-agents/src/human-approval/README.md new file mode 100644 index 000000000..83b3b029b --- /dev/null +++ b/google-adk-agents/src/human-approval/README.md @@ -0,0 +1,23 @@ +# Google ADK Agents: Human Approval + +A human-in-the-loop flow. The Workflow body invokes an ADK `LongRunningFunctionTool` whose `execute` blocks on a Temporal `condition` until a human's decision arrives, then returns it. The `approve` Signal and the `approveUpdate` Update each have their own handler; what they share is the variable the tool's `condition` is waiting on, so either one releases it (the Update handler additionally echoes the decision back to its caller). + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). + +```bash +# In one terminal, start the Worker (requires a local Temporal server): +npx ts-node src/human-approval/worker.ts + +# In another terminal, start the Workflow (the client sends the approval Signal): +npx ts-node src/human-approval/client.ts +``` + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/human-approval/mocha/*.test.ts" +``` + +The tests run a real Worker against `TestWorkflowEnvironment`: two release the tool, one through the `approve` Signal and one through the `approveUpdate` Update, asserting it resumes with the supplied value; the third cancels the Workflow and asserts it ends CANCELLED. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/human-approval/client.ts b/google-adk-agents/src/human-approval/client.ts new file mode 100644 index 000000000..411511c8b --- /dev/null +++ b/google-adk-agents/src/human-approval/client.ts @@ -0,0 +1,22 @@ +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { humanApproval, approveSignal } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const handle = await client.workflow.start(humanApproval, { + taskQueue: 'google-adk-human-approval', + workflowId: 'google-adk-human-approval-' + nanoid(), + }); + console.log(`Started workflow ${handle.workflowId}; sending approval Signal.`); + + await handle.signal(approveSignal, 'approved-by-operator'); + console.log(await handle.result()); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/human-approval/mocha/workflows.test.ts b/google-adk-agents/src/human-approval/mocha/workflows.test.ts new file mode 100644 index 000000000..5d38ce934 --- /dev/null +++ b/google-adk-agents/src/human-approval/mocha/workflows.test.ts @@ -0,0 +1,70 @@ +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { humanApproval, approveSignal, approveUpdate } from '../workflows'; + +describe('google-adk-agents/human-approval workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + async function makeWorker(taskQueue: string) { + return Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin()], + }); + } + + it('humanApproval: long-running tool resumes on the approve Signal', async () => { + const taskQueue = 'test-google-adk-human-approval-signal'; + const worker = await makeWorker(taskQueue); + await worker.runUntil(async () => { + const handle = await testEnv.client.workflow.start(humanApproval, { + workflowId: taskQueue + '-' + Date.now(), + taskQueue, + }); + await handle.signal(approveSignal, 'approved-via-signal'); + assert.strictEqual(await handle.result(), 'approved-via-signal'); + }); + }); + + it('humanApproval: long-running tool resumes on the approve Update', async () => { + const taskQueue = 'test-google-adk-human-approval-update'; + const worker = await makeWorker(taskQueue); + await worker.runUntil(async () => { + const handle = await testEnv.client.workflow.start(humanApproval, { + workflowId: taskQueue + '-' + Date.now(), + taskQueue, + }); + const updateResult = await handle.executeUpdate(approveUpdate, { args: ['approved-via-update'] }); + assert.strictEqual(updateResult, 'approved-via-update'); + assert.strictEqual(await handle.result(), 'approved-via-update'); + }); + }); + + it('humanApproval: cancelling the Workflow ends it as CANCELLED', async () => { + const taskQueue = 'test-google-adk-human-approval-cancel'; + const worker = await makeWorker(taskQueue); + await worker.runUntil(async () => { + const handle = await testEnv.client.workflow.start(humanApproval, { + workflowId: taskQueue + '-' + Date.now(), + taskQueue, + }); + await handle.cancel(); + await assert.rejects(handle.result()); + assert.strictEqual((await handle.describe()).status.name, 'CANCELLED'); + }); + }); +}); diff --git a/google-adk-agents/src/human-approval/worker.ts b/google-adk-agents/src/human-approval/worker.ts new file mode 100644 index 000000000..98e94d4f6 --- /dev/null +++ b/google-adk-agents/src/human-approval/worker.ts @@ -0,0 +1,22 @@ +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; + +async function run() { + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-human-approval', + workflowsPath: require.resolve('./workflows'), + plugins: [new GoogleAdkPlugin()], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/human-approval/workflows.ts b/google-adk-agents/src/human-approval/workflows.ts new file mode 100644 index 000000000..0acd2e588 --- /dev/null +++ b/google-adk-agents/src/human-approval/workflows.ts @@ -0,0 +1,43 @@ +import { LongRunningFunctionTool } from '@google/adk'; +import { + CancellationScope, + CancelledFailure, + condition, + defineSignal, + defineUpdate, + setHandler, +} from '@temporalio/workflow'; + +export const approveSignal = defineSignal<[string]>('approve'); +export const approveUpdate = defineUpdate('approveUpdate'); + +export async function humanApproval(): Promise { + let result: string | undefined; + + setHandler(approveSignal, (value) => { + result = value; + }); + setHandler(approveUpdate, (value) => { + result = value; + return value; + }); + + const tool = new LongRunningFunctionTool({ + name: 'humanApproval', + description: 'Wait for a human approval.', + execute: async () => { + await condition(() => result !== undefined); + return result; + }, + }); + + try { + return (await tool.runAsync({ args: {}, toolContext: {} as never })) as string; + } catch (err) { + // ADK's FunctionTool re-throws execute's error as a plain Error, so a cancelled condition() no longer reads as cancellation. + if (CancellationScope.current().consideredCancelled) { + throw new CancelledFailure('Workflow cancelled'); + } + throw err; + } +} diff --git a/google-adk-agents/src/mcp/README.md b/google-adk-agents/src/mcp/README.md new file mode 100644 index 000000000..70b1ad8c1 --- /dev/null +++ b/google-adk-agents/src/mcp/README.md @@ -0,0 +1,23 @@ +# Google ADK Agents: MCP + +A `TemporalMCPToolset` backed by a real [Model Context Protocol](https://modelcontextprotocol.io) server. The agent declares `new TemporalMCPToolset({ name: 'filesystem' })`; the Worker registers the matching `filesystem` factory on the plugin via `mcpToolsets`, which opens a filesystem MCP server over stdio (`@modelcontextprotocol/server-filesystem`). Tool discovery and every tool call route through `filesystem-listTools` / `filesystem-callTool` Activities, so the MCP connection details stay on the Worker and never enter Workflow inputs. + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). The Worker spawns the filesystem MCP server with `npx`, exposing this sample's `src/mcp/sample-files/` directory. + +```bash +# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): +GEMINI_API_KEY=... npx ts-node src/mcp/worker.ts + +# In another terminal, run the scenario: +npx ts-node src/mcp/client.ts +``` + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/mcp/mocha/*.test.ts" +``` + +The test registers an in-memory `mockMCPToolset` on the plugin under the same `filesystem` name — no MCP server subprocess, no `npx`, no network, and no `GEMINI_API_KEY`. It drives `filesystemAgent` against a scripted model double, so a real tool call crosses the `filesystem-callTool` Activity and its result comes back on the next model turn. diff --git a/google-adk-agents/src/mcp/client.ts b/google-adk-agents/src/mcp/client.ts new file mode 100644 index 000000000..b30a8f033 --- /dev/null +++ b/google-adk-agents/src/mcp/client.ts @@ -0,0 +1,21 @@ +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { filesystemAgent } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const result = await client.workflow.execute(filesystemAgent, { + taskQueue: 'google-adk-mcp', + workflowId: 'google-adk-mcp-' + nanoid(), + args: ['List the files you can access, then summarize what is in hello.txt.'], + }); + + console.log(result); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/mcp/mocha/workflows.test.ts b/google-adk-agents/src/mcp/mocha/workflows.test.ts new file mode 100644 index 000000000..2cf0d4266 --- /dev/null +++ b/google-adk-agents/src/mcp/mocha/workflows.test.ts @@ -0,0 +1,93 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { Type } from '@google/genai'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { mockMCPToolset, type MockMCPToolDefinition } from '@temporalio/google-adk-agents/testing'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { filesystemAgent } from '../workflows'; + +const readFileDef: MockMCPToolDefinition = { + declaration: { + name: 'read_file', + description: 'Read a file.', + parameters: { type: Type.OBJECT, properties: { path: { type: Type.STRING } }, required: ['path'] }, + }, + handler: (args) => ({ contents: `contents of ${String(args.path)}` }), +}; + +// A fresh model instance per Activity invocation, so the turn has to come from the request. +function readFileModelProvider(): (model: string) => BaseLlm { + class ReadFileLlm extends BaseLlm { + override async *generateContentAsync( + llmRequest: LlmRequest, + _stream = false, + _abortSignal?: AbortSignal, + ): AsyncGenerator { + const toolResponse = (llmRequest.contents ?? []) + .flatMap((content) => content.parts ?? []) + .find((part) => part.functionResponse?.name === 'read_file')?.functionResponse?.response; + if (toolResponse === undefined) { + yield { + content: { + role: 'model', + parts: [{ functionCall: { name: 'read_file', args: { path: 'hello.txt' } } }], + }, + turnComplete: true, + }; + return; + } + const text = String((toolResponse as { contents?: unknown }).contents); + yield { content: { role: 'model', parts: [{ text }] }, turnComplete: true }; + } + + override async connect(_llmRequest: LlmRequest): Promise { + throw new Error('ReadFileLlm does not support connect().'); + } + } + return (model: string) => new ReadFileLlm({ model }); +} + +describe('google-adk-agents/mcp workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + it('filesystemAgent: the model calls an MCP tool and its result reaches the next turn', async () => { + const taskQueue = 'test-google-adk-mcp-agent'; + const workflowId = taskQueue + '-' + Date.now(); + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [ + new GoogleAdkPlugin({ + modelProvider: readFileModelProvider(), + mcpToolsets: { filesystem: mockMCPToolset([readFileDef]) }, + }), + ], + }); + const result = await worker.runUntil( + testEnv.client.workflow.execute(filesystemAgent, { + args: ['Summarize hello.txt.'], + workflowId, + taskQueue, + }), + ); + assert.strictEqual(result, 'contents of hello.txt'); + + const { events } = await testEnv.client.workflow.getHandle(workflowId).fetchHistory(); + const scheduled = (events ?? []).map((e) => e.activityTaskScheduledEventAttributes?.activityType?.name); + assert.strictEqual(scheduled.filter((name) => name === 'filesystem-callTool').length, 1); + }); +}); diff --git a/google-adk-agents/src/mcp/sample-files/hello.txt b/google-adk-agents/src/mcp/sample-files/hello.txt new file mode 100644 index 000000000..18f9f10c2 --- /dev/null +++ b/google-adk-agents/src/mcp/sample-files/hello.txt @@ -0,0 +1,2 @@ +Hello from the Temporal Google ADK filesystem MCP sample. +This file is exposed to the agent through the filesystem MCP server. diff --git a/google-adk-agents/src/mcp/worker.ts b/google-adk-agents/src/mcp/worker.ts new file mode 100644 index 000000000..dba6cd711 --- /dev/null +++ b/google-adk-agents/src/mcp/worker.ts @@ -0,0 +1,37 @@ +import * as path from 'path'; +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; + +async function run() { + const exposedDir = path.resolve(__dirname, 'sample-files'); + + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-mcp', + workflowsPath: require.resolve('./workflows'), + plugins: [ + new GoogleAdkPlugin({ + mcpToolsets: { + filesystem: () => ({ + type: 'StdioConnectionParams', + serverParams: { + command: 'npx', + args: ['-y', '@modelcontextprotocol/server-filesystem', exposedDir], + }, + }), + }, + }), + ], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/mcp/workflows.ts b/google-adk-agents/src/mcp/workflows.ts new file mode 100644 index 000000000..e8de68e70 --- /dev/null +++ b/google-adk-agents/src/mcp/workflows.ts @@ -0,0 +1,24 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { TemporalMCPToolset, TemporalModel } from '@temporalio/google-adk-agents/workflow'; + +export async function filesystemAgent(prompt: string): Promise { + const agent = new LlmAgent({ + name: 'filesystem_agent', + model: new TemporalModel('gemini-2.5-flash'), + instruction: 'Use your tools to answer questions about files.', + tools: [new TemporalMCPToolset({ name: 'filesystem' })], + }); + + const runner = new InMemoryRunner({ agent }); + + let finalText = ''; + for await (const event of runner.runEphemeral({ + userId: 'user', + newMessage: { role: 'user', parts: [{ text: prompt }] }, + })) { + if (isFinalResponse(event)) { + finalText = stringifyContent(event); + } + } + return finalText; +} diff --git a/google-adk-agents/src/observability/README.md b/google-adk-agents/src/observability/README.md new file mode 100644 index 000000000..472c83fb3 --- /dev/null +++ b/google-adk-agents/src/observability/README.md @@ -0,0 +1,37 @@ +# Google ADK Agents: Observability + +Where an agent's token usage, latency, and call counts come from once `OpenTelemetryPlugin` is composed onto the Worker alongside `GoogleAdkPlugin`, as this sample's `worker.ts` does. Without it, ADK's agent-loop spans are created inside the Workflow sandbox and dropped; the [`@temporalio/google-adk-agents` README](https://github.com/temporalio/sdk-typescript/tree/main/contrib/google-adk-agents#telemetry-and-observability) covers why, and the caveats that come with exporting them. + +Everything here is traces. ADK defines no OpenTelemetry metric instruments, so there is no metric stream to scrape — the numbers below are span attributes. + +## What the spans carry + +`call_llm`, one per model call: + +- `gen_ai.usage.input_tokens` and `gen_ai.usage.output_tokens`. There is no total; add the two, as this sample's Worker does when it prints each call. +- `gen_ai.request.model`. +- Latency is the span's own duration. ADK records no latency attribute, on this span or any other. + +`invoke_agent ` carries nothing numeric, so a call count means counting `call_llm` spans. + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). + +```bash +# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): +GEMINI_API_KEY=... npx ts-node src/observability/worker.ts + +# In another terminal, run the scenario: +npx ts-node src/observability/client.ts +``` + +The per-call token, model, and latency lines print in the Worker's terminal. + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/observability/mocha/*.test.ts" +``` + +The test runs a real Worker against `TestWorkflowEnvironment` with `fakeModelProvider`, asserting that ADK's `call_llm` spans reach the span processor carrying their model name and token counts. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/observability/adk-usage-span-processor.ts b/google-adk-agents/src/observability/adk-usage-span-processor.ts new file mode 100644 index 000000000..7747daffa --- /dev/null +++ b/google-adk-agents/src/observability/adk-usage-span-processor.ts @@ -0,0 +1,33 @@ +import type { Context } from '@opentelemetry/api'; +import type { ReadableSpan, Span, SpanProcessor } from '@opentelemetry/sdk-trace-base'; + +// ADK's tracer name; the SDK's own interceptor spans arrive under a different one. +const ADK_TRACER = 'gcp.vertex.agent'; + +export interface ModelCall { + model: string; + inputTokens: number; + outputTokens: number; + durationMs: number; +} + +export class AdkUsageSpanProcessor implements SpanProcessor { + constructor(private readonly onModelCall: (call: ModelCall) => void) {} + + onStart(_span: Span, _parentContext: Context): void {} + + onEnd(span: ReadableSpan): void { + if (span.instrumentationLibrary.name !== ADK_TRACER || span.name !== 'call_llm') return; + + this.onModelCall({ + model: String(span.attributes['gen_ai.request.model'] ?? ''), + inputTokens: Number(span.attributes['gen_ai.usage.input_tokens'] ?? 0), + outputTokens: Number(span.attributes['gen_ai.usage.output_tokens'] ?? 0), + durationMs: span.duration[0] * 1e3 + span.duration[1] / 1e6, + }); + } + + async forceFlush(): Promise {} + + async shutdown(): Promise {} +} diff --git a/google-adk-agents/src/observability/client.ts b/google-adk-agents/src/observability/client.ts new file mode 100644 index 000000000..4f69002e6 --- /dev/null +++ b/google-adk-agents/src/observability/client.ts @@ -0,0 +1,21 @@ +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { observedAgent } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const result = await client.workflow.execute(observedAgent, { + taskQueue: 'google-adk-observability', + workflowId: 'google-adk-observability-' + nanoid(), + args: [['Write a haiku about durable execution.', 'Write a haiku about workflow replay.']], + }); + + console.log(result.join('\n')); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/observability/mocha/workflows.test.ts b/google-adk-agents/src/observability/mocha/workflows.test.ts new file mode 100644 index 000000000..854bb87d0 --- /dev/null +++ b/google-adk-agents/src/observability/mocha/workflows.test.ts @@ -0,0 +1,72 @@ +import type { LlmResponse } from '@google/adk'; +import { Resource } from '@opentelemetry/resources'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; +import { OpenTelemetryPlugin } from '@temporalio/interceptors-opentelemetry'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { AdkUsageSpanProcessor, type ModelCall } from '../adk-usage-span-processor'; +import { observedAgent } from '../workflows'; + +const prompts = ['Write a haiku about durable execution.', 'Write a haiku about workflow replay.']; + +const responses: LlmResponse[] = [ + { + content: { role: 'model', parts: [{ text: 'snow on the mountain' }] }, + usageMetadata: { promptTokenCount: 11, candidatesTokenCount: 7 }, + turnComplete: true, + }, +]; + +describe('google-adk-agents/observability workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + it('observedAgent: composing OpenTelemetryPlugin exports the ADK spans and their token usage', async () => { + const taskQueue = 'test-google-adk-observability'; + const modelCalls: ModelCall[] = []; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [ + new OpenTelemetryPlugin({ + resource: new Resource({ 'service.name': 'test-google-adk-observability' }), + spanProcessor: new AdkUsageSpanProcessor((call) => modelCalls.push(call)), + }), + new GoogleAdkPlugin({ modelProvider: fakeModelProvider(responses) }), + ], + }); + const result = await worker.runUntil( + testEnv.client.workflow.execute(observedAgent, { + args: [prompts], + workflowId: `${taskQueue}-${Date.now()}`, + taskQueue, + }), + ); + assert.deepStrictEqual(result, ['snow on the mountain', 'snow on the mountain']); + + assert.ok( + modelCalls.length >= prompts.length, + `expected at least ${prompts.length} call_llm spans, got ${modelCalls.length}`, + ); + for (const call of modelCalls) { + assert.deepStrictEqual( + { model: call.model, inputTokens: call.inputTokens, outputTokens: call.outputTokens }, + { model: 'gemini-2.5-flash', inputTokens: 11, outputTokens: 7 }, + ); + assert.ok(call.durationMs > 0, 'each call_llm span should have a duration'); + } + }); +}); diff --git a/google-adk-agents/src/observability/worker.ts b/google-adk-agents/src/observability/worker.ts new file mode 100644 index 000000000..451b08ace --- /dev/null +++ b/google-adk-agents/src/observability/worker.ts @@ -0,0 +1,38 @@ +import { Resource } from '@opentelemetry/resources'; +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { OpenTelemetryPlugin } from '@temporalio/interceptors-opentelemetry'; +import { AdkUsageSpanProcessor } from './adk-usage-span-processor'; + +async function run() { + const spanProcessor = new AdkUsageSpanProcessor((call) => + console.log( + `call_llm ${call.model}: ${call.inputTokens} in + ${call.outputTokens} out = ` + + `${call.inputTokens + call.outputTokens} tokens in ${call.durationMs.toFixed(0)}ms`, + ), + ); + + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-observability', + workflowsPath: require.resolve('./workflows'), + plugins: [ + new OpenTelemetryPlugin({ + resource: new Resource({ 'service.name': 'google-adk-observability' }), + spanProcessor, + }), + new GoogleAdkPlugin(), + ], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/observability/workflows.ts b/google-adk-agents/src/observability/workflows.ts new file mode 100644 index 000000000..34a7f8227 --- /dev/null +++ b/google-adk-agents/src/observability/workflows.ts @@ -0,0 +1,27 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; + +export async function observedAgent(prompts: string[]): Promise { + const agent = new LlmAgent({ + name: 'assistant', + model: new TemporalModel('gemini-2.5-flash'), + instruction: 'You are a helpful assistant. Respond in a single sentence.', + }); + + const runner = new InMemoryRunner({ agent }); + + const answers: string[] = []; + for (const prompt of prompts) { + let finalText = ''; + for await (const event of runner.runEphemeral({ + userId: 'user', + newMessage: { role: 'user', parts: [{ text: prompt }] }, + })) { + if (isFinalResponse(event)) { + finalText = stringifyContent(event); + } + } + answers.push(finalText); + } + return answers; +} diff --git a/google-adk-agents/src/streaming/README.md b/google-adk-agents/src/streaming/README.md new file mode 100644 index 000000000..8e9efd7e0 --- /dev/null +++ b/google-adk-agents/src/streaming/README.md @@ -0,0 +1,29 @@ +# Google ADK Agents: Streaming + +Token streaming over a Workflow Stream. Unlike the agent scenarios, the Workflow here calls a `TemporalModel` directly — no `LlmAgent`, no `Runner` — so the streaming path stands on its own. + +Streaming is requested by `generateContentAsync`'s `stream` argument, not by configuration; a streaming call additionally needs a `streamingTopic` on the `TemporalModel` to publish to, and fails without one. Together they route the call to an `adk-invokeModelStreaming` Activity, which publishes every `LlmResponse` the model yields to that topic via the Workflow streams API while still returning the same ordered sequence to the Workflow — the deterministic, replay-safe channel. Deltas arrive as `partial` responses and the turn ends with one non-partial response carrying its whole text; the Workflow returns that text and a count of the deltas. + +The Workflow hosts the [Workflow Stream](https://github.com/temporalio/sdk-typescript/tree/main/contrib/workflow-streams) with `new WorkflowStream()` and, once the model turn is done, waits up to 10 seconds for a `consumer-done` Signal before returning — completing would discard the log out from under a subscriber's final poll, and the bound keeps the Workflow from hanging when nobody is subscribed. The client subscribes to the topic from outside with `WorkflowStreamClient.create(client, workflowId).topic(streamingTopic).subscribe()`, prints each delta's text as it arrives, and stops at the non-partial response, at which point it Signals the Workflow. + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). + +```bash +# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): +GEMINI_API_KEY=... npx ts-node src/streaming/worker.ts + +# In another terminal, run the scenario: +npx ts-node src/streaming/client.ts +``` + +The story prints token by token as the model produces it. In the Temporal UI the history shows a single `adk-invokeModelStreaming` Activity. + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/streaming/mocha/*.test.ts" +``` + +The test runs a real Worker against `TestWorkflowEnvironment` with a `BaseLlm` double scripted as a real text turn — three `partial` deltas then the non-partial whole-turn response. The double holds each response back until an external subscriber has taken the one before it, so the deltas reach the subscriber while the model call is still in flight. It asserts the subscriber receives all four in order, and that the Workflow returns the turn's text once and a count of three chunks. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/streaming/client.ts b/google-adk-agents/src/streaming/client.ts new file mode 100644 index 000000000..64486542f --- /dev/null +++ b/google-adk-agents/src/streaming/client.ts @@ -0,0 +1,35 @@ +import type { LlmResponse } from '@google/adk'; +import { Connection, Client } from '@temporalio/client'; +import { WorkflowStreamClient } from '@temporalio/workflow-streams/client'; +import { nanoid } from 'nanoid'; +import { consumerDoneSignal, streamingModelCall, streamingTopic } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const workflowId = 'google-adk-streaming-' + nanoid(); + const handle = await client.workflow.start(streamingModelCall, { + taskQueue: 'google-adk-streaming', + workflowId, + args: ['Tell me a short story about a robot learning to paint.'], + }); + console.log(`Started workflow ${handle.workflowId}`); + + const streamClient = WorkflowStreamClient.create(client, workflowId); + for await (const item of streamClient.topic(streamingTopic).subscribe()) { + if (item.data.partial !== true) break; + for (const part of item.data.content?.parts ?? []) { + if (part.text) process.stdout.write(part.text); + } + } + await handle.signal(consumerDoneSignal); + + const result = await handle.result(); + console.log(`\n---\nReceived ${result.chunks} chunk(s).`); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/streaming/mocha/workflows.test.ts b/google-adk-agents/src/streaming/mocha/workflows.test.ts new file mode 100644 index 000000000..a9dd2b3a6 --- /dev/null +++ b/google-adk-agents/src/streaming/mocha/workflows.test.ts @@ -0,0 +1,88 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmResponse } from '@google/adk'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { WorkflowStreamClient } from '@temporalio/workflow-streams/client'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { consumerDoneSignal, streamingModelCall, streamingTopic } from '../workflows'; + +const turn: LlmResponse[] = [ + { content: { role: 'model', parts: [{ text: 'Hello ' }] }, partial: true }, + { content: { role: 'model', parts: [{ text: 'streaming ' }] }, partial: true }, + { content: { role: 'model', parts: [{ text: 'world' }] }, partial: true }, + { content: { role: 'model', parts: [{ text: 'Hello streaming world' }] }, partial: false, turnComplete: true }, +]; + +function gatedModelProvider(taken: () => number): (model: string) => BaseLlm { + class GatedLlm extends BaseLlm { + override async *generateContentAsync(): AsyncGenerator { + for (const [index, response] of turn.entries()) { + while (taken() < index) { + await new Promise((resolve) => setTimeout(resolve, 10)); + } + yield response; + } + } + + override async connect(): Promise { + throw new Error('GatedLlm does not support connect().'); + } + } + return (model: string) => new GatedLlm({ model }); +} + +describe('google-adk-agents/streaming workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + it('streamingModelCall: an external subscriber receives the chunks while the call is in flight', async () => { + const taskQueue = 'test-google-adk-streaming'; + const received: LlmResponse[] = []; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider: gatedModelProvider(() => received.length) })], + }); + + const workflowId = 'test-google-adk-streaming-' + Date.now(); + const result = await worker.runUntil(async () => { + const handle = await testEnv.client.workflow.start(streamingModelCall, { + args: ['stream please'], + workflowId, + taskQueue, + }); + + const streamClient = WorkflowStreamClient.create(testEnv.client, workflowId); + const gen = streamClient.topic(streamingTopic).subscribe(0, { pollCooldown: 0 }); + for await (const item of gen) { + received.push(item.data); + if (received.length >= turn.length) { + await gen.return(); + break; + } + } + await handle.signal(consumerDoneSignal); + + assert.deepStrictEqual( + received.map((response) => response.content?.parts?.[0]?.text), + ['Hello ', 'streaming ', 'world', 'Hello streaming world'], + ); + return handle.result(); + }); + + assert.strictEqual(result.text, 'Hello streaming world'); + assert.strictEqual(result.chunks, 3); + }); +}); diff --git a/google-adk-agents/src/streaming/worker.ts b/google-adk-agents/src/streaming/worker.ts new file mode 100644 index 000000000..5f8f0df11 --- /dev/null +++ b/google-adk-agents/src/streaming/worker.ts @@ -0,0 +1,22 @@ +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; + +async function run() { + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-streaming', + workflowsPath: require.resolve('./workflows'), + plugins: [new GoogleAdkPlugin()], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/streaming/workflows.ts b/google-adk-agents/src/streaming/workflows.ts new file mode 100644 index 000000000..e76726063 --- /dev/null +++ b/google-adk-agents/src/streaming/workflows.ts @@ -0,0 +1,44 @@ +import type { LlmRequest } from '@google/adk'; +import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; +import { condition, defineSignal, setHandler } from '@temporalio/workflow'; +import { WorkflowStream } from '@temporalio/workflow-streams/workflow'; + +export const streamingTopic = 'responses'; + +export const consumerDoneSignal = defineSignal('consumer-done'); + +export async function streamingModelCall(prompt: string): Promise<{ text: string; chunks: number }> { + new WorkflowStream(); + + let consumerDone = false; + setHandler(consumerDoneSignal, () => { + consumerDone = true; + }); + + const model = new TemporalModel('gemini-2.5-flash', { + streamingTopic, + activity: { heartbeatTimeout: '5 seconds' }, + }); + + const request = { + model: 'gemini-2.5-flash', + contents: [{ role: 'user', parts: [{ text: prompt }] }], + config: {}, + toolsDict: {}, + liveConnectConfig: {}, + } as LlmRequest; + + let text = ''; + let chunks = 0; + // The turn's whole text is on the last, non-partial response; the deltas would double it. + for await (const response of model.generateContentAsync(request, true)) { + if (response.partial === true) { + chunks++; + continue; + } + text = (response.content?.parts ?? []).map((part) => part.text ?? '').join(''); + } + // Completing discards the stream log, racing a subscriber's final poll; the timeout covers no subscriber. + await condition(() => consumerDone, '10 seconds'); + return { text, chunks }; +} diff --git a/google-adk-agents/src/tools/README.md b/google-adk-agents/src/tools/README.md new file mode 100644 index 000000000..860bc5591 --- /dev/null +++ b/google-adk-agents/src/tools/README.md @@ -0,0 +1,23 @@ +# Google ADK Agents: Tools + +Exposes an existing Temporal Activity to the ADK agent as a tool with `activityAsTool`. When the model decides to call `getWeather`, the tool dispatches the registered `getWeather` Activity — durable and retriable — instead of running the I/O inside the Workflow body. + +## Run + +Run these from the `google-adk-agents/` root (run `npm install` there once first). + +```bash +# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): +GEMINI_API_KEY=... npx ts-node src/tools/worker.ts + +# In another terminal, run the scenario: +npx ts-node src/tools/client.ts +``` + +## Test + +```bash +npx mocha --exit --require ts-node/register --require source-map-support/register "src/tools/mocha/*.test.ts" +``` + +The tests run a real Worker against `TestWorkflowEnvironment`, driving `weatherAgent` end to end against a scripted model double. One takes the happy path: the model asks for `getWeather`, the Activity runs exactly once, and its result comes back on the next model turn. The other fails that Activity and asserts the failure reaches the model as the tool's response and the agent answers from it. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/tools/activities.ts b/google-adk-agents/src/tools/activities.ts new file mode 100644 index 000000000..6b4c9fe02 --- /dev/null +++ b/google-adk-agents/src/tools/activities.ts @@ -0,0 +1,3 @@ +export async function getWeather(args: { city: string }): Promise { + return `The weather in ${args.city} is warm and sunny, 17 degrees.`; +} diff --git a/google-adk-agents/src/tools/client.ts b/google-adk-agents/src/tools/client.ts new file mode 100644 index 000000000..f277649ce --- /dev/null +++ b/google-adk-agents/src/tools/client.ts @@ -0,0 +1,21 @@ +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { weatherAgent } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + + const result = await client.workflow.execute(weatherAgent, { + taskQueue: 'google-adk-tools', + workflowId: 'google-adk-tools-' + nanoid(), + args: ['What is the weather in Tokyo?'], + }); + + console.log(result); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/tools/mocha/workflows.test.ts b/google-adk-agents/src/tools/mocha/workflows.test.ts new file mode 100644 index 000000000..158bed6b9 --- /dev/null +++ b/google-adk-agents/src/tools/mocha/workflows.test.ts @@ -0,0 +1,97 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { ApplicationFailure } from '@temporalio/common'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import * as activities from '../activities'; +import { weatherAgent } from '../workflows'; + +// A fresh model instance per Activity invocation, so the turn has to come from the request. +function weatherModelProvider(): (model: string) => BaseLlm { + class WeatherLlm extends BaseLlm { + override async *generateContentAsync( + llmRequest: LlmRequest, + _stream = false, + _abortSignal?: AbortSignal, + ): AsyncGenerator { + const toolResponse = (llmRequest.contents ?? []) + .flatMap((content) => content.parts ?? []) + .find((part) => part.functionResponse?.name === 'getWeather')?.functionResponse?.response as + | { result?: unknown; error?: unknown } + | undefined; + if (toolResponse === undefined) { + yield { + content: { role: 'model', parts: [{ functionCall: { name: 'getWeather', args: { city: 'Tokyo' } } }] }, + turnComplete: true, + }; + return; + } + const text = + toolResponse.error === undefined + ? String(toolResponse.result) + : `I could not look up the weather: ${String(toolResponse.error)}`; + yield { content: { role: 'model', parts: [{ text }] }, turnComplete: true }; + } + + override async connect(_llmRequest: LlmRequest): Promise { + throw new Error('WeatherLlm does not support connect().'); + } + } + return (model: string) => new WeatherLlm({ model }); +} + +describe('google-adk-agents/tools workflow scenarios', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + async function runWeatherAgent(taskQueue: string, workflowId: string, workerActivities: typeof activities) { + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + activities: workerActivities, + plugins: [new GoogleAdkPlugin({ modelProvider: weatherModelProvider() })], + }); + return worker.runUntil( + testEnv.client.workflow.execute(weatherAgent, { + args: ['What is the weather in Tokyo?'], + workflowId, + taskQueue, + }), + ); + } + + it('weatherAgent: the model calls the tool, the Activity runs, and its result reaches the next turn', async () => { + const taskQueue = 'test-google-adk-tools-agent'; + const workflowId = taskQueue + '-' + Date.now(); + const result = await runWeatherAgent(taskQueue, workflowId, activities); + assert.strictEqual(result, 'The weather in Tokyo is warm and sunny, 17 degrees.'); + + const { events } = await testEnv.client.workflow.getHandle(workflowId).fetchHistory(); + const scheduled = (events ?? []).map((e) => e.activityTaskScheduledEventAttributes?.activityType?.name); + assert.strictEqual(scheduled.filter((name) => name === 'getWeather').length, 1); + assert.strictEqual(scheduled.filter((name) => name === 'adk-invokeModel').length, 2); + }); + + it('weatherAgent: a failed tool Activity reaches the model as the tool response, and the agent answers from it', async () => { + const taskQueue = 'test-google-adk-tools-agent-failure'; + const result = await runWeatherAgent(taskQueue, taskQueue + '-' + Date.now(), { + getWeather: async () => { + throw ApplicationFailure.nonRetryable('the weather service is down'); + }, + }); + assert.strictEqual(result, 'I could not look up the weather: Activity task failed'); + }); +}); diff --git a/google-adk-agents/src/tools/worker.ts b/google-adk-agents/src/tools/worker.ts new file mode 100644 index 000000000..b05c4fd26 --- /dev/null +++ b/google-adk-agents/src/tools/worker.ts @@ -0,0 +1,24 @@ +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import * as activities from './activities'; + +async function run() { + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-tools', + workflowsPath: require.resolve('./workflows'), + activities, + plugins: [new GoogleAdkPlugin()], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/tools/workflows.ts b/google-adk-agents/src/tools/workflows.ts new file mode 100644 index 000000000..60f90df1a --- /dev/null +++ b/google-adk-agents/src/tools/workflows.ts @@ -0,0 +1,35 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { Type } from '@google/genai'; +import { activityAsTool, TemporalModel } from '@temporalio/google-adk-agents/workflow'; + +export async function weatherAgent(prompt: string): Promise { + const agent = new LlmAgent({ + name: 'weather_agent', + model: new TemporalModel('gemini-2.5-flash'), + instruction: 'Use the getWeather tool to answer weather questions.', + tools: [ + activityAsTool({ + name: 'getWeather', + description: 'Get the current weather for a city.', + parameters: { + type: Type.OBJECT, + properties: { city: { type: Type.STRING, description: 'The city name' } }, + required: ['city'], + }, + }), + ], + }); + + const runner = new InMemoryRunner({ agent }); + + let finalText = ''; + for await (const event of runner.runEphemeral({ + userId: 'user', + newMessage: { role: 'user', parts: [{ text: prompt }] }, + })) { + if (isFinalResponse(event)) { + finalText = stringifyContent(event); + } + } + return finalText; +} diff --git a/google-adk-agents/tsconfig.json b/google-adk-agents/tsconfig.json new file mode 100644 index 000000000..488f2c62a --- /dev/null +++ b/google-adk-agents/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "version": "5.6.3", + "compilerOptions": { + "lib": ["es2021"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "rootDir": "./src", + "outDir": "./lib" + }, + "include": ["src/**/*.ts"] +} From 05ec6bf1383b42f407dcdc9447197c9e77d8bb06 Mon Sep 17 00:00:00 2001 From: maplexu Date: Fri, 21 Aug 2026 12:49:13 -0400 Subject: [PATCH 2/6] AI-283: Conform Google ADK samples to standard scenarios --- README.md | 9 +- google-adk-agents/.post-create | 6 +- google-adk-agents/README.md | 23 +++-- google-adk-agents/src/agent-chat/README.md | 13 +++ google-adk-agents/src/agent-chat/client.ts | 31 ++++++ .../src/agent-chat/mocha/workflows.test.ts | 95 +++++++++++++++++++ .../src/agent-chat/offline-model.ts | 23 +++++ .../src/{basic => agent-chat}/worker.ts | 7 +- google-adk-agents/src/agent-chat/workflows.ts | 57 +++++++++++ .../src/agent-patterns/README.md | 25 ----- .../src/agent-patterns/client.ts | 21 ---- google-adk-agents/src/basic/README.md | 23 ----- google-adk-agents/src/basic/client.ts | 21 ---- .../src/basic/mocha/workflows.test.ts | 79 --------------- google-adk-agents/src/basic/workflows.ts | 23 ----- .../src/human-approval/client.ts | 22 ----- .../README.md | 11 ++- .../mocha/workflows.test.ts | 8 +- .../worker.ts | 2 +- .../workflows.ts | 1 - google-adk-agents/src/mcp/README.md | 24 +---- google-adk-agents/src/mcp/client.ts | 21 ---- .../src/mcp/mocha/workflows.test.ts | 1 - google-adk-agents/src/mcp/offline-model.ts | 28 ++++++ google-adk-agents/src/mcp/worker.ts | 32 +++++-- google-adk-agents/src/multi-agent/README.md | 9 ++ .../mocha/workflows.test.ts | 8 +- .../src/multi-agent/offline-model.ts | 39 ++++++++ .../{agent-patterns => multi-agent}/worker.ts | 7 +- .../workflows.ts | 0 google-adk-agents/src/observability/README.md | 4 +- .../observability/adk-usage-span-processor.ts | 1 - google-adk-agents/src/observability/client.ts | 21 ---- google-adk-agents/src/observability/worker.ts | 15 ++- google-adk-agents/src/streaming/README.md | 2 + google-adk-agents/src/streaming/worker.ts | 5 +- google-adk-agents/src/streaming/workflows.ts | 2 - .../src/structured-output/README.md | 13 +++ .../structured-output/mocha/workflows.test.ts | 74 +++++++++++++++ .../src/structured-output/worker.ts | 37 ++++++++ .../src/structured-output/workflows.ts | 59 ++++++++++++ google-adk-agents/src/tools/README.md | 24 ++--- google-adk-agents/src/tools/client.ts | 21 ---- .../src/tools/mocha/workflows.test.ts | 23 +++-- google-adk-agents/src/tools/offline-model.ts | 36 +++++++ google-adk-agents/src/tools/worker.ts | 5 +- google-adk-agents/src/tools/workflows.ts | 17 +++- google-adk-agents/tsconfig.json | 2 + 48 files changed, 655 insertions(+), 375 deletions(-) create mode 100644 google-adk-agents/src/agent-chat/README.md create mode 100644 google-adk-agents/src/agent-chat/client.ts create mode 100644 google-adk-agents/src/agent-chat/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/agent-chat/offline-model.ts rename google-adk-agents/src/{basic => agent-chat}/worker.ts (67%) create mode 100644 google-adk-agents/src/agent-chat/workflows.ts delete mode 100644 google-adk-agents/src/agent-patterns/README.md delete mode 100644 google-adk-agents/src/agent-patterns/client.ts delete mode 100644 google-adk-agents/src/basic/README.md delete mode 100644 google-adk-agents/src/basic/client.ts delete mode 100644 google-adk-agents/src/basic/mocha/workflows.test.ts delete mode 100644 google-adk-agents/src/basic/workflows.ts delete mode 100644 google-adk-agents/src/human-approval/client.ts rename google-adk-agents/src/{human-approval => human-in-the-loop}/README.md (68%) rename google-adk-agents/src/{human-approval => human-in-the-loop}/mocha/workflows.test.ts (89%) rename google-adk-agents/src/{human-approval => human-in-the-loop}/worker.ts (91%) rename google-adk-agents/src/{human-approval => human-in-the-loop}/workflows.ts (89%) delete mode 100644 google-adk-agents/src/mcp/client.ts create mode 100644 google-adk-agents/src/mcp/offline-model.ts create mode 100644 google-adk-agents/src/multi-agent/README.md rename google-adk-agents/src/{agent-patterns => multi-agent}/mocha/workflows.test.ts (86%) create mode 100644 google-adk-agents/src/multi-agent/offline-model.ts rename google-adk-agents/src/{agent-patterns => multi-agent}/worker.ts (67%) rename google-adk-agents/src/{agent-patterns => multi-agent}/workflows.ts (100%) delete mode 100644 google-adk-agents/src/observability/client.ts create mode 100644 google-adk-agents/src/structured-output/README.md create mode 100644 google-adk-agents/src/structured-output/mocha/workflows.test.ts create mode 100644 google-adk-agents/src/structured-output/worker.ts create mode 100644 google-adk-agents/src/structured-output/workflows.ts delete mode 100644 google-adk-agents/src/tools/client.ts create mode 100644 google-adk-agents/src/tools/offline-model.ts diff --git a/README.md b/README.md index 22cc6f879..aa82892ca 100644 --- a/README.md +++ b/README.md @@ -181,13 +181,14 @@ and you'll be given the list of sample options. - [**Customer Service**](./openai-agents/customer-service): A long-running, multi-turn Workflow driven by Updates and Queries, with triage handoffs and `continueAsNew` to bound history. - [**Nexus Tools**](./openai-agents/nexus-tools): Expose a Nexus Operation as an agent tool with `nexusOperationAsTool`. - [**Streaming**](./openai-agents/src/streaming): Run an agent in streaming mode over a Workflow Stream, with an external client subscribing to the model's deltas live. -- [**Google ADK Agents**](./google-adk-agents): Run [Google Agent Development Kit](https://github.com/google/adk-js) (`@google/adk`) agents as Temporal Workflows with the `@temporalio/google-adk-agents` integration. The [`google-adk-agents/`](./google-adk-agents) directory contains seven samples: - - [**Basic**](./google-adk-agents/src/basic): A single `LlmAgent` whose model is a `TemporalModel`, driven by `InMemoryRunner` for one durable model call. +- [**Google ADK Agents**](./google-adk-agents): Run [Google Agent Development Kit](https://github.com/google/adk-js) (`@google/adk`) agents as Temporal Workflows with the `@temporalio/google-adk-agents` integration. The [`google-adk-agents/`](./google-adk-agents) directory contains eight samples: + - [**Agent Chat**](./google-adk-agents/src/agent-chat): Multi-turn agent chat with Updates, queryable history, and Continue-As-New. - [**Tools**](./google-adk-agents/src/tools): An existing Temporal Activity exposed to the agent as an ADK tool with `activityAsTool`. - - [**Agent Patterns**](./google-adk-agents/src/agent-patterns): A coordinator `LlmAgent` starts an ADK `transfer_to_agent` relay through a researcher and a writer, each with its own `TemporalModel`. + - [**Multi-Agent**](./google-adk-agents/src/multi-agent): A coordinator `LlmAgent` starts an ADK `transfer_to_agent` relay through a researcher and a writer, each with its own `TemporalModel`. - [**MCP**](./google-adk-agents/src/mcp): A `TemporalMCPToolset` backed by a filesystem MCP server the Worker opens over stdio. - [**Streaming**](./google-adk-agents/src/streaming): Token streaming from a direct `TemporalModel` call — no agent loop — over a Workflow Stream, with an external client printing the deltas as they arrive. - - [**Human Approval**](./google-adk-agents/src/human-approval): A `LongRunningFunctionTool` whose completion is gated by a Temporal Signal or Update. + - [**Human in the Loop**](./google-adk-agents/src/human-in-the-loop): A `LongRunningFunctionTool` whose completion is gated by a Temporal Signal or Update. + - [**Structured Output**](./google-adk-agents/src/structured-output): Schema-constrained agent output validated at the Workflow boundary. - [**Observability**](./google-adk-agents/src/observability): Token usage, latency, and call counts from the agent loop's OpenTelemetry spans, by composing `OpenTelemetryPlugin` onto the Worker alongside `GoogleAdkPlugin`. ### Full-stack apps diff --git a/google-adk-agents/.post-create b/google-adk-agents/.post-create index 23ce8a44c..1542def55 100644 --- a/google-adk-agents/.post-create +++ b/google-adk-agents/.post-create @@ -12,9 +12,9 @@ Use Node version 22 or later: Mac: {cyan brew install node@22} Other: https://nodejs.org/en/download/ -This sample has several scenarios under {cyan src/}. Using two other shells, start a Worker for one scenario and run its client (example: {cyan basic}): +This sample has several scenarios under {cyan src/}. Using two other shells, start a Worker for one scenario and run its client (example: {cyan agent-chat}): -{cyan GEMINI_API_KEY= npx ts-node src/basic/worker.ts} -{cyan npx ts-node src/basic/client.ts} +{cyan GEMINI_API_KEY= npx ts-node src/agent-chat/worker.ts} +{cyan npx ts-node src/agent-chat/client.ts} See README.md for the full list of scenarios. diff --git a/google-adk-agents/README.md b/google-adk-agents/README.md index 380894322..b8ccd1f96 100644 --- a/google-adk-agents/README.md +++ b/google-adk-agents/README.md @@ -10,19 +10,22 @@ These apply to every sample in this directory: - A running Temporal dev server: `temporal server start-dev`. - Node 22 or later. -- A Gemini API key for live runs: `export GEMINI_API_KEY=...`. +- A Gemini API key for live runs: `export GEMINI_API_KEY=...`. Each scenario also documents a credential-free local mode. - Dependencies installed once at the `google-adk-agents/` root: `npm install`. Each scenario's README describes how to start its Worker and run its scenarios by path. ## Samples -| Sample | Demonstrates | -| :--------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | -| [`basic`](./src/basic) | A single `LlmAgent` whose model is a `TemporalModel`, driven by `InMemoryRunner` for one durable model call. | -| [`tools`](./src/tools) | An existing Temporal Activity exposed to the agent as an ADK tool via `activityAsTool`. | -| [`agent-patterns`](./src/agent-patterns) | A `transfer_to_agent` relay from a coordinator `LlmAgent` through a researcher and a writer, each with its own `TemporalModel`. | -| [`mcp`](./src/mcp) | A `TemporalMCPToolset` backed by an `mcpToolsets` factory on the plugin (a filesystem MCP server over stdio). | -| [`streaming`](./src/streaming) | Token streaming from a direct `TemporalModel` call — no agent loop — over the Workflow streams API. | -| [`human-approval`](./src/human-approval) | A `LongRunningFunctionTool` whose completion is gated by a Temporal Signal or Update. | -| [`observability`](./src/observability) | Token usage, latency, and call counts, by composing `OpenTelemetryPlugin` onto the Worker alongside `GoogleAdkPlugin`. | +| Sample | Demonstrates | +| :--------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ | +| [`agent-chat`](./src/agent-chat) | Multi-turn chat through Updates, inspectable state through a Query, and Continue-As-New with conversation history. | +| [`tools`](./src/tools) | An existing Temporal Activity exposed to the agent as an ADK tool via `activityAsTool`. | +| [`multi-agent`](./src/multi-agent) | A `transfer_to_agent` relay from a coordinator `LlmAgent` through a researcher and a writer, each with its own `TemporalModel`. | +| [`mcp`](./src/mcp) | A `TemporalMCPToolset` backed by an `mcpToolsets` factory on the plugin (a filesystem MCP server over stdio). | +| [`streaming`](./src/streaming) | Token streaming from a direct `TemporalModel` call — no agent loop — over the Workflow streams API. | +| [`human-in-the-loop`](./src/human-in-the-loop) | A `LongRunningFunctionTool` whose completion is gated by a Temporal Signal or Update. | +| [`structured-output`](./src/structured-output) | An agent constrained by an output schema, with validation at the Workflow boundary. | +| [`observability`](./src/observability) | Token usage, latency, and call counts, by composing `OpenTelemetryPlugin` onto the Worker alongside `GoogleAdkPlugin`. | + +ADK code executors are not included because the integration does not provide a durable Activity boundary for sandbox execution. diff --git a/google-adk-agents/src/agent-chat/README.md b/google-adk-agents/src/agent-chat/README.md new file mode 100644 index 000000000..f27309d9c --- /dev/null +++ b/google-adk-agents/src/agent-chat/README.md @@ -0,0 +1,13 @@ +# Agent chat + +This sample accepts messages through a Workflow Update, exposes conversation history through a Query, and carries that history across Continue-As-New runs. + +Start a live Worker with `GEMINI_API_KEY=... npx ts-node src/agent-chat/worker.ts` or a credential-free Worker with `MODEL_PROVIDER=fake npx ts-node src/agent-chat/worker.ts`. + +Run `npx ts-node src/agent-chat/client.ts`. Enter `/history` to query state and `/quit` to stop. + +Run its API-key-free test with: + +```sh +npx mocha --exit --require ts-node/register --require source-map-support/register "src/agent-chat/mocha/*.test.ts" +``` diff --git a/google-adk-agents/src/agent-chat/client.ts b/google-adk-agents/src/agent-chat/client.ts new file mode 100644 index 000000000..e8a7ab664 --- /dev/null +++ b/google-adk-agents/src/agent-chat/client.ts @@ -0,0 +1,31 @@ +import { createInterface } from 'readline/promises'; +import { Connection, Client } from '@temporalio/client'; +import { nanoid } from 'nanoid'; +import { agentChat, getChatState, sendMessage } from './workflows'; + +async function run() { + const connection = await Connection.connect(); + const client = new Client({ connection }); + const handle = await client.workflow.start(agentChat, { + taskQueue: 'google-adk-agent-chat', + workflowId: 'google-adk-agent-chat-' + nanoid(), + }); + const input = createInterface({ input: process.stdin, output: process.stdout }); + for (;;) { + const prompt = await input.question('you> '); + if (prompt === '/quit') break; + if (prompt === '/history') { + console.log((await handle.query(getChatState)).messages); + continue; + } + console.log(`assistant> ${await handle.executeUpdate(sendMessage, { args: [prompt] })}`); + } + input.close(); + await handle.terminate(); + await connection.close(); +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/agent-chat/mocha/workflows.test.ts b/google-adk-agents/src/agent-chat/mocha/workflows.test.ts new file mode 100644 index 000000000..435ceee0a --- /dev/null +++ b/google-adk-agents/src/agent-chat/mocha/workflows.test.ts @@ -0,0 +1,95 @@ +import type { LlmRequest, LlmResponse } from '@google/adk'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { FakeLlm } from '@temporalio/google-adk-agents/testing'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { offlineModelProvider } from '../offline-model'; +import { agentChat, getChatState, sendMessage } from '../workflows'; + +describe('google-adk-agents/agent-chat', function () { + this.timeout(30_000); + let testEnv: TestWorkflowEnvironment; + before(async () => (testEnv = await TestWorkflowEnvironment.createLocal())); + after(async () => testEnv?.teardown()); + + it('accepts multiple turns and continues as new with conversation state', async () => { + const requests: LlmRequest[] = []; + const taskQueue = `test-google-adk-agent-chat-${Date.now()}`; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider: offlineModelProvider((request) => requests.push(request)) })], + }); + await worker.runUntil(async () => { + const handle = await testEnv.client.workflow.start(agentChat, { + args: [[], 0, 1, 2], + workflowId: taskQueue, + taskQueue, + }); + assert.strictEqual(await handle.executeUpdate(sendMessage, { args: ['My name is Ada.'] }), 'Hello, Ada.'); + assert.strictEqual(await handle.executeUpdate(sendMessage, { args: ['What is my name?'] }), 'Your name is Ada.'); + await testEnv.sleep(100); + const state = await handle.query(getChatState); + assert.deepStrictEqual(state.messages, [ + { role: 'user', text: 'My name is Ada.' }, + { role: 'assistant', text: 'Hello, Ada.' }, + { role: 'user', text: 'What is my name?' }, + { role: 'assistant', text: 'Your name is Ada.' }, + ]); + assert.strictEqual(requests.length, 2); + const requestText = (requests[1].contents ?? []) + .flatMap((content) => content.parts ?? []) + .map((part) => part.text ?? '') + .join('\n'); + assert.ok(requestText.includes('user: My name is Ada.\nassistant: Hello, Ada.\nuser: What is my name?')); + assert.ok(state.runs >= 2); + await handle.terminate(); + }); + }); + + it('serializes concurrent updates with shared conversation context', async () => { + const requests: LlmRequest[] = []; + class InspectingLlm extends FakeLlm { + override async *generateContentAsync(request: LlmRequest): AsyncGenerator { + requests.push(request); + yield { + content: { role: 'model', parts: [{ text: requests.length === 1 ? 'First answer.' : 'Second answer.' }] }, + turnComplete: true, + }; + } + } + const taskQueue = `test-google-adk-agent-chat-concurrent-${Date.now()}`; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider: () => new InspectingLlm() })], + }); + await worker.runUntil(async () => { + const handle = await testEnv.client.workflow.start(agentChat, { + args: [[], 0, 1, 3], + workflowId: taskQueue, + taskQueue, + }); + const first = handle.executeUpdate(sendMessage, { args: ['First prompt.'] }); + const second = handle.executeUpdate(sendMessage, { args: ['Second prompt.'] }); + assert.deepStrictEqual((await Promise.all([first, second])).sort(), ['First answer.', 'Second answer.']); + assert.strictEqual(requests.length, 2); + const firstPrompt = JSON.stringify(requests[0]).includes('First prompt.') ? 'First prompt.' : 'Second prompt.'; + const secondPrompt = firstPrompt === 'First prompt.' ? 'Second prompt.' : 'First prompt.'; + assert.ok(JSON.stringify(requests[1]).includes(firstPrompt)); + assert.match(JSON.stringify(requests[1]), /First answer\./); + const state = await handle.query(getChatState); + assert.deepStrictEqual(state.messages, [ + { role: 'user', text: firstPrompt }, + { role: 'assistant', text: 'First answer.' }, + { role: 'user', text: secondPrompt }, + { role: 'assistant', text: 'Second answer.' }, + ]); + await handle.terminate(); + }); + }); +}); diff --git a/google-adk-agents/src/agent-chat/offline-model.ts b/google-adk-agents/src/agent-chat/offline-model.ts new file mode 100644 index 000000000..91d5f3d40 --- /dev/null +++ b/google-adk-agents/src/agent-chat/offline-model.ts @@ -0,0 +1,23 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; + +export function offlineModelProvider(onRequest?: (request: LlmRequest) => void): (model: string) => BaseLlm { + class OfflineLlm extends BaseLlm { + override async *generateContentAsync(request: LlmRequest): AsyncGenerator { + onRequest?.(request); + const text = (request.contents ?? []) + .flatMap((content) => content.parts ?? []) + .map((part) => part.text ?? '') + .join('\n'); + const answer = text.includes('user: My name is Ada.\nassistant: Hello, Ada.\nuser: What is my name?') + ? 'Your name is Ada.' + : 'Hello, Ada.'; + yield { content: { role: 'model', parts: [{ text: answer }] }, turnComplete: true }; + } + + override async connect(): Promise { + throw new Error('OfflineLlm does not support connect().'); + } + } + return (model) => new OfflineLlm({ model }); +} diff --git a/google-adk-agents/src/basic/worker.ts b/google-adk-agents/src/agent-chat/worker.ts similarity index 67% rename from google-adk-agents/src/basic/worker.ts rename to google-adk-agents/src/agent-chat/worker.ts index 20d242f27..43e536c52 100644 --- a/google-adk-agents/src/basic/worker.ts +++ b/google-adk-agents/src/agent-chat/worker.ts @@ -1,14 +1,17 @@ import { NativeConnection, Worker } from '@temporalio/worker'; import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { offlineModelProvider } from './offline-model'; async function run() { const connection = await NativeConnection.connect({ address: 'localhost:7233' }); try { const worker = await Worker.create({ connection, - taskQueue: 'google-adk-basic', + taskQueue: 'google-adk-agent-chat', workflowsPath: require.resolve('./workflows'), - plugins: [new GoogleAdkPlugin()], + plugins: [ + new GoogleAdkPlugin(process.env.MODEL_PROVIDER === 'fake' ? { modelProvider: offlineModelProvider() } : {}), + ], }); await worker.run(); } finally { diff --git a/google-adk-agents/src/agent-chat/workflows.ts b/google-adk-agents/src/agent-chat/workflows.ts new file mode 100644 index 000000000..7d89720b2 --- /dev/null +++ b/google-adk-agents/src/agent-chat/workflows.ts @@ -0,0 +1,57 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; +import { condition, continueAsNew, defineQuery, defineUpdate, setHandler } from '@temporalio/workflow'; + +export interface Message { + role: 'user' | 'assistant'; + text: string; +} + +export interface ChatState { + messages: Message[]; + turns: number; + runs: number; +} + +export const sendMessage = defineUpdate('sendMessage'); +export const getChatState = defineQuery('getChatState'); + +export async function agentChat(messages: Message[] = [], turns = 0, runs = 1, turnsPerRun = 3): Promise { + let processing = 0; + let nextUpdate = 0; + let currentUpdate = 0; + const agent = new LlmAgent({ + name: 'assistant', + model: new TemporalModel('gemini-2.5-flash'), + instruction: 'Continue the conversation using its prior context. Respond in one sentence.', + }); + const runner = new InMemoryRunner({ agent, appName: 'agent-chat' }); + const sessionId = `run-${runs}`; + await runner.sessionService.createSession({ appName: runner.appName, userId: 'user', sessionId }); + setHandler(getChatState, () => ({ messages, turns, runs })); + setHandler(sendMessage, async (prompt) => { + const update = nextUpdate++; + processing++; + try { + await condition(() => update === currentUpdate); + const transcript = messages.map((message) => `${message.role}: ${message.text}`).join('\n'); + let answer = ''; + for await (const event of runner.runAsync({ + userId: 'user', + sessionId, + newMessage: { role: 'user', parts: [{ text: `${transcript}${transcript ? '\n' : ''}user: ${prompt}` }] }, + })) { + if (isFinalResponse(event)) answer = stringifyContent(event); + } + messages = [...messages, { role: 'user', text: prompt }, { role: 'assistant', text: answer }]; + turns++; + return answer; + } finally { + currentUpdate++; + processing--; + } + }); + + await condition(() => turns >= turnsPerRun && processing === 0); + await continueAsNew(messages, 0, runs + 1, turnsPerRun); +} diff --git a/google-adk-agents/src/agent-patterns/README.md b/google-adk-agents/src/agent-patterns/README.md deleted file mode 100644 index c5ca34220..000000000 --- a/google-adk-agents/src/agent-patterns/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Google ADK Agents: Agent Patterns - -A relay of three `LlmAgent`s over ADK's built-in `transfer_to_agent` tool, all of it running durably inside the Workflow: a coordinator transfers to a researcher, and the researcher transfers on to a writer, which produces the final answer. - -Each agent's `TemporalModel` sets a `summary` — the label the Temporal UI puts on that turn's `adk-invokeModel` Activity. - -## Run - -Run these from the `google-adk-agents/` root (run `npm install` there once first). - -```bash -# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): -GEMINI_API_KEY=... npx ts-node src/agent-patterns/worker.ts - -# In another terminal, run the scenario: -npx ts-node src/agent-patterns/client.ts -``` - -## Test - -```bash -npx mocha --exit --require ts-node/register --require source-map-support/register "src/agent-patterns/mocha/*.test.ts" -``` - -The test runs a real Worker against `TestWorkflowEnvironment` with a scripted `BaseLlm` double of its own, which answers each turn according to the agent ADK names as the asker: a transfer for the coordinator and the researcher, the haiku for the writer. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/agent-patterns/client.ts b/google-adk-agents/src/agent-patterns/client.ts deleted file mode 100644 index 15ddd325c..000000000 --- a/google-adk-agents/src/agent-patterns/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Connection, Client } from '@temporalio/client'; -import { nanoid } from 'nanoid'; -import { multiAgent } from './workflows'; - -async function run() { - const connection = await Connection.connect(); - const client = new Client({ connection }); - - const result = await client.workflow.execute(multiAgent, { - taskQueue: 'google-adk-agent-patterns', - workflowId: 'google-adk-agent-patterns-' + nanoid(), - args: ['durable execution'], - }); - - console.log(result); -} - -run().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/google-adk-agents/src/basic/README.md b/google-adk-agents/src/basic/README.md deleted file mode 100644 index 989108fe7..000000000 --- a/google-adk-agents/src/basic/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Google ADK Agents: Basic - -A single ADK `LlmAgent` whose model is a `TemporalModel`, driven by `InMemoryRunner` for one durable model call. Two things change from a vanilla ADK agent: the agent's `model` becomes `new TemporalModel('gemini-2.5-flash')` where the model name would otherwise go, and the Worker registers `GoogleAdkPlugin`. The agent loop then runs inside the Workflow while the model call runs as an Activity. - -## Run - -Run these from the `google-adk-agents/` root (run `npm install` there once first). - -```bash -# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): -GEMINI_API_KEY=... npx ts-node src/basic/worker.ts - -# In another terminal, run the scenario: -npx ts-node src/basic/client.ts -``` - -## Test - -```bash -npx mocha --exit --require ts-node/register --require source-map-support/register "src/basic/mocha/*.test.ts" -``` - -The tests run a real Worker against `TestWorkflowEnvironment`, so no `GEMINI_API_KEY` is required: one answers through `fakeModelProvider`, the other fails the model call and asserts the Workflow fails with it. diff --git a/google-adk-agents/src/basic/client.ts b/google-adk-agents/src/basic/client.ts deleted file mode 100644 index c7454a340..000000000 --- a/google-adk-agents/src/basic/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Connection, Client } from '@temporalio/client'; -import { nanoid } from 'nanoid'; -import { helloWorld } from './workflows'; - -async function run() { - const connection = await Connection.connect(); - const client = new Client({ connection }); - - const result = await client.workflow.execute(helloWorld, { - taskQueue: 'google-adk-basic', - workflowId: 'google-adk-basic-' + nanoid(), - args: ['Write a haiku about durable execution.'], - }); - - console.log(result); -} - -run().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/google-adk-agents/src/basic/mocha/workflows.test.ts b/google-adk-agents/src/basic/mocha/workflows.test.ts deleted file mode 100644 index ed0890bf3..000000000 --- a/google-adk-agents/src/basic/mocha/workflows.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { BaseLlm } from '@google/adk'; -import type { BaseLlmConnection, LlmResponse } from '@google/adk'; -import { TestWorkflowEnvironment } from '@temporalio/testing'; -import { ActivityFailure, ApplicationFailure } from '@temporalio/common'; -import { WorkflowFailedError } from '@temporalio/client'; -import { Worker } from '@temporalio/worker'; -import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; -import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; -import { after, before, describe, it } from 'mocha'; -import assert from 'assert'; -import { helloWorld } from '../workflows'; - -function failingModelProvider(): (model: string) => BaseLlm { - class FailingLlm extends BaseLlm { - override generateContentAsync(): AsyncGenerator { - throw ApplicationFailure.nonRetryable('the model rejected the request'); - } - - override async connect(): Promise { - throw new Error('FailingLlm does not support connect().'); - } - } - return (model: string) => new FailingLlm({ model }); -} - -describe('google-adk-agents/basic workflow scenarios', function () { - this.timeout(30_000); - - let testEnv: TestWorkflowEnvironment; - - before(async () => { - testEnv = await TestWorkflowEnvironment.createLocal(); - }); - - after(async () => { - await testEnv?.teardown(); - }); - - it('helloWorld: runs an LlmAgent through the runner with durable model calls', async () => { - const taskQueue = 'test-google-adk-basic'; - const worker = await Worker.create({ - connection: testEnv.nativeConnection, - taskQueue, - workflowsPath: require.resolve('../workflows'), - plugins: [new GoogleAdkPlugin({ modelProvider: fakeModelProvider() })], - }); - const result = await worker.runUntil( - testEnv.client.workflow.execute(helloWorld, { - args: ['Say hello.'], - workflowId: 'test-google-adk-basic-' + Date.now(), - taskQueue, - }), - ); - assert.strictEqual(result, 'fake-response:gemini-2.5-flash'); - }); - - it('helloWorld: a failed model call fails the Workflow rather than answering with an empty string', async () => { - const taskQueue = 'test-google-adk-basic-model-failure'; - const worker = await Worker.create({ - connection: testEnv.nativeConnection, - taskQueue, - workflowsPath: require.resolve('../workflows'), - plugins: [new GoogleAdkPlugin({ modelProvider: failingModelProvider() })], - }); - await worker.runUntil( - assert.rejects( - testEnv.client.workflow.execute(helloWorld, { - args: ['Say hello.'], - workflowId: taskQueue + '-' + Date.now(), - taskQueue, - }), - (err: unknown) => - err instanceof WorkflowFailedError && - err.cause instanceof ActivityFailure && - err.cause.cause?.message === 'the model rejected the request', - ), - ); - }); -}); diff --git a/google-adk-agents/src/basic/workflows.ts b/google-adk-agents/src/basic/workflows.ts deleted file mode 100644 index f1a99e9c7..000000000 --- a/google-adk-agents/src/basic/workflows.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; -import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; - -export async function helloWorld(prompt: string): Promise { - const agent = new LlmAgent({ - name: 'assistant', - model: new TemporalModel('gemini-2.5-flash'), - instruction: 'You are a helpful assistant. Respond in a single sentence.', - }); - - const runner = new InMemoryRunner({ agent }); - - let finalText = ''; - for await (const event of runner.runEphemeral({ - userId: 'user', - newMessage: { role: 'user', parts: [{ text: prompt }] }, - })) { - if (isFinalResponse(event)) { - finalText = stringifyContent(event); - } - } - return finalText; -} diff --git a/google-adk-agents/src/human-approval/client.ts b/google-adk-agents/src/human-approval/client.ts deleted file mode 100644 index 411511c8b..000000000 --- a/google-adk-agents/src/human-approval/client.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Connection, Client } from '@temporalio/client'; -import { nanoid } from 'nanoid'; -import { humanApproval, approveSignal } from './workflows'; - -async function run() { - const connection = await Connection.connect(); - const client = new Client({ connection }); - - const handle = await client.workflow.start(humanApproval, { - taskQueue: 'google-adk-human-approval', - workflowId: 'google-adk-human-approval-' + nanoid(), - }); - console.log(`Started workflow ${handle.workflowId}; sending approval Signal.`); - - await handle.signal(approveSignal, 'approved-by-operator'); - console.log(await handle.result()); -} - -run().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/google-adk-agents/src/human-approval/README.md b/google-adk-agents/src/human-in-the-loop/README.md similarity index 68% rename from google-adk-agents/src/human-approval/README.md rename to google-adk-agents/src/human-in-the-loop/README.md index 83b3b029b..30450eaf8 100644 --- a/google-adk-agents/src/human-approval/README.md +++ b/google-adk-agents/src/human-in-the-loop/README.md @@ -1,4 +1,4 @@ -# Google ADK Agents: Human Approval +# Google ADK Agents: Human in the Loop A human-in-the-loop flow. The Workflow body invokes an ADK `LongRunningFunctionTool` whose `execute` blocks on a Temporal `condition` until a human's decision arrives, then returns it. The `approve` Signal and the `approveUpdate` Update each have their own handler; what they share is the variable the tool's `condition` is waiting on, so either one releases it (the Update handler additionally echoes the decision back to its caller). @@ -8,16 +8,17 @@ Run these from the `google-adk-agents/` root (run `npm install` there once first ```bash # In one terminal, start the Worker (requires a local Temporal server): -npx ts-node src/human-approval/worker.ts +npx ts-node src/human-in-the-loop/worker.ts -# In another terminal, start the Workflow (the client sends the approval Signal): -npx ts-node src/human-approval/client.ts +# In another terminal, start the Workflow and send the approval Signal: +temporal workflow start --type humanApproval --task-queue google-adk-human-in-the-loop --workflow-id google-adk-human-in-the-loop-1 +temporal workflow signal --workflow-id google-adk-human-in-the-loop-1 --name approve --input '"approved-by-operator"' ``` ## Test ```bash -npx mocha --exit --require ts-node/register --require source-map-support/register "src/human-approval/mocha/*.test.ts" +npx mocha --exit --require ts-node/register --require source-map-support/register "src/human-in-the-loop/mocha/*.test.ts" ``` The tests run a real Worker against `TestWorkflowEnvironment`: two release the tool, one through the `approve` Signal and one through the `approveUpdate` Update, asserting it resumes with the supplied value; the third cancels the Workflow and asserts it ends CANCELLED. No `GEMINI_API_KEY` is required. diff --git a/google-adk-agents/src/human-approval/mocha/workflows.test.ts b/google-adk-agents/src/human-in-the-loop/mocha/workflows.test.ts similarity index 89% rename from google-adk-agents/src/human-approval/mocha/workflows.test.ts rename to google-adk-agents/src/human-in-the-loop/mocha/workflows.test.ts index 5d38ce934..cc7b06cf1 100644 --- a/google-adk-agents/src/human-approval/mocha/workflows.test.ts +++ b/google-adk-agents/src/human-in-the-loop/mocha/workflows.test.ts @@ -5,7 +5,7 @@ import { after, before, describe, it } from 'mocha'; import assert from 'assert'; import { humanApproval, approveSignal, approveUpdate } from '../workflows'; -describe('google-adk-agents/human-approval workflow scenarios', function () { +describe('google-adk-agents/human-in-the-loop workflow scenarios', function () { this.timeout(30_000); let testEnv: TestWorkflowEnvironment; @@ -28,7 +28,7 @@ describe('google-adk-agents/human-approval workflow scenarios', function () { } it('humanApproval: long-running tool resumes on the approve Signal', async () => { - const taskQueue = 'test-google-adk-human-approval-signal'; + const taskQueue = 'test-google-adk-human-in-the-loop-signal'; const worker = await makeWorker(taskQueue); await worker.runUntil(async () => { const handle = await testEnv.client.workflow.start(humanApproval, { @@ -41,7 +41,7 @@ describe('google-adk-agents/human-approval workflow scenarios', function () { }); it('humanApproval: long-running tool resumes on the approve Update', async () => { - const taskQueue = 'test-google-adk-human-approval-update'; + const taskQueue = 'test-google-adk-human-in-the-loop-update'; const worker = await makeWorker(taskQueue); await worker.runUntil(async () => { const handle = await testEnv.client.workflow.start(humanApproval, { @@ -55,7 +55,7 @@ describe('google-adk-agents/human-approval workflow scenarios', function () { }); it('humanApproval: cancelling the Workflow ends it as CANCELLED', async () => { - const taskQueue = 'test-google-adk-human-approval-cancel'; + const taskQueue = 'test-google-adk-human-in-the-loop-cancel'; const worker = await makeWorker(taskQueue); await worker.runUntil(async () => { const handle = await testEnv.client.workflow.start(humanApproval, { diff --git a/google-adk-agents/src/human-approval/worker.ts b/google-adk-agents/src/human-in-the-loop/worker.ts similarity index 91% rename from google-adk-agents/src/human-approval/worker.ts rename to google-adk-agents/src/human-in-the-loop/worker.ts index 98e94d4f6..4eb1daa24 100644 --- a/google-adk-agents/src/human-approval/worker.ts +++ b/google-adk-agents/src/human-in-the-loop/worker.ts @@ -6,7 +6,7 @@ async function run() { try { const worker = await Worker.create({ connection, - taskQueue: 'google-adk-human-approval', + taskQueue: 'google-adk-human-in-the-loop', workflowsPath: require.resolve('./workflows'), plugins: [new GoogleAdkPlugin()], }); diff --git a/google-adk-agents/src/human-approval/workflows.ts b/google-adk-agents/src/human-in-the-loop/workflows.ts similarity index 89% rename from google-adk-agents/src/human-approval/workflows.ts rename to google-adk-agents/src/human-in-the-loop/workflows.ts index 0acd2e588..ed5e9a3f5 100644 --- a/google-adk-agents/src/human-approval/workflows.ts +++ b/google-adk-agents/src/human-in-the-loop/workflows.ts @@ -34,7 +34,6 @@ export async function humanApproval(): Promise { try { return (await tool.runAsync({ args: {}, toolContext: {} as never })) as string; } catch (err) { - // ADK's FunctionTool re-throws execute's error as a plain Error, so a cancelled condition() no longer reads as cancellation. if (CancellationScope.current().consideredCancelled) { throw new CancelledFailure('Workflow cancelled'); } diff --git a/google-adk-agents/src/mcp/README.md b/google-adk-agents/src/mcp/README.md index 70b1ad8c1..274eec7d2 100644 --- a/google-adk-agents/src/mcp/README.md +++ b/google-adk-agents/src/mcp/README.md @@ -1,23 +1,9 @@ -# Google ADK Agents: MCP +# MCP -A `TemporalMCPToolset` backed by a real [Model Context Protocol](https://modelcontextprotocol.io) server. The agent declares `new TemporalMCPToolset({ name: 'filesystem' })`; the Worker registers the matching `filesystem` factory on the plugin via `mcpToolsets`, which opens a filesystem MCP server over stdio (`@modelcontextprotocol/server-filesystem`). Tool discovery and every tool call route through `filesystem-listTools` / `filesystem-callTool` Activities, so the MCP connection details stay on the Worker and never enter Workflow inputs. +This stateless MCP sample lets an agent read a sample file. Live mode starts the filesystem MCP server over stdio; offline mode registers an in-memory MCP toolset and needs no network access. -## Run +Start a live Worker with `GEMINI_API_KEY=... npx ts-node src/mcp/worker.ts` or a credential-free Worker with `MODEL_PROVIDER=fake npx ts-node src/mcp/worker.ts`. -Run these from the `google-adk-agents/` root (run `npm install` there once first). The Worker spawns the filesystem MCP server with `npx`, exposing this sample's `src/mcp/sample-files/` directory. - -```bash -# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): -GEMINI_API_KEY=... npx ts-node src/mcp/worker.ts - -# In another terminal, run the scenario: -npx ts-node src/mcp/client.ts -``` - -## Test - -```bash -npx mocha --exit --require ts-node/register --require source-map-support/register "src/mcp/mocha/*.test.ts" +```sh +temporal workflow start --type filesystemAgent --task-queue google-adk-mcp --workflow-id google-adk-mcp-1 --input '"Read hello.txt."' ``` - -The test registers an in-memory `mockMCPToolset` on the plugin under the same `filesystem` name — no MCP server subprocess, no `npx`, no network, and no `GEMINI_API_KEY`. It drives `filesystemAgent` against a scripted model double, so a real tool call crosses the `filesystem-callTool` Activity and its result comes back on the next model turn. diff --git a/google-adk-agents/src/mcp/client.ts b/google-adk-agents/src/mcp/client.ts deleted file mode 100644 index b30a8f033..000000000 --- a/google-adk-agents/src/mcp/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Connection, Client } from '@temporalio/client'; -import { nanoid } from 'nanoid'; -import { filesystemAgent } from './workflows'; - -async function run() { - const connection = await Connection.connect(); - const client = new Client({ connection }); - - const result = await client.workflow.execute(filesystemAgent, { - taskQueue: 'google-adk-mcp', - workflowId: 'google-adk-mcp-' + nanoid(), - args: ['List the files you can access, then summarize what is in hello.txt.'], - }); - - console.log(result); -} - -run().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/google-adk-agents/src/mcp/mocha/workflows.test.ts b/google-adk-agents/src/mcp/mocha/workflows.test.ts index 2cf0d4266..c7a596a87 100644 --- a/google-adk-agents/src/mcp/mocha/workflows.test.ts +++ b/google-adk-agents/src/mcp/mocha/workflows.test.ts @@ -18,7 +18,6 @@ const readFileDef: MockMCPToolDefinition = { handler: (args) => ({ contents: `contents of ${String(args.path)}` }), }; -// A fresh model instance per Activity invocation, so the turn has to come from the request. function readFileModelProvider(): (model: string) => BaseLlm { class ReadFileLlm extends BaseLlm { override async *generateContentAsync( diff --git a/google-adk-agents/src/mcp/offline-model.ts b/google-adk-agents/src/mcp/offline-model.ts new file mode 100644 index 000000000..eebbd038b --- /dev/null +++ b/google-adk-agents/src/mcp/offline-model.ts @@ -0,0 +1,28 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; + +export function offlineModelProvider(): (model: string) => BaseLlm { + class OfflineLlm extends BaseLlm { + override async *generateContentAsync(request: LlmRequest): AsyncGenerator { + const response = (request.contents ?? []) + .flatMap((content) => content.parts ?? []) + .find((part) => part.functionResponse?.name === 'read_file')?.functionResponse; + if (response === undefined) { + yield { + content: { role: 'model', parts: [{ functionCall: { name: 'read_file', args: { path: 'hello.txt' } } }] }, + turnComplete: true, + }; + return; + } + yield { + content: { role: 'model', parts: [{ text: String((response.response as { contents: unknown }).contents) }] }, + turnComplete: true, + }; + } + + override async connect(): Promise { + throw new Error('OfflineLlm does not support connect().'); + } + } + return (model) => new OfflineLlm({ model }); +} diff --git a/google-adk-agents/src/mcp/worker.ts b/google-adk-agents/src/mcp/worker.ts index dba6cd711..72ac62105 100644 --- a/google-adk-agents/src/mcp/worker.ts +++ b/google-adk-agents/src/mcp/worker.ts @@ -1,9 +1,13 @@ import * as path from 'path'; import { NativeConnection, Worker } from '@temporalio/worker'; import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { mockMCPToolset } from '@temporalio/google-adk-agents/testing'; +import { Type } from '@google/genai'; +import { offlineModelProvider } from './offline-model'; async function run() { const exposedDir = path.resolve(__dirname, 'sample-files'); + const offline = process.env.MODEL_PROVIDER === 'fake'; const connection = await NativeConnection.connect({ address: 'localhost:7233' }); try { @@ -13,14 +17,28 @@ async function run() { workflowsPath: require.resolve('./workflows'), plugins: [ new GoogleAdkPlugin({ + ...(offline ? { modelProvider: offlineModelProvider() } : {}), mcpToolsets: { - filesystem: () => ({ - type: 'StdioConnectionParams', - serverParams: { - command: 'npx', - args: ['-y', '@modelcontextprotocol/server-filesystem', exposedDir], - }, - }), + filesystem: offline + ? mockMCPToolset([ + { + declaration: { + name: 'read_file', + description: 'Read a file.', + parameters: { type: Type.OBJECT, properties: { path: { type: Type.STRING } } }, + }, + handler: ({ path: file }) => ({ + contents: file === 'hello.txt' ? 'Hello from the Temporal Google ADK sample.' : 'File not found.', + }), + }, + ]) + : () => ({ + type: 'StdioConnectionParams', + serverParams: { + command: 'npx', + args: ['-y', '@modelcontextprotocol/server-filesystem', exposedDir], + }, + }), }, }), ], diff --git a/google-adk-agents/src/multi-agent/README.md b/google-adk-agents/src/multi-agent/README.md new file mode 100644 index 000000000..ea0ecd88c --- /dev/null +++ b/google-adk-agents/src/multi-agent/README.md @@ -0,0 +1,9 @@ +# Multi-agent + +A coordinator transfers the request to a researcher, which transfers it to a writer. + +Start a live Worker with `GEMINI_API_KEY=... npx ts-node src/multi-agent/worker.ts` or a credential-free Worker with `MODEL_PROVIDER=fake npx ts-node src/multi-agent/worker.ts`. + +```sh +temporal workflow start --type multiAgent --task-queue google-adk-multi-agent --workflow-id google-adk-multi-agent-1 --input '"durable execution"' +``` diff --git a/google-adk-agents/src/agent-patterns/mocha/workflows.test.ts b/google-adk-agents/src/multi-agent/mocha/workflows.test.ts similarity index 86% rename from google-adk-agents/src/agent-patterns/mocha/workflows.test.ts rename to google-adk-agents/src/multi-agent/mocha/workflows.test.ts index 6005940f8..948381b61 100644 --- a/google-adk-agents/src/agent-patterns/mocha/workflows.test.ts +++ b/google-adk-agents/src/multi-agent/mocha/workflows.test.ts @@ -11,7 +11,6 @@ function text(s: string): LlmResponse { return { content: { role: 'model', parts: [{ text: s }] }, turnComplete: true }; } -// ADK JS's `transfer_to_agent` tool reads `args.agentName` (camelCase). function transferTo(agentName: string): LlmResponse { return { content: { role: 'model', parts: [{ functionCall: { name: 'transfer_to_agent', args: { agentName } } }] }, @@ -19,7 +18,6 @@ function transferTo(agentName: string): LlmResponse { }; } -// Keyed by the asking agent rather than by call order, so an Activity retry re-serves the same turn. function scriptedModelProvider(script: Record): (model: string) => BaseLlm { class ScriptedLlm extends BaseLlm { override async *generateContentAsync( @@ -42,7 +40,7 @@ function scriptedModelProvider(script: Record): (model: str return (model: string) => new ScriptedLlm({ model }); } -describe('google-adk-agents/agent-patterns workflow scenarios', function () { +describe('google-adk-agents/multi-agent workflow scenarios', function () { this.timeout(30_000); let testEnv: TestWorkflowEnvironment; @@ -62,7 +60,7 @@ describe('google-adk-agents/agent-patterns workflow scenarios', function () { writer: text('snow on the mountain'), }); - const taskQueue = 'test-google-adk-agent-patterns'; + const taskQueue = 'test-google-adk-multi-agent'; const worker = await Worker.create({ connection: testEnv.nativeConnection, taskQueue, @@ -72,7 +70,7 @@ describe('google-adk-agents/agent-patterns workflow scenarios', function () { const result = await worker.runUntil( testEnv.client.workflow.execute(multiAgent, { args: ['mountains'], - workflowId: 'test-google-adk-agent-patterns-' + Date.now(), + workflowId: 'test-google-adk-multi-agent-' + Date.now(), taskQueue, }), ); diff --git a/google-adk-agents/src/multi-agent/offline-model.ts b/google-adk-agents/src/multi-agent/offline-model.ts new file mode 100644 index 000000000..ff3d7e425 --- /dev/null +++ b/google-adk-agents/src/multi-agent/offline-model.ts @@ -0,0 +1,39 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; + +export function offlineModelProvider(): (model: string) => BaseLlm { + class OfflineLlm extends BaseLlm { + override async *generateContentAsync(request: LlmRequest): AsyncGenerator { + const agent = request.config?.labels?.['adk_agent_name']; + if (agent === 'coordinator' || agent === 'researcher') { + yield { + content: { + role: 'model', + parts: [ + { + functionCall: { + name: 'transfer_to_agent', + args: { agentName: agent === 'coordinator' ? 'researcher' : 'writer' }, + }, + }, + ], + }, + turnComplete: true, + }; + return; + } + yield { + content: { + role: 'model', + parts: [{ text: 'Retries fade away\nDurable words cross the years\nWorkflows remember' }], + }, + turnComplete: true, + }; + } + + override async connect(): Promise { + throw new Error('OfflineLlm does not support connect().'); + } + } + return (model) => new OfflineLlm({ model }); +} diff --git a/google-adk-agents/src/agent-patterns/worker.ts b/google-adk-agents/src/multi-agent/worker.ts similarity index 67% rename from google-adk-agents/src/agent-patterns/worker.ts rename to google-adk-agents/src/multi-agent/worker.ts index 5edb64c26..797065f56 100644 --- a/google-adk-agents/src/agent-patterns/worker.ts +++ b/google-adk-agents/src/multi-agent/worker.ts @@ -1,14 +1,17 @@ import { NativeConnection, Worker } from '@temporalio/worker'; import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { offlineModelProvider } from './offline-model'; async function run() { const connection = await NativeConnection.connect({ address: 'localhost:7233' }); try { const worker = await Worker.create({ connection, - taskQueue: 'google-adk-agent-patterns', + taskQueue: 'google-adk-multi-agent', workflowsPath: require.resolve('./workflows'), - plugins: [new GoogleAdkPlugin()], + plugins: [ + new GoogleAdkPlugin(process.env.MODEL_PROVIDER === 'fake' ? { modelProvider: offlineModelProvider() } : {}), + ], }); await worker.run(); } finally { diff --git a/google-adk-agents/src/agent-patterns/workflows.ts b/google-adk-agents/src/multi-agent/workflows.ts similarity index 100% rename from google-adk-agents/src/agent-patterns/workflows.ts rename to google-adk-agents/src/multi-agent/workflows.ts diff --git a/google-adk-agents/src/observability/README.md b/google-adk-agents/src/observability/README.md index 472c83fb3..309695427 100644 --- a/google-adk-agents/src/observability/README.md +++ b/google-adk-agents/src/observability/README.md @@ -23,9 +23,11 @@ Run these from the `google-adk-agents/` root (run `npm install` there once first GEMINI_API_KEY=... npx ts-node src/observability/worker.ts # In another terminal, run the scenario: -npx ts-node src/observability/client.ts +temporal workflow start --type observedAgent --task-queue google-adk-observability --workflow-id google-adk-observability-1 --input '["Write a haiku about durable execution.","Write a haiku about replay."]' ``` +For a credential-free local run, start the Worker with `MODEL_PROVIDER=fake npx ts-node src/observability/worker.ts`. + The per-call token, model, and latency lines print in the Worker's terminal. ## Test diff --git a/google-adk-agents/src/observability/adk-usage-span-processor.ts b/google-adk-agents/src/observability/adk-usage-span-processor.ts index 7747daffa..c4265873c 100644 --- a/google-adk-agents/src/observability/adk-usage-span-processor.ts +++ b/google-adk-agents/src/observability/adk-usage-span-processor.ts @@ -1,7 +1,6 @@ import type { Context } from '@opentelemetry/api'; import type { ReadableSpan, Span, SpanProcessor } from '@opentelemetry/sdk-trace-base'; -// ADK's tracer name; the SDK's own interceptor spans arrive under a different one. const ADK_TRACER = 'gcp.vertex.agent'; export interface ModelCall { diff --git a/google-adk-agents/src/observability/client.ts b/google-adk-agents/src/observability/client.ts deleted file mode 100644 index 4f69002e6..000000000 --- a/google-adk-agents/src/observability/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Connection, Client } from '@temporalio/client'; -import { nanoid } from 'nanoid'; -import { observedAgent } from './workflows'; - -async function run() { - const connection = await Connection.connect(); - const client = new Client({ connection }); - - const result = await client.workflow.execute(observedAgent, { - taskQueue: 'google-adk-observability', - workflowId: 'google-adk-observability-' + nanoid(), - args: [['Write a haiku about durable execution.', 'Write a haiku about workflow replay.']], - }); - - console.log(result.join('\n')); -} - -run().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/google-adk-agents/src/observability/worker.ts b/google-adk-agents/src/observability/worker.ts index 451b08ace..fce0cec0e 100644 --- a/google-adk-agents/src/observability/worker.ts +++ b/google-adk-agents/src/observability/worker.ts @@ -1,6 +1,7 @@ import { Resource } from '@opentelemetry/resources'; import { NativeConnection, Worker } from '@temporalio/worker'; import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; import { OpenTelemetryPlugin } from '@temporalio/interceptors-opentelemetry'; import { AdkUsageSpanProcessor } from './adk-usage-span-processor'; @@ -23,7 +24,19 @@ async function run() { resource: new Resource({ 'service.name': 'google-adk-observability' }), spanProcessor, }), - new GoogleAdkPlugin(), + new GoogleAdkPlugin( + process.env.MODEL_PROVIDER === 'fake' + ? { + modelProvider: fakeModelProvider([ + { + content: { role: 'model', parts: [{ text: 'Workflows remember.' }] }, + usageMetadata: { promptTokenCount: 6, candidatesTokenCount: 3 }, + turnComplete: true, + }, + ]), + } + : {}, + ), ], }); await worker.run(); diff --git a/google-adk-agents/src/streaming/README.md b/google-adk-agents/src/streaming/README.md index 8e9efd7e0..0b715e88f 100644 --- a/google-adk-agents/src/streaming/README.md +++ b/google-adk-agents/src/streaming/README.md @@ -18,6 +18,8 @@ GEMINI_API_KEY=... npx ts-node src/streaming/worker.ts npx ts-node src/streaming/client.ts ``` +For a credential-free local run, start the Worker with `MODEL_PROVIDER=fake npx ts-node src/streaming/worker.ts`. + The story prints token by token as the model produces it. In the Temporal UI the history shows a single `adk-invokeModelStreaming` Activity. ## Test diff --git a/google-adk-agents/src/streaming/worker.ts b/google-adk-agents/src/streaming/worker.ts index 5f8f0df11..2a30005ed 100644 --- a/google-adk-agents/src/streaming/worker.ts +++ b/google-adk-agents/src/streaming/worker.ts @@ -1,5 +1,6 @@ import { NativeConnection, Worker } from '@temporalio/worker'; import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; async function run() { const connection = await NativeConnection.connect({ address: 'localhost:7233' }); @@ -8,7 +9,9 @@ async function run() { connection, taskQueue: 'google-adk-streaming', workflowsPath: require.resolve('./workflows'), - plugins: [new GoogleAdkPlugin()], + plugins: [ + new GoogleAdkPlugin(process.env.MODEL_PROVIDER === 'fake' ? { modelProvider: fakeModelProvider() } : {}), + ], }); await worker.run(); } finally { diff --git a/google-adk-agents/src/streaming/workflows.ts b/google-adk-agents/src/streaming/workflows.ts index e76726063..2d362912e 100644 --- a/google-adk-agents/src/streaming/workflows.ts +++ b/google-adk-agents/src/streaming/workflows.ts @@ -30,7 +30,6 @@ export async function streamingModelCall(prompt: string): Promise<{ text: string let text = ''; let chunks = 0; - // The turn's whole text is on the last, non-partial response; the deltas would double it. for await (const response of model.generateContentAsync(request, true)) { if (response.partial === true) { chunks++; @@ -38,7 +37,6 @@ export async function streamingModelCall(prompt: string): Promise<{ text: string } text = (response.content?.parts ?? []).map((part) => part.text ?? '').join(''); } - // Completing discards the stream log, racing a subscriber's final poll; the timeout covers no subscriber. await condition(() => consumerDone, '10 seconds'); return { text, chunks }; } diff --git a/google-adk-agents/src/structured-output/README.md b/google-adk-agents/src/structured-output/README.md new file mode 100644 index 000000000..eebf10d5e --- /dev/null +++ b/google-adk-agents/src/structured-output/README.md @@ -0,0 +1,13 @@ +# Structured output + +This Workflow asks an ADK agent for an incident summary constrained by a schema and validates the result before returning it. + +Start a live Worker with `npx ts-node src/structured-output/worker.ts`. Set `GEMINI_API_KEY` first. + +For a credential-free local run, start it with `MODEL_PROVIDER=fake npx ts-node src/structured-output/worker.ts`. + +Start the Workflow with: + +```sh +temporal workflow start --type summarizeIncident --task-queue google-adk-structured-output --workflow-id google-adk-structured-output-1 --input '"The primary database is timing out."' +``` diff --git a/google-adk-agents/src/structured-output/mocha/workflows.test.ts b/google-adk-agents/src/structured-output/mocha/workflows.test.ts new file mode 100644 index 000000000..3f6696b0b --- /dev/null +++ b/google-adk-agents/src/structured-output/mocha/workflows.test.ts @@ -0,0 +1,74 @@ +import type { LlmResponse } from '@google/adk'; +import { WorkflowFailedError } from '@temporalio/client'; +import { ApplicationFailure } from '@temporalio/common'; +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; +import { after, before, describe, it } from 'mocha'; +import assert from 'assert'; +import { summarizeIncident } from '../workflows'; + +describe('google-adk-agents/structured-output', function () { + this.timeout(30_000); + let testEnv: TestWorkflowEnvironment; + before(async () => (testEnv = await TestWorkflowEnvironment.createLocal())); + after(async () => testEnv?.teardown()); + + async function execute(text: string) { + const response: LlmResponse = { content: { role: 'model', parts: [{ text }] }, turnComplete: true }; + const taskQueue = `test-structured-output-${Date.now()}-${Math.random()}`; + const worker = await Worker.create({ + connection: testEnv.nativeConnection, + taskQueue, + workflowsPath: require.resolve('../workflows'), + plugins: [new GoogleAdkPlugin({ modelProvider: fakeModelProvider([response]) })], + }); + return worker.runUntil( + testEnv.client.workflow.execute(summarizeIncident, { + args: ['The database is timing out.'], + workflowId: taskQueue, + taskQueue, + }), + ); + } + + it('returns a typed incident summary', async () => { + assert.deepStrictEqual(await execute('{"title":"Database outage","severity":"high","actions":["Fail over"]}'), { + title: 'Database outage', + severity: 'high', + actions: ['Fail over'], + }); + }); + + it('omits properties outside the schema', async () => { + assert.deepStrictEqual( + await execute('{"title":"Database outage","severity":"high","actions":["Fail over"],"extra":"ignore"}'), + { + title: 'Database outage', + severity: 'high', + actions: ['Fail over'], + }, + ); + }); + + it('rejects output outside the schema', async () => { + await assert.rejects(execute('{"title":"Database outage","severity":"urgent","actions":[]}'), (error) => { + assert(error instanceof WorkflowFailedError); + assert(error.cause instanceof ApplicationFailure); + assert.strictEqual(error.cause.nonRetryable, true); + assert.strictEqual(error.cause.type, 'InvalidIncidentSummary'); + return true; + }); + }); + + it('rejects malformed JSON', async () => { + await assert.rejects(execute('{"title":'), (error) => { + assert(error instanceof WorkflowFailedError); + assert(error.cause instanceof ApplicationFailure); + assert.strictEqual(error.cause.nonRetryable, true); + assert.strictEqual(error.cause.type, 'InvalidIncidentSummary'); + return true; + }); + }); +}); diff --git a/google-adk-agents/src/structured-output/worker.ts b/google-adk-agents/src/structured-output/worker.ts new file mode 100644 index 000000000..da5e31398 --- /dev/null +++ b/google-adk-agents/src/structured-output/worker.ts @@ -0,0 +1,37 @@ +import type { LlmResponse } from '@google/adk'; +import { NativeConnection, Worker } from '@temporalio/worker'; +import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { fakeModelProvider } from '@temporalio/google-adk-agents/testing'; + +async function run() { + const offline: LlmResponse[] = [ + { + content: { + role: 'model', + parts: [ + { text: JSON.stringify({ title: 'Database latency', severity: 'high', actions: ['Inspect slow queries'] }) }, + ], + }, + turnComplete: true, + }, + ]; + const connection = await NativeConnection.connect({ address: 'localhost:7233' }); + try { + const worker = await Worker.create({ + connection, + taskQueue: 'google-adk-structured-output', + workflowsPath: require.resolve('./workflows'), + plugins: [ + new GoogleAdkPlugin(process.env.MODEL_PROVIDER === 'fake' ? { modelProvider: fakeModelProvider(offline) } : {}), + ], + }); + await worker.run(); + } finally { + await connection.close(); + } +} + +run().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/google-adk-agents/src/structured-output/workflows.ts b/google-adk-agents/src/structured-output/workflows.ts new file mode 100644 index 000000000..76fd8b1b6 --- /dev/null +++ b/google-adk-agents/src/structured-output/workflows.ts @@ -0,0 +1,59 @@ +import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { Type } from '@google/genai'; +import { TemporalModel } from '@temporalio/google-adk-agents/workflow'; +import { ApplicationFailure } from '@temporalio/workflow'; + +export interface IncidentSummary { + title: string; + severity: 'low' | 'medium' | 'high'; + actions: string[]; +} + +export async function summarizeIncident(description: string): Promise { + const agent = new LlmAgent({ + name: 'incident_summarizer', + model: new TemporalModel('gemini-2.5-flash'), + instruction: 'Summarize the incident using the requested schema.', + outputSchema: { + type: Type.OBJECT, + properties: { + title: { type: Type.STRING }, + severity: { type: Type.STRING, enum: ['low', 'medium', 'high'] }, + actions: { type: Type.ARRAY, items: { type: Type.STRING } }, + }, + required: ['title', 'severity', 'actions'], + }, + }); + const runner = new InMemoryRunner({ agent }); + let text = ''; + for await (const event of runner.runEphemeral({ + userId: 'user', + newMessage: { role: 'user', parts: [{ text: description }] }, + })) { + if (isFinalResponse(event)) text = stringifyContent(event); + } + let value: unknown; + try { + value = JSON.parse(text) as unknown; + } catch { + throw ApplicationFailure.nonRetryable('Model returned malformed JSON', 'InvalidIncidentSummary'); + } + if (value === null || typeof value !== 'object' || Array.isArray(value)) { + throw ApplicationFailure.nonRetryable('Model returned an invalid incident summary', 'InvalidIncidentSummary'); + } + const result = value as Record; + if ( + typeof result.title !== 'string' || + typeof result.severity !== 'string' || + !['low', 'medium', 'high'].includes(result.severity) || + !Array.isArray(result.actions) || + !result.actions.every((action) => typeof action === 'string') + ) { + throw ApplicationFailure.nonRetryable('Model returned an invalid incident summary', 'InvalidIncidentSummary'); + } + return { + title: result.title, + severity: result.severity, + actions: result.actions, + } as IncidentSummary; +} diff --git a/google-adk-agents/src/tools/README.md b/google-adk-agents/src/tools/README.md index 860bc5591..23a76dd7d 100644 --- a/google-adk-agents/src/tools/README.md +++ b/google-adk-agents/src/tools/README.md @@ -1,23 +1,11 @@ -# Google ADK Agents: Tools +# Tools -Exposes an existing Temporal Activity to the ADK agent as a tool with `activityAsTool`. When the model decides to call `getWeather`, the tool dispatches the registered `getWeather` Activity — durable and retriable — instead of running the I/O inside the Workflow body. +The agent can call a deterministic Celsius conversion `FunctionTool` in the Workflow and an Activity-backed weather tool for non-deterministic work. -## Run +Start a live Worker with `GEMINI_API_KEY=... npx ts-node src/tools/worker.ts` or a credential-free Worker with `MODEL_PROVIDER=fake npx ts-node src/tools/worker.ts`. -Run these from the `google-adk-agents/` root (run `npm install` there once first). - -```bash -# In one terminal, start the Worker (requires a local Temporal server and GEMINI_API_KEY): -GEMINI_API_KEY=... npx ts-node src/tools/worker.ts - -# In another terminal, run the scenario: -npx ts-node src/tools/client.ts -``` - -## Test - -```bash -npx mocha --exit --require ts-node/register --require source-map-support/register "src/tools/mocha/*.test.ts" +```sh +temporal workflow start --type weatherAgent --task-queue google-adk-tools --workflow-id google-adk-tools-1 --input '"What is 17 Celsius in Fahrenheit, and what is the weather in Tokyo?"' ``` -The tests run a real Worker against `TestWorkflowEnvironment`, driving `weatherAgent` end to end against a scripted model double. One takes the happy path: the model asks for `getWeather`, the Activity runs exactly once, and its result comes back on the next model turn. The other fails that Activity and asserts the failure reaches the model as the tool's response and the agent answers from it. No `GEMINI_API_KEY` is required. +The API-key-free test verifies that only `getWeather` schedules a tool Activity. diff --git a/google-adk-agents/src/tools/client.ts b/google-adk-agents/src/tools/client.ts deleted file mode 100644 index f277649ce..000000000 --- a/google-adk-agents/src/tools/client.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Connection, Client } from '@temporalio/client'; -import { nanoid } from 'nanoid'; -import { weatherAgent } from './workflows'; - -async function run() { - const connection = await Connection.connect(); - const client = new Client({ connection }); - - const result = await client.workflow.execute(weatherAgent, { - taskQueue: 'google-adk-tools', - workflowId: 'google-adk-tools-' + nanoid(), - args: ['What is the weather in Tokyo?'], - }); - - console.log(result); -} - -run().catch((err) => { - console.error(err); - process.exit(1); -}); diff --git a/google-adk-agents/src/tools/mocha/workflows.test.ts b/google-adk-agents/src/tools/mocha/workflows.test.ts index 158bed6b9..5834e64db 100644 --- a/google-adk-agents/src/tools/mocha/workflows.test.ts +++ b/google-adk-agents/src/tools/mocha/workflows.test.ts @@ -9,7 +9,6 @@ import assert from 'assert'; import * as activities from '../activities'; import { weatherAgent } from '../workflows'; -// A fresh model instance per Activity invocation, so the turn has to come from the request. function weatherModelProvider(): (model: string) => BaseLlm { class WeatherLlm extends BaseLlm { override async *generateContentAsync( @@ -17,12 +16,21 @@ function weatherModelProvider(): (model: string) => BaseLlm { _stream = false, _abortSignal?: AbortSignal, ): AsyncGenerator { - const toolResponse = (llmRequest.contents ?? []) - .flatMap((content) => content.parts ?? []) - .find((part) => part.functionResponse?.name === 'getWeather')?.functionResponse?.response as - | { result?: unknown; error?: unknown } - | undefined; + const parts = (llmRequest.contents ?? []).flatMap((content) => content.parts ?? []); + const conversion = parts.find((part) => part.functionResponse?.name === 'celsiusToFahrenheit'); + const toolResponse = parts.find((part) => part.functionResponse?.name === 'getWeather')?.functionResponse + ?.response as { result?: unknown; error?: unknown } | undefined; if (toolResponse === undefined) { + if (conversion === undefined) { + yield { + content: { + role: 'model', + parts: [{ functionCall: { name: 'celsiusToFahrenheit', args: { celsius: 17 } } }], + }, + turnComplete: true, + }; + return; + } yield { content: { role: 'model', parts: [{ functionCall: { name: 'getWeather', args: { city: 'Tokyo' } } }] }, turnComplete: true, @@ -82,7 +90,8 @@ describe('google-adk-agents/tools workflow scenarios', function () { const { events } = await testEnv.client.workflow.getHandle(workflowId).fetchHistory(); const scheduled = (events ?? []).map((e) => e.activityTaskScheduledEventAttributes?.activityType?.name); assert.strictEqual(scheduled.filter((name) => name === 'getWeather').length, 1); - assert.strictEqual(scheduled.filter((name) => name === 'adk-invokeModel').length, 2); + assert.strictEqual(scheduled.filter((name) => name === 'celsiusToFahrenheit').length, 0); + assert.strictEqual(scheduled.filter((name) => name === 'adk-invokeModel').length, 3); }); it('weatherAgent: a failed tool Activity reaches the model as the tool response, and the agent answers from it', async () => { diff --git a/google-adk-agents/src/tools/offline-model.ts b/google-adk-agents/src/tools/offline-model.ts new file mode 100644 index 000000000..e489813be --- /dev/null +++ b/google-adk-agents/src/tools/offline-model.ts @@ -0,0 +1,36 @@ +import { BaseLlm } from '@google/adk'; +import type { BaseLlmConnection, LlmRequest, LlmResponse } from '@google/adk'; + +export function offlineModelProvider(): (model: string) => BaseLlm { + class OfflineLlm extends BaseLlm { + override async *generateContentAsync(request: LlmRequest): AsyncGenerator { + const responses = (request.contents ?? []) + .flatMap((content) => content.parts ?? []) + .map((part) => part.functionResponse) + .filter((response) => response !== undefined); + if (!responses.some((response) => response.name === 'celsiusToFahrenheit')) { + yield { + content: { role: 'model', parts: [{ functionCall: { name: 'celsiusToFahrenheit', args: { celsius: 17 } } }] }, + turnComplete: true, + }; + return; + } + if (!responses.some((response) => response.name === 'getWeather')) { + yield { + content: { role: 'model', parts: [{ functionCall: { name: 'getWeather', args: { city: 'Tokyo' } } }] }, + turnComplete: true, + }; + return; + } + yield { + content: { role: 'model', parts: [{ text: 'Tokyo is 17°C (62.6°F), warm and sunny.' }] }, + turnComplete: true, + }; + } + + override async connect(): Promise { + throw new Error('OfflineLlm does not support connect().'); + } + } + return (model) => new OfflineLlm({ model }); +} diff --git a/google-adk-agents/src/tools/worker.ts b/google-adk-agents/src/tools/worker.ts index b05c4fd26..4695822b8 100644 --- a/google-adk-agents/src/tools/worker.ts +++ b/google-adk-agents/src/tools/worker.ts @@ -1,5 +1,6 @@ import { NativeConnection, Worker } from '@temporalio/worker'; import { GoogleAdkPlugin } from '@temporalio/google-adk-agents'; +import { offlineModelProvider } from './offline-model'; import * as activities from './activities'; async function run() { @@ -10,7 +11,9 @@ async function run() { taskQueue: 'google-adk-tools', workflowsPath: require.resolve('./workflows'), activities, - plugins: [new GoogleAdkPlugin()], + plugins: [ + new GoogleAdkPlugin(process.env.MODEL_PROVIDER === 'fake' ? { modelProvider: offlineModelProvider() } : {}), + ], }); await worker.run(); } finally { diff --git a/google-adk-agents/src/tools/workflows.ts b/google-adk-agents/src/tools/workflows.ts index 60f90df1a..94afc5d11 100644 --- a/google-adk-agents/src/tools/workflows.ts +++ b/google-adk-agents/src/tools/workflows.ts @@ -1,4 +1,4 @@ -import { InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; +import { FunctionTool, InMemoryRunner, LlmAgent, isFinalResponse, stringifyContent } from '@google/adk'; import { Type } from '@google/genai'; import { activityAsTool, TemporalModel } from '@temporalio/google-adk-agents/workflow'; @@ -6,8 +6,21 @@ export async function weatherAgent(prompt: string): Promise { const agent = new LlmAgent({ name: 'weather_agent', model: new TemporalModel('gemini-2.5-flash'), - instruction: 'Use the getWeather tool to answer weather questions.', + instruction: 'Use both tools to convert the reported Celsius temperature and answer the weather question.', tools: [ + new FunctionTool({ + name: 'celsiusToFahrenheit', + description: 'Convert a Celsius temperature to Fahrenheit.', + parameters: { + type: Type.OBJECT, + properties: { celsius: { type: Type.NUMBER } }, + required: ['celsius'], + }, + execute: (input) => { + const { celsius } = input as { celsius: number }; + return { fahrenheit: (celsius * 9) / 5 + 32 }; + }, + }), activityAsTool({ name: 'getWeather', description: 'Get the current weather for a city.', diff --git a/google-adk-agents/tsconfig.json b/google-adk-agents/tsconfig.json index 488f2c62a..2be94fba2 100644 --- a/google-adk-agents/tsconfig.json +++ b/google-adk-agents/tsconfig.json @@ -3,6 +3,8 @@ "version": "5.6.3", "compilerOptions": { "lib": ["es2021"], + "module": "commonjs", + "moduleResolution": "node", "declaration": true, "declarationMap": true, "sourceMap": true, From 0d45fc04f4f59fc26201ab7f1c704cc45be34c03 Mon Sep 17 00:00:00 2001 From: maplexu Date: Thu, 27 Aug 2026 15:39:06 -0400 Subject: [PATCH 3/6] AI-283: Update Google ADK samples to TS SDK 1.23.0 --- google-adk-agents/package.json | 16 +- pnpm-lock.yaml | 4009 +++++++++++++++++++++++--------- 2 files changed, 2908 insertions(+), 1117 deletions(-) diff --git a/google-adk-agents/package.json b/google-adk-agents/package.json index a73f0369a..cdb0519c9 100644 --- a/google-adk-agents/package.json +++ b/google-adk-agents/package.json @@ -11,13 +11,13 @@ "test": "mocha --exit --require ts-node/register --require source-map-support/register \"src/*/mocha/*.test.ts\"" }, "dependencies": { - "@temporalio/client": "^1.22.0", - "@temporalio/common": "^1.22.0", - "@temporalio/google-adk-agents": "^1.22.0", - "@temporalio/interceptors-opentelemetry": "^1.22.0", - "@temporalio/worker": "^1.22.0", - "@temporalio/workflow": "^1.22.0", - "@temporalio/workflow-streams": "^1.22.0", + "@temporalio/client": "^1.23.0", + "@temporalio/common": "^1.23.0", + "@temporalio/google-adk-agents": "^1.23.0", + "@temporalio/interceptors-opentelemetry": "^1.23.0", + "@temporalio/worker": "^1.23.0", + "@temporalio/workflow": "^1.23.0", + "@temporalio/workflow-streams": "^1.23.0", "@google/adk": ">=1.5.0 <1.6.0", "@google/genai": "^2.9.0", "@opentelemetry/api": "^1.9.0", @@ -26,7 +26,7 @@ "nanoid": "3.x" }, "devDependencies": { - "@temporalio/testing": "^1.22.0", + "@temporalio/testing": "^1.23.0", "@tsconfig/node22": "^22.0.0", "@types/mocha": "8.x", "@types/node": "^22.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9be139708..1397bf9a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -158,7 +158,7 @@ importers: version: 0.28.0 node-fetch: specifier: 2.x - version: 2.7.0 + version: 2.7.0(encoding@0.1.13) devDependencies: '@temporalio/nyc-test-coverage': specifier: ^1.23.0 @@ -225,7 +225,7 @@ importers: version: 0.5.21 ts-jest: specifier: ^28.0.2 - version: 28.0.8(@babel/core@7.26.7)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.26.7))(jest@28.1.3(@types/node@22.12.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3) + version: 28.0.8(@babel/core@7.29.7)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.29.7))(jest@28.1.3(@types/node@22.12.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3) ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3) @@ -1197,7 +1197,7 @@ importers: version: 0.1.13(prettier@3.4.2) vercel: specifier: ^29.0.3 - version: 29.4.0(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + version: 29.4.0(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) food-delivery/apps/driver: dependencies: @@ -1227,7 +1227,7 @@ importers: version: 10.45.2(@trpc/server@10.45.2) '@trpc/next': specifier: ^10.0.0-rc.8 - version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@10.45.2)(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@10.45.2)(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/react-query': specifier: ^10.0.0-rc.8 version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1248,7 +1248,7 @@ importers: version: 0.32.6 vercel: specifier: ^29.0.3 - version: 29.4.0(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + version: 29.4.0(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) zod: specifier: ^3.19.1 version: 3.24.1 @@ -1315,7 +1315,7 @@ importers: version: 10.45.2(@trpc/server@10.45.2) '@trpc/next': specifier: ^10.0.0-rc.8 - version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@10.45.2)(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@10.45.2)(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/react-query': specifier: ^10.0.0-rc.8 version: 10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1544,6 +1544,91 @@ importers: specifier: ^5.6.3 version: 5.7.3 + google-adk-agents: + dependencies: + '@google/adk': + specifier: '>=1.5.0 <1.6.0' + version: 1.5.0(@grpc/grpc-js@1.14.4)(@mikro-orm/mariadb@6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0))(@mikro-orm/mssql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google/genai': + specifier: ^2.9.0 + version: 2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + '@opentelemetry/api': + specifier: ^1.9.0 + version: 1.9.0 + '@opentelemetry/resources': + specifier: ^1.25.1 + version: 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': + specifier: ^1.25.1 + version: 1.30.1(@opentelemetry/api@1.9.0) + '@temporalio/client': + specifier: ^1.23.0 + version: 1.23.0 + '@temporalio/common': + specifier: ^1.23.0 + version: 1.23.0 + '@temporalio/google-adk-agents': + specifier: ^1.23.0 + version: 1.23.0(@google/adk@1.5.0(@grpc/grpc-js@1.14.4)(@mikro-orm/mariadb@6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0))(@mikro-orm/mssql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))) + '@temporalio/interceptors-opentelemetry': + specifier: ^1.23.0 + version: 1.23.0(@temporalio/common@1.23.0)(@temporalio/workflow@1.23.0) + '@temporalio/worker': + specifier: ^1.23.0 + version: 1.23.0(@swc/helpers@0.5.15) + '@temporalio/workflow': + specifier: ^1.23.0 + version: 1.23.0 + '@temporalio/workflow-streams': + specifier: ^1.23.0 + version: 1.23.0 + nanoid: + specifier: 3.x + version: 3.3.12 + devDependencies: + '@temporalio/testing': + specifier: ^1.23.0 + version: 1.23.0(@swc/helpers@0.5.15) + '@tsconfig/node22': + specifier: ^22.0.0 + version: 22.0.5 + '@types/mocha': + specifier: 8.x + version: 8.2.3 + '@types/node': + specifier: ^22.9.1 + version: 22.12.0 + '@typescript-eslint/eslint-plugin': + specifier: ^8.18.0 + version: 8.22.0(@typescript-eslint/parser@8.22.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': + specifier: ^8.18.0 + version: 8.22.0(eslint@8.57.1)(typescript@5.7.3) + eslint: + specifier: ^8.57.1 + version: 8.57.1 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.1) + eslint-plugin-deprecation: + specifier: ^3.0.0 + version: 3.0.0(eslint@8.57.1)(typescript@5.7.3) + mocha: + specifier: 8.x + version: 8.4.0(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + prettier: + specifier: ^3.4.2 + version: 3.4.2 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3) + typescript: + specifier: ^5.6.3 + version: 5.7.3 + grpc-calls: dependencies: '@temporalio/activity': @@ -2265,7 +2350,7 @@ importers: version: 10.4.20(postcss@8.5.1) eslint-config-react-app: specifier: ^7.0.0 - version: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3) + version: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)))(typescript@5.7.3) postcss: specifier: ^8.1.0 version: 8.5.1 @@ -2277,7 +2362,7 @@ importers: version: 17.0.2(react@17.0.2) react-scripts: specifier: ^5.0.0 - version: 5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/babel__core@7.20.5)(eslint@8.57.1)(react@17.0.2)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))(type-fest@0.21.3)(typescript@5.7.3) + version: 5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/babel__core@7.20.5)(eslint@8.57.1)(react@17.0.2)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3))(type-fest@0.21.3)(typescript@5.7.3) web-vitals: specifier: ^1.0.1 version: 1.1.2 @@ -2413,7 +2498,7 @@ importers: version: 3.3.0(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1) '@nestjs/core': specifier: ^10.4.8 - version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1) + version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/platform-express': specifier: ^10.4.8 version: 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.15) @@ -2981,7 +3066,7 @@ importers: version: 8.57.1 node-fetch: specifier: 2.x - version: 2.7.0 + version: 2.7.0(encoding@0.1.13) devDependencies: '@tsconfig/node22': specifier: ^22.0.0 @@ -3860,7 +3945,7 @@ importers: version: 1.29.0(zod@4.4.3) '@strands-agents/sdk': specifier: ^1.3.0 - version: 1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) + version: 1.11.0(@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) '@temporalio/activity': specifier: ^1.23.0 version: 1.23.0 @@ -3875,7 +3960,7 @@ importers: version: 1.23.0 '@temporalio/strands-agents': specifier: ^1.23.0 - version: 1.23.0(@strands-agents/sdk@1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3))(zod@4.4.3) + version: 1.23.0(@strands-agents/sdk@1.11.0(@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3))(zod@4.4.3) '@temporalio/worker': specifier: ^1.23.0 version: 1.23.0(@swc/helpers@0.5.15) @@ -4256,7 +4341,7 @@ importers: version: 3.3.12 openai: specifier: ^4.77.0 - version: 4.104.0(ws@8.18.0)(zod@3.24.1) + version: 4.104.0(encoding@0.1.13)(ws@8.18.0)(zod@3.24.1) devDependencies: '@temporalio/testing': specifier: ^1.23.0 @@ -4306,6 +4391,21 @@ importers: packages: + '@a2a-js/sdk@0.3.14': + resolution: {integrity: sha512-F6Ew1AtPzCLhTn8h9yiqTe7DiDf6XVrSnq9V1YqSl9eWqPm6anMveTiKdCSb/76cW0YiJc24rNaUrVezFFHbqQ==} + engines: {node: '>=18'} + peerDependencies: + '@bufbuild/protobuf': ^2.10.2 + '@grpc/grpc-js': ^1.11.0 + express: ^4.21.2 || ^5.1.0 + peerDependenciesMeta: + '@bufbuild/protobuf': + optional: true + '@grpc/grpc-js': + optional: true + express: + optional: true + '@adobe/css-tools@4.4.1': resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} @@ -4477,6 +4577,74 @@ packages: resolution: {integrity: sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ==} engines: {node: '>=18.0.0'} + '@azure-rest/core-client@2.8.0': + resolution: {integrity: sha512-F1ybHeN+++QhyFCF/ehLUEvrOB6fehPdFBFtGdj0C3B2lpQ9zkPiO5JDgsqc6IfjuUe6b3dAbXK0a7+VgSGfhw==} + engines: {node: '>=22.0.0'} + + '@azure/abort-controller@2.2.0': + resolution: {integrity: sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==} + engines: {node: '>=22.0.0'} + + '@azure/core-auth@1.11.0': + resolution: {integrity: sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==} + engines: {node: '>=22.0.0'} + + '@azure/core-client@1.11.0': + resolution: {integrity: sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==} + engines: {node: '>=22.0.0'} + + '@azure/core-lro@2.7.2': + resolution: {integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==} + engines: {node: '>=18.0.0'} + + '@azure/core-paging@1.7.0': + resolution: {integrity: sha512-7GEAoIsaoBr6KELNRb8nypowCqvk8dnCHFCYg4XD4lOQGY2GqjQg5IhkRjyBFRO18CGSMq05PaNqSOE9GQro3g==} + engines: {node: '>=22.0.0'} + + '@azure/core-process@1.0.0': + resolution: {integrity: sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==} + engines: {node: '>=22.0.0'} + + '@azure/core-rest-pipeline@1.25.0': + resolution: {integrity: sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==} + engines: {node: '>=22.0.0'} + + '@azure/core-tracing@1.4.0': + resolution: {integrity: sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==} + engines: {node: '>=22.0.0'} + + '@azure/core-util@1.14.0': + resolution: {integrity: sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==} + engines: {node: '>=22.0.0'} + + '@azure/identity@4.13.2': + resolution: {integrity: sha512-NXL2/pCJctLxgw8bvrwwgge743kEq8LBT+O1pmV0vyUwetzFPH9auP6jhkU/cgZCPPtWoewAe3ncaGCgPo07fA==} + engines: {node: '>=22.0.0'} + + '@azure/keyvault-common@2.1.0': + resolution: {integrity: sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw==} + engines: {node: '>=20.0.0'} + + '@azure/keyvault-keys@4.10.2': + resolution: {integrity: sha512-VmUSLbXRAbSzDD8grXHGPaknYs0SKr3yuf6U+d4XMpX4XuVYskNqbTTwXce0zR1LyxfTZm9rWEBcvs3vdYwCmQ==} + engines: {node: '>=20.0.0'} + + '@azure/logger@1.4.0': + resolution: {integrity: sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==} + engines: {node: '>=22.0.0'} + + '@azure/msal-browser@5.19.0': + resolution: {integrity: sha512-DHe9iRcyByGJuLPkl0K31a1JjOdRY2zX38Q07mQpSbR8zOj1EIgsWfTXhSQVyyijUxlcofVy/br7qWJbrMwVXQ==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@16.13.0': + resolution: {integrity: sha512-rOAy0KUcyBbdwVJ+f3uPpthXatFLLZN+/KWAsTLzk1aB23Xl9DRmmXYwSvBFOZyXj4jUQQ5FKxxRkhAFW1fOow==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@5.6.0': + resolution: {integrity: sha512-uFY9NxrWHw8PwZx7gAX6PDn+9vdfS05+levc/kwkx77IkjfaldnQbbcQzzDIZ5Hq5Zdr6/z92oAIoRWKp6MnOA==} + engines: {node: '>=20'} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -4544,12 +4712,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.26.3': - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.29.7': resolution: {integrity: sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==} engines: {node: '>=6.9.0'} @@ -4614,12 +4776,6 @@ packages: resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-remap-async-to-generator@7.29.7': resolution: {integrity: sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==} engines: {node: '>=6.9.0'} @@ -4670,10 +4826,6 @@ packages: resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} - engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.29.7': resolution: {integrity: sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==} engines: {node: '>=6.9.0'} @@ -5800,6 +5952,9 @@ packages: '@dabh/diagnostics@2.0.3': resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + '@dabh/diagnostics@2.0.8': + resolution: {integrity: sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==} + '@edge-runtime/format@2.0.1': resolution: {integrity: sha512-aE+9DtBvQyg349srixtXEUNauWtIv5HTKPy8Q9dvG1NvpldVIvvhcDBI+SuvDVM8kQl8phbYnp2NTNloBCn/Yg==} engines: {node: '>=14'} @@ -6274,6 +6429,86 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@google-cloud/opentelemetry-cloud-monitoring-exporter@0.21.0': + resolution: {integrity: sha512-+lAew44pWt6rA4l8dQ1gGhH7Uo95wZKfq/GBf9aEyuNDDLQ2XppGEEReu6ujesSqTtZ8ueQFt73+7SReSHbwqg==} + engines: {node: '>=18'} + deprecated: Google Cloud Platform now supports native OpenTelemetry Protocol (OTLP) endpoints via the Telemetry API. Please follow https://github.com/GoogleCloudPlatform/opentelemetry-operations-js/blob/main/MIGRATION.md + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^2.0.0 + '@opentelemetry/resources': ^2.0.0 + '@opentelemetry/sdk-metrics': ^2.0.0 + + '@google-cloud/opentelemetry-cloud-trace-exporter@3.1.0': + resolution: {integrity: sha512-O7tpsMYLcZA7eE+y5ZpLBYHZfruvnYhmh4RLI2xTelVMsmR2JJolQCi3gk6dlDo58QDh7UzmX48X8TeNG1oG2g==} + engines: {node: '>=18'} + deprecated: Google Cloud Platform now supports native OpenTelemetry Protocol (OTLP) endpoints via the Telemetry API. Please follow https://github.com/GoogleCloudPlatform/opentelemetry-operations-js/blob/main/MIGRATION.md + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/core': ^2.0.0 + '@opentelemetry/resources': ^2.0.0 + '@opentelemetry/sdk-trace-base': ^2.0.0 + + '@google-cloud/opentelemetry-resource-util@3.1.0': + resolution: {integrity: sha512-dTvbFl+q9ac0Me8+GaDrFdwDBia/L8Qxxi/NY/jeHaUogDIpqOtLoqcXV9HdgiLxy5vjEGaJMqir1nVra1qG7w==} + engines: {node: '>=18'} + deprecated: Google Cloud Platform now supports native OpenTelemetry Protocol (OTLP) endpoints via the Telemetry API. Please follow https://github.com/GoogleCloudPlatform/opentelemetry-operations-js/blob/main/MIGRATION.md + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/core': ^2.0.0 + '@opentelemetry/resources': ^2.0.0 + + '@google-cloud/paginator@5.0.2': + resolution: {integrity: sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==} + engines: {node: '>=14.0.0'} + + '@google-cloud/precise-date@4.0.0': + resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} + engines: {node: '>=14.0.0'} + + '@google-cloud/projectify@4.0.0': + resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} + engines: {node: '>=14.0.0'} + + '@google-cloud/promisify@4.0.0': + resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} + engines: {node: '>=14'} + + '@google-cloud/storage@7.22.0': + resolution: {integrity: sha512-W98gTQOAntEeEQ7/pZxSQXxfUO5CiQcXJRsxBpUa6UU25n8YN/VtogPBi0H+MAmUrn/6bY/sBhFansoWEsr2/g==} + engines: {node: '>=18'} + + '@google-cloud/vertexai@1.12.0': + resolution: {integrity: sha512-XMJIk7GIeavFLP5A3YEUlowKa5Y5PZRrnnuTJcqR0k+lFKkv7+IWpdRp+Xbqb8xNDrvQaE2hP2RYPUylyD5EdA==} + engines: {node: '>=18.0.0'} + + '@google/adk@1.5.0': + resolution: {integrity: sha512-DwgdpKeDJ7V+VQK9VZNpvYVXLLJ7xURfvA3nq5zWkwlioFUEbNwh0STDnLmJy0swmqKXgEeymjKNMrlc3eVY9g==} + peerDependencies: + '@mikro-orm/mariadb': ^6.6.6 + '@mikro-orm/mssql': ^6.6.6 + '@mikro-orm/mysql': ^6.6.6 + '@mikro-orm/postgresql': ^6.6.6 + '@mikro-orm/sqlite': ^6.6.6 + + '@google/genai@1.52.0': + resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + + '@google/genai@2.19.0': + resolution: {integrity: sha512-IM3u1FjpOLyOPsPh0smGA6Ntj2olUWCPbTs/WQj7cA/2AKCGw/652W7IaySx0XtwuscFnMYBoraebQusSZ0zSQ==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + '@grpc/grpc-js@1.12.5': resolution: {integrity: sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==} engines: {node: '>=12.10.0'} @@ -6380,183 +6615,155 @@ packages: resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm64@1.2.4': resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - libc: [musl] '@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] - libc: [glibc] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [glibc] '@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] - libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@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] - libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - libc: [glibc] '@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] - libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [glibc] '@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] - libc: [musl] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [musl] '@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] - libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} @@ -6830,9 +7037,6 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -6845,6 +7049,9 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-joda/core@5.7.0': + resolution: {integrity: sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==} + '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} @@ -6852,6 +7059,18 @@ packages: resolution: {integrity: sha512-yYxMVH7Dqw6nO0d5NIV8OQWnitU8k6vXH8NtgqAfIa/IUqRMxRv/NUJJ08VEKbAakwxlgBl5PJdrU0dMPStsnw==} engines: {node: '>=v12.0.0'} + '@jsep-plugin/assignment@1.3.0': + resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@jsep-plugin/regex@1.0.4': + resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -6888,6 +7107,62 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@mikro-orm/core@6.6.16': + resolution: {integrity: sha512-ym26fbhTti7Zh6oN1y74byoUoMEq1ahckiV7BZX5pHU/0OaUESiQA+Zar2Tv2ZFuZA9946XQ805F7/4NH6oDUQ==} + engines: {node: '>= 18.12.0'} + + '@mikro-orm/knex@6.6.16': + resolution: {integrity: sha512-H0fYK4vSe2mtmfBDDNsOw5Z56JDYEzbaoIo24JhkzmoGna85ddwyYzYB289DMS8Ukn7qZKhfR2pn2kQDRSJiyw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + better-sqlite3: '*' + libsql: '*' + mariadb: '*' + peerDependenciesMeta: + better-sqlite3: + optional: true + libsql: + optional: true + mariadb: + optional: true + + '@mikro-orm/mariadb@6.6.16': + resolution: {integrity: sha512-4BPpR6KYzMvByp9sJg5MlXrKxoDPrFDtnYku+swzXDgcyCNZwBJisRf0hkSXd3xL7JSV5yrsg+vZY+KjKO0ECQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + + '@mikro-orm/mssql@6.6.16': + resolution: {integrity: sha512-NEAB5Tf7HppmzNBg0+w+OOgkWtzDRJKXQFkMBvTFZXDmXZ/mx0vJom+PsGCU0PK4qFtrRVHIKG2F5qO2YRaTzQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + + '@mikro-orm/mysql@6.6.16': + resolution: {integrity: sha512-l0g9XD8nY1pXUF5PdXgpUPOyT4Cu32WRSB3kxcfeFgWA9BfuzEmQYU+8SeKxrJAkQo82tFe+h0mCkVcxs12Ffw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + + '@mikro-orm/postgresql@6.6.16': + resolution: {integrity: sha512-9MwmbnF+nuX5i/I4YClOLkYGoN2omY6Z5LA1rJHNs+5P3BDYSxR9dZk9kuPJ+g9GJXAx/gKKJzKgp7Wv4G65fA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + + '@mikro-orm/reflection@6.6.16': + resolution: {integrity: sha512-OXMhyWOag3Fyz+RyvptHKmwIPXE++5k7aFEt8JVK7YfEjqTvuB9Y7N3jQH08HQXe8VPsYs4RjAKz7DEk5E6JAA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + + '@mikro-orm/sqlite@6.6.16': + resolution: {integrity: sha512-MOewRLJHEiRzD0AGUzRHj6oa5TElw5owYfwbuGEVp83bPInEosk4AOOp9yMhTn9WHtuAuAs7xF/l2p5LIZxgxA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@mikro-orm/core': ^6.0.0 + '@modelcontextprotocol/sdk@1.29.0': resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} @@ -7016,56 +7291,48 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@next/swc-linux-arm64-gnu@16.2.9': resolution: {integrity: sha512-hBD75iWpUtkL9SmQmcRhmLomn9jgkPzCEkbOcLgHymPEKzv+6ONy13RRiIEz/iEObjkS2Jlb5gYS2XGoS3X4rw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@next/swc-linux-arm64-musl@15.1.6': resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@next/swc-linux-arm64-musl@16.2.9': resolution: {integrity: sha512-qZTI3pf9SGc/obr8NkQAekBxmp1QK+kVm+VAf3BALLfFAj+1kUhkTxmrWpVos9R/UYIA8AWX2p6cGI5WdwzVUA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@next/swc-linux-x64-gnu@15.1.6': resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@next/swc-linux-x64-gnu@16.2.9': resolution: {integrity: sha512-xm0HfRNX+UkH4R3c18ynswjj5o5uEj/7iI9p9omdtTSIsRCzQqkGMA+10nzJ4EHnYC3as65IMhbbl5fWRUWHYg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@next/swc-linux-x64-musl@15.1.6': resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@next/swc-linux-x64-musl@16.2.9': resolution: {integrity: sha512-QumimHkGEG6vM3PfEDWKyKen03NcqLOkeKB1EfcPe7VxzmEiCa4jNnMyBn/US5zcd/VE1CI+O8Ovb3lfjVHfGw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@next/swc-win32-arm64-msvc@15.1.6': resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==} @@ -7094,6 +7361,9 @@ packages: '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -7140,6 +7410,10 @@ packages: peerDependencies: zod: ^4.0.0 + '@opentelemetry/api-logs@0.205.0': + resolution: {integrity: sha512-wBlPk1nFB37Hsm+3Qy73yQSobVn28F4isnWIBvKpd5IUH/eat8bwcL02H9yzmHyyPmukeccSl2mbN5sDQZYnPg==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api-logs@0.220.0': resolution: {integrity: sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==} engines: {node: '>=8.0.0'} @@ -7183,6 +7457,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.1.0': + resolution: {integrity: sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.9.0': resolution: {integrity: sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7195,6 +7475,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-http@0.205.0': + resolution: {integrity: sha512-5JteMyVWiro4ghF0tHQjfE6OJcF7UBUcoEqX3UIQ5jutKP1H+fxFdyhqjjpmeHMFxzOHaYuLlNR1Bn7FOjGyJg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-http@0.220.0': resolution: {integrity: sha512-8186thl+pTw64iz/qEEen5oJZoZ/gO73XruChdaGlYdWOdBIQ42r+vHLf6a7vIDqTD4b8ZOoMlyxptanECaI9A==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7213,6 +7499,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-http@0.205.0': + resolution: {integrity: sha512-fFxNQ/HbbpLmh1pgU6HUVbFD1kNIjrkoluoKJkh88+gnmpFD92kMQ8WFNjPnSbjg2mNVnEkeKXgCYEowNW+p1w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-http@0.220.0': resolution: {integrity: sha512-Yqt3RBw/bRVncaE9qIIhk4WfjbAQqXuP9FgAaU+IKPndnLEp/cUqZlSC324+bpmduRz7DoTjig8Ub0PeILWXUA==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7243,6 +7535,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/exporter-trace-otlp-http@0.205.0': + resolution: {integrity: sha512-vr2bwwPCSc9u7rbKc74jR+DXFvyMFQo9o5zs+H/fgbK672Whw/1izUKVf+xfWOdJOvuwTnfWxy+VAY+4TSo74Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-http@0.220.0': resolution: {integrity: sha512-/+ExB3lRkf+erv4PnoywyL7RHKITidxtUpUTS55k7OQ0dB42S7gEF1gry7swb9MSm1hYLUhJg4QQh9W8SpwwqA==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7513,6 +7811,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-exporter-base@0.205.0': + resolution: {integrity: sha512-2MN0C1IiKyo34M6NZzD6P9Nv9Dfuz3OJ3rkZwzFmF6xzjDfqqCTatc9v1EpNfaP55iDOCLHFyYNCgs61FFgtUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-exporter-base@0.220.0': resolution: {integrity: sha512-CXYo8UD5Mn9YbgebO2EL4wejtA+gxLmLiu6HCk2KH2BR7XhFN6/6p1UlCb23DYCjeYkndevLHuejCCN1yx4+OQ==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7537,6 +7841,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/otlp-transformer@0.205.0': + resolution: {integrity: sha512-KmObgqPtk9k/XTlWPJHdMbGCylRAmMJNXIRh6VYJmvlRDMfe+DonH41G7eenG8t4FXn3fxOGh14o/WiMRR6vPg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-transformer@0.220.0': resolution: {integrity: sha512-lXGrv7KXZ0gNH9SVNUaa6vv6phVYGvJxfXAlMbzbakiXru75f5MZl8Z7oqiMMQD77riVHJCFlQvbZs/VVN2/4A==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7595,6 +7905,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-gcp@0.40.3': + resolution: {integrity: sha512-C796YjBA5P1JQldovApYfFA/8bQwFfpxjUbOtGhn1YZkVTLoNQN+kvBwgALfTPWzug6fWsd0xhn9dzeiUcndag==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-gcp@0.55.0': resolution: {integrity: sha512-uWU27lJcTbeXDY+uWEapsIyMx8mKi14/IGvUY1DkmMmLQnKRibnbpZEsRVeWBPdjOWSjH9LfWTXp9yDcBHZOeg==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7613,12 +7929,24 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/resources@2.1.0': + resolution: {integrity: sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/resources@2.9.0': resolution: {integrity: sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-logs@0.205.0': + resolution: {integrity: sha512-nyqhNQ6eEzPWQU60Nc7+A5LIq8fz3UeIzdEVBQYefB4+msJZ2vuVtRuk9KxPMw1uHoHDtYEwkr2Ct0iG29jU8w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + '@opentelemetry/sdk-logs@0.220.0': resolution: {integrity: sha512-WywcTkQtv2iNmt+6y5Kcd4rzvx9bLVsBa2Nwcmg01IUaBTkTow3W4d9KE5vNBpEDtb9tp21WcRBY/lANRrApYA==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7637,6 +7965,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-metrics@2.1.0': + resolution: {integrity: sha512-J9QX459mzqHLL9Y6FZ4wQPRZG4TOpMCyPOh6mkr/humxE1W2S3Bvf4i75yiMW9uyed2Kf5rxmLhTm/UK8vNkAw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + '@opentelemetry/sdk-metrics@2.9.0': resolution: {integrity: sha512-Xx8RGS4H5XEBl01WuCreMIpiah9cCXMbSkeuIePPdD2cUpq/vUzYmj8E/MK1OsbOc93FuAD4jfn2WOacKwLn7Q==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7661,6 +7995,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-base@2.1.0': + resolution: {integrity: sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-base@2.9.0': resolution: {integrity: sha512-cp9zmTl62R8PJrpvFcmc8N2JQU/xfa0S+61q511Nji+QxCfZ8Ifvg7H27G8cANe4crg4RTrWsVvanHiXjSp6ag==} engines: {node: ^18.19.0 || >=20.6.0} @@ -7850,79 +8190,66 @@ packages: resolution: {integrity: sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.61.1': resolution: {integrity: sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.61.1': resolution: {integrity: sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.61.1': resolution: {integrity: sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.61.1': resolution: {integrity: sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.61.1': resolution: {integrity: sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.61.1': resolution: {integrity: sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.61.1': resolution: {integrity: sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.61.1': resolution: {integrity: sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.61.1': resolution: {integrity: sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.61.1': resolution: {integrity: sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.61.1': resolution: {integrity: sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.61.1': resolution: {integrity: sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.61.1': resolution: {integrity: sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==} @@ -8027,6 +8354,9 @@ packages: resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} engines: {node: '>=18.0.0'} + '@so-ric/colorspace@1.1.6': + resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -8178,28 +8508,24 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] '@swc/core-linux-arm64-musl@1.10.11': resolution: {integrity: sha512-2mMscXe/ivq8c4tO3eQSbQDFBvagMJGlalXCspn0DgDImLYTEnt/8KHMUMGVfh0gMJTZ9q4FlGLo7mlnbx99MQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] '@swc/core-linux-x64-gnu@1.10.11': resolution: {integrity: sha512-eu2apgDbC4xwsigpl6LS+iyw6a3mL6kB4I+6PZMbFF2nIb1Dh7RGnu70Ai6mMn1o80fTmRSKsCT3CKMfVdeNFg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] '@swc/core-linux-x64-musl@1.10.11': resolution: {integrity: sha512-0n+wPWpDigwqRay4IL2JIvAqSKCXv6nKxPig9M7+epAlEQlqX+8Oq/Ap3yHtuhjNPb7HmnqNJLCXT1Wx+BZo0w==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] '@swc/core-win32-arm64-msvc@1.10.11': resolution: {integrity: sha512-7+bMSIoqcbXKosIVd314YjckDRPneA4OpG1cb3/GrkQTEDXmWT3pFBBlJf82hzJfw7b6lfv6rDVEFBX7/PJoLA==} @@ -8303,6 +8629,13 @@ packages: resolution: {integrity: sha512-R/flff9BnEDjOS73w1A5zfz/kmB+fuBWWPvmxi/bTSNorgHfJasNIB9ncefuxSbaDDdN1CZrOqtC8IY7eMXygA==} engines: {node: '>= 20.3.0'} + '@temporalio/google-adk-agents@1.23.0': + resolution: {integrity: sha512-oPbs6ohRDtQ6B9fx3SBVicngTd3gj9hLJs8MQKSiV3Yypcvx0QI6xX17fEMQ60Y5ZsmtJ22suTbwEhhNmJECGw==} + engines: {node: '>= 20.3.0'} + peerDependencies: + '@google/adk': '>=1.5.0 <1.6.0' + '@google/genai': ^2.9.0 + '@temporalio/interceptors-opentelemetry-v2@1.23.0': resolution: {integrity: sha512-vlKjPXnmNlNxz6QXwRi7wgOcEROW6ceMJxgXSLXfIt/8+P1BMPFfvKqtFNZLOT+JOsuewG5vEfcgHRumkmaHaQ==} engines: {node: '>= 20.0.0'} @@ -8444,6 +8777,10 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} + '@tootallnate/once@2.0.1': + resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} + engines: {node: '>= 10'} + '@trpc/client@10.45.2': resolution: {integrity: sha512-ykALM5kYWTLn1zYuUOZ2cPWlVfrXhc18HzBDyRhoPYN0jey4iQHEFSEowfnhg1RvYnrAVjNBgHNeSAXjrDbGwg==} peerDependencies: @@ -8479,6 +8816,9 @@ packages: '@ts-morph/common@0.11.1': resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} + '@ts-morph/common@0.28.1': + resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==} + '@tsconfig/node10@1.0.11': resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} @@ -8530,6 +8870,9 @@ packages: '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/caseless@0.12.5': + resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -8566,9 +8909,6 @@ packages: '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -8584,6 +8924,9 @@ packages: '@types/express@5.0.0': resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} @@ -8702,6 +9045,9 @@ packages: '@types/node@22.12.0': resolution: {integrity: sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==} + '@types/node@24.13.3': + resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} + '@types/oracledb@6.5.2': resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==} @@ -8737,6 +9083,12 @@ packages: '@types/react@18.3.18': resolution: {integrity: sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==} + '@types/readable-stream@4.0.24': + resolution: {integrity: sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==} + + '@types/request@2.48.13': + resolution: {integrity: sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==} + '@types/resolve@1.17.1': resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -8782,6 +9134,9 @@ packages: '@types/testing-library__jest-dom@5.14.9': resolution: {integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} @@ -8950,13 +9305,13 @@ packages: resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typespec/ts-http-runtime@0.3.8': + resolution: {integrity: sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==} + engines: {node: '>=22.0.0'} + '@ungap/promise-all-settled@1.1.2': resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher - '@ungap/structured-clone@1.3.2': resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} @@ -9133,10 +9488,6 @@ packages: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - acorn-walk@8.3.5: resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} engines: {node: '>=0.4.0'} @@ -9146,11 +9497,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -9169,6 +9515,10 @@ packages: resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} + adm-zip@0.5.18: + resolution: {integrity: sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==} + engines: {node: '>=12.0'} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -9289,6 +9639,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} @@ -9307,6 +9660,11 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -9376,6 +9734,10 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -9409,6 +9771,9 @@ packages: async-mutex@0.5.0: resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} @@ -9433,6 +9798,10 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + aws-ssl-profiles@1.1.2: + resolution: {integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==} + engines: {node: '>= 6.0.0'} + axe-core@4.10.2: resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} @@ -9635,6 +10004,9 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@6.1.6: + resolution: {integrity: sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==} + bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} @@ -9642,6 +10014,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.6: + resolution: {integrity: sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.1: resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==} engines: {node: '>=18'} @@ -9694,16 +10070,26 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -9944,6 +10330,9 @@ packages: code-block-writer@10.1.1: resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -9954,15 +10343,27 @@ packages: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-convert@3.1.3: + resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} + engines: {node: '>=14.6'} + color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@2.1.1: + resolution: {integrity: sha512-p2FdgwVx1a9yWBHP2wI0VgShkDpgN4kZISkxdNipGBJWpa5G6b04OINlVWCyJj0JmfvcPrgqt95E9k8yvaOJFg==} + engines: {node: '>=12.20'} + color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} + engines: {node: '>=18'} + color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true @@ -9974,9 +10375,16 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + color@5.0.3: + resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} + engines: {node: '>=18'} + colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -9990,6 +10398,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -10245,10 +10657,6 @@ packages: resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} engines: {node: '>= 6'} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -10333,6 +10741,9 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} + dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} + date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -10452,6 +10863,14 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.1: + resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} + engines: {node: '>=18'} + + default-browser@5.5.1: + resolution: {integrity: sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==} + engines: {node: '>=18'} + default-gateway@6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} @@ -10475,6 +10894,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -10497,6 +10920,10 @@ packages: resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} engines: {node: '>=0.10'} + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -10662,6 +11089,10 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -10672,9 +11103,15 @@ packages: duplexify@3.7.1: resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + edge-runtime@2.1.4: resolution: {integrity: sha512-SertKByzAmjm+MkLbFl1q0ko+/90V24dhZgQM8fcdguQaDYVEVtb6okEBGeg8IQgL1/JUP8oSlUIxSI/bvsVRQ==} engines: {node: '>=14'} @@ -10733,6 +11170,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -10761,6 +11201,13 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -11178,6 +11625,10 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true + esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -11309,6 +11760,10 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@4.22.2: + resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} + engines: {node: '>= 0.10.0'} + express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -11353,6 +11808,13 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-xml-builder@1.3.1: + resolution: {integrity: sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==} + + fast-xml-parser@5.11.1: + resolution: {integrity: sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw==} + hasBin: true + fastq@1.18.0: resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} @@ -11369,6 +11831,15 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} @@ -11495,6 +11966,10 @@ packages: form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + form-data@2.5.6: + resolution: {integrity: sha512-Ogz/E85h9tlfJzpI6TuFpGcHZFhLrb9Gw8wq9v40CxSCPnv7ahKr6Xgtkn0KYCDQJ8DNn5VoMO8EXr9V5PadyA==} + engines: {node: '>= 0.12'} + form-data@3.0.2: resolution: {integrity: sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==} engines: {node: '>= 6'} @@ -11551,6 +12026,10 @@ packages: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} + fs-extra@11.3.3: + resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} + engines: {node: '>=14.14'} + fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -11593,14 +12072,42 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + gaxios@7.1.3: resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} engines: {node: '>=18'} + gaxios@7.3.1: + resolution: {integrity: sha512-kB3rzJV7d9juLZh8/56QTXCwQfxyhdOMdyYk1HdQKFtF8TJTDTZQJtixWIwXdE9Jji91mC41DUNpjleo4L4eAQ==} + engines: {node: '>=18'} + + gcp-metadata@6.1.1: + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} + engines: {node: '>=14'} + + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + gcp-metadata@8.1.3: resolution: {integrity: sha512-ziTrzUhhpL9Zk5k0HHzgP/KIpWDJT0VMBC/ynt/QIBvTW+UUcSivQRl6VlwTf/EilDxtSWklHoRsKy1c4k+59w==} engines: {node: '>=18'} + gcp-metadata@9.0.3: + resolution: {integrity: sha512-2YYnIlHaKBGT2IPg3G2M57hia9Galz15zsEOvw9T3oRf0lSn6KN6VcHQLqby7x8ksYKnjXvp3rp2KJyLCN6zfQ==} + engines: {node: '>=22'} + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + generic-names@4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} @@ -11650,6 +12157,9 @@ packages: resolution: {integrity: sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==} engines: {node: '>= 6'} + getopts@2.3.0: + resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} + git-hooks-list@1.0.3: resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} @@ -11723,10 +12233,34 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + google-auth-library@10.9.1: + resolution: {integrity: sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw==} + engines: {node: '>=18'} + + google-auth-library@9.15.1: + resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} + engines: {node: '>=14'} + + google-logging-utils@0.0.2: + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} + engines: {node: '>=14'} + google-logging-utils@1.1.3: resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} engines: {node: '>=14'} + google-logging-utils@2.0.1: + resolution: {integrity: sha512-HMhaQghlOTvbcb3c4T5jmmOMtG3JUF1iOQMezaJXL86CDS+Tm2vHd0IeLFRAx3+ewd+bo9E1HFHoy17X5aJa9A==} + engines: {node: '>=22'} + + googleapis-common@7.2.0: + resolution: {integrity: sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==} + engines: {node: '>=14.0.0'} + + googleapis@137.1.0: + resolution: {integrity: sha512-2L7SzN0FLHyQtFmyIxrcXhgust77067pkkduqkbIpDuj9JzVnByxsRrcRfUMFQam3rQkWW2B0f1i40IwKDWIVQ==} + engines: {node: '>=14.0.0'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -11745,6 +12279,10 @@ packages: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} engines: {node: '>=4.x'} + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -11911,6 +12449,14 @@ packages: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http-proxy-middleware@2.0.7: resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} engines: {node: '>=12.0.0'} @@ -12056,6 +12602,10 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + interpret@2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + ioredis@4.28.5: resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==} engines: {node: '>=6'} @@ -12161,6 +12711,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -12199,10 +12754,18 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -12244,6 +12807,9 @@ packages: is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} @@ -12290,6 +12856,9 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unsafe@2.0.2: + resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -12310,6 +12879,10 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.1: + resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} + engines: {node: '>=16'} + isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} @@ -12776,6 +13349,9 @@ packages: jose@6.1.3: resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + js-md4@0.3.2: + resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -12817,6 +13393,10 @@ packages: canvas: optional: true + jsep@1.4.0: + resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} + engines: {node: '>= 10.16.0'} + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -12878,6 +13458,11 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonpath-plus@10.4.0: + resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} + engines: {node: '>=18.0.0'} + hasBin: true + jsonpath@1.1.1: resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} @@ -12885,6 +13470,10 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + jsonwebtoken@9.0.3: + resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} + engines: {node: '>=12', npm: '>=6'} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -12892,6 +13481,12 @@ packages: just-extend@6.2.0: resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.1: + resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -12914,6 +13509,37 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} + knex@3.2.10: + resolution: {integrity: sha512-oypTHfrc9i72iyxaUQBKHOxhcr0xM65MPf6FpN02nimsftXwzXprIkLjfXdubvhbu4PMWLp023q8o8CYvHSuZw==} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + better-sqlite3: '*' + mysql: '*' + mysql2: '*' + pg: '*' + pg-native: '*' + pg-query-stream: ^4.14.0 + sqlite3: '*' + tedious: '*' + peerDependenciesMeta: + better-sqlite3: + optional: true + mysql: + optional: true + mysql2: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + sqlite3: + optional: true + tedious: + optional: true + kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} @@ -12980,10 +13606,6 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - loader-runner@4.3.2: resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} engines: {node: '>=6.11.5'} @@ -13008,6 +13630,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -13027,15 +13652,36 @@ packages: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -13104,6 +13750,10 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} + lru.min@1.1.4: + resolution: {integrity: sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==} + engines: {bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0'} + lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -13126,9 +13776,17 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + mariadb@3.4.5: + resolution: {integrity: sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==} + engines: {node: '>= 14'} + markdown-extensions@1.1.1: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} @@ -13396,6 +14054,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mikro-orm@6.6.16: + resolution: {integrity: sha512-42bvve+XSzvBpOuZeZxJsM5aW4DQnDn23E5to4cvEjUdaPX7jg1bRh+l8f/8/WJJNzG1T05V5vHSe+SHzqN87A==} + engines: {node: '>= 18.12.0'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -13422,6 +14084,11 @@ packages: engines: {node: '>=4.0.0'} hasBin: true + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -13523,6 +14190,10 @@ packages: resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} engines: {node: '>= 8'} + minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + minipass-flush@1.0.7: resolution: {integrity: sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==} engines: {node: '>= 8'} @@ -13531,6 +14202,10 @@ packages: resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} engines: {node: '>=8'} + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -13629,9 +14304,19 @@ packages: resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mysql2@3.20.0: + resolution: {integrity: sha512-eCLUs7BNbgA6nf/MZXsaBO1SfGs0LtLVrJD3WeWq+jPLDWkSufTD+aGMwykfUVPdZnblaUK1a8G/P63cl9FkKg==} + engines: {node: '>= 8.0'} + peerDependencies: + '@types/node': '>= 8' + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + named-placeholders@1.1.6: + resolution: {integrity: sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==} + engines: {node: '>=8.0.0'} + nanoid@3.1.20: resolution: {integrity: sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -13655,6 +14340,9 @@ packages: napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + native-duplexpair@1.0.0: + resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} + natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} @@ -13749,6 +14437,9 @@ packages: node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + 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'} @@ -13787,6 +14478,11 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true + node-gyp@8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -13839,6 +14535,11 @@ packages: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + nth-check@1.0.2: resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} @@ -13869,6 +14570,10 @@ packages: resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} engines: {node: '>= 0.4'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} engines: {node: '>= 0.4'} @@ -13926,6 +14631,10 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -14105,6 +14814,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -14172,10 +14885,27 @@ packages: periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + pg-cloudflare@1.4.0: + resolution: {integrity: sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==} + + pg-connection-string@2.14.0: + resolution: {integrity: sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg==} + + pg-connection-string@2.6.2: + resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} + pg-pool@3.14.0: + resolution: {integrity: sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.16.0: + resolution: {integrity: sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg==} + pg-protocol@1.7.0: resolution: {integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==} @@ -14183,6 +14913,18 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} + pg@8.20.0: + resolution: {integrity: sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA==} + engines: {node: '>= 16.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + picocolors@0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} @@ -14200,6 +14942,10 @@ packages: resolution: {integrity: sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pidtree@0.3.1: resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} engines: {node: '>=0.10'} @@ -14717,6 +15463,10 @@ packages: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} @@ -14725,10 +15475,18 @@ packages: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + postgres-interval@4.0.2: + resolution: {integrity: sha512-EMsphSQ1YkQqKZL2cuG0zHkmjCCzQqQ71l2GXITqRwjhRleCdv00bDk/ktaSi0LnlaPzAc3535KTrjXsTdtx7A==} + engines: {node: '>=12'} + prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} @@ -14801,6 +15559,10 @@ packages: resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} engines: {node: '>=8'} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -14809,6 +15571,10 @@ packages: bluebird: optional: true + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -14905,6 +15671,10 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} + engines: {node: '>=0.6'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -15031,6 +15801,10 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@3.5.0: resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} engines: {node: '>=8.10.0'} @@ -15047,6 +15821,10 @@ packages: resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} engines: {node: '>= 4'} + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} engines: {node: '>=6.0.0'} @@ -15076,10 +15854,6 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} - engines: {node: '>=4'} - regenerate-unicode-properties@10.2.2: resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} engines: {node: '>=4'} @@ -15103,10 +15877,6 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} - regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} - engines: {node: '>=4'} - regexpu-core@6.4.0: resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} @@ -15114,10 +15884,6 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} - hasBin: true - regjsparser@0.13.1: resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} hasBin: true @@ -15245,6 +16011,14 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + retry-request@7.0.2: + resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} + engines: {node: '>=14'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -15288,6 +16062,10 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -15385,10 +16163,6 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.3.0: - resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} - engines: {node: '>= 10.13.0'} - schema-utils@4.3.3: resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} @@ -15527,6 +16301,10 @@ packages: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + side-channel-map@1.0.1: resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} engines: {node: '>= 0.4'} @@ -15539,6 +16317,10 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -15589,6 +16371,10 @@ packages: resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} engines: {node: '>= 6'} + socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + socks@2.8.9: resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} @@ -15675,9 +16461,31 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + sql-escaper@1.5.1: + resolution: {integrity: sha512-4toX5E1fQbBrpfXidaHnF0669nkAdETeIPTs2SUjxxD7RRIs9ICG4gtpmfc68JCEKehsdwLFqBu9VlQqZ1P1gg==} + engines: {bun: '>=1.0.0', deno: '>=2.0.0', node: '>=12.0.0'} + + sqlite3@5.1.7: + resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==} + + sqlstring-sqlite@0.1.1: + resolution: {integrity: sha512-9CAYUJ0lEUPYJrswqiqdINNSfq3jqWo/bFJ7tufdoNeSK0Fy+d1kFTxjqO9PIqza0Kri+ZtYMfPVf1aZaFOvrQ==} + engines: {node: '>= 0.6'} + + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + ssri@8.0.1: resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} engines: {node: '>= 8'} @@ -15721,6 +16529,9 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + stream-events@1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -15840,6 +16651,12 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.4.2: + resolution: {integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==} + + stubs@3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + style-loader@3.3.4: resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} engines: {node: '>= 12.13.0'} @@ -15994,6 +16811,18 @@ packages: engines: {node: '>=10'} deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + tarn@3.1.2: + resolution: {integrity: sha512-3RTvqKZcK/17jnJ8rMKFXbyNogywTs1z0gVPPwFsJGX46rkmUHOdIaSQ/aVO1rS7nH+soiXiWk7rvUXxndm8Dg==} + engines: {node: '>=8.0.0'} + + tedious@19.2.1: + resolution: {integrity: sha512-pk1Q16Yl62iocuQB+RWbg6rFUFkIyzqOFQ6NfysCltRvQqKwfurgj8v/f2X+CKvDhSL4IJ0cCOfCHDg9PWEEYA==} + engines: {node: '>=18.17'} + + teeny-request@9.0.0: + resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} + engines: {node: '>=14'} + temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -16065,10 +16894,18 @@ packages: thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + tildify@2.0.0: + resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==} + engines: {node: '>=8'} + time-span@4.0.0: resolution: {integrity: sha512-MyqZCTGLDZ77u4k+jqg4UlrzPTPZ49NDlaekU6uuFaJLzPIN1woaRXCbGeqOfxwc3Y37ZROGAJ614Rdv7Olt+g==} engines: {node: '>=10'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -16206,6 +17043,9 @@ packages: ts-morph@12.0.0: resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} + ts-morph@27.0.2: + resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==} + ts-node@10.9.1: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -16254,6 +17094,10 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsqlstring@1.0.1: + resolution: {integrity: sha512-6Nzj/SrVg1SF+egwP4OMAgEa83nLKXIE3EHn+6YKinMUeMj8bGIeLuDCkDC3Cc4OIM+xhw4CD0oXKxal8J/Y6A==} + engines: {node: '>= 8.0'} + tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -16386,6 +17230,9 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -16394,10 +17241,6 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} - engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.2.1: resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} engines: {node: '>=4'} @@ -16505,6 +17348,9 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url-template@2.0.8: + resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} + use-sync-external-store@1.4.0: resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} peerDependencies: @@ -16636,10 +17482,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} - engines: {node: '>=10.13.0'} - watchpack@2.5.2: resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} engines: {node: '>=10.13.0'} @@ -16718,10 +17560,6 @@ packages: resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} engines: {node: '>=10.13.0'} - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - webpack-sources@3.5.0: resolution: {integrity: sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==} engines: {node: '>=10.13.0'} @@ -16836,6 +17674,10 @@ packages: resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} engines: {node: '>= 12.0.0'} + winston@3.19.0: + resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==} + engines: {node: '>= 12.0.0'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -16964,12 +17806,20 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xdm@2.1.0: resolution: {integrity: sha512-3LxxbxKcRogYY7cQSMy1tUuU1zKNK9YPqMT7/S0r7Cz2QpyF8O9yFySGD7caOZt+LWUOQioOIX+6ZzCoBCpcAA==} xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} + engines: {node: '>=16.0.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -17074,6 +17924,21 @@ packages: snapshots: + '@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@4.22.2)': + dependencies: + uuid: 11.1.0 + optionalDependencies: + '@grpc/grpc-js': 1.14.4 + express: 4.22.2 + + '@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1)': + dependencies: + uuid: 11.1.0 + optionalDependencies: + '@grpc/grpc-js': 1.14.4 + express: 5.2.1 + optional: true + '@adobe/css-tools@4.4.1': {} '@ai-sdk/gateway@4.0.31(zod@4.4.3)': @@ -17359,6 +18224,144 @@ snapshots: '@aws/lambda-invoke-store@0.3.0': {} + '@azure-rest/core-client@2.8.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/abort-controller@2.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.11.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-util': 1.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-client@1.11.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-lro@2.7.2': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-paging@1.7.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-process@1.0.0': {} + + '@azure/core-rest-pipeline@1.25.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.4.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.14.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/identity@4.13.2': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-client': 1.11.0 + '@azure/core-process': 1.0.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@azure/msal-browser': 5.19.0 + '@azure/msal-node': 5.6.0 + open: 10.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-common@2.1.0': + dependencies: + '@azure-rest/core-client': 2.8.0 + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.10.2': + dependencies: + '@azure-rest/core-client': 2.8.0 + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.7.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/keyvault-common': 2.1.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.4.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/msal-browser@5.19.0': + dependencies: + '@azure/msal-common': 16.13.0 + + '@azure/msal-common@16.13.0': {} + + '@azure/msal-node@5.6.0': + dependencies: + '@azure/msal-common': 16.13.0 + jsonwebtoken: 9.0.3 + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -17476,15 +18479,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.29.7)': + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.29.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.26.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/traverse': 7.29.7 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -17502,18 +18505,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.7)': + '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 - semver: 6.3.1 - - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.25.9 - regexpu-core: 6.2.0 + '@babel/helper-annotate-as-pure': 7.29.7 + regexpu-core: 6.4.0 semver: 6.3.1 '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7)': @@ -17534,17 +18530,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.3(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -17595,12 +18580,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/core': 7.26.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -17625,20 +18610,11 @@ snapshots: '@babel/helper-plugin-utils@7.29.7': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.7)': + '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-wrap-function': 7.29.7 '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -17661,12 +18637,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.29.7)': + '@babel/helper-replace-supers@7.29.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/core': 7.26.7 + '@babel/helper-member-expression-to-functions': 7.29.7 + '@babel/helper-optimise-call-expression': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -17705,14 +18681,6 @@ snapshots: '@babel/helper-validator-option@7.29.7': {} - '@babel/helper-wrap-function@7.25.9': - dependencies: - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-wrap-function@7.29.7': dependencies: '@babel/template': 7.29.7 @@ -17742,16 +18710,8 @@ snapshots: '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -17766,12 +18726,7 @@ snapshots: '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.7)': dependencies: @@ -17781,12 +18736,7 @@ snapshots: '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.7)': dependencies: @@ -17804,18 +18754,9 @@ snapshots: '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.26.7) transitivePeerDependencies: - supports-color @@ -17831,16 +18772,8 @@ snapshots: '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -17969,12 +18902,7 @@ snapshots: '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7)': dependencies: @@ -17984,12 +18912,12 @@ snapshots: '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18021,6 +18949,11 @@ snapshots: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -18111,11 +19044,6 @@ snapshots: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -18124,24 +19052,19 @@ snapshots: '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18151,18 +19074,9 @@ snapshots: '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.29.7) - '@babel/traverse': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.26.7) + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -18178,18 +19092,9 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.29.7) + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.26.7) transitivePeerDependencies: - supports-color @@ -18205,12 +19110,7 @@ snapshots: '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18220,12 +19120,7 @@ snapshots: '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18235,16 +19130,8 @@ snapshots: '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color @@ -18259,16 +19146,8 @@ snapshots: '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color @@ -18283,23 +19162,11 @@ snapshots: '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) - '@babel/traverse': 7.26.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.29.7) - '@babel/traverse': 7.26.7 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.26.7) + '@babel/traverse': 7.29.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -18319,14 +19186,8 @@ snapshots: '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.25.9 - - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.25.9 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18337,12 +19198,7 @@ snapshots: '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18355,14 +19211,8 @@ snapshots: '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18373,12 +19223,7 @@ snapshots: '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18388,14 +19233,8 @@ snapshots: '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18406,12 +19245,7 @@ snapshots: '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18429,12 +19263,7 @@ snapshots: '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18444,12 +19273,7 @@ snapshots: '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18465,16 +19289,8 @@ snapshots: '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color @@ -18489,18 +19305,9 @@ snapshots: '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -18516,12 +19323,7 @@ snapshots: '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18531,12 +19333,7 @@ snapshots: '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18546,12 +19343,7 @@ snapshots: '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18561,12 +19353,7 @@ snapshots: '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18576,16 +19363,8 @@ snapshots: '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color @@ -18605,14 +19384,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -18624,20 +19395,10 @@ snapshots: '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -18654,16 +19415,8 @@ snapshots: '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color @@ -18678,14 +19431,8 @@ snapshots: '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18696,12 +19443,7 @@ snapshots: '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18711,12 +19453,7 @@ snapshots: '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18726,12 +19463,7 @@ snapshots: '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18741,16 +19473,9 @@ snapshots: '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.7) - - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.29.7) + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.26.7) '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18766,16 +19491,8 @@ snapshots: '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-replace-supers': 7.29.7(@babel/core@7.26.7) transitivePeerDependencies: - supports-color @@ -18790,12 +19507,7 @@ snapshots: '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18805,16 +19517,16 @@ snapshots: '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.29.7)': + '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color @@ -18829,12 +19541,12 @@ snapshots: '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.29.7)': + '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.26.7)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18844,16 +19556,8 @@ snapshots: '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color @@ -18868,18 +19572,9 @@ snapshots: '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-annotate-as-pure': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 transitivePeerDependencies: - supports-color @@ -18895,26 +19590,26 @@ snapshots: '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.29.7)': + '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.7)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.7)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.26.7 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.7)': @@ -18924,6 +19619,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -18935,22 +19637,33 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.7)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.26.7 + '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.29.7) + '@babel/types': 7.26.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.7)': + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.29.7)': + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.7)': + dependencies: + '@babel/core': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 regenerator-transform: 0.15.2 '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7)': @@ -18961,14 +19674,8 @@ snapshots: '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.7)': dependencies: @@ -18979,12 +19686,7 @@ snapshots: '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19006,12 +19708,7 @@ snapshots: '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19021,16 +19718,8 @@ snapshots: '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 transitivePeerDependencies: - supports-color @@ -19045,12 +19734,7 @@ snapshots: '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19060,12 +19744,7 @@ snapshots: '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19075,12 +19754,7 @@ snapshots: '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19112,12 +19786,7 @@ snapshots: '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19127,14 +19796,8 @@ snapshots: '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19145,14 +19808,8 @@ snapshots: '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19163,14 +19820,8 @@ snapshots: '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.7) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.26.7) + '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.7)': dependencies: @@ -19253,81 +19904,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/preset-env@7.26.7(@babel/core@7.29.7)': - dependencies: - '@babel/compat-data': 7.26.5 - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.29.7) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.29.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.29.7) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.29.7) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.29.7) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.29.7) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.29.7) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.29.7) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.29.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.29.7) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.29.7) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.29.7) - core-js-compat: 3.40.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/preset-env@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/compat-data': 7.29.7 @@ -19408,15 +19984,15 @@ snapshots: '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.7 esutils: 2.0.3 '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.7 esutils: 2.0.3 '@babel/preset-react@7.26.3(@babel/core@7.26.7)': @@ -19431,6 +20007,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-react@7.26.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.29.7) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + '@babel/preset-typescript@7.26.0(@babel/core@7.26.7)': dependencies: '@babel/core': 7.26.7 @@ -19611,6 +20199,12 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 + '@dabh/diagnostics@2.0.8': + dependencies: + '@so-ric/colorspace': 1.1.6 + enabled: 2.0.0 + kuler: 2.0.0 + '@edge-runtime/format@2.0.1': {} '@edge-runtime/primitives@2.0.0': {} @@ -19865,7 +20459,7 @@ snapshots: globals: 13.24.0 ignore: 5.3.2 import-fresh: 3.3.0 - js-yaml: 4.1.0 + js-yaml: 4.2.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -19875,6 +20469,157 @@ snapshots: '@gar/promisify@1.1.3': {} + '@google-cloud/opentelemetry-cloud-monitoring-exporter@0.21.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + dependencies: + '@google-cloud/opentelemetry-resource-util': 3.1.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0)) + '@google-cloud/precise-date': 4.0.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + google-auth-library: 9.15.1(encoding@0.1.13) + googleapis: 137.1.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@google-cloud/opentelemetry-cloud-trace-exporter@3.1.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))': + dependencies: + '@google-cloud/opentelemetry-resource-util': 3.1.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0)) + '@grpc/grpc-js': 1.14.4 + '@grpc/proto-loader': 0.8.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.0) + google-auth-library: 10.9.1 + transitivePeerDependencies: + - supports-color + + '@google-cloud/opentelemetry-resource-util@3.1.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.42.0 + gcp-metadata: 9.0.3 + transitivePeerDependencies: + - supports-color + + '@google-cloud/paginator@5.0.2': + dependencies: + arrify: 2.0.1 + extend: 3.0.2 + + '@google-cloud/precise-date@4.0.0': {} + + '@google-cloud/projectify@4.0.0': {} + + '@google-cloud/promisify@4.0.0': {} + + '@google-cloud/storage@7.22.0(encoding@0.1.13)': + dependencies: + '@google-cloud/paginator': 5.0.2 + '@google-cloud/projectify': 4.0.0 + '@google-cloud/promisify': 4.0.0 + abort-controller: 3.0.0 + async-retry: 1.3.3 + duplexify: 4.1.3 + fast-xml-parser: 5.11.1 + gaxios: 6.7.1(encoding@0.1.13) + google-auth-library: 9.15.1(encoding@0.1.13) + html-entities: 2.5.2 + mime: 3.0.0 + p-limit: 3.1.0 + retry-request: 7.0.2(encoding@0.1.13) + teeny-request: 9.0.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@google-cloud/vertexai@1.12.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(encoding@0.1.13)': + dependencies: + '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + google-auth-library: 9.15.1(encoding@0.1.13) + transitivePeerDependencies: + - '@modelcontextprotocol/sdk' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@google/adk@1.5.0(@grpc/grpc-js@1.14.4)(@mikro-orm/mariadb@6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0))(@mikro-orm/mssql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + dependencies: + '@a2a-js/sdk': 0.3.14(@grpc/grpc-js@1.14.4)(express@4.22.2) + '@google-cloud/opentelemetry-cloud-monitoring-exporter': 0.21.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google-cloud/opentelemetry-cloud-trace-exporter': 3.1.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0)) + '@google-cloud/storage': 7.22.0(encoding@0.1.13) + '@google-cloud/vertexai': 1.12.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(encoding@0.1.13) + '@google/genai': 2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + '@mikro-orm/core': 6.6.16 + '@mikro-orm/mariadb': 6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0) + '@mikro-orm/mssql': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0) + '@mikro-orm/mysql': 6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0) + '@mikro-orm/postgresql': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5) + '@mikro-orm/reflection': 6.6.16(@mikro-orm/core@6.6.16) + '@mikro-orm/sqlite': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0) + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.205.0 + '@opentelemetry/exporter-logs-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.40.3(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.9.0(@opentelemetry/api@1.9.0) + adm-zip: 0.5.18 + express: 4.22.2 + google-auth-library: 10.9.1 + js-yaml: 4.2.0 + jsonpath-plus: 10.4.0 + lodash-es: 4.18.1 + winston: 3.19.0 + zod: 4.4.3 + zod-to-json-schema: 3.25.2(zod@4.4.3) + transitivePeerDependencies: + - '@bufbuild/protobuf' + - '@cfworker/json-schema' + - '@grpc/grpc-js' + - '@opentelemetry/core' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': + dependencies: + google-auth-library: 10.9.1 + p-retry: 4.6.2 + protobufjs: 7.6.5 + ws: 8.18.0 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))': + dependencies: + google-auth-library: 10.9.1 + p-retry: 4.6.2 + protobufjs: 7.6.5 + ws: 8.18.0 + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + '@grpc/grpc-js@1.12.5': dependencies: '@grpc/proto-loader': 0.7.13 @@ -20155,7 +20900,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))': + '@jest/core@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -20169,7 +20914,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -20392,7 +21137,7 @@ snapshots: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 '@types/node': 22.12.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -20422,7 +21167,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 '@types/node': 22.12.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -20460,13 +21205,13 @@ snapshots: '@jest/source-map@28.1.2': dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -20536,9 +21281,9 @@ snapshots: '@jest/transform@28.1.3': dependencies: - '@babel/core': 7.26.7 + '@babel/core': 7.29.7 '@jest/types': 28.1.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 1.9.0 @@ -20556,9 +21301,9 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.26.7 + '@babel/core': 7.29.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -20616,8 +21361,8 @@ snapshots: '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': dependencies: @@ -20631,16 +21376,14 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping@0.3.31': dependencies: @@ -20650,7 +21393,9 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@js-joda/core@5.7.0': {} '@js-sdsl/ordered-map@4.4.2': {} @@ -20658,6 +21403,14 @@ snapshots: dependencies: lodash: 4.17.21 + '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': + dependencies: + jsep: 1.4.0 + + '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': + dependencies: + jsep: 1.4.0 + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -20684,12 +21437,12 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@mapbox/node-pre-gyp@1.0.11': + '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': dependencies: detect-libc: 2.0.3 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -20699,6 +21452,169 @@ snapshots: - encoding - supports-color + '@mikro-orm/core@6.6.16': + dependencies: + dataloader: 2.2.3 + dotenv: 17.3.1 + esprima: 4.0.1 + fs-extra: 11.3.3 + globby: 11.1.0 + mikro-orm: 6.6.16 + reflect-metadata: 0.2.2 + + '@mikro-orm/knex@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@22.12.0))(pg@8.20.0)': + dependencies: + '@mikro-orm/core': 6.6.16 + fs-extra: 11.3.3 + knex: 3.2.10(mysql2@3.20.0(@types/node@22.12.0))(pg@8.20.0) + sqlstring: 2.3.3 + optionalDependencies: + mariadb: 3.4.5 + transitivePeerDependencies: + - mysql + - mysql2 + - pg + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + - tedious + + '@mikro-orm/knex@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0)(sqlite3@5.1.7)': + dependencies: + '@mikro-orm/core': 6.6.16 + fs-extra: 11.3.3 + knex: 3.2.10(pg@8.20.0)(sqlite3@5.1.7) + sqlstring: 2.3.3 + optionalDependencies: + mariadb: 3.4.5 + transitivePeerDependencies: + - mysql + - mysql2 + - pg + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + - tedious + + '@mikro-orm/knex@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0)(tedious@19.2.1)': + dependencies: + '@mikro-orm/core': 6.6.16 + fs-extra: 11.3.3 + knex: 3.2.10(pg@8.20.0)(tedious@19.2.1) + sqlstring: 2.3.3 + optionalDependencies: + mariadb: 3.4.5 + transitivePeerDependencies: + - mysql + - mysql2 + - pg + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + - tedious + + '@mikro-orm/mariadb@6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0)': + dependencies: + '@mikro-orm/core': 6.6.16 + '@mikro-orm/knex': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@22.12.0))(pg@8.20.0) + mariadb: 3.4.5 + transitivePeerDependencies: + - better-sqlite3 + - libsql + - mysql + - mysql2 + - pg + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + - tedious + + '@mikro-orm/mssql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0)': + dependencies: + '@mikro-orm/core': 6.6.16 + '@mikro-orm/knex': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0)(tedious@19.2.1) + tedious: 19.2.1 + tsqlstring: 1.0.1 + transitivePeerDependencies: + - better-sqlite3 + - libsql + - mariadb + - mysql + - mysql2 + - pg + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + + '@mikro-orm/mysql@6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0)': + dependencies: + '@mikro-orm/core': 6.6.16 + '@mikro-orm/knex': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@22.12.0))(pg@8.20.0) + mysql2: 3.20.0(@types/node@22.12.0) + transitivePeerDependencies: + - '@types/node' + - better-sqlite3 + - libsql + - mariadb + - mysql + - pg + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + - tedious + + '@mikro-orm/postgresql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)': + dependencies: + '@mikro-orm/core': 6.6.16 + '@mikro-orm/knex': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(mysql2@3.20.0(@types/node@22.12.0))(pg@8.20.0) + pg: 8.20.0 + postgres-array: 3.0.4 + postgres-date: 2.1.0 + postgres-interval: 4.0.2 + transitivePeerDependencies: + - better-sqlite3 + - libsql + - mariadb + - mysql + - mysql2 + - pg-native + - pg-query-stream + - sqlite3 + - supports-color + - tedious + + '@mikro-orm/reflection@6.6.16(@mikro-orm/core@6.6.16)': + dependencies: + '@mikro-orm/core': 6.6.16 + globby: 11.1.0 + ts-morph: 27.0.2 + + '@mikro-orm/sqlite@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0)': + dependencies: + '@mikro-orm/core': 6.6.16 + '@mikro-orm/knex': 6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0)(sqlite3@5.1.7) + fs-extra: 11.3.3 + sqlite3: 5.1.7 + sqlstring-sqlite: 0.1.1 + transitivePeerDependencies: + - better-sqlite3 + - bluebird + - libsql + - mariadb + - mysql + - mysql2 + - pg + - pg-native + - pg-query-stream + - supports-color + - tedious + '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.27) @@ -20771,10 +21687,10 @@ snapshots: lodash: 4.17.21 rxjs: 7.8.1 - '@nestjs/core@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1)': + '@nestjs/core@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nuxtjs/opencollective': 0.3.2 + '@nuxtjs/opencollective': 0.3.2(encoding@0.1.13) fast-safe-stringify: 2.1.1 iterare: 1.2.1 path-to-regexp: 3.3.0 @@ -20790,7 +21706,7 @@ snapshots: '@nestjs/platform-express@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.15)': dependencies: '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1) body-parser: 1.20.3 cors: 2.8.5 express: 4.21.2 @@ -20824,7 +21740,7 @@ snapshots: '@nestjs/testing@10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.15)(@nestjs/platform-express@10.4.15)': dependencies: '@nestjs/common': 10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1) - '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.15)(encoding@0.1.13)(reflect-metadata@0.2.2)(rxjs@7.8.1) tslib: 2.8.1 optionalDependencies: '@nestjs/platform-express': 10.4.15(@nestjs/common@10.4.15(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.15) @@ -20889,6 +21805,8 @@ snapshots: dependencies: eslint-scope: 5.1.1 + '@nodable/entities@3.0.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -20917,11 +21835,11 @@ snapshots: dependencies: json-parse-even-better-errors: 2.3.1 - '@nuxtjs/opencollective@0.3.2': + '@nuxtjs/opencollective@0.3.2(encoding@0.1.13)': dependencies: chalk: 4.1.2 consola: 2.15.3 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -20954,6 +21872,10 @@ snapshots: - supports-color - ws + '@opentelemetry/api-logs@0.205.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.220.0': dependencies: '@opentelemetry/api': 1.9.0 @@ -21040,6 +21962,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.42.0 + '@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21055,6 +21982,15 @@ snapshots: '@opentelemetry/otlp-transformer': 0.220.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http@0.205.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.205.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http@0.220.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21083,6 +22019,15 @@ snapshots: '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http@0.205.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http@0.220.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21129,6 +22074,15 @@ snapshots: '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http@0.205.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http@0.220.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21517,6 +22471,12 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/otlp-exporter-base@0.205.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base@0.220.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21545,6 +22505,17 @@ snapshots: '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer@0.205.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.205.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.205.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + protobufjs: 7.6.5 + '@opentelemetry/otlp-transformer@0.220.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21608,6 +22579,16 @@ snapshots: '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp@0.40.3(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) + gcp-metadata: 6.1.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + '@opentelemetry/resource-detector-gcp@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21629,12 +22610,25 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.42.0 + '@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.42.0 + '@opentelemetry/sdk-logs@0.205.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.205.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs@0.220.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21657,6 +22651,12 @@ snapshots: '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) lodash.merge: 4.6.2 + '@opentelemetry/sdk-metrics@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21710,6 +22710,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.42.0 + '@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -21756,7 +22763,7 @@ snapshots: html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.11.0 - schema-utils: 4.3.0 + schema-utils: 4.3.3 source-map: 0.7.6 webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) optionalDependencies: @@ -21811,7 +22818,7 @@ snapshots: '@rollup/plugin-babel@5.3.1(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@2.79.2)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.25.9 + '@babel/helper-module-imports': 7.29.7 '@rollup/pluginutils': 3.1.0(rollup@2.79.2) rollup: 2.79.2 optionalDependencies: @@ -21826,7 +22833,7 @@ snapshots: builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.12 rollup: 2.79.2 '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': @@ -22003,9 +23010,14 @@ snapshots: dependencies: tslib: 2.8.1 + '@so-ric/colorspace@1.1.6': + dependencies: + color: 5.0.3 + text-hex: 1.0.0 + '@standard-schema/spec@1.1.0': {} - '@strands-agents/sdk@1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3)': + '@strands-agents/sdk@1.11.0(@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3)': dependencies: '@aws-sdk/client-bedrock-runtime': 3.1094.0 '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) @@ -22015,6 +23027,8 @@ snapshots: yaml: 2.9.0 zod: 4.4.3 optionalDependencies: + '@a2a-js/sdk': 0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1) + '@google/genai': 2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.0) @@ -22086,10 +23100,10 @@ snapshots: '@svgr/webpack@5.5.0': dependencies: - '@babel/core': 7.26.7 - '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.7) - '@babel/preset-env': 7.26.7(@babel/core@7.26.7) - '@babel/preset-react': 7.26.3(@babel/core@7.26.7) + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.29.7) + '@babel/preset-env': 7.29.7(@babel/core@7.29.7) + '@babel/preset-react': 7.26.3(@babel/core@7.29.7) '@svgr/core': 5.5.0 '@svgr/plugin-jsx': 5.5.0 '@svgr/plugin-svgo': 5.5.0 @@ -22233,6 +23247,19 @@ snapshots: '@temporalio/common': 1.23.0 smol-toml: 1.6.1 + '@temporalio/google-adk-agents@1.23.0(@google/adk@1.5.0(@grpc/grpc-js@1.14.4)(@mikro-orm/mariadb@6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0))(@mikro-orm/mssql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)))': + dependencies: + '@google/adk': 1.5.0(@grpc/grpc-js@1.14.4)(@mikro-orm/mariadb@6.6.16(@mikro-orm/core@6.6.16)(pg@8.20.0))(@mikro-orm/mssql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/mysql@6.6.16(@mikro-orm/core@6.6.16)(@types/node@22.12.0)(mariadb@3.4.5)(pg@8.20.0))(@mikro-orm/postgresql@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5))(@mikro-orm/sqlite@6.6.16(@mikro-orm/core@6.6.16)(mariadb@3.4.5)(pg@8.20.0))(@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@google/genai': 2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) + '@temporalio/activity': 1.23.0 + '@temporalio/common': 1.23.0 + '@temporalio/plugin': 1.23.0 + '@temporalio/workflow': 1.23.0 + '@temporalio/workflow-streams': 1.23.0 + '@ungap/structured-clone': 1.3.2 + headers-polyfill: 4.0.3 + web-streams-polyfill: 4.2.0 + '@temporalio/interceptors-opentelemetry-v2@1.23.0(@temporalio/common@1.23.0)(@temporalio/workflow@1.23.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -22367,9 +23394,9 @@ snapshots: long: 5.3.2 protobufjs: 8.7.2 - '@temporalio/strands-agents@1.23.0(@strands-agents/sdk@1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3))(zod@4.4.3)': + '@temporalio/strands-agents@1.23.0(@strands-agents/sdk@1.11.0(@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3))(zod@4.4.3)': dependencies: - '@strands-agents/sdk': 1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) + '@strands-agents/sdk': 1.11.0(@a2a-js/sdk@0.3.14(@grpc/grpc-js@1.14.4)(express@5.2.1))(@google/genai@2.19.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) '@temporalio/activity': 1.23.0 '@temporalio/common': 1.23.0 '@temporalio/plugin': 1.23.0 @@ -22556,11 +23583,13 @@ snapshots: '@tootallnate/once@1.1.2': {} + '@tootallnate/once@2.0.1': {} + '@trpc/client@10.45.2(@trpc/server@10.45.2)': dependencies: '@trpc/server': 10.45.2 - '@trpc/next@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@10.45.2)(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@trpc/next@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/react-query@10.45.2(@tanstack/react-query@4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/client@10.45.2(@trpc/server@10.45.2))(@trpc/server@10.45.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@trpc/server@10.45.2)(next@15.1.6(@babel/core@7.26.7)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@tanstack/react-query': 4.36.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@trpc/client': 10.45.2(@trpc/server@10.45.2) @@ -22589,6 +23618,12 @@ snapshots: mkdirp: 1.0.4 path-browserify: 1.0.1 + '@ts-morph/common@0.28.1': + dependencies: + minimatch: 10.0.1 + path-browserify: 1.0.1 + tinyglobby: 0.2.17 + '@tsconfig/node10@1.0.11': {} '@tsconfig/node12@1.0.11': {} @@ -22650,6 +23685,8 @@ snapshots: '@types/node': 22.12.0 '@types/responselike': 1.0.3 + '@types/caseless@0.12.5': {} + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.6 @@ -22696,8 +23733,6 @@ snapshots: '@types/estree@0.0.39': {} - '@types/estree@1.0.6': {} - '@types/estree@1.0.9': {} '@types/express-serve-static-core@4.19.6': @@ -22728,6 +23763,8 @@ snapshots: '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 + '@types/geojson@7946.0.16': {} + '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 @@ -22855,6 +23892,10 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/node@24.13.3': + dependencies: + undici-types: 7.18.2 + '@types/oracledb@6.5.2': dependencies: '@types/node': 22.12.0 @@ -22890,6 +23931,17 @@ snapshots: '@types/prop-types': 15.7.14 csstype: 3.1.3 + '@types/readable-stream@4.0.24': + dependencies: + '@types/node': 22.12.0 + + '@types/request@2.48.13': + dependencies: + '@types/caseless': 0.12.5 + '@types/node': 22.12.0 + '@types/tough-cookie': 4.0.5 + form-data: 2.5.6 + '@types/resolve@1.17.1': dependencies: '@types/node': 22.12.0 @@ -22949,6 +24001,8 @@ snapshots: dependencies: '@types/jest': 29.5.14 + '@types/tough-cookie@4.0.5': {} + '@types/triple-beam@1.3.5': {} '@types/trusted-types@2.0.7': {} @@ -23184,9 +24238,15 @@ snapshots: '@typescript-eslint/types': 8.22.0 eslint-visitor-keys: 4.2.0 - '@ungap/promise-all-settled@1.1.2': {} + '@typespec/ts-http-runtime@0.3.8': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color - '@ungap/structured-clone@1.3.0': {} + '@ungap/promise-all-settled@1.1.2': {} '@ungap/structured-clone@1.3.2': {} @@ -23250,11 +24310,11 @@ snapshots: '@babel/runtime': 7.12.1 web-vitals: 0.2.4 - '@vercel/gatsby-plugin-vercel-builder@1.3.5(@swc/core@1.10.11(@swc/helpers@0.5.15))': + '@vercel/gatsby-plugin-vercel-builder@1.3.5(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13)': dependencies: '@sinclair/typebox': 0.25.24 '@vercel/build-utils': 6.7.3 - '@vercel/node': 2.14.3(@swc/core@1.10.11(@swc/helpers@0.5.15)) + '@vercel/node': 2.14.3(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13) '@vercel/routing-utils': 2.2.1 esbuild: 0.14.47 etag: 1.8.1 @@ -23272,9 +24332,9 @@ snapshots: '@vercel/next@3.8.5': {} - '@vercel/nft@0.22.5': + '@vercel/nft@0.22.5(encoding@0.1.13)': dependencies: - '@mapbox/node-pre-gyp': 1.0.11 + '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) '@rollup/pluginutils': 4.2.1 acorn: 8.15.0 async-sema: 3.1.1 @@ -23289,7 +24349,7 @@ snapshots: - encoding - supports-color - '@vercel/node@2.14.3(@swc/core@1.10.11(@swc/helpers@0.5.15))': + '@vercel/node@2.14.3(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13)': dependencies: '@edge-runtime/vm': 2.0.0 '@types/node': 14.18.33 @@ -23301,7 +24361,7 @@ snapshots: edge-runtime: 2.1.4 esbuild: 0.14.47 exit-hook: 2.2.1 - node-fetch: 2.6.9 + node-fetch: 2.6.9(encoding@0.1.13) path-to-regexp: 6.2.1 ts-morph: 12.0.0 ts-node: 10.9.1(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@14.18.33)(typescript@4.9.5) @@ -23318,20 +24378,20 @@ snapshots: '@vercel/python@3.1.60': {} - '@vercel/redwood@1.1.15': + '@vercel/redwood@1.1.15(encoding@0.1.13)': dependencies: - '@vercel/nft': 0.22.5 + '@vercel/nft': 0.22.5(encoding@0.1.13) '@vercel/routing-utils': 2.2.1 semver: 6.1.1 transitivePeerDependencies: - encoding - supports-color - '@vercel/remix-builder@1.8.10(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))': + '@vercel/remix-builder@1.8.10(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))': dependencies: - '@remix-run/dev': '@vercel/remix-run-dev@1.16.1(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))' + '@remix-run/dev': '@vercel/remix-run-dev@1.16.1(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))' '@vercel/build-utils': 6.7.3 - '@vercel/nft': 0.22.5 + '@vercel/nft': 0.22.5(encoding@0.1.13) '@vercel/static-config': 2.0.17 path-to-regexp: 6.2.1 semver: 7.3.8 @@ -23354,7 +24414,7 @@ snapshots: - ts-node - utf-8-validate - '@vercel/remix-run-dev@1.16.1(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))': + '@vercel/remix-run-dev@1.16.1(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))': dependencies: '@babel/core': 7.29.7 '@babel/generator': 7.29.7 @@ -23389,7 +24449,7 @@ snapshots: lodash.debounce: 4.0.8 lru-cache: 7.18.3 minimatch: 9.0.9 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) ora: 5.4.1 postcss: 8.5.15 postcss-discard-duplicates: 5.1.0(postcss@8.5.15) @@ -23433,10 +24493,10 @@ snapshots: '@vercel/ruby@1.3.76': {} - '@vercel/static-build@1.3.32(@swc/core@1.10.11(@swc/helpers@0.5.15))': + '@vercel/static-build@1.3.32(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13)': dependencies: '@vercel/gatsby-plugin-vercel-analytics': 1.0.10 - '@vercel/gatsby-plugin-vercel-builder': 1.3.5(@swc/core@1.10.11(@swc/helpers@0.5.15)) + '@vercel/gatsby-plugin-vercel-builder': 1.3.5(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -23561,10 +24621,6 @@ snapshots: dependencies: acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -23577,18 +24633,12 @@ snapshots: acorn-walk@7.2.0: {} - acorn-walk@8.3.4: - dependencies: - acorn: 8.15.0 - acorn-walk@8.3.5: dependencies: acorn: 8.16.0 acorn@7.4.1: {} - acorn@8.14.0: {} - acorn@8.15.0: {} acorn@8.16.0: {} @@ -23600,6 +24650,8 @@ snapshots: loader-utils: 2.0.4 regex-parser: 2.3.0 + adm-zip@0.5.18: {} + agent-base@6.0.2: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -23714,6 +24766,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + anynum@1.0.1: {} + append-field@1.0.0: {} append-transform@2.0.0: @@ -23729,6 +24783,12 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + optional: true + arg@4.1.3: {} arg@5.0.2: {} @@ -23830,6 +24890,8 @@ snapshots: get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 + arrify@2.0.1: {} + asap@2.0.6: {} ast-types-flow@0.0.8: {} @@ -23854,6 +24916,10 @@ snapshots: dependencies: tslib: 2.8.1 + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + async-sema@3.1.1: {} async@3.2.6: {} @@ -23876,6 +24942,8 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + aws-ssl-profiles@1.1.2: {} + axe-core@4.10.2: {} axios@0.28.0: @@ -23951,6 +25019,20 @@ snapshots: transitivePeerDependencies: - supports-color + babel-jest@28.1.3(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@jest/transform': 28.1.3 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 28.1.3(@babel/core@7.29.7) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + optional: true + babel-jest@29.7.0(@babel/core@7.26.7): dependencies: '@babel/core': 7.26.7 @@ -23999,7 +25081,7 @@ snapshots: babel-plugin-jest-hoist@27.5.1: dependencies: - '@babel/template': 7.25.9 + '@babel/template': 7.29.7 '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -24037,15 +25119,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.29.7): - dependencies: - '@babel/compat-data': 7.26.5 - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.29.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 @@ -24063,14 +25136,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.29.7) - core-js-compat: 3.40.0 - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.7): dependencies: '@babel/core': 7.29.7 @@ -24086,13 +25151,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color - babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7): dependencies: '@babel/core': 7.29.7 @@ -24158,6 +25216,13 @@ snapshots: babel-plugin-jest-hoist: 28.1.3 babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + babel-preset-jest@28.1.3(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + babel-plugin-jest-hoist: 28.1.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.29.7) + optional: true + babel-preset-jest@29.6.3(@babel/core@7.26.7): dependencies: '@babel/core': 7.26.7 @@ -24258,6 +25323,13 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bl@6.1.6: + dependencies: + '@types/readable-stream': 4.0.24 + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 4.7.0 + bluebird@3.7.2: {} body-parser@1.20.3: @@ -24277,6 +25349,23 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@1.20.6: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.15.3 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + body-parser@2.2.1: dependencies: bytes: 3.1.2 @@ -24348,6 +25437,8 @@ snapshots: dependencies: node-int64: 0.4.0 + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -24355,8 +25446,17 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + builtin-modules@3.3.0: {} + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -24614,6 +25714,8 @@ snapshots: code-block-writer@10.1.1: {} + code-block-writer@13.0.3: {} + collect-v8-coverage@1.0.2: {} color-convert@1.9.3: @@ -24624,15 +25726,25 @@ snapshots: dependencies: color-name: 1.1.4 + color-convert@3.1.3: + dependencies: + color-name: 2.1.1 + color-name@1.1.3: {} color-name@1.1.4: {} + color-name@2.1.1: {} + color-string@1.9.1: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + color-string@2.1.4: + dependencies: + color-name: 2.1.1 + color-support@1.1.3: {} color@3.2.1: @@ -24645,8 +25757,15 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 + color@5.0.3: + dependencies: + color-convert: 3.1.3 + color-string: 2.1.4 + colord@2.9.3: {} + colorette@2.0.19: {} + colorette@2.0.20: {} colorspace@1.1.4: @@ -24660,6 +25779,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@10.0.1: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -24850,9 +25971,9 @@ snapshots: css-color-names@0.0.4: {} - css-declaration-sorter@6.4.1(postcss@8.5.1): + css-declaration-sorter@6.4.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 css-has-pseudo@3.0.4(postcss@8.5.1): dependencies: @@ -24861,12 +25982,12 @@ snapshots: css-loader@6.11.0(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: - icss-utils: 5.1.0(postcss@8.5.1) - postcss: 8.5.1 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.1) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.1) - postcss-modules-scope: 3.2.1(postcss@8.5.1) - postcss-modules-values: 4.0.0(postcss@8.5.1) + icss-utils: 5.1.0(postcss@8.5.15) + postcss: 8.5.15 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.15) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.15) + postcss-modules-scope: 3.2.1(postcss@8.5.15) + postcss-modules-values: 4.0.0(postcss@8.5.15) postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: @@ -24874,10 +25995,10 @@ snapshots: css-minimizer-webpack-plugin@3.4.1(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: - cssnano: 5.1.15(postcss@8.5.1) + cssnano: 5.1.15(postcss@8.5.15) jest-worker: 27.5.1 - postcss: 8.5.1 - schema-utils: 4.3.0 + postcss: 8.5.15 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 source-map: 0.6.1 webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) @@ -24898,7 +26019,7 @@ snapshots: css-select@4.3.0: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 4.3.1 domutils: 2.8.0 nth-check: 2.1.1 @@ -24917,8 +26038,6 @@ snapshots: css-what@3.4.2: {} - css-what@6.1.0: {} - css-what@6.2.2: {} css.escape@1.5.1: {} @@ -24927,48 +26046,48 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@5.2.14(postcss@8.5.1): + cssnano-preset-default@5.2.14(postcss@8.5.15): dependencies: - css-declaration-sorter: 6.4.1(postcss@8.5.1) - cssnano-utils: 3.1.0(postcss@8.5.1) - postcss: 8.5.1 - postcss-calc: 8.2.4(postcss@8.5.1) - postcss-colormin: 5.3.1(postcss@8.5.1) - postcss-convert-values: 5.1.3(postcss@8.5.1) - postcss-discard-comments: 5.1.2(postcss@8.5.1) - postcss-discard-duplicates: 5.1.0(postcss@8.5.1) - postcss-discard-empty: 5.1.1(postcss@8.5.1) - postcss-discard-overridden: 5.1.0(postcss@8.5.1) - postcss-merge-longhand: 5.1.7(postcss@8.5.1) - postcss-merge-rules: 5.1.4(postcss@8.5.1) - postcss-minify-font-values: 5.1.0(postcss@8.5.1) - postcss-minify-gradients: 5.1.1(postcss@8.5.1) - postcss-minify-params: 5.1.4(postcss@8.5.1) - postcss-minify-selectors: 5.2.1(postcss@8.5.1) - postcss-normalize-charset: 5.1.0(postcss@8.5.1) - postcss-normalize-display-values: 5.1.0(postcss@8.5.1) - postcss-normalize-positions: 5.1.1(postcss@8.5.1) - postcss-normalize-repeat-style: 5.1.1(postcss@8.5.1) - postcss-normalize-string: 5.1.0(postcss@8.5.1) - postcss-normalize-timing-functions: 5.1.0(postcss@8.5.1) - postcss-normalize-unicode: 5.1.1(postcss@8.5.1) - postcss-normalize-url: 5.1.0(postcss@8.5.1) - postcss-normalize-whitespace: 5.1.1(postcss@8.5.1) - postcss-ordered-values: 5.1.3(postcss@8.5.1) - postcss-reduce-initial: 5.1.2(postcss@8.5.1) - postcss-reduce-transforms: 5.1.0(postcss@8.5.1) - postcss-svgo: 5.1.0(postcss@8.5.1) - postcss-unique-selectors: 5.1.1(postcss@8.5.1) - - cssnano-utils@3.1.0(postcss@8.5.1): + css-declaration-sorter: 6.4.1(postcss@8.5.15) + cssnano-utils: 3.1.0(postcss@8.5.15) + postcss: 8.5.15 + postcss-calc: 8.2.4(postcss@8.5.15) + postcss-colormin: 5.3.1(postcss@8.5.15) + postcss-convert-values: 5.1.3(postcss@8.5.15) + postcss-discard-comments: 5.1.2(postcss@8.5.15) + postcss-discard-duplicates: 5.1.0(postcss@8.5.15) + postcss-discard-empty: 5.1.1(postcss@8.5.15) + postcss-discard-overridden: 5.1.0(postcss@8.5.15) + postcss-merge-longhand: 5.1.7(postcss@8.5.15) + postcss-merge-rules: 5.1.4(postcss@8.5.15) + postcss-minify-font-values: 5.1.0(postcss@8.5.15) + postcss-minify-gradients: 5.1.1(postcss@8.5.15) + postcss-minify-params: 5.1.4(postcss@8.5.15) + postcss-minify-selectors: 5.2.1(postcss@8.5.15) + postcss-normalize-charset: 5.1.0(postcss@8.5.15) + postcss-normalize-display-values: 5.1.0(postcss@8.5.15) + postcss-normalize-positions: 5.1.1(postcss@8.5.15) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.15) + postcss-normalize-string: 5.1.0(postcss@8.5.15) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.15) + postcss-normalize-unicode: 5.1.1(postcss@8.5.15) + postcss-normalize-url: 5.1.0(postcss@8.5.15) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.15) + postcss-ordered-values: 5.1.3(postcss@8.5.15) + postcss-reduce-initial: 5.1.2(postcss@8.5.15) + postcss-reduce-transforms: 5.1.0(postcss@8.5.15) + postcss-svgo: 5.1.0(postcss@8.5.15) + postcss-unique-selectors: 5.1.1(postcss@8.5.15) + + cssnano-utils@3.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 - cssnano@5.1.15(postcss@8.5.1): + cssnano@5.1.15(postcss@8.5.15): dependencies: - cssnano-preset-default: 5.2.14(postcss@8.5.1) + cssnano-preset-default: 5.2.14(postcss@8.5.15) lilconfig: 2.1.0 - postcss: 8.5.1 + postcss: 8.5.15 yaml: 1.10.2 csso@4.2.0: @@ -25019,6 +26138,8 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 + dataloader@2.2.3: {} + date-fns@2.30.0: dependencies: '@babel/runtime': 7.26.7 @@ -25120,6 +26241,13 @@ snapshots: deepmerge@4.3.1: {} + default-browser-id@5.0.1: {} + + default-browser@5.5.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + default-gateway@6.0.3: dependencies: execa: 5.1.1 @@ -25142,6 +26270,8 @@ snapshots: define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -25163,6 +26293,8 @@ snapshots: denque@1.5.1: {} + denque@2.1.0: {} + depd@1.1.2: {} depd@2.0.0: {} @@ -25304,6 +26436,8 @@ snapshots: dotenv@16.6.1: {} + dotenv@17.3.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 @@ -25319,8 +26453,19 @@ snapshots: readable-stream: 2.3.8 stream-shift: 1.0.3 + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.3 + eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + edge-runtime@2.1.4: dependencies: '@edge-runtime/format': 2.0.1 @@ -25365,6 +26510,11 @@ snapshots: encodeurl@2.0.0: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -25391,6 +26541,12 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: + optional: true + + err-code@2.0.3: + optional: true + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -25423,7 +26579,7 @@ snapshots: has-property-descriptors: 1.0.2 has-proto: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 internal-slot: 1.1.0 is-array-buffer: 3.0.5 is-callable: 1.2.7 @@ -25505,11 +26661,11 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.7 has-tostringtag: 1.0.2 - hasown: 2.0.2 + hasown: 2.0.4 es-shim-unscopables@1.0.2: dependencies: - hasown: 2.0.2 + hasown: 2.0.4 es-to-primitive@1.3.0: dependencies: @@ -25740,7 +26896,7 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)))(typescript@5.7.3): dependencies: '@babel/core': 7.26.7 '@babel/eslint-parser': 7.26.5(@babel/core@7.26.7)(eslint@8.57.1) @@ -25752,7 +26908,7 @@ snapshots: eslint: 8.57.1 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)))(typescript@5.7.3) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.31.8(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) @@ -25888,13 +27044,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)))(typescript@5.7.3): dependencies: '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) eslint: 8.57.1 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) transitivePeerDependencies: - supports-color - typescript @@ -26009,7 +27165,7 @@ snapshots: jest-worker: 28.1.3 micromatch: 4.0.8 normalize-path: 3.0.0 - schema-utils: 4.3.0 + schema-utils: 4.3.3 webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) eslint@8.57.1: @@ -26021,7 +27177,7 @@ snapshots: '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.3.2 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -26043,7 +27199,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 + js-yaml: 4.2.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -26055,10 +27211,12 @@ snapshots: transitivePeerDependencies: - supports-color + esm@3.2.25: {} + espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 esprima@1.2.2: {} @@ -26247,6 +27405,42 @@ snapshots: transitivePeerDependencies: - supports-color + express@4.22.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.6 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.15.3 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + express@5.2.1: dependencies: accepts: 2.0.0 @@ -26326,6 +27520,20 @@ snapshots: fast-uri@3.0.6: {} + fast-xml-builder@1.3.1: + dependencies: + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 + + fast-xml-parser@5.11.1: + dependencies: + '@nodable/entities': 3.0.0 + fast-xml-builder: 1.3.1 + is-unsafe: 2.0.2 + path-expression-matcher: 1.6.2 + strnum: 2.4.2 + xml-naming: 0.3.0 + fastq@1.18.0: dependencies: reusify: 1.0.4 @@ -26346,6 +27554,10 @@ snapshots: dependencies: bser: 2.1.1 + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + fecha@4.2.3: {} fetch-blob@3.2.0: @@ -26497,12 +27709,21 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.6.3 - tapable: 2.2.1 + tapable: 2.3.3 typescript: 5.7.2 webpack: 5.97.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) form-data-encoder@1.7.2: {} + form-data@2.5.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + safe-buffer: 5.2.1 + form-data@3.0.2: dependencies: asynckit: 0.4.0 @@ -26559,6 +27780,12 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@11.3.3: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 @@ -26596,7 +27823,7 @@ snapshots: call-bound: 1.0.3 define-properties: 1.2.1 functions-have-names: 1.2.3 - hasown: 2.0.2 + hasown: 2.0.4 is-callable: 1.2.7 functions-have-names@1.2.3: {} @@ -26613,6 +27840,29 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 + gauge@4.0.4: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + 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 + gaxios@7.1.3: dependencies: extend: 3.0.2 @@ -26622,6 +27872,31 @@ snapshots: transitivePeerDependencies: - supports-color + gaxios@7.3.1: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + + gcp-metadata@6.1.1(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + google-logging-utils: 0.0.2 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.3.1 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + gcp-metadata@8.1.3: dependencies: gaxios: 7.1.3 @@ -26630,6 +27905,18 @@ snapshots: transitivePeerDependencies: - supports-color + gcp-metadata@9.0.3: + dependencies: + gaxios: 7.1.3 + google-logging-utils: 2.0.1 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + generic-names@4.0.0: dependencies: loader-utils: 3.3.1 @@ -26648,7 +27935,7 @@ snapshots: get-proto: 1.0.1 gopd: 1.2.0 has-symbols: 1.1.0 - hasown: 2.0.2 + hasown: 2.0.4 math-intrinsics: 1.1.0 get-own-enumerable-property-symbols@3.0.2: {} @@ -26689,6 +27976,8 @@ snapshots: transitivePeerDependencies: - supports-color + getopts@2.3.0: {} + git-hooks-list@1.0.3: {} github-from-package@0.0.0: {} @@ -26797,8 +28086,55 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + google-auth-library@10.9.1: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.3.1 + gcp-metadata: 8.1.2 + google-logging-utils: 1.1.3 + jws: 4.0.1 + transitivePeerDependencies: + - supports-color + + google-auth-library@9.15.1(encoding@0.1.13): + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.7.1(encoding@0.1.13) + gcp-metadata: 6.1.1(encoding@0.1.13) + gtoken: 7.1.0(encoding@0.1.13) + jws: 4.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + google-logging-utils@0.0.2: {} + google-logging-utils@1.1.3: {} + google-logging-utils@2.0.1: {} + + googleapis-common@7.2.0(encoding@0.1.13): + dependencies: + extend: 3.0.2 + gaxios: 6.7.1(encoding@0.1.13) + google-auth-library: 9.15.1(encoding@0.1.13) + qs: 6.14.0 + url-template: 2.0.8 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + googleapis@137.1.0(encoding@0.1.13): + dependencies: + google-auth-library: 9.15.1(encoding@0.1.13) + googleapis-common: 7.2.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + gopd@1.2.0: {} got@11.8.6: @@ -26821,6 +28157,14 @@ snapshots: growl@1.10.5: {} + gtoken@7.1.0(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + jws: 4.0.1 + transitivePeerDependencies: + - encoding + - supports-color + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 @@ -26948,9 +28292,9 @@ snapshots: dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 - lodash: 4.17.21 + lodash: 4.18.1 pretty-error: 4.0.0 - tapable: 2.2.1 + tapable: 2.3.3 optionalDependencies: webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) @@ -27005,6 +28349,21 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.1 + agent-base: 6.0.2 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + http-proxy-middleware@2.0.7(@types/express@4.17.13): dependencies: '@types/http-proxy': 1.17.15 @@ -27070,10 +28429,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.1): - dependencies: - postcss: 8.5.1 - icss-utils@5.1.0(postcss@8.5.15): dependencies: postcss: 8.5.15 @@ -27137,7 +28492,7 @@ snapshots: cli-width: 3.0.0 external-editor: 3.1.0 figures: 3.2.0 - lodash: 4.17.21 + lodash: 4.18.1 mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 @@ -27176,7 +28531,7 @@ snapshots: cli-width: 4.1.0 external-editor: 3.1.0 figures: 3.2.0 - lodash: 4.17.21 + lodash: 4.18.1 mute-stream: 1.0.0 ora: 5.4.1 run-async: 3.0.0 @@ -27190,9 +28545,11 @@ snapshots: internal-slot@1.1.0: dependencies: es-errors: 1.3.0 - hasown: 2.0.2 + hasown: 2.0.4 side-channel: 1.1.0 + interpret@2.2.0: {} + ioredis@4.28.5: dependencies: cluster-key-slot: 1.1.2 @@ -27311,6 +28668,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -27340,8 +28699,15 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-interactive@1.0.0: {} + is-lambda@1.0.1: + optional: true + is-map@2.0.3: {} is-module@1.0.0: {} @@ -27367,6 +28733,8 @@ snapshots: is-promise@4.0.0: {} + is-property@1.0.2: {} + is-reference@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -27409,6 +28777,8 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unsafe@2.0.2: {} + is-weakmap@2.0.2: {} is-weakref@1.1.0: @@ -27426,6 +28796,10 @@ snapshots: dependencies: is-docker: 2.2.1 + is-wsl@3.1.1: + dependencies: + is-inside-container: 1.0.0 + isarray@0.0.1: {} isarray@1.0.0: {} @@ -27442,7 +28816,7 @@ snapshots: istanbul-lib-instrument@4.0.3: dependencies: - '@babel/core': 7.26.7 + '@babel/core': 7.29.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -27618,16 +28992,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)): + jest-cli@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.2.0 - jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + jest-config: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -27677,7 +29051,7 @@ snapshots: - supports-color - ts-node - jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)): + jest-config@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)): dependencies: '@babel/core': 7.29.7 '@jest/test-sequencer': 27.5.1 @@ -27704,7 +29078,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - ts-node: 10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3) + ts-node: 10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3) transitivePeerDependencies: - bufferutil - canvas @@ -28085,7 +29459,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) jest-util: 27.5.1 jest-validate: 27.5.1 - resolve: 1.22.10 + resolve: 1.22.12 resolve.exports: 1.1.1 slash: 3.0.0 @@ -28097,7 +29471,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@28.1.3) jest-util: 28.1.3 jest-validate: 28.1.3 - resolve: 1.22.10 + resolve: 1.22.12 resolve.exports: 1.1.1 slash: 3.0.0 @@ -28109,7 +29483,7 @@ snapshots: jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.10 + resolve: 1.22.12 resolve.exports: 2.0.3 slash: 3.0.0 @@ -28283,9 +29657,9 @@ snapshots: jest-snapshot@27.5.1: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.26.5 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.29.7) - '@babel/traverse': 7.26.7 + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 '@babel/types': 7.29.7 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 @@ -28309,17 +29683,17 @@ snapshots: jest-snapshot@28.1.3: dependencies: - '@babel/core': 7.26.7 - '@babel/generator': 7.26.5 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 '@jest/expect-utils': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 '@types/babel__traverse': 7.20.6 '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.29.7) chalk: 4.1.2 expect: 28.1.3 graceful-fs: 4.2.11 @@ -28337,15 +29711,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.26.7 - '@babel/generator': 7.26.5 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.7) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7) - '@babel/types': 7.26.7 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/types': 7.29.7 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.7) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.29.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -28414,11 +29788,11 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))): + jest-watch-typeahead@1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -28482,11 +29856,11 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)): + jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)): dependencies: - '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + '@jest/core': 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) import-local: 3.2.0 - jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + jest-cli: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) transitivePeerDependencies: - bufferutil - canvas @@ -28521,6 +29895,8 @@ snapshots: jose@6.1.3: {} + js-md4@0.3.2: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -28614,6 +29990,8 @@ snapshots: - supports-color - utf-8-validate + jsep@1.4.0: {} + jsesc@3.0.2: {} jsesc@3.1.0: {} @@ -28663,6 +30041,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonpath-plus@10.4.0: + dependencies: + '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) + '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) + jsep: 1.4.0 + jsonpath@1.1.1: dependencies: esprima: 1.2.2 @@ -28671,6 +30055,19 @@ snapshots: jsonpointer@5.0.1: {} + jsonwebtoken@9.0.3: + dependencies: + jws: 4.0.1 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.6.3 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -28680,6 +30077,17 @@ snapshots: just-extend@6.2.0: {} + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.1: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -28696,6 +30104,72 @@ snapshots: klona@2.0.6: {} + knex@3.2.10(mysql2@3.20.0(@types/node@22.12.0))(pg@8.20.0): + dependencies: + colorette: 2.0.19 + commander: 10.0.1 + debug: 4.3.4(supports-color@8.1.1) + escalade: 3.2.0 + esm: 3.2.25 + get-package-type: 0.1.0 + getopts: 2.3.0 + interpret: 2.2.0 + lodash: 4.18.1 + pg-connection-string: 2.6.2 + rechoir: 0.8.0 + resolve-from: 5.0.0 + tarn: 3.1.2 + tildify: 2.0.0 + optionalDependencies: + mysql2: 3.20.0(@types/node@22.12.0) + pg: 8.20.0 + transitivePeerDependencies: + - supports-color + + knex@3.2.10(pg@8.20.0)(sqlite3@5.1.7): + dependencies: + colorette: 2.0.19 + commander: 10.0.1 + debug: 4.3.4(supports-color@8.1.1) + escalade: 3.2.0 + esm: 3.2.25 + get-package-type: 0.1.0 + getopts: 2.3.0 + interpret: 2.2.0 + lodash: 4.18.1 + pg-connection-string: 2.6.2 + rechoir: 0.8.0 + resolve-from: 5.0.0 + tarn: 3.1.2 + tildify: 2.0.0 + optionalDependencies: + pg: 8.20.0 + sqlite3: 5.1.7 + transitivePeerDependencies: + - supports-color + + knex@3.2.10(pg@8.20.0)(tedious@19.2.1): + dependencies: + colorette: 2.0.19 + commander: 10.0.1 + debug: 4.3.4(supports-color@8.1.1) + escalade: 3.2.0 + esm: 3.2.25 + get-package-type: 0.1.0 + getopts: 2.3.0 + interpret: 2.2.0 + lodash: 4.18.1 + pg-connection-string: 2.6.2 + rechoir: 0.8.0 + resolve-from: 5.0.0 + tarn: 3.1.2 + tildify: 2.0.0 + optionalDependencies: + pg: 8.20.0 + tedious: 19.2.1 + transitivePeerDependencies: + - supports-color + kuler@2.0.0: {} langsmith@0.7.17(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.220.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(ws@8.18.0): @@ -28752,8 +30226,6 @@ snapshots: pify: 3.0.0 strip-bom: 3.0.0 - loader-runner@4.3.0: {} - loader-runner@4.3.2: {} loader-utils@2.0.4: @@ -28777,6 +30249,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash-es@4.18.1: {} + lodash.camelcase@4.3.0: {} lodash.debounce@4.0.8: {} @@ -28789,12 +30263,26 @@ snapshots: lodash.get@4.4.2: {} + lodash.includes@4.3.0: {} + lodash.isarguments@3.1.0: {} + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} + lodash.once@4.1.1: {} + lodash.sortby@4.7.0: {} lodash.topath@4.5.2: {} @@ -28855,6 +30343,8 @@ snapshots: lru-cache@7.18.3: {} + lru.min@1.1.4: {} + lz-string@1.5.0: {} magic-string@0.25.9: @@ -28863,7 +30353,7 @@ snapshots: magic-string@0.30.8: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 make-dir@3.1.0: dependencies: @@ -28875,10 +30365,41 @@ snapshots: make-error@1.3.6: {} + make-fetch-happen@9.1.0: + dependencies: + agentkeepalive: 4.6.0 + cacache: 15.3.0 + http-cache-semantics: 4.2.0 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.7 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + makeerror@1.0.12: dependencies: tmpl: 1.0.5 + mariadb@3.4.5: + dependencies: + '@types/geojson': 7946.0.16 + '@types/node': 24.13.3 + denque: 2.1.0 + iconv-lite: 0.6.3 + lru-cache: 10.4.3 + markdown-extensions@1.1.1: {} markdown-it-anchor@8.6.7(@types/markdown-it@12.2.3)(markdown-it@12.3.2): @@ -29396,6 +30917,8 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mikro-orm@6.6.16: {} + mime-db@1.52.0: {} mime-db@1.54.0: {} @@ -29412,6 +30935,8 @@ snapshots: mime@2.6.0: {} + mime@3.0.0: {} + mimic-fn@2.1.0: {} mimic-response@1.0.1: {} @@ -29422,8 +30947,8 @@ snapshots: mini-css-extract-plugin@2.9.2(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: - schema-utils: 4.3.0 - tapable: 2.2.1 + schema-utils: 4.3.3 + tapable: 2.3.3 webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) mini-svg-data-uri@1.4.4: {} @@ -29499,6 +31024,15 @@ snapshots: dependencies: minipass: 3.3.6 + minipass-fetch@1.4.1: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + optional: true + minipass-flush@1.0.7: dependencies: minipass: 3.3.6 @@ -29507,6 +31041,11 @@ snapshots: dependencies: minipass: 3.3.6 + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + optional: true + minipass@3.3.6: dependencies: yallist: 4.0.0 @@ -29651,12 +31190,28 @@ snapshots: mute-stream@1.0.0: {} + mysql2@3.20.0(@types/node@22.12.0): + dependencies: + '@types/node': 22.12.0 + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.7.2 + long: 5.3.2 + lru.min: 1.1.4 + named-placeholders: 1.1.6 + sql-escaper: 1.5.1 + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + named-placeholders@1.1.6: + dependencies: + lru.min: 1.1.4 + nanoid@3.1.20: {} nanoid@3.3.12: {} @@ -29667,6 +31222,8 @@ snapshots: napi-build-utils@2.0.0: {} + native-duplexpair@1.0.0: {} + natural-compare-lite@1.4.0: {} natural-compare@1.4.0: {} @@ -29760,19 +31317,25 @@ snapshots: node-addon-api@6.1.0: {} + node-addon-api@7.1.1: {} + node-domexception@1.0.0: {} node-emoji@1.11.0: dependencies: - lodash: 4.17.21 + lodash: 4.18.1 - node-fetch@2.6.9: + node-fetch@2.6.9(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -29784,6 +31347,23 @@ snapshots: node-gyp-build@4.8.4: {} + node-gyp@8.4.1: + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + node-int64@0.4.0: {} node-preload@0.2.1: @@ -29847,6 +31427,14 @@ snapshots: gauge: 3.0.2 set-blocking: 2.0.0 + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + optional: true + nth-check@1.0.2: dependencies: boolbase: 1.0.0 @@ -29897,6 +31485,8 @@ snapshots: object-inspect@1.13.3: {} + object-inspect@1.13.4: {} + object-is@1.1.6: dependencies: call-bind: 1.0.8 @@ -29975,13 +31565,20 @@ snapshots: dependencies: mimic-fn: 2.1.0 + open@10.2.0: + dependencies: + default-browser: 5.5.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.104.0(ws@8.18.0)(zod@3.24.1): + openai@4.104.0(encoding@0.1.13)(ws@8.18.0)(zod@3.24.1): dependencies: '@types/node': 18.19.130 '@types/node-fetch': 2.6.12 @@ -29989,7 +31586,7 @@ snapshots: agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: ws: 8.18.0 zod: 3.24.1 @@ -30181,6 +31778,8 @@ snapshots: path-exists@4.0.0: {} + path-expression-matcher@1.6.2: {} + path-is-absolute@1.0.1: {} path-key@2.0.1: {} @@ -30237,8 +31836,21 @@ snapshots: estree-walker: 3.0.3 is-reference: 3.0.3 + pg-cloudflare@1.4.0: + optional: true + + pg-connection-string@2.14.0: {} + + pg-connection-string@2.6.2: {} + pg-int8@1.0.1: {} + pg-pool@3.14.0(pg@8.20.0): + dependencies: + pg: 8.20.0 + + pg-protocol@1.16.0: {} + pg-protocol@1.7.0: {} pg-types@2.2.0: @@ -30249,6 +31861,20 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 + pg@8.20.0: + dependencies: + pg-connection-string: 2.14.0 + pg-pool: 3.14.0(pg@8.20.0) + pg-protocol: 1.16.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.4.0 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + picocolors@0.2.1: {} picocolors@1.0.0: {} @@ -30259,6 +31885,8 @@ snapshots: picomatch@4.0.1: {} + picomatch@4.0.7: {} + pidtree@0.3.1: {} pify@2.3.0: {} @@ -30299,9 +31927,9 @@ snapshots: browserslist: 4.24.4 postcss: 8.5.1 - postcss-calc@8.2.4(postcss@8.5.1): + postcss-calc@8.2.4(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 @@ -30325,18 +31953,18 @@ snapshots: postcss: 8.5.1 postcss-value-parser: 4.2.0 - postcss-colormin@5.3.1(postcss@8.5.1): + postcss-colormin@5.3.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-convert-values@5.1.3(postcss@8.5.1): + postcss-convert-values@5.1.3(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 postcss-custom-media@8.0.2(postcss@8.5.1): @@ -30359,25 +31987,21 @@ snapshots: postcss: 8.5.1 postcss-selector-parser: 6.1.2 - postcss-discard-comments@5.1.2(postcss@8.5.1): - dependencies: - postcss: 8.5.1 - - postcss-discard-duplicates@5.1.0(postcss@8.5.1): + postcss-discard-comments@5.1.2(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-discard-duplicates@5.1.0(postcss@8.5.15): dependencies: postcss: 8.5.15 - postcss-discard-empty@5.1.1(postcss@8.5.1): + postcss-discard-empty@5.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 - postcss-discard-overridden@5.1.0(postcss@8.5.1): + postcss-discard-overridden@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-double-position-gradients@3.1.2(postcss@8.5.1): dependencies: @@ -30422,7 +32046,7 @@ snapshots: postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.12 postcss-initial@4.0.1(postcss@8.5.1): dependencies: @@ -30431,7 +32055,7 @@ snapshots: postcss-js@3.0.3: dependencies: camelcase-css: 2.0.1 - postcss: 8.5.1 + postcss: 8.5.15 postcss-js@4.0.1(postcss@8.5.1): dependencies: @@ -30460,6 +32084,14 @@ snapshots: postcss: 8.5.1 ts-node: 10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3) + postcss-load-config@4.0.2(postcss@8.5.1)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.5.1 + ts-node: 10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3) + postcss-load-config@4.0.2(postcss@8.5.15)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)): dependencies: lilconfig: 3.1.3 @@ -30484,59 +32116,48 @@ snapshots: dependencies: postcss: 8.5.1 - postcss-merge-longhand@5.1.7(postcss@8.5.1): + postcss-merge-longhand@5.1.7(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.5.1) + stylehacks: 5.1.1(postcss@8.5.15) - postcss-merge-rules@5.1.4(postcss@8.5.1): + postcss-merge-rules@5.1.4(postcss@8.5.15): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 3.1.0(postcss@8.5.15) + postcss: 8.5.15 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@5.1.0(postcss@8.5.1): + postcss-minify-font-values@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-gradients@5.1.1(postcss@8.5.1): + postcss-minify-gradients@5.1.1(postcss@8.5.15): dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 3.1.0(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-params@5.1.4(postcss@8.5.1): + postcss-minify-params@5.1.4(postcss@8.5.15): dependencies: browserslist: 4.28.2 - cssnano-utils: 3.1.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 3.1.0(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-minify-selectors@5.2.1(postcss@8.5.1): + postcss-minify-selectors@5.2.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.5.1): - dependencies: - postcss: 8.5.1 - postcss-modules-extract-imports@3.1.0(postcss@8.5.15): dependencies: postcss: 8.5.15 - postcss-modules-local-by-default@4.2.0(postcss@8.5.1): - dependencies: - icss-utils: 5.1.0(postcss@8.5.1) - postcss: 8.5.1 - postcss-selector-parser: 7.0.0 - postcss-value-parser: 4.2.0 - postcss-modules-local-by-default@4.2.0(postcss@8.5.15): dependencies: icss-utils: 5.1.0(postcss@8.5.15) @@ -30544,21 +32165,11 @@ snapshots: postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.1): - dependencies: - postcss: 8.5.1 - postcss-selector-parser: 7.0.0 - postcss-modules-scope@3.2.1(postcss@8.5.15): dependencies: postcss: 8.5.15 postcss-selector-parser: 7.0.0 - postcss-modules-values@4.0.0(postcss@8.5.1): - dependencies: - icss-utils: 5.1.0(postcss@8.5.1) - postcss: 8.5.1 - postcss-modules-values@4.0.0(postcss@8.5.15): dependencies: icss-utils: 5.1.0(postcss@8.5.15) @@ -30592,50 +32203,50 @@ snapshots: postcss: 8.5.1 postcss-selector-parser: 6.1.2 - postcss-normalize-charset@5.1.0(postcss@8.5.1): + postcss-normalize-charset@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 - postcss-normalize-display-values@5.1.0(postcss@8.5.1): + postcss-normalize-display-values@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-positions@5.1.1(postcss@8.5.1): + postcss-normalize-positions@5.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@5.1.1(postcss@8.5.1): + postcss-normalize-repeat-style@5.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-string@5.1.0(postcss@8.5.1): + postcss-normalize-string@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@5.1.0(postcss@8.5.1): + postcss-normalize-timing-functions@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@5.1.1(postcss@8.5.1): + postcss-normalize-unicode@5.1.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-url@5.1.0(postcss@8.5.1): + postcss-normalize-url@5.1.0(postcss@8.5.15): dependencies: normalize-url: 6.1.0 - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@5.1.1(postcss@8.5.1): + postcss-normalize-whitespace@5.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 postcss-normalize@10.0.1(browserslist@4.24.4)(postcss@8.5.1): @@ -30650,10 +32261,10 @@ snapshots: dependencies: postcss: 8.5.1 - postcss-ordered-values@5.1.3(postcss@8.5.1): + postcss-ordered-values@5.1.3(postcss@8.5.15): dependencies: - cssnano-utils: 3.1.0(postcss@8.5.1) - postcss: 8.5.1 + cssnano-utils: 3.1.0(postcss@8.5.15) + postcss: 8.5.15 postcss-value-parser: 4.2.0 postcss-overflow-shorthand@3.0.4(postcss@8.5.1): @@ -30687,7 +32298,7 @@ snapshots: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.5.1) '@csstools/postcss-unset-value': 1.0.2(postcss@8.5.1) autoprefixer: 10.4.20(postcss@8.5.1) - browserslist: 4.24.4 + browserslist: 4.28.2 css-blank-pseudo: 3.0.3(postcss@8.5.1) css-has-pseudo: 3.0.4(postcss@8.5.1) css-prefers-color-scheme: 6.0.3(postcss@8.5.1) @@ -30728,15 +32339,15 @@ snapshots: postcss: 8.5.1 postcss-selector-parser: 6.1.2 - postcss-reduce-initial@5.1.2(postcss@8.5.1): + postcss-reduce-initial@5.1.2(postcss@8.5.15): dependencies: browserslist: 4.28.2 caniuse-api: 3.0.0 - postcss: 8.5.1 + postcss: 8.5.15 - postcss-reduce-transforms@5.1.0(postcss@8.5.1): + postcss-reduce-transforms@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 postcss-replace-overflow-wrap@4.0.0(postcss@8.5.1): @@ -30758,15 +32369,15 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@5.1.0(postcss@8.5.1): + postcss-svgo@5.1.0(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-value-parser: 4.2.0 svgo: 2.8.0 - postcss-unique-selectors@5.1.1(postcss@8.5.1): + postcss-unique-selectors@5.1.1(postcss@8.5.15): dependencies: - postcss: 8.5.1 + postcss: 8.5.15 postcss-selector-parser: 6.1.2 postcss-value-parser@3.3.1: {} @@ -30798,14 +32409,20 @@ snapshots: postgres-array@2.0.0: {} + postgres-array@3.0.4: {} + postgres-bytea@1.0.0: {} postgres-date@1.0.7: {} + postgres-date@2.1.0: {} + postgres-interval@1.2.0: dependencies: xtend: 4.0.2 + postgres-interval@4.0.2: {} + prebuild-install@7.1.3: dependencies: detect-libc: 2.0.3 @@ -30841,7 +32458,7 @@ snapshots: pretty-error@4.0.0: dependencies: - lodash: 4.17.21 + lodash: 4.18.1 renderkid: 3.0.0 pretty-format@26.6.2: @@ -30882,8 +32499,16 @@ snapshots: dependencies: fromentries: 1.3.2 + process@0.11.10: {} + promise-inflight@1.0.1: {} + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + optional: true + promise@8.3.0: dependencies: asap: 2.0.6 @@ -31005,7 +32630,7 @@ snapshots: dependencies: commander: 8.3.0 glob: 7.2.3 - postcss: 8.5.1 + postcss: 8.5.15 postcss-selector-parser: 6.1.2 q@1.5.1: {} @@ -31022,6 +32647,11 @@ snapshots: dependencies: side-channel: 1.1.0 + qs@6.15.3: + dependencies: + es-define-property: 1.0.1 + side-channel: 1.1.1 + querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -31081,7 +32711,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 address: 1.2.2 - browserslist: 4.24.4 + browserslist: 4.28.2 chalk: 4.1.2 cross-spawn: 7.0.6 detect-port-alt: 1.1.6 @@ -31136,7 +32766,7 @@ snapshots: react-refresh@0.14.2: {} - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/babel__core@7.20.5)(eslint@8.57.1)(react@17.0.2)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))(type-fest@0.21.3)(typescript@5.7.3): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/babel__core@7.20.5)(eslint@8.57.1)(react@17.0.2)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3))(type-fest@0.21.3)(typescript@5.7.3): dependencies: '@babel/core': 7.26.7 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.11.0)(type-fest@0.21.3)(webpack-dev-server@4.15.2(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))))(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) @@ -31154,15 +32784,15 @@ snapshots: dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.1 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.7))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.7))(eslint@8.57.1)(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)))(typescript@5.7.3) eslint-webpack-plugin: 3.2.0(eslint@8.57.1)(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) fs-extra: 10.1.0 html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) identity-obj-proxy: 3.0.0 - jest: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + jest: 27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3))) + jest-watch-typeahead: 1.1.0(jest@27.5.1(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3))) mini-css-extract-plugin: 2.9.2(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) postcss: 8.5.1 postcss-flexbugs-fixes: 5.0.2(postcss@8.5.1) @@ -31180,7 +32810,7 @@ snapshots: semver: 7.6.3 source-map-loader: 3.0.2(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) style-loader: 3.3.4(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) - tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) terser-webpack-plugin: 5.3.11(@swc/core@1.10.11(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) webpack-dev-server: 4.15.2(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) @@ -31271,6 +32901,14 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + readdirp@3.5.0: dependencies: picomatch: 2.3.1 @@ -31288,6 +32926,10 @@ snapshots: source-map: 0.6.1 tslib: 2.8.1 + rechoir@0.8.0: + dependencies: + resolve: 1.22.12 + recursive-readdir@2.2.3: dependencies: minimatch: 3.1.2 @@ -31323,10 +32965,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - regenerate-unicode-properties@10.2.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties@10.2.2: dependencies: regenerate: 1.4.2 @@ -31339,7 +32977,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.7 + '@babel/runtime': 7.29.7 regex-parser@2.3.0: {} @@ -31352,15 +32990,6 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - regexpu-core@6.2.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.0 - regjsgen: 0.8.0 - regjsparser: 0.12.0 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.0 - regexpu-core@6.4.0: dependencies: regenerate: 1.4.2 @@ -31372,10 +33001,6 @@ snapshots: regjsgen@0.8.0: {} - regjsparser@0.12.0: - dependencies: - jsesc: 3.0.2 - regjsparser@0.13.1: dependencies: jsesc: 3.1.0 @@ -31445,7 +33070,7 @@ snapshots: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.21 + lodash: 4.18.1 strip-ansi: 6.0.1 repeat-string@1.6.1: {} @@ -31497,7 +33122,7 @@ snapshots: resolve@1.22.10: dependencies: - is-core-module: 2.16.1 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -31523,6 +33148,18 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry-request@7.0.2(encoding@0.1.13): + dependencies: + '@types/request': 2.48.13 + extend: 3.0.2 + teeny-request: 9.0.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + retry@0.12.0: + optional: true + retry@0.13.1: {} reusify@1.0.4: {} @@ -31592,6 +33229,8 @@ snapshots: transitivePeerDependencies: - supports-color + run-applescript@7.1.0: {} + run-async@2.4.1: {} run-async@3.0.0: {} @@ -31684,13 +33323,6 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.3.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) - schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 @@ -31948,19 +33580,24 @@ snapshots: es-errors: 1.3.0 object-inspect: 1.13.3 + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-map@1.0.1: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: call-bound: 1.0.3 es-errors: 1.3.0 get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-map: 1.0.1 side-channel@1.1.0: @@ -31971,6 +33608,14 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -32024,6 +33669,15 @@ snapshots: transitivePeerDependencies: - supports-color + socks-proxy-agent@6.2.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3(supports-color@8.1.1) + socks: 2.8.9 + transitivePeerDependencies: + - supports-color + optional: true + socks@2.8.9: dependencies: ip-address: 10.2.0 @@ -32133,8 +33787,30 @@ snapshots: transitivePeerDependencies: - supports-color + split2@4.2.0: {} + sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + + sql-escaper@1.5.1: {} + + sqlite3@5.1.7: + dependencies: + bindings: 1.5.0 + node-addon-api: 7.1.1 + prebuild-install: 7.1.3 + tar: 6.2.1 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - supports-color + + sqlstring-sqlite@0.1.1: {} + + sqlstring@2.3.3: {} + ssri@8.0.1: dependencies: minipass: 3.3.6 @@ -32168,6 +33844,10 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + stream-events@1.0.5: + dependencies: + stubs: 3.0.0 + stream-shift@1.0.3: {} streamsearch@1.1.0: {} @@ -32317,6 +33997,12 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.4.2: + dependencies: + anynum: 1.0.1 + + stubs@3.0.0: {} + style-loader@3.3.4(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) @@ -32333,10 +34019,10 @@ snapshots: '@babel/core': 7.26.7 babel-plugin-macros: 3.1.0 - stylehacks@5.1.1(postcss@8.5.1): + stylehacks@5.1.1(postcss@8.5.15): dependencies: browserslist: 4.28.2 - postcss: 8.5.1 + postcss: 8.5.15 postcss-selector-parser: 6.1.2 sucrase@3.35.0: @@ -32513,6 +34199,33 @@ snapshots: transitivePeerDependencies: - ts-node + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.3)) + postcss-nested: 6.2.0(postcss@8.5.1) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + tapable@1.1.3: {} tapable@2.2.1: {} @@ -32566,6 +34279,34 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + tarn@3.1.2: {} + + tedious@19.2.1: + dependencies: + '@azure/core-auth': 1.11.0 + '@azure/identity': 4.13.2 + '@azure/keyvault-keys': 4.10.2 + '@js-joda/core': 5.7.0 + '@types/node': 22.12.0 + bl: 6.1.6 + iconv-lite: 0.7.2 + js-md4: 0.3.2 + native-duplexpair: 1.0.0 + sprintf-js: 1.1.3 + transitivePeerDependencies: + - supports-color + + teeny-request@9.0.0(encoding@0.1.13): + dependencies: + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + stream-events: 1.0.5 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + temp-dir@2.0.0: {} tempy@0.6.0: @@ -32582,9 +34323,9 @@ snapshots: terser-webpack-plugin@5.3.11(@swc/core@1.10.11(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) @@ -32593,9 +34334,9 @@ snapshots: terser-webpack-plugin@5.3.11(@swc/core@1.10.11(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.97.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) @@ -32646,10 +34387,17 @@ snapshots: thunky@1.1.0: {} + tildify@2.0.0: {} + time-span@4.0.0: dependencies: convert-hrtime: 3.0.0 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -32715,7 +34463,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@28.0.8(@babel/core@7.26.7)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.26.7))(jest@28.1.3(@types/node@22.12.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@28.0.8(@babel/core@7.29.7)(@jest/types@28.1.3)(babel-jest@28.1.3(@babel/core@7.29.7))(jest@28.1.3(@types/node@22.12.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -32728,9 +34476,9 @@ snapshots: typescript: 5.7.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.26.7 + '@babel/core': 7.29.7 '@jest/types': 28.1.3 - babel-jest: 28.1.3(@babel/core@7.26.7) + babel-jest: 28.1.3(@babel/core@7.29.7) ts-jest@29.2.5(@babel/core@7.29.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.7))(jest@29.7.0(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)))(typescript@5.7.3): dependencies: @@ -32786,6 +34534,11 @@ snapshots: '@ts-morph/common': 0.11.1 code-block-writer: 10.1.1 + ts-morph@27.0.2: + dependencies: + '@ts-morph/common': 0.28.1 + code-block-writer: 13.0.3 + ts-node@10.9.1(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@14.18.33)(typescript@4.9.5): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -32794,8 +34547,8 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 14.18.33 - acorn: 8.15.0 - acorn-walk: 8.3.4 + acorn: 8.16.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -32814,8 +34567,8 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 22.12.0 - acorn: 8.15.0 - acorn-walk: 8.3.4 + acorn: 8.16.0 + acorn-walk: 8.3.5 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -32826,13 +34579,34 @@ snapshots: optionalDependencies: '@swc/core': 1.10.11(@swc/helpers@0.5.15) + ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@24.13.3)(typescript@5.7.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': 24.13.3 + acorn: 8.16.0 + acorn-walk: 8.3.5 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.10.11(@swc/helpers@0.5.15) + optional: true + ts-toolbelt@6.15.5: {} tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.18.0 - tapable: 2.2.1 + enhanced-resolve: 5.23.0 + tapable: 2.3.3 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -32852,6 +34626,8 @@ snapshots: tslib@2.8.1: {} + tsqlstring@1.0.1: {} + tsutils@3.21.0(typescript@5.7.3): dependencies: tslib: 1.14.1 @@ -32984,6 +34760,8 @@ snapshots: undici-types@6.20.0: {} + undici-types@7.18.2: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -32991,8 +34769,6 @@ snapshots: unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.2.0: {} - unicode-match-property-value-ecmascript@2.2.1: {} unicode-property-aliases-ecmascript@2.1.0: {} @@ -33117,6 +34893,8 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 + url-template@2.0.8: {} + use-sync-external-store@1.4.0(react@18.3.1): dependencies: react: 18.3.1 @@ -33159,7 +34937,7 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -33170,18 +34948,18 @@ snapshots: vary@1.1.2: {} - vercel@29.4.0(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)): + vercel@29.4.0(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)): dependencies: '@vercel/build-utils': 6.7.3 '@vercel/go': 2.5.1 '@vercel/hydrogen': 0.0.64 '@vercel/next': 3.8.5 - '@vercel/node': 2.14.3(@swc/core@1.10.11(@swc/helpers@0.5.15)) + '@vercel/node': 2.14.3(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13) '@vercel/python': 3.1.60 - '@vercel/redwood': 1.1.15 - '@vercel/remix-builder': 1.8.10(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) + '@vercel/redwood': 1.1.15(encoding@0.1.13) + '@vercel/remix-builder': 1.8.10(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(encoding@0.1.13)(terser@5.37.0)(ts-node@10.9.2(@swc/core@1.10.11(@swc/helpers@0.5.15))(@types/node@22.12.0)(typescript@5.7.3)) '@vercel/ruby': 1.3.76 - '@vercel/static-build': 1.3.32(@swc/core@1.10.11(@swc/helpers@0.5.15)) + '@vercel/static-build': 1.3.32(@swc/core@1.10.11(@swc/helpers@0.5.15))(encoding@0.1.13) transitivePeerDependencies: - '@remix-run/serve' - '@swc/core' @@ -33273,11 +35051,6 @@ snapshots: dependencies: makeerror: 1.0.12 - watchpack@2.4.2: - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - watchpack@2.5.2: dependencies: graceful-fs: 4.2.11 @@ -33342,7 +35115,7 @@ snapshots: open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.3.0 + schema-utils: 4.3.3 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -33359,7 +35132,7 @@ snapshots: webpack-manifest-plugin@4.1.1(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))): dependencies: - tapable: 2.2.1 + tapable: 2.3.3 webpack: 5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)) webpack-sources: 2.3.1 @@ -33375,8 +35148,6 @@ snapshots: source-list-map: 2.0.1 source-map: 0.6.1 - webpack-sources@3.2.3: {} - webpack-sources@3.5.0: {} webpack@5.108.3(@swc/core@1.10.11(@swc/helpers@0.5.15)): @@ -33534,28 +35305,28 @@ snapshots: webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15)): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 + '@types/estree': 1.0.9 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - browserslist: 4.24.4 + acorn: 8.16.0 + browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.23.0 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.2 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.3.0 - tapable: 2.2.1 + tapable: 2.3.3 terser-webpack-plugin: 5.3.11(@swc/core@1.10.11(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) - watchpack: 2.4.2 - webpack-sources: 3.2.3 + watchpack: 2.5.2 + webpack-sources: 3.5.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -33564,28 +35335,28 @@ snapshots: webpack@5.97.1(@swc/core@1.10.11(@swc/helpers@0.5.15)): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.6 + '@types/estree': 1.0.9 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - browserslist: 4.24.4 + acorn: 8.16.0 + browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.23.0 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.2 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.3.0 - tapable: 2.2.1 + tapable: 2.3.3 terser-webpack-plugin: 5.3.11(@swc/core@1.10.11(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.11(@swc/helpers@0.5.15))) - watchpack: 2.4.2 - webpack-sources: 3.2.3 + watchpack: 2.5.2 + webpack-sources: 3.5.0 transitivePeerDependencies: - '@swc/core' - esbuild @@ -33702,6 +35473,20 @@ snapshots: triple-beam: 1.4.1 winston-transport: 4.9.0 + winston@3.19.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.8 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + word-wrap@1.2.5: {} workbox-background-sync@6.6.0: @@ -33717,8 +35502,8 @@ snapshots: dependencies: '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) '@babel/core': 7.29.7 - '@babel/preset-env': 7.26.7(@babel/core@7.29.7) - '@babel/runtime': 7.26.7 + '@babel/preset-env': 7.29.7(@babel/core@7.29.7) + '@babel/runtime': 7.29.7 '@rollup/plugin-babel': 5.3.1(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@2.79.2) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) @@ -33728,7 +35513,7 @@ snapshots: fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 glob: 7.2.3 - lodash: 4.17.21 + lodash: 4.18.1 pretty-bytes: 5.6.0 rollup: 2.79.2 rollup-plugin-terser: 7.0.2(rollup@2.79.2) @@ -33873,6 +35658,10 @@ snapshots: ws@8.18.0: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + xdm@2.1.0: dependencies: '@rollup/pluginutils': 4.2.1 @@ -33903,6 +35692,8 @@ snapshots: xml-name-validator@3.0.0: {} + xml-naming@0.3.0: {} + xmlchars@2.2.0: {} xmlcreate@2.0.4: {} From 04ff006be024c65efd671661e020f05d482bf642 Mon Sep 17 00:00:00 2001 From: maplexu Date: Thu, 27 Aug 2026 17:34:28 -0400 Subject: [PATCH 4/6] AI-283: Run Google ADK tests from compiled output --- google-adk-agents/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-adk-agents/package.json b/google-adk-agents/package.json index cdb0519c9..31ea5f560 100644 --- a/google-adk-agents/package.json +++ b/google-adk-agents/package.json @@ -8,7 +8,7 @@ "format": "prettier --write .", "format:check": "prettier --check .", "lint": "eslint .", - "test": "mocha --exit --require ts-node/register --require source-map-support/register \"src/*/mocha/*.test.ts\"" + "test": "tsc --build && mocha --exit --require source-map-support/register \"lib/*/mocha/*.test.js\"" }, "dependencies": { "@temporalio/client": "^1.23.0", From 2d1b2aa0bc2bd5676b9c3ca3397245026d4fd554 Mon Sep 17 00:00:00 2001 From: maplexu Date: Thu, 27 Aug 2026 17:41:29 -0400 Subject: [PATCH 5/6] AI-283: Remove unnecessary source map preload --- google-adk-agents/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-adk-agents/package.json b/google-adk-agents/package.json index 31ea5f560..1f1b40ec0 100644 --- a/google-adk-agents/package.json +++ b/google-adk-agents/package.json @@ -8,7 +8,7 @@ "format": "prettier --write .", "format:check": "prettier --check .", "lint": "eslint .", - "test": "tsc --build && mocha --exit --require source-map-support/register \"lib/*/mocha/*.test.js\"" + "test": "tsc --build && mocha --exit \"lib/*/mocha/*.test.js\"" }, "dependencies": { "@temporalio/client": "^1.23.0", From 9044d791830a6b0af5b8dfb3e71268298d5fe61a Mon Sep 17 00:00:00 2001 From: maplexu Date: Thu, 27 Aug 2026 22:38:37 -0400 Subject: [PATCH 6/6] AI-283: Use current Node 22 on Windows --- .github/workflows/ci.yml | 10 +--------- google-adk-agents/package.json | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82c72fc4a..71da49cf4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,10 +22,6 @@ jobs: matrix: os: [ ubuntu-latest, windows-latest, macos-latest ] node: [ 20, 22, 24 ] - include: - - os: windows-latest - node: 22 - node-release-override: 22.11.0 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -38,11 +34,7 @@ jobs: - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 with: - # Node 22.12.0 on Windows incorrectly resolves `localhost` to `::1`, rather than both `::1` and `127.0.0.1`. - # THis causes errors when executing tests. So until this gets fixed upstream, we force the last known good - # version of Node on Windows. - # See https://github.com/nodejs/node/issues/56137 (_resolved_ already, but not yet released). - node-version: ${{ matrix.node-release-override || matrix.node }} + node-version: ${{ matrix.node }} # Comment out cache line when testing with act: # (Test command is: act --platform ubuntu-latest=lucasalt/act_base:latest) cache: 'pnpm' diff --git a/google-adk-agents/package.json b/google-adk-agents/package.json index 1f1b40ec0..cdb0519c9 100644 --- a/google-adk-agents/package.json +++ b/google-adk-agents/package.json @@ -8,7 +8,7 @@ "format": "prettier --write .", "format:check": "prettier --check .", "lint": "eslint .", - "test": "tsc --build && mocha --exit \"lib/*/mocha/*.test.js\"" + "test": "mocha --exit --require ts-node/register --require source-map-support/register \"src/*/mocha/*.test.ts\"" }, "dependencies": { "@temporalio/client": "^1.23.0",