From cb2a2f781eae38b8068bfa786b6f03ad01410617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathan=20=F0=9F=94=B6=20Tarbert?= <66887028+NathanTarbert@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:26:05 -0400 Subject: [PATCH 01/18] Revise supported frameworks and protocols sections Updated the README to reflect changes in supported integrations and resources. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0f4d72643..6630afe55 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ AG-UI is complementary to the other 2 top agentic protocols - šŸ§‘ā€šŸ’» Human-in-the-loop collaboration -## šŸ›  Supported Frameworks +## šŸ›  Supported Integrations AG-UI was born from CopilotKit's initial partnership with LangGraph and CrewAI - and brings the incredibly popular agent-user-interactivity infrastructure to the wider agentic ecosystem. @@ -89,15 +89,15 @@ AG-UI was born from CopilotKit's initial partnership with LangGraph and CrewAI - | Framework | Status | AG-UI Resources | | ---------- | ------- | ---------------- | | [LangGraph](https://www.langchain.com/langgraph) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/langgraph/) šŸŽ® [Demos](https://dojo.ag-ui.com/langgraph-fastapi/feature/shared_state) | -| [Google ADK](https://google.github.io/adk-docs/get-started/) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/adk) šŸŽ® [Demos](https://dojo.ag-ui.com/adk-middleware) | +| [Google ADK](https://google.github.io/adk-docs/get-started/) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/adk) šŸŽ® [Demos](https://dojo.ag-ui.com/adk-middleware/feature/shared_state?openCopilot=true) | | [CrewAI](https://crewai.com/) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/crewai-flows) šŸŽ® [Demos](https://dojo.ag-ui.com/crewai/feature/shared_state) | #### 🧩 1st Party | Framework | Status | AG-UI Resources | | ---------- | ------- | ---------------- | -| [Mastra](https://mastra.ai/) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/mastra/) šŸŽ® [Demos](https://dojo.ag-ui.com/mastra) | +| [Mastra](https://mastra.ai/) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/mastra/) šŸŽ® [Demos](https://dojo.ag-ui.com/mastra/feature/tool_based_generative_ui) | | [Pydantic AI](https://github.com/pydantic/pydantic-ai) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/pydantic-ai/) šŸŽ® [Demos](https://dojo.ag-ui.com/pydantic-ai/feature/shared_state) | -| [Agno](https://github.com/agno-agi/agno) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/agno/) šŸŽ® [Demos](https://dojo.ag-ui.com/agno) | +| [Agno](https://github.com/agno-agi/agno) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/agno/) šŸŽ® [Demos](https://dojo.ag-ui.com/agno/feature/tool_based_generative_ui) | | [LlamaIndex](https://github.com/run-llama/llama_index) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/llamaindex/) šŸŽ® [Demos](https://dojo.ag-ui.com/llamaindex/feature/shared_state) | | [AG2](https://ag2.ai/) | āœ… Supported | āž”ļø [Docs](https://docs.copilotkit.ai/ag2/) | | [AWS Bedrock Agents](https://aws.amazon.com/bedrock/agents/) | šŸ› ļø In Progress | – | @@ -112,7 +112,7 @@ AG-UI was born from CopilotKit's initial partnership with LangGraph and CrewAI - | [Cloudflare Agents](https://developers.cloudflare.com/agents/) | šŸ› ļø In Progress | – | -## Protocols +## Agent Interaction Protocols | Protocols | Status | AG-UI Resources | Integrations | | ---------- | ------- | ---------------- | ------------- | From a136965d2e4b566fa2f297b980d5d7f0bdd8fe1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathan=20=F0=9F=94=B6=20Tarbert?= <66887028+NathanTarbert@users.noreply.github.com> Date: Mon, 3 Nov 2025 11:12:40 -0500 Subject: [PATCH 02/18] Update image and enhance README formatting Updated image link in README and added new line before Getting Started section. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6630afe55..b014a781a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,9 @@ Built for simplicity and flexibility, it enables seamless integration between AI Join our Discord →     Read the Docs →     Go to the AG-UI Dojo →     Follow us → -Your application-AG-UI protocol +Your application-AG-UI protocol + + ## šŸš€ Getting Started Create a new AG-UI application in seconds: From 168a380ec57271b7849d3319a275527c2f1b6dbf Mon Sep 17 00:00:00 2001 From: Max Korp Date: Wed, 5 Nov 2025 10:16:43 -0700 Subject: [PATCH 03/18] Add workflow to autoapprove community PRs (#636) --- .github/workflows/auto-approve-community.yml | 193 +++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 .github/workflows/auto-approve-community.yml diff --git a/.github/workflows/auto-approve-community.yml b/.github/workflows/auto-approve-community.yml new file mode 100644 index 000000000..7e5cabb4a --- /dev/null +++ b/.github/workflows/auto-approve-community.yml @@ -0,0 +1,193 @@ +name: Auto-approve community PRs + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + pull-requests: write + contents: read + +jobs: + auto-approve: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Fetch PR branch + run: | + git fetch origin ${{ github.event.pull_request.head.ref }}:${{ github.event.pull_request.head.ref }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Auto-approve based on CODEOWNERS + env: + PR_AUTHOR: ${{ github.event.pull_request.user.login }} + PR_NUMBER: ${{ github.event.pull_request.number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BASE_REF: ${{ github.event.pull_request.base.ref }} + HEAD_REF: ${{ github.event.pull_request.head.ref }} + run: | + node << 'EOF' + const { execSync } = require('child_process'); + const fs = require('fs'); + const path = require('path'); + + const prAuthor = process.env.PR_AUTHOR; + const prNumber = process.env.PR_NUMBER; + + // Get changed files + const changedFiles = execSync( + `git diff --name-only origin/${process.env.BASE_REF}...origin/${process.env.HEAD_REF}`, + { encoding: 'utf-8' } + ) + .trim() + .split('\n') + .filter(f => f.trim()); + + console.log(`Changed files (${changedFiles.length}):`); + changedFiles.forEach(f => console.log(` - ${f}`)); + + // Parse CODEOWNERS file + const codeownersPath = '.github/CODEOWNERS'; + const codeownersContent = fs.readFileSync(codeownersPath, 'utf-8'); + const lines = codeownersContent.split('\n'); + + // Map of path patterns to owners (excluding root * rule) + const codeownersRules = []; + + for (const line of lines) { + const trimmed = line.trim(); + // Skip empty lines and comments + if (!trimmed || trimmed.startsWith('#')) { + continue; + } + + // Skip root * line + if (trimmed.startsWith('* ')) { + console.log('Skipping root * rule'); + continue; + } + + // Parse pattern and owners + const parts = trimmed.split(/\s+/); + if (parts.length < 2) { + continue; + } + + const pattern = parts[0]; + const owners = parts.slice(1).map(o => o.replace('@', '')); + + codeownersRules.push({ pattern, owners }); + } + + console.log('\nCODEOWNERS rules (excluding root):'); + codeownersRules.forEach(rule => { + console.log(` ${rule.pattern} -> ${rule.owners.join(', ')}`); + }); + + // Function to check if a file matches a CODEOWNERS pattern + // CODEOWNERS patterns match: + // - Exact file/directory path + // - pattern/ matches everything in that directory + // - pattern/** matches everything recursively in that directory + function matchesPattern(file, pattern) { + // Normalize paths (handle both / and \ separators) + const normalizePath = (p) => p.replace(/\\/g, '/'); + const normalizedFile = normalizePath(file); + const normalizedPattern = normalizePath(pattern); + + // Exact match + if (normalizedFile === normalizedPattern) { + return true; + } + + // Pattern ends with /**: matches recursively in directory + if (normalizedPattern.endsWith('/**')) { + const dirPrefix = normalizedPattern.slice(0, -3); + return normalizedFile.startsWith(dirPrefix + '/'); + } + + // Pattern ends with /: matches everything in directory + if (normalizedPattern.endsWith('/')) { + const dirPrefix = normalizedPattern.slice(0, -1); + return normalizedFile.startsWith(dirPrefix + '/'); + } + + // Pattern is a directory prefix (matches subdirectories) + if (normalizedFile.startsWith(normalizedPattern + '/')) { + return true; + } + + return false; + } + + // Check each changed file + // CODEOWNERS rules are evaluated top-to-bottom, first match wins + const unapprovedFiles = []; + + for (const file of changedFiles) { + let matched = false; + let owned = false; + + // Find the first matching rule (CODEOWNERS uses first match semantics) + for (const rule of codeownersRules) { + if (matchesPattern(file, rule.pattern)) { + matched = true; + // First match wins in CODEOWNERS, so check ownership here + owned = rule.owners.includes(prAuthor); + break; // Stop at first match + } + } + + // File must be matched by a non-root CODEOWNERS rule AND author must own it + if (!matched || !owned) { + unapprovedFiles.push(file); + } + } + + // Decision + if (unapprovedFiles.length === 0) { + console.log(`\nāœ… All changed files are owned by ${prAuthor} according to CODEOWNERS`); + + // Check if already approved by this workflow + try { + const reviews = JSON.parse( + execSync(`gh pr view ${prNumber} --json reviews`, { encoding: 'utf-8' }) + ); + + // Check if there's already an approval from GitHub Actions bot + // (look for approval with the auto-approve message) + const hasAutoApproval = reviews.reviews.some( + review => review.state === 'APPROVED' && + review.body && + review.body.includes('Auto-approved: PR author has CODEOWNERS access') + ); + + if (hasAutoApproval) { + console.log('PR already auto-approved by this workflow'); + } else { + // Approve the PR using GitHub Actions bot account + execSync( + `gh pr review ${prNumber} --approve --body "Auto-approved: PR author ${prAuthor} has CODEOWNERS access to all changed files (excluding root rule)"`, + { stdio: 'inherit' } + ); + console.log(`PR approved automatically for ${prAuthor}`); + } + } catch (error) { + console.error('Error checking/approving PR:', error.message); + // Don't fail the workflow if approval fails (might already be approved, etc.) + console.log('Continuing despite approval error...'); + } + } else { + console.log(`\nāŒ Not auto-approved: Some files are not owned by ${prAuthor}`); + console.log('Unauthorized files:'); + unapprovedFiles.forEach(f => console.log(` - ${f}`)); + } + EOF From 54f5c4156687480e477158ac7976ac827c221715 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 5 Nov 2025 11:30:24 -0800 Subject: [PATCH 04/18] Addressing regression in ADK 0.3.2 (#626) * Add state snapshot passthrough tests * Update complex event translator test for snapshot --- .../python/src/ag_ui_adk/event_translator.py | 30 ++++------ .../test_event_translator_comprehensive.py | 57 ++++++++++++++++++- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/integrations/adk-middleware/python/src/ag_ui_adk/event_translator.py b/integrations/adk-middleware/python/src/ag_ui_adk/event_translator.py index 922bd0279..2bcfbe16d 100644 --- a/integrations/adk-middleware/python/src/ag_ui_adk/event_translator.py +++ b/integrations/adk-middleware/python/src/ag_ui_adk/event_translator.py @@ -223,10 +223,16 @@ async def translate( # Handle state changes - if hasattr(adk_event, 'actions') and adk_event.actions and hasattr(adk_event.actions, 'state_delta') and adk_event.actions.state_delta: - yield self._create_state_delta_event( - adk_event.actions.state_delta, thread_id, run_id - ) + if hasattr(adk_event, 'actions') and adk_event.actions: + if hasattr(adk_event.actions, 'state_delta') and adk_event.actions.state_delta: + yield self._create_state_delta_event( + adk_event.actions.state_delta, thread_id, run_id + ) + + if hasattr(adk_event.actions, 'state_snapshot'): + state_snapshot = adk_event.actions.state_snapshot + if state_snapshot is not None: + yield self._create_state_snapshot_event(state_snapshot) # Handle custom events or metadata @@ -583,23 +589,9 @@ def _create_state_snapshot_event( A StateSnapshotEvent """ - FullSnapShot = { - "context": { - "conversation": [], - "user": { - "name": state_snapshot.get("user_name", ""), - "timezone": state_snapshot.get("timezone", "UTC") - }, - "app": { - "version": state_snapshot.get("app_version", "unknown") - } - }, - "state": state_snapshot.get("custom_state", {}) - } - return StateSnapshotEvent( type=EventType.STATE_SNAPSHOT, - snapshot=FullSnapShot + snapshot=state_snapshot ) async def force_close_streaming_message(self) -> AsyncGenerator[BaseEvent, None]: diff --git a/integrations/adk-middleware/python/tests/test_event_translator_comprehensive.py b/integrations/adk-middleware/python/tests/test_event_translator_comprehensive.py index 8ef9d17ea..7e7ea8d5b 100644 --- a/integrations/adk-middleware/python/tests/test_event_translator_comprehensive.py +++ b/integrations/adk-middleware/python/tests/test_event_translator_comprehensive.py @@ -13,7 +13,7 @@ from ag_ui.core import ( EventType, TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, - StateDeltaEvent, CustomEvent + StateDeltaEvent, StateSnapshotEvent, CustomEvent ) from google.adk.events import Event as ADKEvent from ag_ui_adk.event_translator import EventTranslator @@ -185,6 +185,7 @@ async def test_translate_state_delta_event(self, translator, mock_adk_event): # Mock event with state delta mock_actions = MagicMock() mock_actions.state_delta = {"key1": "value1", "key2": "value2"} + mock_actions.state_snapshot = None mock_adk_event.actions = mock_actions events = [] @@ -201,6 +202,55 @@ async def test_translate_state_delta_event(self, translator, mock_adk_event): assert any(patch["path"] == "/key1" and patch["value"] == "value1" for patch in patches) assert any(patch["path"] == "/key2" and patch["value"] == "value2" for patch in patches) + @pytest.mark.asyncio + async def test_translate_state_snapshot_event_passthrough(self, translator, mock_adk_event): + """Test state snapshot events preserve the ADK payload.""" + + state_snapshot = { + "user_name": "Alice", + "timezone": "UTC", + "custom_state": { + "view": {"active_tab": "details"}, + "progress": 0.75, + }, + "extra_field": [1, 2, 3], + } + + mock_adk_event.actions = SimpleNamespace( + state_delta=None, + state_snapshot=state_snapshot, + ) + + events = [] + async for event in translator.translate(mock_adk_event, "thread_1", "run_1"): + events.append(event) + + snapshot_events = [event for event in events if isinstance(event, StateSnapshotEvent)] + assert snapshot_events, "Expected a StateSnapshotEvent to be emitted" + + snapshot_event = snapshot_events[0] + assert snapshot_event.type == EventType.STATE_SNAPSHOT + assert snapshot_event.snapshot == state_snapshot + assert snapshot_event.snapshot["user_name"] == "Alice" + assert snapshot_event.snapshot["custom_state"]["view"]["active_tab"] == "details" + assert "extra_field" in snapshot_event.snapshot + + def test_create_state_snapshot_event_passthrough(self, translator): + """Direct helper should forward the snapshot unchanged.""" + + state_snapshot = { + "user_name": "Bob", + "custom_state": {"step": 3}, + "timezone": "PST", + } + + event = translator._create_state_snapshot_event(state_snapshot) + + assert isinstance(event, StateSnapshotEvent) + assert event.type == EventType.STATE_SNAPSHOT + assert event.snapshot == state_snapshot + assert set(event.snapshot.keys()) == {"user_name", "custom_state", "timezone"} + @pytest.mark.asyncio async def test_translate_custom_event(self, translator, mock_adk_event): """Test custom event creation.""" @@ -857,14 +907,15 @@ async def test_complex_event_with_multiple_features(self, translator, mock_adk_e async for event in translator.translate(mock_adk_event, "thread_1", "run_1"): events.append(event) - # Should have text events, state delta, and custom event - assert len(events) == 5 # START, CONTENT, STATE_DELTA, CUSTOM , END + # Should have text events, state delta, state snapshot, and custom event + assert len(events) == 6 # START, CONTENT, STATE_DELTA, STATE_SNAPSHOT, CUSTOM, END # Check event types event_types = [type(event) for event in events] assert TextMessageStartEvent in event_types assert TextMessageContentEvent in event_types assert StateDeltaEvent in event_types + assert StateSnapshotEvent in event_types assert CustomEvent in event_types assert TextMessageEndEvent in event_types From fba25dbb54f345a4b752141a587103e48a7e82ee Mon Sep 17 00:00:00 2001 From: Markus Ecker Date: Thu, 6 Nov 2025 16:10:34 +0100 Subject: [PATCH 05/18] 0.0.40 (#632) --- .gitignore | 4 + CLAUDE.md | 1 + apps/dojo/package.json | 8 +- apps/dojo/src/agents.ts | 39 +- .../feature/vnext_chat/page.tsx | 39 + .../api/copilotkit/[integrationId]/route.ts | 6 +- apps/dojo/src/app/api/copilotkit/route.ts | 22 + .../[integrationId]/[[...slug]]/route.ts | 57 + apps/dojo/src/config.ts | 18 +- apps/dojo/src/env.ts | 4 +- apps/dojo/src/menu.ts | 33 +- apps/dojo/src/types/integration.ts | 3 +- apps/dojo/tsconfig.json | 6 +- docs/concepts/events.mdx | 117 +- docs/concepts/messages.mdx | 44 +- docs/concepts/middleware.mdx | 307 +++ docs/concepts/serialization.mdx | 188 ++ docs/docs.json | 8 +- docs/drafts/activity-events.mdx | 262 --- docs/drafts/multimodal-messages.mdx | 2 +- docs/drafts/overview.mdx | 21 +- docs/drafts/serialization.mdx | 316 --- docs/sdk/js/client/abstract-agent.mdx | 70 + docs/sdk/js/client/compaction.mdx | 76 + docs/sdk/js/client/middleware.mdx | 408 ++++ docs/sdk/js/client/overview.mdx | 24 + docs/sdk/js/client/subscriber.mdx | 26 + docs/sdk/js/core/events.mdx | 100 +- docs/sdk/js/core/types.mdx | 71 +- docs/sdk/python/core/events.mdx | 103 +- docs/sdk/python/core/types.mdx | 88 +- integrations/a2a/typescript/.gitignore | 2 + integrations/a2a/typescript/.npmrc | 1 + integrations/a2a/typescript/README.md | 86 + integrations/a2a/typescript/jest.config.js | 10 + integrations/a2a/typescript/package.json | 52 + .../typescript/src/__tests__/agent.test.ts | 143 ++ .../typescript/src/__tests__/utils.test.ts | 191 ++ integrations/a2a/typescript/src/agent.ts | 360 ++++ integrations/a2a/typescript/src/index.ts | 3 + integrations/a2a/typescript/src/types.ts | 60 + integrations/a2a/typescript/src/utils.ts | 488 +++++ integrations/a2a/typescript/tsconfig.json | 24 + integrations/a2a/typescript/tsup.config.ts | 13 + .../python/src/ag_ui_adk/utils/converters.py | 42 +- integrations/agno/typescript/package.json | 2 +- integrations/agno/typescript/src/index.ts | 6 +- .../spring-ai/typescript/package.json | 2 +- .../spring-ai/typescript/src/index.ts | 6 +- integrations/crew-ai/typescript/package.json | 2 +- integrations/crew-ai/typescript/src/index.ts | 6 +- .../langgraph/python/ag_ui_langgraph/utils.py | 115 +- .../agents/multimodal_messages/__init__.py | 51 + .../agents/multimodal_messages/agent.py | 90 + .../langgraph/python/examples/poetry.lock | 399 ++-- .../langgraph/python/examples/pyproject.toml | 16 +- .../langgraph/python/examples/uv.lock | 1137 +++++------ integrations/langgraph/python/poetry.lock | 20 +- integrations/langgraph/python/pyproject.toml | 4 +- .../langgraph/python/tests/test_multimodal.py | 227 +++ .../src/agents/multimodal_messages/agent.ts | 120 ++ .../langgraph/typescript/package.json | 6 +- .../langgraph/typescript/src/utils.test.ts | 224 +++ .../langgraph/typescript/src/utils.ts | 155 +- .../llama-index/typescript/package.json | 2 +- .../llama-index/typescript/src/index.ts | 4 + .../mastra/typescript/examples/.gitignore | 1 + integrations/mastra/typescript/src/mastra.ts | 36 +- integrations/mastra/typescript/src/utils.ts | 34 +- .../pydantic-ai/typescript/package.json | 2 +- .../pydantic-ai/typescript/src/index.ts | 6 +- .../vercel-ai-sdk/typescript/src/index.ts | 75 +- middlewares/a2a-middleware/src/index.ts | 73 +- package.json | 8 +- pnpm-lock.yaml | 1792 ++++++++++++++--- sdks/python/README.md | 17 + sdks/python/ag_ui/core/__init__.py | 16 +- sdks/python/ag_ui/core/events.py | 27 +- sdks/python/ag_ui/core/types.py | 67 +- sdks/python/pyproject.toml | 2 +- sdks/python/tests/test_events.py | 74 +- sdks/python/tests/test_types.py | 86 +- sdks/typescript/README.md | 18 + sdks/typescript/packages/client/README.md | 27 + .../typescript/packages/client/jest.config.js | 6 + sdks/typescript/packages/client/package.json | 3 +- .../src/agent/__tests__/agent-clone.test.ts | 81 + .../__tests__/agent-multiple-runs.test.ts | 67 +- .../agent/__tests__/agent-mutations.test.ts | 20 +- .../src/agent/__tests__/agent-result.test.ts | 77 +- .../src/agent/__tests__/agent-version.test.ts | 19 + .../src/agent/__tests__/subscriber.test.ts | 20 +- .../packages/client/src/agent/agent.ts | 203 +- .../packages/client/src/agent/http.ts | 15 + .../packages/client/src/agent/index.ts | 2 +- .../packages/client/src/agent/subscriber.ts | 18 + .../apply/__tests__/default.activity.test.ts | 381 ++++ .../__tests__/default.concurrent.test.ts | 30 +- .../src/apply/__tests__/default.state.test.ts | 23 +- .../__tests__/default.text-message.test.ts | 13 +- .../__tests__/default.tool-calls.test.ts | 28 +- .../apply/__tests__/run-started-input.test.ts | 416 ++++ .../packages/client/src/apply/default.ts | 171 +- .../packages/client/src/chunks/transform.ts | 5 +- .../src/compact/__tests__/compact.test.ts | 294 +++ .../packages/client/src/compact/compact.ts | 252 +++ .../packages/client/src/compact/index.ts | 1 + sdks/typescript/packages/client/src/index.ts | 1 + .../packages/client/src/legacy/convert.ts | 26 +- .../backward-compatibility-0-0-39.test.ts | 66 + .../__tests__/filter-tool-calls.test.ts | 184 ++ .../__tests__/function-middleware.test.ts | 86 + .../__tests__/middleware-live-events.test.ts | 98 + .../__tests__/middleware-usage-example.ts | 130 ++ .../__tests__/middleware-with-state.test.ts | 83 + .../middleware/__tests__/middleware.test.ts | 80 + .../backward-compatibility-0-0-39.ts | 54 + .../src/middleware/filter-tool-calls.ts | 104 + .../packages/client/src/middleware/index.ts | 4 + .../client/src/middleware/middleware.ts | 87 + sdks/typescript/packages/client/src/utils.ts | 14 +- sdks/typescript/packages/core/package.json | 2 +- .../src/__tests__/activity-events.test.ts | 54 + .../__tests__/backwards-compatibility.test.ts | 252 +++ .../src/__tests__/multimodal-messages.test.ts | 52 + sdks/typescript/packages/core/src/events.ts | 25 +- sdks/typescript/packages/core/src/types.ts | 64 +- sdks/typescript/packages/encoder/package.json | 2 +- sdks/typescript/packages/proto/package.json | 2 +- 129 files changed, 10462 insertions(+), 2054 deletions(-) create mode 100644 apps/dojo/src/app/[integrationId]/feature/vnext_chat/page.tsx create mode 100644 apps/dojo/src/app/api/copilotkit/route.ts create mode 100644 apps/dojo/src/app/api/copilotkitnext/[integrationId]/[[...slug]]/route.ts create mode 100644 docs/concepts/middleware.mdx create mode 100644 docs/concepts/serialization.mdx delete mode 100644 docs/drafts/activity-events.mdx delete mode 100644 docs/drafts/serialization.mdx create mode 100644 docs/sdk/js/client/compaction.mdx create mode 100644 docs/sdk/js/client/middleware.mdx create mode 100644 integrations/a2a/typescript/.gitignore create mode 100644 integrations/a2a/typescript/.npmrc create mode 100644 integrations/a2a/typescript/README.md create mode 100644 integrations/a2a/typescript/jest.config.js create mode 100644 integrations/a2a/typescript/package.json create mode 100644 integrations/a2a/typescript/src/__tests__/agent.test.ts create mode 100644 integrations/a2a/typescript/src/__tests__/utils.test.ts create mode 100644 integrations/a2a/typescript/src/agent.ts create mode 100644 integrations/a2a/typescript/src/index.ts create mode 100644 integrations/a2a/typescript/src/types.ts create mode 100644 integrations/a2a/typescript/src/utils.ts create mode 100644 integrations/a2a/typescript/tsconfig.json create mode 100644 integrations/a2a/typescript/tsup.config.ts create mode 100644 integrations/langgraph/python/examples/agents/multimodal_messages/__init__.py create mode 100644 integrations/langgraph/python/examples/agents/multimodal_messages/agent.py create mode 100644 integrations/langgraph/python/tests/test_multimodal.py create mode 100644 integrations/langgraph/typescript/examples/src/agents/multimodal_messages/agent.ts create mode 100644 integrations/langgraph/typescript/src/utils.test.ts create mode 100644 sdks/typescript/packages/client/src/agent/__tests__/agent-clone.test.ts create mode 100644 sdks/typescript/packages/client/src/agent/__tests__/agent-version.test.ts create mode 100644 sdks/typescript/packages/client/src/apply/__tests__/default.activity.test.ts create mode 100644 sdks/typescript/packages/client/src/apply/__tests__/run-started-input.test.ts create mode 100644 sdks/typescript/packages/client/src/compact/__tests__/compact.test.ts create mode 100644 sdks/typescript/packages/client/src/compact/compact.ts create mode 100644 sdks/typescript/packages/client/src/compact/index.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/backward-compatibility-0-0-39.test.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/filter-tool-calls.test.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/function-middleware.test.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/middleware-live-events.test.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/middleware-usage-example.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/middleware-with-state.test.ts create mode 100644 sdks/typescript/packages/client/src/middleware/__tests__/middleware.test.ts create mode 100644 sdks/typescript/packages/client/src/middleware/backward-compatibility-0-0-39.ts create mode 100644 sdks/typescript/packages/client/src/middleware/filter-tool-calls.ts create mode 100644 sdks/typescript/packages/client/src/middleware/index.ts create mode 100644 sdks/typescript/packages/client/src/middleware/middleware.ts create mode 100644 sdks/typescript/packages/core/src/__tests__/activity-events.test.ts create mode 100644 sdks/typescript/packages/core/src/__tests__/backwards-compatibility.test.ts create mode 100644 sdks/typescript/packages/core/src/__tests__/multimodal-messages.test.ts diff --git a/.gitignore b/.gitignore index fbffdac22..e80391eaa 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,7 @@ node_modules .vscode **/mastra.db* + +.pnpm-store + +**/.poetry-cache diff --git a/CLAUDE.md b/CLAUDE.md index 6e771634e..765ff030c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,6 +19,7 @@ pnpm dev # Run linting pnpm lint + # Run type checking pnpm check-types diff --git a/apps/dojo/package.json b/apps/dojo/package.json index 74805947b..8a8cd3d68 100644 --- a/apps/dojo/package.json +++ b/apps/dojo/package.json @@ -12,6 +12,8 @@ "run-everything": "./scripts/prep-dojo-everything.js && ./scripts/run-dojo-everything.js" }, "dependencies": { + "@a2a-js/sdk": "0.2.5", + "@ag-ui/a2a": "workspace:*", "@ag-ui/a2a-middleware": "workspace:*", "@ag-ui/adk": "workspace:*", "@ag-ui/agno": "workspace:*", @@ -20,10 +22,10 @@ "@ag-ui/llamaindex": "workspace:*", "@ag-ui/mastra": "workspace:*", "@ag-ui/middleware-starter": "workspace:*", - "@ag-ui/spring-ai": "workspace:*", "@ag-ui/pydantic-ai": "workspace:*", "@ag-ui/server-starter": "workspace:*", "@ag-ui/server-starter-all-features": "workspace:*", + "@ag-ui/spring-ai": "workspace:*", "@ag-ui/vercel-ai-sdk": "workspace:*", "@ai-sdk/openai": "^2.0.42", "@copilotkit/react-core": "1.10.6", @@ -31,6 +33,9 @@ "@copilotkit/runtime": "1.10.6", "@copilotkit/runtime-client-gql": "1.10.6", "@copilotkit/shared": "1.10.6", + "@copilotkitnext/react": "0.0.19-alpha.0", + "@copilotkitnext/runtime": "0.0.19-alpha.0", + "@copilotkitnext/agent": "0.0.19-alpha.0", "@mastra/client-js": "^0.15.2", "@mastra/core": "^0.20.2", "@mastra/dynamodb": "^0.15.6", @@ -58,6 +63,7 @@ "diff": "^7.0.0", "embla-carousel-react": "^8.6.0", "fast-json-patch": "^3.1.1", + "hono": "^4.10.3", "lucide-react": "^0.477.0", "markdown-it": "^14.1.0", "markdown-it-ins": "^4.0.0", diff --git a/apps/dojo/src/agents.ts b/apps/dojo/src/agents.ts index 18d7e90e8..02db44e28 100644 --- a/apps/dojo/src/agents.ts +++ b/apps/dojo/src/agents.ts @@ -16,9 +16,11 @@ import getEnvVars from "./env"; import { mastra } from "./mastra"; import { PydanticAIAgent } from "@ag-ui/pydantic-ai"; import { ADKAgent } from "@ag-ui/adk"; -import { SpringAiAgent } from '@ag-ui/spring-ai'; +import { SpringAiAgent } from "@ag-ui/spring-ai"; import { HttpAgent } from "@ag-ui/client"; import { A2AMiddlewareAgent } from "@ag-ui/a2a-middleware"; +import { A2AAgent } from "@ag-ui/a2a"; +import { A2AClient } from "@a2a-js/sdk/client"; const envVars = getEnvVars(); export const agentsIntegrations: AgentIntegrationConfig[] = [ @@ -81,7 +83,9 @@ export const agentsIntegrations: AgentIntegrationConfig[] = [ backend_tool_rendering: new ADKAgent({ url: `${envVars.adkMiddlewareUrl}/backend_tool_rendering`, }), - shared_state: new ADKAgent({ url: `${envVars.adkMiddlewareUrl}/adk-shared-state-agent` }), + shared_state: new ADKAgent({ + url: `${envVars.adkMiddlewareUrl}/adk-shared-state-agent`, + }), // predictive_state_updates: new ADKAgent({ url: `${envVars.adkMiddlewareUrl}/adk-predictive-state-agent` }), }; }, @@ -273,26 +277,26 @@ export const agentsIntegrations: AgentIntegrationConfig[] = [ }, }, { - id: 'spring-ai', + id: "spring-ai", agents: async () => { return { agentic_chat: new SpringAiAgent({ - url: `${envVars.springAiUrl}/agentic_chat/agui` + url: `${envVars.springAiUrl}/agentic_chat/agui`, }), shared_state: new SpringAiAgent({ - url: `${envVars.springAiUrl}/shared_state/agui` + url: `${envVars.springAiUrl}/shared_state/agui`, }), tool_based_generative_ui: new SpringAiAgent({ - url: `${envVars.springAiUrl}/tool_based_generative_ui/agui` + url: `${envVars.springAiUrl}/tool_based_generative_ui/agui`, }), human_in_the_loop: new SpringAiAgent({ - url: `${envVars.springAiUrl}/human_in_the_loop/agui` + url: `${envVars.springAiUrl}/human_in_the_loop/agui`, }), agentic_generative_ui: new SpringAiAgent({ - url: `${envVars.springAiUrl}/agentic_generative_ui/agui` - }) - } - } + url: `${envVars.springAiUrl}/agentic_generative_ui/agui`, + }), + }; + }, }, { id: "llama-index", @@ -341,6 +345,19 @@ export const agentsIntegrations: AgentIntegrationConfig[] = [ }; }, }, + { + id: "a2a-basic", + agents: async () => { + const a2aClient = new A2AClient(envVars.a2aUrl); + return { + agentic_chat: new A2AAgent({ + description: "Direct A2A agent", + a2aClient, + debug: process.env.NODE_ENV !== "production", + }), + }; + }, + }, { id: "a2a", agents: async () => { diff --git a/apps/dojo/src/app/[integrationId]/feature/vnext_chat/page.tsx b/apps/dojo/src/app/[integrationId]/feature/vnext_chat/page.tsx new file mode 100644 index 000000000..b81ab7ecb --- /dev/null +++ b/apps/dojo/src/app/[integrationId]/feature/vnext_chat/page.tsx @@ -0,0 +1,39 @@ +"use client"; + +import React from "react"; +import "@copilotkitnext/react/styles.css"; +import { CopilotChat, CopilotKitProvider } from "@copilotkitnext/react"; + +export const dynamic = "force-dynamic"; + +interface PageProps { + params: Promise<{ + integrationId: string; + }>; +} + +export default function Page({ params }: PageProps) { + const { integrationId } = React.use(params); + + return ( + +
+ +
+
+ ); +} + +function Chat({ threadId }: { threadId: string }) { + return ( +
+ +
+ ); +} diff --git a/apps/dojo/src/app/api/copilotkit/[integrationId]/route.ts b/apps/dojo/src/app/api/copilotkit/[integrationId]/route.ts index 5a0641441..a1c04b856 100644 --- a/apps/dojo/src/app/api/copilotkit/[integrationId]/route.ts +++ b/apps/dojo/src/app/api/copilotkit/[integrationId]/route.ts @@ -3,10 +3,10 @@ import { ExperimentalEmptyAdapter, copilotRuntimeNextJSAppRouterEndpoint, } from "@copilotkit/runtime"; -import { agentsIntegrations } from "@/agents"; - import { NextRequest } from "next/server"; +import { agentsIntegrations } from "@/agents"; + export async function POST(request: NextRequest) { const integrationId = request.url.split("/").pop(); @@ -14,6 +14,7 @@ export async function POST(request: NextRequest) { if (!integration) { return new Response("Integration not found", { status: 404 }); } + const agents = await integration.agents(); const runtime = new CopilotRuntime({ // @ts-ignore for now @@ -27,3 +28,4 @@ export async function POST(request: NextRequest) { return handleRequest(request); } + diff --git a/apps/dojo/src/app/api/copilotkit/route.ts b/apps/dojo/src/app/api/copilotkit/route.ts new file mode 100644 index 000000000..80f03f2c1 --- /dev/null +++ b/apps/dojo/src/app/api/copilotkit/route.ts @@ -0,0 +1,22 @@ +import { + CopilotRuntime, + InMemoryAgentRunner, + createCopilotEndpoint, +} from "@copilotkitnext/runtime"; +import { handle } from "hono/vercel"; + +const runtime = new CopilotRuntime({ + agents: { + default: null as any, + }, + runner: new InMemoryAgentRunner(), +}); + +const app = createCopilotEndpoint({ + runtime, + basePath: "/api/copilotkit", +}); + +export const GET = handle(app); +export const POST = handle(app); + diff --git a/apps/dojo/src/app/api/copilotkitnext/[integrationId]/[[...slug]]/route.ts b/apps/dojo/src/app/api/copilotkitnext/[integrationId]/[[...slug]]/route.ts new file mode 100644 index 000000000..8ecd15ff3 --- /dev/null +++ b/apps/dojo/src/app/api/copilotkitnext/[integrationId]/[[...slug]]/route.ts @@ -0,0 +1,57 @@ +import { + CopilotRuntime, + InMemoryAgentRunner, + createCopilotEndpoint, +} from "@copilotkitnext/runtime"; +import { handle } from "hono/vercel"; +import type { NextRequest } from "next/server"; +import { BasicAgent } from "@copilotkitnext/agent"; +import type { AbstractAgent } from "@ag-ui/client"; + +type RouteParams = { + params: Promise<{ + integrationId: string; + slug?: string[]; + }>; +}; + +const handlerCache = new Map>(); + +function getHandler(integrationId: string) { + const cached = handlerCache.get(integrationId); + if (cached) { + return cached; + } + + const defaultAgent = new BasicAgent({ + model: "openai/gpt-4o", + }) as unknown as AbstractAgent; // Cast until upstream marks run() public. + + const runtime = new CopilotRuntime({ + agents: { + default: defaultAgent, + }, + runner: new InMemoryAgentRunner(), + }); + + const app = createCopilotEndpoint({ + runtime, + basePath: `/api/copilotkitnext/${integrationId}`, + }); + + const handler = handle(app); + handlerCache.set(integrationId, handler); + return handler; +} + +export async function GET(request: NextRequest, context: RouteParams) { + const { integrationId } = await context.params; + const handler = getHandler(integrationId); + return handler(request); +} + +export async function POST(request: NextRequest, context: RouteParams) { + const { integrationId } = await context.params; + const handler = getHandler(integrationId); + return handler(request); +} diff --git a/apps/dojo/src/config.ts b/apps/dojo/src/config.ts index e27f3a4b8..df7e0f25e 100644 --- a/apps/dojo/src/config.ts +++ b/apps/dojo/src/config.ts @@ -32,13 +32,15 @@ export const featureConfig: FeatureConfig[] = [ createFeatureConfig({ id: "human_in_the_loop", name: "Human in the loop", - description: "Plan a task together and direct the Copilot to take the right steps", + description: + "Plan a task together and direct the Copilot to take the right steps", tags: ["HITL", "Interactivity"], }), createFeatureConfig({ id: "agentic_generative_ui", name: "Agentic Generative UI", - description: "Assign a long running task to your Copilot and see how it performs!", + description: + "Assign a long running task to your Copilot and see how it performs!", tags: ["Generative ui (agent)", "Long running task"], }), createFeatureConfig({ @@ -56,7 +58,8 @@ export const featureConfig: FeatureConfig[] = [ createFeatureConfig({ id: "predictive_state_updates", name: "Predictive State Updates", - description: "Use collaboration to edit a document in real time with your Copilot", + description: + "Use collaboration to edit a document in real time with your Copilot", tags: ["State", "Streaming", "Tools"], }), createFeatureConfig({ @@ -68,7 +71,8 @@ export const featureConfig: FeatureConfig[] = [ createFeatureConfig({ id: "subgraphs", name: "Subgraphs", - description: "Have your tasks performed by multiple agents, working together", + description: + "Have your tasks performed by multiple agents, working together", tags: ["Chat", "Multi-agent architecture", "Streaming", "Subgraphs"], }), createFeatureConfig({ @@ -77,6 +81,12 @@ export const featureConfig: FeatureConfig[] = [ description: "Chat with your Copilot and call frontend tools", tags: ["Chat", "Tools", "Streaming"], }), + createFeatureConfig({ + id: "vnext_chat", + name: "VNext Chat", + description: "Chat based on CopilotKit vnext", + tags: ["Chat", "VNext", "Streaming"], + }), ]; export default featureConfig; diff --git a/apps/dojo/src/env.ts b/apps/dojo/src/env.ts index c63344897..569c6cfdc 100644 --- a/apps/dojo/src/env.ts +++ b/apps/dojo/src/env.ts @@ -11,6 +11,7 @@ type envVars = { crewAiUrl: string; pydanticAIUrl: string; adkMiddlewareUrl: string; + a2aUrl: string; a2aMiddlewareBuildingsManagementUrl: string; a2aMiddlewareFinanceUrl: string; a2aMiddlewareItUrl: string; @@ -40,10 +41,11 @@ export default function getEnvVars(): envVars { pydanticAIUrl: process.env.PYDANTIC_AI_URL || 'http://localhost:9000', adkMiddlewareUrl: process.env.ADK_MIDDLEWARE_URL || 'http://localhost:8000', springAiUrl: process.env.SPRING_AI_URL || 'http://localhost:8080', + a2aUrl: process.env.A2A_URL || 'http://localhost:10002', a2aMiddlewareBuildingsManagementUrl: process.env.A2A_MIDDLEWARE_BUILDINGS_MANAGEMENT_URL || 'http://localhost:9001', a2aMiddlewareFinanceUrl: process.env.A2A_MIDDLEWARE_FINANCE_URL || 'http://localhost:9002', a2aMiddlewareItUrl: process.env.A2A_MIDDLEWARE_IT_URL || 'http://localhost:9003', a2aMiddlewareOrchestratorUrl: process.env.A2A_MIDDLEWARE_ORCHESTRATOR_URL || 'http://localhost:9000', customDomainTitle: customDomainTitle, } -} \ No newline at end of file +} diff --git a/apps/dojo/src/menu.ts b/apps/dojo/src/menu.ts index 25d02f283..36959a218 100644 --- a/apps/dojo/src/menu.ts +++ b/apps/dojo/src/menu.ts @@ -47,7 +47,11 @@ export const menuIntegrations: MenuIntegrationConfig[] = [ { id: "mastra", name: "Mastra", - features: ["agentic_chat", "backend_tool_rendering", "tool_based_generative_ui"], + features: [ + "agentic_chat", + "backend_tool_rendering", + "tool_based_generative_ui", + ], }, { id: "mastra-agent-local", @@ -60,15 +64,15 @@ export const menuIntegrations: MenuIntegrationConfig[] = [ ], }, { - id: 'spring-ai', - name: 'Spring AI', + id: "spring-ai", + name: "Spring AI", features: [ - 'agentic_chat', - 'shared_state', - 'tool_based_generative_ui', - 'human_in_the_loop', - 'agentic_generative_ui' - ] + "agentic_chat", + "shared_state", + "tool_based_generative_ui", + "human_in_the_loop", + "agentic_generative_ui", + ], }, { id: "pydantic-ai", @@ -99,7 +103,11 @@ export const menuIntegrations: MenuIntegrationConfig[] = [ { id: "agno", name: "Agno", - features: ["agentic_chat", "backend_tool_rendering", "tool_based_generative_ui"], + features: [ + "agentic_chat", + "backend_tool_rendering", + "tool_based_generative_ui", + ], }, { id: "llama-index", @@ -125,6 +133,11 @@ export const menuIntegrations: MenuIntegrationConfig[] = [ "tool_based_generative_ui", ], }, + { + id: "a2a-basic", + name: "A2A (Direct)", + features: ["vnext_chat"], + }, // Disabled until we can support Vercel AI SDK v5 // { // id: "vercel-ai-sdk", diff --git a/apps/dojo/src/types/integration.ts b/apps/dojo/src/types/integration.ts index 59d9b3adb..182933a6f 100644 --- a/apps/dojo/src/types/integration.ts +++ b/apps/dojo/src/types/integration.ts @@ -10,7 +10,8 @@ export type Feature = | "backend_tool_rendering" | "agentic_chat_reasoning" | "subgraphs" - | "a2a_chat"; + | "a2a_chat" + | "vnext_chat"; export interface MenuIntegrationConfig { id: string; diff --git a/apps/dojo/tsconfig.json b/apps/dojo/tsconfig.json index af157911a..a57e78c43 100644 --- a/apps/dojo/tsconfig.json +++ b/apps/dojo/tsconfig.json @@ -19,9 +19,9 @@ } ], "paths": { - "@/*": ["./src/*", "../../packages/client/src/*"], - "@ag-ui/client": ["../../packages/client/src"], - "@ag-ui/client/*": ["../../packages/client/src/*"] + "@/*": ["./src/*", "../../sdks/typescript/packages/client/src/*"], + "@ag-ui/client": ["../../sdks/typescript/packages/client/src"], + "@ag-ui/client/*": ["../../sdks/typescript/packages/client/src/*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], diff --git a/docs/concepts/events.mdx b/docs/concepts/events.mdx index 920b203b9..985576379 100644 --- a/docs/concepts/events.mdx +++ b/docs/concepts/events.mdx @@ -19,6 +19,7 @@ Events in the protocol are categorized by their purpose: | Text Message Events | Handle streaming textual content | | Tool Call Events | Manage tool executions by agents | | State Management Events | Synchronize state between agents and UI | +| Activity Events | Represent ongoing activity progress | | Special Events | Support custom functionality | | Draft Events | Proposed events under development | @@ -83,10 +84,12 @@ elements such as progress indicators or loading states. It also provides crucial identifiers that can be used to associate subsequent events with this specific run. -| Property | Description | -| ---------- | ----------------------------- | -| `threadId` | ID of the conversation thread | -| `runId` | ID of the agent run | +| Property | Description | +| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `threadId` | ID of the conversation thread | +| `runId` | ID of the agent run | +| `parentRunId` | (Optional) Lineage pointer for branching/time travel. If present, refers to a prior run within the same thread, creating a git-like append-only log | +| `input` | (Optional) The exact agent input payload that was sent to the agent for this run. May omit messages already present in history; compactEvents() will normalize | ### RunFinished @@ -234,18 +237,23 @@ automatic scrolling to ensure the full message is visible. ### TextMessageChunk -A self-contained text message event that combines start, content, and end. +Convenience event that expands to Start → Content → End automatically. -The `TextMessageChunk` event provides a convenient way to send complete text messages -in a single event instead of the three-event sequence (start, content, end). This is -particularly useful for simple messages or when the entire content is available at once. -The event includes both the message metadata and content, making it more efficient for -non-streaming scenarios. +The `TextMessageChunk` event lets you omit explicit `TextMessageStart` and +`TextMessageEnd` events. The client stream transformer expands chunks into the +standard triad: + +- First chunk for a message must include `messageId` and will emit + `TextMessageStart` (role defaults to `assistant` when not provided). +- Each chunk with a `delta` emits a `TextMessageContent` for the current + `messageId`. +- `TextMessageEnd` is emitted automatically when the stream switches to a new + message ID or when the stream completes. | Property | Description | | ----------- | ------------------------------------------------------------------------------------- | -| `messageId` | Optional unique identifier for the message | -| `role` | Optional role of the sender ("developer", "system", "assistant", "user", "tool") | +| `messageId` | Optional unique identifier for the message; required on the first chunk of a message | +| `role` | Optional role of the sender ("developer", "system", "assistant", "user") | | `delta` | Optional text content of the message | ## Tool Call Events @@ -356,6 +364,28 @@ the tool's output. | `content` | The actual result/output content from the tool execution | | `role` | Optional role identifier, typically "tool" for tool results | +### ToolCallChunk + +Convenience event that expands to Start → Args → End automatically. + +The `ToolCallChunk` event lets you omit explicit `ToolCallStart` and +`ToolCallEnd` events. The client stream transformer expands chunks into the +standard tool-call triad: + +- First chunk for a tool call must include `toolCallId` and `toolCallName` and + will emit `ToolCallStart` (propagating any `parentMessageId`). +- Each chunk with a `delta` emits a `ToolCallArgs` for the current + `toolCallId`. +- `ToolCallEnd` is emitted automatically when the stream switches to a new + `toolCallId` or when the stream completes. + +| Property | Description | +| ----------------- | --------------------------------------------------------------------------- | +| `toolCallId` | Optional on later chunks; required on the first chunk of a tool call | +| `toolCallName` | Optional on later chunks; required on the first chunk of a tool call | +| `parentMessageId` | Optional ID of the parent message | +| `delta` | Optional argument data chunk (often a JSON fragment) | + ## State Management Events These events are used to manage and synchronize the agent's state with the @@ -445,6 +475,41 @@ displayed to users. | ---------- | ------------------------ | | `messages` | Array of message objects | +## Activity Events + +Activity Events expose structured, in-progress activity updates that occur +between chat messages. They follow the same snapshot/delta pattern as the state +system so that UIs can render a complete activity view immediately and then +incrementally update it as new information arrives. + +### ActivitySnapshot + +Delivers a complete snapshot of an activity message. + +| Property | Description | +| --------------- | -------------------------------------------------------------------------------------------- | +| `messageId` | Identifier for the `ActivityMessage` this event updates | +| `activityType` | Activity discriminator (for example `"PLAN"`, `"SEARCH"`) | +| `content` | Structured JSON payload representing the full activity state | +| `replace` | Optional. Defaults to `true`. When `false`, ignore the snapshot if the message already exists | + +Frontends should either create a new `ActivityMessage` or replace the existing +one with the payload supplied by the snapshot. + +### ActivityDelta + +Applies incremental updates to an existing activity using JSON Patch operations. + +| Property | Description | +| --------------- | -------------------------------------------------------------------- | +| `messageId` | Identifier for the target activity message | +| `activityType` | Activity discriminator (mirrors the value from the most recent snapshot) | +| `patch` | Array of RFC 6902 JSON Patch operations to apply to the activity data | + +Activity deltas should be applied in order to the previously synchronized +activity content. If an application detects divergence, it can request or emit a +fresh `ActivitySnapshot` to resynchronize. + ## Special Events Special events provide flexibility in the protocol by allowing for @@ -492,32 +557,6 @@ implementation across frontends and agents. These events are currently in draft status and may change before finalization. They represent proposed extensions to the protocol that are under active development and discussion. -### Activity Events - -DRAFT [View Proposal](/drafts/activity-events) - -Activity events represent ongoing agent progress between chat messages, allowing frameworks to surface fine-grained activity updates chronologically. - -#### ActivitySnapshotEvent - -Provides the complete activity state at a point in time. - -| Property | Description | -| -------------- | ---------------------------------------------------- | -| `messageId` | Unique identifier for the ActivityMessage | -| `activityType` | Activity type (e.g., "PLAN", "SEARCH", "SCRAPE") | -| `content` | Complete activity state at this point | - -#### ActivityDeltaEvent - -Provides incremental updates to the activity state using JSON Patch operations. - -| Property | Description | -| -------------- | ---------------------------------------------------- | -| `messageId` | Unique identifier for the ActivityMessage | -| `activityType` | Activity type (e.g., "PLAN", "SEARCH", "SCRAPE") | -| `patch` | JSON Patch operations (RFC 6902) to apply | - ### Reasoning Events DRAFT [View Proposal](/drafts/reasoning) @@ -606,7 +645,7 @@ The `RunFinished` event gains new fields to support interrupt-aware workflows. | `outcome` | Optional: "success" or "interrupt" | | `interrupt` | Optional: Contains interrupt details when paused | -DRAFT [View Proposal](/drafts/serialization) +See [Serialization](/concepts/serialization) for lineage and input capture. #### RunStarted (Extended) diff --git a/docs/concepts/messages.mdx b/docs/concepts/messages.mdx index 4777cbfe1..c37011d1b 100644 --- a/docs/concepts/messages.mdx +++ b/docs/concepts/messages.mdx @@ -28,6 +28,10 @@ interface BaseMessage { } ``` +The `role` discriminator can be `"user"`, `"assistant"`, `"system"`, +`"tool"`, `"developer"`, or `"activity"`. Concrete message types extend this +shape with the fields they need. + ## Message Types AG-UI supports several message types to accommodate different participants in a @@ -41,11 +45,31 @@ Messages from the end user to the agent: interface UserMessage { id: string role: "user" - content: string // Text input from the user + content: string | InputContent[] // Text or multimodal input from the user name?: string // Optional user identifier } + +type InputContent = TextInputContent | BinaryInputContent + +interface TextInputContent { + type: "text" + text: string +} + +interface BinaryInputContent { + type: "binary" + mimeType: string + id?: string + url?: string + data?: string + filename?: string +} ``` +> For `BinaryInputContent`, provide at least one of `id`, `url`, or `data` to reference the payload. + +This structure keeps traditional plain-text inputs working while enabling richer payloads such as images, audio clips, or uploaded files in the same message. + ### Assistant Messages Messages from the AI assistant to the user: @@ -86,6 +110,24 @@ interface ToolMessage { } ``` +### Activity Messages + +Structured progress updates that appear between chat messages: + +```typescript +interface ActivityMessage { + id: string + role: "activity" + activityType: string // e.g. "PLAN", "SEARCH", "SCRAPE" + content: Record // Structured payload rendered by the frontend +} +``` + +Activity messages are populated by `ACTIVITY_SNAPSHOT` and `ACTIVITY_DELTA` +events. The structured `content` object gives frontends everything they need to +render bespoke status views, such as checklists, workflow progress, or search +results in flight. + ### Developer Messages Internal messages used for development or debugging: diff --git a/docs/concepts/middleware.mdx b/docs/concepts/middleware.mdx new file mode 100644 index 000000000..835d10566 --- /dev/null +++ b/docs/concepts/middleware.mdx @@ -0,0 +1,307 @@ +--- +title: "Middleware" +description: "Transform and intercept events in AG-UI agents" +--- + +# Middleware + +Middleware in AG-UI provides a powerful way to transform, filter, and augment the event streams that flow through agents. It enables you to add cross-cutting concerns like logging, authentication, rate limiting, and event filtering without modifying the core agent logic. + +## What is Middleware? + +Middleware sits between the agent execution and the event consumer, allowing you to: + +1. **Transform events** – Modify or enhance events as they flow through the pipeline +2. **Filter events** – Selectively allow or block certain events +3. **Add metadata** – Inject additional context or tracking information +4. **Handle errors** – Implement custom error recovery strategies +5. **Monitor execution** – Add logging, metrics, or debugging capabilities + +## How Middleware Works + +Middleware forms a chain where each middleware wraps the next, creating layers of functionality. When an agent runs, the event stream flows through each middleware in sequence. + +```typescript +import { AbstractAgent } from "@ag-ui/client" + +const agent = new MyAgent() + +// Middleware chain: logging -> auth -> filter -> agent +agent.use(loggingMiddleware, authMiddleware, filterMiddleware) + +// When agent runs, events flow through all middleware +await agent.runAgent() +``` + +## Function-Based Middleware + +For simple transformations, you can use function-based middleware. This is the most concise way to add middleware: + +```typescript +import { MiddlewareFunction } from "@ag-ui/client" +import { EventType } from "@ag-ui/core" + +const prefixMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + map(event => { + if (event.type === EventType.TEXT_MESSAGE_CHUNK) { + return { + ...event, + delta: `[AI]: ${event.delta}` + } + } + return event + }) + ) +} + +agent.use(prefixMiddleware) +``` + +## Class-Based Middleware + +For more complex scenarios requiring state or configuration, use class-based middleware: + +```typescript +import { Middleware } from "@ag-ui/client" +import { Observable } from "rxjs" +import { tap } from "rxjs/operators" + +class MetricsMiddleware extends Middleware { + private eventCount = 0 + + constructor(private metricsService: MetricsService) { + super() + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + const startTime = Date.now() + + return next.run(input).pipe( + tap(event => { + this.eventCount++ + this.metricsService.recordEvent(event.type) + }), + finalize(() => { + const duration = Date.now() - startTime + this.metricsService.recordDuration(duration) + this.metricsService.recordEventCount(this.eventCount) + }) + ) + } +} + +agent.use(new MetricsMiddleware(metricsService)) +``` + +## Built-in Middleware + +AG-UI provides several built-in middleware components for common use cases: + +### FilterToolCallsMiddleware + +Filter tool calls based on allowed or disallowed lists: + +```typescript +import { FilterToolCallsMiddleware } from "@ag-ui/client" + +// Only allow specific tools +const allowedFilter = new FilterToolCallsMiddleware({ + allowedToolCalls: ["search", "calculate"] +}) + +// Or block specific tools +const blockedFilter = new FilterToolCallsMiddleware({ + disallowedToolCalls: ["delete", "modify"] +}) + +agent.use(allowedFilter) +``` + +## Middleware Patterns + +### Logging Middleware + +```typescript +const loggingMiddleware: MiddlewareFunction = (input, next) => { + console.log("Request:", input.messages) + + return next.run(input).pipe( + tap(event => console.log("Event:", event.type)), + catchError(error => { + console.error("Error:", error) + throw error + }) + ) +} +``` + +### Authentication Middleware + +```typescript +class AuthMiddleware extends Middleware { + constructor(private apiKey: string) { + super() + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + // Add authentication to the context + const authenticatedInput = { + ...input, + context: [ + ...input.context, + { type: "auth", apiKey: this.apiKey } + ] + } + + return next.run(authenticatedInput) + } +} +``` + +### Rate Limiting Middleware + +```typescript +class RateLimitMiddleware extends Middleware { + private lastCall = 0 + + constructor(private minInterval: number) { + super() + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + const now = Date.now() + const timeSinceLastCall = now - this.lastCall + + if (timeSinceLastCall < this.minInterval) { + const delay = this.minInterval - timeSinceLastCall + return timer(delay).pipe( + switchMap(() => { + this.lastCall = Date.now() + return next.run(input) + }) + ) + } + + this.lastCall = now + return next.run(input) + } +} +``` + +## Combining Middleware + +You can combine multiple middleware to create sophisticated processing pipelines: + +```typescript +// Function middleware for simple logging +const logMiddleware: MiddlewareFunction = (input, next) => { + console.log(`Starting run ${input.runId}`) + return next.run(input) +} + +// Class middleware for authentication +const authMiddleware = new AuthMiddleware(apiKey) + +// Built-in middleware for filtering +const filterMiddleware = new FilterToolCallsMiddleware({ + allowedToolCalls: ["search", "summarize"] +}) + +// Apply all middleware in order +agent.use( + logMiddleware, // First: log the request + authMiddleware, // Second: add authentication + filterMiddleware // Third: filter tool calls +) +``` + +## Execution Order + +Middleware executes in the order it's added, with each middleware wrapping the next: + +1. First middleware receives the original input +2. It can modify the input before passing to the next middleware +3. Each middleware processes events from the next in the chain +4. The final middleware calls the actual agent + +```typescript +agent.use(middleware1, middleware2, middleware3) + +// Execution flow: +// → middleware1 +// → middleware2 +// → middleware3 +// → agent.run() +// ← events flow back through middleware3 +// ← events flow back through middleware2 +// ← events flow back through middleware1 +``` + +## Best Practices + +1. **Keep middleware focused** – Each middleware should have a single responsibility +2. **Handle errors gracefully** – Use RxJS error handling operators +3. **Avoid blocking operations** – Use async patterns for I/O operations +4. **Document side effects** – Clearly indicate if middleware modifies state +5. **Test middleware independently** – Write unit tests for each middleware +6. **Consider performance** – Be mindful of processing overhead in the event stream + +## Advanced Use Cases + +### Conditional Middleware + +Apply middleware based on runtime conditions: + +```typescript +const conditionalMiddleware: MiddlewareFunction = (input, next) => { + if (input.context.some(c => c.type === "debug")) { + // Apply debug logging + return next.run(input).pipe( + tap(event => console.debug(event)) + ) + } + return next.run(input) +} +``` + +### Event Transformation + +Transform specific event types: + +```typescript +const transformMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + map(event => { + if (event.type === EventType.TOOL_CALL_START) { + // Add timestamp to tool calls + return { + ...event, + metadata: { + ...event.metadata, + timestamp: Date.now() + } + } + } + return event + }) + ) +} +``` + +### Stream Control + +Control the flow of events: + +```typescript +const throttleMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + // Throttle text message chunks to prevent overwhelming the UI + throttleTime(50, undefined, { leading: true, trailing: true }) + ) +} +``` + +## Conclusion + +Middleware provides a flexible and powerful way to extend AG-UI agents without modifying their core logic. Whether you need simple event transformation or complex stateful processing, the middleware system offers the tools to build robust, maintainable agent applications. \ No newline at end of file diff --git a/docs/concepts/serialization.mdx b/docs/concepts/serialization.mdx new file mode 100644 index 000000000..8a4196131 --- /dev/null +++ b/docs/concepts/serialization.mdx @@ -0,0 +1,188 @@ +--- +title: "Serialization" +description: "Serialize event streams for history restore, branching, and compaction in AG-UI" +--- + +# Serialization + +Serialization in AG-UI provides a standard way to persist and restore the event +stream that drives an agent–UI session. With a serialized stream you can: + +- Restore chat history and UI state after reloads or reconnects +- Attach to running agents and continue receiving events +- Create branches (time travel) from any prior run +- Compact stored history to reduce size without losing meaning + +This page explains the model, the updated event fields, and practical usage +patterns with examples. + +## Core Concepts + +- Stream serialization – Convert the full event history to and from a portable + representation (e.g., JSON) for storage in databases, files, or logs. +- Event compaction – Reduce verbose streams to snapshots while preserving + semantics (e.g., merge content chunks, collapse deltas into snapshots). +- Run lineage – Track branches of conversation using a `parentRunId`, forming + a git‑like append‑only log that enables time travel and alternative paths. + +## Updated Event Fields + +The `RunStarted` event includes additional optional fields: + +```ts +type RunStartedEvent = BaseEvent & { + type: EventType.RUN_STARTED + threadId: string + runId: string + /** Parent for branching/time travel within the same thread */ + parentRunId?: string + /** Exact agent input for this run (may omit messages already in history) */ + input?: AgentInput +} +``` + +These fields enable lineage tracking and let implementations record precisely +what was passed to the agent, independent of previously recorded messages. + +## Event Compaction + +Compaction reduces noise in an event stream while keeping the same observable +outcome. A typical implementation provides a utility: + +```ts +declare function compactEvents(events: BaseEvent[]): BaseEvent[] +``` + +Common compaction rules include: + +- Message streams – Combine `TEXT_MESSAGE_*` sequences into a single message + snapshot; concatenate adjacent `TEXT_MESSAGE_CONTENT` for the same message. +- Tool calls – Collapse tool call start/content/end into a compact record. +- State – Merge consecutive `STATE_DELTA` events into a single final + `STATE_SNAPSHOT` and discard superseded updates. +- Run input normalization – Remove from `RunStarted.input.messages` any + messages already present earlier in the stream. + +## Branching and Time Travel + +Setting `parentRunId` on a `RunStarted` event creates a git‑like lineage. The +stream becomes an immutable append‑only log where each run can branch from any +previous run. + +```mermaid +gitGraph + commit id: "run1" + commit id: "run2" + branch alternative + checkout alternative + commit id: "run3 (parent run2)" + commit id: "run4" + checkout main + commit id: "run5 (parent run2)" + commit id: "run6" +``` + +Benefits: + +- Multiple branches in the same serialized log +- Immutable history (append‑only) +- Deterministic time travel to any point + +## Examples + +### Basic Serialization + +```ts +// Serialize event stream +const events: BaseEvent[] = [...]; +const serialized = JSON.stringify(events); + +await storage.save(threadId, serialized); + +// Restore and compact later +const restored = JSON.parse(await storage.load(threadId)); +const compacted = compactEvents(restored); +``` + +### Event Compaction + +Before: + +```ts +[ + { type: "TEXT_MESSAGE_START", messageId: "msg1", role: "user" }, + { type: "TEXT_MESSAGE_CONTENT", messageId: "msg1", delta: "Hello " }, + { type: "TEXT_MESSAGE_CONTENT", messageId: "msg1", delta: "world" }, + { type: "TEXT_MESSAGE_END", messageId: "msg1" }, + { type: "STATE_DELTA", patch: { op: "add", path: "/foo", value: 1 } }, + { type: "STATE_DELTA", patch: { op: "replace", path: "/foo", value: 2 } }, +] +``` + +After: + +```ts +[ + { + type: "MESSAGES_SNAPSHOT", + messages: [{ id: "msg1", role: "user", content: "Hello world" }], + }, + { + type: "STATE_SNAPSHOT", + state: { foo: 2 }, + }, +] +``` + +### Branching With `parentRunId` + +```ts +// Original run +{ + type: "RUN_STARTED", + threadId: "thread1", + runId: "run1", + input: { messages: ["Tell me about Paris"] }, +} + +// Branch from run1 +{ + type: "RUN_STARTED", + threadId: "thread1", + runId: "run2", + parentRunId: "run1", + input: { messages: ["Actually, tell me about London instead"] }, +} +``` + +### Normalized Input + +```ts +// First run includes full message +{ + type: "RUN_STARTED", + runId: "run1", + input: { messages: [{ id: "msg1", role: "user", content: "Hello" }] }, +} + +// Second run omits already‑present message +{ + type: "RUN_STARTED", + runId: "run2", + input: { messages: [{ id: "msg2", role: "user", content: "How are you?" }] }, + // msg1 omitted; it already exists in history +} +``` + +## Implementation Notes + +- Provide SDK helpers for compaction and (de)serialization. +- Store streams append‑only; prefer incremental writes when possible. +- Consider compression when persisting long histories. +- Add indexes by `threadId`, `runId`, and timestamps for fast retrieval. + +## See Also + +- Concepts: [Events](/concepts/events), [State Management](/concepts/state) +- SDKs: TypeScript encoder and core event types + diff --git a/docs/docs.json b/docs/docs.json index 664f672bd..b92fca9ba 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -40,8 +40,10 @@ "concepts/architecture", "concepts/events", "concepts/agents", + "concepts/middleware", "concepts/messages", "concepts/state", + "concepts/serialization", "concepts/tools" ] }, @@ -49,9 +51,7 @@ "group": "Draft Proposals", "pages": [ "drafts/overview", - "drafts/activity-events", "drafts/reasoning", - "drafts/serialization", "drafts/multimodal-messages", "drafts/interrupts", "drafts/generative-ui", @@ -85,7 +85,9 @@ "sdk/js/client/overview", "sdk/js/client/abstract-agent", "sdk/js/client/http-agent", - "sdk/js/client/subscriber" + "sdk/js/client/middleware", + "sdk/js/client/subscriber", + "sdk/js/client/compaction" ] }, "sdk/js/encoder", diff --git a/docs/drafts/activity-events.mdx b/docs/drafts/activity-events.mdx deleted file mode 100644 index a1eb5f88c..000000000 --- a/docs/drafts/activity-events.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Activity Events -description: - Proposal for representing ongoing agent progress between chat messages ---- - -# Activity Events Proposal - -## Summary - -### Problem Statement - -Users want to render "activity" updates inline with chat, not just at run start -or end. Currently, there's no standardized way to represent ongoing agent -progress between chat messages. - -### Motivation - -AG-UI is extended with **ActivityEvents** and **ActivityMessages** to represent -ongoing agent progress in between chat messages. This allows frameworks to -surface fine-grained activity updates chronologically, giving users immediate -visibility into what an agent is doing without waiting for the next message or -run boundary. - -## Status - -- **Status**: Draft -- **Author(s)**: Markus Ecker (mail@mme.xyz) - -## Background - -Users want real-time visibility into agent activities as they happen. Consider -this example UI: - -``` -+------------------------------------------------------------+ -| I will search the internet for relevant information | <- TextMessage -+------------------------------------------------------------+ -+------------------------------------------------------------+ -| āœ“ checking reddit | <- ActivityMessage -| searching X.com... | -+------------------------------------------------------------+ -``` - -### Use Cases - -- **Workflows**: Step-by-step progress through workflow execution -- **Planning**: Intermediate planning or tool use visibility -- **Custom frameworks**: Signals representing ongoing work in any agent system - -## Challenges - -- **Flexibility**: Must handle arbitrary activity data from different frameworks -- **Serializability**: Events must be replayable and rehydrated for session - recovery -- **Extensibility**: Developers should define custom renderers per activity - type, with a generic fallback -- **Chronology**: Activities must interleave naturally with chat and run events - -## Detailed Specification - -### Overview - -This proposal introduces new concepts to the AG-UI protocol: - -1. **ActivitySnapshotEvent** and **ActivityDeltaEvent**: Two new event types following the established state management pattern -2. **ActivityMessage**: A new message type alongside TextMessage, ToolMessage, - etc. - -Frameworks may emit ActivityEvents, and frontends can render them inline with -chat. - -### New Events: ActivitySnapshotEvent and ActivityDeltaEvent - -Following the established pattern in AG-UI (similar to `StateSnapshotEvent` and `StateDeltaEvent`), activities are represented using two complementary events: - -#### ActivitySnapshotEvent - -Provides the complete activity state at a point in time. - -```typescript -type ActivitySnapshotEvent = BaseEvent & { - type: EventType.ACTIVITY_SNAPSHOT - /** - * Unique identifier for the ActivityMessage this event belongs to. - */ - messageId: string - /** - * Activity type, e.g. "PLAN", "SEARCH", "SCRAPE" - */ - activityType: string - /** - * Complete activity state at this point in time. - */ - content: Record -} -``` - -#### ActivityDeltaEvent - -Provides incremental updates to the activity state. - -```typescript -type ActivityDeltaEvent = BaseEvent & { - type: EventType.ACTIVITY_DELTA - /** - * Unique identifier for the ActivityMessage this event belongs to. - */ - messageId: string - /** - * Activity type, e.g. "PLAN", "SEARCH", "SCRAPE" - */ - activityType: string - /** - * JSON Patch operations to apply to the current activity state. - * Follows RFC 6902 semantics. - */ - patch: JSONPatchOperation[] -} -``` - -#### Example Events - -Initial activity snapshot: - -```json -{ - "id": "evt_001", - "ts": 1714064100000, - "type": "ACTIVITY_SNAPSHOT", - "messageId": "msg_789", - "activityType": "PLAN", - "content": { - "tasks": ["check reddit", "search X.com"] - } -} -``` - -Incremental update via patch: - -```json -{ - "id": "evt_002", - "ts": 1714064120000, - "type": "ACTIVITY_DELTA", - "messageId": "msg_789", - "activityType": "PLAN", - "patch": [ - { - "op": "replace", - "path": "/tasks/0", - "value": "āœ“ check reddit" - } - ] -} -``` - -### New Message: ActivityMessage - -```typescript -type ActivityMessage = { - id: string - role: "activity" - activityType: string - /** - * Finalized activity content as of compaction. - */ - content: Record -} -``` - -### Rendering Strategy - -- **Generic renderer**: Displays raw snapshot/patch as JSON or formatted text -- **Custom renderer**: Developers can register a renderer per `activityType`: - - `"PLAN"` → Interactive checklist component - - `"SEARCH"` → Live status with progress indicators - - `"WORKFLOW"` → Step-by-step workflow visualization - -## Implementation Considerations - -### Client SDK Changes - -TypeScript SDK additions: - -- New `ActivitySnapshotEvent` and `ActivityDeltaEvent` types in `@ag-ui/core` -- New `ActivityMessage` type in message unions -- Activity renderer registry in `@ag-ui/client` -- JSON Patch utilities for activity updates - -Python SDK additions: - -- New `ActivitySnapshotEvent` and `ActivityDeltaEvent` classes in `ag_ui.core.events` -- New `ActivityMessage` class in message types -- Activity serialization/deserialization support -- JSON Patch utilities for activity updates - -### Integration Impact - -- **Planning Frameworks**: Can emit ActivitySnapshotEvent/ActivityDeltaEvent during planning or tool - execution phases -- **Workflow Systems**: Can surface step-by-step workflow progress as - ActivitySnapshotEvent/ActivityDeltaEvent -- **Other frameworks**: May emit ActivitySnapshotEvent/ActivityDeltaEvent freely; AG-UI will serialize - them like other events - -## Examples and Use Cases - -### Example 1: Web Search Activity - -```typescript -// Agent emits initial search activity snapshot -agent.emitActivitySnapshot({ - messageId: "msg_123", - activityType: "SEARCH", - content: { - sources: [ - { name: "Reddit", status: "pending" }, - { name: "X.com", status: "pending" }, - { name: "Google", status: "pending" }, - ], - }, -}) - -// Update as search progresses -agent.emitActivityDelta({ - messageId: "msg_123", - activityType: "SEARCH", - patch: [ - { - op: "replace", - path: "/sources/0/status", - value: "complete", - } - ], -}) -``` - -### Use Case: Multi-Step Workflow Visibility - -A data analysis agent performing multiple steps: - -1. Loading dataset → ActivitySnapshotEvent/ActivityDeltaEvent shows progress bar -2. Cleaning data → ActivitySnapshotEvent/ActivityDeltaEvent shows rows processed -3. Running analysis → ActivitySnapshotEvent/ActivityDeltaEvent shows current computation -4. Generating report → ActivitySnapshotEvent/ActivityDeltaEvent shows sections completed - -Each step appears inline with chat, giving users real-time feedback. - -## Testing Strategy - -- Unit tests for ActivitySnapshotEvent/ActivityDeltaEvent serialization/deserialization -- Integration tests with mock frameworks emitting ActivitySnapshotEvent/ActivityDeltaEvent -- E2E tests in AG-UI Dojo demonstrating activity rendering -- Performance benchmarks for high-frequency activity updates -- JSON Patch application correctness tests - -## References - -- [JSON Patch RFC 6902](https://tools.ietf.org/html/rfc6902) -- [AG-UI Events Documentation](/concepts/events) -- [AG-UI Messages Documentation](/concepts/messages) diff --git a/docs/drafts/multimodal-messages.mdx b/docs/drafts/multimodal-messages.mdx index 969032fc9..6b375ff89 100644 --- a/docs/drafts/multimodal-messages.mdx +++ b/docs/drafts/multimodal-messages.mdx @@ -21,7 +21,7 @@ apps. Inputs may include text, images, audio, and files. ## Status -- **Status**: Draft +- **Status**: Implemented — October 16, 2025 - **Author(s)**: Markus Ecker (mail@mme.xyz) ## Detailed Specification diff --git a/docs/drafts/overview.mdx b/docs/drafts/overview.mdx index a8c307bc5..1acc15a44 100644 --- a/docs/drafts/overview.mdx +++ b/docs/drafts/overview.mdx @@ -10,15 +10,6 @@ This section contains draft changes being considered for the AG-UI protocol. The ## Current Drafts - - Represent ongoing agent progress between chat messages with fine-grained activity updates - Support for LLM reasoning visibility and continuity with encrypted content - - Stream serialization for chat history restoration and event compaction - + void } Returns an object with an `unsubscribe()` method to remove the subscriber when no longer needed. +### use() + +Adds middleware to the agent's event processing pipeline. + +```typescript +use(...middlewares: (Middleware | MiddlewareFunction)[]): this +``` + +Middleware can be either: +- **Function middleware**: Simple functions that transform the event stream +- **Class middleware**: Instances of the `Middleware` class for stateful operations + +```typescript +// Function middleware +agent.use((input, next) => { + console.log("Processing:", input.runId); + return next.run(input); +}); + +// Class middleware +agent.use(new FilterToolCallsMiddleware({ + allowedToolCalls: ["search"] +})); + +// Chain multiple middleware +agent.use(loggingMiddleware, authMiddleware, filterMiddleware); +``` + +Middleware executes in the order added, with each wrapping the next. See the [Middleware documentation](/sdk/js/client/middleware) for more details. + ### abortRun() Cancels the current agent execution. @@ -111,6 +141,33 @@ Creates a deep copy of the agent instance. clone(): AbstractAgent ``` +### connectAgent() + +Establishes a persistent connection with an agent that implements the +`connect()` method. + +```typescript +connectAgent(parameters?: RunAgentParameters, subscriber?: AgentSubscriber): Promise +``` + +Similar to `runAgent()` but uses the `connect()` method internally. The agent +must implement `connect()` or this functionality must be provided by a framework +like [CopilotKit](https://copilotkit.ai). + +## Observable Properties + +### events$ + +An observable stream of all events emitted during agent execution. + +```typescript +events$: Observable +``` + +This property provides direct access to the agent's event stream. Events are +stored using a `ReplaySubject`, allowing late subscribers will receive all +historical events. + ## Properties - `agentId`: Unique identifier for the agent instance @@ -118,6 +175,8 @@ clone(): AbstractAgent - `threadId`: Conversation thread identifier - `messages`: Array of conversation messages - `state`: Current agent state object +- `events$`: Observable stream of all `BaseEvent` objects emitted during agent + execution (replayed for late subscribers) ## Protected Methods @@ -131,6 +190,17 @@ Executes the agent and returns an observable event stream. protected abstract run(input: RunAgentInput): RunAgent ``` +### connect() + +Establishes a persistent connection and returns an observable event stream. + +```typescript +protected connect(input: RunAgentInput): RunAgent +``` + +Override this method to implement persistent connections. Default implementation +throws `ConnectNotImplementedError`. + ### apply() Processes events from the run and updates the agent state. diff --git a/docs/sdk/js/client/compaction.mdx b/docs/sdk/js/client/compaction.mdx new file mode 100644 index 000000000..415c0556c --- /dev/null +++ b/docs/sdk/js/client/compaction.mdx @@ -0,0 +1,76 @@ +--- +title: "Stream Compaction" +description: "compactEvents utility for reducing verbose streaming sequences" +--- + +# compactEvents + +`compactEvents` reduces verbose streaming sequences in an event array while +preserving semantics. Use it to shrink logs before persistence or to simplify +post‑processing of Server‑Sent Events (SSE) streams. + +```ts +import { compactEvents, EventType, type BaseEvent } from "@ag-ui/client" + +const compacted: BaseEvent[] = compactEvents(events) +``` + +## API + +```ts +function compactEvents(events: BaseEvent[]): BaseEvent[] +``` + +## What it does + +- Text messages: Groups `TEXT_MESSAGE_START` → `TEXT_MESSAGE_CONTENT*` → + `TEXT_MESSAGE_END` for the same `messageId`, concatenating all `delta` + chunks into a single `TEXT_MESSAGE_CONTENT` event. +- Tool calls: Groups `TOOL_CALL_START` → `TOOL_CALL_ARGS*` → `TOOL_CALL_END` + for the same `toolCallId`, concatenating all `delta` chunks into a single + `TOOL_CALL_ARGS` event. +- Interleaved events: Any events that occur between a start/end pair are moved + after that sequence so the streaming block remains contiguous. +- Pass‑through: All other events (state, custom, etc.) are preserved unchanged. + +## Example + +Before: + +```ts +[ + { type: EventType.TEXT_MESSAGE_START, messageId: "m1", role: "assistant" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "m1", delta: "Hello" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "m1", delta: " " }, + { type: EventType.CUSTOM, name: "thinking" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "m1", delta: "world" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "m1" }, +] +``` + +After: + +```ts +[ + { type: EventType.TEXT_MESSAGE_START, messageId: "m1", role: "assistant" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "m1", delta: "Hello world" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "m1" }, + { type: EventType.CUSTOM, name: "thinking" }, +] +``` + +Tool call compaction works analogously for `TOOL_CALL_ARGS` chunks. + +## When to use + +- Persisting event history (store fewer frames with the same meaning) +- Preparing snapshots for analytics or export +- Reducing noise in tests or debugging output + +## Notes & limitations + +- This utility focuses on message and tool‑call streams. It does not modify + state events (`STATE_SNAPSHOT`/`STATE_DELTA`) or generate message snapshots. +- For background and broader patterns (branching, normalization), see + [Serialization](/concepts/serialization). + diff --git a/docs/sdk/js/client/middleware.mdx b/docs/sdk/js/client/middleware.mdx new file mode 100644 index 000000000..31462257b --- /dev/null +++ b/docs/sdk/js/client/middleware.mdx @@ -0,0 +1,408 @@ +--- +title: "Middleware" +description: "Event stream transformation and filtering for AG-UI agents" +--- + +# Middleware + +The middleware system in `@ag-ui/client` provides a powerful way to transform, filter, and augment event streams flowing through agents. Middleware can intercept and modify events, add logging, implement authentication, filter tool calls, and more. + +```typescript +import { Middleware, MiddlewareFunction, FilterToolCallsMiddleware } from "@ag-ui/client" +``` + +## Types + +### MiddlewareFunction + +A function that transforms the event stream. + +```typescript +type MiddlewareFunction = ( + input: RunAgentInput, + next: AbstractAgent +) => Observable +``` + +### Middleware + +Abstract base class for creating middleware. + +```typescript +abstract class Middleware { + abstract run( + input: RunAgentInput, + next: AbstractAgent + ): Observable +} +``` + +## Function-Based Middleware + +The simplest way to create middleware is with a function. Function middleware is ideal for stateless transformations. + +### Basic Example + +```typescript +const loggingMiddleware: MiddlewareFunction = (input, next) => { + console.log(`[${new Date().toISOString()}] Starting run ${input.runId}`) + + return next.run(input).pipe( + tap(event => console.log(`Event: ${event.type}`)), + finalize(() => console.log(`Run ${input.runId} completed`)) + ) +} + +agent.use(loggingMiddleware) +``` + +### Transforming Events + +```typescript +const prefixMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + map(event => { + if (event.type === EventType.TEXT_MESSAGE_CHUNK) { + return { + ...event, + delta: `[Assistant]: ${event.delta}` + } + } + return event + }) + ) +} +``` + +### Error Handling + +```typescript +const errorMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + catchError(error => { + console.error("Agent error:", error) + + // Return error event + return of({ + type: EventType.RUN_ERROR, + message: error.message + } as BaseEvent) + }) + ) +} +``` + +## Class-Based Middleware + +For stateful operations or complex logic, extend the `Middleware` class. + +### Basic Implementation + +```typescript +class CounterMiddleware extends Middleware { + private totalEvents = 0 + + run(input: RunAgentInput, next: AbstractAgent): Observable { + let runEvents = 0 + + return next.run(input).pipe( + tap(() => { + runEvents++ + this.totalEvents++ + }), + finalize(() => { + console.log(`Run events: ${runEvents}, Total: ${this.totalEvents}`) + }) + ) + } +} + +agent.use(new CounterMiddleware()) +``` + +### Configuration-Based Middleware + +```typescript +class AuthMiddleware extends Middleware { + constructor( + private apiKey: string, + private headerName: string = "Authorization" + ) { + super() + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + // Add authentication to context + const authenticatedInput = { + ...input, + context: [ + ...input.context, + { + type: "auth", + [this.headerName]: `Bearer ${this.apiKey}` + } + ] + } + + return next.run(authenticatedInput) + } +} + +agent.use(new AuthMiddleware(process.env.API_KEY)) +``` + +## Built-in Middleware + +### FilterToolCallsMiddleware + +Filters tool calls based on allowed or disallowed lists. + +```typescript +import { FilterToolCallsMiddleware } from "@ag-ui/client" +``` + +#### Configuration + +```typescript +type FilterToolCallsConfig = + | { allowedToolCalls: string[]; disallowedToolCalls?: never } + | { disallowedToolCalls: string[]; allowedToolCalls?: never } +``` + +#### Allow Specific Tools + +```typescript +const allowFilter = new FilterToolCallsMiddleware({ + allowedToolCalls: ["search", "calculate", "summarize"] +}) + +agent.use(allowFilter) +``` + +#### Block Specific Tools + +```typescript +const blockFilter = new FilterToolCallsMiddleware({ + disallowedToolCalls: ["delete", "modify", "execute"] +}) + +agent.use(blockFilter) +``` + +## Middleware Patterns + +### Timing Middleware + +```typescript +const timingMiddleware: MiddlewareFunction = (input, next) => { + const startTime = performance.now() + + return next.run(input).pipe( + finalize(() => { + const duration = performance.now() - startTime + console.log(`Execution time: ${duration.toFixed(2)}ms`) + }) + ) +} +``` + +### Rate Limiting + +```typescript +class RateLimitMiddleware extends Middleware { + private lastCall = 0 + + constructor(private minInterval: number) { + super() + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + const now = Date.now() + const elapsed = now - this.lastCall + + if (elapsed < this.minInterval) { + // Delay the execution + return timer(this.minInterval - elapsed).pipe( + switchMap(() => { + this.lastCall = Date.now() + return next.run(input) + }) + ) + } + + this.lastCall = now + return next.run(input) + } +} + +// Limit to one request per second +agent.use(new RateLimitMiddleware(1000)) +``` + +### Retry Logic + +```typescript +const retryMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + retry({ + count: 3, + delay: (error, retryCount) => { + console.log(`Retry attempt ${retryCount}`) + return timer(1000 * retryCount) // Exponential backoff + } + }) + ) +} +``` + +### Caching + +```typescript +class CacheMiddleware extends Middleware { + private cache = new Map() + + run(input: RunAgentInput, next: AbstractAgent): Observable { + const cacheKey = this.getCacheKey(input) + + if (this.cache.has(cacheKey)) { + console.log("Cache hit") + return from(this.cache.get(cacheKey)!) + } + + const events: BaseEvent[] = [] + + return next.run(input).pipe( + tap(event => events.push(event)), + finalize(() => { + this.cache.set(cacheKey, events) + }) + ) + } + + private getCacheKey(input: RunAgentInput): string { + // Create a cache key from the input + return JSON.stringify({ + messages: input.messages, + tools: input.tools.map(t => t.name) + }) + } +} +``` + +## Chaining Middleware + +Multiple middleware can be combined to create sophisticated processing pipelines. + +```typescript +// Create middleware instances +const logger = loggingMiddleware +const auth = new AuthMiddleware(apiKey) +const filter = new FilterToolCallsMiddleware({ + allowedToolCalls: ["search"] +}) +const rateLimit = new RateLimitMiddleware(1000) + +// Apply middleware in order +agent.use( + logger, // First: Log all events + auth, // Second: Add authentication + rateLimit, // Third: Apply rate limiting + filter // Fourth: Filter tool calls +) + +// Execution flow: +// logger → auth → rateLimit → filter → agent → filter → rateLimit → auth → logger +``` + +## Advanced Usage + +### Conditional Middleware + +```typescript +const debugMiddleware: MiddlewareFunction = (input, next) => { + const isDebug = input.context.some(c => c.type === "debug") + + if (!isDebug) { + return next.run(input) + } + + return next.run(input).pipe( + tap(event => { + console.debug("[DEBUG]", JSON.stringify(event, null, 2)) + }) + ) +} +``` + +### Event Filtering + +```typescript +const filterEventsMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + filter(event => { + // Only allow specific event types + return [ + EventType.RUN_STARTED, + EventType.TEXT_MESSAGE_CHUNK, + EventType.RUN_FINISHED + ].includes(event.type) + }) + ) +} +``` + +### Stream Manipulation + +```typescript +const bufferMiddleware: MiddlewareFunction = (input, next) => { + return next.run(input).pipe( + // Buffer text chunks and emit them in batches + bufferWhen(() => + interval(100).pipe( + filter(() => true) + ) + ), + map(events => events.flat()) + ) +} +``` + +## Best Practices + +1. **Single Responsibility**: Each middleware should focus on one concern +2. **Error Handling**: Always handle errors gracefully and consider recovery strategies +3. **Performance**: Be mindful of processing overhead in high-throughput scenarios +4. **State Management**: Use class-based middleware when state is required +5. **Testing**: Write unit tests for each middleware independently +6. **Documentation**: Document middleware behavior and side effects + +## TypeScript Support + +The middleware system is fully typed for excellent IDE support: + +```typescript +import { + Middleware, + MiddlewareFunction, + FilterToolCallsMiddleware +} from "@ag-ui/client" +import { RunAgentInput, BaseEvent, EventType } from "@ag-ui/core" + +// Type-safe middleware function +const typedMiddleware: MiddlewareFunction = ( + input: RunAgentInput, + next: AbstractAgent +): Observable => { + return next.run(input) +} + +// Type-safe middleware class +class TypedMiddleware extends Middleware { + run( + input: RunAgentInput, + next: AbstractAgent + ): Observable { + return next.run(input) + } +} +``` \ No newline at end of file diff --git a/docs/sdk/js/client/overview.mdx b/docs/sdk/js/client/overview.mdx index 0bfcf085f..3902715c5 100644 --- a/docs/sdk/js/client/overview.mdx +++ b/docs/sdk/js/client/overview.mdx @@ -61,6 +61,30 @@ Concrete implementation for HTTP-based agent connectivity: efficient event encoding format +## Middleware + +Transform and intercept event streams flowing through agents with a flexible +middleware system: + +- [Function Middleware](/sdk/js/client/middleware#function-based-middleware) - Simple + transformations with plain functions +- [Class Middleware](/sdk/js/client/middleware#class-based-middleware) - Stateful + middleware with configuration +- [Built-in Middleware](/sdk/js/client/middleware#built-in-middleware) - + FilterToolCallsMiddleware and more +- [Middleware Patterns](/sdk/js/client/middleware#middleware-patterns) - Common + use cases and examples + + + Powerful event stream transformation and filtering for AG-UI agents + + ## AgentSubscriber Event-driven subscriber system for handling agent lifecycle events and state diff --git a/docs/sdk/js/client/subscriber.mdx b/docs/sdk/js/client/subscriber.mdx index ee010488f..f97ab1389 100644 --- a/docs/sdk/js/client/subscriber.mdx +++ b/docs/sdk/js/client/subscriber.mdx @@ -271,6 +271,32 @@ Called when a complete message history snapshot is provided. onMessagesSnapshotEvent?(params: { event: MessagesSnapshotEvent } & AgentSubscriberParams): MaybePromise ``` +#### onActivitySnapshotEvent() + +Called when an activity snapshot is received. The handler receives both the raw +event and any existing `ActivityMessage` (if present) so you can inspect or +replace it before the default client logic runs. + +```typescript +onActivitySnapshotEvent?(params: { + event: ActivitySnapshotEvent + activityMessage?: ActivityMessage + existingMessage?: Message +} & AgentSubscriberParams): MaybePromise +``` + +#### onActivityDeltaEvent() + +Triggered for each activity delta. Use this hook to transform or debounce the +incoming JSON Patch operations before they update the conversation transcript. + +```typescript +onActivityDeltaEvent?(params: { + event: ActivityDeltaEvent + activityMessage?: ActivityMessage +} & AgentSubscriberParams): MaybePromise +``` + #### onRawEvent() Handler for raw, unprocessed events. diff --git a/docs/sdk/js/core/events.mdx b/docs/sdk/js/core/events.mdx index ea119090c..569be5d21 100644 --- a/docs/sdk/js/core/events.mdx +++ b/docs/sdk/js/core/events.mdx @@ -26,6 +26,8 @@ enum EventType { STATE_SNAPSHOT = "STATE_SNAPSHOT", STATE_DELTA = "STATE_DELTA", MESSAGES_SNAPSHOT = "MESSAGES_SNAPSHOT", + ACTIVITY_SNAPSHOT = "ACTIVITY_SNAPSHOT", + ACTIVITY_DELTA = "ACTIVITY_DELTA", RAW = "RAW", CUSTOM = "CUSTOM", RUN_STARTED = "RUN_STARTED", @@ -68,13 +70,17 @@ type RunStartedEvent = BaseEvent & { type: EventType.RUN_STARTED threadId: string runId: string + parentRunId?: string + input?: RunAgentInput } ``` -| Property | Type | Description | -| ---------- | -------- | ----------------------------- | -| `threadId` | `string` | ID of the conversation thread | -| `runId` | `string` | ID of the agent run | +| Property | Type | Description | +| -------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `threadId` | `string` | ID of the conversation thread | +| `runId` | `string` | ID of the agent run | +| `parentRunId` | `string` (optional) | (Optional) Lineage pointer for branching/time travel. If present, refers to a prior run within the same thread | +| `input` | `RunAgentInput` (optional) | (Optional) The exact agent input payload sent to the agent for this run. May omit messages already in history | ### RunFinishedEvent @@ -195,6 +201,29 @@ type TextMessageEndEvent = BaseEvent & { | ----------- | -------- | ----------------------------------------- | | `messageId` | `string` | Matches the ID from TextMessageStartEvent | +### TextMessageChunkEvent + +Convenience event that expands to `TextMessageStart` → `TextMessageContent` → +`TextMessageEnd` automatically in the JS/TS client. + +```typescript +type TextMessageChunkEvent = BaseEvent & { + type: EventType.TEXT_MESSAGE_CHUNK + messageId?: string // required on the first chunk for a message + role?: 'developer' | 'system' | 'assistant' | 'user' + delta?: string +} +``` + +Behavior +- Omit start/end: The client transforms chunk sequences into the standard + start/content/end triad, so you don’t need to emit them manually. +- First chunk requirements: The first chunk for a message must include + `messageId`. When `role` is omitted, it defaults to `assistant`. +- Streaming: Subsequent chunks with the same `messageId` emit + `TextMessageContent` events. `TextMessageEnd` is emitted automatically when a + different message starts or when the stream completes. + ## Tool Call Events These events represent the lifecycle of tool calls made by agents. @@ -320,6 +349,46 @@ type MessagesSnapshotEvent = BaseEvent & { | ---------- | ----------- | ------------------------ | | `messages` | `Message[]` | Array of message objects | +### ActivitySnapshotEvent + +Delivers a complete snapshot of an activity message. + +```typescript +type ActivitySnapshotEvent = BaseEvent & { + type: EventType.ACTIVITY_SNAPSHOT + messageId: string + activityType: string + content: Record + replace?: boolean +} +``` + +| Property | Type | Description | +| -------------- | ---------------------- | ------------------------------------------------------- | +| `messageId` | `string` | Identifier for the target `ActivityMessage` | +| `activityType` | `string` | Activity discriminator such as `"PLAN"` or `"SEARCH"` | +| `content` | `Record` | Structured payload describing the full activity state | +| `replace` | `boolean` (optional) | Defaults to `true`; when `false` the snapshot is ignored if a message with the same ID already exists | + +### ActivityDeltaEvent + +Provides incremental updates to an activity snapshot using JSON Patch. + +```typescript +type ActivityDeltaEvent = BaseEvent & { + type: EventType.ACTIVITY_DELTA + messageId: string + activityType: string + patch: any[] // RFC 6902 JSON Patch operations +} +``` + +| Property | Type | Description | +| -------------- | ------------- | ----------------------------------------------------------------- | +| `messageId` | `string` | Identifier for the target `ActivityMessage` | +| `activityType` | `string` | Activity discriminator mirroring the most recent snapshot | +| `patch` | `any[]` | JSON Patch operations applied to the structured activity payload | + ## Special Events ### RawEvent @@ -384,3 +453,26 @@ const EventSchemas = z.discriminatedUnion("type", [ This allows for runtime validation of events and provides TypeScript type inference. +### ToolCallChunkEvent + +Convenience event that expands to `ToolCallStart` → `ToolCallArgs` → +`ToolCallEnd` automatically in the JS/TS client. + +```typescript +type ToolCallChunkEvent = BaseEvent & { + type: EventType.TOOL_CALL_CHUNK + toolCallId?: string // required on the first chunk for a tool call + toolCallName?: string // required on the first chunk for a tool call + parentMessageId?: string + delta?: string +} +``` + +Behavior +- Omit start/end: The client transforms chunk sequences into the standard + start/args/end triad. +- First chunk requirements: The first chunk must include both `toolCallId` and + `toolCallName`; `parentMessageId` is propagated to `ToolCallStart` if given. +- Streaming: Subsequent chunks with the same `toolCallId` emit `ToolCallArgs`. + `ToolCallEnd` is emitted automatically when the tool call changes or when the + stream completes. diff --git a/docs/sdk/js/core/types.mdx b/docs/sdk/js/core/types.mdx index afc011609..758549ed0 100644 --- a/docs/sdk/js/core/types.mdx +++ b/docs/sdk/js/core/types.mdx @@ -20,6 +20,7 @@ Input parameters for running an agent. In the HTTP API, this is the body of the type RunAgentInput = { threadId: string runId: string + parentRunId?: string state: any messages: Message[] tools: Tool[] @@ -32,6 +33,7 @@ type RunAgentInput = { | ---------------- | ----------- | ---------------------------------------------- | | `threadId` | `string` | ID of the conversation thread | | `runId` | `string` | ID of the current run | +| `parentRunId` | `string (optional)` | ID of the run that spawned this run | | `state` | `any` | Current state of the agent | | `messages` | `Message[]` | Array of messages in the conversation | | `tools` | `Tool[]` | Array of tools available to the agent | @@ -48,7 +50,7 @@ messages in the system. Represents the possible roles a message sender can have. ```typescript -type Role = "developer" | "system" | "assistant" | "user" | "tool" +type Role = "developer" | "system" | "assistant" | "user" | "tool" | "activity" ``` ### DeveloperMessage @@ -121,17 +123,49 @@ Represents a message from a user. type UserMessage = { id: string role: "user" - content: string + content: string | InputContent[] name?: string } ``` -| Property | Type | Description | -| --------- | -------- | ------------------------------------------- | -| `id` | `string` | Unique identifier for the message | -| `role` | `"user"` | Role of the message sender, fixed as "user" | -| `content` | `string` | Text content of the message (required) | -| `name` | `string` | Optional name of the sender | +| Property | Type | Description | +| --------- | --------------------------- | --------------------------------------------------------------------- | +| `id` | `string` | Unique identifier for the message | +| `role` | `"user"` | Role of the message sender, fixed as "user" | +| `content` | `string \| InputContent[]` | Either plain text or an ordered array of multimodal content fragments | +| `name` | `string` | Optional name of the sender | + +### InputContent + +Union of supported multimodal fragments. + +```typescript +type InputContent = TextInputContent | BinaryInputContent +``` + +### TextInputContent + +```typescript +type TextInputContent = { + type: "text" + text: string +} +``` + +### BinaryInputContent + +```typescript +type BinaryInputContent = { + type: "binary" + mimeType: string + id?: string + url?: string + data?: string + filename?: string +} +``` + +> At least one of `id`, `url`, or `data` must be provided. ### ToolMessage @@ -155,6 +189,26 @@ type ToolMessage = { | `toolCallId` | `string` | ID of the tool call this message responds to | | `error` | `string` | Error message if the tool call failed | +### ActivityMessage + +Represents structured activity progress emitted between chat messages. + +```typescript +type ActivityMessage = { + id: string + role: "activity" + activityType: string + content: Record +} +``` + +| Property | Type | Description | +| -------------- | --------------------- | ------------------------------------------------------- | +| `id` | `string` | Unique identifier for the activity message | +| `role` | `"activity"` | Fixed discriminator identifying the message as activity | +| `activityType` | `string` | Activity discriminator used for renderer selection | +| `content` | `Record` | Structured payload representing the activity state | + ### Message A union type representing any type of message in the system. @@ -166,6 +220,7 @@ type Message = | AssistantMessage | UserMessage | ToolMessage + | ActivityMessage ``` ### ToolCall diff --git a/docs/sdk/python/core/events.mdx b/docs/sdk/python/core/events.mdx index 6d5cdc934..8283a42bc 100644 --- a/docs/sdk/python/core/events.mdx +++ b/docs/sdk/python/core/events.mdx @@ -29,6 +29,8 @@ class EventType(str, Enum): STATE_SNAPSHOT = "STATE_SNAPSHOT" STATE_DELTA = "STATE_DELTA" MESSAGES_SNAPSHOT = "MESSAGES_SNAPSHOT" + ACTIVITY_SNAPSHOT = "ACTIVITY_SNAPSHOT" + ACTIVITY_DELTA = "ACTIVITY_DELTA" RAW = "RAW" CUSTOM = "CUSTOM" RUN_STARTED = "RUN_STARTED" @@ -73,12 +75,16 @@ class RunStartedEvent(BaseEvent): type: Literal[EventType.RUN_STARTED] thread_id: str run_id: str + parent_run_id: Optional[str] = None + input: Optional[RunAgentInput] = None ``` -| Property | Type | Description | -| ----------- | ----- | ----------------------------- | -| `thread_id` | `str` | ID of the conversation thread | -| `run_id` | `str` | ID of the agent run | +| Property | Type | Description | +| ---------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `thread_id` | `str` | ID of the conversation thread | +| `run_id` | `str` | ID of the agent run | +| `parent_run_id` | `Optional[str]` | (Optional) Lineage pointer for branching/time travel. If present, refers to a prior run within the same thread | +| `input` | `Optional[RunAgentInput]` | (Optional) The exact agent input payload sent to the agent for this run. May omit messages already in history | ### RunFinishedEvent @@ -342,6 +348,48 @@ class MessagesSnapshotEvent(BaseEvent): | ---------- | --------------- | ------------------------ | | `messages` | `List[Message]` | Array of message objects | +### ActivitySnapshotEvent + +`from ag_ui.core import ActivitySnapshotEvent` + +Delivers a complete snapshot of an activity message. + +```python +class ActivitySnapshotEvent(BaseEvent): + type: Literal[EventType.ACTIVITY_SNAPSHOT] + message_id: str + activity_type: str + content: Any + replace: bool = True +``` + +| Property | Type | Description | +| --------------- | ----- | ----------------------------------------------------- | +| `message_id` | `str` | Identifier for the target `ActivityMessage` | +| `activity_type` | `str` | Activity discriminator such as `"PLAN"` or `"SEARCH"` | +| `content` | `Any` | Structured payload describing the full activity state | +| `replace` | `bool` (default `True`) | When `False`, the snapshot is ignored if a message with the same ID already exists | + +### ActivityDeltaEvent + +`from ag_ui.core import ActivityDeltaEvent` + +Provides incremental updates to an activity snapshot using JSON Patch. + +```python +class ActivityDeltaEvent(BaseEvent): + type: Literal[EventType.ACTIVITY_DELTA] + message_id: str + activity_type: str + patch: List[Any] +``` + +| Property | Type | Description | +| --------------- | ------------ | -------------------------------------------------------------------- | +| `message_id` | `str` | Identifier for the target `ActivityMessage` | +| `activity_type` | `str` | Activity discriminator mirroring the most recent snapshot | +| `patch` | `List[Any]` | JSON Patch operations applied to the structured activity content | + ## Special Events ### RawEvent @@ -413,3 +461,50 @@ Event = Annotated[ This allows for runtime validation of events and type checking at development time. +### TextMessageChunkEvent + +Convenience event for complete text messages without manually emitting +`TextMessageStart`/`TextMessageEnd`. + +```python +from ag_ui.core import TextMessageChunkEvent + +class TextMessageChunkEvent(BaseEvent): + type: Literal[EventType.TEXT_MESSAGE_CHUNK] + message_id: Optional[str] = None # required on first chunk for a message + role: Optional[TextMessageRole] = None # defaults to "assistant" in JS client + delta: Optional[str] = None +``` + +Behavior +- Convenience: Some consumers (e.g., the JS/TS client) expand chunk events into + the standard start/content/end sequence automatically, allowing producers to + omit explicit start/end events when using chunks. +- First chunk requirements: The first chunk for a given message must include + `message_id`. +- Streaming: Subsequent chunks with the same `message_id` correspond to content + pieces; completion triggers an implied end in clients that perform expansion. + +### ToolCallChunkEvent + +Convenience event for tool calls without manually emitting +`ToolCallStart`/`ToolCallEnd`. + +```python +from ag_ui.core import ToolCallChunkEvent + +class ToolCallChunkEvent(BaseEvent): + type: Literal[EventType.TOOL_CALL_CHUNK] + tool_call_id: Optional[str] = None # required on first chunk + tool_call_name: Optional[str] = None # required on first chunk + parent_message_id: Optional[str] = None + delta: Optional[str] = None +``` + +Behavior +- Convenience: Consumers may expand chunk sequences into the standard + start/args/end triad (the JS/TS client does this automatically). +- First chunk requirements: Include both `tool_call_id` and `tool_call_name` on + the first chunk. +- Streaming: Subsequent chunks with the same `tool_call_id` correspond to args + pieces; completion triggers an implied end in clients that perform expansion. diff --git a/docs/sdk/python/core/types.mdx b/docs/sdk/python/core/types.mdx index 4f9180455..70275c4e2 100644 --- a/docs/sdk/python/core/types.mdx +++ b/docs/sdk/python/core/types.mdx @@ -22,6 +22,7 @@ Input parameters for running an agent. In the HTTP API, this is the body of the class RunAgentInput(ConfiguredBaseModel): thread_id: str run_id: str + parent_run_id: Optional[str] = None state: Any messages: List[Message] tools: List[Tool] @@ -33,6 +34,7 @@ class RunAgentInput(ConfiguredBaseModel): | ----------------- | --------------- | --------------------------------------------- | | `thread_id` | `str` | ID of the conversation thread | | `run_id` | `str` | ID of the current run | +| `parent_run_id` | `Optional[str]` | (Optional) ID of the run that spawned this run| | `state` | `Any` | Current state of the agent | | `messages` | `List[Message]` | List of messages in the conversation | | `tools` | `List[Tool]` | List of tools available to the agent | @@ -51,7 +53,7 @@ messages in the system. Represents the possible roles a message sender can have. ```python -Role = Literal["developer", "system", "assistant", "user", "tool"] +Role = Literal["developer", "system", "assistant", "user", "tool", "activity"] ``` ### DeveloperMessage @@ -122,15 +124,55 @@ Represents a message from a user. ```python class UserMessage(BaseMessage): role: Literal["user"] - content: str + content: Union[str, List["InputContent"]] +``` + +| Property | Type | Description | +| --------- | ---------------------------------- | --------------------------------------------------------------------- | +| `id` | `str` | Unique identifier for the message | +| `role` | `Literal["user"]` | Role of the message sender, fixed as "user" | +| `content` | `Union[str, List["InputContent"]]` | Either a plain text string or an ordered list of multimodal fragments | +| `name` | `Optional[str]` | Optional name of the sender | + +### TextInputContent + +Represents a text fragment inside a multimodal user message. + +```python +class TextInputContent(ConfiguredBaseModel): + type: Literal["text"] + text: str +``` + +| Property | Type | Description | +| -------- | --------------- | ---------------------------- | +| `type` | `Literal["text"]` | Identifies the fragment type | +| `text` | `str` | Text content | + +### BinaryInputContent + +Represents binary data such as images, audio, or files. + +```python +class BinaryInputContent(ConfiguredBaseModel): + type: Literal["binary"] + mime_type: str + id: Optional[str] = None + url: Optional[str] = None + data: Optional[str] = None + filename: Optional[str] = None ``` -| Property | Type | Description | -| --------- | ----------------- | ------------------------------------------- | -| `id` | `str` | Unique identifier for the message | -| `role` | `Literal["user"]` | Role of the message sender, fixed as "user" | -| `content` | `str` | Text content of the message (required) | -| `name` | `Optional[str]` | Optional name of the sender | +| Property | Type | Description | +| ---------- | ----------------- | ------------------------------------------------------------- | +| `type` | `Literal["binary"]` | Identifies the fragment type | +| `mime_type`| `str` | MIME type, for example `"image/png"` | +| `id` | `Optional[str]` | Reference to previously uploaded content | +| `url` | `Optional[str]` | Remote URL where the content can be retrieved | +| `data` | `Optional[str]` | Base64 encoded content | +| `filename` | `Optional[str]` | Optional filename hint | + +> **Validation:** At least one of `id`, `url`, or `data` must be provided. ### ToolMessage @@ -155,6 +197,27 @@ class ToolMessage(ConfiguredBaseModel): | `tool_call_id` | `str` | ID of the tool call this message responds to | | `error` | `Optional[str]` | Error message if the tool call failed | +### ActivityMessage + +`from ag_ui.core import ActivityMessage` + +Represents structured activity progress emitted between chat messages. + +```python +class ActivityMessage(ConfiguredBaseModel): + id: str + role: Literal["activity"] + activity_type: str + content: Dict[str, Any] +``` + +| Property | Type | Description | +| --------------- | ----------------------- | ------------------------------------------------------- | +| `id` | `str` | Unique identifier for the activity message | +| `role` | `Literal["activity"]` | Fixed discriminator identifying the message as activity | +| `activity_type` | `str` | Activity discriminator used for renderer selection | +| `content` | `Dict[str, Any]` | Structured payload representing the activity state | + ### Message `from ag_ui.core import Message` @@ -163,7 +226,14 @@ A union type representing any type of message in the system. ```python Message = Annotated[ - Union[DeveloperMessage, SystemMessage, AssistantMessage, UserMessage, ToolMessage], + Union[ + DeveloperMessage, + SystemMessage, + AssistantMessage, + UserMessage, + ToolMessage, + ActivityMessage, + ], Field(discriminator="role") ] ``` diff --git a/integrations/a2a/typescript/.gitignore b/integrations/a2a/typescript/.gitignore new file mode 100644 index 000000000..de4d1f007 --- /dev/null +++ b/integrations/a2a/typescript/.gitignore @@ -0,0 +1,2 @@ +dist +node_modules diff --git a/integrations/a2a/typescript/.npmrc b/integrations/a2a/typescript/.npmrc new file mode 100644 index 000000000..3e775efb0 --- /dev/null +++ b/integrations/a2a/typescript/.npmrc @@ -0,0 +1 @@ +auto-install-peers=true diff --git a/integrations/a2a/typescript/README.md b/integrations/a2a/typescript/README.md new file mode 100644 index 000000000..e1f689eb1 --- /dev/null +++ b/integrations/a2a/typescript/README.md @@ -0,0 +1,86 @@ +# @ag-ui/a2a + +A TypeScript integration that connects AG-UI agents with remote services that expose the [A2A protocol](https://a2a.dev/). It converts AG-UI conversations into A2A payloads, forwards them through the official A2A SDK, and replays the responses back into AG-UI event streams. + +> **Status:** Experimental. APIs may change while the integration stabilises. + +## Features + +- Message conversion helpers between AG-UI and A2A formats (user, assistant, tool, binary payloads). +- `A2AAgent` implementation that streams or performs blocking requests against A2A endpoints. +- Optional fallback from streaming to blocking requests when an agent does not support SSE. +- Event conversion utilities that surface A2A messages, task status updates, and artifact chunks as AG-UI events. +- Helper tool schema (`send_message_to_a2a_agent`) for orchestration scenarios. +- Example client and Jest tests to validate conversions and streaming flows. + +## Installation + +Once dependencies are installed in the monorepo: + +```bash +pnpm install +pnpm --filter @ag-ui/a2a build +``` + +## Quick start + +```ts +import { A2AAgent } from "@ag-ui/a2a"; + +import { A2AClient } from "@a2a-js/sdk/client"; + +const client = new A2AClient("https://my-a2a-agent"); + +const agent = new A2AAgent({ + a2aClient: client, + initialMessages: [ + { id: "user-1", role: "user", content: "Plan a team offsite" } as any, + ], +}); + +const { result, newMessages } = await agent.runAgent(); +console.log(result); +console.log(newMessages); +``` + +You can inject your own `A2AClient` instance via the `client` option, override default instructions, or force blocking mode by setting `strategy: "blocking"`. + +## Configuration reference + +| Option | Description | +| ------ | ----------- | +| `a2aClient` | Required. Provide an `A2AClient` instance (with any auth headers or custom fetch logic you need). | + +## Environment variables & authentication + +The integration relies on the underlying A2A agent for authentication. Common patterns include: + +- `A2A_AGENT_URL` – set in deployment environments to point to the remote agent base URL. +- `A2A_API_KEY` or `A2A_BEARER_TOKEN` – consumed by a wrapped `fetch` inside a custom `A2AClient` instance if the remote agent enforces API key or bearer authentication. + +Pass any credentials to the `A2AClient` you provide to `A2AAgent`, or configure an HTTP proxy that injects the correct headers. + +## Utilities + +- `convertAGUIMessagesToA2A(messages, options)` — reshapes AG-UI history into A2A message objects, forwarding only user/assistant/tool turns and preserving the tool payloads. +- `convertA2AEventToAGUIEvents(event, options)` — maps an A2A stream event to AG-UI text and tool events (`TEXT_MESSAGE_CHUNK`, `TOOL_CALL_*`, `TOOL_CALL_RESULT`). +- `sendMessageToA2AAgentTool` — JSON schema describing a `send_message_to_a2a_agent` tool for orchestration agents. + +## Testing + +```bash +pnpm --filter @ag-ui/a2a test +``` + +The suite covers conversion edge cases and streaming / fallback behaviour using mocked A2A clients. + +## Examples + +- `examples/basic.ts` – minimal script. If you set `A2A_AGENT_URL`, it will connect to that agent through the real `A2AClient`. Otherwise it falls back to a tiny in-memory mock client so you can observe the integration without hitting a remote endpoint. + +## Release checklist + +1. `pnpm --filter @ag-ui/a2a build` +2. `pnpm --filter @ag-ui/a2a test` +3. Update CHANGELOG / release notes. +4. Publish with `pnpm publish --filter @ag-ui/a2a`. diff --git a/integrations/a2a/typescript/jest.config.js b/integrations/a2a/typescript/jest.config.js new file mode 100644 index 000000000..0521f8d91 --- /dev/null +++ b/integrations/a2a/typescript/jest.config.js @@ -0,0 +1,10 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", + testMatch: ["**/*.test.ts"], + passWithNoTests: true, + moduleNameMapper: { + "^@/(.*)$": "/src/$1", + }, +}; diff --git a/integrations/a2a/typescript/package.json b/integrations/a2a/typescript/package.json new file mode 100644 index 000000000..d939bf829 --- /dev/null +++ b/integrations/a2a/typescript/package.json @@ -0,0 +1,52 @@ +{ + "name": "@ag-ui/a2a", + "author": "Markus Ecker ", + "version": "0.0.5", + "license": "Apache-2.0", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "sideEffects": false, + "private": false, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist/**", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.mjs", + "require": "./dist/index.js" + } + }, + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "clean": "rm -rf dist .turbo node_modules", + "typecheck": "tsc --noEmit", + "test": "jest", + "link:global": "pnpm link --global", + "unlink:global": "pnpm unlink --global" + }, + "dependencies": { + "@a2a-js/sdk": "^0.2.2", + "rxjs": "7.8.1" + }, + "peerDependencies": { + "@ag-ui/core": ">=0.0.40", + "@ag-ui/client": ">=0.0.40" + }, + "devDependencies": { + "@ag-ui/core": "workspace:*", + "@ag-ui/client": "workspace:*", + "@types/jest": "^29.5.14", + "@types/node": "^20.11.19", + "jest": "^29.7.0", + "ts-jest": "^29.1.2", + "tsup": "^8.0.2", + "typescript": "^5.3.3" + } +} diff --git a/integrations/a2a/typescript/src/__tests__/agent.test.ts b/integrations/a2a/typescript/src/__tests__/agent.test.ts new file mode 100644 index 000000000..9d9ab88b9 --- /dev/null +++ b/integrations/a2a/typescript/src/__tests__/agent.test.ts @@ -0,0 +1,143 @@ +import type { Message } from "@ag-ui/client"; +import { A2AAgent } from "../agent"; +import type { MessageSendParams } from "@a2a-js/sdk"; + +const createMessage = (message: Partial): Message => message as Message; + +type SendMessageResponseSuccess = { + id: string | number | null; + jsonrpc: "2.0"; + result: any; +}; + +type SendMessageResponseError = { + id: string | number | null; + jsonrpc: "2.0"; + error: { code: number; message: string }; +}; + +class FakeA2AClient { + constructor( + readonly behaviour: { + stream?: () => AsyncGenerator; + send?: () => Promise; + card?: () => Promise; + } = {}, + ) {} + + sendMessageStream(params: MessageSendParams) { + if (!this.behaviour.stream) { + throw new Error("Streaming not configured"); + } + return this.behaviour.stream(); + } + + async sendMessage(params: MessageSendParams) { + if (!this.behaviour.send) { + throw new Error("sendMessage not configured"); + } + return this.behaviour.send(); + } + + isErrorResponse(response: SendMessageResponseSuccess | SendMessageResponseError): response is SendMessageResponseError { + return "error" in response && Boolean(response.error); + } + + async getAgentCard() { + if (this.behaviour.card) { + return this.behaviour.card(); + } + return { + name: "Test Agent", + description: "", + capabilities: {}, + }; + } +} + +describe("A2AAgent", () => { + it("streams responses and records run summary", async () => { + const fakeClient = new FakeA2AClient({ + stream: async function* () { + yield { + kind: "message", + messageId: "resp-1", + role: "agent", + parts: [{ kind: "text", text: "Hello from stream" }], + }; + }, + }); + + const agent = new A2AAgent({ + a2aClient: fakeClient as any, + initialMessages: [ + createMessage({ + id: "user-1", + role: "user", + content: "Hi there", + }), + ], + }); + + const result = await agent.runAgent(); + + expect(result.result).toBeUndefined(); + + expect(result.newMessages).toEqual( + expect.arrayContaining([ + expect.objectContaining({ role: "assistant" }), + ]), + ); + }); + + it("falls back to blocking when streaming fails", async () => { + const fakeClient = new FakeA2AClient({ + stream: async function* () { + throw new Error("Streaming unsupported"); + }, + send: async () => ({ + id: null, + jsonrpc: "2.0", + result: { + kind: "message", + messageId: "resp-2", + role: "agent", + parts: [{ kind: "text", text: "Blocking response" }], + }, + }), + }); + + const agent = new A2AAgent({ + a2aClient: fakeClient as any, + initialMessages: [ + createMessage({ id: "user-1", role: "user", content: "Ping" }), + ], + }); + + const result = await agent.runAgent(); + + expect(result.result).toBeUndefined(); + }); + + it("throws when the A2A service reports an error", async () => { + const fakeClient = new FakeA2AClient({ + stream: async function* () { + throw new Error("Streaming unsupported"); + }, + send: async () => ({ + id: null, + jsonrpc: "2.0", + error: { code: -32000, message: "Agent failure" }, + }), + }); + + const agent = new A2AAgent({ + a2aClient: fakeClient as any, + initialMessages: [ + createMessage({ id: "user-1", role: "user", content: "Trouble" }), + ], + }); + + await expect(agent.runAgent()).rejects.toThrow("Agent failure"); + }); +}); diff --git a/integrations/a2a/typescript/src/__tests__/utils.test.ts b/integrations/a2a/typescript/src/__tests__/utils.test.ts new file mode 100644 index 000000000..2621e62df --- /dev/null +++ b/integrations/a2a/typescript/src/__tests__/utils.test.ts @@ -0,0 +1,191 @@ +import { EventType } from "@ag-ui/client"; +import type { Message } from "@ag-ui/client"; +import { + convertAGUIMessagesToA2A, + convertA2AEventToAGUIEvents, + sendMessageToA2AAgentTool, +} from "../utils"; + +const createMessage = (message: Partial): Message => message as Message; + +describe("convertAGUIMessagesToA2A", () => { + it("converts AG-UI messages into A2A format while skipping system messages", () => { + const systemMessage = createMessage({ + id: "sys-1", + role: "system", + content: "Follow project guidelines", + }); + + const userMessage = createMessage({ + id: "user-1", + role: "user", + content: [ + { + type: "text", + text: "Draft a project plan", + }, + ], + }); + + const assistantMessage = createMessage({ + id: "assistant-1", + role: "assistant", + content: "Sure, preparing a plan", + toolCalls: [ + { + id: "tool-call-1", + type: "function", + function: { + name: "lookupRequirements", + arguments: JSON.stringify({ id: 123 }), + }, + }, + ], + }); + + const toolMessage = createMessage({ + id: "tool-1", + role: "tool", + toolCallId: "tool-call-1", + content: JSON.stringify({ status: "ok" }), + }); + + const converted = convertAGUIMessagesToA2A([ + systemMessage, + userMessage, + assistantMessage, + toolMessage, + ]); + + expect(converted.contextId).toBeUndefined(); + expect(converted.history).toHaveLength(3); + + const assistantEntry = converted.history.find((entry) => entry.role === "agent"); + expect(assistantEntry?.parts).toEqual( + expect.arrayContaining([ + expect.objectContaining({ kind: "text", text: "Sure, preparing a plan" }), + expect.objectContaining({ kind: "data" }), + ]), + ); + + const toolEntry = converted.history.find((entry) => + entry.parts.some((part) => part.kind === "data" && (part as any).data?.type === "tool-result"), + ); + expect(toolEntry?.parts).toEqual( + expect.arrayContaining([ + expect.objectContaining({ kind: "data", data: expect.objectContaining({ type: "tool-result" }) }), + ]), + ); + + expect(converted.latestUserMessage?.role).toBe("user"); + expect( + converted.history.some((msg) => + (msg.parts ?? []).some((part) => + part.kind === "text" && (part as any).text?.includes("Follow project guidelines"), + ), + ), + ).toBe(false); + }); +}); + +describe("convertA2AEventToAGUIEvents", () => { + it("produces AG-UI text chunks from A2A messages", () => { + const a2aEvent = { + kind: "message" as const, + messageId: "remote-1", + role: "agent" as const, + parts: [ + { kind: "text" as const, text: "Hello from A2A" }, + ], + }; + + const map = new Map(); + const events = convertA2AEventToAGUIEvents(a2aEvent, { + messageIdMap: map, + }); + + expect(events).toHaveLength(1); + expect(events[0]).toEqual( + expect.objectContaining({ + type: EventType.TEXT_MESSAGE_CHUNK, + delta: "Hello from A2A", + }), + ); + + expect(map.size).toBe(1); + }); + + it("maps tool-call payloads to tool events", () => { + const a2aEvent = { + kind: "message" as const, + messageId: "remote-call", + role: "agent" as const, + parts: [ + { + kind: "data" as const, + data: { type: "tool-call", id: "tool-123", name: "lookup", arguments: { query: "hi" } }, + }, + { + kind: "data" as const, + data: { type: "tool-result", toolCallId: "tool-123", payload: { ok: true } }, + }, + ], + }; + + const events = convertA2AEventToAGUIEvents(a2aEvent, { messageIdMap: new Map() }); + + expect(events).toEqual([ + expect.objectContaining({ type: EventType.TOOL_CALL_START, toolCallId: "tool-123" }), + expect.objectContaining({ type: EventType.TOOL_CALL_ARGS, toolCallId: "tool-123" }), + expect.objectContaining({ type: EventType.TOOL_CALL_RESULT, toolCallId: "tool-123" }), + expect.objectContaining({ type: EventType.TOOL_CALL_END, toolCallId: "tool-123" }), + ]); + }); + + it("maps tool-result payloads to ToolCallResult events", () => { + const a2aEvent = { + kind: "message" as const, + messageId: "remote-2", + role: "agent" as const, + parts: [ + { + kind: "data" as const, + data: { type: "tool-result", toolCallId: "call-1", payload: { ok: true } }, + }, + ], + }; + + const events = convertA2AEventToAGUIEvents(a2aEvent, { messageIdMap: new Map() }); + + expect(events).toHaveLength(1); + expect(events[0]).toEqual( + expect.objectContaining({ + type: EventType.TOOL_CALL_RESULT, + toolCallId: "call-1", + }), + ); + }); + + it("maps task status updates to raw events", () => { + const statusEvent = { + kind: "status-update" as const, + contextId: "ctx", + final: false, + status: { state: "working", message: undefined }, + taskId: "task-1", + }; + + const events = convertA2AEventToAGUIEvents(statusEvent as any, { + messageIdMap: new Map(), + }); + + expect(events).toHaveLength(0); + }); +}); + +describe("sendMessageToA2AAgentTool", () => { + it("matches the expected schema", () => { + expect(sendMessageToA2AAgentTool.name).toBe("send_message_to_a2a_agent"); + expect(sendMessageToA2AAgentTool.parameters.required).toContain("task"); + }); +}); diff --git a/integrations/a2a/typescript/src/agent.ts b/integrations/a2a/typescript/src/agent.ts new file mode 100644 index 000000000..f8fcc7a93 --- /dev/null +++ b/integrations/a2a/typescript/src/agent.ts @@ -0,0 +1,360 @@ +import { + AbstractAgent, + AgentConfig, + BaseEvent, + EventType, + RunAgentInput, + RunErrorEvent, + RunFinishedEvent, + RunStartedEvent, +} from "@ag-ui/client"; +import { Observable } from "rxjs"; +import { A2AClient } from "@a2a-js/sdk/client"; +import type { + MessageSendConfiguration, + MessageSendParams, + Message as A2AMessage, +} from "@a2a-js/sdk"; +import { convertAGUIMessagesToA2A, convertA2AEventToAGUIEvents } from "./utils"; +import type { + A2AAgentRunResultSummary, + ConvertedA2AMessages, + A2AStreamEvent, + SurfaceTracker, +} from "./types"; +import { randomUUID } from "@ag-ui/client"; + +export interface A2AAgentConfig extends AgentConfig { + a2aClient: A2AClient; +} + +const EXTENSION_URI = "https://a2ui.org/ext/a2a-ui/v0.1"; + +export class A2AAgent extends AbstractAgent { + private readonly a2aClient: A2AClient; + private readonly messageIdMap = new Map(); + + constructor(config: A2AAgentConfig) { + const { a2aClient, ...rest } = config; + if (!a2aClient) { + throw new Error("A2AAgent requires a configured A2AClient instance."); + } + + super(rest); + + this.a2aClient = a2aClient; + this.initializeExtension(this.a2aClient); + } + + clone() { + return new A2AAgent({ a2aClient: this.a2aClient, debug: this.debug }); + } + + public override run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + const run = async () => { + const runStarted: RunStartedEvent = { + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + }; + subscriber.next(runStarted); + + if (!input.messages?.length) { + const runFinished: RunFinishedEvent = { + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + }; + subscriber.next(runFinished); + subscriber.complete(); + return; + } + + try { + const converted = this.prepareConversation(input); + + if (!converted.latestUserMessage) { + const runFinished: RunFinishedEvent = { + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + } as unknown as RunFinishedEvent; + subscriber.next(runFinished); + subscriber.complete(); + return; + } + + const sendParams = await this.createSendParams(converted, input); + + const surfaceTracker = this.createSurfaceTracker(); + + try { + await this.streamMessage(sendParams, subscriber, surfaceTracker); + } catch (error) { + await this.fallbackToBlocking( + sendParams, + subscriber, + error as Error, + surfaceTracker, + ); + } + + const runFinished: RunFinishedEvent = { + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + }; + subscriber.next(runFinished); + subscriber.complete(); + } catch (error) { + const runError: RunErrorEvent = { + type: EventType.RUN_ERROR, + message: (error as Error).message ?? "Unknown A2A error", + }; + subscriber.next(runError); + subscriber.error(error); + } + }; + + run(); + + return () => {}; + }); + } + + private prepareConversation(input: RunAgentInput): ConvertedA2AMessages { + return convertAGUIMessagesToA2A(input.messages ?? [], { + contextId: input.threadId, + }); + } + + private async createSendParams( + converted: ConvertedA2AMessages, + input: RunAgentInput, + ): Promise { + const latest = converted.latestUserMessage as A2AMessage; + + const message: A2AMessage = { + ...latest, + messageId: latest.messageId ?? randomUUID(), + contextId: converted.contextId ?? input.threadId, + }; + + const configuration: MessageSendConfiguration = { + acceptedOutputModes: ["text"], + } as MessageSendConfiguration; + + return { + message, + configuration, + } as MessageSendParams; + } + + private async streamMessage( + params: MessageSendParams, + subscriber: { next: (event: BaseEvent) => void }, + surfaceTracker?: SurfaceTracker, + ): Promise { + const aggregatedText = new Map(); + const rawEvents: A2AStreamEvent[] = []; + const tracker = surfaceTracker ?? this.createSurfaceTracker(); + + const stream = this.a2aClient.sendMessageStream(params); + for await (const chunk of stream) { + rawEvents.push(chunk as A2AStreamEvent); + const events = convertA2AEventToAGUIEvents(chunk as A2AStreamEvent, { + role: "assistant", + messageIdMap: this.messageIdMap, + onTextDelta: ({ messageId, delta }) => { + aggregatedText.set( + messageId, + (aggregatedText.get(messageId) ?? "") + delta, + ); + }, + getCurrentText: (messageId) => aggregatedText.get(messageId), + source: "a2a", + surfaceTracker: tracker, + }); + for (const event of events) { + subscriber.next(event); + } + } + + return { + messages: [], + rawEvents, + }; + } + + private async fallbackToBlocking( + params: MessageSendParams, + subscriber: { next: (event: BaseEvent) => void }, + error: Error, + surfaceTracker?: SurfaceTracker, + ): Promise { + const configuration: MessageSendConfiguration = { + ...params.configuration, + acceptedOutputModes: params.configuration?.acceptedOutputModes ?? [ + "text", + ], + blocking: true, + }; + + return this.blockingMessage( + { + ...params, + configuration, + }, + subscriber, + surfaceTracker, + ); + } + + private async blockingMessage( + params: MessageSendParams, + subscriber: { next: (event: BaseEvent) => void }, + surfaceTracker?: SurfaceTracker, + ): Promise { + const response = await this.a2aClient.sendMessage(params); + + if (this.a2aClient.isErrorResponse(response)) { + const errorMessage = + response.error?.message ?? "Unknown error from A2A agent"; + console.error("A2A sendMessage error", response.error); + throw new Error(errorMessage); + } + + const aggregatedText = new Map(); + const rawEvents: A2AStreamEvent[] = []; + const tracker = surfaceTracker ?? this.createSurfaceTracker(); + + const result = response.result as A2AStreamEvent; + rawEvents.push(result); + + const events = convertA2AEventToAGUIEvents(result, { + role: "assistant", + messageIdMap: this.messageIdMap, + onTextDelta: ({ messageId, delta }) => { + aggregatedText.set( + messageId, + (aggregatedText.get(messageId) ?? "") + delta, + ); + }, + getCurrentText: (messageId) => aggregatedText.get(messageId), + source: "a2a", + surfaceTracker: tracker, + }); + + for (const event of events) { + subscriber.next(event); + } + + return { + messages: [], + rawEvents, + }; + } + + private initializeExtension(client: A2AClient) { + const addExtensionHeader = (headers: Headers) => { + const existingValue = headers.get("X-A2A-Extensions") ?? ""; + const values = existingValue + .split(",") + .map((value) => value.trim()) + .filter(Boolean); + + if (!values.includes(EXTENSION_URI)) { + values.push(EXTENSION_URI); + headers.set("X-A2A-Extensions", values.join(", ")); + } + }; + + const patchFetch = () => { + const originalFetch = globalThis.fetch; + if (!originalFetch) { + return () => {}; + } + + const extensionFetch: typeof fetch = async (input, init) => { + const headers = new Headers(init?.headers); + addExtensionHeader(headers); + const nextInit: RequestInit = { + ...init, + headers, + }; + return originalFetch(input, nextInit); + }; + + globalThis.fetch = extensionFetch; + + return () => { + globalThis.fetch = originalFetch; + }; + }; + + const wrapPromise = async (operation: () => Promise): Promise => { + const restore = patchFetch(); + try { + return await operation(); + } finally { + restore(); + } + }; + + const wrapStream = ( + original: + | ((...args: any[]) => AsyncGenerator) + | undefined, + ) => { + if (!original) { + return undefined; + } + + return function wrapped(this: unknown, ...args: unknown[]) { + const restore = patchFetch(); + const iterator = original.apply(this, args); + + const wrappedIterator = (async function* () { + try { + for await (const value of iterator) { + yield value; + } + } finally { + restore(); + } + })(); + + return wrappedIterator; + }; + }; + + const originalSendMessage = client.sendMessage.bind(client); + client.sendMessage = (params) => + wrapPromise(() => originalSendMessage(params)); + + const originalSendMessageStream = client.sendMessageStream?.bind(client); + const wrappedSendMessageStream = wrapStream(originalSendMessageStream); + if (wrappedSendMessageStream) { + client.sendMessageStream = + wrappedSendMessageStream as typeof client.sendMessageStream; + } + + const originalResubscribeTask = client.resubscribeTask?.bind(client); + const wrappedResubscribeTask = wrapStream(originalResubscribeTask); + if (wrappedResubscribeTask) { + client.resubscribeTask = + wrappedResubscribeTask as typeof client.resubscribeTask; + } + } + + private createSurfaceTracker(): SurfaceTracker { + const seenSurfaceIds = new Set(); + return { + has: (surfaceId: string) => seenSurfaceIds.has(surfaceId), + add: (surfaceId: string) => { + seenSurfaceIds.add(surfaceId); + }, + }; + } +} diff --git a/integrations/a2a/typescript/src/index.ts b/integrations/a2a/typescript/src/index.ts new file mode 100644 index 000000000..c06315272 --- /dev/null +++ b/integrations/a2a/typescript/src/index.ts @@ -0,0 +1,3 @@ +export * from "./agent"; +export * from "./utils"; +export * from "./types"; diff --git a/integrations/a2a/typescript/src/types.ts b/integrations/a2a/typescript/src/types.ts new file mode 100644 index 000000000..b3e51181c --- /dev/null +++ b/integrations/a2a/typescript/src/types.ts @@ -0,0 +1,60 @@ +import type { + MessageSendConfiguration, + MessageSendParams, + Message as A2AMessage, + Part as A2APart, + TextPart as A2ATextPart, + DataPart as A2ADataPart, + FilePart as A2AFilePart, + Task as A2ATask, + TaskStatusUpdateEvent as A2ATaskStatusUpdateEvent, + TaskArtifactUpdateEvent as A2ATaskArtifactUpdateEvent, +} from "@a2a-js/sdk"; +import type { Message as AGUIMessage } from "@ag-ui/client"; + +export type { + A2AMessage, + A2APart, + A2ATextPart, + A2ADataPart, + A2AFilePart, + MessageSendParams, + MessageSendConfiguration, + AGUIMessage as AGUIConversationMessage, +}; + +export interface SurfaceTracker { + has(surfaceId: string): boolean; + add(surfaceId: string): void; +} + +export type A2AStreamEvent = + | A2AMessage + | A2ATask + | A2ATaskStatusUpdateEvent + | A2ATaskArtifactUpdateEvent; + +export interface ConvertAGUIMessagesOptions { + contextId?: string; + includeToolMessages?: boolean; +} + +export interface ConvertedA2AMessages { + contextId?: string; + history: A2AMessage[]; + latestUserMessage?: A2AMessage; +} + +export interface ConvertA2AEventOptions { + role?: "assistant" | "user"; + messageIdMap: Map; + onTextDelta?: (payload: { messageId: string; delta: string }) => void; + source?: string; + getCurrentText?: (messageId: string) => string | undefined; + surfaceTracker?: SurfaceTracker; +} + +export interface A2AAgentRunResultSummary { + messages: Array<{ messageId: string; text: string }>; + rawEvents: A2AStreamEvent[]; +} diff --git a/integrations/a2a/typescript/src/utils.ts b/integrations/a2a/typescript/src/utils.ts new file mode 100644 index 000000000..8aba08fcd --- /dev/null +++ b/integrations/a2a/typescript/src/utils.ts @@ -0,0 +1,488 @@ +import type { + BaseEvent, + InputContent, + Message, + TextMessageChunkEvent, + RawEvent, + ToolCallArgsEvent, + ToolCallEndEvent, + ToolCallStartEvent, + ToolCallResultEvent, +} from "@ag-ui/client"; +import { EventType, randomUUID } from "@ag-ui/client"; +import type { + A2AMessage, + A2APart, + A2ATextPart, + A2ADataPart, + A2AFilePart, + A2AStreamEvent, + ConvertAGUIMessagesOptions, + ConvertedA2AMessages, + ConvertA2AEventOptions, +} from "./types"; + +const ROLE_MAP: Record = { + user: "user", + assistant: "agent", + tool: "agent", + system: "user", + developer: "user", +}; + +const TOOL_RESULT_PART_TYPE = "tool-result"; +const TOOL_CALL_PART_TYPE = "tool-call"; +const SURFACE_OPERATION_KEYS = [ + "beginRendering", + "surfaceUpdate", + "dataModelUpdate", +] as const; + +type SurfaceOperationKey = (typeof SURFACE_OPERATION_KEYS)[number]; + +const isBinaryContent = ( + content: InputContent, +): content is Extract => content.type === "binary"; + +const isTextContent = (content: InputContent): content is Extract => + content.type === "text"; + +const createTextPart = (text: string): A2ATextPart => ({ + kind: "text", + text, +}); + +const createFilePart = (content: Extract): A2AFilePart | null => { + if (content.url) { + return { + kind: "file", + file: { + uri: content.url, + mimeType: content.mimeType, + name: content.filename, + }, + }; + } + + if (content.data) { + return { + kind: "file", + file: { + bytes: content.data, + mimeType: content.mimeType, + name: content.filename, + }, + }; + } + + return null; +}; + +const extractSurfaceOperation = ( + payload: unknown, +): { surfaceId: string; operation: Record } | null => { + if (!payload || typeof payload !== "object") { + return null; + } + + const record = payload as Record; + + for (const key of SURFACE_OPERATION_KEYS) { + const value = record[key as SurfaceOperationKey]; + if (value && typeof value === "object" && (value as { surfaceId?: unknown }).surfaceId) { + const surfaceId = (value as { surfaceId?: unknown }).surfaceId; + if (typeof surfaceId === "string" && surfaceId.length > 0) { + return { surfaceId, operation: record }; + } + } + } + + return null; +}; + +const safeJsonParse = (value: string): unknown => { + try { + return JSON.parse(value); + } catch (error) { + return value; + } +}; + +const messageContentToParts = (message: Message): A2APart[] => { + const parts: A2APart[] = []; + const { content } = message as { content?: Message["content"] }; + + if (typeof content === "string") { + const trimmed = content.trim(); + if (trimmed.length > 0) { + parts.push(createTextPart(trimmed)); + } + } else if (Array.isArray(content)) { + for (const chunk of content) { + if (isTextContent(chunk)) { + const value = chunk.text.trim(); + if (value.length > 0) { + parts.push(createTextPart(value)); + } + } else if (isBinaryContent(chunk)) { + const filePart = createFilePart(chunk); + if (filePart) { + parts.push(filePart); + } + } else { + parts.push({ kind: "data", data: chunk } as A2ADataPart); + } + } + } else if (content && typeof content === "object") { + parts.push({ + kind: "data", + data: content as Record, + }); + } + + if (message.role === "assistant" && "toolCalls" in message && message.toolCalls?.length) { + for (const toolCall of message.toolCalls) { + parts.push({ + kind: "data", + data: { + type: TOOL_CALL_PART_TYPE, + id: toolCall.id, + name: toolCall.function.name, + arguments: safeJsonParse(toolCall.function.arguments), + rawArguments: toolCall.function.arguments, + }, + }); + } + } + + if (message.role === "tool") { + const payload = typeof message.content === "string" ? safeJsonParse(message.content) : message.content; + parts.push({ + kind: "data", + data: { + type: TOOL_RESULT_PART_TYPE, + toolCallId: message.toolCallId, + payload, + }, + }); + } + + return parts; +}; + +const messageContentToText = (message: Message): string => { + const { content } = message as { content?: Message["content"] }; + if (typeof content === "string") { + return content; + } + if (Array.isArray(content)) { + return content + .filter((part): part is Extract => isTextContent(part)) + .map((part) => part.text) + .join("\n"); + } + if (content && typeof content === "object") { + return JSON.stringify(content); + } + return ""; +}; + +export function convertAGUIMessagesToA2A( + messages: Message[], + options: ConvertAGUIMessagesOptions = {}, +): ConvertedA2AMessages { + const history: A2AMessage[] = []; + const includeToolMessages = options.includeToolMessages ?? true; + const contextId = options.contextId; + + for (const message of messages) { + if (message.role === "activity") { + continue; + } + + if (message.role === "tool" && !includeToolMessages) { + continue; + } + + if (message.role === "system" || message.role === "developer") { + continue; + } + + const mappedRole = ROLE_MAP[message.role] ?? (message.role === "tool" ? "agent" : undefined); + + if (!mappedRole) { + continue; + } + + const parts = messageContentToParts(message); + + if (parts.length === 0 && mappedRole !== "agent") { + continue; + } + + const messageId = message.id ?? randomUUID(); + + history.push({ + kind: "message", + messageId, + role: mappedRole, + parts, + contextId, + }); + } + + const latestUserMessage = [...history].reverse().find((msg) => msg.role === "user"); + + return { + contextId, + history, + latestUserMessage, + }; +} + +const isA2AMessage = (event: A2AStreamEvent): event is A2AMessage => event.kind === "message"; + +const isA2ATask = (event: A2AStreamEvent): event is import("@a2a-js/sdk").Task => event.kind === "task"; + +const isA2AStatusUpdate = ( + event: A2AStreamEvent, +): event is import("@a2a-js/sdk").TaskStatusUpdateEvent => event.kind === "status-update"; + +function resolveMappedMessageId( + originalId: string, + options: ConvertA2AEventOptions, + aliasKey?: string, +): string { + if (aliasKey) { + const existingAliasId = options.messageIdMap.get(aliasKey); + if (existingAliasId) { + options.messageIdMap.set(originalId, existingAliasId); + return existingAliasId; + } + } + + const existingId = options.messageIdMap.get(originalId); + if (existingId) { + if (aliasKey) { + options.messageIdMap.set(aliasKey, existingId); + } + return existingId; + } + + const newId = randomUUID(); + options.messageIdMap.set(originalId, newId); + if (aliasKey) { + options.messageIdMap.set(aliasKey, newId); + } + return newId; +} + +function convertMessageToEvents( + message: A2AMessage, + options: ConvertA2AEventOptions, + aliasKey?: string, +): BaseEvent[] { + const role = options.role ?? "assistant"; + const events: BaseEvent[] = []; + + const originalId = message.messageId ?? randomUUID(); + const mappedId = resolveMappedMessageId(originalId, options, aliasKey); + + const openToolCalls = new Set(); + + for (const part of message.parts ?? []) { + if (part.kind === "text") { + const textPart = part as A2ATextPart; + const partText = textPart.text ?? ""; + if (partText) { + const previousText = options.getCurrentText?.(mappedId) ?? ""; + + if (partText !== previousText) { + const deltaText = partText.startsWith(previousText) + ? partText.slice(previousText.length) + : partText; + + if (deltaText.length > 0) { + const chunkEvent: TextMessageChunkEvent = { + type: EventType.TEXT_MESSAGE_CHUNK, + messageId: mappedId, + role, + delta: deltaText, + }; + options.onTextDelta?.({ messageId: mappedId, delta: deltaText }); + events.push(chunkEvent); + } + } + } + continue; + } + + if (part.kind === "data") { + const dataPart = part as A2ADataPart; + const payload = dataPart.data; + + if (payload && typeof payload === "object" && (payload as any).type === TOOL_CALL_PART_TYPE) { + const toolCallId = (payload as any).id ?? randomUUID(); + const toolCallName = (payload as any).name ?? "unknown_tool"; + const args = (payload as any).arguments; + + const startEvent: ToolCallStartEvent = { + type: EventType.TOOL_CALL_START, + toolCallId, + toolCallName, + parentMessageId: mappedId, + }; + events.push(startEvent); + + if (args !== undefined) { + const argsEvent: ToolCallArgsEvent = { + type: EventType.TOOL_CALL_ARGS, + toolCallId, + delta: JSON.stringify(args), + }; + events.push(argsEvent); + } + + openToolCalls.add(toolCallId); + continue; + } + + if ( + payload && + typeof payload === "object" && + (payload as any).type === TOOL_RESULT_PART_TYPE && + (payload as any).toolCallId + ) { + const toolCallId = (payload as any).toolCallId; + const toolResultEvent: ToolCallResultEvent = { + type: EventType.TOOL_CALL_RESULT, + toolCallId, + content: JSON.stringify((payload as any).payload ?? payload), + messageId: randomUUID(), + role: "tool", + }; + events.push(toolResultEvent); + + if (openToolCalls.has(toolCallId)) { + const endEvent: ToolCallEndEvent = { + type: EventType.TOOL_CALL_END, + toolCallId, + }; + events.push(endEvent); + openToolCalls.delete(toolCallId); + } + + continue; + } + + const surfaceOperation = extractSurfaceOperation(payload); + if (surfaceOperation && options.surfaceTracker) { + const tracker = options.surfaceTracker; + const { surfaceId, operation } = surfaceOperation; + const hasSeenSurface = tracker.has(surfaceId); + + if (!hasSeenSurface) { + tracker.add(surfaceId); + events.push({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: surfaceId, + activityType: "a2ui-surface", + content: { operations: [] }, + replace: false, + } as BaseEvent); + } + + events.push({ + type: EventType.ACTIVITY_DELTA, + messageId: surfaceId, + activityType: "a2ui-surface", + patch: [ + { + op: "add", + path: "/operations/-", + value: operation, + }, + ], + } as BaseEvent); + + continue; + } + + continue; + } + + // Ignore other part kinds for now. + } + + for (const toolCallId of openToolCalls) { + const endEvent: ToolCallEndEvent = { + type: EventType.TOOL_CALL_END, + toolCallId, + }; + events.push(endEvent); + } + + return events; +} + +export function convertA2AEventToAGUIEvents( + event: A2AStreamEvent, + options: ConvertA2AEventOptions, +): BaseEvent[] { + const events: BaseEvent[] = []; + const source = options.source ?? "a2a"; + + if (isA2AMessage(event)) { + return convertMessageToEvents(event, options); + } + + if (isA2AStatusUpdate(event)) { + const statusMessage = event.status?.message; + const statusState = event.status?.state; + const aliasKey = statusState && statusState !== "input-required" ? `${event.taskId}:status` : undefined; + + if (statusMessage && statusMessage.kind === "message") { + return convertMessageToEvents(statusMessage as A2AMessage, options, aliasKey); + } + return events; + } + + if (isA2ATask(event)) { + const rawEvent: RawEvent = { + type: EventType.RAW, + event, + source, + }; + events.push(rawEvent); + return events; + } + + const fallbackEvent: RawEvent = { + type: EventType.RAW, + event, + source, + }; + events.push(fallbackEvent); + return events; +} + +export const sendMessageToA2AAgentTool = { + name: "send_message_to_a2a_agent", + description: + "Sends a task to the agent named `agentName`, including the full conversation context and goal", + parameters: { + type: "object", + properties: { + agentName: { + type: "string", + description: "The name of the A2A agent to send the message to.", + }, + task: { + type: "string", + description: + "The comprehensive conversation-context summary and goal to be achieved regarding the user inquiry.", + }, + }, + required: ["task"], + }, +} as const; diff --git a/integrations/a2a/typescript/tsconfig.json b/integrations/a2a/typescript/tsconfig.json new file mode 100644 index 000000000..ceecfd457 --- /dev/null +++ b/integrations/a2a/typescript/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es2017", + "module": "NodeNext", + "lib": ["dom", "dom.iterable", "esnext"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "moduleResolution": "NodeNext", + "skipLibCheck": true, + "strict": true, + "jsx": "react-jsx", + "esModuleInterop": true, + "resolveJsonModule": true, + "isolatedModules": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "stripInternal": true + }, + "include": ["src"], + "exclude": ["node_modules", "dist"] +} diff --git a/integrations/a2a/typescript/tsup.config.ts b/integrations/a2a/typescript/tsup.config.ts new file mode 100644 index 000000000..a0ee0a256 --- /dev/null +++ b/integrations/a2a/typescript/tsup.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: { + index: "src/index.ts", + }, + format: ["cjs", "esm"], + dts: true, + splitting: false, + sourcemap: true, + clean: true, + minify: true, +}); diff --git a/integrations/adk-middleware/python/src/ag_ui_adk/utils/converters.py b/integrations/adk-middleware/python/src/ag_ui_adk/utils/converters.py index dd33b7b46..2cef5241d 100644 --- a/integrations/adk-middleware/python/src/ag_ui_adk/utils/converters.py +++ b/integrations/adk-middleware/python/src/ag_ui_adk/utils/converters.py @@ -8,7 +8,7 @@ from ag_ui.core import ( Message, UserMessage, AssistantMessage, SystemMessage, ToolMessage, - ToolCall, FunctionCall + ToolCall, FunctionCall, TextInputContent, BinaryInputContent ) from google.adk.events import Event as ADKEvent from google.genai import types @@ -38,18 +38,19 @@ def convert_ag_ui_messages_to_adk(messages: List[Message]) -> List[ADKEvent]: # Convert content based on message type if isinstance(message, (UserMessage, SystemMessage)): - if message.content: + flattened_content = flatten_message_content(message.content) + if flattened_content: event.content = types.Content( role=message.role, - parts=[types.Part(text=message.content)] + parts=[types.Part(text=flattened_content)] ) - + elif isinstance(message, AssistantMessage): parts = [] - + # Add text content if present if message.content: - parts.append(types.Part(text=message.content)) + parts.append(types.Part(text=flatten_message_content(message.content))) # Add tool calls if present if message.tool_calls: @@ -205,25 +206,32 @@ def convert_json_patch_to_state(patches: List[Dict[str, Any]]) -> Dict[str, Any] def extract_text_from_content(content: types.Content) -> str: - """Extract all text from ADK Content object. - - Args: - content: ADK Content object - - Returns: - Combined text from all text parts - """ + """Extract all text from ADK Content object.""" if not content or not content.parts: return "" - + text_parts = [] for part in content.parts: if part.text: text_parts.append(part.text) - + return "\n".join(text_parts) +def flatten_message_content(content: Any) -> str: + if content is None: + return "" + + if isinstance(content, str): + return content + + if isinstance(content, list): + text_parts = [part.text for part in content if isinstance(part, TextInputContent) and part.text] + return "\n".join(text_parts) + + return str(content) + + def create_error_message(error: Exception, context: str = "") -> str: """Create a user-friendly error message. @@ -240,4 +248,4 @@ def create_error_message(error: Exception, context: str = "") -> str: if context: return f"{context}: {error_type} - {error_msg}" else: - return f"{error_type}: {error_msg}" \ No newline at end of file + return f"{error_type}: {error_msg}" diff --git a/integrations/agno/typescript/package.json b/integrations/agno/typescript/package.json index 05b9cd0dc..a1747e3ab 100644 --- a/integrations/agno/typescript/package.json +++ b/integrations/agno/typescript/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/agno", "author": "Manu Hortet ", - "version": "0.0.2", + "version": "0.0.3", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", diff --git a/integrations/agno/typescript/src/index.ts b/integrations/agno/typescript/src/index.ts index e3f0db93e..641d5a6bd 100644 --- a/integrations/agno/typescript/src/index.ts +++ b/integrations/agno/typescript/src/index.ts @@ -5,4 +5,8 @@ import { HttpAgent } from "@ag-ui/client"; -export class AgnoAgent extends HttpAgent {} +export class AgnoAgent extends HttpAgent { + public override get maxVersion(): string { + return "0.0.39"; + } +} diff --git a/integrations/community/spring-ai/typescript/package.json b/integrations/community/spring-ai/typescript/package.json index a3441a42f..b379310cd 100644 --- a/integrations/community/spring-ai/typescript/package.json +++ b/integrations/community/spring-ai/typescript/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/spring-ai", "author": "Pascal Wilbrink", - "version": "0.0.1", + "version": "0.0.2", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", diff --git a/integrations/community/spring-ai/typescript/src/index.ts b/integrations/community/spring-ai/typescript/src/index.ts index 9d4f4a8c6..b347df14d 100644 --- a/integrations/community/spring-ai/typescript/src/index.ts +++ b/integrations/community/spring-ai/typescript/src/index.ts @@ -4,4 +4,8 @@ import { HttpAgent } from "@ag-ui/client"; -export class SpringAiAgent extends HttpAgent {} +export class SpringAiAgent extends HttpAgent { + public override get maxVersion(): string { + return "0.0.39"; + } +} diff --git a/integrations/crew-ai/typescript/package.json b/integrations/crew-ai/typescript/package.json index b5c334022..de7c8b1da 100644 --- a/integrations/crew-ai/typescript/package.json +++ b/integrations/crew-ai/typescript/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/crewai", "author": "Markus Ecker ", - "version": "0.0.2", + "version": "0.0.3", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", diff --git a/integrations/crew-ai/typescript/src/index.ts b/integrations/crew-ai/typescript/src/index.ts index ec5d5c7e2..deb09e421 100644 --- a/integrations/crew-ai/typescript/src/index.ts +++ b/integrations/crew-ai/typescript/src/index.ts @@ -1,3 +1,7 @@ import { HttpAgent } from "@ag-ui/client"; -export class CrewAIAgent extends HttpAgent {} +export class CrewAIAgent extends HttpAgent { + public override get maxVersion(): string { + return "0.0.39"; + } +} diff --git a/integrations/langgraph/python/ag_ui_langgraph/utils.py b/integrations/langgraph/python/ag_ui_langgraph/utils.py index ed5060887..4e0067512 100644 --- a/integrations/langgraph/python/ag_ui_langgraph/utils.py +++ b/integrations/langgraph/python/ag_ui_langgraph/utils.py @@ -13,6 +13,8 @@ ToolMessage as AGUIToolMessage, ToolCall as AGUIToolCall, FunctionCall as AGUIFunctionCall, + TextInputContent, + BinaryInputContent, ) from .types import State, SchemaKeys, LangGraphReasoning @@ -41,14 +43,56 @@ def stringify_if_needed(item: Any) -> str: return item return json.dumps(item) +def convert_langchain_multimodal_to_agui(content: List[Dict[str, Any]]) -> List[Union[TextInputContent, BinaryInputContent]]: + """Convert LangChain's multimodal content to AG-UI format.""" + agui_content = [] + for item in content: + if isinstance(item, dict): + if item.get("type") == "text": + agui_content.append(TextInputContent( + type="text", + text=item.get("text", "") + )) + elif item.get("type") == "image_url": + image_url_data = item.get("image_url", {}) + url = image_url_data.get("url", "") if isinstance(image_url_data, dict) else image_url_data + + # Parse data URLs to extract base64 data + if url.startswith("data:"): + # Format: data:mime_type;base64,data + parts = url.split(",", 1) + header = parts[0] + data = parts[1] if len(parts) > 1 else "" + mime_type = header.split(":")[1].split(";")[0] if ":" in header else "image/png" + + agui_content.append(BinaryInputContent( + type="binary", + mime_type=mime_type, + data=data + )) + else: + # Regular URL or ID + agui_content.append(BinaryInputContent( + type="binary", + mime_type="image/png", # Default MIME type + url=url + )) + return agui_content + def langchain_messages_to_agui(messages: List[BaseMessage]) -> List[AGUIMessage]: agui_messages: List[AGUIMessage] = [] for message in messages: if isinstance(message, HumanMessage): + # Handle multimodal content + if isinstance(message.content, list): + content = convert_langchain_multimodal_to_agui(message.content) + else: + content = stringify_if_needed(resolve_message_content(message.content)) + agui_messages.append(AGUIUserMessage( id=str(message.id), role="user", - content=stringify_if_needed(resolve_message_content(message.content)), + content=content, name=message.name, )) elif isinstance(message, AIMessage): @@ -91,14 +135,49 @@ def langchain_messages_to_agui(messages: List[BaseMessage]) -> List[AGUIMessage] raise TypeError(f"Unsupported message type: {type(message)}") return agui_messages +def convert_agui_multimodal_to_langchain(content: List[Union[TextInputContent, BinaryInputContent]]) -> List[Dict[str, Any]]: + """Convert AG-UI multimodal content to LangChain's multimodal format.""" + langchain_content = [] + for item in content: + if isinstance(item, TextInputContent): + langchain_content.append({ + "type": "text", + "text": item.text + }) + elif isinstance(item, BinaryInputContent): + # LangChain uses image_url format (OpenAI-style) + content_dict = {"type": "image_url"} + + # Prioritize url, then data, then id + if item.url: + content_dict["image_url"] = {"url": item.url} + elif item.data: + # Construct data URL from base64 data + content_dict["image_url"] = {"url": f"data:{item.mime_type};base64,{item.data}"} + elif item.id: + # Use id as a reference (some providers may support this) + content_dict["image_url"] = {"url": item.id} + + langchain_content.append(content_dict) + + return langchain_content + def agui_messages_to_langchain(messages: List[AGUIMessage]) -> List[BaseMessage]: langchain_messages = [] for message in messages: role = message.role if role == "user": + # Handle multimodal content + if isinstance(message.content, str): + content = message.content + elif isinstance(message.content, list): + content = convert_agui_multimodal_to_langchain(message.content) + else: + content = str(message.content) + langchain_messages.append(HumanMessage( id=message.id, - content=message.content, + content=content, name=message.name, )) elif role == "assistant": @@ -177,6 +256,36 @@ def resolve_message_content(content: Any) -> str | None: return None + +def flatten_user_content(content: Any) -> str: + """ + Flatten multimodal content into plain text. + Used for backwards compatibility or when multimodal is not supported. + """ + if content is None: + return "" + + if isinstance(content, str): + return content + + if isinstance(content, list): + parts = [] + for item in content: + if isinstance(item, TextInputContent): + if item.text: + parts.append(item.text) + elif isinstance(item, BinaryInputContent): + # Add descriptive placeholder for binary content + if item.filename: + parts.append(f"[Binary content: {item.filename}]") + elif item.url: + parts.append(f"[Binary content: {item.url}]") + else: + parts.append(f"[Binary content: {item.mime_type}]") + return "\n".join(parts) + + return str(content) + def camel_to_snake(name): return re.sub(r'(? Any: **make_json_safe(value.__dict__), } - return repr(value) \ No newline at end of file + return repr(value) diff --git a/integrations/langgraph/python/examples/agents/multimodal_messages/__init__.py b/integrations/langgraph/python/examples/agents/multimodal_messages/__init__.py new file mode 100644 index 000000000..989a9b717 --- /dev/null +++ b/integrations/langgraph/python/examples/agents/multimodal_messages/__init__.py @@ -0,0 +1,51 @@ +""" +Multimodal Messages Example + +This example demonstrates how to use AG-UI's multimodal message support +to send and receive messages containing both text and images. + +Key features: +- User messages can contain text and binary content (images, audio, files) +- Automatic conversion between AG-UI and LangChain multimodal formats +- Support for vision models like GPT-4o and Claude 3 + +Example usage: + +```python +from ag_ui.core import UserMessage, TextInputContent, BinaryInputContent + +# Create a multimodal user message +message = UserMessage( + id="user-123", + content=[ + TextInputContent(text="What's in this image?"), + BinaryInputContent( + mime_type="image/jpeg", + url="https://example.com/photo.jpg" + ), + ], +) + +# Or with base64 encoded data +message_with_data = UserMessage( + id="user-124", + content=[ + TextInputContent(text="Describe this picture"), + BinaryInputContent( + mime_type="image/png", + data="iVBORw0KGgoAAAANSUhEUgAAAAUA...", # base64 encoded + filename="screenshot.png" + ), + ], +) +``` + +The LangGraph integration automatically handles: +1. Converting AG-UI multimodal format to LangChain's format +2. Passing multimodal messages to vision models +3. Converting responses back to AG-UI format +""" + +from .agent import graph + +__all__ = ["graph"] diff --git a/integrations/langgraph/python/examples/agents/multimodal_messages/agent.py b/integrations/langgraph/python/examples/agents/multimodal_messages/agent.py new file mode 100644 index 000000000..067006f9b --- /dev/null +++ b/integrations/langgraph/python/examples/agents/multimodal_messages/agent.py @@ -0,0 +1,90 @@ +""" +An example demonstrating multimodal message support with images. + +This agent demonstrates how to: +1. Receive user messages with images +2. Process multimodal content (text + images) +3. Use vision models to analyze images +""" + +from typing import List, Any, Optional +import os + +from langchain_core.runnables import RunnableConfig +from langchain_core.messages import SystemMessage +from langchain_openai import ChatOpenAI +from langgraph.graph import StateGraph, END, START +from langgraph.graph import MessagesState +from langgraph.types import Command + +class AgentState(MessagesState): + """ + State of our graph. + """ + tools: List[Any] + +async def vision_chat_node(state: AgentState, config: Optional[RunnableConfig] = None): + """ + Chat node that supports multimodal input including images. + + The messages in state can contain multimodal content with text and images. + LangGraph will automatically handle the conversion from AG-UI format to + the format expected by the vision model. + """ + + # 1. Use a vision-capable model + # GPT-4o supports vision, as do other models like Claude 3 + model = ChatOpenAI(model="gpt-4o") + + # Define config for the model + if config is None: + config = RunnableConfig(recursion_limit=25) + + # 2. Bind tools if needed + model_with_tools = model.bind_tools( + state.get("tools", []), + parallel_tool_calls=False, + ) + + # 3. Define the system message + system_message = SystemMessage( + content=( + "You are a helpful vision assistant. You can analyze images and " + "answer questions about them. Describe what you see in detail." + ) + ) + + # 4. Run the model with multimodal messages + # The messages may contain both text and images + response = await model_with_tools.ainvoke([ + system_message, + *state["messages"], + ], config) + + # 5. Return the response + return Command( + goto=END, + update={ + "messages": response + } + ) + +# Define a new graph +workflow = StateGraph(AgentState) +workflow.add_node("vision_chat_node", vision_chat_node) +workflow.set_entry_point("vision_chat_node") + +# Add edges +workflow.add_edge(START, "vision_chat_node") +workflow.add_edge("vision_chat_node", END) + +# Conditionally use a checkpointer based on the environment +is_fast_api = os.environ.get("LANGGRAPH_FAST_API", "false").lower() == "true" + +# Compile the graph +if is_fast_api: + from langgraph.checkpoint.memory import MemorySaver + memory = MemorySaver() + graph = workflow.compile(checkpointer=memory) +else: + graph = workflow.compile() diff --git a/integrations/langgraph/python/examples/poetry.lock b/integrations/langgraph/python/examples/poetry.lock index 6bb4f1e00..58a6626f1 100644 --- a/integrations/langgraph/python/examples/poetry.lock +++ b/integrations/langgraph/python/examples/poetry.lock @@ -1,17 +1,16 @@ -# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "ag-ui-langgraph" -version = "0.0.17" +version = "0.0.18a0" description = "Implementation of the AG-UI protocol for LangGraph." optional = false python-versions = "<3.14,>=3.10" -groups = ["main"] files = [] develop = false [package.dependencies] -ag-ui-protocol = "==0.1.9" +ag-ui-protocol = "==0.2.0a0" langchain = ">=0.3.0" langchain-core = ">=0.3.0" langgraph = ">=0.3.25,<1.1.0" @@ -25,14 +24,13 @@ url = ".." [[package]] name = "ag-ui-protocol" -version = "0.1.9" +version = "0.2.0a0" description = "" optional = false python-versions = "<4.0,>=3.9" -groups = ["main"] files = [ - {file = "ag_ui_protocol-0.1.9-py3-none-any.whl", hash = "sha256:44c1238b0576a3915b3a16e1b3855724e08e92ebc96b1ff29379fbd3bfbd400b"}, - {file = "ag_ui_protocol-0.1.9.tar.gz", hash = "sha256:94d75e3919ff75e0b608a7eed445062ea0e6f11cd33b3386a7649047e0c7abd3"}, + {file = "ag_ui_protocol-0.2.0a0-py3-none-any.whl", hash = "sha256:3f1fbf7ea1f0333ce8034cdc67df192b3c1a85a6c39dc866c35f9329df85b9cf"}, + {file = "ag_ui_protocol-0.2.0a0.tar.gz", hash = "sha256:422bc284f9ab7019d2796641bac96faddd20eba815e1bad6122d72be1f989b80"}, ] [package.dependencies] @@ -44,7 +42,6 @@ version = "2.6.1" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, @@ -56,7 +53,6 @@ version = "3.11.16" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "aiohttp-3.11.16-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb46bb0f24813e6cede6cc07b1961d4b04f331f7112a23b5e21f567da4ee50aa"}, {file = "aiohttp-3.11.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:54eb3aead72a5c19fad07219acd882c1643a1027fbcdefac9b502c267242f955"}, @@ -151,7 +147,7 @@ propcache = ">=0.2.0" yarl = ">=1.17.0,<2.0" [package.extras] -speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -159,7 +155,6 @@ version = "1.3.2" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -174,7 +169,6 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -182,19 +176,19 @@ files = [ [[package]] name = "anthropic" -version = "0.61.0" +version = "0.72.0" description = "The official Python library for the anthropic API" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ - {file = "anthropic-0.61.0-py3-none-any.whl", hash = "sha256:798c8e6cc61e6315143c3f5847d2f220c45f1e69f433436872a237413ca58803"}, - {file = "anthropic-0.61.0.tar.gz", hash = "sha256:af4b3b8f3bc4626cca6af2d412e301974da1747179341ad9e271bdf5cbd2f008"}, + {file = "anthropic-0.72.0-py3-none-any.whl", hash = "sha256:0e9f5a7582f038cab8efbb4c959e49ef654a56bfc7ba2da51b5a7b8a84de2e4d"}, + {file = "anthropic-0.72.0.tar.gz", hash = "sha256:8971fe76dcffc644f74ac3883069beb1527641115ae0d6eb8fa21c1ce4082f7a"}, ] [package.dependencies] anyio = ">=3.5.0,<5" distro = ">=1.7.0,<2" +docstring-parser = ">=0.15,<1" httpx = ">=0.25.0,<1" jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" @@ -202,7 +196,7 @@ sniffio = "*" typing-extensions = ">=4.10,<5" [package.extras] -aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.8)"] +aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.9)"] bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] vertex = ["google-auth[requests] (>=2,<3)"] @@ -212,7 +206,6 @@ version = "4.9.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, @@ -225,7 +218,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -234,19 +227,18 @@ version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, ] [package.extras] -benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "cachetools" @@ -254,7 +246,6 @@ version = "5.5.2" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, @@ -266,7 +257,6 @@ version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" -groups = ["main"] files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, @@ -278,8 +268,6 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -359,7 +347,6 @@ version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -461,7 +448,6 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -476,8 +462,6 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] -markers = "platform_system == \"Windows\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -489,7 +473,6 @@ version = "0.6.7" description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = "<4.0,>=3.7" -groups = ["main"] files = [ {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, @@ -505,19 +488,33 @@ version = "1.9.0" description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" -groups = ["main"] files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, ] +[[package]] +name = "docstring-parser" +version = "0.17.0" +description = "Parse Python docstrings in reST, Google and Numpydoc format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708"}, + {file = "docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912"}, +] + +[package.extras] +dev = ["pre-commit (>=2.16.0)", "pydoctor (>=25.4.0)", "pytest"] +docs = ["pydoctor (>=25.4.0)"] +test = ["pytest"] + [[package]] name = "dotenv" version = "0.9.9" description = "Deprecated package" optional = false python-versions = "*" -groups = ["main"] files = [ {file = "dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9"}, ] @@ -531,7 +528,6 @@ version = "0.115.12" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"}, {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"}, @@ -552,7 +548,6 @@ version = "1.2.0" description = "Infer file type and MIME type of any file/buffer. No external dependencies." optional = false python-versions = "*" -groups = ["main"] files = [ {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, @@ -564,7 +559,6 @@ version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -662,21 +656,21 @@ files = [ [[package]] name = "google-ai-generativelanguage" -version = "0.6.18" +version = "0.9.0" description = "Google Ai Generativelanguage API client library" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ - {file = "google_ai_generativelanguage-0.6.18-py3-none-any.whl", hash = "sha256:13d8174fea90b633f520789d32df7b422058fd5883b022989c349f1017db7fcf"}, - {file = "google_ai_generativelanguage-0.6.18.tar.gz", hash = "sha256:274ba9fcf69466ff64e971d565884434388e523300afd468fc8e3033cd8e606e"}, + {file = "google_ai_generativelanguage-0.9.0-py3-none-any.whl", hash = "sha256:59f61e54cb341e602073098389876594c4d12e458617727558bb2628a86f3eb2"}, + {file = "google_ai_generativelanguage-0.9.0.tar.gz", hash = "sha256:2524748f413917446febc8e0879dc0d4f026a064f89f17c42b81bea77ab76c84"}, ] [package.dependencies] google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0", extras = ["grpc"]} google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" +grpcio = ">=1.33.2,<2.0.0" proto-plus = [ - {version = ">=1.22.3,<2.0.0"}, + {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, ] protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" @@ -687,7 +681,6 @@ version = "2.25.1" description = "Google API client core library" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "google_api_core-2.25.1-py3-none-any.whl", hash = "sha256:8a2a56c1fef82987a524371f99f3bd0143702fecc670c72e600c1cda6bf8dbb7"}, {file = "google_api_core-2.25.1.tar.gz", hash = "sha256:d2aaa0b13c78c61cb3f4282c464c046e45fbd75755683c9c525e6e8f7ed0a5e8"}, @@ -699,7 +692,7 @@ googleapis-common-protos = ">=1.56.2,<2.0.0" grpcio = {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} grpcio-status = {version = ">=1.49.1,<2.0.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} proto-plus = [ - {version = ">=1.22.3,<2.0.0"}, + {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, ] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" @@ -707,7 +700,7 @@ requests = ">=2.18.0,<3.0.0" [package.extras] async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.0)"] -grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0) ; python_version >= \"3.11\""] +grpc = ["grpcio (>=1.33.2,<2.0.0)", "grpcio (>=1.49.1,<2.0.0)", "grpcio-status (>=1.33.2,<2.0.0)", "grpcio-status (>=1.49.1,<2.0.0)"] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.0)"] @@ -717,7 +710,6 @@ version = "2.40.3" description = "Google Authentication Library" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "google_auth-2.40.3-py2.py3-none-any.whl", hash = "sha256:1370d4593e86213563547f97a92752fc658456fe4514c809544f330fed45a7ca"}, {file = "google_auth-2.40.3.tar.gz", hash = "sha256:500c3a29adedeb36ea9cf24b8d10858e152f2412e3ca37829b3fa18e33d63b77"}, @@ -731,11 +723,11 @@ rsa = ">=3.1.4,<5" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] enterprise-cert = ["cryptography", "pyopenssl"] -pyjwt = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] -pyopenssl = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +pyjwt = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0)"] -testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] +testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0)", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] urllib3 = ["packaging", "urllib3"] [[package]] @@ -744,7 +736,6 @@ version = "1.70.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8"}, {file = "googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257"}, @@ -762,8 +753,6 @@ version = "3.2.0" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.9" -groups = ["main"] -markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"" files = [ {file = "greenlet-3.2.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:b7a7b7f2bad3ca72eb2fa14643f1c4ca11d115614047299d89bc24a3b11ddd09"}, {file = "greenlet-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60e77242e38e99ecaede853755bbd8165e0b20a2f1f3abcaa6f0dceb826a7411"}, @@ -832,7 +821,6 @@ version = "1.74.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "grpcio-1.74.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:85bd5cdf4ed7b2d6438871adf6afff9af7096486fcf51818a81b77ef4dd30907"}, {file = "grpcio-1.74.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:68c8ebcca945efff9d86d8d6d7bfb0841cf0071024417e2d7f45c5e46b5b08eb"}, @@ -896,7 +884,6 @@ version = "1.74.0" description = "Status proto mapping for gRPC" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "grpcio_status-1.74.0-py3-none-any.whl", hash = "sha256:52cdbd759a6760fc8f668098a03f208f493dd5c76bf8e02598bbbaf1f6fc2876"}, {file = "grpcio_status-1.74.0.tar.gz", hash = "sha256:c58c1b24aa454e30f1fc6a7e0dbbc194c54a408143971a94b5f4e40bb5831432"}, @@ -913,7 +900,6 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -925,7 +911,6 @@ version = "1.0.8" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be"}, {file = "httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad"}, @@ -947,7 +932,6 @@ version = "0.27.2" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, @@ -961,7 +945,7 @@ idna = "*" sniffio = "*" [package.extras] -brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -973,7 +957,6 @@ version = "0.4.0" description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, @@ -985,7 +968,6 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["main"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1000,7 +982,6 @@ version = "0.8.2" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, @@ -1086,7 +1067,6 @@ version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -groups = ["main"] files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, @@ -1101,7 +1081,6 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1109,30 +1088,23 @@ files = [ [[package]] name = "langchain" -version = "0.3.23" +version = "1.0.3" description = "Building applications with LLMs through composability" optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain-0.3.23-py3-none-any.whl", hash = "sha256:084f05ee7e80b7c3f378ebadd7309f2a37868ce2906fa0ae64365a67843ade3d"}, - {file = "langchain-0.3.23.tar.gz", hash = "sha256:d95004afe8abebb52d51d6026270248da3f4b53d93e9bf699f76005e0c83ad34"}, + {file = "langchain-1.0.3-py3-none-any.whl", hash = "sha256:a7d57964ed16278c991de4ab15516a81937a58c5ac7d7aadccb18431ad8179b2"}, + {file = "langchain-1.0.3.tar.gz", hash = "sha256:f96d8d185cb8cbba9793f5c648e7d5eeec688f8e3778f700d75d89d6570ae11e"}, ] [package.dependencies] -langchain-core = ">=0.3.51,<1.0.0" -langchain-text-splitters = ">=0.3.8,<1.0.0" -langsmith = ">=0.1.17,<0.4" +langchain-core = ">=1.0.0,<2.0.0" +langgraph = ">=1.0.2,<1.1.0" pydantic = ">=2.7.4,<3.0.0" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" [package.extras] anthropic = ["langchain-anthropic"] aws = ["langchain-aws"] -azure-ai = ["langchain-azure-ai"] -cohere = ["langchain-cohere"] community = ["langchain-community"] deepseek = ["langchain-deepseek"] fireworks = ["langchain-fireworks"] @@ -1149,151 +1121,166 @@ xai = ["langchain-xai"] [[package]] name = "langchain-anthropic" -version = "0.3.18" -description = "An integration package connecting AnthropicMessages and LangChain" +version = "1.0.1" +description = "Integration package connecting Claude (Anthropic) APIs and LangChain" optional = false -python-versions = ">=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_anthropic-0.3.18-py3-none-any.whl", hash = "sha256:1be6ece317f08b3d780671fd4425b1dd05fd291a751e3debe3d4704bcf785082"}, - {file = "langchain_anthropic-0.3.18.tar.gz", hash = "sha256:f18970ae58fc4d79c8431dd67f8ab777de5e6d2f92285c8c9af1999cd126fb0a"}, + {file = "langchain_anthropic-1.0.1-py3-none-any.whl", hash = "sha256:a883f1030c50c2422a57985c0a89b1f49e9e0abe3117d212e510e3b838df7417"}, + {file = "langchain_anthropic-1.0.1.tar.gz", hash = "sha256:cd4c2f5d5d85d3aba290ea7b9976371d3e25fd58f6d70cfd0ef3323787862edc"}, ] [package.dependencies] -anthropic = ">=0.60.0,<1" -langchain-core = ">=0.3.72,<1.0.0" +anthropic = ">=0.69.0,<1.0.0" +langchain-core = ">=1.0.0,<2.0.0" pydantic = ">=2.7.4,<3.0.0" [[package]] -name = "langchain-community" -version = "0.3.21" -description = "Community contributed LangChain integrations." +name = "langchain-classic" +version = "1.0.0" +description = "Building applications with LLMs through composability" optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_community-0.3.21-py3-none-any.whl", hash = "sha256:8cb9bbb7ef15e5eea776193528dd0e0e1299047146d0c78b6c696ae2dc62e81f"}, - {file = "langchain_community-0.3.21.tar.gz", hash = "sha256:b87b9992cbeea7553ed93e3d39faf9893a8690318485f7dc861751c7878729f7"}, + {file = "langchain_classic-1.0.0-py3-none-any.whl", hash = "sha256:97f71f150c10123f5511c08873f030e35ede52311d729a7688c721b4e1e01f33"}, + {file = "langchain_classic-1.0.0.tar.gz", hash = "sha256:a63655609254ebc36d660eb5ad7c06c778b2e6733c615ffdac3eac4fbe2b12c5"}, ] [package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -dataclasses-json = ">=0.5.7,<0.7" -httpx-sse = ">=0.4.0,<1.0.0" -langchain = ">=0.3.23,<1.0.0" -langchain-core = ">=0.3.51,<1.0.0" -langsmith = ">=0.1.125,<0.4" -numpy = ">=1.26.2,<3" -pydantic-settings = ">=2.4.0,<3.0.0" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10" +langchain-core = ">=1.0.0,<2.0.0" +langchain-text-splitters = ">=1.0.0,<2.0.0" +langsmith = ">=0.1.17,<1.0.0" +pydantic = ">=2.7.4,<3.0.0" +pyyaml = ">=5.3.0,<7.0.0" +requests = ">=2.0.0,<3.0.0" +sqlalchemy = ">=1.4.0,<3.0.0" + +[package.extras] +anthropic = ["langchain-anthropic"] +aws = ["langchain-aws"] +deepseek = ["langchain-deepseek"] +fireworks = ["langchain-fireworks"] +google-genai = ["langchain-google-genai"] +google-vertexai = ["langchain-google-vertexai"] +groq = ["langchain-groq"] +mistralai = ["langchain-mistralai"] +ollama = ["langchain-ollama"] +openai = ["langchain-openai"] +perplexity = ["langchain-perplexity"] +together = ["langchain-together"] +xai = ["langchain-xai"] [[package]] -name = "langchain-core" -version = "0.3.72" -description = "Building applications with LLMs through composability" +name = "langchain-community" +version = "0.4.1" +description = "Community contributed LangChain integrations." optional = false -python-versions = ">=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_core-0.3.72-py3-none-any.whl", hash = "sha256:9fa15d390600eb6b6544397a7aa84be9564939b6adf7a2b091179ea30405b240"}, - {file = "langchain_core-0.3.72.tar.gz", hash = "sha256:4de3828909b3d7910c313242ab07b241294650f5cb6eac17738dd3638b1cd7de"}, + {file = "langchain_community-0.4.1-py3-none-any.whl", hash = "sha256:2135abb2c7748a35c84613108f7ebf30f8505b18c3c18305ffaecfc7651f6c6a"}, + {file = "langchain_community-0.4.1.tar.gz", hash = "sha256:f3b211832728ee89f169ddce8579b80a085222ddb4f4ed445a46e977d17b1e85"}, ] [package.dependencies] -jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.3.45" -packaging = ">=23.2" -pydantic = ">=2.7.4" -PyYAML = ">=5.3" +aiohttp = ">=3.8.3,<4.0.0" +dataclasses-json = ">=0.6.7,<0.7.0" +httpx-sse = ">=0.4.0,<1.0.0" +langchain-classic = ">=1.0.0,<2.0.0" +langchain-core = ">=1.0.1,<2.0.0" +langsmith = ">=0.1.125,<1.0.0" +numpy = [ + {version = ">=1.26.2", markers = "python_version < \"3.13\""}, + {version = ">=2.1.0", markers = "python_version >= \"3.13\""}, +] +pydantic-settings = ">=2.10.1,<3.0.0" +PyYAML = ">=5.3.0,<7.0.0" +requests = ">=2.32.5,<3.0.0" +SQLAlchemy = ">=1.4.0,<3.0.0" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" -typing-extensions = ">=4.7" [[package]] -name = "langchain-experimental" -version = "0.3.4" +name = "langchain-core" +version = "1.0.3" description = "Building applications with LLMs through composability" optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_experimental-0.3.4-py3-none-any.whl", hash = "sha256:2e587306aea36b60fa5e5fc05dc7281bee9f60a806f0bf9d30916e0ee096af80"}, - {file = "langchain_experimental-0.3.4.tar.gz", hash = "sha256:937c4259ee4a639c618d19acf0e2c5c2898ef127050346edc5655259aa281a21"}, + {file = "langchain_core-1.0.3-py3-none-any.whl", hash = "sha256:64f1bd45f04b174bbfd54c135a8adc52f4902b347c15a117d6383b412bf558a5"}, + {file = "langchain_core-1.0.3.tar.gz", hash = "sha256:10744945d21168fb40d1162a5f1cf69bf0137ff6ad2b12c87c199a5297410887"}, ] [package.dependencies] -langchain-community = ">=0.3.0,<0.4.0" -langchain-core = ">=0.3.28,<0.4.0" +jsonpatch = ">=1.33.0,<2.0.0" +langsmith = ">=0.3.45,<1.0.0" +packaging = ">=23.2.0,<26.0.0" +pydantic = ">=2.7.4,<3.0.0" +pyyaml = ">=5.3.0,<7.0.0" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" +typing-extensions = ">=4.7.0,<5.0.0" [[package]] name = "langchain-google-genai" -version = "2.1.9" +version = "3.0.1" description = "An integration package connecting Google's genai package and LangChain" optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_google_genai-2.1.9-py3-none-any.whl", hash = "sha256:8d3aab59706b8f8920a22bcfd63c5000ce430fe61db6ecdec262977d1a0be5b8"}, - {file = "langchain_google_genai-2.1.9.tar.gz", hash = "sha256:cd5d6f644b8dac3e312e30101bb97541aab240e82678e87a4df039ee1dc77531"}, + {file = "langchain_google_genai-3.0.1-py3-none-any.whl", hash = "sha256:2420396c75d3911af42af1bffb2c2ddd3fff73f9db9d619963429b5385e5f55e"}, + {file = "langchain_google_genai-3.0.1.tar.gz", hash = "sha256:d3f82fd274d2e9ca86448d5f89ac37b37b2d3cdfa6dec1af7bc792317b11dde7"}, ] [package.dependencies] filetype = ">=1.2.0,<2.0.0" -google-ai-generativelanguage = ">=0.6.18,<0.7.0" -langchain-core = ">=0.3.68,<0.4.0" -pydantic = ">=2,<3" +google-ai-generativelanguage = ">=0.7.0,<1.0.0" +langchain-core = ">=1.0.0,<2.0.0" +pydantic = ">=2.0.0,<3.0.0" [[package]] name = "langchain-openai" -version = "0.3.13" +version = "1.0.2" description = "An integration package connecting OpenAI and LangChain" optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_openai-0.3.13-py3-none-any.whl", hash = "sha256:2ca3f1865df32d03c3bd85c77f11f0ffd81b157b4e363291741c65c81463606a"}, - {file = "langchain_openai-0.3.13.tar.gz", hash = "sha256:75038efbf686f4b5fe2b6bdb75c43790d563ecd61984fd1d51d6d51c53609d64"}, + {file = "langchain_openai-1.0.2-py3-none-any.whl", hash = "sha256:b3eb9b82752063b46452aa868d8c8bc1604e57631648c3bc325bba58d3aeb143"}, + {file = "langchain_openai-1.0.2.tar.gz", hash = "sha256:621e8295c52db9a1fc74806a0bd227ea215c132c6c5e421d2982c9ee78468769"}, ] [package.dependencies] -langchain-core = ">=0.3.52,<1.0.0" -openai = ">=1.68.2,<2.0.0" -tiktoken = ">=0.7,<1" +langchain-core = ">=1.0.2,<2.0.0" +openai = ">=1.109.1,<3.0.0" +tiktoken = ">=0.7.0,<1.0.0" [[package]] name = "langchain-text-splitters" -version = "0.3.8" +version = "1.0.0" description = "LangChain text splitting utilities" optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] +python-versions = "<4.0.0,>=3.10.0" files = [ - {file = "langchain_text_splitters-0.3.8-py3-none-any.whl", hash = "sha256:e75cc0f4ae58dcf07d9f18776400cf8ade27fadd4ff6d264df6278bb302f6f02"}, - {file = "langchain_text_splitters-0.3.8.tar.gz", hash = "sha256:116d4b9f2a22dda357d0b79e30acf005c5518177971c66a9f1ab0edfdb0f912e"}, + {file = "langchain_text_splitters-1.0.0-py3-none-any.whl", hash = "sha256:f00c8219d3468f2c5bd951b708b6a7dd9bc3c62d0cfb83124c377f7170f33b2e"}, + {file = "langchain_text_splitters-1.0.0.tar.gz", hash = "sha256:d8580a20ad7ed10b432feb273e5758b2cc0902d094919629cec0e1ad691a6744"}, ] [package.dependencies] -langchain-core = ">=0.3.51,<1.0.0" +langchain-core = ">=1.0.0,<2.0.0" [[package]] name = "langgraph" -version = "0.6.1" +version = "1.0.2" description = "Building stateful, multi-actor applications with LLMs" optional = false -python-versions = ">=3.9" -groups = ["main"] +python-versions = ">=3.10" files = [ - {file = "langgraph-0.6.1-py3-none-any.whl", hash = "sha256:2736027faeb6cd5c0f1ab51a5345594cfcb5eb5beeb5ac1799a58fcecf4b4eae"}, - {file = "langgraph-0.6.1.tar.gz", hash = "sha256:e4399ac5ad0b70f58fa28d6fe05a41b84c15959f270d6d1a86edab4e92ae148b"}, + {file = "langgraph-1.0.2-py3-none-any.whl", hash = "sha256:b3d56b8c01de857b5fb1da107e8eab6e30512a377685eeedb4f76456724c9729"}, + {file = "langgraph-1.0.2.tar.gz", hash = "sha256:dae1af08d6025cb1fcaed68f502c01af7d634d9044787c853a46c791cfc52f67"}, ] [package.dependencies] langchain-core = ">=0.1" -langgraph-checkpoint = ">=2.1.0,<3.0.0" -langgraph-prebuilt = ">=0.6.0,<0.7.0" -langgraph-sdk = ">=0.2.0,<0.3.0" +langgraph-checkpoint = ">=2.1.0,<4.0.0" +langgraph-prebuilt = ">=1.0.2,<1.1.0" +langgraph-sdk = ">=0.2.2,<0.3.0" pydantic = ">=2.7.4" xxhash = ">=3.5.0" @@ -1303,7 +1290,6 @@ version = "2.1.1" description = "Library with base interfaces for LangGraph checkpoint savers." optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "langgraph_checkpoint-2.1.1-py3-none-any.whl", hash = "sha256:5a779134fd28134a9a83d078be4450bbf0e0c79fdf5e992549658899e6fc5ea7"}, {file = "langgraph_checkpoint-2.1.1.tar.gz", hash = "sha256:72038c0f9e22260cb9bff1f3ebe5eb06d940b7ee5c1e4765019269d4f21cf92d"}, @@ -1315,30 +1301,28 @@ ormsgpack = ">=1.10.0" [[package]] name = "langgraph-prebuilt" -version = "0.6.1" +version = "1.0.2" description = "Library with high-level APIs for creating and executing LangGraph agents and tools." optional = false -python-versions = ">=3.9" -groups = ["main"] +python-versions = ">=3.10" files = [ - {file = "langgraph_prebuilt-0.6.1-py3-none-any.whl", hash = "sha256:a3a970451371ec66509c6969505286a5d92132af7062d0b2b6dab08c2e27b50f"}, - {file = "langgraph_prebuilt-0.6.1.tar.gz", hash = "sha256:574c409113e02d3c58157877c5ea638faa80647b259027647ab88830d7ecef00"}, + {file = "langgraph_prebuilt-1.0.2-py3-none-any.whl", hash = "sha256:d9499f7c449fb637ee7b87e3f6a3b74095f4202053c74d33894bd839ea4c57c7"}, + {file = "langgraph_prebuilt-1.0.2.tar.gz", hash = "sha256:9896dbabf04f086eb59df4294f54ab5bdb21cd78e27e0a10e695dffd1cc6097d"}, ] [package.dependencies] -langchain-core = ">=0.3.67" -langgraph-checkpoint = ">=2.1.0,<3.0.0" +langchain-core = ">=1.0.0" +langgraph-checkpoint = ">=2.1.0,<4.0.0" [[package]] name = "langgraph-sdk" -version = "0.2.0" +version = "0.2.9" description = "SDK for interacting with LangGraph API" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ - {file = "langgraph_sdk-0.2.0-py3-none-any.whl", hash = "sha256:150722264f225c4d47bbe7394676be102fdbf04c4400a0dd1bd41a70c6430cc7"}, - {file = "langgraph_sdk-0.2.0.tar.gz", hash = "sha256:cd8b5f6595e5571be5cbffd04cf936978ab8f5d1005517c99715947ef871e246"}, + {file = "langgraph_sdk-0.2.9-py3-none-any.whl", hash = "sha256:fbf302edadbf0fb343596f91c597794e936ef68eebc0d3e1d358b6f9f72a1429"}, + {file = "langgraph_sdk-0.2.9.tar.gz", hash = "sha256:b3bd04c6be4fa382996cd2be8fbc1e7cc94857d2bc6b6f4599a7f2a245975303"}, ] [package.dependencies] @@ -1351,7 +1335,6 @@ version = "0.3.45" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "langsmith-0.3.45-py3-none-any.whl", hash = "sha256:5b55f0518601fa65f3bb6b1a3100379a96aa7b3ed5e9380581615ba9c65ed8ed"}, {file = "langsmith-0.3.45.tar.gz", hash = "sha256:1df3c6820c73ed210b2c7bc5cdb7bfa19ddc9126cd03fdf0da54e2e171e6094d"}, @@ -1381,7 +1364,6 @@ version = "3.26.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, @@ -1401,7 +1383,6 @@ version = "6.4.3" description = "multidict implementation" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5"}, {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188"}, @@ -1515,7 +1496,6 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" -groups = ["main"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -1527,7 +1507,6 @@ version = "2.2.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" -groups = ["main"] files = [ {file = "numpy-2.2.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8146f3550d627252269ac42ae660281d673eb6f8b32f113538e0cc2a9aed42b9"}, {file = "numpy-2.2.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e642d86b8f956098b564a45e6f6ce68a22c2c97a04f5acd3f221f57b8cb850ae"}, @@ -1588,14 +1567,13 @@ files = [ [[package]] name = "openai" -version = "1.74.0" +version = "2.2.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ - {file = "openai-1.74.0-py3-none-any.whl", hash = "sha256:aff3e0f9fb209836382ec112778667027f4fd6ae38bdb2334bc9e173598b092a"}, - {file = "openai-1.74.0.tar.gz", hash = "sha256:592c25b8747a7cad33a841958f5eb859a785caea9ee22b9e4f4a2ec062236526"}, + {file = "openai-2.2.0-py3-none-any.whl", hash = "sha256:d222e63436e33f3134a3d7ce490dc2d2f146fa98036eb65cc225df3ce163916f"}, + {file = "openai-2.2.0.tar.gz", hash = "sha256:bc49d077a8bf0e370eec4d038bc05e232c20855a19df0b58e5b3e5a8da7d33e0"}, ] [package.dependencies] @@ -1609,6 +1587,7 @@ tqdm = ">4" typing-extensions = ">=4.11,<5" [package.extras] +aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.8)"] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] realtime = ["websockets (>=13,<16)"] voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"] @@ -1619,7 +1598,6 @@ version = "3.10.16" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "orjson-3.10.16-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4cb473b8e79154fa778fb56d2d73763d977be3dcc140587e07dbc545bbfc38f8"}, {file = "orjson-3.10.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:622a8e85eeec1948690409a19ca1c7d9fd8ff116f4861d261e6ae2094fe59a00"}, @@ -1697,7 +1675,6 @@ version = "1.10.0" description = "Fast, correct Python msgpack library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "ormsgpack-1.10.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:8a52c7ce7659459f3dc8dec9fd6a6c76f855a0a7e2b61f26090982ac10b95216"}, {file = "ormsgpack-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:060f67fe927582f4f63a1260726d019204b72f460cf20930e6c925a1d129f373"}, @@ -1748,7 +1725,6 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -1760,7 +1736,6 @@ version = "0.3.1" description = "Accelerated property cache" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, @@ -1868,7 +1843,6 @@ version = "1.26.1" description = "Beautiful, Pythonic protocol buffers" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, @@ -1886,7 +1860,6 @@ version = "6.31.1" description = "" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9"}, {file = "protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447"}, @@ -1905,7 +1878,6 @@ version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -1917,7 +1889,6 @@ version = "0.4.2" description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, @@ -1932,8 +1903,6 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -1945,7 +1914,6 @@ version = "2.11.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "pydantic-2.11.3-py3-none-any.whl", hash = "sha256:a082753436a07f9ba1289c6ffa01cd93db3548776088aa917cc43b63f68fa60f"}, {file = "pydantic-2.11.3.tar.gz", hash = "sha256:7471657138c16adad9322fe3070c0116dd6c3ad8d649300e3cbdfe91f4db4ec3"}, @@ -1959,7 +1927,7 @@ typing-inspection = ">=0.4.0" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] +timezone = ["tzdata"] [[package]] name = "pydantic-core" @@ -1967,7 +1935,6 @@ version = "2.33.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "pydantic_core-2.33.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3077cfdb6125cc8dab61b155fdd714663e401f0e6883f9632118ec12cf42df26"}, {file = "pydantic_core-2.33.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ffab8b2908d152e74862d276cf5017c81a2f3719f14e8e3e8d6b83fda863927"}, @@ -2075,22 +2042,24 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.8.1" +version = "2.11.0" description = "Settings management using Pydantic" optional = false -python-versions = ">=3.8" -groups = ["main"] +python-versions = ">=3.9" files = [ - {file = "pydantic_settings-2.8.1-py3-none-any.whl", hash = "sha256:81942d5ac3d905f7f3ee1a70df5dfb62d5569c12f51a5a647defc1c3d9ee2e9c"}, - {file = "pydantic_settings-2.8.1.tar.gz", hash = "sha256:d5c663dfbe9db9d5e1c646b2e161da12f0d734d422ee56f567d0ea2cee4e8585"}, + {file = "pydantic_settings-2.11.0-py3-none-any.whl", hash = "sha256:fe2cea3413b9530d10f3a5875adffb17ada5c1e1bab0b2885546d7310415207c"}, + {file = "pydantic_settings-2.11.0.tar.gz", hash = "sha256:d0e87a1c7d33593beb7194adb8470fc426e95ba02af83a0f23474a04c9a08180"}, ] [package.dependencies] pydantic = ">=2.7.0" python-dotenv = ">=0.21.0" +typing-inspection = ">=0.4.0" [package.extras] +aws-secrets-manager = ["boto3 (>=1.35.0)", "boto3-stubs[secretsmanager]"] azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] +gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"] toml = ["tomli (>=2.0.1)"] yaml = ["pyyaml (>=6.0.1)"] @@ -2100,7 +2069,6 @@ version = "1.1.0" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"}, {file = "python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5"}, @@ -2115,7 +2083,6 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -2178,7 +2145,6 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -2278,19 +2244,18 @@ files = [ [[package]] name = "requests" -version = "2.32.3" +version = "2.32.5" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.8" -groups = ["main"] +python-versions = ">=3.9" files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" @@ -2304,7 +2269,6 @@ version = "1.0.0" description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] files = [ {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, @@ -2319,7 +2283,6 @@ version = "4.9.1" description = "Pure-Python RSA implementation" optional = false python-versions = "<4,>=3.6" -groups = ["main"] files = [ {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, @@ -2334,7 +2297,6 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -2346,7 +2308,6 @@ version = "2.0.40" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "SQLAlchemy-2.0.40-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96"}, {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867"}, @@ -2442,7 +2403,6 @@ version = "0.46.2" description = "The little ASGI library that shines." optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35"}, {file = "starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5"}, @@ -2460,7 +2420,6 @@ version = "9.1.2" description = "Retry code until it succeeds" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, @@ -2476,7 +2435,6 @@ version = "0.9.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "tiktoken-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:586c16358138b96ea804c034b8acf3f5d3f0258bd2bc3b0227af4af5d622e382"}, {file = "tiktoken-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9c59ccc528c6c5dd51820b3474402f69d9a9e1d656226848ad68a8d5b2e5108"}, @@ -2524,7 +2482,6 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -2546,7 +2503,6 @@ version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, @@ -2558,7 +2514,6 @@ version = "0.9.0" description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" -groups = ["main"] files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -2574,7 +2529,6 @@ version = "0.4.0" description = "Runtime typing introspection tools" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, @@ -2589,14 +2543,13 @@ version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, ] [package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2607,7 +2560,6 @@ version = "0.34.1" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "uvicorn-0.34.1-py3-none-any.whl", hash = "sha256:984c3a8c7ca18ebaad15995ee7401179212c59521e67bfc390c07fa2b8d2e065"}, {file = "uvicorn-0.34.1.tar.gz", hash = "sha256:af981725fc4b7ffc5cb3b0e9eda6258a90c4b52cb2a83ce567ae0a7ae1757afc"}, @@ -2618,7 +2570,7 @@ click = ">=7.0" h11 = ">=0.8" [package.extras] -standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "xxhash" @@ -2626,7 +2578,6 @@ version = "3.5.0" description = "Python binding for xxHash" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, @@ -2759,7 +2710,6 @@ version = "1.19.0" description = "Yet another URL library" optional = false python-versions = ">=3.9" -groups = ["main"] files = [ {file = "yarl-1.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0bae32f8ebd35c04d6528cedb4a26b8bf25339d3616b04613b97347f919b76d3"}, {file = "yarl-1.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8015a076daf77823e7ebdcba474156587391dab4e70c732822960368c01251e6"}, @@ -2861,7 +2811,6 @@ version = "0.23.0" description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -2969,6 +2918,6 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\ cffi = ["cffi (>=1.11)"] [metadata] -lock-version = "2.1" +lock-version = "2.0" python-versions = ">=3.12,<3.14" -content-hash = "6f71ccd98fc91a3afa08c4407cce479e3dd9d2212015a800fec035fa97c33db0" +content-hash = "4c35ba27df33f05f4bc754cc44eeebad8cee1d14a78a9697483a2bdfbad359d5" diff --git a/integrations/langgraph/python/examples/pyproject.toml b/integrations/langgraph/python/examples/pyproject.toml index 0e6841203..efccd802e 100644 --- a/integrations/langgraph/python/examples/pyproject.toml +++ b/integrations/langgraph/python/examples/pyproject.toml @@ -4,6 +4,7 @@ version = "0.1.0" description = "" readme = "README.md" packages = [{ include = "agents" }] +authors = ["Ran Shem Tov"] [project] name = "agents" @@ -13,14 +14,13 @@ version = "0.0.1" python = ">=3.12,<3.14" uvicorn = "^0.34.0" dotenv = "^0.9.9" -langchain = ">=0.1.0" -langchain-anthropic = ">=0.3.18" -langchain-core = ">=0.1.5" -langchain-community = ">=0.0.1" -langchain-experimental = ">=0.0.11" -langchain-google-genai = ">=2.1.9" -langchain-openai = ">=0.0.1" -langgraph = "^0.6.1" +langchain = ">=1.0.3" +langchain-anthropic = ">=1.0.1" +langchain-core = ">=1.0.2" +langchain-community = ">=0.0.36" +langchain-google-genai = ">=2.1.12" +langchain-openai = ">=1.0.1" +langgraph = ">=1.0.0" ag-ui-langgraph = { path = "../" } python-dotenv = "^1.0.0" fastapi = "^0.115.12" diff --git a/integrations/langgraph/python/examples/uv.lock b/integrations/langgraph/python/examples/uv.lock index d3d4eecac..3830bac2c 100644 --- a/integrations/langgraph/python/examples/uv.lock +++ b/integrations/langgraph/python/examples/uv.lock @@ -1,14 +1,13 @@ version = 1 -requires-python = ">=3.12" +requires-python = ">=3.13" resolution-markers = [ "python_full_version >= '3.14'", - "python_full_version == '3.13.*'", - "python_full_version < '3.13'", + "python_full_version < '3.14'", ] [[package]] name = "ag-ui-langgraph" -version = "0.0.17" +version = "0.0.18a0" source = { directory = "../" } dependencies = [ { name = "ag-ui-protocol" }, @@ -19,7 +18,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "ag-ui-protocol", specifier = "==0.1.9" }, + { name = "ag-ui-protocol", specifier = "==0.2.0a0" }, { name = "fastapi", marker = "extra == 'fastapi'", specifier = ">=0.115.12,<0.116.0" }, { name = "langchain", specifier = ">=0.3.0" }, { name = "langchain-core", specifier = ">=0.3.0" }, @@ -28,14 +27,14 @@ requires-dist = [ [[package]] name = "ag-ui-protocol" -version = "0.1.9" +version = "0.2.0a0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7b/d7/a8f8789b3b8b5f7263a902361468e8dfefd85ec63d1d5398579b9175d76d/ag_ui_protocol-0.1.9.tar.gz", hash = "sha256:94d75e3919ff75e0b608a7eed445062ea0e6f11cd33b3386a7649047e0c7abd3", size = 4988 } +sdist = { url = "https://files.pythonhosted.org/packages/15/35/dd487e5d4930236c6fd2a9530863e1899eb003d9f96bc3b7800ac73530bb/ag_ui_protocol-0.2.0a0.tar.gz", hash = "sha256:422bc284f9ab7019d2796641bac96faddd20eba815e1bad6122d72be1f989b80", size = 5582 } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/50/2bb71a2a9135f4d88706293773320d185789b592987c09f79e9bf2f4875f/ag_ui_protocol-0.1.9-py3-none-any.whl", hash = "sha256:44c1238b0576a3915b3a16e1b3855724e08e92ebc96b1ff29379fbd3bfbd400b", size = 7070 }, + { url = "https://files.pythonhosted.org/packages/76/85/b2b1eacf49c09c9d40ca2be61213e8e3fdbc88e77eebb0d7668570cf4da3/ag_ui_protocol-0.2.0a0-py3-none-any.whl", hash = "sha256:3f1fbf7ea1f0333ce8034cdc67df192b3c1a85a6c39dc866c35f9329df85b9cf", size = 7674 }, ] [[package]] @@ -50,7 +49,6 @@ dependencies = [ { name = "langchain-anthropic" }, { name = "langchain-community" }, { name = "langchain-core" }, - { name = "langchain-experimental" }, { name = "langchain-google-genai" }, { name = "langchain-openai" }, { name = "langgraph" }, @@ -63,14 +61,13 @@ requires-dist = [ { name = "ag-ui-langgraph", directory = "../" }, { name = "dotenv", specifier = ">=0.9.9,<0.10.0" }, { name = "fastapi", specifier = ">=0.115.12,<0.116.0" }, - { name = "langchain", specifier = ">=0.1.0" }, - { name = "langchain-anthropic", specifier = ">=0.3.18" }, - { name = "langchain-community", specifier = ">=0.0.1" }, - { name = "langchain-core", specifier = ">=0.1.5" }, - { name = "langchain-experimental", specifier = ">=0.0.11" }, - { name = "langchain-google-genai", specifier = ">=2.1.9" }, - { name = "langchain-openai", specifier = ">=0.0.1" }, - { name = "langgraph", specifier = ">=0.6.1,<0.7.0" }, + { name = "langchain", specifier = ">=1.0.3" }, + { name = "langchain-anthropic", specifier = ">=1.0.1" }, + { name = "langchain-community", specifier = ">=0.0.36" }, + { name = "langchain-core", specifier = ">=1.0.2" }, + { name = "langchain-google-genai", specifier = ">=2.1.12" }, + { name = "langchain-openai", specifier = ">=1.0.1" }, + { name = "langgraph", specifier = ">=1.0.0" }, { name = "python-dotenv", specifier = ">=1.0.0,<2.0.0" }, { name = "uvicorn", specifier = ">=0.34.0,<0.35.0" }, ] @@ -86,7 +83,7 @@ wheels = [ [[package]] name = "aiohttp" -version = "3.13.0" +version = "3.13.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -97,76 +94,59 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/f1/8515650ac3121a9e55c7b217c60e7fae3e0134b5acfe65691781b5356929/aiohttp-3.13.0.tar.gz", hash = "sha256:378dbc57dd8cf341ce243f13fa1fa5394d68e2e02c15cd5f28eae35a70ec7f67", size = 7832348 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/95/7e8bdfa6e79099a086d59d42589492f1fe9d29aae3cefb58b676015ce278/aiohttp-3.13.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1c272a9a18a5ecc48a7101882230046b83023bb2a662050ecb9bfcb28d9ab53a", size = 735585 }, - { url = "https://files.pythonhosted.org/packages/9f/20/2f1d3ee06ee94eafe516810705219bff234d09f135d6951661661d5595ae/aiohttp-3.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:97891a23d7fd4e1afe9c2f4473e04595e4acb18e4733b910b6577b74e7e21985", size = 490613 }, - { url = "https://files.pythonhosted.org/packages/74/15/ab8600ef6dc1dcd599009a81acfed2ea407037e654d32e47e344e0b08c34/aiohttp-3.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:475bd56492ce5f4cffe32b5533c6533ee0c406d1d0e6924879f83adcf51da0ae", size = 489750 }, - { url = "https://files.pythonhosted.org/packages/33/59/752640c2b86ca987fe5703a01733b00d375e6cd2392bc7574489934e64e5/aiohttp-3.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c32ada0abb4bc94c30be2b681c42f058ab104d048da6f0148280a51ce98add8c", size = 1736812 }, - { url = "https://files.pythonhosted.org/packages/3d/c6/dd6b86ddb852a7fdbcdc7a45b6bdc80178aef713c08279afcaee7a5a9f07/aiohttp-3.13.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4af1f8877ca46ecdd0bc0d4a6b66d4b2bddc84a79e2e8366bc0d5308e76bceb8", size = 1698535 }, - { url = "https://files.pythonhosted.org/packages/33/e2/27c92d205b9e8cee7661670e8e9f187931b71e26d42796b153d2a0ba6949/aiohttp-3.13.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e04ab827ec4f775817736b20cdc8350f40327f9b598dec4e18c9ffdcbea88a93", size = 1766573 }, - { url = "https://files.pythonhosted.org/packages/df/6a/1fc1ad71d130a30f7a207d8d958a41224c29b834463b5185efb2dbff6ad4/aiohttp-3.13.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a6d9487b9471ec36b0faedf52228cd732e89be0a2bbd649af890b5e2ce422353", size = 1865229 }, - { url = "https://files.pythonhosted.org/packages/14/51/d0c1701a79fcb0109cff5304da16226581569b89a282d8e7f1549a7e3ec0/aiohttp-3.13.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e66c57416352f36bf98f6641ddadd47c93740a22af7150d3e9a1ef6e983f9a8", size = 1750379 }, - { url = "https://files.pythonhosted.org/packages/ae/3d/2ec4b934f85856de1c0c18e90adc8902adadbfac2b3c0b831bfeb7214fc8/aiohttp-3.13.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:469167d5372f5bb3aedff4fc53035d593884fff2617a75317740e885acd48b04", size = 1560798 }, - { url = "https://files.pythonhosted.org/packages/38/56/e23d9c3e13006e599fdce3851517c70279e177871e3e567d22cf3baf5d6c/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a9f3546b503975a69b547c9fd1582cad10ede1ce6f3e313a2f547c73a3d7814f", size = 1697552 }, - { url = "https://files.pythonhosted.org/packages/56/cb/caa32c2ccaeca0a3dc39129079fd2ad02f9406c3a5f7924340435b87d4cd/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6b4174fcec98601f0cfdf308ee29a6ae53c55f14359e848dab4e94009112ee7d", size = 1718609 }, - { url = "https://files.pythonhosted.org/packages/fb/c0/5911856fef9e40fd1ccbb8c54a90116875d5753a92c1cac66ce2059b390d/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a533873a7a4ec2270fb362ee5a0d3b98752e4e1dc9042b257cd54545a96bd8ed", size = 1735887 }, - { url = "https://files.pythonhosted.org/packages/0e/48/8d6f4757a24c02f0a454c043556593a00645d10583859f7156db44d8b7d3/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ce887c5e54411d607ee0959cac15bb31d506d86a9bcaddf0b7e9d63325a7a802", size = 1553079 }, - { url = "https://files.pythonhosted.org/packages/39/fa/e82c9445e40b50e46770702b5b6ca2f767966d53e1a5eef03583ceac6df6/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d871f6a30d43e32fc9252dc7b9febe1a042b3ff3908aa83868d7cf7c9579a59b", size = 1762750 }, - { url = "https://files.pythonhosted.org/packages/3d/e6/9d30554e7f1e700bfeae4ab6b153d5dc7441606a9ec5e929288fa93a1477/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:222c828243b4789d79a706a876910f656fad4381661691220ba57b2ab4547865", size = 1717461 }, - { url = "https://files.pythonhosted.org/packages/1f/e5/29cca547990a59ea54f0674fc01de98519fc628cfceeab6175711750eca7/aiohttp-3.13.0-cp312-cp312-win32.whl", hash = "sha256:682d2e434ff2f1108314ff7f056ce44e457f12dbed0249b24e106e385cf154b9", size = 424633 }, - { url = "https://files.pythonhosted.org/packages/8b/68/46dd042d7bc62eab30bafdb8569f55ef125c3a88bb174270324224f8df56/aiohttp-3.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:0a2be20eb23888df130214b91c262a90e2de1553d6fb7de9e9010cec994c0ff2", size = 451401 }, - { url = "https://files.pythonhosted.org/packages/86/2c/ac53efdc9c10e41399acc2395af98f835b86d0141d5c3820857eb9f6a14a/aiohttp-3.13.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:00243e51f16f6ec0fb021659d4af92f675f3cf9f9b39efd142aa3ad641d8d1e6", size = 730090 }, - { url = "https://files.pythonhosted.org/packages/13/18/1ac95683e1c1d48ef4503965c96f5401618a04c139edae12e200392daae8/aiohttp-3.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059978d2fddc462e9211362cbc8446747ecd930537fa559d3d25c256f032ff54", size = 488041 }, - { url = "https://files.pythonhosted.org/packages/fd/79/ef0d477c771a642d1a881b92d226314c43d3c74bc674c93e12e679397a97/aiohttp-3.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:564b36512a7da3b386143c611867e3f7cfb249300a1bf60889bd9985da67ab77", size = 486989 }, - { url = "https://files.pythonhosted.org/packages/37/b4/0e440481a0e77a551d6c5dcab5d11f1ff6b2b2ddb8dedc24f54f5caad732/aiohttp-3.13.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4aa995b9156ae499393d949a456a7ab0b994a8241a96db73a3b73c7a090eff6a", size = 1718331 }, - { url = "https://files.pythonhosted.org/packages/e6/59/76c421cc4a75bb1aceadb92f20ee6f05a990aa6960c64b59e8e0d340e3f5/aiohttp-3.13.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:55ca0e95a3905f62f00900255ed807c580775174252999286f283e646d675a49", size = 1686263 }, - { url = "https://files.pythonhosted.org/packages/ec/ac/5095f12a79c7775f402cfc3e83651b6e0a92ade10ddf7f2c78c4fed79f71/aiohttp-3.13.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:49ce7525853a981fc35d380aa2353536a01a9ec1b30979ea4e35966316cace7e", size = 1754265 }, - { url = "https://files.pythonhosted.org/packages/05/d7/a48e4989bd76cc70600c505bbdd0d90ca1ad7f9053eceeb9dbcf9345a9ec/aiohttp-3.13.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2117be9883501eaf95503bd313eb4c7a23d567edd44014ba15835a1e9ec6d852", size = 1856486 }, - { url = "https://files.pythonhosted.org/packages/1e/02/45b388b49e37933f316e1fb39c0de6fb1d77384b0c8f4cf6af5f2cbe3ea6/aiohttp-3.13.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d169c47e40c911f728439da853b6fd06da83761012e6e76f11cb62cddae7282b", size = 1737545 }, - { url = "https://files.pythonhosted.org/packages/6c/a7/4fde058f1605c34a219348a83a99f14724cc64e68a42480fc03cf40f9ea3/aiohttp-3.13.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:703ad3f742fc81e543638a7bebddd35acadaa0004a5e00535e795f4b6f2c25ca", size = 1552958 }, - { url = "https://files.pythonhosted.org/packages/d1/12/0bac4d29231981e3aa234e88d1931f6ba38135ff4c2cf3afbb7895527630/aiohttp-3.13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5bf635c3476f4119b940cc8d94ad454cbe0c377e61b4527f0192aabeac1e9370", size = 1681166 }, - { url = "https://files.pythonhosted.org/packages/71/95/b829eb5f8ac1ca1d8085bb8df614c8acf3ff32e23ad5ad1173c7c9761daa/aiohttp-3.13.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cfe6285ef99e7ee51cef20609be2bc1dd0e8446462b71c9db8bb296ba632810a", size = 1710516 }, - { url = "https://files.pythonhosted.org/packages/47/6d/15ccf4ef3c254d899f62580e0c7fc717014f4d14a3ac31771e505d2c736c/aiohttp-3.13.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:34d8af6391c5f2e69749d7f037b614b8c5c42093c251f336bdbfa4b03c57d6c4", size = 1731354 }, - { url = "https://files.pythonhosted.org/packages/46/6a/8acf6c57e03b6fdcc8b4c06392e66abaff3213ea275e41db3edb20738d91/aiohttp-3.13.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:12f5d820fadc5848d4559ea838aef733cf37ed2a1103bba148ac2f5547c14c29", size = 1548040 }, - { url = "https://files.pythonhosted.org/packages/75/7d/fbfd59ab2a83fe2578ce79ac3db49727b81e9f4c3376217ad09c03c6d279/aiohttp-3.13.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f1338b61ea66f4757a0544ed8a02ccbf60e38d9cfb3225888888dd4475ebb96", size = 1756031 }, - { url = "https://files.pythonhosted.org/packages/99/e7/cc9f0fdf06cab3ca61e6b62bff9a4b978b8ca736e9d76ddf54365673ab19/aiohttp-3.13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:582770f82513419512da096e8df21ca44f86a2e56e25dc93c5ab4df0fe065bf0", size = 1714933 }, - { url = "https://files.pythonhosted.org/packages/db/43/7abbe1de94748a58a71881163ee280fd3217db36e8344d109f63638fe16a/aiohttp-3.13.0-cp313-cp313-win32.whl", hash = "sha256:3194b8cab8dbc882f37c13ef1262e0a3d62064fa97533d3aa124771f7bf1ecee", size = 423799 }, - { url = "https://files.pythonhosted.org/packages/c9/58/afab7f2b9e7df88c995995172eb78cae8a3d5a62d5681abaade86b3f0089/aiohttp-3.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:7897298b3eedc790257fef8a6ec582ca04e9dbe568ba4a9a890913b925b8ea21", size = 450138 }, - { url = "https://files.pythonhosted.org/packages/fe/c1/93bb1e35cd0c4665bb422b1ca3d87b588f4bca2656bbe9292b963d5b76a9/aiohttp-3.13.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c417f8c2e1137775569297c584a8a7144e5d1237789eae56af4faf1894a0b861", size = 733187 }, - { url = "https://files.pythonhosted.org/packages/5e/36/2d50eba91992d3fe7a6452506ccdab45d03685ee8d8acaa5b289384a7d4c/aiohttp-3.13.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f84b53326abf8e56ebc28a35cebf4a0f396a13a76300f500ab11fe0573bf0b52", size = 488684 }, - { url = "https://files.pythonhosted.org/packages/82/93/fa4b1d5ecdc7805bdf0815ef00257db4632ccf0a8bffd44f9fc4657b1677/aiohttp-3.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:990a53b9d6a30b2878789e490758e568b12b4a7fb2527d0c89deb9650b0e5813", size = 489255 }, - { url = "https://files.pythonhosted.org/packages/05/0f/85241f0d158da5e24e8ac9d50c0849ed24f882cafc53dc95749ef85eef09/aiohttp-3.13.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c811612711e01b901e18964b3e5dec0d35525150f5f3f85d0aee2935f059910a", size = 1715914 }, - { url = "https://files.pythonhosted.org/packages/ab/fc/c755590d6f6d2b5d1565c72d6ee658d3c30ec61acb18964d1e9bf991d9b5/aiohttp-3.13.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ee433e594d7948e760b5c2a78cc06ac219df33b0848793cf9513d486a9f90a52", size = 1665171 }, - { url = "https://files.pythonhosted.org/packages/3a/de/caa61e213ff546b8815aef5e931d7eae1dbe8c840a3f11ec5aa41c5ae462/aiohttp-3.13.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:19bb08e56f57c215e9572cd65cb6f8097804412c54081d933997ddde3e5ac579", size = 1755124 }, - { url = "https://files.pythonhosted.org/packages/fb/b7/40c3219dd2691aa35cf889b4fbb0c00e48a19092928707044bfe92068e01/aiohttp-3.13.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f27b7488144eb5dd9151cf839b195edd1569629d90ace4c5b6b18e4e75d1e63a", size = 1835949 }, - { url = "https://files.pythonhosted.org/packages/57/e8/66e3c32841fc0e26a09539c377aa0f3bbf6deac1957ac5182cf276c5719c/aiohttp-3.13.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d812838c109757a11354a161c95708ae4199c4fd4d82b90959b20914c1d097f6", size = 1714276 }, - { url = "https://files.pythonhosted.org/packages/6b/a5/c68e5b46ff0410fe3abfa508651b09372428f27036138beacf4ff6b7cb8c/aiohttp-3.13.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7c20db99da682f9180fa5195c90b80b159632fb611e8dbccdd99ba0be0970620", size = 1545929 }, - { url = "https://files.pythonhosted.org/packages/7a/a6/4c97dc27f9935c0c0aa6e3e10e5b4548823ab5d056636bde374fcd297256/aiohttp-3.13.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cf8b0870047900eb1f17f453b4b3953b8ffbf203ef56c2f346780ff930a4d430", size = 1679988 }, - { url = "https://files.pythonhosted.org/packages/8e/1b/11f9c52fd72b786a47e796e6794883417280cdca8eb1032d8d0939928dfa/aiohttp-3.13.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b8a5557d5af3f4e3add52a58c4cf2b8e6e59fc56b261768866f5337872d596d", size = 1678031 }, - { url = "https://files.pythonhosted.org/packages/ea/eb/948903d40505f3a25e53e051488d2714ded3afac1f961df135f2936680f9/aiohttp-3.13.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:052bcdd80c1c54b8a18a9ea0cd5e36f473dc8e38d51b804cea34841f677a9971", size = 1726184 }, - { url = "https://files.pythonhosted.org/packages/44/14/c8ced38c7dfe80804dec17a671963ccf3cb282f12700ec70b1f689d8de7d/aiohttp-3.13.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:76484ba17b2832776581b7ab466d094e48eba74cb65a60aea20154dae485e8bd", size = 1542344 }, - { url = "https://files.pythonhosted.org/packages/a4/6e/f2e6bff550a51fd7c45fdab116a1dab7cc502e5d942956f10fc5c626bb15/aiohttp-3.13.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:62d8a0adcdaf62ee56bfb37737153251ac8e4b27845b3ca065862fb01d99e247", size = 1740913 }, - { url = "https://files.pythonhosted.org/packages/da/00/8f057300d9b598a706348abb375b3de9a253195fb615f17c0b2be2a72836/aiohttp-3.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5004d727499ecb95f7c9147dd0bfc5b5670f71d355f0bd26d7af2d3af8e07d2f", size = 1695535 }, - { url = "https://files.pythonhosted.org/packages/8a/ab/6919d584d8f053a14b15f0bfa3f315b3f548435c2142145459da2efa8673/aiohttp-3.13.0-cp314-cp314-win32.whl", hash = "sha256:a1c20c26af48aea984f63f96e5d7af7567c32cb527e33b60a0ef0a6313cf8b03", size = 429548 }, - { url = "https://files.pythonhosted.org/packages/c5/59/5d9e78de6132079066f5077d9687bf524f764a2f8207e04d8d68790060c6/aiohttp-3.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:56f7d230ec66e799fbfd8350e9544f8a45a4353f1cf40c1fea74c1780f555b8f", size = 455548 }, - { url = "https://files.pythonhosted.org/packages/7c/ea/7d98da03d1e9798bb99c3ca4963229150d45c9b7a3a16210c5b4a5f89e07/aiohttp-3.13.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:2fd35177dc483ae702f07b86c782f4f4b100a8ce4e7c5778cea016979023d9fd", size = 765319 }, - { url = "https://files.pythonhosted.org/packages/5c/02/37f29beced8213bb467c52ad509a5e3b41e6e967de2f6eaf7f8db63bea54/aiohttp-3.13.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:4df1984c8804ed336089e88ac81a9417b1fd0db7c6f867c50a9264488797e778", size = 502567 }, - { url = "https://files.pythonhosted.org/packages/e7/22/b0afcafcfe3637bc8d7992abf08ee9452018366c0801e4e7d4efda2ed839/aiohttp-3.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e68c0076052dd911a81d3acc4ef2911cc4ef65bf7cadbfbc8ae762da24da858f", size = 507078 }, - { url = "https://files.pythonhosted.org/packages/49/4c/046c847b7a1993b49f3855cc3b97872d5df193d9240de835d0dc6a97b164/aiohttp-3.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc95c49853cd29613e4fe4ff96d73068ff89b89d61e53988442e127e8da8e7ba", size = 1862115 }, - { url = "https://files.pythonhosted.org/packages/1a/25/1449a59e3c6405da5e47b0138ee0855414dc12a8c306685d7fc3dd300e1f/aiohttp-3.13.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3b3bdc89413117b40cc39baae08fd09cbdeb839d421c4e7dce6a34f6b54b3ac1", size = 1717147 }, - { url = "https://files.pythonhosted.org/packages/23/8f/50cc34ad267b38608f21c6a74327015dd08a66f1dd8e7ceac954d0953191/aiohttp-3.13.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e77a729df23be2116acc4e9de2767d8e92445fbca68886dd991dc912f473755", size = 1841443 }, - { url = "https://files.pythonhosted.org/packages/df/b9/b3ab1278faa0d1b8f434c85f9cf34eeb0a25016ffe1ee6bc361d09fef0ec/aiohttp-3.13.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e88ab34826d6eeb6c67e6e92400b9ec653faf5092a35f07465f44c9f1c429f82", size = 1933652 }, - { url = "https://files.pythonhosted.org/packages/88/e2/86050aaa3bd7021b115cdfc88477b754e8cf93ef0079867840eee22d3c34/aiohttp-3.13.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:019dbef24fe28ce2301419dd63a2b97250d9760ca63ee2976c2da2e3f182f82e", size = 1790682 }, - { url = "https://files.pythonhosted.org/packages/78/8d/9af903324c2ba24a0c4778e9bcc738b773c98dded3a4fcf8041d5211769f/aiohttp-3.13.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2c4aeaedd20771b7b4bcdf0ae791904445df6d856c02fc51d809d12d17cffdc7", size = 1622011 }, - { url = "https://files.pythonhosted.org/packages/84/97/5174971ba4986d913554ceb248b0401eb5358cb60672ea0166f9f596cd08/aiohttp-3.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b3a8e6a2058a0240cfde542b641d0e78b594311bc1a710cbcb2e1841417d5cb3", size = 1787148 }, - { url = "https://files.pythonhosted.org/packages/dd/ae/8b397e980ac613ef3ddd8e996aa7a40a1828df958257800d4bb325657db3/aiohttp-3.13.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:f8e38d55ca36c15f36d814ea414ecb2401d860de177c49f84a327a25b3ee752b", size = 1774816 }, - { url = "https://files.pythonhosted.org/packages/c7/54/0e8e2111dd92051c787e934b6bbf30c213daaa5e7ee5f51bca8913607492/aiohttp-3.13.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a921edbe971aade1bf45bcbb3494e30ba6863a5c78f28be992c42de980fd9108", size = 1788610 }, - { url = "https://files.pythonhosted.org/packages/fa/dd/c9283dbfd9325ed6fa6c91f009db6344d8d370a7bcf09f36e7b2fcbfae02/aiohttp-3.13.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:474cade59a447cb4019c0dce9f0434bf835fb558ea932f62c686fe07fe6db6a1", size = 1615498 }, - { url = "https://files.pythonhosted.org/packages/8c/f6/da76230679bd9ef175d876093f89e7fd6d6476c18505e115e3026fe5ef95/aiohttp-3.13.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:99a303ad960747c33b65b1cb65d01a62ac73fa39b72f08a2e1efa832529b01ed", size = 1815187 }, - { url = "https://files.pythonhosted.org/packages/d5/78/394003ac738703822616f4f922705b54e5b3d8e7185831ecc1c97904174d/aiohttp-3.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bb34001fc1f05f6b323e02c278090c07a47645caae3aa77ed7ed8a3ce6abcce9", size = 1760281 }, - { url = "https://files.pythonhosted.org/packages/bd/b0/4bad0a9dd5910bd01c3119f8bd3d71887cd412d4105e4acddcdacf3cfa76/aiohttp-3.13.0-cp314-cp314t-win32.whl", hash = "sha256:dea698b64235d053def7d2f08af9302a69fcd760d1c7bd9988fd5d3b6157e657", size = 462608 }, - { url = "https://files.pythonhosted.org/packages/bd/af/ad12d592f623aae2bd1d3463201dc39c201ea362f9ddee0d03efd9e83720/aiohttp-3.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1f164699a060c0b3616459d13c1464a981fddf36f892f0a5027cbd45121fb14b", size = 496010 }, +sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/78/7e90ca79e5aa39f9694dcfd74f4720782d3c6828113bb1f3197f7e7c4a56/aiohttp-3.13.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7519bdc7dfc1940d201651b52bf5e03f5503bda45ad6eacf64dda98be5b2b6be", size = 732139 }, + { url = "https://files.pythonhosted.org/packages/db/ed/1f59215ab6853fbaa5c8495fa6cbc39edfc93553426152b75d82a5f32b76/aiohttp-3.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:088912a78b4d4f547a1f19c099d5a506df17eacec3c6f4375e2831ec1d995742", size = 490082 }, + { url = "https://files.pythonhosted.org/packages/68/7b/fe0fe0f5e05e13629d893c760465173a15ad0039c0a5b0d0040995c8075e/aiohttp-3.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5276807b9de9092af38ed23ce120539ab0ac955547b38563a9ba4f5b07b95293", size = 489035 }, + { url = "https://files.pythonhosted.org/packages/d2/04/db5279e38471b7ac801d7d36a57d1230feeee130bbe2a74f72731b23c2b1/aiohttp-3.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1237c1375eaef0db4dcd7c2559f42e8af7b87ea7d295b118c60c36a6e61cb811", size = 1720387 }, + { url = "https://files.pythonhosted.org/packages/31/07/8ea4326bd7dae2bd59828f69d7fdc6e04523caa55e4a70f4a8725a7e4ed2/aiohttp-3.13.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:96581619c57419c3d7d78703d5b78c1e5e5fc0172d60f555bdebaced82ded19a", size = 1688314 }, + { url = "https://files.pythonhosted.org/packages/48/ab/3d98007b5b87ffd519d065225438cc3b668b2f245572a8cb53da5dd2b1bc/aiohttp-3.13.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2713a95b47374169409d18103366de1050fe0ea73db358fc7a7acb2880422d4", size = 1756317 }, + { url = "https://files.pythonhosted.org/packages/97/3d/801ca172b3d857fafb7b50c7c03f91b72b867a13abca982ed6b3081774ef/aiohttp-3.13.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:228a1cd556b3caca590e9511a89444925da87d35219a49ab5da0c36d2d943a6a", size = 1858539 }, + { url = "https://files.pythonhosted.org/packages/f7/0d/4764669bdf47bd472899b3d3db91fffbe925c8e3038ec591a2fd2ad6a14d/aiohttp-3.13.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac6cde5fba8d7d8c6ac963dbb0256a9854e9fafff52fbcc58fdf819357892c3e", size = 1739597 }, + { url = "https://files.pythonhosted.org/packages/c4/52/7bd3c6693da58ba16e657eb904a5b6decfc48ecd06e9ac098591653b1566/aiohttp-3.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f2bef8237544f4e42878c61cef4e2839fee6346dc60f5739f876a9c50be7fcdb", size = 1555006 }, + { url = "https://files.pythonhosted.org/packages/48/30/9586667acec5993b6f41d2ebcf96e97a1255a85f62f3c653110a5de4d346/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16f15a4eac3bc2d76c45f7ebdd48a65d41b242eb6c31c2245463b40b34584ded", size = 1683220 }, + { url = "https://files.pythonhosted.org/packages/71/01/3afe4c96854cfd7b30d78333852e8e851dceaec1c40fd00fec90c6402dd2/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:bb7fb776645af5cc58ab804c58d7eba545a97e047254a52ce89c157b5af6cd0b", size = 1712570 }, + { url = "https://files.pythonhosted.org/packages/11/2c/22799d8e720f4697a9e66fd9c02479e40a49de3de2f0bbe7f9f78a987808/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e1b4951125ec10c70802f2cb09736c895861cd39fd9dcb35107b4dc8ae6220b8", size = 1733407 }, + { url = "https://files.pythonhosted.org/packages/34/cb/90f15dd029f07cebbd91f8238a8b363978b530cd128488085b5703683594/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:550bf765101ae721ee1d37d8095f47b1f220650f85fe1af37a90ce75bab89d04", size = 1550093 }, + { url = "https://files.pythonhosted.org/packages/69/46/12dce9be9d3303ecbf4d30ad45a7683dc63d90733c2d9fe512be6716cd40/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fe91b87fc295973096251e2d25a811388e7d8adf3bd2b97ef6ae78bc4ac6c476", size = 1758084 }, + { url = "https://files.pythonhosted.org/packages/f9/c8/0932b558da0c302ffd639fc6362a313b98fdf235dc417bc2493da8394df7/aiohttp-3.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e0c8e31cfcc4592cb200160344b2fb6ae0f9e4effe06c644b5a125d4ae5ebe23", size = 1716987 }, + { url = "https://files.pythonhosted.org/packages/5d/8b/f5bd1a75003daed099baec373aed678f2e9b34f2ad40d85baa1368556396/aiohttp-3.13.2-cp313-cp313-win32.whl", hash = "sha256:0740f31a60848d6edb296a0df827473eede90c689b8f9f2a4cdde74889eb2254", size = 425859 }, + { url = "https://files.pythonhosted.org/packages/5d/28/a8a9fc6957b2cee8902414e41816b5ab5536ecf43c3b1843c10e82c559b2/aiohttp-3.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:a88d13e7ca367394908f8a276b89d04a3652044612b9a408a0bb22a5ed976a1a", size = 452192 }, + { url = "https://files.pythonhosted.org/packages/9b/36/e2abae1bd815f01c957cbf7be817b3043304e1c87bad526292a0410fdcf9/aiohttp-3.13.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2475391c29230e063ef53a66669b7b691c9bfc3f1426a0f7bcdf1216bdbac38b", size = 735234 }, + { url = "https://files.pythonhosted.org/packages/ca/e3/1ee62dde9b335e4ed41db6bba02613295a0d5b41f74a783c142745a12763/aiohttp-3.13.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f33c8748abef4d8717bb20e8fb1b3e07c6adacb7fd6beaae971a764cf5f30d61", size = 490733 }, + { url = "https://files.pythonhosted.org/packages/1a/aa/7a451b1d6a04e8d15a362af3e9b897de71d86feac3babf8894545d08d537/aiohttp-3.13.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ae32f24bbfb7dbb485a24b30b1149e2f200be94777232aeadba3eecece4d0aa4", size = 491303 }, + { url = "https://files.pythonhosted.org/packages/57/1e/209958dbb9b01174870f6a7538cd1f3f28274fdbc88a750c238e2c456295/aiohttp-3.13.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d7f02042c1f009ffb70067326ef183a047425bb2ff3bc434ead4dd4a4a66a2b", size = 1717965 }, + { url = "https://files.pythonhosted.org/packages/08/aa/6a01848d6432f241416bc4866cae8dc03f05a5a884d2311280f6a09c73d6/aiohttp-3.13.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93655083005d71cd6c072cdab54c886e6570ad2c4592139c3fb967bfc19e4694", size = 1667221 }, + { url = "https://files.pythonhosted.org/packages/87/4f/36c1992432d31bbc789fa0b93c768d2e9047ec8c7177e5cd84ea85155f36/aiohttp-3.13.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0db1e24b852f5f664cd728db140cf11ea0e82450471232a394b3d1a540b0f906", size = 1757178 }, + { url = "https://files.pythonhosted.org/packages/ac/b4/8e940dfb03b7e0f68a82b88fd182b9be0a65cb3f35612fe38c038c3112cf/aiohttp-3.13.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b009194665bcd128e23eaddef362e745601afa4641930848af4c8559e88f18f9", size = 1838001 }, + { url = "https://files.pythonhosted.org/packages/d7/ef/39f3448795499c440ab66084a9db7d20ca7662e94305f175a80f5b7e0072/aiohttp-3.13.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c038a8fdc8103cd51dbd986ecdce141473ffd9775a7a8057a6ed9c3653478011", size = 1716325 }, + { url = "https://files.pythonhosted.org/packages/d7/51/b311500ffc860b181c05d91c59a1313bdd05c82960fdd4035a15740d431e/aiohttp-3.13.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66bac29b95a00db411cd758fea0e4b9bdba6d549dfe333f9a945430f5f2cc5a6", size = 1547978 }, + { url = "https://files.pythonhosted.org/packages/31/64/b9d733296ef79815226dab8c586ff9e3df41c6aff2e16c06697b2d2e6775/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4ebf9cfc9ba24a74cf0718f04aac2a3bbe745902cc7c5ebc55c0f3b5777ef213", size = 1682042 }, + { url = "https://files.pythonhosted.org/packages/3f/30/43d3e0f9d6473a6db7d472104c4eff4417b1e9df01774cb930338806d36b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a4b88ebe35ce54205c7074f7302bd08a4cb83256a3e0870c72d6f68a3aaf8e49", size = 1680085 }, + { url = "https://files.pythonhosted.org/packages/16/51/c709f352c911b1864cfd1087577760ced64b3e5bee2aa88b8c0c8e2e4972/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:98c4fb90bb82b70a4ed79ca35f656f4281885be076f3f970ce315402b53099ae", size = 1728238 }, + { url = "https://files.pythonhosted.org/packages/19/e2/19bd4c547092b773caeb48ff5ae4b1ae86756a0ee76c16727fcfd281404b/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:ec7534e63ae0f3759df3a1ed4fa6bc8f75082a924b590619c0dd2f76d7043caa", size = 1544395 }, + { url = "https://files.pythonhosted.org/packages/cf/87/860f2803b27dfc5ed7be532832a3498e4919da61299b4a1f8eb89b8ff44d/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5b927cf9b935a13e33644cbed6c8c4b2d0f25b713d838743f8fe7191b33829c4", size = 1742965 }, + { url = "https://files.pythonhosted.org/packages/67/7f/db2fc7618925e8c7a601094d5cbe539f732df4fb570740be88ed9e40e99a/aiohttp-3.13.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88d6c017966a78c5265d996c19cdb79235be5e6412268d7e2ce7dee339471b7a", size = 1697585 }, + { url = "https://files.pythonhosted.org/packages/0c/07/9127916cb09bb38284db5036036042b7b2c514c8ebaeee79da550c43a6d6/aiohttp-3.13.2-cp314-cp314-win32.whl", hash = "sha256:f7c183e786e299b5d6c49fb43a769f8eb8e04a2726a2bd5887b98b5cc2d67940", size = 431621 }, + { url = "https://files.pythonhosted.org/packages/fb/41/554a8a380df6d3a2bba8a7726429a23f4ac62aaf38de43bb6d6cde7b4d4d/aiohttp-3.13.2-cp314-cp314-win_amd64.whl", hash = "sha256:fe242cd381e0fb65758faf5ad96c2e460df6ee5b2de1072fe97e4127927e00b4", size = 457627 }, + { url = "https://files.pythonhosted.org/packages/c7/8e/3824ef98c039d3951cb65b9205a96dd2b20f22241ee17d89c5701557c826/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:f10d9c0b0188fe85398c61147bbd2a657d616c876863bfeff43376e0e3134673", size = 767360 }, + { url = "https://files.pythonhosted.org/packages/a4/0f/6a03e3fc7595421274fa34122c973bde2d89344f8a881b728fa8c774e4f1/aiohttp-3.13.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e7c952aefdf2460f4ae55c5e9c3e80aa72f706a6317e06020f80e96253b1accd", size = 504616 }, + { url = "https://files.pythonhosted.org/packages/c6/aa/ed341b670f1bc8a6f2c6a718353d13b9546e2cef3544f573c6a1ff0da711/aiohttp-3.13.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c20423ce14771d98353d2e25e83591fa75dfa90a3c1848f3d7c68243b4fbded3", size = 509131 }, + { url = "https://files.pythonhosted.org/packages/7f/f0/c68dac234189dae5c4bbccc0f96ce0cc16b76632cfc3a08fff180045cfa4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e96eb1a34396e9430c19d8338d2ec33015e4a87ef2b4449db94c22412e25ccdf", size = 1864168 }, + { url = "https://files.pythonhosted.org/packages/8f/65/75a9a76db8364b5d0e52a0c20eabc5d52297385d9af9c35335b924fafdee/aiohttp-3.13.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23fb0783bc1a33640036465019d3bba069942616a6a2353c6907d7fe1ccdaf4e", size = 1719200 }, + { url = "https://files.pythonhosted.org/packages/f5/55/8df2ed78d7f41d232f6bd3ff866b6f617026551aa1d07e2f03458f964575/aiohttp-3.13.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e1a9bea6244a1d05a4e57c295d69e159a5c50d8ef16aa390948ee873478d9a5", size = 1843497 }, + { url = "https://files.pythonhosted.org/packages/e9/e0/94d7215e405c5a02ccb6a35c7a3a6cfff242f457a00196496935f700cde5/aiohttp-3.13.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0a3d54e822688b56e9f6b5816fb3de3a3a64660efac64e4c2dc435230ad23bad", size = 1935703 }, + { url = "https://files.pythonhosted.org/packages/0b/78/1eeb63c3f9b2d1015a4c02788fb543141aad0a03ae3f7a7b669b2483f8d4/aiohttp-3.13.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7a653d872afe9f33497215745da7a943d1dc15b728a9c8da1c3ac423af35178e", size = 1792738 }, + { url = "https://files.pythonhosted.org/packages/41/75/aaf1eea4c188e51538c04cc568040e3082db263a57086ea74a7d38c39e42/aiohttp-3.13.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:56d36e80d2003fa3fc0207fac644216d8532e9504a785ef9a8fd013f84a42c61", size = 1624061 }, + { url = "https://files.pythonhosted.org/packages/9b/c2/3b6034de81fbcc43de8aeb209073a2286dfb50b86e927b4efd81cf848197/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:78cd586d8331fb8e241c2dd6b2f4061778cc69e150514b39a9e28dd050475661", size = 1789201 }, + { url = "https://files.pythonhosted.org/packages/c9/38/c15dcf6d4d890217dae79d7213988f4e5fe6183d43893a9cf2fe9e84ca8d/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:20b10bbfbff766294fe99987f7bb3b74fdd2f1a2905f2562132641ad434dcf98", size = 1776868 }, + { url = "https://files.pythonhosted.org/packages/04/75/f74fd178ac81adf4f283a74847807ade5150e48feda6aef024403716c30c/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9ec49dff7e2b3c85cdeaa412e9d438f0ecd71676fde61ec57027dd392f00c693", size = 1790660 }, + { url = "https://files.pythonhosted.org/packages/e7/80/7368bd0d06b16b3aba358c16b919e9c46cf11587dc572091031b0e9e3ef0/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:94f05348c4406450f9d73d38efb41d669ad6cd90c7ee194810d0eefbfa875a7a", size = 1617548 }, + { url = "https://files.pythonhosted.org/packages/7d/4b/a6212790c50483cb3212e507378fbe26b5086d73941e1ec4b56a30439688/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:fa4dcb605c6f82a80c7f95713c2b11c3b8e9893b3ebd2bc9bde93165ed6107be", size = 1817240 }, + { url = "https://files.pythonhosted.org/packages/ff/f7/ba5f0ba4ea8d8f3c32850912944532b933acbf0f3a75546b89269b9b7dde/aiohttp-3.13.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf00e5db968c3f67eccd2778574cf64d8b27d95b237770aa32400bd7a1ca4f6c", size = 1762334 }, + { url = "https://files.pythonhosted.org/packages/7e/83/1a5a1856574588b1cad63609ea9ad75b32a8353ac995d830bf5da9357364/aiohttp-3.13.2-cp314-cp314t-win32.whl", hash = "sha256:d23b5fe492b0805a50d3371e8a728a9134d8de5447dce4c885f5587294750734", size = 464685 }, + { url = "https://files.pythonhosted.org/packages/9f/4d/d22668674122c08f4d56972297c51a624e64b3ed1efaa40187607a7cb66e/aiohttp-3.13.2-cp314-cp314t-win_amd64.whl", hash = "sha256:ff0a7b0a82a7ab905cbda74006318d1b12e37c797eb1b0d4eb3e316cf47f658f", size = 498093 }, ] [[package]] @@ -175,7 +155,6 @@ version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007 } wheels = [ @@ -193,7 +172,7 @@ wheels = [ [[package]] name = "anthropic" -version = "0.69.0" +version = "0.72.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -205,9 +184,9 @@ dependencies = [ { name = "sniffio" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c8/9d/9ad1778b95f15c5b04e7d328c1b5f558f1e893857b7c33cd288c19c0057a/anthropic-0.69.0.tar.gz", hash = "sha256:c604d287f4d73640f40bd2c0f3265a2eb6ce034217ead0608f6b07a8bc5ae5f2", size = 480622 } +sdist = { url = "https://files.pythonhosted.org/packages/49/07/61f3ca8e69c5dcdaec31b36b79a53ea21c5b4ca5e93c7df58c71f43bf8d8/anthropic-0.72.0.tar.gz", hash = "sha256:8971fe76dcffc644f74ac3883069beb1527641115ae0d6eb8fa21c1ce4082f7a", size = 493721 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/38/75129688de5637eb5b383e5f2b1570a5cc3aecafa4de422da8eea4b90a6c/anthropic-0.69.0-py3-none-any.whl", hash = "sha256:1f73193040f33f11e27c2cd6ec25f24fe7c3f193dc1c5cde6b7a08b18a16bcc5", size = 337265 }, + { url = "https://files.pythonhosted.org/packages/7b/b7/160d4fb30080395b4143f1d1a4f6c646ba9105561108d2a434b606c03579/anthropic-0.72.0-py3-none-any.whl", hash = "sha256:0e9f5a7582f038cab8efbb4c959e49ef654a56bfc7ba2da51b5a7b8a84de2e4d", size = 357464 }, ] [[package]] @@ -217,7 +196,6 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094 } wheels = [ @@ -257,22 +235,6 @@ version = "3.4.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425 }, - { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162 }, - { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558 }, - { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497 }, - { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240 }, - { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471 }, - { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864 }, - { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647 }, - { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110 }, - { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839 }, - { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667 }, - { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535 }, - { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816 }, - { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694 }, - { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131 }, - { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390 }, { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091 }, { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936 }, { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180 }, @@ -400,22 +362,6 @@ version = "1.8.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875 } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782 }, - { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594 }, - { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448 }, - { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411 }, - { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014 }, - { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909 }, - { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049 }, - { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485 }, - { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619 }, - { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320 }, - { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820 }, - { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518 }, - { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096 }, - { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985 }, - { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591 }, - { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102 }, { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717 }, { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651 }, { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417 }, @@ -485,22 +431,23 @@ wheels = [ [[package]] name = "google-ai-generativelanguage" -version = "0.7.0" +version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-api-core", extra = ["grpc"] }, { name = "google-auth" }, + { name = "grpcio" }, { name = "proto-plus" }, { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/35/af6c759bfde70386c741309df0cba6a1cb09b8bbd1d02c841df51f4c672d/google_ai_generativelanguage-0.7.0.tar.gz", hash = "sha256:207fed3089949e2e99f7cbd513e2d0ea5f2babdfa5a8f2f239c3ddffe6bd4297", size = 1475859 } +sdist = { url = "https://files.pythonhosted.org/packages/ad/7e/67fdc46187541ead599e77f259d915f129c2f49568ebf5cadb322130712b/google_ai_generativelanguage-0.9.0.tar.gz", hash = "sha256:2524748f413917446febc8e0879dc0d4f026a064f89f17c42b81bea77ab76c84", size = 1481662 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/e7/b670b2d5b53f18ae51d331283278595fea93a156ea79baf59d4098effaec/google_ai_generativelanguage-0.7.0-py3-none-any.whl", hash = "sha256:3241215c16e669f37054f6111c84cca50fdb7a8e10a62933b9e68086ce71eefe", size = 1394333 }, + { url = "https://files.pythonhosted.org/packages/5d/91/c2d39ad5d77813afadb0f0b8789d882d15c191710b6b6f7cb158376342ff/google_ai_generativelanguage-0.9.0-py3-none-any.whl", hash = "sha256:59f61e54cb341e602073098389876594c4d12e458617727558bb2628a86f3eb2", size = 1401288 }, ] [[package]] name = "google-api-core" -version = "2.26.0" +version = "2.28.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-auth" }, @@ -509,9 +456,9 @@ dependencies = [ { name = "protobuf" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/32/ea/e7b6ac3c7b557b728c2d0181010548cbbdd338e9002513420c5a354fa8df/google_api_core-2.26.0.tar.gz", hash = "sha256:e6e6d78bd6cf757f4aee41dcc85b07f485fbb069d5daa3afb126defba1e91a62", size = 166369 } +sdist = { url = "https://files.pythonhosted.org/packages/61/da/83d7043169ac2c8c7469f0e375610d78ae2160134bf1b80634c482fa079c/google_api_core-2.28.1.tar.gz", hash = "sha256:2b405df02d68e68ce0fbc138559e6036559e685159d148ae5861013dc201baf8", size = 176759 } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/ad/f73cf9fe9bd95918502b270e3ddb8764e4c900b3bbd7782b90c56fac14bb/google_api_core-2.26.0-py3-none-any.whl", hash = "sha256:2b204bd0da2c81f918e3582c48458e24c11771f987f6258e6e227212af78f3ed", size = 162505 }, + { url = "https://files.pythonhosted.org/packages/ed/d4/90197b416cb61cefd316964fd9e7bd8324bcbafabf40eef14a9f20b81974/google_api_core-2.28.1-py3-none-any.whl", hash = "sha256:4021b0f8ceb77a6fb4de6fde4502cecab45062e66ff4f2895169e0b35bc9466c", size = 173706 }, ] [package.optional-dependencies] @@ -522,28 +469,28 @@ grpc = [ [[package]] name = "google-auth" -version = "2.41.1" +version = "2.43.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cachetools" }, { name = "pyasn1-modules" }, { name = "rsa" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/af/5129ce5b2f9688d2fa49b463e544972a7c82b0fdb50980dafee92e121d9f/google_auth-2.41.1.tar.gz", hash = "sha256:b76b7b1f9e61f0cb7e88870d14f6a94aeef248959ef6992670efee37709cbfd2", size = 292284 } +sdist = { url = "https://files.pythonhosted.org/packages/ff/ef/66d14cf0e01b08d2d51ffc3c20410c4e134a1548fc246a6081eae585a4fe/google_auth-2.43.0.tar.gz", hash = "sha256:88228eee5fc21b62a1b5fe773ca15e67778cb07dc8363adcb4a8827b52d81483", size = 296359 } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl", hash = "sha256:754843be95575b9a19c604a848a41be03f7f2afd8c019f716dc1f51ee41c639d", size = 221302 }, + { url = "https://files.pythonhosted.org/packages/6f/d1/385110a9ae86d91cc14c5282c61fe9f4dc41c0b9f7d423c6ad77038c4448/google_auth-2.43.0-py2.py3-none-any.whl", hash = "sha256:af628ba6fa493f75c7e9dbe9373d148ca9f4399b5ea29976519e0a3848eddd16", size = 223114 }, ] [[package]] name = "googleapis-common-protos" -version = "1.70.0" +version = "1.71.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/39/24/33db22342cf4a2ea27c9955e6713140fedd51e8b141b5ce5260897020f1a/googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257", size = 145903 } +sdist = { url = "https://files.pythonhosted.org/packages/30/43/b25abe02db2911397819003029bef768f68a974f2ece483e6084d1a5f754/googleapis_common_protos-1.71.0.tar.gz", hash = "sha256:1aec01e574e29da63c80ba9f7bbf1ccfaacf1da877f23609fe236ca7c72a2e2e", size = 146454 } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/f1/62a193f0227cf15a920390abe675f386dec35f7ae3ffe6da582d3ade42c7/googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8", size = 294530 }, + { url = "https://files.pythonhosted.org/packages/25/e8/eba9fece11d57a71e3e22ea672742c8f3cf23b35730c9e96db768b295216/googleapis_common_protos-1.71.0-py3-none-any.whl", hash = "sha256:59034a1d849dc4d18971997a72ac56246570afdd17f9369a0ff68218d50ab78c", size = 294576 }, ] [[package]] @@ -552,15 +499,6 @@ version = "3.2.4" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/03/b8/704d753a5a45507a7aab61f18db9509302ed3d0a27ac7e0359ec2905b1a6/greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d", size = 188260 } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079 }, - { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997 }, - { url = "https://files.pythonhosted.org/packages/3b/16/035dcfcc48715ccd345f3a93183267167cdd162ad123cd93067d86f27ce4/greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968", size = 655185 }, - { url = "https://files.pythonhosted.org/packages/31/da/0386695eef69ffae1ad726881571dfe28b41970173947e7c558d9998de0f/greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9", size = 649926 }, - { url = "https://files.pythonhosted.org/packages/68/88/69bf19fd4dc19981928ceacbc5fd4bb6bc2215d53199e367832e98d1d8fe/greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6", size = 651839 }, - { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586 }, - { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281 }, - { url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f", size = 1151142 }, - { url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02", size = 299899 }, { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31", size = 272814 }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945", size = 641073 }, { url = "https://files.pythonhosted.org/packages/f7/0b/bc13f787394920b23073ca3b6c4a7a21396301ed75a655bcb47196b50e6e/greenlet-3.2.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:710638eb93b1fa52823aa91bf75326f9ecdfd5e0466f00789246a5280f4ba0fc", size = 655191 }, @@ -569,6 +507,8 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671", size = 610497 }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b", size = 1121662 }, { url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae", size = 1149210 }, + { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b", size = 1564759 }, + { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929", size = 1634288 }, { url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b", size = 299685 }, { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586 }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346 }, @@ -576,62 +516,54 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659 }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355 }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512 }, + { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508 }, + { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681", size = 1680760 }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01", size = 303425 }, ] [[package]] name = "grpcio" -version = "1.75.1" +version = "1.76.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/f7/8963848164c7604efb3a3e6ee457fdb3a469653e19002bd24742473254f8/grpcio-1.75.1.tar.gz", hash = "sha256:3e81d89ece99b9ace23a6916880baca613c03a799925afb2857887efa8b1b3d2", size = 12731327 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/81/42be79e73a50aaa20af66731c2defeb0e8c9008d9935a64dd8ea8e8c44eb/grpcio-1.75.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:7b888b33cd14085d86176b1628ad2fcbff94cfbbe7809465097aa0132e58b018", size = 5668314 }, - { url = "https://files.pythonhosted.org/packages/c5/a7/3686ed15822fedc58c22f82b3a7403d9faf38d7c33de46d4de6f06e49426/grpcio-1.75.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8775036efe4ad2085975531d221535329f5dac99b6c2a854a995456098f99546", size = 11476125 }, - { url = "https://files.pythonhosted.org/packages/14/85/21c71d674f03345ab183c634ecd889d3330177e27baea8d5d247a89b6442/grpcio-1.75.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb658f703468d7fbb5dcc4037c65391b7dc34f808ac46ed9136c24fc5eeb041d", size = 6246335 }, - { url = "https://files.pythonhosted.org/packages/fd/db/3beb661bc56a385ae4fa6b0e70f6b91ac99d47afb726fe76aaff87ebb116/grpcio-1.75.1-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4b7177a1cdb3c51b02b0c0a256b0a72fdab719600a693e0e9037949efffb200b", size = 6916309 }, - { url = "https://files.pythonhosted.org/packages/1e/9c/eda9fe57f2b84343d44c1b66cf3831c973ba29b078b16a27d4587a1fdd47/grpcio-1.75.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d4fa6ccc3ec2e68a04f7b883d354d7fea22a34c44ce535a2f0c0049cf626ddf", size = 6435419 }, - { url = "https://files.pythonhosted.org/packages/c3/b8/090c98983e0a9d602e3f919a6e2d4e470a8b489452905f9a0fa472cac059/grpcio-1.75.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d86880ecaeb5b2f0a8afa63824de93adb8ebe4e49d0e51442532f4e08add7d6", size = 7064893 }, - { url = "https://files.pythonhosted.org/packages/ec/c0/6d53d4dbbd00f8bd81571f5478d8a95528b716e0eddb4217cc7cb45aae5f/grpcio-1.75.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a8041d2f9e8a742aeae96f4b047ee44e73619f4f9d24565e84d5446c623673b6", size = 8011922 }, - { url = "https://files.pythonhosted.org/packages/f2/7c/48455b2d0c5949678d6982c3e31ea4d89df4e16131b03f7d5c590811cbe9/grpcio-1.75.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3652516048bf4c314ce12be37423c79829f46efffb390ad64149a10c6071e8de", size = 7466181 }, - { url = "https://files.pythonhosted.org/packages/fd/12/04a0e79081e3170b6124f8cba9b6275871276be06c156ef981033f691880/grpcio-1.75.1-cp312-cp312-win32.whl", hash = "sha256:44b62345d8403975513af88da2f3d5cc76f73ca538ba46596f92a127c2aea945", size = 3938543 }, - { url = "https://files.pythonhosted.org/packages/5f/d7/11350d9d7fb5adc73d2b0ebf6ac1cc70135577701e607407fe6739a90021/grpcio-1.75.1-cp312-cp312-win_amd64.whl", hash = "sha256:b1e191c5c465fa777d4cafbaacf0c01e0d5278022082c0abbd2ee1d6454ed94d", size = 4641938 }, - { url = "https://files.pythonhosted.org/packages/46/74/bac4ab9f7722164afdf263ae31ba97b8174c667153510322a5eba4194c32/grpcio-1.75.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:3bed22e750d91d53d9e31e0af35a7b0b51367e974e14a4ff229db5b207647884", size = 5672779 }, - { url = "https://files.pythonhosted.org/packages/a6/52/d0483cfa667cddaa294e3ab88fd2c2a6e9dc1a1928c0e5911e2e54bd5b50/grpcio-1.75.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5b8f381eadcd6ecaa143a21e9e80a26424c76a0a9b3d546febe6648f3a36a5ac", size = 11470623 }, - { url = "https://files.pythonhosted.org/packages/cf/e4/d1954dce2972e32384db6a30273275e8c8ea5a44b80347f9055589333b3f/grpcio-1.75.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5bf4001d3293e3414d0cf99ff9b1139106e57c3a66dfff0c5f60b2a6286ec133", size = 6248838 }, - { url = "https://files.pythonhosted.org/packages/06/43/073363bf63826ba8077c335d797a8d026f129dc0912b69c42feaf8f0cd26/grpcio-1.75.1-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:9f82ff474103e26351dacfe8d50214e7c9322960d8d07ba7fa1d05ff981c8b2d", size = 6922663 }, - { url = "https://files.pythonhosted.org/packages/c2/6f/076ac0df6c359117676cacfa8a377e2abcecec6a6599a15a672d331f6680/grpcio-1.75.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0ee119f4f88d9f75414217823d21d75bfe0e6ed40135b0cbbfc6376bc9f7757d", size = 6436149 }, - { url = "https://files.pythonhosted.org/packages/6b/27/1d08824f1d573fcb1fa35ede40d6020e68a04391709939e1c6f4193b445f/grpcio-1.75.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:664eecc3abe6d916fa6cf8dd6b778e62fb264a70f3430a3180995bf2da935446", size = 7067989 }, - { url = "https://files.pythonhosted.org/packages/c6/98/98594cf97b8713feb06a8cb04eeef60b4757e3e2fb91aa0d9161da769843/grpcio-1.75.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c32193fa08b2fbebf08fe08e84f8a0aad32d87c3ad42999c65e9449871b1c66e", size = 8010717 }, - { url = "https://files.pythonhosted.org/packages/8c/7e/bb80b1bba03c12158f9254762cdf5cced4a9bc2e8ed51ed335915a5a06ef/grpcio-1.75.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5cebe13088b9254f6e615bcf1da9131d46cfa4e88039454aca9cb65f639bd3bc", size = 7463822 }, - { url = "https://files.pythonhosted.org/packages/23/1c/1ea57fdc06927eb5640f6750c697f596f26183573069189eeaf6ef86ba2d/grpcio-1.75.1-cp313-cp313-win32.whl", hash = "sha256:4b4c678e7ed50f8ae8b8dbad15a865ee73ce12668b6aaf411bf3258b5bc3f970", size = 3938490 }, - { url = "https://files.pythonhosted.org/packages/4b/24/fbb8ff1ccadfbf78ad2401c41aceaf02b0d782c084530d8871ddd69a2d49/grpcio-1.75.1-cp313-cp313-win_amd64.whl", hash = "sha256:5573f51e3f296a1bcf71e7a690c092845fb223072120f4bdb7a5b48e111def66", size = 4642538 }, - { url = "https://files.pythonhosted.org/packages/f2/1b/9a0a5cecd24302b9fdbcd55d15ed6267e5f3d5b898ff9ac8cbe17ee76129/grpcio-1.75.1-cp314-cp314-linux_armv7l.whl", hash = "sha256:c05da79068dd96723793bffc8d0e64c45f316248417515f28d22204d9dae51c7", size = 5673319 }, - { url = "https://files.pythonhosted.org/packages/c6/ec/9d6959429a83fbf5df8549c591a8a52bb313976f6646b79852c4884e3225/grpcio-1.75.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:06373a94fd16ec287116a825161dca179a0402d0c60674ceeec8c9fba344fe66", size = 11480347 }, - { url = "https://files.pythonhosted.org/packages/09/7a/26da709e42c4565c3d7bf999a9569da96243ce34a8271a968dee810a7cf1/grpcio-1.75.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4484f4b7287bdaa7a5b3980f3c7224c3c622669405d20f69549f5fb956ad0421", size = 6254706 }, - { url = "https://files.pythonhosted.org/packages/f1/08/dcb26a319d3725f199c97e671d904d84ee5680de57d74c566a991cfab632/grpcio-1.75.1-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:2720c239c1180eee69f7883c1d4c83fc1a495a2535b5fa322887c70bf02b16e8", size = 6922501 }, - { url = "https://files.pythonhosted.org/packages/78/66/044d412c98408a5e23cb348845979a2d17a2e2b6c3c34c1ec91b920f49d0/grpcio-1.75.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:07a554fa31c668cf0e7a188678ceeca3cb8fead29bbe455352e712ec33ca701c", size = 6437492 }, - { url = "https://files.pythonhosted.org/packages/4e/9d/5e3e362815152aa1afd8b26ea613effa005962f9da0eec6e0e4527e7a7d1/grpcio-1.75.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3e71a2105210366bfc398eef7f57a664df99194f3520edb88b9c3a7e46ee0d64", size = 7081061 }, - { url = "https://files.pythonhosted.org/packages/1e/1a/46615682a19e100f46e31ddba9ebc297c5a5ab9ddb47b35443ffadb8776c/grpcio-1.75.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:8679aa8a5b67976776d3c6b0521e99d1c34db8a312a12bcfd78a7085cb9b604e", size = 8010849 }, - { url = "https://files.pythonhosted.org/packages/67/8e/3204b94ac30b0f675ab1c06540ab5578660dc8b690db71854d3116f20d00/grpcio-1.75.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:aad1c774f4ebf0696a7f148a56d39a3432550612597331792528895258966dc0", size = 7464478 }, - { url = "https://files.pythonhosted.org/packages/b7/97/2d90652b213863b2cf466d9c1260ca7e7b67a16780431b3eb1d0420e3d5b/grpcio-1.75.1-cp314-cp314-win32.whl", hash = "sha256:62ce42d9994446b307649cb2a23335fa8e927f7ab2cbf5fcb844d6acb4d85f9c", size = 4012672 }, - { url = "https://files.pythonhosted.org/packages/f9/df/e2e6e9fc1c985cd1a59e6996a05647c720fe8a03b92f5ec2d60d366c531e/grpcio-1.75.1-cp314-cp314-win_amd64.whl", hash = "sha256:f86e92275710bea3000cb79feca1762dc0ad3b27830dd1a74e82ab321d4ee464", size = 4772475 }, +sdist = { url = "https://files.pythonhosted.org/packages/b6/e0/318c1ce3ae5a17894d5791e87aea147587c9e702f24122cc7a5c8bbaeeb1/grpcio-1.76.0.tar.gz", hash = "sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73", size = 12785182 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/ed/71467ab770effc9e8cef5f2e7388beb2be26ed642d567697bb103a790c72/grpcio-1.76.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2", size = 5807716 }, + { url = "https://files.pythonhosted.org/packages/2c/85/c6ed56f9817fab03fa8a111ca91469941fb514e3e3ce6d793cb8f1e1347b/grpcio-1.76.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468", size = 11821522 }, + { url = "https://files.pythonhosted.org/packages/ac/31/2b8a235ab40c39cbc141ef647f8a6eb7b0028f023015a4842933bc0d6831/grpcio-1.76.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3", size = 6362558 }, + { url = "https://files.pythonhosted.org/packages/bd/64/9784eab483358e08847498ee56faf8ff6ea8e0a4592568d9f68edc97e9e9/grpcio-1.76.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb", size = 7049990 }, + { url = "https://files.pythonhosted.org/packages/2b/94/8c12319a6369434e7a184b987e8e9f3b49a114c489b8315f029e24de4837/grpcio-1.76.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae", size = 6575387 }, + { url = "https://files.pythonhosted.org/packages/15/0f/f12c32b03f731f4a6242f771f63039df182c8b8e2cf8075b245b409259d4/grpcio-1.76.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77", size = 7166668 }, + { url = "https://files.pythonhosted.org/packages/ff/2d/3ec9ce0c2b1d92dd59d1c3264aaec9f0f7c817d6e8ac683b97198a36ed5a/grpcio-1.76.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03", size = 8124928 }, + { url = "https://files.pythonhosted.org/packages/1a/74/fd3317be5672f4856bcdd1a9e7b5e17554692d3db9a3b273879dc02d657d/grpcio-1.76.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42", size = 7589983 }, + { url = "https://files.pythonhosted.org/packages/45/bb/ca038cf420f405971f19821c8c15bcbc875505f6ffadafe9ffd77871dc4c/grpcio-1.76.0-cp313-cp313-win32.whl", hash = "sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f", size = 3984727 }, + { url = "https://files.pythonhosted.org/packages/41/80/84087dc56437ced7cdd4b13d7875e7439a52a261e3ab4e06488ba6173b0a/grpcio-1.76.0-cp313-cp313-win_amd64.whl", hash = "sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8", size = 4702799 }, + { url = "https://files.pythonhosted.org/packages/b4/46/39adac80de49d678e6e073b70204091e76631e03e94928b9ea4ecf0f6e0e/grpcio-1.76.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62", size = 5808417 }, + { url = "https://files.pythonhosted.org/packages/9c/f5/a4531f7fb8b4e2a60b94e39d5d924469b7a6988176b3422487be61fe2998/grpcio-1.76.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd", size = 11828219 }, + { url = "https://files.pythonhosted.org/packages/4b/1c/de55d868ed7a8bd6acc6b1d6ddc4aa36d07a9f31d33c912c804adb1b971b/grpcio-1.76.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc", size = 6367826 }, + { url = "https://files.pythonhosted.org/packages/59/64/99e44c02b5adb0ad13ab3adc89cb33cb54bfa90c74770f2607eea629b86f/grpcio-1.76.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a", size = 7049550 }, + { url = "https://files.pythonhosted.org/packages/43/28/40a5be3f9a86949b83e7d6a2ad6011d993cbe9b6bd27bea881f61c7788b6/grpcio-1.76.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba", size = 6575564 }, + { url = "https://files.pythonhosted.org/packages/4b/a9/1be18e6055b64467440208a8559afac243c66a8b904213af6f392dc2212f/grpcio-1.76.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09", size = 7176236 }, + { url = "https://files.pythonhosted.org/packages/0f/55/dba05d3fcc151ce6e81327541d2cc8394f442f6b350fead67401661bf041/grpcio-1.76.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc", size = 8125795 }, + { url = "https://files.pythonhosted.org/packages/4a/45/122df922d05655f63930cf42c9e3f72ba20aadb26c100ee105cad4ce4257/grpcio-1.76.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc", size = 7592214 }, + { url = "https://files.pythonhosted.org/packages/4a/6e/0b899b7f6b66e5af39e377055fb4a6675c9ee28431df5708139df2e93233/grpcio-1.76.0-cp314-cp314-win32.whl", hash = "sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e", size = 4062961 }, + { url = "https://files.pythonhosted.org/packages/19/41/0b430b01a2eb38ee887f88c1f07644a1df8e289353b78e82b37ef988fb64/grpcio-1.76.0-cp314-cp314-win_amd64.whl", hash = "sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e", size = 4834462 }, ] [[package]] name = "grpcio-status" -version = "1.75.1" +version = "1.76.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "googleapis-common-protos" }, { name = "grpcio" }, { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/5b/1ce0e3eedcdc08b4739b3da5836f31142ec8bee1a9ae0ad8dc0dc39a14bf/grpcio_status-1.75.1.tar.gz", hash = "sha256:8162afa21833a2085c91089cc395ad880fac1378a1d60233d976649ed724cbf8", size = 13671 } +sdist = { url = "https://files.pythonhosted.org/packages/3f/46/e9f19d5be65e8423f886813a2a9d0056ba94757b0c5007aa59aed1a961fa/grpcio_status-1.76.0.tar.gz", hash = "sha256:25fcbfec74c15d1a1cb5da3fab8ee9672852dc16a5a9eeb5baf7d7a9952943cd", size = 13679 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ad/6f414bb0b36eee20d93af6907256f208ffcda992ae6d3d7b6a778afe31e6/grpcio_status-1.75.1-py3-none-any.whl", hash = "sha256:f681b301be26dcf7abf5c765d4a22e4098765e1a65cbdfa3efca384edf8e4e3c", size = 14428 }, + { url = "https://files.pythonhosted.org/packages/8c/cc/27ba60ad5a5f2067963e6a858743500df408eb5855e98be778eaef8c9b02/grpcio_status-1.76.0-py3-none-any.whl", hash = "sha256:380568794055a8efbbd8871162df92012e0228a5f6dffaf57f2a00c534103b18", size = 14425 }, ] [[package]] @@ -691,51 +623,61 @@ wheels = [ [[package]] name = "jiter" -version = "0.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/c0/a3bb4cc13aced219dd18191ea66e874266bd8aa7b96744e495e1c733aa2d/jiter-0.11.0.tar.gz", hash = "sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4", size = 167094 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/b5/3009b112b8f673e568ef79af9863d8309a15f0a8cdcc06ed6092051f377e/jiter-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada", size = 305510 }, - { url = "https://files.pythonhosted.org/packages/fe/82/15514244e03b9e71e086bbe2a6de3e4616b48f07d5f834200c873956fb8c/jiter-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99", size = 316521 }, - { url = "https://files.pythonhosted.org/packages/92/94/7a2e905f40ad2d6d660e00b68d818f9e29fb87ffe82774f06191e93cbe4a/jiter-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6", size = 338214 }, - { url = "https://files.pythonhosted.org/packages/a8/9c/5791ed5bdc76f12110158d3316a7a3ec0b1413d018b41c5ed399549d3ad5/jiter-0.11.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1", size = 361280 }, - { url = "https://files.pythonhosted.org/packages/d4/7f/b7d82d77ff0d2cb06424141000176b53a9e6b16a1125525bb51ea4990c2e/jiter-0.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4", size = 487895 }, - { url = "https://files.pythonhosted.org/packages/42/44/10a1475d46f1fc1fd5cc2e82c58e7bca0ce5852208e0fa5df2f949353321/jiter-0.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72", size = 378421 }, - { url = "https://files.pythonhosted.org/packages/9a/5f/0dc34563d8164d31d07bc09d141d3da08157a68dcd1f9b886fa4e917805b/jiter-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591", size = 347932 }, - { url = "https://files.pythonhosted.org/packages/f7/de/b68f32a4fcb7b4a682b37c73a0e5dae32180140cd1caf11aef6ad40ddbf2/jiter-0.11.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09", size = 386959 }, - { url = "https://files.pythonhosted.org/packages/76/0a/c08c92e713b6e28972a846a81ce374883dac2f78ec6f39a0dad9f2339c3a/jiter-0.11.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5", size = 517187 }, - { url = "https://files.pythonhosted.org/packages/89/b5/4a283bec43b15aad54fcae18d951f06a2ec3f78db5708d3b59a48e9c3fbd/jiter-0.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206", size = 509461 }, - { url = "https://files.pythonhosted.org/packages/34/a5/f8bad793010534ea73c985caaeef8cc22dfb1fedb15220ecdf15c623c07a/jiter-0.11.0-cp312-cp312-win32.whl", hash = "sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b", size = 206664 }, - { url = "https://files.pythonhosted.org/packages/ed/42/5823ec2b1469395a160b4bf5f14326b4a098f3b6898fbd327366789fa5d3/jiter-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c", size = 203520 }, - { url = "https://files.pythonhosted.org/packages/97/c4/d530e514d0f4f29b2b68145e7b389cbc7cac7f9c8c23df43b04d3d10fa3e/jiter-0.11.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4441a91b80a80249f9a6452c14b2c24708f139f64de959943dfeaa6cb915e8eb", size = 305021 }, - { url = "https://files.pythonhosted.org/packages/7a/77/796a19c567c5734cbfc736a6f987affc0d5f240af8e12063c0fb93990ffa/jiter-0.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ff85fc6d2a431251ad82dbd1ea953affb5a60376b62e7d6809c5cd058bb39471", size = 314384 }, - { url = "https://files.pythonhosted.org/packages/14/9c/824334de0b037b91b6f3fa9fe5a191c83977c7ec4abe17795d3cb6d174cf/jiter-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5e86126d64706fd28dfc46f910d496923c6f95b395138c02d0e252947f452bd", size = 337389 }, - { url = "https://files.pythonhosted.org/packages/a2/95/ed4feab69e6cf9b2176ea29d4ef9d01a01db210a3a2c8a31a44ecdc68c38/jiter-0.11.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad8bd82165961867a10f52010590ce0b7a8c53da5ddd8bbb62fef68c181b921", size = 360519 }, - { url = "https://files.pythonhosted.org/packages/b5/0c/2ad00f38d3e583caba3909d95b7da1c3a7cd82c0aa81ff4317a8016fb581/jiter-0.11.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b42c2cd74273455ce439fd9528db0c6e84b5623cb74572305bdd9f2f2961d3df", size = 487198 }, - { url = "https://files.pythonhosted.org/packages/ea/8b/919b64cf3499b79bdfba6036da7b0cac5d62d5c75a28fb45bad7819e22f0/jiter-0.11.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0062dab98172dd0599fcdbf90214d0dcde070b1ff38a00cc1b90e111f071982", size = 377835 }, - { url = "https://files.pythonhosted.org/packages/29/7f/8ebe15b6e0a8026b0d286c083b553779b4dd63db35b43a3f171b544de91d/jiter-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb948402821bc76d1f6ef0f9e19b816f9b09f8577844ba7140f0b6afe994bc64", size = 347655 }, - { url = "https://files.pythonhosted.org/packages/8e/64/332127cef7e94ac75719dda07b9a472af6158ba819088d87f17f3226a769/jiter-0.11.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:25a5b1110cca7329fd0daf5060faa1234be5c11e988948e4f1a1923b6a457fe1", size = 386135 }, - { url = "https://files.pythonhosted.org/packages/20/c8/557b63527442f84c14774159948262a9d4fabb0d61166f11568f22fc60d2/jiter-0.11.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bf11807e802a214daf6c485037778843fadd3e2ec29377ae17e0706ec1a25758", size = 516063 }, - { url = "https://files.pythonhosted.org/packages/86/13/4164c819df4a43cdc8047f9a42880f0ceef5afeb22e8b9675c0528ebdccd/jiter-0.11.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbb57da40631c267861dd0090461222060960012d70fd6e4c799b0f62d0ba166", size = 508139 }, - { url = "https://files.pythonhosted.org/packages/fa/70/6e06929b401b331d41ddb4afb9f91cd1168218e3371972f0afa51c9f3c31/jiter-0.11.0-cp313-cp313-win32.whl", hash = "sha256:8e36924dad32c48d3c5e188d169e71dc6e84d6cb8dedefea089de5739d1d2f80", size = 206369 }, - { url = "https://files.pythonhosted.org/packages/f4/0d/8185b8e15de6dce24f6afae63380e16377dd75686d56007baa4f29723ea1/jiter-0.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:452d13e4fd59698408087235259cebe67d9d49173b4dacb3e8d35ce4acf385d6", size = 202538 }, - { url = "https://files.pythonhosted.org/packages/13/3a/d61707803260d59520721fa326babfae25e9573a88d8b7b9cb54c5423a59/jiter-0.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:089f9df9f69532d1339e83142438668f52c97cd22ee2d1195551c2b1a9e6cf33", size = 313737 }, - { url = "https://files.pythonhosted.org/packages/cd/cc/c9f0eec5d00f2a1da89f6bdfac12b8afdf8d5ad974184863c75060026457/jiter-0.11.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29ed1fe69a8c69bf0f2a962d8d706c7b89b50f1332cd6b9fbda014f60bd03a03", size = 346183 }, - { url = "https://files.pythonhosted.org/packages/a6/87/fc632776344e7aabbab05a95a0075476f418c5d29ab0f2eec672b7a1f0ac/jiter-0.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a4d71d7ea6ea8786291423fe209acf6f8d398a0759d03e7f24094acb8ab686ba", size = 204225 }, - { url = "https://files.pythonhosted.org/packages/ee/3b/e7f45be7d3969bdf2e3cd4b816a7a1d272507cd0edd2d6dc4b07514f2d9a/jiter-0.11.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9a6dff27eca70930bdbe4cbb7c1a4ba8526e13b63dc808c0670083d2d51a4a72", size = 304414 }, - { url = "https://files.pythonhosted.org/packages/06/32/13e8e0d152631fcc1907ceb4943711471be70496d14888ec6e92034e2caf/jiter-0.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b1ae2a7593a62132c7d4c2abbee80bbbb94fdc6d157e2c6cc966250c564ef774", size = 314223 }, - { url = "https://files.pythonhosted.org/packages/0c/7e/abedd5b5a20ca083f778d96bba0d2366567fcecb0e6e34ff42640d5d7a18/jiter-0.11.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b13a431dba4b059e9e43019d3022346d009baf5066c24dcdea321a303cde9f0", size = 337306 }, - { url = "https://files.pythonhosted.org/packages/ac/e2/30d59bdc1204c86aa975ec72c48c482fee6633120ee9c3ab755e4dfefea8/jiter-0.11.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:af62e84ca3889604ebb645df3b0a3f3bcf6b92babbff642bd214616f57abb93a", size = 360565 }, - { url = "https://files.pythonhosted.org/packages/fe/88/567288e0d2ed9fa8f7a3b425fdaf2cb82b998633c24fe0d98f5417321aa8/jiter-0.11.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6f3b32bb723246e6b351aecace52aba78adb8eeb4b2391630322dc30ff6c773", size = 486465 }, - { url = "https://files.pythonhosted.org/packages/18/6e/7b72d09273214cadd15970e91dd5ed9634bee605176107db21e1e4205eb1/jiter-0.11.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:adcab442f4a099a358a7f562eaa54ed6456fb866e922c6545a717be51dbed7d7", size = 377581 }, - { url = "https://files.pythonhosted.org/packages/58/52/4db456319f9d14deed325f70102577492e9d7e87cf7097bda9769a1fcacb/jiter-0.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9967c2ab338ee2b2c0102fd379ec2693c496abf71ffd47e4d791d1f593b68e2", size = 347102 }, - { url = "https://files.pythonhosted.org/packages/ce/b4/433d5703c38b26083aec7a733eb5be96f9c6085d0e270a87ca6482cbf049/jiter-0.11.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e7d0bed3b187af8b47a981d9742ddfc1d9b252a7235471ad6078e7e4e5fe75c2", size = 386477 }, - { url = "https://files.pythonhosted.org/packages/c8/7a/a60bfd9c55b55b07c5c441c5085f06420b6d493ce9db28d069cc5b45d9f3/jiter-0.11.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:f6fe0283e903ebc55f1a6cc569b8c1f3bf4abd026fed85e3ff8598a9e6f982f0", size = 516004 }, - { url = "https://files.pythonhosted.org/packages/2e/46/f8363e5ecc179b4ed0ca6cb0a6d3bfc266078578c71ff30642ea2ce2f203/jiter-0.11.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:4ee5821e3d66606b29ae5b497230b304f1376f38137d69e35f8d2bd5f310ff73", size = 507855 }, - { url = "https://files.pythonhosted.org/packages/90/33/396083357d51d7ff0f9805852c288af47480d30dd31d8abc74909b020761/jiter-0.11.0-cp314-cp314-win32.whl", hash = "sha256:c2d13ba7567ca8799f17c76ed56b1d49be30df996eb7fa33e46b62800562a5e2", size = 205802 }, - { url = "https://files.pythonhosted.org/packages/e7/ab/eb06ca556b2551d41de7d03bf2ee24285fa3d0c58c5f8d95c64c9c3281b1/jiter-0.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fb4790497369d134a07fc763cc88888c46f734abdd66f9fdf7865038bf3a8f40", size = 313405 }, - { url = "https://files.pythonhosted.org/packages/af/22/7ab7b4ec3a1c1f03aef376af11d23b05abcca3fb31fbca1e7557053b1ba2/jiter-0.11.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e2bbf24f16ba5ad4441a9845e40e4ea0cb9eed00e76ba94050664ef53ef4406", size = 347102 }, - { url = "https://files.pythonhosted.org/packages/70/f3/ce100253c80063a7b8b406e1d1562657fd4b9b4e1b562db40e68645342fb/jiter-0.11.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7", size = 336380 }, +version = "0.11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/68/0357982493a7b20925aece061f7fb7a2678e3b232f8d73a6edb7e5304443/jiter-0.11.1.tar.gz", hash = "sha256:849dcfc76481c0ea0099391235b7ca97d7279e0fa4c86005457ac7c88e8b76dc", size = 168385 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/4b/e4dd3c76424fad02a601d570f4f2a8438daea47ba081201a721a903d3f4c/jiter-0.11.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:71b6a920a5550f057d49d0e8bcc60945a8da998019e83f01adf110e226267663", size = 305272 }, + { url = "https://files.pythonhosted.org/packages/67/83/2cd3ad5364191130f4de80eacc907f693723beaab11a46c7d155b07a092c/jiter-0.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b3de72e925388453a5171be83379549300db01284f04d2a6f244d1d8de36f94", size = 314038 }, + { url = "https://files.pythonhosted.org/packages/d3/3c/8e67d9ba524e97d2f04c8f406f8769a23205026b13b0938d16646d6e2d3e/jiter-0.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc19dd65a2bd3d9c044c5b4ebf657ca1e6003a97c0fc10f555aa4f7fb9821c00", size = 345977 }, + { url = "https://files.pythonhosted.org/packages/8d/a5/489ce64d992c29bccbffabb13961bbb0435e890d7f2d266d1f3df5e917d2/jiter-0.11.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d58faaa936743cd1464540562f60b7ce4fd927e695e8bc31b3da5b914baa9abd", size = 364503 }, + { url = "https://files.pythonhosted.org/packages/d4/c0/e321dd83ee231d05c8fe4b1a12caf1f0e8c7a949bf4724d58397104f10f2/jiter-0.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:902640c3103625317291cb73773413b4d71847cdf9383ba65528745ff89f1d14", size = 487092 }, + { url = "https://files.pythonhosted.org/packages/f9/5e/8f24ec49c8d37bd37f34ec0112e0b1a3b4b5a7b456c8efff1df5e189ad43/jiter-0.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30405f726e4c2ed487b176c09f8b877a957f535d60c1bf194abb8dadedb5836f", size = 376328 }, + { url = "https://files.pythonhosted.org/packages/7f/70/ded107620e809327cf7050727e17ccfa79d6385a771b7fe38fb31318ef00/jiter-0.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3217f61728b0baadd2551844870f65219ac4a1285d5e1a4abddff3d51fdabe96", size = 356632 }, + { url = "https://files.pythonhosted.org/packages/19/53/c26f7251613f6a9079275ee43c89b8a973a95ff27532c421abc2a87afb04/jiter-0.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1364cc90c03a8196f35f396f84029f12abe925415049204446db86598c8b72c", size = 384358 }, + { url = "https://files.pythonhosted.org/packages/84/16/e0f2cc61e9c4d0b62f6c1bd9b9781d878a427656f88293e2a5335fa8ff07/jiter-0.11.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:53a54bf8e873820ab186b2dca9f6c3303f00d65ae5e7b7d6bda1b95aa472d646", size = 517279 }, + { url = "https://files.pythonhosted.org/packages/60/5c/4cd095eaee68961bca3081acbe7c89e12ae24a5dae5fd5d2a13e01ed2542/jiter-0.11.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7e29aca023627b0e0c2392d4248f6414d566ff3974fa08ff2ac8dbb96dfee92a", size = 508276 }, + { url = "https://files.pythonhosted.org/packages/4f/25/f459240e69b0e09a7706d96ce203ad615ca36b0fe832308d2b7123abf2d0/jiter-0.11.1-cp313-cp313-win32.whl", hash = "sha256:f153e31d8bca11363751e875c0a70b3d25160ecbaee7b51e457f14498fb39d8b", size = 205593 }, + { url = "https://files.pythonhosted.org/packages/7c/16/461bafe22bae79bab74e217a09c907481a46d520c36b7b9fe71ee8c9e983/jiter-0.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:f773f84080b667c69c4ea0403fc67bb08b07e2b7ce1ef335dea5868451e60fed", size = 203518 }, + { url = "https://files.pythonhosted.org/packages/7b/72/c45de6e320edb4fa165b7b1a414193b3cae302dd82da2169d315dcc78b44/jiter-0.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:635ecd45c04e4c340d2187bcb1cea204c7cc9d32c1364d251564bf42e0e39c2d", size = 188062 }, + { url = "https://files.pythonhosted.org/packages/65/9b/4a57922437ca8753ef823f434c2dec5028b237d84fa320f06a3ba1aec6e8/jiter-0.11.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d892b184da4d94d94ddb4031296931c74ec8b325513a541ebfd6dfb9ae89904b", size = 313814 }, + { url = "https://files.pythonhosted.org/packages/76/50/62a0683dadca25490a4bedc6a88d59de9af2a3406dd5a576009a73a1d392/jiter-0.11.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa22c223a3041dacb2fcd37c70dfd648b44662b4a48e242592f95bda5ab09d58", size = 344987 }, + { url = "https://files.pythonhosted.org/packages/da/00/2355dbfcbf6cdeaddfdca18287f0f38ae49446bb6378e4a5971e9356fc8a/jiter-0.11.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:330e8e6a11ad4980cd66a0f4a3e0e2e0f646c911ce047014f984841924729789", size = 356399 }, + { url = "https://files.pythonhosted.org/packages/c9/07/c2bd748d578fa933d894a55bff33f983bc27f75fc4e491b354bef7b78012/jiter-0.11.1-cp313-cp313t-win_amd64.whl", hash = "sha256:09e2e386ebf298547ca3a3704b729471f7ec666c2906c5c26c1a915ea24741ec", size = 203289 }, + { url = "https://files.pythonhosted.org/packages/e6/ee/ace64a853a1acbd318eb0ca167bad1cf5ee037207504b83a868a5849747b/jiter-0.11.1-cp313-cp313t-win_arm64.whl", hash = "sha256:fe4a431c291157e11cee7c34627990ea75e8d153894365a3bc84b7a959d23ca8", size = 188284 }, + { url = "https://files.pythonhosted.org/packages/8d/00/d6006d069e7b076e4c66af90656b63da9481954f290d5eca8c715f4bf125/jiter-0.11.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:0fa1f70da7a8a9713ff8e5f75ec3f90c0c870be6d526aa95e7c906f6a1c8c676", size = 304624 }, + { url = "https://files.pythonhosted.org/packages/fc/45/4a0e31eb996b9ccfddbae4d3017b46f358a599ccf2e19fbffa5e531bd304/jiter-0.11.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:569ee559e5046a42feb6828c55307cf20fe43308e3ae0d8e9e4f8d8634d99944", size = 315042 }, + { url = "https://files.pythonhosted.org/packages/e7/91/22f5746f5159a28c76acdc0778801f3c1181799aab196dbea2d29e064968/jiter-0.11.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f69955fa1d92e81987f092b233f0be49d4c937da107b7f7dcf56306f1d3fcce9", size = 346357 }, + { url = "https://files.pythonhosted.org/packages/f5/4f/57620857d4e1dc75c8ff4856c90cb6c135e61bff9b4ebfb5dc86814e82d7/jiter-0.11.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:090f4c9d4a825e0fcbd0a2647c9a88a0f366b75654d982d95a9590745ff0c48d", size = 365057 }, + { url = "https://files.pythonhosted.org/packages/ce/34/caf7f9cc8ae0a5bb25a5440cc76c7452d264d1b36701b90fdadd28fe08ec/jiter-0.11.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbf3d8cedf9e9d825233e0dcac28ff15c47b7c5512fdfe2e25fd5bbb6e6b0cee", size = 487086 }, + { url = "https://files.pythonhosted.org/packages/50/17/85b5857c329d533d433fedf98804ebec696004a1f88cabad202b2ddc55cf/jiter-0.11.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2aa9b1958f9c30d3d1a558b75f0626733c60eb9b7774a86b34d88060be1e67fe", size = 376083 }, + { url = "https://files.pythonhosted.org/packages/85/d3/2d9f973f828226e6faebdef034097a2918077ea776fb4d88489949024787/jiter-0.11.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42d1ca16590b768c5e7d723055acd2633908baacb3628dd430842e2e035aa90", size = 357825 }, + { url = "https://files.pythonhosted.org/packages/f4/55/848d4dabf2c2c236a05468c315c2cb9dc736c5915e65449ccecdba22fb6f/jiter-0.11.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5db4c2486a023820b701a17aec9c5a6173c5ba4393f26662f032f2de9c848b0f", size = 383933 }, + { url = "https://files.pythonhosted.org/packages/0b/6c/204c95a4fbb0e26dfa7776c8ef4a878d0c0b215868011cc904bf44f707e2/jiter-0.11.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:4573b78777ccfac954859a6eff45cbd9d281d80c8af049d0f1a3d9fc323d5c3a", size = 517118 }, + { url = "https://files.pythonhosted.org/packages/88/25/09956644ea5a2b1e7a2a0f665cb69a973b28f4621fa61fc0c0f06ff40a31/jiter-0.11.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:7593ac6f40831d7961cb67633c39b9fef6689a211d7919e958f45710504f52d3", size = 508194 }, + { url = "https://files.pythonhosted.org/packages/09/49/4d1657355d7f5c9e783083a03a3f07d5858efa6916a7d9634d07db1c23bd/jiter-0.11.1-cp314-cp314-win32.whl", hash = "sha256:87202ec6ff9626ff5f9351507def98fcf0df60e9a146308e8ab221432228f4ea", size = 203961 }, + { url = "https://files.pythonhosted.org/packages/76/bd/f063bd5cc2712e7ca3cf6beda50894418fc0cfeb3f6ff45a12d87af25996/jiter-0.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:a5dd268f6531a182c89d0dd9a3f8848e86e92dfff4201b77a18e6b98aa59798c", size = 202804 }, + { url = "https://files.pythonhosted.org/packages/52/ca/4d84193dfafef1020bf0bedd5e1a8d0e89cb67c54b8519040effc694964b/jiter-0.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:5d761f863f912a44748a21b5c4979c04252588ded8d1d2760976d2e42cd8d991", size = 188001 }, + { url = "https://files.pythonhosted.org/packages/d5/fa/3b05e5c9d32efc770a8510eeb0b071c42ae93a5b576fd91cee9af91689a1/jiter-0.11.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2cc5a3965285ddc33e0cab933e96b640bc9ba5940cea27ebbbf6695e72d6511c", size = 312561 }, + { url = "https://files.pythonhosted.org/packages/50/d3/335822eb216154ddb79a130cbdce88fdf5c3e2b43dc5dba1fd95c485aaf5/jiter-0.11.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b572b3636a784c2768b2342f36a23078c8d3aa6d8a30745398b1bab58a6f1a8", size = 344551 }, + { url = "https://files.pythonhosted.org/packages/31/6d/a0bed13676b1398f9b3ba61f32569f20a3ff270291161100956a577b2dd3/jiter-0.11.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ad93e3d67a981f96596d65d2298fe8d1aa649deb5374a2fb6a434410ee11915e", size = 363051 }, + { url = "https://files.pythonhosted.org/packages/a4/03/313eda04aa08545a5a04ed5876e52f49ab76a4d98e54578896ca3e16313e/jiter-0.11.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a83097ce379e202dcc3fe3fc71a16d523d1ee9192c8e4e854158f96b3efe3f2f", size = 485897 }, + { url = "https://files.pythonhosted.org/packages/5f/13/a1011b9d325e40b53b1b96a17c010b8646013417f3902f97a86325b19299/jiter-0.11.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7042c51e7fbeca65631eb0c332f90c0c082eab04334e7ccc28a8588e8e2804d9", size = 375224 }, + { url = "https://files.pythonhosted.org/packages/92/da/1b45026b19dd39b419e917165ff0ea629dbb95f374a3a13d2df95e40a6ac/jiter-0.11.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a68d679c0e47649a61df591660507608adc2652442de7ec8276538ac46abe08", size = 356606 }, + { url = "https://files.pythonhosted.org/packages/7a/0c/9acb0e54d6a8ba59ce923a180ebe824b4e00e80e56cefde86cc8e0a948be/jiter-0.11.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b0da75dbf4b6ec0b3c9e604d1ee8beaf15bc046fff7180f7d89e3cdbd3bb51", size = 384003 }, + { url = "https://files.pythonhosted.org/packages/3f/2b/e5a5fe09d6da2145e4eed651e2ce37f3c0cf8016e48b1d302e21fb1628b7/jiter-0.11.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:69dd514bf0fa31c62147d6002e5ca2b3e7ef5894f5ac6f0a19752385f4e89437", size = 516946 }, + { url = "https://files.pythonhosted.org/packages/5f/fe/db936e16e0228d48eb81f9934e8327e9fde5185e84f02174fcd22a01be87/jiter-0.11.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:bb31ac0b339efa24c0ca606febd8b77ef11c58d09af1b5f2be4c99e907b11111", size = 507614 }, + { url = "https://files.pythonhosted.org/packages/86/db/c4438e8febfb303486d13c6b72f5eb71cf851e300a0c1f0b4140018dd31f/jiter-0.11.1-cp314-cp314t-win32.whl", hash = "sha256:b2ce0d6156a1d3ad41da3eec63b17e03e296b78b0e0da660876fccfada86d2f7", size = 204043 }, + { url = "https://files.pythonhosted.org/packages/36/59/81badb169212f30f47f817dfaabf965bc9b8204fed906fab58104ee541f9/jiter-0.11.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f4db07d127b54c4a2d43b4cf05ff0193e4f73e0dd90c74037e16df0b29f666e1", size = 204046 }, + { url = "https://files.pythonhosted.org/packages/dd/01/43f7b4eb61db3e565574c4c5714685d042fb652f9eef7e5a3de6aafa943a/jiter-0.11.1-cp314-cp314t-win_arm64.whl", hash = "sha256:28e4fdf2d7ebfc935523e50d1efa3970043cfaa161674fe66f9642409d001dfe", size = 188069 }, + { url = "https://files.pythonhosted.org/packages/9d/51/bd41562dd284e2a18b6dc0a99d195fd4a3560d52ab192c42e56fe0316643/jiter-0.11.1-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:e642b5270e61dd02265866398707f90e365b5db2eb65a4f30c789d826682e1f6", size = 306871 }, + { url = "https://files.pythonhosted.org/packages/ba/cb/64e7f21dd357e8cd6b3c919c26fac7fc198385bbd1d85bb3b5355600d787/jiter-0.11.1-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:464ba6d000585e4e2fd1e891f31f1231f497273414f5019e27c00a4b8f7a24ad", size = 301454 }, + { url = "https://files.pythonhosted.org/packages/55/b0/54bdc00da4ef39801b1419a01035bd8857983de984fd3776b0be6b94add7/jiter-0.11.1-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:055568693ab35e0bf3a171b03bb40b2dcb10352359e0ab9b5ed0da2bf1eb6f6f", size = 336801 }, + { url = "https://files.pythonhosted.org/packages/de/8f/87176ed071d42e9db415ed8be787ef4ef31a4fa27f52e6a4fbf34387bd28/jiter-0.11.1-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0c69ea798d08a915ba4478113efa9e694971e410056392f4526d796f136d3fa", size = 343452 }, + { url = "https://files.pythonhosted.org/packages/a6/bc/950dd7f170c6394b6fdd73f989d9e729bd98907bcc4430ef080a72d06b77/jiter-0.11.1-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:0d4d6993edc83cf75e8c6828a8d6ce40a09ee87e38c7bfba6924f39e1337e21d", size = 302626 }, + { url = "https://files.pythonhosted.org/packages/3a/65/43d7971ca82ee100b7b9b520573eeef7eabc0a45d490168ebb9a9b5bb8b2/jiter-0.11.1-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f78d151c83a87a6cf5461d5ee55bc730dd9ae227377ac6f115b922989b95f838", size = 297034 }, + { url = "https://files.pythonhosted.org/packages/19/4c/000e1e0c0c67e96557a279f8969487ea2732d6c7311698819f977abae837/jiter-0.11.1-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9022974781155cd5521d5cb10997a03ee5e31e8454c9d999dcdccd253f2353f", size = 337328 }, + { url = "https://files.pythonhosted.org/packages/d9/71/71408b02c6133153336d29fa3ba53000f1e1a3f78bb2fc2d1a1865d2e743/jiter-0.11.1-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18c77aaa9117510d5bdc6a946baf21b1f0cfa58ef04d31c8d016f206f2118960", size = 343697 }, ] [[package]] @@ -761,45 +703,59 @@ wheels = [ [[package]] name = "langchain" -version = "0.3.27" +version = "1.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, - { name = "langchain-text-splitters" }, - { name = "langsmith" }, + { name = "langgraph" }, { name = "pydantic" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "sqlalchemy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/f6/f4f7f3a56626fe07e2bb330feb61254dbdf06c506e6b59a536a337da51cf/langchain-0.3.27.tar.gz", hash = "sha256:aa6f1e6274ff055d0fd36254176770f356ed0a8994297d1df47df341953cec62", size = 10233809 } +sdist = { url = "https://files.pythonhosted.org/packages/37/08/1708495e03eadbeef5d51e6b7cdcae4752a113a9b6313f46c70e165149c4/langchain-1.0.3.tar.gz", hash = "sha256:f96d8d185cb8cbba9793f5c648e7d5eeec688f8e3778f700d75d89d6570ae11e", size = 444810 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/d5/4861816a95b2f6993f1360cfb605aacb015506ee2090433a71de9cca8477/langchain-0.3.27-py3-none-any.whl", hash = "sha256:7b20c4f338826acb148d885b20a73a16e410ede9ee4f19bb02011852d5f98798", size = 1018194 }, + { url = "https://files.pythonhosted.org/packages/68/c8/b5dcfdde8b96369e5445f0fbac52fe8495bbd11b23ca83691d90d464eb15/langchain-1.0.3-py3-none-any.whl", hash = "sha256:a7d57964ed16278c991de4ab15516a81937a58c5ac7d7aadccb18431ad8179b2", size = 91970 }, ] [[package]] name = "langchain-anthropic" -version = "0.3.22" +version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anthropic" }, { name = "langchain-core" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b8/ac/4791e4451e1972f80cb517e19d003678239921fc0685a4c4b265fe47e216/langchain_anthropic-0.3.22.tar.gz", hash = "sha256:6c440278bd8012bc94ae341f416bfc724fdc5d2d2b69630fe6e82fa6ee9682ac", size = 471312 } +sdist = { url = "https://files.pythonhosted.org/packages/7e/12/f622dccb2886a9a016e149b74df2a2d9f7f6d6fafee087a010aa7415227e/langchain_anthropic-1.0.1.tar.gz", hash = "sha256:cd4c2f5d5d85d3aba290ea7b9976371d3e25fd58f6d70cfd0ef3323787862edc", size = 667647 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/2dcbf58526fa59b5464f79b5369a3abd81460ad3b737399cc3fd55bfb0cb/langchain_anthropic-1.0.1-py3-none-any.whl", hash = "sha256:a883f1030c50c2422a57985c0a89b1f49e9e0abe3117d212e510e3b838df7417", size = 46421 }, +] + +[[package]] +name = "langchain-classic" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "langchain-text-splitters" }, + { name = "langsmith" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/b1/a66babeccb2c05ed89690a534296688c0349bee7a71641e91ecc2afd72fd/langchain_classic-1.0.0.tar.gz", hash = "sha256:a63655609254ebc36d660eb5ad7c06c778b2e6733c615ffdac3eac4fbe2b12c5", size = 10514930 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/ac/019fd9d45716a4d74c154f160665074ae49885ff4764c8313737f5fda348/langchain_anthropic-0.3.22-py3-none-any.whl", hash = "sha256:17721b240342a1a3f70bf0b2ff33520ba60d69008e3b9433190a62a52ff87cf6", size = 32592 }, + { url = "https://files.pythonhosted.org/packages/74/74/246f809a3741c21982f985ca0113ec92d3c84896308561cc4414823f6951/langchain_classic-1.0.0-py3-none-any.whl", hash = "sha256:97f71f150c10123f5511c08873f030e35ede52311d729a7688c721b4e1e01f33", size = 1040701 }, ] [[package]] name = "langchain-community" -version = "0.3.31" +version = "0.4.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, { name = "dataclasses-json" }, { name = "httpx-sse" }, - { name = "langchain" }, + { name = "langchain-classic" }, { name = "langchain-core" }, { name = "langsmith" }, { name = "numpy" }, @@ -809,14 +765,14 @@ dependencies = [ { name = "sqlalchemy" }, { name = "tenacity" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/83/49/2ff5354273809e9811392bc24bcffda545a196070666aef27bc6aacf1c21/langchain_community-0.3.31.tar.gz", hash = "sha256:250e4c1041539130f6d6ac6f9386cb018354eafccd917b01a4cff1950b80fd81", size = 33241237 } +sdist = { url = "https://files.pythonhosted.org/packages/53/97/a03585d42b9bdb6fbd935282d6e3348b10322a24e6ce12d0c99eb461d9af/langchain_community-0.4.1.tar.gz", hash = "sha256:f3b211832728ee89f169ddce8579b80a085222ddb4f4ed445a46e977d17b1e85", size = 33241144 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/0a/b8848db67ad7c8d4652cb6f4cb78d49b5b5e6e8e51d695d62025aa3f7dbc/langchain_community-0.3.31-py3-none-any.whl", hash = "sha256:1c727e3ebbacd4d891b07bd440647668001cea3e39cbe732499ad655ec5cb569", size = 2532920 }, + { url = "https://files.pythonhosted.org/packages/f0/a4/c4fde67f193401512337456cabc2148f2c43316e445f5decd9f8806e2992/langchain_community-0.4.1-py3-none-any.whl", hash = "sha256:2135abb2c7748a35c84613108f7ebf30f8505b18c3c18305ffaecfc7651f6c6a", size = 2533285 }, ] [[package]] name = "langchain-core" -version = "0.3.79" +version = "1.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonpatch" }, @@ -827,27 +783,14 @@ dependencies = [ { name = "tenacity" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c8/99/f926495f467e0f43289f12e951655d267d1eddc1136c3cf4dd907794a9a7/langchain_core-0.3.79.tar.gz", hash = "sha256:024ba54a346dd9b13fb8b2342e0c83d0111e7f26fa01f545ada23ad772b55a60", size = 580895 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/71/46b0efaf3fc6ad2c2bd600aef500f1cb2b7038a4042f58905805630dd29d/langchain_core-0.3.79-py3-none-any.whl", hash = "sha256:92045bfda3e741f8018e1356f83be203ec601561c6a7becfefe85be5ddc58fdb", size = 449779 }, -] - -[[package]] -name = "langchain-experimental" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "langchain-community" }, - { name = "langchain-core" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/27/56/a8acbb08a03383c28875b3b151e4cefea5612266917fbd6fc3c14c21e172/langchain_experimental-0.3.4.tar.gz", hash = "sha256:937c4259ee4a639c618d19acf0e2c5c2898ef127050346edc5655259aa281a21", size = 140532 } +sdist = { url = "https://files.pythonhosted.org/packages/41/15/dfe0c2af463d63296fe18608a06570ce3a4b245253d4f26c301481380f7d/langchain_core-1.0.3.tar.gz", hash = "sha256:10744945d21168fb40d1162a5f1cf69bf0137ff6ad2b12c87c199a5297410887", size = 770278 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/27/fe8caa4884611286b1f7d6c5cfd76e1fef188faaa946db4fde6daa1cd2cd/langchain_experimental-0.3.4-py3-none-any.whl", hash = "sha256:2e587306aea36b60fa5e5fc05dc7281bee9f60a806f0bf9d30916e0ee096af80", size = 209154 }, + { url = "https://files.pythonhosted.org/packages/f2/1b/b0a37674bdcbd2931944e12ea742fd167098de5212ee2391e91dce631162/langchain_core-1.0.3-py3-none-any.whl", hash = "sha256:64f1bd45f04b174bbfd54c135a8adc52f4902b347c15a117d6383b412bf558a5", size = 469927 }, ] [[package]] name = "langchain-google-genai" -version = "2.1.12" +version = "3.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filetype" }, @@ -855,40 +798,40 @@ dependencies = [ { name = "langchain-core" }, { name = "pydantic" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/09/38/8b3a71c729bd03e9eb0fd8bdb19e06a074c35bc2eaa61b1b9edfa863f38d/langchain_google_genai-2.1.12.tar.gz", hash = "sha256:4a98371e545eb97fcdf483086a4aebbb8eceeb9597ca5a9c4c35e92f4fbbd271", size = 77566 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/62/4352390e10b95d8a42da769b9bd7a7547af9aafd71e4012159f7394f7513/langchain_google_genai-3.0.1.tar.gz", hash = "sha256:d3f82fd274d2e9ca86448d5f89ac37b37b2d3cdfa6dec1af7bc792317b11dde7", size = 92794 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/8d/9dd9653e5414e73cae3480e5947bbbbd94ba7fa824efdf46e7ff2c0faef2/langchain_google_genai-2.1.12-py3-none-any.whl", hash = "sha256:4c07630419a8fbe7a2ec512c6dea68289663bfe7d5fae0ba431d2cd59a0d0880", size = 50746 }, + { url = "https://files.pythonhosted.org/packages/75/4f/4694f86ad0dfa920f8a7cd22000fa7f87e12551cbb40f26c40d5ce2c7205/langchain_google_genai-3.0.1-py3-none-any.whl", hash = "sha256:2420396c75d3911af42af1bffb2c2ddd3fff73f9db9d619963429b5385e5f55e", size = 58145 }, ] [[package]] name = "langchain-openai" -version = "0.3.35" +version = "1.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, { name = "openai" }, { name = "tiktoken" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fb/96/06d0d25a37e05a0ff2d918f0a4b0bf0732aed6a43b472b0b68426ce04ef8/langchain_openai-0.3.35.tar.gz", hash = "sha256:fa985fd041c3809da256a040c98e8a43e91c6d165b96dcfeb770d8bd457bf76f", size = 786635 } +sdist = { url = "https://files.pythonhosted.org/packages/b3/3c/edb7ffca76fdcfd938ce8380bf8ec79a0a8be41ba7fdbf6f9fe1cb5fd1a8/langchain_openai-1.0.2.tar.gz", hash = "sha256:621e8295c52db9a1fc74806a0bd227ea215c132c6c5e421d2982c9ee78468769", size = 1025578 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/d5/c90c5478215c20ee71d8feaf676f7ffd78d0568f8c98bd83f81ce7562ed7/langchain_openai-0.3.35-py3-none-any.whl", hash = "sha256:76d5707e6e81fd461d33964ad618bd326cb661a1975cef7c1cb0703576bdada5", size = 75952 }, + { url = "https://files.pythonhosted.org/packages/78/9b/7af1d539a051d195c5ecc5990ebd483f208c40f75a8a9532846d16762704/langchain_openai-1.0.2-py3-none-any.whl", hash = "sha256:b3eb9b82752063b46452aa868d8c8bc1604e57631648c3bc325bba58d3aeb143", size = 81934 }, ] [[package]] name = "langchain-text-splitters" -version = "0.3.11" +version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/11/43/dcda8fd25f0b19cb2835f2f6bb67f26ad58634f04ac2d8eae00526b0fa55/langchain_text_splitters-0.3.11.tar.gz", hash = "sha256:7a50a04ada9a133bbabb80731df7f6ddac51bc9f1b9cab7fa09304d71d38a6cc", size = 46458 } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2e/c833dcc379c1c086453708ef5eef7d4d1f808559ca4458bd6569d5d83ad7/langchain_text_splitters-1.0.0.tar.gz", hash = "sha256:d8580a20ad7ed10b432feb273e5758b2cc0902d094919629cec0e1ad691a6744", size = 264257 } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/0d/41a51b40d24ff0384ec4f7ab8dd3dcea8353c05c973836b5e289f1465d4f/langchain_text_splitters-0.3.11-py3-none-any.whl", hash = "sha256:cf079131166a487f1372c8ab5d0bfaa6c0a4291733d9c43a34a16ac9bcd6a393", size = 33845 }, + { url = "https://files.pythonhosted.org/packages/1e/97/d362353ab04f865af6f81d4d46e7aa428734aa032de0017934b771fc34b7/langchain_text_splitters-1.0.0-py3-none-any.whl", hash = "sha256:f00c8219d3468f2c5bd951b708b6a7dd9bc3c62d0cfb83124c377f7170f33b2e", size = 33851 }, ] [[package]] name = "langgraph" -version = "0.6.10" +version = "1.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, @@ -898,35 +841,35 @@ dependencies = [ { name = "pydantic" }, { name = "xxhash" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/9c/bc34cf47e7a8845f9abe5a09cf6ed892162b899708fae5c59252fa44ed24/langgraph-0.6.10.tar.gz", hash = "sha256:37457595ef3becebca94b3c4711a8bcd539b5eae7560f2cec409eae0d8113c59", size = 492079 } +sdist = { url = "https://files.pythonhosted.org/packages/0e/25/18e6e056ee1a8af64fcab441b4a3f2e158399935b08f148c7718fc42ecdb/langgraph-1.0.2.tar.gz", hash = "sha256:dae1af08d6025cb1fcaed68f502c01af7d634d9044787c853a46c791cfc52f67", size = 482660 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/c2972a484581389b5c193f16e8e36531e6574b280f23700735b0d6729365/langgraph-0.6.10-py3-none-any.whl", hash = "sha256:b16baacd38895f6f4aa51e03b8a5b5f8695cff96fd0e8b637b725186ea27237c", size = 155422 }, + { url = "https://files.pythonhosted.org/packages/d7/b1/9f4912e13d4ed691f2685c8a4b764b5a9237a30cca0c5782bc213d9f0a9a/langgraph-1.0.2-py3-none-any.whl", hash = "sha256:b3d56b8c01de857b5fb1da107e8eab6e30512a377685eeedb4f76456724c9729", size = 156751 }, ] [[package]] name = "langgraph-checkpoint" -version = "2.1.2" +version = "3.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, { name = "ormsgpack" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/29/83/6404f6ed23a91d7bc63d7df902d144548434237d017820ceaa8d014035f2/langgraph_checkpoint-2.1.2.tar.gz", hash = "sha256:112e9d067a6eff8937caf198421b1ffba8d9207193f14ac6f89930c1260c06f9", size = 142420 } +sdist = { url = "https://files.pythonhosted.org/packages/0f/07/2b1c042fa87d40cf2db5ca27dc4e8dd86f9a0436a10aa4361a8982718ae7/langgraph_checkpoint-3.0.1.tar.gz", hash = "sha256:59222f875f85186a22c494aedc65c4e985a3df27e696e5016ba0b98a5ed2cee0", size = 137785 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/f2/06bf5addf8ee664291e1b9ffa1f28fc9d97e59806dc7de5aea9844cbf335/langgraph_checkpoint-2.1.2-py3-none-any.whl", hash = "sha256:911ebffb069fd01775d4b5184c04aaafc2962fcdf50cf49d524cd4367c4d0c60", size = 45763 }, + { url = "https://files.pythonhosted.org/packages/48/e3/616e3a7ff737d98c1bbb5700dd62278914e2a9ded09a79a1fa93cf24ce12/langgraph_checkpoint-3.0.1-py3-none-any.whl", hash = "sha256:9b04a8d0edc0474ce4eaf30c5d731cee38f11ddff50a6177eead95b5c4e4220b", size = 46249 }, ] [[package]] name = "langgraph-prebuilt" -version = "0.6.4" +version = "1.0.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "langchain-core" }, { name = "langgraph-checkpoint" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/21/9b198d11732101ee8cdf30af98d0b4f11254c768de15173e57f5260fd14b/langgraph_prebuilt-0.6.4.tar.gz", hash = "sha256:e9e53b906ee5df46541d1dc5303239e815d3ec551e52bb03dd6463acc79ec28f", size = 125695 } +sdist = { url = "https://files.pythonhosted.org/packages/33/2f/b940590436e07b3450fe6d791aad5e581363ad536c4f1771e3ba46530268/langgraph_prebuilt-1.0.2.tar.gz", hash = "sha256:9896dbabf04f086eb59df4294f54ab5bdb21cd78e27e0a10e695dffd1cc6097d", size = 142075 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7f/973b0d9729d9693d6e5b4bc5f3ae41138d194cb7b16b0ed230020beeb13a/langgraph_prebuilt-0.6.4-py3-none-any.whl", hash = "sha256:819f31d88b84cb2729ff1b79db2d51e9506b8fb7aaacfc0d359d4fe16e717344", size = 28025 }, + { url = "https://files.pythonhosted.org/packages/27/2f/9a7d00d4afa036e65294059c7c912002fb72ba5dbbd5c2a871ca06360278/langgraph_prebuilt-1.0.2-py3-none-any.whl", hash = "sha256:d9499f7c449fb637ee7b87e3f6a3b74095f4202053c74d33894bd839ea4c57c7", size = 34286 }, ] [[package]] @@ -944,7 +887,7 @@ wheels = [ [[package]] name = "langsmith" -version = "0.4.35" +version = "0.4.41" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "httpx" }, @@ -955,9 +898,9 @@ dependencies = [ { name = "requests-toolbelt" }, { name = "zstandard" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/e4/937e20de425eea337c275475d5283402c31284f79c37016c8d6e8a08c5bd/langsmith-0.4.35.tar.gz", hash = "sha256:de589346911ed2bfeb92de9f634a7090efb8961a0c842fd1fb17c75ceefa5be7", size = 966172 } +sdist = { url = "https://files.pythonhosted.org/packages/dc/7d/5c658251230b233958cbf8be46600254d6248613081d670dc7fe9b241778/langsmith-0.4.41.tar.gz", hash = "sha256:b88d03bb157cf69d1afee250a658d847003babbbd9647f720edcc9b03a0857cd", size = 949854 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/a9/40cfd19ab7f2c2737d94d1bd6cb3dc3da85232705d7a563044397d0479e8/langsmith-0.4.35-py3-none-any.whl", hash = "sha256:3c3e6ec236e31099c0be175918d21a342cdb87df35138051205da726b9058b8e", size = 387139 }, + { url = "https://files.pythonhosted.org/packages/98/4c/6c0c338ca7182e4ecb7af61049415e7b3513cc6cea9aa5bf8ca508f53539/langsmith-0.4.41-py3-none-any.whl", hash = "sha256:5cdc554e5f0361bf791fdd5e8dea16d5ba9dfce09b3b8f8bba5e99450c569b27", size = 399279 }, ] [[package]] @@ -978,24 +921,6 @@ version = "6.7.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877 }, - { url = "https://files.pythonhosted.org/packages/38/6f/614f09a04e6184f8824268fce4bc925e9849edfa654ddd59f0b64508c595/multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45", size = 45467 }, - { url = "https://files.pythonhosted.org/packages/b3/93/c4f67a436dd026f2e780c433277fff72be79152894d9fc36f44569cab1a6/multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa", size = 43834 }, - { url = "https://files.pythonhosted.org/packages/7f/f5/013798161ca665e4a422afbc5e2d9e4070142a9ff8905e482139cd09e4d0/multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7", size = 250545 }, - { url = "https://files.pythonhosted.org/packages/71/2f/91dbac13e0ba94669ea5119ba267c9a832f0cb65419aca75549fcf09a3dc/multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e", size = 258305 }, - { url = "https://files.pythonhosted.org/packages/ef/b0/754038b26f6e04488b48ac621f779c341338d78503fb45403755af2df477/multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546", size = 242363 }, - { url = "https://files.pythonhosted.org/packages/87/15/9da40b9336a7c9fa606c4cf2ed80a649dffeb42b905d4f63a1d7eb17d746/multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4", size = 268375 }, - { url = "https://files.pythonhosted.org/packages/82/72/c53fcade0cc94dfaad583105fd92b3a783af2091eddcb41a6d5a52474000/multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1", size = 269346 }, - { url = "https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d", size = 256107 }, - { url = "https://files.pythonhosted.org/packages/3c/06/3f06f611087dc60d65ef775f1fb5aca7c6d61c6db4990e7cda0cef9b1651/multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304", size = 253592 }, - { url = "https://files.pythonhosted.org/packages/20/24/54e804ec7945b6023b340c412ce9c3f81e91b3bf5fa5ce65558740141bee/multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12", size = 251024 }, - { url = "https://files.pythonhosted.org/packages/14/48/011cba467ea0b17ceb938315d219391d3e421dfd35928e5dbdc3f4ae76ef/multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62", size = 251484 }, - { url = "https://files.pythonhosted.org/packages/0d/2f/919258b43bb35b99fa127435cfb2d91798eb3a943396631ef43e3720dcf4/multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0", size = 263579 }, - { url = "https://files.pythonhosted.org/packages/31/22/a0e884d86b5242b5a74cf08e876bdf299e413016b66e55511f7a804a366e/multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a", size = 259654 }, - { url = "https://files.pythonhosted.org/packages/b2/e5/17e10e1b5c5f5a40f2fcbb45953c9b215f8a4098003915e46a93f5fcaa8f/multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8", size = 251511 }, - { url = "https://files.pythonhosted.org/packages/e3/9a/201bb1e17e7af53139597069c375e7b0dcbd47594604f65c2d5359508566/multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4", size = 41895 }, - { url = "https://files.pythonhosted.org/packages/46/e2/348cd32faad84eaf1d20cce80e2bb0ef8d312c55bca1f7fa9865e7770aaf/multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b", size = 46073 }, - { url = "https://files.pythonhosted.org/packages/25/ec/aad2613c1910dce907480e0c3aa306905830f25df2e54ccc9dea450cb5aa/multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec", size = 43226 }, { url = "https://files.pythonhosted.org/packages/d2/86/33272a544eeb36d66e4d9a920602d1a2f57d4ebea4ef3cdfe5a912574c95/multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6", size = 76135 }, { url = "https://files.pythonhosted.org/packages/91/1c/eb97db117a1ebe46d457a3d235a7b9d2e6dcab174f42d1b67663dd9e5371/multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159", size = 45117 }, { url = "https://files.pythonhosted.org/packages/f1/d8/6c3442322e41fb1dd4de8bd67bfd11cd72352ac131f6368315617de752f1/multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca", size = 43472 }, @@ -1082,70 +1007,59 @@ wheels = [ [[package]] name = "numpy" -version = "2.3.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/19/95b3d357407220ed24c139018d2518fab0a61a948e68286a25f1a4d049ff/numpy-2.3.3.tar.gz", hash = "sha256:ddc7c39727ba62b80dfdbedf400d1c10ddfa8eefbd7ec8dcb118be8b56d31029", size = 20576648 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/5d/bb7fc075b762c96329147799e1bcc9176ab07ca6375ea976c475482ad5b3/numpy-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cfdd09f9c84a1a934cde1eec2267f0a43a7cd44b2cca4ff95b7c0d14d144b0bf", size = 20957014 }, - { url = "https://files.pythonhosted.org/packages/6b/0e/c6211bb92af26517acd52125a237a92afe9c3124c6a68d3b9f81b62a0568/numpy-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb32e3cf0f762aee47ad1ddc6672988f7f27045b0783c887190545baba73aa25", size = 14185220 }, - { url = "https://files.pythonhosted.org/packages/22/f2/07bb754eb2ede9073f4054f7c0286b0d9d2e23982e090a80d478b26d35ca/numpy-2.3.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:396b254daeb0a57b1fe0ecb5e3cff6fa79a380fa97c8f7781a6d08cd429418fe", size = 5113918 }, - { url = "https://files.pythonhosted.org/packages/81/0a/afa51697e9fb74642f231ea36aca80fa17c8fb89f7a82abd5174023c3960/numpy-2.3.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:067e3d7159a5d8f8a0b46ee11148fc35ca9b21f61e3c49fbd0a027450e65a33b", size = 6647922 }, - { url = "https://files.pythonhosted.org/packages/5d/f5/122d9cdb3f51c520d150fef6e87df9279e33d19a9611a87c0d2cf78a89f4/numpy-2.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c02d0629d25d426585fb2e45a66154081b9fa677bc92a881ff1d216bc9919a8", size = 14281991 }, - { url = "https://files.pythonhosted.org/packages/51/64/7de3c91e821a2debf77c92962ea3fe6ac2bc45d0778c1cbe15d4fce2fd94/numpy-2.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9192da52b9745f7f0766531dcfa978b7763916f158bb63bdb8a1eca0068ab20", size = 16641643 }, - { url = "https://files.pythonhosted.org/packages/30/e4/961a5fa681502cd0d68907818b69f67542695b74e3ceaa513918103b7e80/numpy-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cd7de500a5b66319db419dc3c345244404a164beae0d0937283b907d8152e6ea", size = 16056787 }, - { url = "https://files.pythonhosted.org/packages/99/26/92c912b966e47fbbdf2ad556cb17e3a3088e2e1292b9833be1dfa5361a1a/numpy-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93d4962d8f82af58f0b2eb85daaf1b3ca23fe0a85d0be8f1f2b7bb46034e56d7", size = 18579598 }, - { url = "https://files.pythonhosted.org/packages/17/b6/fc8f82cb3520768718834f310c37d96380d9dc61bfdaf05fe5c0b7653e01/numpy-2.3.3-cp312-cp312-win32.whl", hash = "sha256:5534ed6b92f9b7dca6c0a19d6df12d41c68b991cef051d108f6dbff3babc4ebf", size = 6320800 }, - { url = "https://files.pythonhosted.org/packages/32/ee/de999f2625b80d043d6d2d628c07d0d5555a677a3cf78fdf868d409b8766/numpy-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:497d7cad08e7092dba36e3d296fe4c97708c93daf26643a1ae4b03f6294d30eb", size = 12786615 }, - { url = "https://files.pythonhosted.org/packages/49/6e/b479032f8a43559c383acb20816644f5f91c88f633d9271ee84f3b3a996c/numpy-2.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:ca0309a18d4dfea6fc6262a66d06c26cfe4640c3926ceec90e57791a82b6eee5", size = 10195936 }, - { url = "https://files.pythonhosted.org/packages/7d/b9/984c2b1ee61a8b803bf63582b4ac4242cf76e2dbd663efeafcb620cc0ccb/numpy-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f5415fb78995644253370985342cd03572ef8620b934da27d77377a2285955bf", size = 20949588 }, - { url = "https://files.pythonhosted.org/packages/a6/e4/07970e3bed0b1384d22af1e9912527ecbeb47d3b26e9b6a3bced068b3bea/numpy-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d00de139a3324e26ed5b95870ce63be7ec7352171bc69a4cf1f157a48e3eb6b7", size = 14177802 }, - { url = "https://files.pythonhosted.org/packages/35/c7/477a83887f9de61f1203bad89cf208b7c19cc9fef0cebef65d5a1a0619f2/numpy-2.3.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9dc13c6a5829610cc07422bc74d3ac083bd8323f14e2827d992f9e52e22cd6a6", size = 5106537 }, - { url = "https://files.pythonhosted.org/packages/52/47/93b953bd5866a6f6986344d045a207d3f1cfbad99db29f534ea9cee5108c/numpy-2.3.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d79715d95f1894771eb4e60fb23f065663b2298f7d22945d66877aadf33d00c7", size = 6640743 }, - { url = "https://files.pythonhosted.org/packages/23/83/377f84aaeb800b64c0ef4de58b08769e782edcefa4fea712910b6f0afd3c/numpy-2.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952cfd0748514ea7c3afc729a0fc639e61655ce4c55ab9acfab14bda4f402b4c", size = 14278881 }, - { url = "https://files.pythonhosted.org/packages/9a/a5/bf3db6e66c4b160d6ea10b534c381a1955dfab34cb1017ea93aa33c70ed3/numpy-2.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b83648633d46f77039c29078751f80da65aa64d5622a3cd62aaef9d835b6c93", size = 16636301 }, - { url = "https://files.pythonhosted.org/packages/a2/59/1287924242eb4fa3f9b3a2c30400f2e17eb2707020d1c5e3086fe7330717/numpy-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b001bae8cea1c7dfdb2ae2b017ed0a6f2102d7a70059df1e338e307a4c78a8ae", size = 16053645 }, - { url = "https://files.pythonhosted.org/packages/e6/93/b3d47ed882027c35e94ac2320c37e452a549f582a5e801f2d34b56973c97/numpy-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e9aced64054739037d42fb84c54dd38b81ee238816c948c8f3ed134665dcd86", size = 18578179 }, - { url = "https://files.pythonhosted.org/packages/20/d9/487a2bccbf7cc9d4bfc5f0f197761a5ef27ba870f1e3bbb9afc4bbe3fcc2/numpy-2.3.3-cp313-cp313-win32.whl", hash = "sha256:9591e1221db3f37751e6442850429b3aabf7026d3b05542d102944ca7f00c8a8", size = 6312250 }, - { url = "https://files.pythonhosted.org/packages/1b/b5/263ebbbbcede85028f30047eab3d58028d7ebe389d6493fc95ae66c636ab/numpy-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f0dadeb302887f07431910f67a14d57209ed91130be0adea2f9793f1a4f817cf", size = 12783269 }, - { url = "https://files.pythonhosted.org/packages/fa/75/67b8ca554bbeaaeb3fac2e8bce46967a5a06544c9108ec0cf5cece559b6c/numpy-2.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:3c7cf302ac6e0b76a64c4aecf1a09e51abd9b01fc7feee80f6c43e3ab1b1dbc5", size = 10195314 }, - { url = "https://files.pythonhosted.org/packages/11/d0/0d1ddec56b162042ddfafeeb293bac672de9b0cfd688383590090963720a/numpy-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eda59e44957d272846bb407aad19f89dc6f58fecf3504bd144f4c5cf81a7eacc", size = 21048025 }, - { url = "https://files.pythonhosted.org/packages/36/9e/1996ca6b6d00415b6acbdd3c42f7f03ea256e2c3f158f80bd7436a8a19f3/numpy-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:823d04112bc85ef5c4fda73ba24e6096c8f869931405a80aa8b0e604510a26bc", size = 14301053 }, - { url = "https://files.pythonhosted.org/packages/05/24/43da09aa764c68694b76e84b3d3f0c44cb7c18cdc1ba80e48b0ac1d2cd39/numpy-2.3.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:40051003e03db4041aa325da2a0971ba41cf65714e65d296397cc0e32de6018b", size = 5229444 }, - { url = "https://files.pythonhosted.org/packages/bc/14/50ffb0f22f7218ef8af28dd089f79f68289a7a05a208db9a2c5dcbe123c1/numpy-2.3.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ee9086235dd6ab7ae75aba5662f582a81ced49f0f1c6de4260a78d8f2d91a19", size = 6738039 }, - { url = "https://files.pythonhosted.org/packages/55/52/af46ac0795e09657d45a7f4db961917314377edecf66db0e39fa7ab5c3d3/numpy-2.3.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94fcaa68757c3e2e668ddadeaa86ab05499a70725811e582b6a9858dd472fb30", size = 14352314 }, - { url = "https://files.pythonhosted.org/packages/a7/b1/dc226b4c90eb9f07a3fff95c2f0db3268e2e54e5cce97c4ac91518aee71b/numpy-2.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da1a74b90e7483d6ce5244053399a614b1d6b7bc30a60d2f570e5071f8959d3e", size = 16701722 }, - { url = "https://files.pythonhosted.org/packages/9d/9d/9d8d358f2eb5eced14dba99f110d83b5cd9a4460895230f3b396ad19a323/numpy-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2990adf06d1ecee3b3dcbb4977dfab6e9f09807598d647f04d385d29e7a3c3d3", size = 16132755 }, - { url = "https://files.pythonhosted.org/packages/b6/27/b3922660c45513f9377b3fb42240bec63f203c71416093476ec9aa0719dc/numpy-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ed635ff692483b8e3f0fcaa8e7eb8a75ee71aa6d975388224f70821421800cea", size = 18651560 }, - { url = "https://files.pythonhosted.org/packages/5b/8e/3ab61a730bdbbc201bb245a71102aa609f0008b9ed15255500a99cd7f780/numpy-2.3.3-cp313-cp313t-win32.whl", hash = "sha256:a333b4ed33d8dc2b373cc955ca57babc00cd6f9009991d9edc5ddbc1bac36bcd", size = 6442776 }, - { url = "https://files.pythonhosted.org/packages/1c/3a/e22b766b11f6030dc2decdeff5c2fb1610768055603f9f3be88b6d192fb2/numpy-2.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:4384a169c4d8f97195980815d6fcad04933a7e1ab3b530921c3fef7a1c63426d", size = 12927281 }, - { url = "https://files.pythonhosted.org/packages/7b/42/c2e2bc48c5e9b2a83423f99733950fbefd86f165b468a3d85d52b30bf782/numpy-2.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75370986cc0bc66f4ce5110ad35aae6d182cc4ce6433c40ad151f53690130bf1", size = 10265275 }, - { url = "https://files.pythonhosted.org/packages/6b/01/342ad585ad82419b99bcf7cebe99e61da6bedb89e213c5fd71acc467faee/numpy-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cd052f1fa6a78dee696b58a914b7229ecfa41f0a6d96dc663c1220a55e137593", size = 20951527 }, - { url = "https://files.pythonhosted.org/packages/ef/d8/204e0d73fc1b7a9ee80ab1fe1983dd33a4d64a4e30a05364b0208e9a241a/numpy-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:414a97499480067d305fcac9716c29cf4d0d76db6ebf0bf3cbce666677f12652", size = 14186159 }, - { url = "https://files.pythonhosted.org/packages/22/af/f11c916d08f3a18fb8ba81ab72b5b74a6e42ead4c2846d270eb19845bf74/numpy-2.3.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:50a5fe69f135f88a2be9b6ca0481a68a136f6febe1916e4920e12f1a34e708a7", size = 5114624 }, - { url = "https://files.pythonhosted.org/packages/fb/11/0ed919c8381ac9d2ffacd63fd1f0c34d27e99cab650f0eb6f110e6ae4858/numpy-2.3.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:b912f2ed2b67a129e6a601e9d93d4fa37bef67e54cac442a2f588a54afe5c67a", size = 6642627 }, - { url = "https://files.pythonhosted.org/packages/ee/83/deb5f77cb0f7ba6cb52b91ed388b47f8f3c2e9930d4665c600408d9b90b9/numpy-2.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e318ee0596d76d4cb3d78535dc005fa60e5ea348cd131a51e99d0bdbe0b54fe", size = 14296926 }, - { url = "https://files.pythonhosted.org/packages/77/cc/70e59dcb84f2b005d4f306310ff0a892518cc0c8000a33d0e6faf7ca8d80/numpy-2.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce020080e4a52426202bdb6f7691c65bb55e49f261f31a8f506c9f6bc7450421", size = 16638958 }, - { url = "https://files.pythonhosted.org/packages/b6/5a/b2ab6c18b4257e099587d5b7f903317bd7115333ad8d4ec4874278eafa61/numpy-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6687dc183aa55dae4a705b35f9c0f8cb178bcaa2f029b241ac5356221d5c021", size = 16071920 }, - { url = "https://files.pythonhosted.org/packages/b8/f1/8b3fdc44324a259298520dd82147ff648979bed085feeacc1250ef1656c0/numpy-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d8f3b1080782469fdc1718c4ed1d22549b5fb12af0d57d35e992158a772a37cf", size = 18577076 }, - { url = "https://files.pythonhosted.org/packages/f0/a1/b87a284fb15a42e9274e7fcea0dad259d12ddbf07c1595b26883151ca3b4/numpy-2.3.3-cp314-cp314-win32.whl", hash = "sha256:cb248499b0bc3be66ebd6578b83e5acacf1d6cb2a77f2248ce0e40fbec5a76d0", size = 6366952 }, - { url = "https://files.pythonhosted.org/packages/70/5f/1816f4d08f3b8f66576d8433a66f8fa35a5acfb3bbd0bf6c31183b003f3d/numpy-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:691808c2b26b0f002a032c73255d0bd89751425f379f7bcd22d140db593a96e8", size = 12919322 }, - { url = "https://files.pythonhosted.org/packages/8c/de/072420342e46a8ea41c324a555fa90fcc11637583fb8df722936aed1736d/numpy-2.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:9ad12e976ca7b10f1774b03615a2a4bab8addce37ecc77394d8e986927dc0dfe", size = 10478630 }, - { url = "https://files.pythonhosted.org/packages/d5/df/ee2f1c0a9de7347f14da5dd3cd3c3b034d1b8607ccb6883d7dd5c035d631/numpy-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9cc48e09feb11e1db00b320e9d30a4151f7369afb96bd0e48d942d09da3a0d00", size = 21047987 }, - { url = "https://files.pythonhosted.org/packages/d6/92/9453bdc5a4e9e69cf4358463f25e8260e2ffc126d52e10038b9077815989/numpy-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:901bf6123879b7f251d3631967fd574690734236075082078e0571977c6a8e6a", size = 14301076 }, - { url = "https://files.pythonhosted.org/packages/13/77/1447b9eb500f028bb44253105bd67534af60499588a5149a94f18f2ca917/numpy-2.3.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:7f025652034199c301049296b59fa7d52c7e625017cae4c75d8662e377bf487d", size = 5229491 }, - { url = "https://files.pythonhosted.org/packages/3d/f9/d72221b6ca205f9736cb4b2ce3b002f6e45cd67cd6a6d1c8af11a2f0b649/numpy-2.3.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:533ca5f6d325c80b6007d4d7fb1984c303553534191024ec6a524a4c92a5935a", size = 6737913 }, - { url = "https://files.pythonhosted.org/packages/3c/5f/d12834711962ad9c46af72f79bb31e73e416ee49d17f4c797f72c96b6ca5/numpy-2.3.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0edd58682a399824633b66885d699d7de982800053acf20be1eaa46d92009c54", size = 14352811 }, - { url = "https://files.pythonhosted.org/packages/a1/0d/fdbec6629d97fd1bebed56cd742884e4eead593611bbe1abc3eb40d304b2/numpy-2.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:367ad5d8fbec5d9296d18478804a530f1191e24ab4d75ab408346ae88045d25e", size = 16702689 }, - { url = "https://files.pythonhosted.org/packages/9b/09/0a35196dc5575adde1eb97ddfbc3e1687a814f905377621d18ca9bc2b7dd/numpy-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8f6ac61a217437946a1fa48d24c47c91a0c4f725237871117dea264982128097", size = 16133855 }, - { url = "https://files.pythonhosted.org/packages/7a/ca/c9de3ea397d576f1b6753eaa906d4cdef1bf97589a6d9825a349b4729cc2/numpy-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:179a42101b845a816d464b6fe9a845dfaf308fdfc7925387195570789bb2c970", size = 18652520 }, - { url = "https://files.pythonhosted.org/packages/fd/c2/e5ed830e08cd0196351db55db82f65bc0ab05da6ef2b72a836dcf1936d2f/numpy-2.3.3-cp314-cp314t-win32.whl", hash = "sha256:1250c5d3d2562ec4174bce2e3a1523041595f9b651065e4a4473f5f48a6bc8a5", size = 6515371 }, - { url = "https://files.pythonhosted.org/packages/47/c7/b0f6b5b67f6788a0725f744496badbb604d226bf233ba716683ebb47b570/numpy-2.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b37a0b2e5935409daebe82c1e42274d30d9dd355852529eab91dab8dcca7419f", size = 13112576 }, - { url = "https://files.pythonhosted.org/packages/06/b9/33bba5ff6fb679aa0b1f8a07e853f002a6b04b9394db3069a1270a7784ca/numpy-2.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:78c9f6560dc7e6b3990e32df7ea1a50bbd0e2a111e05209963f5ddcab7073b0b", size = 10545953 }, +version = "2.3.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/f4/098d2270d52b41f1bd7db9fc288aaa0400cb48c2a3e2af6fa365d9720947/numpy-2.3.4.tar.gz", hash = "sha256:a7d018bfedb375a8d979ac758b120ba846a7fe764911a64465fd87b8729f4a6a", size = 20582187 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/7e/b72610cc91edf138bc588df5150957a4937221ca6058b825b4725c27be62/numpy-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c090d4860032b857d94144d1a9976b8e36709e40386db289aaf6672de2a81966", size = 20950335 }, + { url = "https://files.pythonhosted.org/packages/3e/46/bdd3370dcea2f95ef14af79dbf81e6927102ddf1cc54adc0024d61252fd9/numpy-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a13fc473b6db0be619e45f11f9e81260f7302f8d180c49a22b6e6120022596b3", size = 14179878 }, + { url = "https://files.pythonhosted.org/packages/ac/01/5a67cb785bda60f45415d09c2bc245433f1c68dd82eef9c9002c508b5a65/numpy-2.3.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:3634093d0b428e6c32c3a69b78e554f0cd20ee420dcad5a9f3b2a63762ce4197", size = 5108673 }, + { url = "https://files.pythonhosted.org/packages/c2/cd/8428e23a9fcebd33988f4cb61208fda832800ca03781f471f3727a820704/numpy-2.3.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:043885b4f7e6e232d7df4f51ffdef8c36320ee9d5f227b380ea636722c7ed12e", size = 6641438 }, + { url = "https://files.pythonhosted.org/packages/3e/d1/913fe563820f3c6b079f992458f7331278dcd7ba8427e8e745af37ddb44f/numpy-2.3.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4ee6a571d1e4f0ea6d5f22d6e5fbd6ed1dc2b18542848e1e7301bd190500c9d7", size = 14281290 }, + { url = "https://files.pythonhosted.org/packages/9e/7e/7d306ff7cb143e6d975cfa7eb98a93e73495c4deabb7d1b5ecf09ea0fd69/numpy-2.3.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc8a63918b04b8571789688b2780ab2b4a33ab44bfe8ccea36d3eba51228c953", size = 16636543 }, + { url = "https://files.pythonhosted.org/packages/47/6a/8cfc486237e56ccfb0db234945552a557ca266f022d281a2f577b98e955c/numpy-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:40cc556d5abbc54aabe2b1ae287042d7bdb80c08edede19f0c0afb36ae586f37", size = 16056117 }, + { url = "https://files.pythonhosted.org/packages/b1/0e/42cb5e69ea901e06ce24bfcc4b5664a56f950a70efdcf221f30d9615f3f3/numpy-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ecb63014bb7f4ce653f8be7f1df8cbc6093a5a2811211770f6606cc92b5a78fd", size = 18577788 }, + { url = "https://files.pythonhosted.org/packages/86/92/41c3d5157d3177559ef0a35da50f0cda7fa071f4ba2306dd36818591a5bc/numpy-2.3.4-cp313-cp313-win32.whl", hash = "sha256:e8370eb6925bb8c1c4264fec52b0384b44f675f191df91cbe0140ec9f0955646", size = 6282620 }, + { url = "https://files.pythonhosted.org/packages/09/97/fd421e8bc50766665ad35536c2bb4ef916533ba1fdd053a62d96cc7c8b95/numpy-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:56209416e81a7893036eea03abcb91c130643eb14233b2515c90dcac963fe99d", size = 12784672 }, + { url = "https://files.pythonhosted.org/packages/ad/df/5474fb2f74970ca8eb978093969b125a84cc3d30e47f82191f981f13a8a0/numpy-2.3.4-cp313-cp313-win_arm64.whl", hash = "sha256:a700a4031bc0fd6936e78a752eefb79092cecad2599ea9c8039c548bc097f9bc", size = 10196702 }, + { url = "https://files.pythonhosted.org/packages/11/83/66ac031464ec1767ea3ed48ce40f615eb441072945e98693bec0bcd056cc/numpy-2.3.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:86966db35c4040fdca64f0816a1c1dd8dbd027d90fca5a57e00e1ca4cd41b879", size = 21049003 }, + { url = "https://files.pythonhosted.org/packages/5f/99/5b14e0e686e61371659a1d5bebd04596b1d72227ce36eed121bb0aeab798/numpy-2.3.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:838f045478638b26c375ee96ea89464d38428c69170360b23a1a50fa4baa3562", size = 14302980 }, + { url = "https://files.pythonhosted.org/packages/2c/44/e9486649cd087d9fc6920e3fc3ac2aba10838d10804b1e179fb7cbc4e634/numpy-2.3.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d7315ed1dab0286adca467377c8381cd748f3dc92235f22a7dfc42745644a96a", size = 5231472 }, + { url = "https://files.pythonhosted.org/packages/3e/51/902b24fa8887e5fe2063fd61b1895a476d0bbf46811ab0c7fdf4bd127345/numpy-2.3.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:84f01a4d18b2cc4ade1814a08e5f3c907b079c847051d720fad15ce37aa930b6", size = 6739342 }, + { url = "https://files.pythonhosted.org/packages/34/f1/4de9586d05b1962acdcdb1dc4af6646361a643f8c864cef7c852bf509740/numpy-2.3.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:817e719a868f0dacde4abdfc5c1910b301877970195db9ab6a5e2c4bd5b121f7", size = 14354338 }, + { url = "https://files.pythonhosted.org/packages/1f/06/1c16103b425de7969d5a76bdf5ada0804b476fed05d5f9e17b777f1cbefd/numpy-2.3.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85e071da78d92a214212cacea81c6da557cab307f2c34b5f85b628e94803f9c0", size = 16702392 }, + { url = "https://files.pythonhosted.org/packages/34/b2/65f4dc1b89b5322093572b6e55161bb42e3e0487067af73627f795cc9d47/numpy-2.3.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2ec646892819370cf3558f518797f16597b4e4669894a2ba712caccc9da53f1f", size = 16134998 }, + { url = "https://files.pythonhosted.org/packages/d4/11/94ec578896cdb973aaf56425d6c7f2aff4186a5c00fac15ff2ec46998b46/numpy-2.3.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:035796aaaddfe2f9664b9a9372f089cfc88bd795a67bd1bfe15e6e770934cf64", size = 18651574 }, + { url = "https://files.pythonhosted.org/packages/62/b7/7efa763ab33dbccf56dade36938a77345ce8e8192d6b39e470ca25ff3cd0/numpy-2.3.4-cp313-cp313t-win32.whl", hash = "sha256:fea80f4f4cf83b54c3a051f2f727870ee51e22f0248d3114b8e755d160b38cfb", size = 6413135 }, + { url = "https://files.pythonhosted.org/packages/43/70/aba4c38e8400abcc2f345e13d972fb36c26409b3e644366db7649015f291/numpy-2.3.4-cp313-cp313t-win_amd64.whl", hash = "sha256:15eea9f306b98e0be91eb344a94c0e630689ef302e10c2ce5f7e11905c704f9c", size = 12928582 }, + { url = "https://files.pythonhosted.org/packages/67/63/871fad5f0073fc00fbbdd7232962ea1ac40eeaae2bba66c76214f7954236/numpy-2.3.4-cp313-cp313t-win_arm64.whl", hash = "sha256:b6c231c9c2fadbae4011ca5e7e83e12dc4a5072f1a1d85a0a7b3ed754d145a40", size = 10266691 }, + { url = "https://files.pythonhosted.org/packages/72/71/ae6170143c115732470ae3a2d01512870dd16e0953f8a6dc89525696069b/numpy-2.3.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:81c3e6d8c97295a7360d367f9f8553973651b76907988bb6066376bc2252f24e", size = 20955580 }, + { url = "https://files.pythonhosted.org/packages/af/39/4be9222ffd6ca8a30eda033d5f753276a9c3426c397bb137d8e19dedd200/numpy-2.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7c26b0b2bf58009ed1f38a641f3db4be8d960a417ca96d14e5b06df1506d41ff", size = 14188056 }, + { url = "https://files.pythonhosted.org/packages/6c/3d/d85f6700d0a4aa4f9491030e1021c2b2b7421b2b38d01acd16734a2bfdc7/numpy-2.3.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:62b2198c438058a20b6704351b35a1d7db881812d8512d67a69c9de1f18ca05f", size = 5116555 }, + { url = "https://files.pythonhosted.org/packages/bf/04/82c1467d86f47eee8a19a464c92f90a9bb68ccf14a54c5224d7031241ffb/numpy-2.3.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:9d729d60f8d53a7361707f4b68a9663c968882dd4f09e0d58c044c8bf5faee7b", size = 6643581 }, + { url = "https://files.pythonhosted.org/packages/0c/d3/c79841741b837e293f48bd7db89d0ac7a4f2503b382b78a790ef1dc778a5/numpy-2.3.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd0c630cf256b0a7fd9d0a11c9413b42fef5101219ce6ed5a09624f5a65392c7", size = 14299186 }, + { url = "https://files.pythonhosted.org/packages/e8/7e/4a14a769741fbf237eec5a12a2cbc7a4c4e061852b6533bcb9e9a796c908/numpy-2.3.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5e081bc082825f8b139f9e9fe42942cb4054524598aaeb177ff476cc76d09d2", size = 16638601 }, + { url = "https://files.pythonhosted.org/packages/93/87/1c1de269f002ff0a41173fe01dcc925f4ecff59264cd8f96cf3b60d12c9b/numpy-2.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:15fb27364ed84114438fff8aaf998c9e19adbeba08c0b75409f8c452a8692c52", size = 16074219 }, + { url = "https://files.pythonhosted.org/packages/cd/28/18f72ee77408e40a76d691001ae599e712ca2a47ddd2c4f695b16c65f077/numpy-2.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:85d9fb2d8cd998c84d13a79a09cc0c1091648e848e4e6249b0ccd7f6b487fa26", size = 18576702 }, + { url = "https://files.pythonhosted.org/packages/c3/76/95650169b465ececa8cf4b2e8f6df255d4bf662775e797ade2025cc51ae6/numpy-2.3.4-cp314-cp314-win32.whl", hash = "sha256:e73d63fd04e3a9d6bc187f5455d81abfad05660b212c8804bf3b407e984cd2bc", size = 6337136 }, + { url = "https://files.pythonhosted.org/packages/dc/89/a231a5c43ede5d6f77ba4a91e915a87dea4aeea76560ba4d2bf185c683f0/numpy-2.3.4-cp314-cp314-win_amd64.whl", hash = "sha256:3da3491cee49cf16157e70f607c03a217ea6647b1cea4819c4f48e53d49139b9", size = 12920542 }, + { url = "https://files.pythonhosted.org/packages/0d/0c/ae9434a888f717c5ed2ff2393b3f344f0ff6f1c793519fa0c540461dc530/numpy-2.3.4-cp314-cp314-win_arm64.whl", hash = "sha256:6d9cd732068e8288dbe2717177320723ccec4fb064123f0caf9bbd90ab5be868", size = 10480213 }, + { url = "https://files.pythonhosted.org/packages/83/4b/c4a5f0841f92536f6b9592694a5b5f68c9ab37b775ff342649eadf9055d3/numpy-2.3.4-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:22758999b256b595cf0b1d102b133bb61866ba5ceecf15f759623b64c020c9ec", size = 21052280 }, + { url = "https://files.pythonhosted.org/packages/3e/80/90308845fc93b984d2cc96d83e2324ce8ad1fd6efea81b324cba4b673854/numpy-2.3.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9cb177bc55b010b19798dc5497d540dea67fd13a8d9e882b2dae71de0cf09eb3", size = 14302930 }, + { url = "https://files.pythonhosted.org/packages/3d/4e/07439f22f2a3b247cec4d63a713faae55e1141a36e77fb212881f7cda3fb/numpy-2.3.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0f2bcc76f1e05e5ab58893407c63d90b2029908fa41f9f1cc51eecce936c3365", size = 5231504 }, + { url = "https://files.pythonhosted.org/packages/ab/de/1e11f2547e2fe3d00482b19721855348b94ada8359aef5d40dd57bfae9df/numpy-2.3.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:8dc20bde86802df2ed8397a08d793da0ad7a5fd4ea3ac85d757bf5dd4ad7c252", size = 6739405 }, + { url = "https://files.pythonhosted.org/packages/3b/40/8cd57393a26cebe2e923005db5134a946c62fa56a1087dc7c478f3e30837/numpy-2.3.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e199c087e2aa71c8f9ce1cb7a8e10677dc12457e7cc1be4798632da37c3e86e", size = 14354866 }, + { url = "https://files.pythonhosted.org/packages/93/39/5b3510f023f96874ee6fea2e40dfa99313a00bf3ab779f3c92978f34aace/numpy-2.3.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85597b2d25ddf655495e2363fe044b0ae999b75bc4d630dc0d886484b03a5eb0", size = 16703296 }, + { url = "https://files.pythonhosted.org/packages/41/0d/19bb163617c8045209c1996c4e427bccbc4bbff1e2c711f39203c8ddbb4a/numpy-2.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04a69abe45b49c5955923cf2c407843d1c85013b424ae8a560bba16c92fe44a0", size = 16136046 }, + { url = "https://files.pythonhosted.org/packages/e2/c1/6dba12fdf68b02a21ac411c9df19afa66bed2540f467150ca64d246b463d/numpy-2.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e1708fac43ef8b419c975926ce1eaf793b0c13b7356cfab6ab0dc34c0a02ac0f", size = 18652691 }, + { url = "https://files.pythonhosted.org/packages/f8/73/f85056701dbbbb910c51d846c58d29fd46b30eecd2b6ba760fc8b8a1641b/numpy-2.3.4-cp314-cp314t-win32.whl", hash = "sha256:863e3b5f4d9915aaf1b8ec79ae560ad21f0b8d5e3adc31e73126491bb86dee1d", size = 6485782 }, + { url = "https://files.pythonhosted.org/packages/17/90/28fa6f9865181cb817c2471ee65678afa8a7e2a1fb16141473d5fa6bacc3/numpy-2.3.4-cp314-cp314t-win_amd64.whl", hash = "sha256:962064de37b9aef801d33bc579690f8bfe6c5e70e29b61783f60bcba838a14d6", size = 13113301 }, + { url = "https://files.pythonhosted.org/packages/54/23/08c002201a8e7e1f9afba93b97deceb813252d9cfd0d3351caed123dcf97/numpy-2.3.4-cp314-cp314t-win_arm64.whl", hash = "sha256:8b5a9a39c45d852b62693d9b3f3e0fe052541f804296ff401a72a1b60edafb29", size = 10547532 }, ] [[package]] name = "openai" -version = "2.3.0" +version = "2.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -1157,96 +1071,76 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/90/8f26554d24d63ed4f94d33c24271559863223a67e624f4d2e65ba8e48dca/openai-2.3.0.tar.gz", hash = "sha256:8d213ee5aaf91737faea2d7fc1cd608657a5367a18966372a3756ceaabfbd812", size = 589616 } +sdist = { url = "https://files.pythonhosted.org/packages/51/a2/f4023c1e0c868a6a5854955b3374f17153388aed95e835af114a17eac95b/openai-2.7.1.tar.gz", hash = "sha256:df4d4a3622b2df3475ead8eb0fbb3c27fd1c070fa2e55d778ca4f40e0186c726", size = 595933 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/5b/4be258ff072ed8ee15f6bfd8d5a1a4618aa4704b127c0c5959212ad177d6/openai-2.3.0-py3-none-any.whl", hash = "sha256:a7aa83be6f7b0ab2e4d4d7bcaf36e3d790874c0167380c5d0afd0ed99a86bd7b", size = 999768 }, + { url = "https://files.pythonhosted.org/packages/8c/74/6bfc3adc81f6c2cea4439f2a734c40e3a420703bbcdc539890096a732bbd/openai-2.7.1-py3-none-any.whl", hash = "sha256:2f2530354d94c59c614645a4662b9dab0a5b881c5cd767a8587398feac0c9021", size = 1008780 }, ] [[package]] name = "orjson" -version = "3.11.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/be/4d/8df5f83256a809c22c4d6792ce8d43bb503be0fb7a8e4da9025754b09658/orjson-3.11.3.tar.gz", hash = "sha256:1c0603b1d2ffcd43a411d64797a19556ef76958aef1c182f22dc30860152a98a", size = 5482394 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/b0/a7edab2a00cdcb2688e1c943401cb3236323e7bfd2839815c6131a3742f4/orjson-3.11.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8c752089db84333e36d754c4baf19c0e1437012242048439c7e80eb0e6426e3b", size = 238259 }, - { url = "https://files.pythonhosted.org/packages/e1/c6/ff4865a9cc398a07a83342713b5932e4dc3cb4bf4bc04e8f83dedfc0d736/orjson-3.11.3-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:9b8761b6cf04a856eb544acdd82fc594b978f12ac3602d6374a7edb9d86fd2c2", size = 127633 }, - { url = "https://files.pythonhosted.org/packages/6e/e6/e00bea2d9472f44fe8794f523e548ce0ad51eb9693cf538a753a27b8bda4/orjson-3.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b13974dc8ac6ba22feaa867fc19135a3e01a134b4f7c9c28162fed4d615008a", size = 123061 }, - { url = "https://files.pythonhosted.org/packages/54/31/9fbb78b8e1eb3ac605467cb846e1c08d0588506028b37f4ee21f978a51d4/orjson-3.11.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f83abab5bacb76d9c821fd5c07728ff224ed0e52d7a71b7b3de822f3df04e15c", size = 127956 }, - { url = "https://files.pythonhosted.org/packages/36/88/b0604c22af1eed9f98d709a96302006915cfd724a7ebd27d6dd11c22d80b/orjson-3.11.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6fbaf48a744b94091a56c62897b27c31ee2da93d826aa5b207131a1e13d4064", size = 130790 }, - { url = "https://files.pythonhosted.org/packages/0e/9d/1c1238ae9fffbfed51ba1e507731b3faaf6b846126a47e9649222b0fd06f/orjson-3.11.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc779b4f4bba2847d0d2940081a7b6f7b5877e05408ffbb74fa1faf4a136c424", size = 132385 }, - { url = "https://files.pythonhosted.org/packages/a3/b5/c06f1b090a1c875f337e21dd71943bc9d84087f7cdf8c6e9086902c34e42/orjson-3.11.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd4b909ce4c50faa2192da6bb684d9848d4510b736b0611b6ab4020ea6fd2d23", size = 135305 }, - { url = "https://files.pythonhosted.org/packages/a0/26/5f028c7d81ad2ebbf84414ba6d6c9cac03f22f5cd0d01eb40fb2d6a06b07/orjson-3.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:524b765ad888dc5518bbce12c77c2e83dee1ed6b0992c1790cc5fb49bb4b6667", size = 132875 }, - { url = "https://files.pythonhosted.org/packages/fe/d4/b8df70d9cfb56e385bf39b4e915298f9ae6c61454c8154a0f5fd7efcd42e/orjson-3.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:84fd82870b97ae3cdcea9d8746e592b6d40e1e4d4527835fc520c588d2ded04f", size = 130940 }, - { url = "https://files.pythonhosted.org/packages/da/5e/afe6a052ebc1a4741c792dd96e9f65bf3939d2094e8b356503b68d48f9f5/orjson-3.11.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fbecb9709111be913ae6879b07bafd4b0785b44c1eb5cac8ac76da048b3885a1", size = 403852 }, - { url = "https://files.pythonhosted.org/packages/f8/90/7bbabafeb2ce65915e9247f14a56b29c9334003536009ef5b122783fe67e/orjson-3.11.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9dba358d55aee552bd868de348f4736ca5a4086d9a62e2bfbbeeb5629fe8b0cc", size = 146293 }, - { url = "https://files.pythonhosted.org/packages/27/b3/2d703946447da8b093350570644a663df69448c9d9330e5f1d9cce997f20/orjson-3.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eabcf2e84f1d7105f84580e03012270c7e97ecb1fb1618bda395061b2a84a049", size = 135470 }, - { url = "https://files.pythonhosted.org/packages/38/70/b14dcfae7aff0e379b0119c8a812f8396678919c431efccc8e8a0263e4d9/orjson-3.11.3-cp312-cp312-win32.whl", hash = "sha256:3782d2c60b8116772aea8d9b7905221437fdf53e7277282e8d8b07c220f96cca", size = 136248 }, - { url = "https://files.pythonhosted.org/packages/35/b8/9e3127d65de7fff243f7f3e53f59a531bf6bb295ebe5db024c2503cc0726/orjson-3.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:79b44319268af2eaa3e315b92298de9a0067ade6e6003ddaef72f8e0bedb94f1", size = 131437 }, - { url = "https://files.pythonhosted.org/packages/51/92/a946e737d4d8a7fd84a606aba96220043dcc7d6988b9e7551f7f6d5ba5ad/orjson-3.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:0e92a4e83341ef79d835ca21b8bd13e27c859e4e9e4d7b63defc6e58462a3710", size = 125978 }, - { url = "https://files.pythonhosted.org/packages/fc/79/8932b27293ad35919571f77cb3693b5906cf14f206ef17546052a241fdf6/orjson-3.11.3-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:af40c6612fd2a4b00de648aa26d18186cd1322330bd3a3cc52f87c699e995810", size = 238127 }, - { url = "https://files.pythonhosted.org/packages/1c/82/cb93cd8cf132cd7643b30b6c5a56a26c4e780c7a145db6f83de977b540ce/orjson-3.11.3-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:9f1587f26c235894c09e8b5b7636a38091a9e6e7fe4531937534749c04face43", size = 127494 }, - { url = "https://files.pythonhosted.org/packages/a4/b8/2d9eb181a9b6bb71463a78882bcac1027fd29cf62c38a40cc02fc11d3495/orjson-3.11.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61dcdad16da5bb486d7227a37a2e789c429397793a6955227cedbd7252eb5a27", size = 123017 }, - { url = "https://files.pythonhosted.org/packages/b4/14/a0e971e72d03b509190232356d54c0f34507a05050bd026b8db2bf2c192c/orjson-3.11.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11c6d71478e2cbea0a709e8a06365fa63da81da6498a53e4c4f065881d21ae8f", size = 127898 }, - { url = "https://files.pythonhosted.org/packages/8e/af/dc74536722b03d65e17042cc30ae586161093e5b1f29bccda24765a6ae47/orjson-3.11.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff94112e0098470b665cb0ed06efb187154b63649403b8d5e9aedeb482b4548c", size = 130742 }, - { url = "https://files.pythonhosted.org/packages/62/e6/7a3b63b6677bce089fe939353cda24a7679825c43a24e49f757805fc0d8a/orjson-3.11.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae8b756575aaa2a855a75192f356bbda11a89169830e1439cfb1a3e1a6dde7be", size = 132377 }, - { url = "https://files.pythonhosted.org/packages/fc/cd/ce2ab93e2e7eaf518f0fd15e3068b8c43216c8a44ed82ac2b79ce5cef72d/orjson-3.11.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9416cc19a349c167ef76135b2fe40d03cea93680428efee8771f3e9fb66079d", size = 135313 }, - { url = "https://files.pythonhosted.org/packages/d0/b4/f98355eff0bd1a38454209bbc73372ce351ba29933cb3e2eba16c04b9448/orjson-3.11.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b822caf5b9752bc6f246eb08124c3d12bf2175b66ab74bac2ef3bbf9221ce1b2", size = 132908 }, - { url = "https://files.pythonhosted.org/packages/eb/92/8f5182d7bc2a1bed46ed960b61a39af8389f0ad476120cd99e67182bfb6d/orjson-3.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:414f71e3bdd5573893bf5ecdf35c32b213ed20aa15536fe2f588f946c318824f", size = 130905 }, - { url = "https://files.pythonhosted.org/packages/1a/60/c41ca753ce9ffe3d0f67b9b4c093bdd6e5fdb1bc53064f992f66bb99954d/orjson-3.11.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:828e3149ad8815dc14468f36ab2a4b819237c155ee1370341b91ea4c8672d2ee", size = 403812 }, - { url = "https://files.pythonhosted.org/packages/dd/13/e4a4f16d71ce1868860db59092e78782c67082a8f1dc06a3788aef2b41bc/orjson-3.11.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac9e05f25627ffc714c21f8dfe3a579445a5c392a9c8ae7ba1d0e9fb5333f56e", size = 146277 }, - { url = "https://files.pythonhosted.org/packages/8d/8b/bafb7f0afef9344754a3a0597a12442f1b85a048b82108ef2c956f53babd/orjson-3.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e44fbe4000bd321d9f3b648ae46e0196d21577cf66ae684a96ff90b1f7c93633", size = 135418 }, - { url = "https://files.pythonhosted.org/packages/60/d4/bae8e4f26afb2c23bea69d2f6d566132584d1c3a5fe89ee8c17b718cab67/orjson-3.11.3-cp313-cp313-win32.whl", hash = "sha256:2039b7847ba3eec1f5886e75e6763a16e18c68a63efc4b029ddf994821e2e66b", size = 136216 }, - { url = "https://files.pythonhosted.org/packages/88/76/224985d9f127e121c8cad882cea55f0ebe39f97925de040b75ccd4b33999/orjson-3.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:29be5ac4164aa8bdcba5fa0700a3c9c316b411d8ed9d39ef8a882541bd452fae", size = 131362 }, - { url = "https://files.pythonhosted.org/packages/e2/cf/0dce7a0be94bd36d1346be5067ed65ded6adb795fdbe3abd234c8d576d01/orjson-3.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:18bd1435cb1f2857ceb59cfb7de6f92593ef7b831ccd1b9bfb28ca530e539dce", size = 125989 }, - { url = "https://files.pythonhosted.org/packages/ef/77/d3b1fef1fc6aaeed4cbf3be2b480114035f4df8fa1a99d2dac1d40d6e924/orjson-3.11.3-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:cf4b81227ec86935568c7edd78352a92e97af8da7bd70bdfdaa0d2e0011a1ab4", size = 238115 }, - { url = "https://files.pythonhosted.org/packages/e4/6d/468d21d49bb12f900052edcfbf52c292022d0a323d7828dc6376e6319703/orjson-3.11.3-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:bc8bc85b81b6ac9fc4dae393a8c159b817f4c2c9dee5d12b773bddb3b95fc07e", size = 127493 }, - { url = "https://files.pythonhosted.org/packages/67/46/1e2588700d354aacdf9e12cc2d98131fb8ac6f31ca65997bef3863edb8ff/orjson-3.11.3-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:88dcfc514cfd1b0de038443c7b3e6a9797ffb1b3674ef1fd14f701a13397f82d", size = 122998 }, - { url = "https://files.pythonhosted.org/packages/3b/94/11137c9b6adb3779f1b34fd98be51608a14b430dbc02c6d41134fbba484c/orjson-3.11.3-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:d61cd543d69715d5fc0a690c7c6f8dcc307bc23abef9738957981885f5f38229", size = 132915 }, - { url = "https://files.pythonhosted.org/packages/10/61/dccedcf9e9bcaac09fdabe9eaee0311ca92115699500efbd31950d878833/orjson-3.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2b7b153ed90ababadbef5c3eb39549f9476890d339cf47af563aea7e07db2451", size = 130907 }, - { url = "https://files.pythonhosted.org/packages/0e/fd/0e935539aa7b08b3ca0f817d73034f7eb506792aae5ecc3b7c6e679cdf5f/orjson-3.11.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7909ae2460f5f494fecbcd10613beafe40381fd0316e35d6acb5f3a05bfda167", size = 403852 }, - { url = "https://files.pythonhosted.org/packages/4a/2b/50ae1a5505cd1043379132fdb2adb8a05f37b3e1ebffe94a5073321966fd/orjson-3.11.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2030c01cbf77bc67bee7eef1e7e31ecf28649353987775e3583062c752da0077", size = 146309 }, - { url = "https://files.pythonhosted.org/packages/cd/1d/a473c158e380ef6f32753b5f39a69028b25ec5be331c2049a2201bde2e19/orjson-3.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0169ebd1cbd94b26c7a7ad282cf5c2744fce054133f959e02eb5265deae1872", size = 135424 }, - { url = "https://files.pythonhosted.org/packages/da/09/17d9d2b60592890ff7382e591aa1d9afb202a266b180c3d4049b1ec70e4a/orjson-3.11.3-cp314-cp314-win32.whl", hash = "sha256:0c6d7328c200c349e3a4c6d8c83e0a5ad029bdc2d417f234152bf34842d0fc8d", size = 136266 }, - { url = "https://files.pythonhosted.org/packages/15/58/358f6846410a6b4958b74734727e582ed971e13d335d6c7ce3e47730493e/orjson-3.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:317bbe2c069bbc757b1a2e4105b64aacd3bc78279b66a6b9e51e846e4809f804", size = 131351 }, - { url = "https://files.pythonhosted.org/packages/28/01/d6b274a0635be0468d4dbd9cafe80c47105937a0d42434e805e67cd2ed8b/orjson-3.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:e8f6a7a27d7b7bec81bd5924163e9af03d49bbb63013f107b48eb5d16db711bc", size = 125985 }, +version = "3.11.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/fe/ed708782d6709cc60eb4c2d8a361a440661f74134675c72990f2c48c785f/orjson-3.11.4.tar.gz", hash = "sha256:39485f4ab4c9b30a3943cfe99e1a213c4776fb69e8abd68f66b83d5a0b0fdc6d", size = 5945188 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/15/c52aa7112006b0f3d6180386c3a46ae057f932ab3425bc6f6ac50431cca1/orjson-3.11.4-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2d6737d0e616a6e053c8b4acc9eccea6b6cce078533666f32d140e4f85002534", size = 243525 }, + { url = "https://files.pythonhosted.org/packages/ec/38/05340734c33b933fd114f161f25a04e651b0c7c33ab95e9416ade5cb44b8/orjson-3.11.4-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:afb14052690aa328cc118a8e09f07c651d301a72e44920b887c519b313d892ff", size = 128871 }, + { url = "https://files.pythonhosted.org/packages/55/b9/ae8d34899ff0c012039b5a7cb96a389b2476e917733294e498586b45472d/orjson-3.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38aa9e65c591febb1b0aed8da4d469eba239d434c218562df179885c94e1a3ad", size = 130055 }, + { url = "https://files.pythonhosted.org/packages/33/aa/6346dd5073730451bee3681d901e3c337e7ec17342fb79659ec9794fc023/orjson-3.11.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f2cf4dfaf9163b0728d061bebc1e08631875c51cd30bf47cb9e3293bfbd7dcd5", size = 129061 }, + { url = "https://files.pythonhosted.org/packages/39/e4/8eea51598f66a6c853c380979912d17ec510e8e66b280d968602e680b942/orjson-3.11.4-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:89216ff3dfdde0e4070932e126320a1752c9d9a758d6a32ec54b3b9334991a6a", size = 136541 }, + { url = "https://files.pythonhosted.org/packages/9a/47/cb8c654fa9adcc60e99580e17c32b9e633290e6239a99efa6b885aba9dbc/orjson-3.11.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9daa26ca8e97fae0ce8aa5d80606ef8f7914e9b129b6b5df9104266f764ce436", size = 137535 }, + { url = "https://files.pythonhosted.org/packages/43/92/04b8cc5c2b729f3437ee013ce14a60ab3d3001465d95c184758f19362f23/orjson-3.11.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c8b2769dc31883c44a9cd126560327767f848eb95f99c36c9932f51090bfce9", size = 136703 }, + { url = "https://files.pythonhosted.org/packages/aa/fd/d0733fcb9086b8be4ebcfcda2d0312865d17d0d9884378b7cffb29d0763f/orjson-3.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1469d254b9884f984026bd9b0fa5bbab477a4bfe558bba6848086f6d43eb5e73", size = 136293 }, + { url = "https://files.pythonhosted.org/packages/c2/d7/3c5514e806837c210492d72ae30ccf050ce3f940f45bf085bab272699ef4/orjson-3.11.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:68e44722541983614e37117209a194e8c3ad07838ccb3127d96863c95ec7f1e0", size = 140131 }, + { url = "https://files.pythonhosted.org/packages/9c/dd/ba9d32a53207babf65bd510ac4d0faaa818bd0df9a9c6f472fe7c254f2e3/orjson-3.11.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8e7805fda9672c12be2f22ae124dcd7b03928d6c197544fe12174b86553f3196", size = 406164 }, + { url = "https://files.pythonhosted.org/packages/8e/f9/f68ad68f4af7c7bde57cd514eaa2c785e500477a8bc8f834838eb696a685/orjson-3.11.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:04b69c14615fb4434ab867bf6f38b2d649f6f300af30a6705397e895f7aec67a", size = 149859 }, + { url = "https://files.pythonhosted.org/packages/b6/d2/7f847761d0c26818395b3d6b21fb6bc2305d94612a35b0a30eae65a22728/orjson-3.11.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:639c3735b8ae7f970066930e58cf0ed39a852d417c24acd4a25fc0b3da3c39a6", size = 139926 }, + { url = "https://files.pythonhosted.org/packages/9f/37/acd14b12dc62db9a0e1d12386271b8661faae270b22492580d5258808975/orjson-3.11.4-cp313-cp313-win32.whl", hash = "sha256:6c13879c0d2964335491463302a6ca5ad98105fc5db3565499dcb80b1b4bd839", size = 136007 }, + { url = "https://files.pythonhosted.org/packages/c0/a9/967be009ddf0a1fffd7a67de9c36656b28c763659ef91352acc02cbe364c/orjson-3.11.4-cp313-cp313-win_amd64.whl", hash = "sha256:09bf242a4af98732db9f9a1ec57ca2604848e16f132e3f72edfd3c5c96de009a", size = 131314 }, + { url = "https://files.pythonhosted.org/packages/cb/db/399abd6950fbd94ce125cb8cd1a968def95174792e127b0642781e040ed4/orjson-3.11.4-cp313-cp313-win_arm64.whl", hash = "sha256:a85f0adf63319d6c1ba06fb0dbf997fced64a01179cf17939a6caca662bf92de", size = 126152 }, + { url = "https://files.pythonhosted.org/packages/25/e3/54ff63c093cc1697e758e4fceb53164dd2661a7d1bcd522260ba09f54533/orjson-3.11.4-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:42d43a1f552be1a112af0b21c10a5f553983c2a0938d2bbb8ecd8bc9fb572803", size = 243501 }, + { url = "https://files.pythonhosted.org/packages/ac/7d/e2d1076ed2e8e0ae9badca65bf7ef22710f93887b29eaa37f09850604e09/orjson-3.11.4-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:26a20f3fbc6c7ff2cb8e89c4c5897762c9d88cf37330c6a117312365d6781d54", size = 128862 }, + { url = "https://files.pythonhosted.org/packages/9f/37/ca2eb40b90621faddfa9517dfe96e25f5ae4d8057a7c0cdd613c17e07b2c/orjson-3.11.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e3f20be9048941c7ffa8fc523ccbd17f82e24df1549d1d1fe9317712d19938e", size = 130047 }, + { url = "https://files.pythonhosted.org/packages/c7/62/1021ed35a1f2bad9040f05fa4cc4f9893410df0ba3eaa323ccf899b1c90a/orjson-3.11.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aac364c758dc87a52e68e349924d7e4ded348dedff553889e4d9f22f74785316", size = 129073 }, + { url = "https://files.pythonhosted.org/packages/e8/3f/f84d966ec2a6fd5f73b1a707e7cd876813422ae4bf9f0145c55c9c6a0f57/orjson-3.11.4-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5c54a6d76e3d741dcc3f2707f8eeb9ba2a791d3adbf18f900219b62942803b1", size = 136597 }, + { url = "https://files.pythonhosted.org/packages/32/78/4fa0aeca65ee82bbabb49e055bd03fa4edea33f7c080c5c7b9601661ef72/orjson-3.11.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f28485bdca8617b79d44627f5fb04336897041dfd9fa66d383a49d09d86798bc", size = 137515 }, + { url = "https://files.pythonhosted.org/packages/c1/9d/0c102e26e7fde40c4c98470796d050a2ec1953897e2c8ab0cb95b0759fa2/orjson-3.11.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfc2a484cad3585e4ba61985a6062a4c2ed5c7925db6d39f1fa267c9d166487f", size = 136703 }, + { url = "https://files.pythonhosted.org/packages/df/ac/2de7188705b4cdfaf0b6c97d2f7849c17d2003232f6e70df98602173f788/orjson-3.11.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e34dbd508cb91c54f9c9788923daca129fe5b55c5b4eebe713bf5ed3791280cf", size = 136311 }, + { url = "https://files.pythonhosted.org/packages/e0/52/847fcd1a98407154e944feeb12e3b4d487a0e264c40191fb44d1269cbaa1/orjson-3.11.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b13c478fa413d4b4ee606ec8e11c3b2e52683a640b006bb586b3041c2ca5f606", size = 140127 }, + { url = "https://files.pythonhosted.org/packages/c1/ae/21d208f58bdb847dd4d0d9407e2929862561841baa22bdab7aea10ca088e/orjson-3.11.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:724ca721ecc8a831b319dcd72cfa370cc380db0bf94537f08f7edd0a7d4e1780", size = 406201 }, + { url = "https://files.pythonhosted.org/packages/8d/55/0789d6de386c8366059db098a628e2ad8798069e94409b0d8935934cbcb9/orjson-3.11.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:977c393f2e44845ce1b540e19a786e9643221b3323dae190668a98672d43fb23", size = 149872 }, + { url = "https://files.pythonhosted.org/packages/cc/1d/7ff81ea23310e086c17b41d78a72270d9de04481e6113dbe2ac19118f7fb/orjson-3.11.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1e539e382cf46edec157ad66b0b0872a90d829a6b71f17cb633d6c160a223155", size = 139931 }, + { url = "https://files.pythonhosted.org/packages/77/92/25b886252c50ed64be68c937b562b2f2333b45afe72d53d719e46a565a50/orjson-3.11.4-cp314-cp314-win32.whl", hash = "sha256:d63076d625babab9db5e7836118bdfa086e60f37d8a174194ae720161eb12394", size = 136065 }, + { url = "https://files.pythonhosted.org/packages/63/b8/718eecf0bb7e9d64e4956afaafd23db9f04c776d445f59fe94f54bdae8f0/orjson-3.11.4-cp314-cp314-win_amd64.whl", hash = "sha256:0a54d6635fa3aaa438ae32e8570b9f0de36f3f6562c308d2a2a452e8b0592db1", size = 131310 }, + { url = "https://files.pythonhosted.org/packages/1a/bf/def5e25d4d8bfce296a9a7c8248109bf58622c21618b590678f945a2c59c/orjson-3.11.4-cp314-cp314-win_arm64.whl", hash = "sha256:78b999999039db3cf58f6d230f524f04f75f129ba3d1ca2ed121f8657e575d3d", size = 126151 }, ] [[package]] name = "ormsgpack" -version = "1.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/f8/224c342c0e03e131aaa1a1f19aa2244e167001783a433f4eed10eedd834b/ormsgpack-1.11.0.tar.gz", hash = "sha256:7c9988e78fedba3292541eb3bb274fa63044ef4da2ddb47259ea70c05dee4206", size = 49357 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/16/2805ebfb3d2cbb6c661b5fae053960fc90a2611d0d93e2207e753e836117/ormsgpack-1.11.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3434d0c8d67de27d9010222de07fb6810fb9af3bb7372354ffa19257ac0eb83b", size = 368474 }, - { url = "https://files.pythonhosted.org/packages/6f/39/6afae47822dca0ce4465d894c0bbb860a850ce29c157882dbdf77a5dd26e/ormsgpack-1.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2da5bd097e8dbfa4eb0d4ccfe79acd6f538dee4493579e2debfe4fc8f4ca89b", size = 195321 }, - { url = "https://files.pythonhosted.org/packages/f6/54/11eda6b59f696d2f16de469bfbe539c9f469c4b9eef5a513996b5879c6e9/ormsgpack-1.11.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fdbaa0a5a8606a486960b60c24f2d5235d30ac7a8b98eeaea9854bffef14dc3d", size = 206036 }, - { url = "https://files.pythonhosted.org/packages/1e/86/890430f704f84c4699ddad61c595d171ea2fd77a51fbc106f83981e83939/ormsgpack-1.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3682f24f800c1837017ee90ce321086b2cbaef88db7d4cdbbda1582aa6508159", size = 207615 }, - { url = "https://files.pythonhosted.org/packages/b6/b9/77383e16c991c0ecb772205b966fc68d9c519e0b5f9c3913283cbed30ffe/ormsgpack-1.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fcca21202bb05ccbf3e0e92f560ee59b9331182e4c09c965a28155efbb134993", size = 377195 }, - { url = "https://files.pythonhosted.org/packages/20/e2/15f9f045d4947f3c8a5e0535259fddf027b17b1215367488b3565c573b9d/ormsgpack-1.11.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c30e5c4655ba46152d722ec7468e8302195e6db362ec1ae2c206bc64f6030e43", size = 470960 }, - { url = "https://files.pythonhosted.org/packages/b8/61/403ce188c4c495bc99dff921a0ad3d9d352dd6d3c4b629f3638b7f0cf79b/ormsgpack-1.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7138a341f9e2c08c59368f03d3be25e8b87b3baaf10d30fb1f6f6b52f3d47944", size = 381174 }, - { url = "https://files.pythonhosted.org/packages/14/a8/94c94bc48c68da4374870a851eea03fc5a45eb041182ad4c5ed9acfc05a4/ormsgpack-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:d4bd8589b78a11026d47f4edf13c1ceab9088bb12451f34396afe6497db28a27", size = 112314 }, - { url = "https://files.pythonhosted.org/packages/19/d0/aa4cf04f04e4cc180ce7a8d8ddb5a7f3af883329cbc59645d94d3ba157a5/ormsgpack-1.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:e5e746a1223e70f111d4001dab9585ac8639eee8979ca0c8db37f646bf2961da", size = 106072 }, - { url = "https://files.pythonhosted.org/packages/8b/35/e34722edb701d053cf2240f55974f17b7dbfd11fdef72bd2f1835bcebf26/ormsgpack-1.11.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0e7b36ab7b45cb95217ae1f05f1318b14a3e5ef73cb00804c0f06233f81a14e8", size = 368502 }, - { url = "https://files.pythonhosted.org/packages/2f/6a/c2fc369a79d6aba2aa28c8763856c95337ac7fcc0b2742185cd19397212a/ormsgpack-1.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43402d67e03a9a35cc147c8c03f0c377cad016624479e1ee5b879b8425551484", size = 195344 }, - { url = "https://files.pythonhosted.org/packages/8b/6a/0f8e24b7489885534c1a93bdba7c7c434b9b8638713a68098867db9f254c/ormsgpack-1.11.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:64fd992f932764d6306b70ddc755c1bc3405c4c6a69f77a36acf7af1c8f5ada4", size = 206045 }, - { url = "https://files.pythonhosted.org/packages/99/71/8b460ba264f3c6f82ef5b1920335720094e2bd943057964ce5287d6df83a/ormsgpack-1.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0362fb7fe4a29c046c8ea799303079a09372653a1ce5a5a588f3bbb8088368d0", size = 207641 }, - { url = "https://files.pythonhosted.org/packages/50/cf/f369446abaf65972424ed2651f2df2b7b5c3b735c93fc7fa6cfb81e34419/ormsgpack-1.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:de2f7a65a9d178ed57be49eba3d0fc9b833c32beaa19dbd4ba56014d3c20b152", size = 377211 }, - { url = "https://files.pythonhosted.org/packages/2f/3f/948bb0047ce0f37c2efc3b9bb2bcfdccc61c63e0b9ce8088d4903ba39dcf/ormsgpack-1.11.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:f38cfae95461466055af966fc922d06db4e1654966385cda2828653096db34da", size = 470973 }, - { url = "https://files.pythonhosted.org/packages/31/a4/92a8114d1d017c14aaa403445060f345df9130ca532d538094f38e535988/ormsgpack-1.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c88396189d238f183cea7831b07a305ab5c90d6d29b53288ae11200bd956357b", size = 381161 }, - { url = "https://files.pythonhosted.org/packages/d0/64/5b76447da654798bfcfdfd64ea29447ff2b7f33fe19d0e911a83ad5107fc/ormsgpack-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:5403d1a945dd7c81044cebeca3f00a28a0f4248b33242a5d2d82111628043725", size = 112321 }, - { url = "https://files.pythonhosted.org/packages/46/5e/89900d06db9ab81e7ec1fd56a07c62dfbdcda398c435718f4252e1dc52a0/ormsgpack-1.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c57357b8d43b49722b876edf317bdad9e6d52071b523fdd7394c30cd1c67d5a0", size = 106084 }, - { url = "https://files.pythonhosted.org/packages/4c/0b/c659e8657085c8c13f6a0224789f422620cef506e26573b5434defe68483/ormsgpack-1.11.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:d390907d90fd0c908211592c485054d7a80990697ef4dff4e436ac18e1aab98a", size = 368497 }, - { url = "https://files.pythonhosted.org/packages/1b/0e/451e5848c7ed56bd287e8a2b5cb5926e54466f60936e05aec6cb299f9143/ormsgpack-1.11.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6153c2e92e789509098e04c9aa116b16673bd88ec78fbe0031deeb34ab642d10", size = 195385 }, - { url = "https://files.pythonhosted.org/packages/4c/28/90f78cbbe494959f2439c2ec571f08cd3464c05a6a380b0d621c622122a9/ormsgpack-1.11.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2b2c2a065a94d742212b2018e1fecd8f8d72f3c50b53a97d1f407418093446d", size = 206114 }, - { url = "https://files.pythonhosted.org/packages/fb/db/34163f4c0923bea32dafe42cd878dcc66795a3e85669bc4b01c1e2b92a7b/ormsgpack-1.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:110e65b5340f3d7ef8b0009deae3c6b169437e6b43ad5a57fd1748085d29d2ac", size = 207679 }, - { url = "https://files.pythonhosted.org/packages/b6/14/04ee741249b16f380a9b4a0cc19d4134d0b7c74bab27a2117da09e525eb9/ormsgpack-1.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c27e186fca96ab34662723e65b420919910acbbc50fc8e1a44e08f26268cb0e0", size = 377237 }, - { url = "https://files.pythonhosted.org/packages/89/ff/53e588a6aaa833237471caec679582c2950f0e7e1a8ba28c1511b465c1f4/ormsgpack-1.11.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d56b1f877c13d499052d37a3db2378a97d5e1588d264f5040b3412aee23d742c", size = 471021 }, - { url = "https://files.pythonhosted.org/packages/a6/f9/f20a6d9ef2be04da3aad05e8f5699957e9a30c6d5c043a10a296afa7e890/ormsgpack-1.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c88e28cd567c0a3269f624b4ade28142d5e502c8e826115093c572007af5be0a", size = 381205 }, - { url = "https://files.pythonhosted.org/packages/f8/64/96c07d084b479ac8b7821a77ffc8d3f29d8b5c95ebfdf8db1c03dff02762/ormsgpack-1.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:8811160573dc0a65f62f7e0792c4ca6b7108dfa50771edb93f9b84e2d45a08ae", size = 112374 }, - { url = "https://files.pythonhosted.org/packages/88/a5/5dcc18b818d50213a3cadfe336bb6163a102677d9ce87f3d2f1a1bee0f8c/ormsgpack-1.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:23e30a8d3c17484cf74e75e6134322255bd08bc2b5b295cc9c442f4bae5f3c2d", size = 106056 }, - { url = "https://files.pythonhosted.org/packages/19/2b/776d1b411d2be50f77a6e6e94a25825cca55dcacfe7415fd691a144db71b/ormsgpack-1.11.0-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2905816502adfaf8386a01dd85f936cd378d243f4f5ee2ff46f67f6298dc90d5", size = 368661 }, - { url = "https://files.pythonhosted.org/packages/a9/0c/81a19e6115b15764db3d241788f9fac093122878aaabf872cc545b0c4650/ormsgpack-1.11.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c04402fb9a0a9b9f18fbafd6d5f8398ee99b3ec619fb63952d3a954bc9d47daa", size = 195539 }, - { url = "https://files.pythonhosted.org/packages/97/86/e5b50247a61caec5718122feb2719ea9d451d30ac0516c288c1dbc6408e8/ormsgpack-1.11.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a025ec07ac52056ecfd9e57b5cbc6fff163f62cb9805012b56cda599157f8ef2", size = 207718 }, +version = "1.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/67/d5ef41c3b4a94400be801984ef7c7fc9623e1a82b643e74eeec367e7462b/ormsgpack-1.12.0.tar.gz", hash = "sha256:94be818fdbb0285945839b88763b269987787cb2f7ef280cad5d6ec815b7e608", size = 49959 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/e8/35f11ce9313111488b26b3035e4cbe55caa27909c0b6c8b5b5cd59f9661e/ormsgpack-1.12.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:766f2f3b512d85cd375b26a8b1329b99843560b50b93d3880718e634ad4a5de5", size = 369574 }, + { url = "https://files.pythonhosted.org/packages/61/b0/77461587f412d4e598d3687bafe23455ed0f26269f44be20252eddaa624e/ormsgpack-1.12.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84b285b1f3f185aad7da45641b873b30acfd13084cf829cf668c4c6480a81583", size = 195893 }, + { url = "https://files.pythonhosted.org/packages/c6/67/e197ceb04c3b550589e5407fc9fdae10f4e2e2eba5fdac921a269e02e974/ormsgpack-1.12.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e23604fc79fe110292cb365f4c8232e64e63a34f470538be320feae3921f271b", size = 206503 }, + { url = "https://files.pythonhosted.org/packages/0b/b1/7fa8ba82a25cef678983c7976f85edeef5014f5c26495f338258e6a3cf1c/ormsgpack-1.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc32b156c113a0fae2975051417d8d9a7a5247c34b2d7239410c46b75ce9348a", size = 208257 }, + { url = "https://files.pythonhosted.org/packages/ce/b1/759e999390000d2589e6d0797f7265e6ec28378547075d28d3736248ab63/ormsgpack-1.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:94ac500dd10c20fa8b8a23bc55606250bfe711bf9716828d9f3d44dfd1f25668", size = 377852 }, + { url = "https://files.pythonhosted.org/packages/51/e7/0af737c94272494d9d84a3c29cc42c973ef7fd2342917020906596db863c/ormsgpack-1.12.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c5201ff7ec24f721f813a182885a17064cffdbe46b2412685a52e6374a872c8f", size = 471456 }, + { url = "https://files.pythonhosted.org/packages/f4/ba/c81f0aa4f19fbf457213395945b672e6fde3ce777e3587456e7f0fca2147/ormsgpack-1.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a9740bb3839c9368aacae1cbcfc474ee6976458f41cc135372b7255d5206c953", size = 381813 }, + { url = "https://files.pythonhosted.org/packages/ce/15/429c72d64323503fd42cc4ca8398930ded8aa8b3470df8a86b3bbae7a35c/ormsgpack-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:8ed37f29772432048b58174e920a1d4c4cde0404a5d448d3d8bbcc95d86a6918", size = 112949 }, + { url = "https://files.pythonhosted.org/packages/55/b9/e72c451a40f8c57bfc229e0b8e536ecea7203c8f0a839676df2ffb605c62/ormsgpack-1.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:b03994bbec5d6d42e03d6604e327863f885bde67aa61e06107ce1fa5bdd3e71d", size = 106689 }, + { url = "https://files.pythonhosted.org/packages/13/16/13eab1a75da531b359105fdee90dda0b6bd1ca0a09880250cf91d8bdfdea/ormsgpack-1.12.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0f3981ba3cba80656012090337e548e597799e14b41e3d0b595ab5ab05a23d7f", size = 369620 }, + { url = "https://files.pythonhosted.org/packages/a0/c1/cbcc38b7af4ce58d8893e56d3595c0c8dcd117093bf048f889cf351bdba0/ormsgpack-1.12.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:901f6f55184d6776dbd5183cbce14caf05bf7f467eef52faf9b094686980bf71", size = 195925 }, + { url = "https://files.pythonhosted.org/packages/5c/59/4fa4dc0681490e12b75333440a1c0fd9741b0ebff272b1db4a29d35c2021/ormsgpack-1.12.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e13b15412571422b711b40f45e3fe6d993ea3314b5e97d1a853fe99226c5effc", size = 206594 }, + { url = "https://files.pythonhosted.org/packages/39/67/249770896bc32bb91b22c30256961f935d0915cbcf6e289a7fc961d9b14c/ormsgpack-1.12.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91fa8a452553a62e5fb3fbab471e7faf7b3bec3c87a2f355ebf3d7aab290fe4f", size = 208307 }, + { url = "https://files.pythonhosted.org/packages/07/0a/e041a248cd72f2f4c07e155913e0a3ede4c86cf21a40ae6cd79f135f2847/ormsgpack-1.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:74ec101f69624695eec4ce7c953192d97748254abe78fb01b591f06d529e1952", size = 377844 }, + { url = "https://files.pythonhosted.org/packages/d8/71/6f7773e4ffda73a358ce4bba69b3e8bee9d40a7a06315e4c1cd7a3ea9d02/ormsgpack-1.12.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9bbf7896580848326c1f9bd7531f264e561f98db7e08e15aa75963d83832c717", size = 471572 }, + { url = "https://files.pythonhosted.org/packages/65/29/af6769a4289c07acc71e7bda1d64fb31800563147d73142686e185e82348/ormsgpack-1.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7567917da613b8f8d591c1674e411fd3404bea41ef2b9a0e0a1e049c0f9406d7", size = 381842 }, + { url = "https://files.pythonhosted.org/packages/0b/dd/0a86195ee7a1a96c088aefc8504385e881cf56f4563ed81bafe21cbf1fb0/ormsgpack-1.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e418256c5d8622b8bc92861936f7c6a0131355e7bcad88a42102ae8227f8a1c", size = 113008 }, + { url = "https://files.pythonhosted.org/packages/4c/57/fafc79e32f3087f6f26f509d80b8167516326bfea38d30502627c01617e0/ormsgpack-1.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:433ace29aa02713554f714c62a4e4dcad0c9e32674ba4f66742c91a4c3b1b969", size = 106648 }, + { url = "https://files.pythonhosted.org/packages/b3/cf/5d58d9b132128d2fe5d586355dde76af386554abef00d608f66b913bff1f/ormsgpack-1.12.0-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:e57164be4ca34b64e210ec515059193280ac84df4d6f31a6fcbfb2fc8436de55", size = 369803 }, + { url = "https://files.pythonhosted.org/packages/67/42/968a2da361eaff2e4cbb17c82c7599787babf16684110ad70409646cc1e4/ormsgpack-1.12.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:904f96289deaa92fc6440b122edc27c5bdc28234edd63717f6d853d88c823a83", size = 195991 }, + { url = "https://files.pythonhosted.org/packages/03/f0/9696c6c6cf8ad35170f0be8d0ef3523cc258083535f6c8071cb8235ebb8b/ormsgpack-1.12.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b291d086e524a1062d57d1b7b5a8bcaaf29caebf0212fec12fd86240bd33633", size = 208316 }, ] [[package]] @@ -1264,21 +1158,6 @@ version = "0.4.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061 }, - { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037 }, - { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324 }, - { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505 }, - { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242 }, - { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474 }, - { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575 }, - { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736 }, - { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019 }, - { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376 }, - { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988 }, - { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615 }, - { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066 }, - { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655 }, - { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789 }, { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750 }, { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780 }, { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308 }, @@ -1356,16 +1235,17 @@ wheels = [ [[package]] name = "protobuf" -version = "6.32.1" +version = "6.33.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fa/a4/cc17347aa2897568beece2e674674359f911d6fe21b0b8d6268cd42727ac/protobuf-6.32.1.tar.gz", hash = "sha256:ee2469e4a021474ab9baafea6cd070e5bf27c7d29433504ddea1a4ee5850f68d", size = 440635 } +sdist = { url = "https://files.pythonhosted.org/packages/19/ff/64a6c8f420818bb873713988ca5492cba3a7946be57e027ac63495157d97/protobuf-6.33.0.tar.gz", hash = "sha256:140303d5c8d2037730c548f8c7b93b20bb1dc301be280c378b82b8894589c954", size = 443463 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/98/645183ea03ab3995d29086b8bf4f7562ebd3d10c9a4b14ee3f20d47cfe50/protobuf-6.32.1-cp310-abi3-win32.whl", hash = "sha256:a8a32a84bc9f2aad712041b8b366190f71dde248926da517bde9e832e4412085", size = 424411 }, - { url = "https://files.pythonhosted.org/packages/8c/f3/6f58f841f6ebafe076cebeae33fc336e900619d34b1c93e4b5c97a81fdfa/protobuf-6.32.1-cp310-abi3-win_amd64.whl", hash = "sha256:b00a7d8c25fa471f16bc8153d0e53d6c9e827f0953f3c09aaa4331c718cae5e1", size = 435738 }, - { url = "https://files.pythonhosted.org/packages/10/56/a8a3f4e7190837139e68c7002ec749190a163af3e330f65d90309145a210/protobuf-6.32.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d8c7e6eb619ffdf105ee4ab76af5a68b60a9d0f66da3ea12d1640e6d8dab7281", size = 426454 }, - { url = "https://files.pythonhosted.org/packages/3f/be/8dd0a927c559b37d7a6c8ab79034fd167dcc1f851595f2e641ad62be8643/protobuf-6.32.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:2f5b80a49e1eb7b86d85fcd23fe92df154b9730a725c3b38c4e43b9d77018bf4", size = 322874 }, - { url = "https://files.pythonhosted.org/packages/5c/f6/88d77011b605ef979aace37b7703e4eefad066f7e84d935e5a696515c2dd/protobuf-6.32.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:b1864818300c297265c83a4982fd3169f97122c299f56a56e2445c3698d34710", size = 322013 }, - { url = "https://files.pythonhosted.org/packages/97/b7/15cc7d93443d6c6a84626ae3258a91f4c6ac8c0edd5df35ea7658f71b79c/protobuf-6.32.1-py3-none-any.whl", hash = "sha256:2601b779fc7d32a866c6b4404f9d42a3f67c5b9f3f15b4db3cccabe06b95c346", size = 169289 }, + { url = "https://files.pythonhosted.org/packages/7e/ee/52b3fa8feb6db4a833dfea4943e175ce645144532e8a90f72571ad85df4e/protobuf-6.33.0-cp310-abi3-win32.whl", hash = "sha256:d6101ded078042a8f17959eccd9236fb7a9ca20d3b0098bbcb91533a5680d035", size = 425593 }, + { url = "https://files.pythonhosted.org/packages/7b/c6/7a465f1825872c55e0341ff4a80198743f73b69ce5d43ab18043699d1d81/protobuf-6.33.0-cp310-abi3-win_amd64.whl", hash = "sha256:9a031d10f703f03768f2743a1c403af050b6ae1f3480e9c140f39c45f81b13ee", size = 436882 }, + { url = "https://files.pythonhosted.org/packages/e1/a9/b6eee662a6951b9c3640e8e452ab3e09f117d99fc10baa32d1581a0d4099/protobuf-6.33.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:905b07a65f1a4b72412314082c7dbfae91a9e8b68a0cc1577515f8df58ecf455", size = 427521 }, + { url = "https://files.pythonhosted.org/packages/10/35/16d31e0f92c6d2f0e77c2a3ba93185130ea13053dd16200a57434c882f2b/protobuf-6.33.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e0697ece353e6239b90ee43a9231318302ad8353c70e6e45499fa52396debf90", size = 324445 }, + { url = "https://files.pythonhosted.org/packages/e6/eb/2a981a13e35cda8b75b5585aaffae2eb904f8f351bdd3870769692acbd8a/protobuf-6.33.0-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:e0a1715e4f27355afd9570f3ea369735afc853a6c3951a6afe1f80d8569ad298", size = 339159 }, + { url = "https://files.pythonhosted.org/packages/21/51/0b1cbad62074439b867b4e04cc09b93f6699d78fd191bed2bbb44562e077/protobuf-6.33.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:35be49fd3f4fefa4e6e2aacc35e8b837d6703c37a2168a55ac21e9b1bc7559ef", size = 323172 }, + { url = "https://files.pythonhosted.org/packages/07/d1/0a28c21707807c6aacd5dc9c3704b2aa1effbf37adebd8caeaf68b17a636/protobuf-6.33.0-py3-none-any.whl", hash = "sha256:25c9e1963c6734448ea2d308cfa610e692b801304ba0908d7bfa564ac5132995", size = 170477 }, ] [[package]] @@ -1391,7 +1271,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.12.2" +version = "2.12.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -1399,80 +1279,70 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8d/35/d319ed522433215526689bad428a94058b6dd12190ce7ddd78618ac14b28/pydantic-2.12.2.tar.gz", hash = "sha256:7b8fa15b831a4bbde9d5b84028641ac3080a4ca2cbd4a621a661687e741624fd", size = 816358 } +sdist = { url = "https://files.pythonhosted.org/packages/96/ad/a17bc283d7d81837c061c49e3eaa27a45991759a1b7eae1031921c6bd924/pydantic-2.12.4.tar.gz", hash = "sha256:0f8cb9555000a4b5b617f66bfd2566264c4984b27589d3b845685983e8ea85ac", size = 821038 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/98/468cb649f208a6f1279448e6e5247b37ae79cf5e4041186f1e2ef3d16345/pydantic-2.12.2-py3-none-any.whl", hash = "sha256:25ff718ee909acd82f1ff9b1a4acfd781bb23ab3739adaa7144f19a6a4e231ae", size = 460628 }, + { url = "https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl", hash = "sha256:92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e", size = 463400 }, ] [[package]] name = "pydantic-core" -version = "2.41.4" +version = "2.41.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/18/d0944e8eaaa3efd0a91b0f1fc537d3be55ad35091b6a87638211ba691964/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5", size = 457557 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/81/d3b3e95929c4369d30b2a66a91db63c8ed0a98381ae55a45da2cd1cc1288/pydantic_core-2.41.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ab06d77e053d660a6faaf04894446df7b0a7e7aba70c2797465a0a1af00fc887", size = 2099043 }, - { url = "https://files.pythonhosted.org/packages/58/da/46fdac49e6717e3a94fc9201403e08d9d61aa7a770fab6190b8740749047/pydantic_core-2.41.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c53ff33e603a9c1179a9364b0a24694f183717b2e0da2b5ad43c316c956901b2", size = 1910699 }, - { url = "https://files.pythonhosted.org/packages/1e/63/4d948f1b9dd8e991a5a98b77dd66c74641f5f2e5225fee37994b2e07d391/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:304c54176af2c143bd181d82e77c15c41cbacea8872a2225dd37e6544dce9999", size = 1952121 }, - { url = "https://files.pythonhosted.org/packages/b2/a7/e5fc60a6f781fc634ecaa9ecc3c20171d238794cef69ae0af79ac11b89d7/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025ba34a4cf4fb32f917d5d188ab5e702223d3ba603be4d8aca2f82bede432a4", size = 2041590 }, - { url = "https://files.pythonhosted.org/packages/70/69/dce747b1d21d59e85af433428978a1893c6f8a7068fa2bb4a927fba7a5ff/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9f5f30c402ed58f90c70e12eff65547d3ab74685ffe8283c719e6bead8ef53f", size = 2219869 }, - { url = "https://files.pythonhosted.org/packages/83/6a/c070e30e295403bf29c4df1cb781317b6a9bac7cd07b8d3acc94d501a63c/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd96e5d15385d301733113bcaa324c8bcf111275b7675a9c6e88bfb19fc05e3b", size = 2345169 }, - { url = "https://files.pythonhosted.org/packages/f0/83/06d001f8043c336baea7fd202a9ac7ad71f87e1c55d8112c50b745c40324/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f348cbb44fae6e9653c1055db7e29de67ea6a9ca03a5fa2c2e11a47cff0e47", size = 2070165 }, - { url = "https://files.pythonhosted.org/packages/14/0a/e567c2883588dd12bcbc110232d892cf385356f7c8a9910311ac997ab715/pydantic_core-2.41.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec22626a2d14620a83ca583c6f5a4080fa3155282718b6055c2ea48d3ef35970", size = 2189067 }, - { url = "https://files.pythonhosted.org/packages/f4/1d/3d9fca34273ba03c9b1c5289f7618bc4bd09c3ad2289b5420481aa051a99/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a95d4590b1f1a43bf33ca6d647b990a88f4a3824a8c4572c708f0b45a5290ed", size = 2132997 }, - { url = "https://files.pythonhosted.org/packages/52/70/d702ef7a6cd41a8afc61f3554922b3ed8d19dd54c3bd4bdbfe332e610827/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:f9672ab4d398e1b602feadcffcdd3af44d5f5e6ddc15bc7d15d376d47e8e19f8", size = 2307187 }, - { url = "https://files.pythonhosted.org/packages/68/4c/c06be6e27545d08b802127914156f38d10ca287a9e8489342793de8aae3c/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:84d8854db5f55fead3b579f04bda9a36461dab0730c5d570e1526483e7bb8431", size = 2305204 }, - { url = "https://files.pythonhosted.org/packages/b0/e5/35ae4919bcd9f18603419e23c5eaf32750224a89d41a8df1a3704b69f77e/pydantic_core-2.41.4-cp312-cp312-win32.whl", hash = "sha256:9be1c01adb2ecc4e464392c36d17f97e9110fbbc906bcbe1c943b5b87a74aabd", size = 1972536 }, - { url = "https://files.pythonhosted.org/packages/1e/c2/49c5bb6d2a49eb2ee3647a93e3dae7080c6409a8a7558b075027644e879c/pydantic_core-2.41.4-cp312-cp312-win_amd64.whl", hash = "sha256:d682cf1d22bab22a5be08539dca3d1593488a99998f9f412137bc323179067ff", size = 2031132 }, - { url = "https://files.pythonhosted.org/packages/06/23/936343dbcba6eec93f73e95eb346810fc732f71ba27967b287b66f7b7097/pydantic_core-2.41.4-cp312-cp312-win_arm64.whl", hash = "sha256:833eebfd75a26d17470b58768c1834dfc90141b7afc6eb0429c21fc5a21dcfb8", size = 1969483 }, - { url = "https://files.pythonhosted.org/packages/13/d0/c20adabd181a029a970738dfe23710b52a31f1258f591874fcdec7359845/pydantic_core-2.41.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:85e050ad9e5f6fe1004eec65c914332e52f429bc0ae12d6fa2092407a462c746", size = 2105688 }, - { url = "https://files.pythonhosted.org/packages/00/b6/0ce5c03cec5ae94cca220dfecddc453c077d71363b98a4bbdb3c0b22c783/pydantic_core-2.41.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7393f1d64792763a48924ba31d1e44c2cfbc05e3b1c2c9abb4ceeadd912cced", size = 1910807 }, - { url = "https://files.pythonhosted.org/packages/68/3e/800d3d02c8beb0b5c069c870cbb83799d085debf43499c897bb4b4aaff0d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94dab0940b0d1fb28bcab847adf887c66a27a40291eedf0b473be58761c9799a", size = 1956669 }, - { url = "https://files.pythonhosted.org/packages/60/a4/24271cc71a17f64589be49ab8bd0751f6a0a03046c690df60989f2f95c2c/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de7c42f897e689ee6f9e93c4bec72b99ae3b32a2ade1c7e4798e690ff5246e02", size = 2051629 }, - { url = "https://files.pythonhosted.org/packages/68/de/45af3ca2f175d91b96bfb62e1f2d2f1f9f3b14a734afe0bfeff079f78181/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:664b3199193262277b8b3cd1e754fb07f2c6023289c815a1e1e8fb415cb247b1", size = 2224049 }, - { url = "https://files.pythonhosted.org/packages/af/8f/ae4e1ff84672bf869d0a77af24fd78387850e9497753c432875066b5d622/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95b253b88f7d308b1c0b417c4624f44553ba4762816f94e6986819b9c273fb2", size = 2342409 }, - { url = "https://files.pythonhosted.org/packages/18/62/273dd70b0026a085c7b74b000394e1ef95719ea579c76ea2f0cc8893736d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1351f5bbdbbabc689727cb91649a00cb9ee7203e0a6e54e9f5ba9e22e384b84", size = 2069635 }, - { url = "https://files.pythonhosted.org/packages/30/03/cf485fff699b4cdaea469bc481719d3e49f023241b4abb656f8d422189fc/pydantic_core-2.41.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1affa4798520b148d7182da0615d648e752de4ab1a9566b7471bc803d88a062d", size = 2194284 }, - { url = "https://files.pythonhosted.org/packages/f9/7e/c8e713db32405dfd97211f2fc0a15d6bf8adb7640f3d18544c1f39526619/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7b74e18052fea4aa8dea2fb7dbc23d15439695da6cbe6cfc1b694af1115df09d", size = 2137566 }, - { url = "https://files.pythonhosted.org/packages/04/f7/db71fd4cdccc8b75990f79ccafbbd66757e19f6d5ee724a6252414483fb4/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:285b643d75c0e30abda9dc1077395624f314a37e3c09ca402d4015ef5979f1a2", size = 2316809 }, - { url = "https://files.pythonhosted.org/packages/76/63/a54973ddb945f1bca56742b48b144d85c9fc22f819ddeb9f861c249d5464/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f52679ff4218d713b3b33f88c89ccbf3a5c2c12ba665fb80ccc4192b4608dbab", size = 2311119 }, - { url = "https://files.pythonhosted.org/packages/f8/03/5d12891e93c19218af74843a27e32b94922195ded2386f7b55382f904d2f/pydantic_core-2.41.4-cp313-cp313-win32.whl", hash = "sha256:ecde6dedd6fff127c273c76821bb754d793be1024bc33314a120f83a3c69460c", size = 1981398 }, - { url = "https://files.pythonhosted.org/packages/be/d8/fd0de71f39db91135b7a26996160de71c073d8635edfce8b3c3681be0d6d/pydantic_core-2.41.4-cp313-cp313-win_amd64.whl", hash = "sha256:d081a1f3800f05409ed868ebb2d74ac39dd0c1ff6c035b5162356d76030736d4", size = 2030735 }, - { url = "https://files.pythonhosted.org/packages/72/86/c99921c1cf6650023c08bfab6fe2d7057a5142628ef7ccfa9921f2dda1d5/pydantic_core-2.41.4-cp313-cp313-win_arm64.whl", hash = "sha256:f8e49c9c364a7edcbe2a310f12733aad95b022495ef2a8d653f645e5d20c1564", size = 1973209 }, - { url = "https://files.pythonhosted.org/packages/36/0d/b5706cacb70a8414396efdda3d72ae0542e050b591119e458e2490baf035/pydantic_core-2.41.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ed97fd56a561f5eb5706cebe94f1ad7c13b84d98312a05546f2ad036bafe87f4", size = 1877324 }, - { url = "https://files.pythonhosted.org/packages/de/2d/cba1fa02cfdea72dfb3a9babb067c83b9dff0bbcb198368e000a6b756ea7/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a870c307bf1ee91fc58a9a61338ff780d01bfae45922624816878dce784095d2", size = 1884515 }, - { url = "https://files.pythonhosted.org/packages/07/ea/3df927c4384ed9b503c9cc2d076cf983b4f2adb0c754578dfb1245c51e46/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d25e97bc1f5f8f7985bdc2335ef9e73843bb561eb1fa6831fdfc295c1c2061cf", size = 2042819 }, - { url = "https://files.pythonhosted.org/packages/6a/ee/df8e871f07074250270a3b1b82aad4cd0026b588acd5d7d3eb2fcb1471a3/pydantic_core-2.41.4-cp313-cp313t-win_amd64.whl", hash = "sha256:d405d14bea042f166512add3091c1af40437c2e7f86988f3915fabd27b1e9cd2", size = 1995866 }, - { url = "https://files.pythonhosted.org/packages/fc/de/b20f4ab954d6d399499c33ec4fafc46d9551e11dc1858fb7f5dca0748ceb/pydantic_core-2.41.4-cp313-cp313t-win_arm64.whl", hash = "sha256:19f3684868309db5263a11bace3c45d93f6f24afa2ffe75a647583df22a2ff89", size = 1970034 }, - { url = "https://files.pythonhosted.org/packages/54/28/d3325da57d413b9819365546eb9a6e8b7cbd9373d9380efd5f74326143e6/pydantic_core-2.41.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:e9205d97ed08a82ebb9a307e92914bb30e18cdf6f6b12ca4bedadb1588a0bfe1", size = 2102022 }, - { url = "https://files.pythonhosted.org/packages/9e/24/b58a1bc0d834bf1acc4361e61233ee217169a42efbdc15a60296e13ce438/pydantic_core-2.41.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:82df1f432b37d832709fbcc0e24394bba04a01b6ecf1ee87578145c19cde12ac", size = 1905495 }, - { url = "https://files.pythonhosted.org/packages/fb/a4/71f759cc41b7043e8ecdaab81b985a9b6cad7cec077e0b92cff8b71ecf6b/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3b4cc4539e055cfa39a3763c939f9d409eb40e85813257dcd761985a108554", size = 1956131 }, - { url = "https://files.pythonhosted.org/packages/b0/64/1e79ac7aa51f1eec7c4cda8cbe456d5d09f05fdd68b32776d72168d54275/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b1eb1754fce47c63d2ff57fdb88c351a6c0150995890088b33767a10218eaa4e", size = 2052236 }, - { url = "https://files.pythonhosted.org/packages/e9/e3/a3ffc363bd4287b80f1d43dc1c28ba64831f8dfc237d6fec8f2661138d48/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6ab5ab30ef325b443f379ddb575a34969c333004fca5a1daa0133a6ffaad616", size = 2223573 }, - { url = "https://files.pythonhosted.org/packages/28/27/78814089b4d2e684a9088ede3790763c64693c3d1408ddc0a248bc789126/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31a41030b1d9ca497634092b46481b937ff9397a86f9f51bd41c4767b6fc04af", size = 2342467 }, - { url = "https://files.pythonhosted.org/packages/92/97/4de0e2a1159cb85ad737e03306717637842c88c7fd6d97973172fb183149/pydantic_core-2.41.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a44ac1738591472c3d020f61c6df1e4015180d6262ebd39bf2aeb52571b60f12", size = 2063754 }, - { url = "https://files.pythonhosted.org/packages/0f/50/8cb90ce4b9efcf7ae78130afeb99fd1c86125ccdf9906ef64b9d42f37c25/pydantic_core-2.41.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d72f2b5e6e82ab8f94ea7d0d42f83c487dc159c5240d8f83beae684472864e2d", size = 2196754 }, - { url = "https://files.pythonhosted.org/packages/34/3b/ccdc77af9cd5082723574a1cc1bcae7a6acacc829d7c0a06201f7886a109/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c4d1e854aaf044487d31143f541f7aafe7b482ae72a022c664b2de2e466ed0ad", size = 2137115 }, - { url = "https://files.pythonhosted.org/packages/ca/ba/e7c7a02651a8f7c52dc2cff2b64a30c313e3b57c7d93703cecea76c09b71/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b568af94267729d76e6ee5ececda4e283d07bbb28e8148bb17adad93d025d25a", size = 2317400 }, - { url = "https://files.pythonhosted.org/packages/2c/ba/6c533a4ee8aec6b812c643c49bb3bd88d3f01e3cebe451bb85512d37f00f/pydantic_core-2.41.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6d55fb8b1e8929b341cc313a81a26e0d48aa3b519c1dbaadec3a6a2b4fcad025", size = 2312070 }, - { url = "https://files.pythonhosted.org/packages/22/ae/f10524fcc0ab8d7f96cf9a74c880243576fd3e72bd8ce4f81e43d22bcab7/pydantic_core-2.41.4-cp314-cp314-win32.whl", hash = "sha256:5b66584e549e2e32a1398df11da2e0a7eff45d5c2d9db9d5667c5e6ac764d77e", size = 1982277 }, - { url = "https://files.pythonhosted.org/packages/b4/dc/e5aa27aea1ad4638f0c3fb41132f7eb583bd7420ee63204e2d4333a3bbf9/pydantic_core-2.41.4-cp314-cp314-win_amd64.whl", hash = "sha256:557a0aab88664cc552285316809cab897716a372afaf8efdbef756f8b890e894", size = 2024608 }, - { url = "https://files.pythonhosted.org/packages/3e/61/51d89cc2612bd147198e120a13f150afbf0bcb4615cddb049ab10b81b79e/pydantic_core-2.41.4-cp314-cp314-win_arm64.whl", hash = "sha256:3f1ea6f48a045745d0d9f325989d8abd3f1eaf47dd00485912d1a3a63c623a8d", size = 1967614 }, - { url = "https://files.pythonhosted.org/packages/0d/c2/472f2e31b95eff099961fa050c376ab7156a81da194f9edb9f710f68787b/pydantic_core-2.41.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6c1fe4c5404c448b13188dd8bd2ebc2bdd7e6727fa61ff481bcc2cca894018da", size = 1876904 }, - { url = "https://files.pythonhosted.org/packages/4a/07/ea8eeb91173807ecdae4f4a5f4b150a520085b35454350fc219ba79e66a3/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:523e7da4d43b113bf8e7b49fa4ec0c35bf4fe66b2230bfc5c13cc498f12c6c3e", size = 1882538 }, - { url = "https://files.pythonhosted.org/packages/1e/29/b53a9ca6cd366bfc928823679c6a76c7a4c69f8201c0ba7903ad18ebae2f/pydantic_core-2.41.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5729225de81fb65b70fdb1907fcf08c75d498f4a6f15af005aabb1fdadc19dfa", size = 2041183 }, - { url = "https://files.pythonhosted.org/packages/c7/3d/f8c1a371ceebcaf94d6dd2d77c6cf4b1c078e13a5837aee83f760b4f7cfd/pydantic_core-2.41.4-cp314-cp314t-win_amd64.whl", hash = "sha256:de2cfbb09e88f0f795fd90cf955858fc2c691df65b1f21f0aa00b99f3fbc661d", size = 1993542 }, - { url = "https://files.pythonhosted.org/packages/8a/ac/9fc61b4f9d079482a290afe8d206b8f490e9fd32d4fc03ed4fc698214e01/pydantic_core-2.41.4-cp314-cp314t-win_arm64.whl", hash = "sha256:d34f950ae05a83e0ede899c595f312ca976023ea1db100cd5aa188f7005e3ab0", size = 1973897 }, - { url = "https://files.pythonhosted.org/packages/b0/12/5ba58daa7f453454464f92b3ca7b9d7c657d8641c48e370c3ebc9a82dd78/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a1b2cfec3879afb742a7b0bcfa53e4f22ba96571c9e54d6a3afe1052d17d843b", size = 2122139 }, - { url = "https://files.pythonhosted.org/packages/21/fb/6860126a77725c3108baecd10fd3d75fec25191d6381b6eb2ac660228eac/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:d175600d975b7c244af6eb9c9041f10059f20b8bbffec9e33fdd5ee3f67cdc42", size = 1936674 }, - { url = "https://files.pythonhosted.org/packages/de/be/57dcaa3ed595d81f8757e2b44a38240ac5d37628bce25fb20d02c7018776/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f184d657fa4947ae5ec9c47bd7e917730fa1cbb78195037e32dcbab50aca5ee", size = 1956398 }, - { url = "https://files.pythonhosted.org/packages/2f/1d/679a344fadb9695f1a6a294d739fbd21d71fa023286daeea8c0ed49e7c2b/pydantic_core-2.41.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed810568aeffed3edc78910af32af911c835cc39ebbfacd1f0ab5dd53028e5c", size = 2138674 }, - { url = "https://files.pythonhosted.org/packages/c4/48/ae937e5a831b7c0dc646b2ef788c27cd003894882415300ed21927c21efa/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:4f5d640aeebb438517150fdeec097739614421900e4a08db4a3ef38898798537", size = 2112087 }, - { url = "https://files.pythonhosted.org/packages/5e/db/6db8073e3d32dae017da7e0d16a9ecb897d0a4d92e00634916e486097961/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:4a9ab037b71927babc6d9e7fc01aea9e66dc2a4a34dff06ef0724a4049629f94", size = 1920387 }, - { url = "https://files.pythonhosted.org/packages/0d/c1/dd3542d072fcc336030d66834872f0328727e3b8de289c662faa04aa270e/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4dab9484ec605c3016df9ad4fd4f9a390bc5d816a3b10c6550f8424bb80b18c", size = 1951495 }, - { url = "https://files.pythonhosted.org/packages/2b/c6/db8d13a1f8ab3f1eb08c88bd00fd62d44311e3456d1e85c0e59e0a0376e7/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8a5028425820731d8c6c098ab642d7b8b999758e24acae03ed38a66eca8335", size = 2139008 }, +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403 }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206 }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307 }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258 }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917 }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186 }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164 }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146 }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788 }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133 }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852 }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679 }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766 }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005 }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622 }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725 }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040 }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691 }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897 }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302 }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877 }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680 }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960 }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102 }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039 }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126 }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489 }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288 }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255 }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760 }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092 }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385 }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832 }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585 }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078 }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914 }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560 }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244 }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955 }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906 }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607 }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769 }, + { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441 }, + { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291 }, + { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632 }, + { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905 }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495 }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388 }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879 }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017 }, ] [[package]] @@ -1491,11 +1361,11 @@ wheels = [ [[package]] name = "python-dotenv" -version = "1.1.1" +version = "1.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/b0/4bc07ccd3572a2f9df7e6782f52b0c6c90dcbb803ac4a167702d7d0dfe1e/python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab", size = 41978 } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", size = 20556 }, + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230 }, ] [[package]] @@ -1504,16 +1374,6 @@ version = "6.0.3" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063 }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973 }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116 }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011 }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870 }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089 }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181 }, - { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658 }, - { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003 }, - { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344 }, { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669 }, { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252 }, { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081 }, @@ -1546,80 +1406,66 @@ wheels = [ [[package]] name = "regex" -version = "2025.9.18" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/49/d3/eaa0d28aba6ad1827ad1e716d9a93e1ba963ada61887498297d3da715133/regex-2025.9.18.tar.gz", hash = "sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4", size = 400917 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b0/99/05859d87a66ae7098222d65748f11ef7f2dff51bfd7482a4e2256c90d72b/regex-2025.9.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e", size = 486335 }, - { url = "https://files.pythonhosted.org/packages/97/7e/d43d4e8b978890932cf7b0957fce58c5b08c66f32698f695b0c2c24a48bf/regex-2025.9.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a", size = 289720 }, - { url = "https://files.pythonhosted.org/packages/bb/3b/ff80886089eb5dcf7e0d2040d9aaed539e25a94300403814bb24cc775058/regex-2025.9.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab", size = 287257 }, - { url = "https://files.pythonhosted.org/packages/ee/66/243edf49dd8720cba8d5245dd4d6adcb03a1defab7238598c0c97cf549b8/regex-2025.9.18-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5", size = 797463 }, - { url = "https://files.pythonhosted.org/packages/df/71/c9d25a1142c70432e68bb03211d4a82299cd1c1fbc41db9409a394374ef5/regex-2025.9.18-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742", size = 862670 }, - { url = "https://files.pythonhosted.org/packages/f8/8f/329b1efc3a64375a294e3a92d43372bf1a351aa418e83c21f2f01cf6ec41/regex-2025.9.18-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425", size = 910881 }, - { url = "https://files.pythonhosted.org/packages/35/9e/a91b50332a9750519320ed30ec378b74c996f6befe282cfa6bb6cea7e9fd/regex-2025.9.18-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352", size = 802011 }, - { url = "https://files.pythonhosted.org/packages/a4/1d/6be3b8d7856b6e0d7ee7f942f437d0a76e0d5622983abbb6d21e21ab9a17/regex-2025.9.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d", size = 786668 }, - { url = "https://files.pythonhosted.org/packages/cb/ce/4a60e53df58bd157c5156a1736d3636f9910bdcc271d067b32b7fcd0c3a8/regex-2025.9.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56", size = 856578 }, - { url = "https://files.pythonhosted.org/packages/86/e8/162c91bfe7217253afccde112868afb239f94703de6580fb235058d506a6/regex-2025.9.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e", size = 849017 }, - { url = "https://files.pythonhosted.org/packages/35/34/42b165bc45289646ea0959a1bc7531733e90b47c56a72067adfe6b3251f6/regex-2025.9.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282", size = 788150 }, - { url = "https://files.pythonhosted.org/packages/79/5d/cdd13b1f3c53afa7191593a7ad2ee24092a5a46417725ffff7f64be8342d/regex-2025.9.18-cp312-cp312-win32.whl", hash = "sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459", size = 264536 }, - { url = "https://files.pythonhosted.org/packages/e0/f5/4a7770c9a522e7d2dc1fa3ffc83ab2ab33b0b22b447e62cffef186805302/regex-2025.9.18-cp312-cp312-win_amd64.whl", hash = "sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77", size = 275501 }, - { url = "https://files.pythonhosted.org/packages/df/05/9ce3e110e70d225ecbed455b966003a3afda5e58e8aec2964042363a18f4/regex-2025.9.18-cp312-cp312-win_arm64.whl", hash = "sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5", size = 268601 }, - { url = "https://files.pythonhosted.org/packages/d2/c7/5c48206a60ce33711cf7dcaeaed10dd737733a3569dc7e1dce324dd48f30/regex-2025.9.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2a40f929cd907c7e8ac7566ac76225a77701a6221bca937bdb70d56cb61f57b2", size = 485955 }, - { url = "https://files.pythonhosted.org/packages/e9/be/74fc6bb19a3c491ec1ace943e622b5a8539068771e8705e469b2da2306a7/regex-2025.9.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c90471671c2cdf914e58b6af62420ea9ecd06d1554d7474d50133ff26ae88feb", size = 289583 }, - { url = "https://files.pythonhosted.org/packages/25/c4/9ceaa433cb5dc515765560f22a19578b95b92ff12526e5a259321c4fc1a0/regex-2025.9.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a351aff9e07a2dabb5022ead6380cff17a4f10e4feb15f9100ee56c4d6d06af", size = 287000 }, - { url = "https://files.pythonhosted.org/packages/7d/e6/68bc9393cb4dc68018456568c048ac035854b042bc7c33cb9b99b0680afa/regex-2025.9.18-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bc4b8e9d16e20ddfe16430c23468a8707ccad3365b06d4536142e71823f3ca29", size = 797535 }, - { url = "https://files.pythonhosted.org/packages/6a/1c/ebae9032d34b78ecfe9bd4b5e6575b55351dc8513485bb92326613732b8c/regex-2025.9.18-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b8cdbddf2db1c5e80338ba2daa3cfa3dec73a46fff2a7dda087c8efbf12d62f", size = 862603 }, - { url = "https://files.pythonhosted.org/packages/3b/74/12332c54b3882557a4bcd2b99f8be581f5c6a43cf1660a85b460dd8ff468/regex-2025.9.18-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a276937d9d75085b2c91fb48244349c6954f05ee97bba0963ce24a9d915b8b68", size = 910829 }, - { url = "https://files.pythonhosted.org/packages/86/70/ba42d5ed606ee275f2465bfc0e2208755b06cdabd0f4c7c4b614d51b57ab/regex-2025.9.18-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92a8e375ccdc1256401c90e9dc02b8642894443d549ff5e25e36d7cf8a80c783", size = 802059 }, - { url = "https://files.pythonhosted.org/packages/da/c5/fcb017e56396a7f2f8357412638d7e2963440b131a3ca549be25774b3641/regex-2025.9.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0dc6893b1f502d73037cf807a321cdc9be29ef3d6219f7970f842475873712ac", size = 786781 }, - { url = "https://files.pythonhosted.org/packages/c6/ee/21c4278b973f630adfb3bcb23d09d83625f3ab1ca6e40ebdffe69901c7a1/regex-2025.9.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a61e85bfc63d232ac14b015af1261f826260c8deb19401c0597dbb87a864361e", size = 856578 }, - { url = "https://files.pythonhosted.org/packages/87/0b/de51550dc7274324435c8f1539373ac63019b0525ad720132866fff4a16a/regex-2025.9.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ef86a9ebc53f379d921fb9a7e42b92059ad3ee800fcd9e0fe6181090e9f6c23", size = 849119 }, - { url = "https://files.pythonhosted.org/packages/60/52/383d3044fc5154d9ffe4321696ee5b2ee4833a28c29b137c22c33f41885b/regex-2025.9.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d3bc882119764ba3a119fbf2bd4f1b47bc56c1da5d42df4ed54ae1e8e66fdf8f", size = 788219 }, - { url = "https://files.pythonhosted.org/packages/20/bd/2614fc302671b7359972ea212f0e3a92df4414aaeacab054a8ce80a86073/regex-2025.9.18-cp313-cp313-win32.whl", hash = "sha256:3810a65675845c3bdfa58c3c7d88624356dd6ee2fc186628295e0969005f928d", size = 264517 }, - { url = "https://files.pythonhosted.org/packages/07/0f/ab5c1581e6563a7bffdc1974fb2d25f05689b88e2d416525271f232b1946/regex-2025.9.18-cp313-cp313-win_amd64.whl", hash = "sha256:16eaf74b3c4180ede88f620f299e474913ab6924d5c4b89b3833bc2345d83b3d", size = 275481 }, - { url = "https://files.pythonhosted.org/packages/49/22/ee47672bc7958f8c5667a587c2600a4fba8b6bab6e86bd6d3e2b5f7cac42/regex-2025.9.18-cp313-cp313-win_arm64.whl", hash = "sha256:4dc98ba7dd66bd1261927a9f49bd5ee2bcb3660f7962f1ec02617280fc00f5eb", size = 268598 }, - { url = "https://files.pythonhosted.org/packages/e8/83/6887e16a187c6226cb85d8301e47d3b73ecc4505a3a13d8da2096b44fd76/regex-2025.9.18-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fe5d50572bc885a0a799410a717c42b1a6b50e2f45872e2b40f4f288f9bce8a2", size = 489765 }, - { url = "https://files.pythonhosted.org/packages/51/c5/e2f7325301ea2916ff301c8d963ba66b1b2c1b06694191df80a9c4fea5d0/regex-2025.9.18-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b9d9a2d6cda6621551ca8cf7a06f103adf72831153f3c0d982386110870c4d3", size = 291228 }, - { url = "https://files.pythonhosted.org/packages/91/60/7d229d2bc6961289e864a3a3cfebf7d0d250e2e65323a8952cbb7e22d824/regex-2025.9.18-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:13202e4c4ac0ef9a317fff817674b293c8f7e8c68d3190377d8d8b749f566e12", size = 289270 }, - { url = "https://files.pythonhosted.org/packages/3c/d7/b4f06868ee2958ff6430df89857fbf3d43014bbf35538b6ec96c2704e15d/regex-2025.9.18-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:874ff523b0fecffb090f80ae53dc93538f8db954c8bb5505f05b7787ab3402a0", size = 806326 }, - { url = "https://files.pythonhosted.org/packages/d6/e4/bca99034a8f1b9b62ccf337402a8e5b959dd5ba0e5e5b2ead70273df3277/regex-2025.9.18-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d13ab0490128f2bb45d596f754148cd750411afc97e813e4b3a61cf278a23bb6", size = 871556 }, - { url = "https://files.pythonhosted.org/packages/6d/df/e06ffaf078a162f6dd6b101a5ea9b44696dca860a48136b3ae4a9caf25e2/regex-2025.9.18-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:05440bc172bc4b4b37fb9667e796597419404dbba62e171e1f826d7d2a9ebcef", size = 913817 }, - { url = "https://files.pythonhosted.org/packages/9e/05/25b05480b63292fd8e84800b1648e160ca778127b8d2367a0a258fa2e225/regex-2025.9.18-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5514b8e4031fdfaa3d27e92c75719cbe7f379e28cacd939807289bce76d0e35a", size = 811055 }, - { url = "https://files.pythonhosted.org/packages/70/97/7bc7574655eb651ba3a916ed4b1be6798ae97af30104f655d8efd0cab24b/regex-2025.9.18-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:65d3c38c39efce73e0d9dc019697b39903ba25b1ad45ebbd730d2cf32741f40d", size = 794534 }, - { url = "https://files.pythonhosted.org/packages/b4/c2/d5da49166a52dda879855ecdba0117f073583db2b39bb47ce9a3378a8e9e/regex-2025.9.18-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ae77e447ebc144d5a26d50055c6ddba1d6ad4a865a560ec7200b8b06bc529368", size = 866684 }, - { url = "https://files.pythonhosted.org/packages/bd/2d/0a5c4e6ec417de56b89ff4418ecc72f7e3feca806824c75ad0bbdae0516b/regex-2025.9.18-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e3ef8cf53dc8df49d7e28a356cf824e3623764e9833348b655cfed4524ab8a90", size = 853282 }, - { url = "https://files.pythonhosted.org/packages/f4/8e/d656af63e31a86572ec829665d6fa06eae7e144771e0330650a8bb865635/regex-2025.9.18-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9feb29817df349c976da9a0debf775c5c33fc1c8ad7b9f025825da99374770b7", size = 797830 }, - { url = "https://files.pythonhosted.org/packages/db/ce/06edc89df8f7b83ffd321b6071be4c54dc7332c0f77860edc40ce57d757b/regex-2025.9.18-cp313-cp313t-win32.whl", hash = "sha256:168be0d2f9b9d13076940b1ed774f98595b4e3c7fc54584bba81b3cc4181742e", size = 267281 }, - { url = "https://files.pythonhosted.org/packages/83/9a/2b5d9c8b307a451fd17068719d971d3634ca29864b89ed5c18e499446d4a/regex-2025.9.18-cp313-cp313t-win_amd64.whl", hash = "sha256:d59ecf3bb549e491c8104fea7313f3563c7b048e01287db0a90485734a70a730", size = 278724 }, - { url = "https://files.pythonhosted.org/packages/3d/70/177d31e8089a278a764f8ec9a3faac8d14a312d622a47385d4b43905806f/regex-2025.9.18-cp313-cp313t-win_arm64.whl", hash = "sha256:dbef80defe9fb21310948a2595420b36c6d641d9bea4c991175829b2cc4bc06a", size = 269771 }, - { url = "https://files.pythonhosted.org/packages/44/b7/3b4663aa3b4af16819f2ab6a78c4111c7e9b066725d8107753c2257448a5/regex-2025.9.18-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c6db75b51acf277997f3adcd0ad89045d856190d13359f15ab5dda21581d9129", size = 486130 }, - { url = "https://files.pythonhosted.org/packages/80/5b/4533f5d7ac9c6a02a4725fe8883de2aebc713e67e842c04cf02626afb747/regex-2025.9.18-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8f9698b6f6895d6db810e0bda5364f9ceb9e5b11328700a90cae573574f61eea", size = 289539 }, - { url = "https://files.pythonhosted.org/packages/b8/8d/5ab6797c2750985f79e9995fad3254caa4520846580f266ae3b56d1cae58/regex-2025.9.18-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29cd86aa7cb13a37d0f0d7c21d8d949fe402ffa0ea697e635afedd97ab4b69f1", size = 287233 }, - { url = "https://files.pythonhosted.org/packages/cb/1e/95afcb02ba8d3a64e6ffeb801718ce73471ad6440c55d993f65a4a5e7a92/regex-2025.9.18-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c9f285a071ee55cd9583ba24dde006e53e17780bb309baa8e4289cd472bcc47", size = 797876 }, - { url = "https://files.pythonhosted.org/packages/c8/fb/720b1f49cec1f3b5a9fea5b34cd22b88b5ebccc8c1b5de9cc6f65eed165a/regex-2025.9.18-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5adf266f730431e3be9021d3e5b8d5ee65e563fec2883ea8093944d21863b379", size = 863385 }, - { url = "https://files.pythonhosted.org/packages/a9/ca/e0d07ecf701e1616f015a720dc13b84c582024cbfbb3fc5394ae204adbd7/regex-2025.9.18-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1137cabc0f38807de79e28d3f6e3e3f2cc8cfb26bead754d02e6d1de5f679203", size = 910220 }, - { url = "https://files.pythonhosted.org/packages/b6/45/bba86413b910b708eca705a5af62163d5d396d5f647ed9485580c7025209/regex-2025.9.18-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7cc9e5525cada99699ca9223cce2d52e88c52a3d2a0e842bd53de5497c604164", size = 801827 }, - { url = "https://files.pythonhosted.org/packages/b8/a6/740fbd9fcac31a1305a8eed30b44bf0f7f1e042342be0a4722c0365ecfca/regex-2025.9.18-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bbb9246568f72dce29bcd433517c2be22c7791784b223a810225af3b50d1aafb", size = 786843 }, - { url = "https://files.pythonhosted.org/packages/80/a7/0579e8560682645906da640c9055506465d809cb0f5415d9976f417209a6/regex-2025.9.18-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:6a52219a93dd3d92c675383efff6ae18c982e2d7651c792b1e6d121055808743", size = 857430 }, - { url = "https://files.pythonhosted.org/packages/8d/9b/4dc96b6c17b38900cc9fee254fc9271d0dde044e82c78c0811b58754fde5/regex-2025.9.18-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:ae9b3840c5bd456780e3ddf2f737ab55a79b790f6409182012718a35c6d43282", size = 848612 }, - { url = "https://files.pythonhosted.org/packages/b3/6a/6f659f99bebb1775e5ac81a3fb837b85897c1a4ef5acffd0ff8ffe7e67fb/regex-2025.9.18-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d488c236ac497c46a5ac2005a952c1a0e22a07be9f10c3e735bc7d1209a34773", size = 787967 }, - { url = "https://files.pythonhosted.org/packages/61/35/9e35665f097c07cf384a6b90a1ac11b0b1693084a0b7a675b06f760496c6/regex-2025.9.18-cp314-cp314-win32.whl", hash = "sha256:0c3506682ea19beefe627a38872d8da65cc01ffa25ed3f2e422dffa1474f0788", size = 269847 }, - { url = "https://files.pythonhosted.org/packages/af/64/27594dbe0f1590b82de2821ebfe9a359b44dcb9b65524876cd12fabc447b/regex-2025.9.18-cp314-cp314-win_amd64.whl", hash = "sha256:57929d0f92bebb2d1a83af372cd0ffba2263f13f376e19b1e4fa32aec4efddc3", size = 278755 }, - { url = "https://files.pythonhosted.org/packages/30/a3/0cd8d0d342886bd7d7f252d701b20ae1a3c72dc7f34ef4b2d17790280a09/regex-2025.9.18-cp314-cp314-win_arm64.whl", hash = "sha256:6a4b44df31d34fa51aa5c995d3aa3c999cec4d69b9bd414a8be51984d859f06d", size = 271873 }, - { url = "https://files.pythonhosted.org/packages/99/cb/8a1ab05ecf404e18b54348e293d9b7a60ec2bd7aa59e637020c5eea852e8/regex-2025.9.18-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:b176326bcd544b5e9b17d6943f807697c0cb7351f6cfb45bf5637c95ff7e6306", size = 489773 }, - { url = "https://files.pythonhosted.org/packages/93/3b/6543c9b7f7e734d2404fa2863d0d710c907bef99d4598760ed4563d634c3/regex-2025.9.18-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:0ffd9e230b826b15b369391bec167baed57c7ce39efc35835448618860995946", size = 291221 }, - { url = "https://files.pythonhosted.org/packages/cd/91/e9fdee6ad6bf708d98c5d17fded423dcb0661795a49cba1b4ffb8358377a/regex-2025.9.18-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ec46332c41add73f2b57e2f5b642f991f6b15e50e9f86285e08ffe3a512ac39f", size = 289268 }, - { url = "https://files.pythonhosted.org/packages/94/a6/bc3e8a918abe4741dadeaeb6c508e3a4ea847ff36030d820d89858f96a6c/regex-2025.9.18-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b80fa342ed1ea095168a3f116637bd1030d39c9ff38dc04e54ef7c521e01fc95", size = 806659 }, - { url = "https://files.pythonhosted.org/packages/2b/71/ea62dbeb55d9e6905c7b5a49f75615ea1373afcad95830047e4e310db979/regex-2025.9.18-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4d97071c0ba40f0cf2a93ed76e660654c399a0a04ab7d85472239460f3da84b", size = 871701 }, - { url = "https://files.pythonhosted.org/packages/6a/90/fbe9dedb7dad24a3a4399c0bae64bfa932ec8922a0a9acf7bc88db30b161/regex-2025.9.18-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0ac936537ad87cef9e0e66c5144484206c1354224ee811ab1519a32373e411f3", size = 913742 }, - { url = "https://files.pythonhosted.org/packages/f0/1c/47e4a8c0e73d41eb9eb9fdeba3b1b810110a5139a2526e82fd29c2d9f867/regex-2025.9.18-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dec57f96d4def58c422d212d414efe28218d58537b5445cf0c33afb1b4768571", size = 811117 }, - { url = "https://files.pythonhosted.org/packages/2a/da/435f29fddfd015111523671e36d30af3342e8136a889159b05c1d9110480/regex-2025.9.18-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:48317233294648bf7cd068857f248e3a57222259a5304d32c7552e2284a1b2ad", size = 794647 }, - { url = "https://files.pythonhosted.org/packages/23/66/df5e6dcca25c8bc57ce404eebc7342310a0d218db739d7882c9a2b5974a3/regex-2025.9.18-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:274687e62ea3cf54846a9b25fc48a04459de50af30a7bd0b61a9e38015983494", size = 866747 }, - { url = "https://files.pythonhosted.org/packages/82/42/94392b39b531f2e469b2daa40acf454863733b674481fda17462a5ffadac/regex-2025.9.18-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:a78722c86a3e7e6aadf9579e3b0ad78d955f2d1f1a8ca4f67d7ca258e8719d4b", size = 853434 }, - { url = "https://files.pythonhosted.org/packages/a8/f8/dcc64c7f7bbe58842a8f89622b50c58c3598fbbf4aad0a488d6df2c699f1/regex-2025.9.18-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:06104cd203cdef3ade989a1c45b6215bf42f8b9dd705ecc220c173233f7cba41", size = 798024 }, - { url = "https://files.pythonhosted.org/packages/20/8d/edf1c5d5aa98f99a692313db813ec487732946784f8f93145e0153d910e5/regex-2025.9.18-cp314-cp314t-win32.whl", hash = "sha256:2e1eddc06eeaffd249c0adb6fafc19e2118e6308c60df9db27919e96b5656096", size = 273029 }, - { url = "https://files.pythonhosted.org/packages/a7/24/02d4e4f88466f17b145f7ea2b2c11af3a942db6222429c2c146accf16054/regex-2025.9.18-cp314-cp314t-win_amd64.whl", hash = "sha256:8620d247fb8c0683ade51217b459cb4a1081c0405a3072235ba43a40d355c09a", size = 282680 }, - { url = "https://files.pythonhosted.org/packages/1f/a3/c64894858aaaa454caa7cc47e2f225b04d3ed08ad649eacf58d45817fad2/regex-2025.9.18-cp314-cp314t-win_arm64.whl", hash = "sha256:b7531a8ef61de2c647cdf68b3229b071e46ec326b3138b2180acb4275f470b01", size = 273034 }, +version = "2025.11.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/a9/546676f25e573a4cf00fe8e119b78a37b6a8fe2dc95cda877b30889c9c45/regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01", size = 414669 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/a7/dda24ebd49da46a197436ad96378f17df30ceb40e52e859fc42cac45b850/regex-2025.11.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4", size = 489081 }, + { url = "https://files.pythonhosted.org/packages/19/22/af2dc751aacf88089836aa088a1a11c4f21a04707eb1b0478e8e8fb32847/regex-2025.11.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76", size = 291123 }, + { url = "https://files.pythonhosted.org/packages/a3/88/1a3ea5672f4b0a84802ee9891b86743438e7c04eb0b8f8c4e16a42375327/regex-2025.11.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a", size = 288814 }, + { url = "https://files.pythonhosted.org/packages/fb/8c/f5987895bf42b8ddeea1b315c9fedcfe07cadee28b9c98cf50d00adcb14d/regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361", size = 798592 }, + { url = "https://files.pythonhosted.org/packages/99/2a/6591ebeede78203fa77ee46a1c36649e02df9eaa77a033d1ccdf2fcd5d4e/regex-2025.11.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160", size = 864122 }, + { url = "https://files.pythonhosted.org/packages/94/d6/be32a87cf28cf8ed064ff281cfbd49aefd90242a83e4b08b5a86b38e8eb4/regex-2025.11.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe", size = 912272 }, + { url = "https://files.pythonhosted.org/packages/62/11/9bcef2d1445665b180ac7f230406ad80671f0fc2a6ffb93493b5dd8cd64c/regex-2025.11.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850", size = 803497 }, + { url = "https://files.pythonhosted.org/packages/e5/a7/da0dc273d57f560399aa16d8a68ae7f9b57679476fc7ace46501d455fe84/regex-2025.11.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc", size = 787892 }, + { url = "https://files.pythonhosted.org/packages/da/4b/732a0c5a9736a0b8d6d720d4945a2f1e6f38f87f48f3173559f53e8d5d82/regex-2025.11.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9", size = 858462 }, + { url = "https://files.pythonhosted.org/packages/0c/f5/a2a03df27dc4c2d0c769220f5110ba8c4084b0bfa9ab0f9b4fcfa3d2b0fc/regex-2025.11.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b", size = 850528 }, + { url = "https://files.pythonhosted.org/packages/d6/09/e1cd5bee3841c7f6eb37d95ca91cdee7100b8f88b81e41c2ef426910891a/regex-2025.11.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7", size = 789866 }, + { url = "https://files.pythonhosted.org/packages/eb/51/702f5ea74e2a9c13d855a6a85b7f80c30f9e72a95493260193c07f3f8d74/regex-2025.11.3-cp313-cp313-win32.whl", hash = "sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c", size = 266189 }, + { url = "https://files.pythonhosted.org/packages/8b/00/6e29bb314e271a743170e53649db0fdb8e8ff0b64b4f425f5602f4eb9014/regex-2025.11.3-cp313-cp313-win_amd64.whl", hash = "sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5", size = 277054 }, + { url = "https://files.pythonhosted.org/packages/25/f1/b156ff9f2ec9ac441710764dda95e4edaf5f36aca48246d1eea3f1fd96ec/regex-2025.11.3-cp313-cp313-win_arm64.whl", hash = "sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467", size = 270325 }, + { url = "https://files.pythonhosted.org/packages/20/28/fd0c63357caefe5680b8ea052131acbd7f456893b69cc2a90cc3e0dc90d4/regex-2025.11.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281", size = 491984 }, + { url = "https://files.pythonhosted.org/packages/df/ec/7014c15626ab46b902b3bcc4b28a7bae46d8f281fc7ea9c95e22fcaaa917/regex-2025.11.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39", size = 292673 }, + { url = "https://files.pythonhosted.org/packages/23/ab/3b952ff7239f20d05f1f99e9e20188513905f218c81d52fb5e78d2bf7634/regex-2025.11.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7", size = 291029 }, + { url = "https://files.pythonhosted.org/packages/21/7e/3dc2749fc684f455f162dcafb8a187b559e2614f3826877d3844a131f37b/regex-2025.11.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed", size = 807437 }, + { url = "https://files.pythonhosted.org/packages/1b/0b/d529a85ab349c6a25d1ca783235b6e3eedf187247eab536797021f7126c6/regex-2025.11.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19", size = 873368 }, + { url = "https://files.pythonhosted.org/packages/7d/18/2d868155f8c9e3e9d8f9e10c64e9a9f496bb8f7e037a88a8bed26b435af6/regex-2025.11.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b", size = 914921 }, + { url = "https://files.pythonhosted.org/packages/2d/71/9d72ff0f354fa783fe2ba913c8734c3b433b86406117a8db4ea2bf1c7a2f/regex-2025.11.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a", size = 812708 }, + { url = "https://files.pythonhosted.org/packages/e7/19/ce4bf7f5575c97f82b6e804ffb5c4e940c62609ab2a0d9538d47a7fdf7d4/regex-2025.11.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6", size = 795472 }, + { url = "https://files.pythonhosted.org/packages/03/86/fd1063a176ffb7b2315f9a1b08d17b18118b28d9df163132615b835a26ee/regex-2025.11.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce", size = 868341 }, + { url = "https://files.pythonhosted.org/packages/12/43/103fb2e9811205e7386366501bc866a164a0430c79dd59eac886a2822950/regex-2025.11.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd", size = 854666 }, + { url = "https://files.pythonhosted.org/packages/7d/22/e392e53f3869b75804762c7c848bd2dd2abf2b70fb0e526f58724638bd35/regex-2025.11.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2", size = 799473 }, + { url = "https://files.pythonhosted.org/packages/4f/f9/8bd6b656592f925b6845fcbb4d57603a3ac2fb2373344ffa1ed70aa6820a/regex-2025.11.3-cp313-cp313t-win32.whl", hash = "sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a", size = 268792 }, + { url = "https://files.pythonhosted.org/packages/e5/87/0e7d603467775ff65cd2aeabf1b5b50cc1c3708556a8b849a2fa4dd1542b/regex-2025.11.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c", size = 280214 }, + { url = "https://files.pythonhosted.org/packages/8d/d0/2afc6f8e94e2b64bfb738a7c2b6387ac1699f09f032d363ed9447fd2bb57/regex-2025.11.3-cp313-cp313t-win_arm64.whl", hash = "sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e", size = 271469 }, + { url = "https://files.pythonhosted.org/packages/31/e9/f6e13de7e0983837f7b6d238ad9458800a874bf37c264f7923e63409944c/regex-2025.11.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6", size = 489089 }, + { url = "https://files.pythonhosted.org/packages/a3/5c/261f4a262f1fa65141c1b74b255988bd2fa020cc599e53b080667d591cfc/regex-2025.11.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4", size = 291059 }, + { url = "https://files.pythonhosted.org/packages/8e/57/f14eeb7f072b0e9a5a090d1712741fd8f214ec193dba773cf5410108bb7d/regex-2025.11.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73", size = 288900 }, + { url = "https://files.pythonhosted.org/packages/3c/6b/1d650c45e99a9b327586739d926a1cd4e94666b1bd4af90428b36af66dc7/regex-2025.11.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f", size = 799010 }, + { url = "https://files.pythonhosted.org/packages/99/ee/d66dcbc6b628ce4e3f7f0cbbb84603aa2fc0ffc878babc857726b8aab2e9/regex-2025.11.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d", size = 864893 }, + { url = "https://files.pythonhosted.org/packages/bf/2d/f238229f1caba7ac87a6c4153d79947fb0261415827ae0f77c304260c7d3/regex-2025.11.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be", size = 911522 }, + { url = "https://files.pythonhosted.org/packages/bd/3d/22a4eaba214a917c80e04f6025d26143690f0419511e0116508e24b11c9b/regex-2025.11.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db", size = 803272 }, + { url = "https://files.pythonhosted.org/packages/84/b1/03188f634a409353a84b5ef49754b97dbcc0c0f6fd6c8ede505a8960a0a4/regex-2025.11.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62", size = 787958 }, + { url = "https://files.pythonhosted.org/packages/99/6a/27d072f7fbf6fadd59c64d210305e1ff865cc3b78b526fd147db768c553b/regex-2025.11.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f", size = 859289 }, + { url = "https://files.pythonhosted.org/packages/9a/70/1b3878f648e0b6abe023172dacb02157e685564853cc363d9961bcccde4e/regex-2025.11.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02", size = 850026 }, + { url = "https://files.pythonhosted.org/packages/dd/d5/68e25559b526b8baab8e66839304ede68ff6727237a47727d240006bd0ff/regex-2025.11.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed", size = 789499 }, + { url = "https://files.pythonhosted.org/packages/fc/df/43971264857140a350910d4e33df725e8c94dd9dee8d2e4729fa0d63d49e/regex-2025.11.3-cp314-cp314-win32.whl", hash = "sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4", size = 271604 }, + { url = "https://files.pythonhosted.org/packages/01/6f/9711b57dc6894a55faf80a4c1b5aa4f8649805cb9c7aef46f7d27e2b9206/regex-2025.11.3-cp314-cp314-win_amd64.whl", hash = "sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad", size = 280320 }, + { url = "https://files.pythonhosted.org/packages/f1/7e/f6eaa207d4377481f5e1775cdeb5a443b5a59b392d0065f3417d31d80f87/regex-2025.11.3-cp314-cp314-win_arm64.whl", hash = "sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f", size = 273372 }, + { url = "https://files.pythonhosted.org/packages/c3/06/49b198550ee0f5e4184271cee87ba4dfd9692c91ec55289e6282f0f86ccf/regex-2025.11.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc", size = 491985 }, + { url = "https://files.pythonhosted.org/packages/ce/bf/abdafade008f0b1c9da10d934034cb670432d6cf6cbe38bbb53a1cfd6cf8/regex-2025.11.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49", size = 292669 }, + { url = "https://files.pythonhosted.org/packages/f9/ef/0c357bb8edbd2ad8e273fcb9e1761bc37b8acbc6e1be050bebd6475f19c1/regex-2025.11.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536", size = 291030 }, + { url = "https://files.pythonhosted.org/packages/79/06/edbb67257596649b8fb088d6aeacbcb248ac195714b18a65e018bf4c0b50/regex-2025.11.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95", size = 807674 }, + { url = "https://files.pythonhosted.org/packages/f4/d9/ad4deccfce0ea336296bd087f1a191543bb99ee1c53093dcd4c64d951d00/regex-2025.11.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009", size = 873451 }, + { url = "https://files.pythonhosted.org/packages/13/75/a55a4724c56ef13e3e04acaab29df26582f6978c000ac9cd6810ad1f341f/regex-2025.11.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9", size = 914980 }, + { url = "https://files.pythonhosted.org/packages/67/1e/a1657ee15bd9116f70d4a530c736983eed997b361e20ecd8f5ca3759d5c5/regex-2025.11.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d", size = 812852 }, + { url = "https://files.pythonhosted.org/packages/b8/6f/f7516dde5506a588a561d296b2d0044839de06035bb486b326065b4c101e/regex-2025.11.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6", size = 795566 }, + { url = "https://files.pythonhosted.org/packages/d9/dd/3d10b9e170cc16fb34cb2cef91513cf3df65f440b3366030631b2984a264/regex-2025.11.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154", size = 868463 }, + { url = "https://files.pythonhosted.org/packages/f5/8e/935e6beff1695aa9085ff83195daccd72acc82c81793df480f34569330de/regex-2025.11.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267", size = 854694 }, + { url = "https://files.pythonhosted.org/packages/92/12/10650181a040978b2f5720a6a74d44f841371a3d984c2083fc1752e4acf6/regex-2025.11.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379", size = 799691 }, + { url = "https://files.pythonhosted.org/packages/67/90/8f37138181c9a7690e7e4cb388debbd389342db3c7381d636d2875940752/regex-2025.11.3-cp314-cp314t-win32.whl", hash = "sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38", size = 274583 }, + { url = "https://files.pythonhosted.org/packages/8f/cd/867f5ec442d56beb56f5f854f40abcfc75e11d10b11fdb1869dd39c63aaf/regex-2025.11.3-cp314-cp314t-win_amd64.whl", hash = "sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de", size = 284286 }, + { url = "https://files.pythonhosted.org/packages/20/31/32c0c4610cbc070362bf1d2e4ea86d1ea29014d400a6d6c2486fcfd57766/regex-2025.11.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801", size = 274741 }, ] [[package]] @@ -1680,14 +1526,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/f0/f2/840d7b9496825333f532d2e3976b8eadbf52034178aac53630d09fe6e1ef/sqlalchemy-2.0.44.tar.gz", hash = "sha256:0ae7454e1ab1d780aee69fd2aae7d6b8670a581d8847f2d1e0f7ddfbf47e5a22", size = 9819830 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72fea91746b5890f9e5e0997f16cbf3d53550580d76355ba2d998311b17b2250", size = 2139675 }, - { url = "https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:585c0c852a891450edbb1eaca8648408a3cc125f18cf433941fa6babcc359e29", size = 2127726 }, - { url = "https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b94843a102efa9ac68a7a30cd46df3ff1ed9c658100d30a725d10d9c60a2f44", size = 3327603 }, - { url = "https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:119dc41e7a7defcefc57189cfa0e61b1bf9c228211aba432b53fb71ef367fda1", size = 3337842 }, - { url = "https://files.pythonhosted.org/packages/41/92/648f1afd3f20b71e880ca797a960f638d39d243e233a7082c93093c22378/sqlalchemy-2.0.44-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0765e318ee9179b3718c4fd7ba35c434f4dd20332fbc6857a5e8df17719c24d7", size = 3264558 }, - { url = "https://files.pythonhosted.org/packages/40/cf/e27d7ee61a10f74b17740918e23cbc5bc62011b48282170dc4c66da8ec0f/sqlalchemy-2.0.44-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2e7b5b079055e02d06a4308d0481658e4f06bc7ef211567edc8f7d5dce52018d", size = 3301570 }, - { url = "https://files.pythonhosted.org/packages/3b/3d/3116a9a7b63e780fb402799b6da227435be878b6846b192f076d2f838654/sqlalchemy-2.0.44-cp312-cp312-win32.whl", hash = "sha256:846541e58b9a81cce7dee8329f352c318de25aa2f2bbe1e31587eb1f057448b4", size = 2103447 }, - { url = "https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl", hash = "sha256:7cbcb47fd66ab294703e1644f78971f6f2f1126424d2b300678f419aa73c7b6e", size = 2130912 }, { url = "https://files.pythonhosted.org/packages/45/d3/c67077a2249fdb455246e6853166360054c331db4613cda3e31ab1cadbef/sqlalchemy-2.0.44-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ff486e183d151e51b1d694c7aa1695747599bb00b9f5f604092b54b74c64a8e1", size = 2135479 }, { url = "https://files.pythonhosted.org/packages/2b/91/eabd0688330d6fd114f5f12c4f89b0d02929f525e6bf7ff80aa17ca802af/sqlalchemy-2.0.44-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b1af8392eb27b372ddb783b317dea0f650241cea5bd29199b22235299ca2e45", size = 2123212 }, { url = "https://files.pythonhosted.org/packages/b0/bb/43e246cfe0e81c018076a16036d9b548c4cc649de241fa27d8d9ca6f85ab/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b61188657e3a2b9ac4e8f04d6cf8e51046e28175f79464c67f2fd35bceb0976", size = 3255353 }, @@ -1730,13 +1568,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728 }, - { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049 }, - { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008 }, - { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665 }, - { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230 }, - { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688 }, - { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694 }, { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802 }, { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995 }, { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948 }, @@ -1841,21 +1672,6 @@ version = "3.6.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c", size = 32744 }, - { url = "https://files.pythonhosted.org/packages/79/35/0429ee11d035fc33abe32dca1b2b69e8c18d236547b9a9b72c1929189b9a/xxhash-3.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b7b2df81a23f8cb99656378e72501b2cb41b1827c0f5a86f87d6b06b69f9f204", size = 30816 }, - { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035 }, - { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914 }, - { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163 }, - { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411 }, - { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883 }, - { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392 }, - { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898 }, - { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655 }, - { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001 }, - { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431 }, - { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617 }, - { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534 }, - { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876 }, { url = "https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:599e64ba7f67472481ceb6ee80fa3bd828fd61ba59fb11475572cc5ee52b89ec", size = 32738 }, { url = "https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d8b8aaa30fca4f16f0c84a5c8d7ddee0e25250ec2796c973775373257dde8f1", size = 30821 }, { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127 }, @@ -1929,22 +1745,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169 } wheels = [ - { url = "https://files.pythonhosted.org/packages/75/ff/46736024fee3429b80a165a732e38e5d5a238721e634ab41b040d49f8738/yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f", size = 142000 }, - { url = "https://files.pythonhosted.org/packages/5a/9a/b312ed670df903145598914770eb12de1bac44599549b3360acc96878df8/yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2", size = 94338 }, - { url = "https://files.pythonhosted.org/packages/ba/f5/0601483296f09c3c65e303d60c070a5c19fcdbc72daa061e96170785bc7d/yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74", size = 94909 }, - { url = "https://files.pythonhosted.org/packages/60/41/9a1fe0b73dbcefce72e46cf149b0e0a67612d60bfc90fb59c2b2efdfbd86/yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df", size = 372940 }, - { url = "https://files.pythonhosted.org/packages/17/7a/795cb6dfee561961c30b800f0ed616b923a2ec6258b5def2a00bf8231334/yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb", size = 345825 }, - { url = "https://files.pythonhosted.org/packages/d7/93/a58f4d596d2be2ae7bab1a5846c4d270b894958845753b2c606d666744d3/yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2", size = 386705 }, - { url = "https://files.pythonhosted.org/packages/61/92/682279d0e099d0e14d7fd2e176bd04f48de1484f56546a3e1313cd6c8e7c/yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82", size = 396518 }, - { url = "https://files.pythonhosted.org/packages/db/0f/0d52c98b8a885aeda831224b78f3be7ec2e1aa4a62091f9f9188c3c65b56/yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a", size = 377267 }, - { url = "https://files.pythonhosted.org/packages/22/42/d2685e35908cbeaa6532c1fc73e89e7f2efb5d8a7df3959ea8e37177c5a3/yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124", size = 365797 }, - { url = "https://files.pythonhosted.org/packages/a2/83/cf8c7bcc6355631762f7d8bdab920ad09b82efa6b722999dfb05afa6cfac/yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa", size = 365535 }, - { url = "https://files.pythonhosted.org/packages/25/e1/5302ff9b28f0c59cac913b91fe3f16c59a033887e57ce9ca5d41a3a94737/yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7", size = 382324 }, - { url = "https://files.pythonhosted.org/packages/bf/cd/4617eb60f032f19ae3a688dc990d8f0d89ee0ea378b61cac81ede3e52fae/yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d", size = 383803 }, - { url = "https://files.pythonhosted.org/packages/59/65/afc6e62bb506a319ea67b694551dab4a7e6fb7bf604e9bd9f3e11d575fec/yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520", size = 374220 }, - { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589 }, - { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213 }, - { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330 }, { url = "https://files.pythonhosted.org/packages/ea/f3/d67de7260456ee105dc1d162d43a019ecad6b91e2f51809d6cddaa56690e/yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53", size = 139980 }, { url = "https://files.pythonhosted.org/packages/01/88/04d98af0b47e0ef42597b9b28863b9060bb515524da0a65d5f4db160b2d5/yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", size = 93424 }, { url = "https://files.pythonhosted.org/packages/18/91/3274b215fd8442a03975ce6bee5fe6aa57a8326b29b9d3d56234a1dca244/yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c", size = 93821 }, @@ -2018,23 +1818,6 @@ version = "0.25.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513 } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size = 795738 }, - { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436 }, - { url = "https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size = 5343019 }, - { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012 }, - { url = "https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size = 5394148 }, - { url = "https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size = 5451652 }, - { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993 }, - { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806 }, - { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659 }, - { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933 }, - { url = "https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size = 5268008 }, - { url = "https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size = 5433517 }, - { url = "https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size = 5814292 }, - { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237 }, - { url = "https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl", hash = "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size = 436922 }, - { url = "https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size = 506276 }, - { url = "https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size = 462679 }, { url = "https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", size = 795735 }, { url = "https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size = 640440 }, { url = "https://files.pythonhosted.org/packages/d9/14/933d27204c2bd404229c69f445862454dcc101cd69ef8c6068f15aaec12c/zstandard-0.25.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", size = 5343070 }, diff --git a/integrations/langgraph/python/poetry.lock b/integrations/langgraph/python/poetry.lock index d5ffe403a..aa5300483 100644 --- a/integrations/langgraph/python/poetry.lock +++ b/integrations/langgraph/python/poetry.lock @@ -1,19 +1,21 @@ -# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. [[package]] name = "ag-ui-protocol" -version = "0.1.7" +version = "0.1.9" description = "" optional = false -python-versions = "<4.0,>=3.9" +python-versions = "^3.9" groups = ["main"] -files = [ - {file = "ag_ui_protocol-0.1.7-py3-none-any.whl", hash = "sha256:8c821662ca6e9852569022f449b9f7aeb3f16aa75390fa8c28ceae2cce642baa"}, - {file = "ag_ui_protocol-0.1.7.tar.gz", hash = "sha256:0e93fd9f7c74d52afbd824d6e9738bd3422e859503905ba7582481cbc3c67ab2"}, -] +files = [] +develop = true [package.dependencies] -pydantic = ">=2.11.2,<3.0.0" +pydantic = "^2.11.2" + +[package.source] +type = "directory" +url = "../../../sdks/python" [[package]] name = "annotated-types" @@ -1473,4 +1475,4 @@ fastapi = ["fastapi"] [metadata] lock-version = "2.1" python-versions = "<3.14,>=3.10" -content-hash = "b4f98fd8fba22b450b106c36ab12b2dc3bdc656b060ac257b5d21b40b51b4f17" +content-hash = "7b62eac41b70b284f5d430698b1e0c8dd23dca37f9178ee00f10edc774f006f5" diff --git a/integrations/langgraph/python/pyproject.toml b/integrations/langgraph/python/pyproject.toml index e64a0051e..26d515725 100644 --- a/integrations/langgraph/python/pyproject.toml +++ b/integrations/langgraph/python/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ag-ui-langgraph" -version = "0.0.17" +version = "0.0.18a0" description = "Implementation of the AG-UI protocol for LangGraph." authors = ["Ran Shem Tov "] readme = "README.md" @@ -10,7 +10,7 @@ exclude = [ [tool.poetry.dependencies] python = "<3.14,>=3.10" -ag-ui-protocol = "==0.1.9" +ag-ui-protocol = "==0.2.0a0" fastapi = { version = "^0.115.12", optional = true } langchain = ">=0.3.0" langchain-core = ">=0.3.0" diff --git a/integrations/langgraph/python/tests/test_multimodal.py b/integrations/langgraph/python/tests/test_multimodal.py new file mode 100644 index 000000000..afc68fffc --- /dev/null +++ b/integrations/langgraph/python/tests/test_multimodal.py @@ -0,0 +1,227 @@ +""" +Tests for multimodal message conversion between AG-UI and LangChain formats. +""" + +import unittest +from ag_ui.core import ( + UserMessage, + TextInputContent, + BinaryInputContent, +) +from langchain_core.messages import HumanMessage + +from ag_ui_langgraph.utils import ( + agui_messages_to_langchain, + langchain_messages_to_agui, + convert_agui_multimodal_to_langchain, + convert_langchain_multimodal_to_agui, + flatten_user_content, +) + + +class TestMultimodalConversion(unittest.TestCase): + """Test multimodal message conversion between AG-UI and LangChain.""" + + def test_agui_text_only_to_langchain(self): + """Test converting a text-only AG-UI message to LangChain.""" + agui_message = UserMessage( + id="test-1", + role="user", + content="Hello, world!" + ) + + lc_messages = agui_messages_to_langchain([agui_message]) + + self.assertEqual(len(lc_messages), 1) + self.assertIsInstance(lc_messages[0], HumanMessage) + self.assertEqual(lc_messages[0].content, "Hello, world!") + self.assertEqual(lc_messages[0].id, "test-1") + + def test_agui_multimodal_to_langchain(self): + """Test converting a multimodal AG-UI message to LangChain.""" + agui_message = UserMessage( + id="test-2", + role="user", + content=[ + TextInputContent(type="text", text="What's in this image?"), + BinaryInputContent( + type="binary", + mime_type="image/jpeg", + url="https://example.com/photo.jpg" + ), + ] + ) + + lc_messages = agui_messages_to_langchain([agui_message]) + + self.assertEqual(len(lc_messages), 1) + self.assertIsInstance(lc_messages[0], HumanMessage) + self.assertIsInstance(lc_messages[0].content, list) + self.assertEqual(len(lc_messages[0].content), 2) + + # Check text content + self.assertEqual(lc_messages[0].content[0]["type"], "text") + self.assertEqual(lc_messages[0].content[0]["text"], "What's in this image?") + + # Check image content + self.assertEqual(lc_messages[0].content[1]["type"], "image_url") + self.assertEqual( + lc_messages[0].content[1]["image_url"]["url"], + "https://example.com/photo.jpg" + ) + + def test_agui_multimodal_with_data_to_langchain(self): + """Test converting AG-UI message with base64 data to LangChain.""" + agui_message = UserMessage( + id="test-3", + role="user", + content=[ + TextInputContent(type="text", text="Analyze this"), + BinaryInputContent( + type="binary", + mime_type="image/png", + data="iVBORw0KGgoAAAANSUhEUgAAAAUA", + filename="test.png" + ), + ] + ) + + lc_messages = agui_messages_to_langchain([agui_message]) + + self.assertEqual(len(lc_messages), 1) + self.assertIsInstance(lc_messages[0].content, list) + self.assertEqual(len(lc_messages[0].content), 2) + + # Check that data URL is properly formatted + image_content = lc_messages[0].content[1] + self.assertEqual(image_content["type"], "image_url") + self.assertTrue( + image_content["image_url"]["url"].startswith("data:image/png;base64,") + ) + + def test_langchain_multimodal_to_agui(self): + """Test converting LangChain multimodal message to AG-UI.""" + lc_message = HumanMessage( + id="test-4", + content=[ + {"type": "text", "text": "What do you see?"}, + { + "type": "image_url", + "image_url": {"url": "https://example.com/image.jpg"} + }, + ] + ) + + agui_messages = langchain_messages_to_agui([lc_message]) + + self.assertEqual(len(agui_messages), 1) + self.assertEqual(agui_messages[0].role, "user") + self.assertIsInstance(agui_messages[0].content, list) + self.assertEqual(len(agui_messages[0].content), 2) + + # Check text content + self.assertIsInstance(agui_messages[0].content[0], TextInputContent) + self.assertEqual(agui_messages[0].content[0].text, "What do you see?") + + # Check binary content + self.assertIsInstance(agui_messages[0].content[1], BinaryInputContent) + self.assertEqual(agui_messages[0].content[1].mime_type, "image/png") + self.assertEqual(agui_messages[0].content[1].url, "https://example.com/image.jpg") + + def test_langchain_data_url_to_agui(self): + """Test converting LangChain data URL to AG-UI.""" + lc_message = HumanMessage( + id="test-5", + content=[ + {"type": "text", "text": "Check this out"}, + { + "type": "image_url", + "image_url": {"url": "data:image/png;base64,iVBORw0KGgo"} + }, + ] + ) + + agui_messages = langchain_messages_to_agui([lc_message]) + + self.assertEqual(len(agui_messages), 1) + self.assertIsInstance(agui_messages[0].content, list) + self.assertEqual(len(agui_messages[0].content), 2) + + # Check that data URL was parsed correctly + binary_content = agui_messages[0].content[1] + self.assertIsInstance(binary_content, BinaryInputContent) + self.assertEqual(binary_content.mime_type, "image/png") + self.assertEqual(binary_content.data, "iVBORw0KGgo") + + def test_flatten_multimodal_content(self): + """Test flattening multimodal content to plain text.""" + content = [ + TextInputContent(type="text", text="Hello"), + BinaryInputContent( + type="binary", + mime_type="image/jpeg", + url="https://example.com/image.jpg" + ), + TextInputContent(type="text", text="World"), + ] + + flattened = flatten_user_content(content) + + self.assertIn("Hello", flattened) + self.assertIn("World", flattened) + self.assertIn("[Binary content: https://example.com/image.jpg]", flattened) + + def test_flatten_with_filename(self): + """Test flattening binary content with filename.""" + content = [ + TextInputContent(type="text", text="Check this file"), + BinaryInputContent( + type="binary", + mime_type="application/pdf", + url="https://example.com/doc.pdf", + filename="report.pdf" + ), + ] + + flattened = flatten_user_content(content) + + self.assertIn("Check this file", flattened) + self.assertIn("[Binary content: report.pdf]", flattened) + + def test_convert_agui_multimodal_to_langchain_helper(self): + """Test the convert_agui_multimodal_to_langchain helper function.""" + agui_content = [ + TextInputContent(type="text", text="Test text"), + BinaryInputContent( + type="binary", + mime_type="image/png", + url="https://example.com/test.png" + ), + ] + + lc_content = convert_agui_multimodal_to_langchain(agui_content) + + self.assertEqual(len(lc_content), 2) + self.assertEqual(lc_content[0]["type"], "text") + self.assertEqual(lc_content[0]["text"], "Test text") + self.assertEqual(lc_content[1]["type"], "image_url") + self.assertEqual(lc_content[1]["image_url"]["url"], "https://example.com/test.png") + + def test_convert_langchain_multimodal_to_agui_helper(self): + """Test the convert_langchain_multimodal_to_agui helper function.""" + lc_content = [ + {"type": "text", "text": "Test text"}, + {"type": "image_url", "image_url": {"url": "https://example.com/test.png"}}, + ] + + agui_content = convert_langchain_multimodal_to_agui(lc_content) + + self.assertEqual(len(agui_content), 2) + self.assertIsInstance(agui_content[0], TextInputContent) + self.assertEqual(agui_content[0].text, "Test text") + self.assertIsInstance(agui_content[1], BinaryInputContent) + self.assertEqual(agui_content[1].url, "https://example.com/test.png") + + +if __name__ == "__main__": + unittest.main() diff --git a/integrations/langgraph/typescript/examples/src/agents/multimodal_messages/agent.ts b/integrations/langgraph/typescript/examples/src/agents/multimodal_messages/agent.ts new file mode 100644 index 000000000..f6c0ac7da --- /dev/null +++ b/integrations/langgraph/typescript/examples/src/agents/multimodal_messages/agent.ts @@ -0,0 +1,120 @@ +/** + * An example demonstrating multimodal message support with images. + * + * This agent demonstrates how to: + * 1. Receive user messages with images + * 2. Process multimodal content (text + images) + * 3. Use vision models to analyze images + * + * Example usage: + * + * ```typescript + * import { UserMessage, TextInputContent, BinaryInputContent } from "@ag-ui/core"; + * + * // Create a multimodal user message + * const message: UserMessage = { + * id: "user-123", + * role: "user", + * content: [ + * { type: "text", text: "What's in this image?" }, + * { + * type: "binary", + * mimeType: "image/jpeg", + * url: "https://example.com/photo.jpg" + * }, + * ], + * }; + * + * // Or with base64 encoded data + * const messageWithData: UserMessage = { + * id: "user-124", + * role: "user", + * content: [ + * { type: "text", text: "Describe this picture" }, + * { + * type: "binary", + * mimeType: "image/png", + * data: "iVBORw0KGgoAAAANSUhEUgAAAAUA...", // base64 encoded + * filename: "screenshot.png" + * }, + * ], + * }; + * ``` + * + * The LangGraph integration automatically handles: + * 1. Converting AG-UI multimodal format to LangChain's format + * 2. Passing multimodal messages to vision models + * 3. Converting responses back to AG-UI format + */ + +import { ChatOpenAI } from "@langchain/openai"; +import { SystemMessage } from "@langchain/core/messages"; +import { RunnableConfig } from "@langchain/core/runnables"; +import { Annotation, MessagesAnnotation, StateGraph, Command, START, END } from "@langchain/langgraph"; + +const AgentStateAnnotation = Annotation.Root({ + tools: Annotation({ + reducer: (x, y) => y ?? x, + default: () => [] + }), + ...MessagesAnnotation.spec, +}); + +type AgentState = typeof AgentStateAnnotation.State; + +async function visionChatNode(state: AgentState, config?: RunnableConfig) { + /** + * Chat node that supports multimodal input including images. + * + * The messages in state can contain multimodal content with text and images. + * LangGraph will automatically handle the conversion from AG-UI format to + * the format expected by the vision model. + */ + + // 1. Use a vision-capable model + // GPT-4o supports vision, as do other models like Claude 3 + const model = new ChatOpenAI({ model: "gpt-4o" }); + + // Define config for the model + if (!config) { + config = { recursionLimit: 25 }; + } + + // 2. Bind tools if needed + const modelWithTools = model.bindTools( + state.tools ?? [], + { + parallel_tool_calls: false, + } + ); + + // 3. Define the system message + const systemMessage = new SystemMessage({ + content: "You are a helpful vision assistant. You can analyze images and " + + "answer questions about them. Describe what you see in detail." + }); + + // 4. Run the model with multimodal messages + // The messages may contain both text and images + const response = await modelWithTools.invoke([ + systemMessage, + ...state.messages, + ], config); + + // 5. Return the response + return new Command({ + goto: END, + update: { + messages: [response] + } + }); +} + +// Define a new graph +const workflow = new StateGraph(AgentStateAnnotation) + .addNode("visionChatNode", visionChatNode) + .addEdge(START, "visionChatNode") + .addEdge("visionChatNode", END); + +// Compile the graph +export const graph = workflow.compile(); diff --git a/integrations/langgraph/typescript/package.json b/integrations/langgraph/typescript/package.json index e465fb9d5..e6e4cd5a1 100644 --- a/integrations/langgraph/typescript/package.json +++ b/integrations/langgraph/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@ag-ui/langgraph", - "version": "0.0.18", + "version": "0.0.19-alpha.1", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", @@ -29,8 +29,8 @@ "rxjs": "7.8.1" }, "peerDependencies": { - "@ag-ui/core": ">=0.0.38", - "@ag-ui/client": ">=0.0.38" + "@ag-ui/core": "0.0.40-alpha.7", + "@ag-ui/client": "0.0.40-alpha.7" }, "devDependencies": { "@ag-ui/core": "workspace:*", diff --git a/integrations/langgraph/typescript/src/utils.test.ts b/integrations/langgraph/typescript/src/utils.test.ts new file mode 100644 index 000000000..5042c6e20 --- /dev/null +++ b/integrations/langgraph/typescript/src/utils.test.ts @@ -0,0 +1,224 @@ +/** + * Tests for multimodal message conversion between AG-UI and LangChain formats. + */ + +import { Message as LangGraphMessage } from "@langchain/langgraph-sdk"; +import { Message, UserMessage, TextInputContent, BinaryInputContent } from "@ag-ui/client"; +import { aguiMessagesToLangChain, langchainMessagesToAgui } from "./utils"; + +describe("Multimodal Message Conversion", () => { + describe("aguiMessagesToLangChain", () => { + it("should convert text-only AG-UI message to LangChain", () => { + const aguiMessage: UserMessage = { + id: "test-1", + role: "user", + content: "Hello, world!", + }; + + const lcMessages = aguiMessagesToLangChain([aguiMessage]); + + expect(lcMessages).toHaveLength(1); + expect(lcMessages[0].type).toBe("human"); + expect(lcMessages[0].content).toBe("Hello, world!"); + expect(lcMessages[0].id).toBe("test-1"); + }); + + it("should convert multimodal AG-UI message to LangChain", () => { + const aguiMessage: UserMessage = { + id: "test-2", + role: "user", + content: [ + { type: "text", text: "What's in this image?" }, + { + type: "binary", + mimeType: "image/jpeg", + url: "https://example.com/photo.jpg", + }, + ], + }; + + const lcMessages = aguiMessagesToLangChain([aguiMessage]); + + expect(lcMessages).toHaveLength(1); + expect(lcMessages[0].type).toBe("human"); + expect(Array.isArray(lcMessages[0].content)).toBe(true); + + const content = lcMessages[0].content as Array; + expect(content).toHaveLength(2); + + // Check text content + expect(content[0].type).toBe("text"); + expect(content[0].text).toBe("What's in this image?"); + + // Check image content + expect(content[1].type).toBe("image_url"); + expect(content[1].image_url.url).toBe("https://example.com/photo.jpg"); + }); + + it("should convert AG-UI message with base64 data to LangChain", () => { + const aguiMessage: UserMessage = { + id: "test-3", + role: "user", + content: [ + { type: "text", text: "Analyze this" }, + { + type: "binary", + mimeType: "image/png", + data: "iVBORw0KGgoAAAANSUhEUgAAAAUA", + filename: "test.png", + }, + ], + }; + + const lcMessages = aguiMessagesToLangChain([aguiMessage]); + + expect(lcMessages).toHaveLength(1); + expect(Array.isArray(lcMessages[0].content)).toBe(true); + + const content = lcMessages[0].content as Array; + expect(content).toHaveLength(2); + + // Check that data URL is properly formatted + const imageContent = content[1]; + expect(imageContent.type).toBe("image_url"); + expect(imageContent.image_url.url).toContain("data:image/png;base64,"); + }); + }); + + describe("langchainMessagesToAgui", () => { + it("should convert text-only LangChain message to AG-UI", () => { + const lcMessage: LangGraphMessage = { + id: "test-4", + type: "human", + content: "Hello from LangChain", + }; + + const aguiMessages = langchainMessagesToAgui([lcMessage]); + + expect(aguiMessages).toHaveLength(1); + expect(aguiMessages[0].role).toBe("user"); + expect(aguiMessages[0].content).toBe("Hello from LangChain"); + }); + + it("should convert LangChain multimodal message to AG-UI", () => { + const lcMessage: LangGraphMessage = { + id: "test-5", + type: "human", + content: [ + { type: "text", text: "What do you see?" }, + { + type: "image_url", + image_url: { url: "https://example.com/image.jpg" }, + }, + ] as any, + }; + + const aguiMessages = langchainMessagesToAgui([lcMessage]); + + expect(aguiMessages).toHaveLength(1); + expect(aguiMessages[0].role).toBe("user"); + expect(Array.isArray(aguiMessages[0].content)).toBe(true); + + const content = aguiMessages[0].content as Array; + expect(content).toHaveLength(2); + + // Check text content + expect(content[0].type).toBe("text"); + expect((content[0] as TextInputContent).text).toBe("What do you see?"); + + // Check binary content + expect(content[1].type).toBe("binary"); + expect((content[1] as BinaryInputContent).mimeType).toBe("image/png"); + expect((content[1] as BinaryInputContent).url).toBe("https://example.com/image.jpg"); + }); + + it("should convert LangChain data URL to AG-UI", () => { + const lcMessage: LangGraphMessage = { + id: "test-6", + type: "human", + content: [ + { type: "text", text: "Check this out" }, + { + type: "image_url", + image_url: { url: "data:image/png;base64,iVBORw0KGgo" }, + }, + ] as any, + }; + + const aguiMessages = langchainMessagesToAgui([lcMessage]); + + expect(aguiMessages).toHaveLength(1); + expect(Array.isArray(aguiMessages[0].content)).toBe(true); + + const content = aguiMessages[0].content as Array; + expect(content).toHaveLength(2); + + // Check that data URL was parsed correctly + const binaryContent = content[1] as BinaryInputContent; + expect(binaryContent.type).toBe("binary"); + expect(binaryContent.mimeType).toBe("image/png"); + expect(binaryContent.data).toBe("iVBORw0KGgo"); + }); + }); + + describe("Edge cases", () => { + it("should handle empty content arrays", () => { + const aguiMessage: UserMessage = { + id: "test-7", + role: "user", + content: [], + }; + + const lcMessages = aguiMessagesToLangChain([aguiMessage]); + + expect(lcMessages).toHaveLength(1); + expect(Array.isArray(lcMessages[0].content)).toBe(true); + expect((lcMessages[0].content as Array)).toHaveLength(0); + }); + + it("should handle binary content with only id", () => { + const aguiMessage: UserMessage = { + id: "test-8", + role: "user", + content: [ + { + type: "binary", + mimeType: "image/jpeg", + id: "img-123", + }, + ], + }; + + const lcMessages = aguiMessagesToLangChain([aguiMessage]); + + expect(lcMessages).toHaveLength(1); + const content = lcMessages[0].content as Array; + expect(content).toHaveLength(1); + expect(content[0].type).toBe("image_url"); + expect(content[0].image_url.url).toBe("img-123"); + }); + + it("should skip binary content without any source", () => { + const aguiMessage: UserMessage = { + id: "test-9", + role: "user", + content: [ + { type: "text", text: "Hello" }, + { + type: "binary", + mimeType: "image/jpeg", + // No url, data, or id + } as BinaryInputContent, + ], + }; + + const lcMessages = aguiMessagesToLangChain([aguiMessage]); + + expect(lcMessages).toHaveLength(1); + const content = lcMessages[0].content as Array; + // Binary content should be skipped, only text remains + expect(content).toHaveLength(1); + expect(content[0].type).toBe("text"); + }); + }); +}); diff --git a/integrations/langgraph/typescript/src/utils.ts b/integrations/langgraph/typescript/src/utils.ts index d69ac6778..8866a9d7f 100644 --- a/integrations/langgraph/typescript/src/utils.ts +++ b/integrations/langgraph/typescript/src/utils.ts @@ -1,6 +1,6 @@ import { Message as LangGraphMessage } from "@langchain/langgraph-sdk"; import { State, SchemaKeys, LangGraphReasoning } from "./types"; -import { Message, ToolCall } from "@ag-ui/client"; +import { Message, ToolCall, TextInputContent, BinaryInputContent, InputContent , UserMessage} from "@ag-ui/client"; export const DEFAULT_SCHEMA_KEYS = ["messages", "tools"]; @@ -26,21 +26,118 @@ export function getStreamPayloadInput({ return input; } +/** + * Convert LangChain's multimodal content to AG-UI format + */ +function convertLangchainMultimodalToAgui( + content: Array<{ type: string; text?: string; image_url?: any }> +): InputContent[] { + const aguiContent: InputContent[] = []; + + for (const item of content) { + if (item.type === "text" && item.text) { + aguiContent.push({ + type: "text", + text: item.text, + }); + } else if (item.type === "image_url") { + const imageUrl = typeof item.image_url === "string" + ? item.image_url + : item.image_url?.url; + + if (!imageUrl) continue; + + // Parse data URLs to extract base64 data + if (imageUrl.startsWith("data:")) { + // Format: data:mime_type;base64,data + const [header, data] = imageUrl.split(",", 2); + const mimeType = header.includes(":") + ? header.split(":")[1].split(";")[0] + : "image/png"; + + aguiContent.push({ + type: "binary", + mimeType, + data: data || "", + }); + } else { + // Regular URL or ID + aguiContent.push({ + type: "binary", + mimeType: "image/png", // Default MIME type + url: imageUrl, + }); + } + } + } + + return aguiContent; +} + +/** + * Convert AG-UI multimodal content to LangChain's format + */ +function convertAguiMultimodalToLangchain( + content: InputContent[] +): Array<{ type: string; text?: string; image_url?: { url: string } }> { + const langchainContent: Array<{ type: string; text?: string; image_url?: { url: string } }> = []; + + for (const item of content) { + if (item.type === "text") { + langchainContent.push({ + type: "text", + text: item.text, + }); + } else if (item.type === "binary") { + // LangChain uses image_url format (OpenAI-style) + let url: string; + + // Prioritize url, then data, then id + if (item.url) { + url = item.url; + } else if (item.data) { + // Construct data URL from base64 data + url = `data:${item.mimeType};base64,${item.data}`; + } else if (item.id) { + // Use id as a reference + url = item.id; + } else { + continue; // Skip if no source is provided + } + + langchainContent.push({ + type: "image_url", + image_url: { url }, + }); + } + } + + return langchainContent; +} + export function langchainMessagesToAgui(messages: LangGraphMessage[]): Message[] { return messages.map((message) => { switch (message.type) { case "human": + // Handle multimodal content + let userContent: string | InputContent[]; + if (Array.isArray(message.content)) { + userContent = convertLangchainMultimodalToAgui(message.content as any); + } else { + userContent = stringifyIfNeeded(resolveMessageContent(message.content)); + } + return { id: message.id!, role: "user", - content: stringifyIfNeeded(resolveMessageContent(message.content)), + content: userContent, }; case "ai": - const content = resolveMessageContent(message.content) + const aiContent = resolveMessageContent(message.content) return { id: message.id!, role: "assistant", - content: content ? stringifyIfNeeded(content) : '', + content: aiContent ? stringifyIfNeeded(aiContent) : '', toolCalls: message.tool_calls?.map((tc) => ({ id: tc.id!, type: "function", @@ -73,12 +170,22 @@ export function aguiMessagesToLangChain(messages: Message[]): LangGraphMessage[] return messages.map((message, index) => { switch (message.role) { case "user": + // Handle multimodal content + let content: UserMessage['content']; + if (typeof message.content === "string") { + content = message.content; + } else if (Array.isArray(message.content)) { + content = convertAguiMultimodalToLangchain(message.content) as any; + } else { + content = String(message.content); + } + return { id: message.id, role: message.role, - content: message.content, + content, type: "human", - }; + } as LangGraphMessage; case "assistant": return { id: message.id, @@ -119,6 +226,42 @@ function stringifyIfNeeded(item: any) { return JSON.stringify(item); } +/** + * Flatten multimodal content into plain text. + * Used for backwards compatibility or when multimodal is not supported. + */ +function flattenUserContent(content: Message["content"]): string { + if (typeof content === "string") { + return content; + } + + if (!Array.isArray(content)) { + return ""; + } + + const parts: string[] = []; + + for (const item of content) { + if (item.type === "text" && "text" in item) { + if (item.text) { + parts.push(item.text); + } + } else if (item.type === "binary" && "mimeType" in item) { + // Add descriptive placeholder for binary content + const binaryItem = item as BinaryInputContent; + if (binaryItem.filename) { + parts.push(`[Binary content: ${binaryItem.filename}]`); + } else if (binaryItem.url) { + parts.push(`[Binary content: ${binaryItem.url}]`); + } else { + parts.push(`[Binary content: ${binaryItem.mimeType}]`); + } + } + } + + return parts.join("\n"); +} + export function resolveReasoningContent(eventData: any): LangGraphReasoning | null { const content = eventData.chunk?.content diff --git a/integrations/llama-index/typescript/package.json b/integrations/llama-index/typescript/package.json index bb2226b9b..6b37b380a 100644 --- a/integrations/llama-index/typescript/package.json +++ b/integrations/llama-index/typescript/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/llamaindex", "author": "Logan Markewich ", - "version": "0.1.4", + "version": "0.1.5", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", diff --git a/integrations/llama-index/typescript/src/index.ts b/integrations/llama-index/typescript/src/index.ts index b89fe27d8..f4a08b8eb 100644 --- a/integrations/llama-index/typescript/src/index.ts +++ b/integrations/llama-index/typescript/src/index.ts @@ -34,6 +34,10 @@ function normalizeEmptyToolResults(messages: Message[]): Message[] { } export class LlamaIndexAgent extends HttpAgent { + public override get maxVersion(): string { + return "0.0.39"; + } + public override run(input: RunAgentInput): Observable { const sanitizedInput: RunAgentInput = { ...input, diff --git a/integrations/mastra/typescript/examples/.gitignore b/integrations/mastra/typescript/examples/.gitignore index 5c90d73b1..c4d033e9d 100644 --- a/integrations/mastra/typescript/examples/.gitignore +++ b/integrations/mastra/typescript/examples/.gitignore @@ -2,6 +2,7 @@ output.txt node_modules dist .mastra +.npm-cache .env.development .env *.db diff --git a/integrations/mastra/typescript/src/mastra.ts b/integrations/mastra/typescript/src/mastra.ts index 63aab3f86..27cbe4425 100644 --- a/integrations/mastra/typescript/src/mastra.ts +++ b/integrations/mastra/typescript/src/mastra.ts @@ -40,7 +40,11 @@ export interface MastraAgentConfig extends AgentConfig { interface MastraAgentStreamOptions { onTextPart?: (text: string) => void; onFinishMessagePart?: () => void; - onToolCallPart?: (streamPart: { toolCallId: string; toolName: string; args: any }) => void; + onToolCallPart?: (streamPart: { + toolCallId: string; + toolName: string; + args: any; + }) => void; onToolResultPart?: (streamPart: { toolCallId: string; result: any }) => void; onError?: (error: Error) => void; onRunFinished?: () => Promise; @@ -51,13 +55,18 @@ export class MastraAgent extends AbstractAgent { resourceId?: string; runtimeContext?: RuntimeContext; - constructor({ agent, resourceId, runtimeContext, ...rest }: MastraAgentConfig) { + constructor(private config: MastraAgentConfig) { + const { agent, resourceId, runtimeContext, ...rest } = config; super(rest); this.agent = agent; this.resourceId = resourceId; this.runtimeContext = runtimeContext ?? new RuntimeContext(); } + public clone() { + return new MastraAgent(this.config); + } + run(input: RunAgentInput): Observable { let messageId = randomUUID(); @@ -75,7 +84,11 @@ export class MastraAgent extends AbstractAgent { if (this.isLocalMastraAgent(this.agent)) { const memory = await this.agent.getMemory(); - if (memory && input.state && Object.keys(input.state || {}).length > 0) { + if ( + memory && + input.state && + Object.keys(input.state || {}).length > 0 + ) { let thread: StorageThreadType | null = await memory.getThreadById({ threadId: input.threadId, }); @@ -91,9 +104,14 @@ export class MastraAgent extends AbstractAgent { }; } - const existingMemory = JSON.parse((thread.metadata?.workingMemory as string) ?? "{}"); + const existingMemory = JSON.parse( + (thread.metadata?.workingMemory as string) ?? "{}", + ); const { messages, ...rest } = input.state; - const workingMemory = JSON.stringify({ ...existingMemory, ...rest }); + const workingMemory = JSON.stringify({ + ...existingMemory, + ...rest, + }); // Update thread metadata with new working memory await memory.saveThread({ @@ -215,7 +233,9 @@ export class MastraAgent extends AbstractAgent { }); } - isLocalMastraAgent(agent: LocalMastraAgent | RemoteMastraAgent): agent is LocalMastraAgent { + isLocalMastraAgent( + agent: LocalMastraAgent | RemoteMastraAgent, + ): agent is LocalMastraAgent { return "getMemory" in agent; } @@ -367,7 +387,9 @@ export class MastraAgent extends AbstractAgent { return getRemoteAgents(options); } - static getLocalAgents(options: GetLocalAgentsOptions): Record { + static getLocalAgents( + options: GetLocalAgentsOptions, + ): Record { return getLocalAgents(options); } diff --git a/integrations/mastra/typescript/src/utils.ts b/integrations/mastra/typescript/src/utils.ts index 665e846fa..e775d353f 100644 --- a/integrations/mastra/typescript/src/utils.ts +++ b/integrations/mastra/typescript/src/utils.ts @@ -1,4 +1,4 @@ -import type { Message } from "@ag-ui/client"; +import type { InputContent, Message } from "@ag-ui/client"; import { AbstractAgent } from "@ag-ui/client"; import { MastraClient } from "@mastra/client-js"; import type { CoreMessage, Mastra } from "@mastra/core"; @@ -6,12 +6,39 @@ import { Agent as LocalMastraAgent } from "@mastra/core/agent"; import { RuntimeContext } from "@mastra/core/runtime-context"; import { MastraAgent } from "./mastra"; +const toMastraTextContent = (content: Message["content"]): string => { + if (!content) { + return ""; + } + + if (typeof content === "string") { + return content; + } + + if (!Array.isArray(content)) { + return ""; + } + + type TextInput = Extract; + + const textParts = content + .filter((part): part is TextInput => part.type === "text") + .map((part: TextInput) => part.text.trim()) + .filter(Boolean); + + return textParts.join("\n"); +}; + export function convertAGUIMessagesToMastra(messages: Message[]): CoreMessage[] { const result: CoreMessage[] = []; for (const message of messages) { if (message.role === "assistant") { - const parts: any[] = message.content ? [{ type: "text", text: message.content }] : []; + const assistantContent = toMastraTextContent(message.content); + const parts: any[] = []; + if (assistantContent) { + parts.push({ type: "text", text: assistantContent }); + } for (const toolCall of message.toolCalls ?? []) { parts.push({ type: "tool-call", @@ -25,9 +52,10 @@ export function convertAGUIMessagesToMastra(messages: Message[]): CoreMessage[] content: parts, }); } else if (message.role === "user") { + const userContent = toMastraTextContent(message.content); result.push({ role: "user", - content: message.content || "", + content: userContent, }); } else if (message.role === "tool") { let toolName = "unknown"; diff --git a/integrations/pydantic-ai/typescript/package.json b/integrations/pydantic-ai/typescript/package.json index e53c3a2ae..d1b203e9d 100644 --- a/integrations/pydantic-ai/typescript/package.json +++ b/integrations/pydantic-ai/typescript/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/pydantic-ai", "author": "Steven Hartland ", - "version": "0.0.1", + "version": "0.0.2", "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", diff --git a/integrations/pydantic-ai/typescript/src/index.ts b/integrations/pydantic-ai/typescript/src/index.ts index f3a3190a8..1232063a6 100644 --- a/integrations/pydantic-ai/typescript/src/index.ts +++ b/integrations/pydantic-ai/typescript/src/index.ts @@ -1,3 +1,7 @@ import { HttpAgent } from "@ag-ui/client"; -export class PydanticAIAgent extends HttpAgent {} +export class PydanticAIAgent extends HttpAgent { + public override get maxVersion(): string { + return "0.0.39"; + } +} diff --git a/integrations/vercel-ai-sdk/typescript/src/index.ts b/integrations/vercel-ai-sdk/typescript/src/index.ts index e2d3436c4..e00c68234 100644 --- a/integrations/vercel-ai-sdk/typescript/src/index.ts +++ b/integrations/vercel-ai-sdk/typescript/src/index.ts @@ -25,10 +25,59 @@ import { tool as createVercelAISDKTool, ToolChoice, ToolSet, + FilePart, + ImagePart, + TextPart, } from "ai"; import { randomUUID } from "@ag-ui/client"; import { z } from "zod"; +type VercelUserContent = Extract["content"]; +type VercelUserArrayContent = Extract; +type VercelUserPart = + VercelUserArrayContent extends Array ? Part : never; + +const toVercelUserParts = ( + inputContent: Message["content"], +): VercelUserPart[] => { + if (!Array.isArray(inputContent)) { + return []; + } + + const parts: VercelUserPart[] = []; + + for (const part of inputContent) { + if (part.type === "text") { + parts.push({ type: "text", text: part.text } as VercelUserPart); + } + } + + return parts; +}; + +const toVercelUserContent = ( + content: Message["content"], +): VercelUserContent => { + if (!content) { + return ""; + } + + if (typeof content === "string") { + return content; + } + + const parts = toVercelUserParts(content); + if (parts.length === 0) { + return ""; + } + + if (parts.length === 1 && parts[0].type === "text") { + return parts[0].text; + } + + return parts; +}; + type ProcessedEvent = | MessagesSnapshotEvent | RunFinishedEvent @@ -48,13 +97,18 @@ export class VercelAISDKAgent extends AbstractAgent { model: LanguageModelV1; maxSteps: number; toolChoice: ToolChoice>; - constructor({ model, maxSteps, toolChoice, ...rest }: VercelAISDKAgentConfig) { + constructor(private config: VercelAISDKAgentConfig) { + const { model, maxSteps, toolChoice, ...rest } = config; super({ ...rest }); this.model = model; this.maxSteps = maxSteps ?? 1; this.toolChoice = toolChoice ?? "auto"; } + public clone() { + return new VercelAISDKAgent(this.config); + } + run(input: RunAgentInput): Observable { const finalMessages: Message[] = input.messages; @@ -167,12 +221,16 @@ export class VercelAISDKAgent extends AbstractAgent { } } -export function convertMessagesToVercelAISDKMessages(messages: Message[]): CoreMessage[] { +export function convertMessagesToVercelAISDKMessages( + messages: Message[], +): CoreMessage[] { const result: CoreMessage[] = []; for (const message of messages) { if (message.role === "assistant") { - const parts: any[] = message.content ? [{ type: "text", text: message.content }] : []; + const parts: any[] = message.content + ? [{ type: "text", text: message.content }] + : []; for (const toolCall of message.toolCalls ?? []) { parts.push({ type: "tool-call", @@ -188,7 +246,7 @@ export function convertMessagesToVercelAISDKMessages(messages: Message[]): CoreM } else if (message.role === "user") { result.push({ role: "user", - content: message.content || "", + content: toVercelUserContent(message.content), }); } else if (message.role === "tool") { let toolName = "unknown"; @@ -219,7 +277,10 @@ export function convertMessagesToVercelAISDKMessages(messages: Message[]): CoreM return result; } -export function convertJsonSchemaToZodSchema(jsonSchema: any, required: boolean): z.ZodSchema { +export function convertJsonSchemaToZodSchema( + jsonSchema: any, + required: boolean, +): z.ZodSchema { if (jsonSchema.type === "object") { const spec: { [key: string]: z.ZodSchema } = {}; @@ -252,7 +313,9 @@ export function convertJsonSchemaToZodSchema(jsonSchema: any, required: boolean) throw new Error("Invalid JSON schema"); } -export function convertToolToVerlAISDKTools(tools: RunAgentInput["tools"]): ToolSet { +export function convertToolToVerlAISDKTools( + tools: RunAgentInput["tools"], +): ToolSet { return tools.reduce( (acc: ToolSet, tool: RunAgentInput["tools"][number]) => ({ ...acc, diff --git a/middlewares/a2a-middleware/src/index.ts b/middlewares/a2a-middleware/src/index.ts index 7e5b90e16..3ddc5f8bb 100644 --- a/middlewares/a2a-middleware/src/index.ts +++ b/middlewares/a2a-middleware/src/index.ts @@ -16,7 +16,11 @@ import { } from "@ag-ui/client"; import { A2AClient } from "@a2a-js/sdk/client"; -import { AgentCard, SendMessageResponse, SendMessageSuccessResponse } from "@a2a-js/sdk"; +import { + AgentCard, + SendMessageResponse, + SendMessageSuccessResponse, +} from "@a2a-js/sdk"; import { Observable, Subscriber, tap } from "rxjs"; import { createSystemPrompt, sendMessageToA2AAgentTool } from "./utils"; import { randomUUID } from "@ag-ui/client"; @@ -37,7 +41,9 @@ export class A2AMiddlewareAgent extends AbstractAgent { super(config); this.instructions = config.instructions; this.agentClients = config.agentUrls.map((url) => new A2AClient(url)); - this.agentCards = Promise.all(this.agentClients.map((client) => client.getAgentCard())); + this.agentCards = Promise.all( + this.agentClients.map((client) => client.getAgentCard()), + ); this.orchestrationAgent = config.orchestrationAgent; } @@ -73,7 +79,11 @@ export class A2AMiddlewareAgent extends AbstractAgent { // Apply events to get mutations const mutations$ = this.apply(input, source$, this.subscribers); // Process the mutations - const processedMutations$ = this.processApplyEvents(input, mutations$, this.subscribers); + const processedMutations$ = this.processApplyEvents( + input, + mutations$, + this.subscribers, + ); // Subscribe to the processed mutations to trigger side effects processedMutations$.subscribe(); // Return the original stream to maintain BaseEvent type @@ -94,7 +104,11 @@ export class A2AMiddlewareAgent extends AbstractAgent { }; return stream - .pipe(transformChunks(this.debug), applyAndProcessEvents, tap(markTextMessageAsPending)) + .pipe( + transformChunks(this.debug), + applyAndProcessEvents, + tap(markTextMessageAsPending), + ) .subscribe({ next: (event: BaseEvent) => { // Handle tool call start events for send_message_to_a2a_agent @@ -102,7 +116,9 @@ export class A2AMiddlewareAgent extends AbstractAgent { event.type === EventType.TOOL_CALL_START && "toolCallName" in event && "toolCallId" in event && - (event as ToolCallStartEvent).toolCallName.startsWith("send_message_to_a2a_agent") + (event as ToolCallStartEvent).toolCallName.startsWith( + "send_message_to_a2a_agent", + ) ) { // Track this as a pending A2A call pendingA2ACalls.add(event.toolCallId as string); @@ -139,14 +155,19 @@ export class A2AMiddlewareAgent extends AbstractAgent { const toolArgs = toolCallsFromMessages[0]?.function.arguments; if (!toolArgs) { - throw new Error(`Tool arguments not found for tool call id ${toolCallId}`); + throw new Error( + `Tool arguments not found for tool call id ${toolCallId}`, + ); } const parsed = JSON.parse(toolArgs); const agentName = parsed.agentName; const task = parsed.task; if (this.debug) { - console.debug("sending message to a2a agent", { agentName, message: task }); + console.debug("sending message to a2a agent", { + agentName, + message: task, + }); } return this.sendMessageToA2AAgent(agentName, task) .then((a2aResponse) => { @@ -195,7 +216,12 @@ export class A2AMiddlewareAgent extends AbstractAgent { input.messages.push(msg); }); - this.triggerNewRun(observer, input, pendingA2ACalls, pendingTextMessages); + this.triggerNewRun( + observer, + input, + pendingA2ACalls, + pendingTextMessages, + ); }); } else { observer.next(event); @@ -233,7 +259,10 @@ export class A2AMiddlewareAgent extends AbstractAgent { let pendingA2ACalls = new Set(); const pendingTextMessages = new Set(); const agentCards = await this.agentCards; - const newSystemPrompt = createSystemPrompt(agentCards, this.instructions); + const newSystemPrompt = createSystemPrompt( + agentCards, + this.instructions, + ); const messages = input.messages; if (messages.length && messages[0].role === "system") { @@ -250,13 +279,21 @@ export class A2AMiddlewareAgent extends AbstractAgent { input.tools = [...(input.tools || []), sendMessageToA2AAgentTool]; // Start the orchestration agent run - this.triggerNewRun(observer, input, pendingA2ACalls, pendingTextMessages); + this.triggerNewRun( + observer, + input, + pendingA2ACalls, + pendingTextMessages, + ); }; run(); }); } - private async sendMessageToA2AAgent(agentName: string, args: string): Promise { + private async sendMessageToA2AAgent( + agentName: string, + args: string, + ): Promise { const agentCards = await this.agentCards; const agents = agentCards.map((card, index) => { @@ -289,7 +326,11 @@ export class A2AMiddlewareAgent extends AbstractAgent { const result = (sendResponse as SendMessageSuccessResponse).result; let responseContent = ""; - if (result.kind === "message" && result.parts.length > 0 && result.parts[0].kind === "text") { + if ( + result.kind === "message" && + result.parts.length > 0 && + result.parts[0].kind === "text" + ) { responseContent = result.parts[0].text; } else { responseContent = JSON.stringify(result); @@ -305,6 +346,12 @@ export class A2AMiddlewareAgent extends AbstractAgent { pendingTextMessages: Set, ): void { const newRunStream = this.orchestrationAgent.run(input); - this.wrapStream(newRunStream, pendingA2ACalls, pendingTextMessages, observer, input); + this.wrapStream( + newRunStream, + pendingA2ACalls, + pendingTextMessages, + observer, + input, + ); } } diff --git a/package.json b/package.json index 8e7e9a40c..ec3d2bda9 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "check-types": "turbo run check-types", "test": "turbo run test", "create-integration": "pnpm dlx tsx create-integration.ts", - "bump": "pnpm --filter './packages/*' exec -- pnpm version", - "bump:alpha": "pnpm --filter './packages/*' exec -- pnpm version --preid alpha", - "publish": "pnpm -r clean && pnpm install && turbo run build && pnpm publish -r --filter='./packages/*'", + "bump": "pnpm --filter './sdks/typescript/packages/*' exec -- pnpm version", + "bump:alpha": "pnpm --filter './sdks/typescript/packages/*' exec -- pnpm version --preid alpha", + "publish": "pnpm -r clean && pnpm install && turbo run build && pnpm publish -r --filter='./sdks/typescript/packages/*'", "publish:integrations": "pnpm -r clean && pnpm install && turbo run build && pnpm publish -r --filter='./integrations/*'", - "publish:alpha": "pnpm -r clean && pnpm install && turbo run build && pnpm publish -r --no-git-checks --filter='./packages/*' --tag alpha" + "publish:alpha": "pnpm -r clean && pnpm install && turbo run build && pnpm publish -r --no-git-checks --filter='./sdks/typescript/packages/*' --tag alpha" }, "devDependencies": { "prettier": "^3.5.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70be6bfa3..0758e2016 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,6 +66,12 @@ importers: apps/dojo: dependencies: + '@a2a-js/sdk': + specifier: 0.2.5 + version: 0.2.5 + '@ag-ui/a2a': + specifier: workspace:* + version: link:../../integrations/a2a/typescript '@ag-ui/a2a-middleware': specifier: workspace:* version: link:../../middlewares/a2a-middleware @@ -128,13 +134,22 @@ importers: version: 1.10.6(@types/react@19.2.2)(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@copilotkit/runtime': specifier: 1.10.6 - version: 1.10.6(43a54c62826e391639c20a8a0387b983) + version: 1.10.6(iqshwn2xropb3vpfei3flnb2ay) '@copilotkit/runtime-client-gql': specifier: 1.10.6 version: 1.10.6(graphql@16.11.0)(react@19.2.0) '@copilotkit/shared': specifier: 1.10.6 version: 1.10.6 + '@copilotkitnext/agent': + specifier: 0.0.19-alpha.0 + version: 0.0.19-alpha.0 + '@copilotkitnext/react': + specifier: 0.0.19-alpha.0 + version: 0.0.19-alpha.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@copilotkitnext/runtime': + specifier: 0.0.19-alpha.0 + version: 0.0.19-alpha.0(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) '@mastra/client-js': specifier: ^0.15.2 version: 0.15.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) @@ -216,6 +231,9 @@ importers: fast-json-patch: specifier: ^3.1.1 version: 3.1.1 + hono: + specifier: ^4.10.3 + version: 4.10.3 lucide-react: specifier: ^0.477.0 version: 0.477.0(react@19.2.0) @@ -314,6 +332,40 @@ importers: specifier: ^1.1.0 version: 1.1.0 + integrations/a2a/typescript: + dependencies: + '@a2a-js/sdk': + specifier: ^0.2.2 + version: 0.2.5 + rxjs: + specifier: 7.8.1 + version: 7.8.1 + devDependencies: + '@ag-ui/client': + specifier: workspace:* + version: link:../../../sdks/typescript/packages/client + '@ag-ui/core': + specifier: workspace:* + version: link:../../../sdks/typescript/packages/core + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 + '@types/node': + specifier: ^20.11.19 + version: 20.19.21 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.19.21) + ts-jest: + specifier: ^29.1.2 + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) + tsup: + specifier: ^8.0.2 + version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) + typescript: + specifier: ^5.3.3 + version: 5.9.3 + integrations/adk-middleware/typescript: dependencies: rxjs: @@ -359,7 +411,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -390,7 +442,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -421,7 +473,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -433,10 +485,10 @@ importers: dependencies: '@langchain/core': specifier: ^0.3.66 - version: 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) + version: 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)) '@langchain/langgraph-sdk': specifier: ^0.1.2 - version: 0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) partial-json: specifier: ^0.1.7 version: 0.1.7 @@ -461,7 +513,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -492,7 +544,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -507,7 +559,7 @@ importers: version: 1.2.11(zod@3.25.76) '@copilotkit/runtime': specifier: ^1.10.5 - version: 1.10.6(2963fdc46a5185bf1f60e289781c45cd) + version: 1.10.6(jkrvcwfv2zltibfgwihn5nuqn4) '@mastra/client-js': specifier: ^0.15.2 version: 0.15.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) @@ -538,7 +590,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -603,7 +655,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -631,7 +683,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -659,7 +711,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -696,7 +748,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -733,7 +785,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -761,7 +813,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -795,7 +847,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -817,6 +869,9 @@ importers: '@types/uuid': specifier: ^10.0.0 version: 10.0.0 + compare-versions: + specifier: ^6.1.1 + version: 6.1.1 fast-json-patch: specifier: ^3.1.1 version: 3.1.1 @@ -844,7 +899,7 @@ importers: version: 29.7.0(@types/node@20.19.21) ts-jest: specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) + version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) tsup: specifier: ^8.0.2 version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) @@ -953,32 +1008,44 @@ packages: '@ag-ui/client@0.0.35': resolution: {integrity: sha512-rHtMQSU232dZeVx9qAGt1+j4ar4RWqwFanXcyNxAwbAh0XrY7VZeXFBDUeazy1LtBoViS7xehX8V1Ssf1a+bUw==} + '@ag-ui/client@0.0.40-alpha.10': + resolution: {integrity: sha512-b1hcS1+nMzsNSSt4E3tryFD4Bd9DQqcqYg0R1CeD9dx4bbDg2cF0sjtUBDpbAQ6N3l4438VranGE9Sj+UozUBg==} + '@ag-ui/core@0.0.35': resolution: {integrity: sha512-YAqrln3S3fdo+Hs5FFQPODXiBttyilv/E3xSSHCuxqC0Y/Fp3+VqyDx97BorO3NVp2VKZ9cG2nsO3cbmcTwkQw==} '@ag-ui/core@0.0.37': resolution: {integrity: sha512-7bmjPn1Ol0Zo00F+MrPr0eOwH4AFZbhmq/ZMhCsrMILtVYBiBLcLU9QFBpBL3Zm9MCHha8b79N7JE2FzwcMaVA==} - '@ag-ui/core@0.0.39': - resolution: {integrity: sha512-T5Hp4oFkQ+H5MynWAvSwrX/rNYJOD+PJ4qPQ0o771oSZQAxoIvDDft47Cx5wRyBNNLXAe1RWqJjfWUUwJFNKqA==} + '@ag-ui/core@0.0.40-alpha.10': + resolution: {integrity: sha512-VczUym5UTwVdvJPD95z4cqSEnrygjINqrqZX4ru1gnNlf8PPmhElNPdE/ZiFEgmZAXaxzK6rI+LB6iDx5NltQA==} + + '@ag-ui/core@0.0.40-alpha.11': + resolution: {integrity: sha512-zGOl1NSF3QOgHCniu58BeicIuCRPiuxQFmDFXb5asciI60LLM9GdF+E58EwUczMsq/+ouK5lNp9lKdrduiURWg==} '@ag-ui/encoder@0.0.35': resolution: {integrity: sha512-Ym0h0ZKIiD1Ld3+e3v/WQSogY62xs72ysoEBW1kt+dDs79QazBsW5ZlcBBj2DelEs9NrczQLxTVEvrkcvhrHqA==} - '@ag-ui/encoder@0.0.39': - resolution: {integrity: sha512-6fsoFwPWkStK7Uyj3pwBn7+aQjUWf7pbDTSI43cD53sBLvTr5oEFNnoKOzRfC5UqvHc4JjUIuLKPQyjHRwWg4g==} + '@ag-ui/encoder@0.0.40-alpha.10': + resolution: {integrity: sha512-aoBhFIcX+SGWzvw/FAK4+mHY6NIz5YA7DchjRCBWAyAGWrdSEObKRgPRifahOrl3hhKgSZo0MYwOin9Q33B+rg==} - '@ag-ui/langgraph@0.0.18': - resolution: {integrity: sha512-soWSV8+xR91jMArZUJoRv85UCgTi3Zt3u3gTMZhvs1t6fGFpAi6+hEQ4AqP13Rgvg90IlmIU8MTWo2k0OZDnoA==} + '@ag-ui/encoder@0.0.40-alpha.11': + resolution: {integrity: sha512-T/sLvCIpDK2H7I3/XI3Sa8kMRBuvpZTs+zRJfcpFyzLWfDbqovOXLACmMeruap7tlmk2IPXcY9CVUmJsQPBwjw==} + + '@ag-ui/langgraph@0.0.19-alpha.1': + resolution: {integrity: sha512-rX8Y4LSxTXWUMFzCspO0c42b6YWGTuciP69Okrh7Lw3kpGsmFq/zmXoBLFz654Yuii2zLHl5mZvkBJ5a3nI6lA==} peerDependencies: - '@ag-ui/client': '>=0.0.38' - '@ag-ui/core': '>=0.0.38' + '@ag-ui/client': 0.0.40-alpha.7 + '@ag-ui/core': 0.0.40-alpha.7 '@ag-ui/proto@0.0.35': resolution: {integrity: sha512-+rz3LAYHcR3D2xVgRKa7QE5mp+cwmZs6j+1XxG5dT7HNdg51uKea12L57EVY2bxE3JzpAvCIgOjFEmQCNH82pw==} - '@ag-ui/proto@0.0.39': - resolution: {integrity: sha512-xlj/PzZHkJ3CgoQC5QP9g7DEl/78wUK1+A2rdkoLKoNAMOkM2g6jKw0N88iFIh5GZhtiCNN2wb8XwRWPYx9XQQ==} + '@ag-ui/proto@0.0.40-alpha.10': + resolution: {integrity: sha512-d7FzAIjWyQzaMEZyMkTMgIyW+qK7LUg2T/MpjAGqWjjcrWGk2Zh6DU/rNMwMbYnK/YlXS3Ljo5a5gI95SrLS+Q==} + + '@ag-ui/proto@0.0.40-alpha.11': + resolution: {integrity: sha512-AlPaBBDdVAl8ZAu6fW/knFI4XDmSQJHDy6ADi+va8Hx4oPcG7cI9WhBaEVqETDLqhglRrFfGMt7KeQL+1NMo8Q==} '@ai-sdk/anthropic@2.0.23': resolution: {integrity: sha512-ZEBiiv1UhjGjBwUU63pFhLK5LCSlNDb1idY9K1oZHm5/Fda1cuTojf32tOp0opH0RPbPAN/F8fyyNjbU33n9Kw==} @@ -1074,6 +1141,12 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + '@antfu/install-pkg@1.1.0': + resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} + + '@antfu/utils@9.3.0': + resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==} + '@anthropic-ai/sdk@0.27.3': resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} @@ -1471,6 +1544,9 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@braintree/sanitize-url@7.1.1': + resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} + '@browserbasehq/sdk@2.6.0': resolution: {integrity: sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA==} @@ -1489,6 +1565,21 @@ packages: '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + '@chevrotain/cst-dts-gen@11.0.3': + resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + + '@chevrotain/gast@11.0.3': + resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + + '@chevrotain/regexp-to-ast@11.0.3': + resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + + '@chevrotain/types@11.0.3': + resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + + '@chevrotain/utils@11.0.3': + resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + '@clack/core@0.5.0': resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} @@ -1523,6 +1614,35 @@ packages: '@copilotkit/shared@1.10.6': resolution: {integrity: sha512-56Rltf4fDBqCpl1ZXARypt5NdE4LTg3tGPPLurZpgPmm31Lv5EAHpfjC7I55vt9A0mXWlTCHtCrpiaAlTyzGJw==} + '@copilotkitnext/agent@0.0.19-alpha.0': + resolution: {integrity: sha512-8S9Ds+9gHeNYyaGLA0luExqrqyEpJG4msQn5d5RM+Vw/mcQ4870b4JR5WG6QUi/pzvrsYhTKI//rWl8LrDAzLA==} + engines: {node: '>=18'} + + '@copilotkitnext/core@0.0.19-alpha.0': + resolution: {integrity: sha512-pIv1mrAW2uNNpaWWgUtkZNhscQwu6dGAfL1BA9WYW0ipZPgrlSbR3OleKV0D5z+uV51XCknWTSNM49ioTcgZZQ==} + engines: {node: '>=18'} + + '@copilotkitnext/react@0.0.19-alpha.0': + resolution: {integrity: sha512-ApVlwXDalzwYaVNki6srA4Ab9LDw5VcqECzoZK8wf+6aSYvdLIXLe1ZLxIFemzU/Cuks8rmhJ0Bwk0gbRSk9eA==} + engines: {node: '>=18'} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@copilotkitnext/runtime@0.0.19-alpha.0': + resolution: {integrity: sha512-QVlHOg/hJyg3i5J2Sm+OEHACeYJYYtBBmwzQpqz2o0j4B20Z4PPgeffMEBta0LjbPen+mdsDykTVRvupVTd+5g==} + engines: {node: '>=18'} + peerDependencies: + openai: ^5.9.0 + + '@copilotkitnext/shared@0.0.19-alpha.0': + resolution: {integrity: sha512-dfQCod+NmD0ttfpLOZxeEj3IQprlgsj8Z5+XCRAkXtKRWf+BaW53BzPZMPPKN1oUSJSK8g7jb3aoD+3Ek5w1AA==} + engines: {node: '>=18'} + + '@copilotkitnext/web-inspector@0.0.19-alpha.0': + resolution: {integrity: sha512-em2OACHCarRXuZgpqpULshXGQpZhAeZVbwzkD5u60zy4ALmGDjFZ4Rb7FUhR+vwIpFQ/yZfOjvxoduVzu+wrBA==} + engines: {node: '>=18'} + '@emnapi/core@1.5.0': resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} @@ -1852,6 +1972,12 @@ packages: resolution: {integrity: sha512-TmLaoFXmLc7yVFJIQS25mzZcuWfju4JmRXcO62KthDKNENyPpXXJukrHN6gXfv1BotzFt0M2kyRnO1Vt8ZLlxQ==} engines: {node: '>=18.0.0'} + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@3.0.2': + resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==} + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2711,6 +2837,20 @@ packages: cpu: [x64] os: [win32] + '@lit-labs/react@2.1.3': + resolution: {integrity: sha512-OD9h2JynerBQUMNzb563jiVpxfvPF0HjQkKY2mx0lpVYvD7F+rtJpOGz6ek+6ufMidV3i+MPT9SX62OKWHFrQg==} + + '@lit-labs/ssr-dom-shim@1.4.0': + resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==} + + '@lit/react@1.0.8': + resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} + peerDependencies: + '@types/react': 17 || 18 || 19 + + '@lit/reactive-element@2.1.1': + resolution: {integrity: sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==} + '@lukeed/csprng@1.1.0': resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -2824,6 +2964,9 @@ packages: '@types/react': '>=16' react: '>=16' + '@mermaid-js/parser@0.6.3': + resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} + '@modelcontextprotocol/sdk@1.20.0': resolution: {integrity: sha512-kOQ4+fHuT4KbR2iq2IjeV32HiihueuOf1vJkq18z08CLZ1UQrTc8BXJpVfxZkq45+inLLD+D4xx4nBjUelJa4Q==} engines: {node: '>=18'} @@ -3696,6 +3839,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tooltip@1.2.8': + resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: @@ -3759,6 +3915,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} @@ -4137,6 +4306,27 @@ packages: resolution: {integrity: sha512-0dtu/5ApsOZ24qgaZwtif8jVwqol7a4m1x5AxPuM1k5wxhqU7t/qEfBGtaSki1R8VlbTQfCj5PAlO45NKCa7Gg==} hasBin: true + '@shikijs/core@3.14.0': + resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} + + '@shikijs/engine-javascript@3.14.0': + resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} + + '@shikijs/engine-oniguruma@3.14.0': + resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} + + '@shikijs/langs@3.14.0': + resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} + + '@shikijs/themes@3.14.0': + resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} + + '@shikijs/types@3.14.0': + resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -4644,6 +4834,99 @@ packages: '@types/cors@2.8.19': resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-axis@3.0.6': + resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} + + '@types/d3-brush@3.0.6': + resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} + + '@types/d3-chord@3.0.6': + resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-contour@3.0.6': + resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} + + '@types/d3-delaunay@6.0.4': + resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} + + '@types/d3-dispatch@3.0.7': + resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} + + '@types/d3-drag@3.0.7': + resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} + + '@types/d3-dsv@3.0.7': + resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-fetch@3.0.7': + resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} + + '@types/d3-force@3.0.10': + resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} + + '@types/d3-format@3.0.4': + resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} + + '@types/d3-geo@3.1.0': + resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} + + '@types/d3-hierarchy@3.1.7': + resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-polygon@3.0.2': + resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} + + '@types/d3-quadtree@3.0.6': + resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} + + '@types/d3-random@3.0.3': + resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} + + '@types/d3-scale-chromatic@3.1.0': + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-selection@3.0.11': + resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} + + '@types/d3-shape@3.1.7': + resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} + + '@types/d3-time-format@4.0.3': + resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + + '@types/d3-transition@3.0.9': + resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} + + '@types/d3-zoom@3.0.8': + resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + + '@types/d3@7.4.3': + resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -4665,6 +4948,9 @@ packages: '@types/express@4.17.23': resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -4802,6 +5088,9 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -5390,6 +5679,14 @@ packages: chardet@2.1.0: resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + chevrotain-allstar@0.3.1: + resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} + peerDependencies: + chevrotain: ^11.0.0 + + chevrotain@11.0.3: + resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -5501,6 +5798,10 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -5512,6 +5813,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -5567,6 +5871,12 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + + cose-base@2.2.0: + resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5594,6 +5904,162 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + cytoscape-cose-bilkent@4.1.0: + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape-fcose@2.2.0: + resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + peerDependencies: + cytoscape: ^3.2.0 + + cytoscape@3.33.1: + resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==} + engines: {node: '>=0.10'} + + d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + + d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + + d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + + d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + + d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + + d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + + d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + + d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + + d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + + d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + + d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + + dagre-d3-es@7.0.13: + resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -5622,6 +6088,9 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -5704,6 +6173,9 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delaunator@5.0.1: + resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -5765,6 +6237,9 @@ packages: dompurify@3.1.7: resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==} + dompurify@3.3.0: + resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} + dotenv@16.6.1: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} @@ -6397,6 +6872,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -6458,6 +6937,9 @@ packages: resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==} engines: {node: '>=12.0.0'} + hachure-fill@0.5.2: + resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -6490,9 +6972,21 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + hast-util-from-parse5@8.0.3: resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + hast-util-parse-selector@2.2.5: resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} @@ -6505,12 +6999,18 @@ packages: hast-util-to-estree@3.1.3: resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} @@ -6577,6 +7077,10 @@ packages: zod-openapi: optional: true + hono@4.10.3: + resolution: {integrity: sha512-2LOYWUbnhdxdL8MNbNg9XZig6k+cZXm5IjHn2Aviv7honhBMOHb+jxrKIeJRZJRmn+htUCKhaicxwXuUDlchRA==} + engines: {node: '>=16.9.0'} + hono@4.9.12: resolution: {integrity: sha512-SrTC0YxqPwnN7yKa8gg/giLyQ2pILCKoideIHbYbFQlWZjYt68D2A4Ae1hehO/aDQ6RmTcpqOV/O2yBtMzx/VQ==} engines: {node: '>=16.9.0'} @@ -6686,6 +7190,13 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} @@ -7176,6 +7687,9 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -7184,6 +7698,9 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + langchain@0.3.36: resolution: {integrity: sha512-PqC19KChFF0QlTtYDFgfEbIg+SCnCXox29G8tY62QWfj9bOW7ew2kgWmPw5qoHLOTKOdQPvXET20/1Pdq8vAtQ==} engines: {node: '>=18'} @@ -7242,6 +7759,10 @@ packages: typeorm: optional: true + langium@3.3.1: + resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} + engines: {node: '>=16.0.0'} + langsmith@0.3.74: resolution: {integrity: sha512-ZuW3Qawz8w88XcuCRH91yTp6lsdGuwzRqZ5J0Hf5q/AjMz7DwcSv0MkE6V5W+8hFMI850QZN2Wlxwm3R9lHlZg==} peerDependencies: @@ -7266,6 +7787,12 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + + layout-base@2.0.1: + resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -7356,8 +7883,17 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + lit-element@4.2.1: + resolution: {integrity: sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==} + + lit-html@3.3.1: + resolution: {integrity: sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==} + + lit@3.3.1: + resolution: {integrity: sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} local-pkg@1.1.2: @@ -7372,6 +7908,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} @@ -7441,6 +7980,19 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + lucide-react@0.525.0: + resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lucide-react@0.542.0: + resolution: {integrity: sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lucide@0.525.0: + resolution: {integrity: sha512-sfehWlaE/7NVkcEQ4T9JD3eID8RNMIGJBBUq9wF3UFiJIrcMKRbU3g1KGfDk4svcW7yw8BtDLXaXo02scDtUYQ==} + magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} @@ -7473,6 +8025,11 @@ packages: engines: {node: '>= 18'} hasBin: true + marked@16.4.1: + resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} + engines: {node: '>= 20'} + hasBin: true + mastra@0.15.1: resolution: {integrity: sha512-8C+2/ANWRrDN82gBvWpvcsi0tuntgZvXu2QdPGuqLAoap/vinzMVQXMXDgLtvlQ8shW1E7x6Vwsr0UzoNPKrAg==} hasBin: true @@ -7572,6 +8129,9 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + mermaid@11.12.1: + resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==} + methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -8000,6 +8560,12 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -8089,6 +8655,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-manager-detector@1.5.0: + resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -8117,6 +8686,9 @@ packages: partial-json@0.1.7: resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} + path-data-parser@0.1.0: + resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -8244,6 +8816,12 @@ packages: engines: {node: '>=18'} hasBin: true + points-on-curve@0.2.0: + resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} + + points-on-path@0.2.1: + resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -8585,10 +9163,25 @@ packages: refractor@3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + rehype-harden@1.1.5: + resolution: {integrity: sha512-JrtBj5BVd/5vf3H3/blyJatXJbzQfRT9pJBmjafbTaPouQCAKxHwRyCc7dle9BXQKxv4z1OzZylz/tNamoiG3A==} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} @@ -8676,6 +9269,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + robust-predicates@3.0.2: + resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rollup-plugin-esbuild@6.2.1: resolution: {integrity: sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==} engines: {node: '>=14.18.0'} @@ -8702,6 +9298,9 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + roughjs@4.6.6: + resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -8717,6 +9316,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -8814,6 +9416,9 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} + shiki@3.14.0: + resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -8918,6 +9523,11 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + streamdown@1.4.0: + resolution: {integrity: sha512-ylhDSQ4HpK5/nAH9v7OgIIdGJxlJB2HoYrYkJNGrO8lMpnWuKUcrz/A8xAMwA6eILA27469vIavcOTjmxctrKg==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -9028,6 +9638,9 @@ packages: babel-plugin-macros: optional: true + stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -9147,6 +9760,14 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-deepmerge@7.0.3: + resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} + engines: {node: '>=14.13.1'} + ts-error@1.0.6: resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} @@ -9254,6 +9875,9 @@ packages: resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==} hasBin: true + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -9354,6 +9978,9 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + unist-util-generated@2.0.1: resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} @@ -9456,6 +10083,11 @@ packages: '@types/react': optional: true + use-stick-to-bottom@1.1.1: + resolution: {integrity: sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -9512,6 +10144,26 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + + vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + + vscode-languageserver-textdocument@1.0.12: + resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} + + vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + + vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -9721,6 +10373,18 @@ snapshots: uuid: 11.1.0 zod: 3.25.76 + '@ag-ui/client@0.0.40-alpha.10': + dependencies: + '@ag-ui/core': 0.0.40-alpha.10 + '@ag-ui/encoder': 0.0.40-alpha.10 + '@ag-ui/proto': 0.0.40-alpha.10 + '@types/uuid': 10.0.0 + fast-json-patch: 3.1.1 + rxjs: 7.8.1 + untruncate-json: 0.0.1 + uuid: 11.1.0 + zod: 3.25.76 + '@ag-ui/core@0.0.35': dependencies: rxjs: 7.8.1 @@ -9731,7 +10395,12 @@ snapshots: rxjs: 7.8.1 zod: 3.25.76 - '@ag-ui/core@0.0.39': + '@ag-ui/core@0.0.40-alpha.10': + dependencies: + rxjs: 7.8.1 + zod: 3.25.76 + + '@ag-ui/core@0.0.40-alpha.11': dependencies: rxjs: 7.8.1 zod: 3.25.76 @@ -9741,17 +10410,22 @@ snapshots: '@ag-ui/core': 0.0.35 '@ag-ui/proto': 0.0.35 - '@ag-ui/encoder@0.0.39': + '@ag-ui/encoder@0.0.40-alpha.10': + dependencies: + '@ag-ui/core': 0.0.40-alpha.10 + '@ag-ui/proto': 0.0.40-alpha.10 + + '@ag-ui/encoder@0.0.40-alpha.11': dependencies: - '@ag-ui/core': 0.0.39 - '@ag-ui/proto': 0.0.39 + '@ag-ui/core': 0.0.40-alpha.11 + '@ag-ui/proto': 0.0.40-alpha.11 - '@ag-ui/langgraph@0.0.18(@ag-ui/client@sdks+typescript+packages+client)(@ag-ui/core@sdks+typescript+packages+core)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@ag-ui/langgraph@0.0.19-alpha.1(@ag-ui/client@sdks+typescript+packages+client)(@ag-ui/core@sdks+typescript+packages+core)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@ag-ui/client': link:sdks/typescript/packages/client '@ag-ui/core': link:sdks/typescript/packages/core - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) + '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) partial-json: 0.1.7 rxjs: 7.8.1 transitivePeerDependencies: @@ -9767,9 +10441,15 @@ snapshots: '@ag-ui/core': 0.0.35 '@bufbuild/protobuf': 2.9.0 - '@ag-ui/proto@0.0.39': + '@ag-ui/proto@0.0.40-alpha.10': + dependencies: + '@ag-ui/core': 0.0.40-alpha.10 + '@bufbuild/protobuf': 2.9.0 + '@protobuf-ts/protoc': 2.11.1 + + '@ag-ui/proto@0.0.40-alpha.11': dependencies: - '@ag-ui/core': 0.0.39 + '@ag-ui/core': 0.0.40-alpha.11 '@bufbuild/protobuf': 2.9.0 '@protobuf-ts/protoc': 2.11.1 @@ -9871,6 +10551,13 @@ snapshots: '@alloc/quick-lru@5.2.0': {} + '@antfu/install-pkg@1.1.0': + dependencies: + package-manager-detector: 1.5.0 + tinyexec: 1.0.1 + + '@antfu/utils@9.3.0': {} + '@anthropic-ai/sdk@0.27.3': dependencies: '@types/node': 18.19.130 @@ -10732,6 +11419,8 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@braintree/sanitize-url@7.1.1': {} + '@browserbasehq/sdk@2.6.0': dependencies: '@types/node': 18.19.130 @@ -10760,26 +11449,27 @@ snapshots: - encoding - utf-8-validate - '@browserbasehq/stagehand@1.14.0(@playwright/test@1.56.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@5.12.2(ws@8.18.3)(zod@3.25.76))(zod@3.25.76)': - dependencies: - '@anthropic-ai/sdk': 0.27.3 - '@browserbasehq/sdk': 2.6.0 - '@playwright/test': 1.56.0 - deepmerge: 4.3.1 - dotenv: 16.6.1 - openai: 5.12.2(ws@8.18.3)(zod@3.25.76) - ws: 8.18.3 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - '@bufbuild/protobuf@2.9.0': {} '@cfworker/json-schema@4.1.1': {} + '@chevrotain/cst-dts-gen@11.0.3': + dependencies: + '@chevrotain/gast': 11.0.3 + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/gast@11.0.3': + dependencies: + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/regexp-to-ast@11.0.3': {} + + '@chevrotain/types@11.0.3': {} + + '@chevrotain/utils@11.0.3': {} + '@clack/core@0.5.0': dependencies: picocolors: 1.1.1 @@ -10836,22 +11526,22 @@ snapshots: - encoding - graphql - '@copilotkit/runtime@1.10.6(2963fdc46a5185bf1f60e289781c45cd)': + '@copilotkit/runtime@1.10.6(iqshwn2xropb3vpfei3flnb2ay)': dependencies: '@ag-ui/client': link:sdks/typescript/packages/client '@ag-ui/core': link:sdks/typescript/packages/core - '@ag-ui/encoder': 0.0.39 - '@ag-ui/langgraph': 0.0.18(@ag-ui/client@sdks+typescript+packages+client)(@ag-ui/core@sdks+typescript+packages+core)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ag-ui/proto': 0.0.39 + '@ag-ui/encoder': link:sdks/typescript/packages/encoder + '@ag-ui/langgraph': link:integrations/langgraph/typescript + '@ag-ui/proto': link:sdks/typescript/packages/proto '@anthropic-ai/sdk': 0.57.0 '@copilotkit/shared': 1.10.6 '@graphql-yoga/plugin-defer-stream': 3.16.0(graphql-yoga@5.16.0(graphql@16.11.0))(graphql@16.11.0) - '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))) - '@langchain/community': 0.3.57(8d705aac09841dc81e24dfe2c773558d) + '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) + '@langchain/community': 0.3.57(37emb7xvj5c4vxjobtfi323cve) '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) - '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(react@19.2.0) - '@langchain/openai': 0.4.9(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) + '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) + '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react@19.2.0) + '@langchain/openai': 0.4.9(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) '@scarf/scarf': 1.4.0 class-transformer: 0.5.1 class-validator: 0.14.2 @@ -10860,7 +11550,7 @@ snapshots: graphql-scalars: 1.24.2(graphql@16.11.0) graphql-yoga: 5.16.0(graphql@16.11.0) groq-sdk: 0.5.0 - langchain: 0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3) + langchain: 0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3) openai: 4.104.0(ws@8.18.3)(zod@3.25.76) partial-json: 0.1.7 pino: 9.13.1 @@ -11018,18 +11708,18 @@ snapshots: - ws - youtubei.js - '@copilotkit/runtime@1.10.6(43a54c62826e391639c20a8a0387b983)': + '@copilotkit/runtime@1.10.6(jkrvcwfv2zltibfgwihn5nuqn4)': dependencies: '@ag-ui/client': link:sdks/typescript/packages/client '@ag-ui/core': link:sdks/typescript/packages/core - '@ag-ui/encoder': link:sdks/typescript/packages/encoder - '@ag-ui/langgraph': link:integrations/langgraph/typescript - '@ag-ui/proto': link:sdks/typescript/packages/proto + '@ag-ui/encoder': 0.0.40-alpha.11 + '@ag-ui/langgraph': 0.0.19-alpha.1(@ag-ui/client@sdks+typescript+packages+client)(@ag-ui/core@sdks+typescript+packages+core)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@ag-ui/proto': 0.0.40-alpha.11 '@anthropic-ai/sdk': 0.57.0 '@copilotkit/shared': 1.10.6 '@graphql-yoga/plugin-defer-stream': 3.16.0(graphql-yoga@5.16.0(graphql@16.11.0))(graphql@16.11.0) '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) - '@langchain/community': 0.3.57(a6f05470c76b31786172bd3244671918) + '@langchain/community': 0.3.57(37emb7xvj5c4vxjobtfi323cve) '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react@19.2.0) @@ -11212,6 +11902,78 @@ snapshots: transitivePeerDependencies: - encoding + '@copilotkitnext/agent@0.0.19-alpha.0': + dependencies: + '@ag-ui/client': 0.0.40-alpha.10 + '@ai-sdk/anthropic': 2.0.23(zod@3.25.76) + '@ai-sdk/google': 2.0.17(zod@3.25.76) + '@ai-sdk/openai': 2.0.52(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.20.0 + ai: 5.0.60(zod@3.25.76) + rxjs: 7.8.1 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + '@copilotkitnext/core@0.0.19-alpha.0': + dependencies: + '@ag-ui/client': 0.0.40-alpha.10 + '@copilotkitnext/shared': 0.0.19-alpha.0 + rxjs: 7.8.1 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + + '@copilotkitnext/react@0.0.19-alpha.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@ag-ui/client': 0.0.40-alpha.10 + '@ag-ui/core': 0.0.40-alpha.10 + '@copilotkitnext/core': 0.0.19-alpha.0 + '@copilotkitnext/shared': 0.0.19-alpha.0 + '@copilotkitnext/web-inspector': 0.0.19-alpha.0 + '@lit-labs/react': 2.1.3(@types/react@19.2.2) + '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + class-variance-authority: 0.7.1 + clsx: 2.1.1 + katex: 0.16.25 + lucide-react: 0.525.0(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + streamdown: 1.4.0(@types/react@19.2.2)(react@19.2.0) + tailwind-merge: 3.3.1 + ts-deepmerge: 7.0.3 + tw-animate-css: 1.4.0 + use-stick-to-bottom: 1.1.1(react@19.2.0) + zod: 3.25.76 + transitivePeerDependencies: + - '@types/react' + - '@types/react-dom' + - supports-color + + '@copilotkitnext/runtime@0.0.19-alpha.0(openai@4.104.0(ws@8.18.3)(zod@3.25.76))': + dependencies: + '@ag-ui/client': 0.0.40-alpha.10 + '@ag-ui/core': 0.0.40-alpha.10 + '@ag-ui/encoder': 0.0.40-alpha.10 + '@copilotkitnext/shared': 0.0.19-alpha.0 + hono: 4.10.3 + openai: 4.104.0(ws@8.18.3)(zod@3.25.76) + rxjs: 7.8.1 + + '@copilotkitnext/shared@0.0.19-alpha.0': + dependencies: + '@ag-ui/client': 0.0.40-alpha.10 + partial-json: 0.1.7 + uuid: 11.1.0 + + '@copilotkitnext/web-inspector@0.0.19-alpha.0': + dependencies: + '@ag-ui/client': 0.0.40-alpha.10 + '@copilotkitnext/core': 0.0.19-alpha.0 + lit: 3.3.1 + lucide: 0.525.0 + '@emnapi/core@1.5.0': dependencies: '@emnapi/wasi-threads': 1.1.0 @@ -11506,6 +12268,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@iconify/types@2.0.0': {} + + '@iconify/utils@3.0.2': + dependencies: + '@antfu/install-pkg': 1.1.0 + '@antfu/utils': 9.3.0 + '@iconify/types': 2.0.0 + debug: 4.4.3 + globals: 15.15.0 + kolorist: 1.8.0 + local-pkg: 1.1.2 + mlly: 1.8.0 + transitivePeerDependencies: + - supports-color + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -11926,74 +12703,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))': - dependencies: - '@aws-sdk/client-bedrock-agent-runtime': 3.910.0 - '@aws-sdk/client-bedrock-runtime': 3.910.0 - '@aws-sdk/client-kendra': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - transitivePeerDependencies: - - aws-crt - - '@langchain/community@0.3.57(8d705aac09841dc81e24dfe2c773558d)': - dependencies: - '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.56.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@5.12.2(ws@8.18.3)(zod@3.25.76))(zod@3.25.76) - '@ibm-cloud/watsonx-ai': 1.7.0 - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - '@langchain/openai': 0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) - '@langchain/weaviate': 0.2.3(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))) - binary-extensions: 2.3.0 - expr-eval: 2.0.2 - flat: 5.0.2 - ibm-cloud-sdk-core: 5.4.3 - js-yaml: 4.1.0 - langchain: 0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3) - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - uuid: 10.0.0 - zod: 3.25.76 - optionalDependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-bedrock-agent-runtime': 3.910.0 - '@aws-sdk/client-bedrock-runtime': 3.910.0 - '@aws-sdk/client-dynamodb': 3.910.0 - '@aws-sdk/client-kendra': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@browserbasehq/sdk': 2.6.0 - '@smithy/util-utf8': 2.3.0 - '@upstash/redis': 1.35.6 - fast-xml-parser: 5.2.5 - google-auth-library: 8.9.0 - ignore: 5.3.2 - jsonwebtoken: 9.0.2 - pg: 8.16.3 - playwright: 1.56.0 - redis: 5.8.3 - weaviate-client: 3.9.0 - ws: 8.18.3 - transitivePeerDependencies: - - '@langchain/anthropic' - - '@langchain/aws' - - '@langchain/cerebras' - - '@langchain/cohere' - - '@langchain/deepseek' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/google-vertexai-web' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - '@langchain/xai' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - axios - - encoding - - handlebars - - peggy - - '@langchain/community@0.3.57(a6f05470c76b31786172bd3244671918)': + '@langchain/community@0.3.57(37emb7xvj5c4vxjobtfi323cve)': dependencies: '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.56.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(zod@3.25.76) '@ibm-cloud/watsonx-ai': 1.7.0 @@ -12070,14 +12780,14 @@ snapshots: - '@opentelemetry/sdk-trace-base' - openai - '@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))': + '@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.21 - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) + langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)) mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 @@ -12098,14 +12808,6 @@ snapshots: transitivePeerDependencies: - zod - '@langchain/google-common@0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - uuid: 10.0.0 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - zod - '@langchain/google-gauth@0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76)': dependencies: '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) @@ -12116,16 +12818,6 @@ snapshots: - supports-color - zod - '@langchain/google-gauth@0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - '@langchain/google-common': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) - google-auth-library: 8.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - zod - '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react@19.2.0)': dependencies: '@types/json-schema': 7.0.15 @@ -12136,24 +12828,25 @@ snapshots: '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) react: 19.2.0 - '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(react@19.2.0)': + '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) + '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) - '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: '@types/json-schema': 7.0.15 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) + '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -12168,17 +12861,6 @@ snapshots: - encoding - ws - '@langchain/openai@0.4.9(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - js-tiktoken: 1.0.21 - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - encoding - - ws - '@langchain/openai@0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3)': dependencies: '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) @@ -12188,25 +12870,11 @@ snapshots: transitivePeerDependencies: - ws - '@langchain/openai@0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - js-tiktoken: 1.0.21 - openai: 5.12.2(ws@8.18.3)(zod@3.25.76) - zod: 3.25.76 - transitivePeerDependencies: - - ws - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))': dependencies: '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) js-tiktoken: 1.0.21 - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - js-tiktoken: 1.0.21 - '@langchain/weaviate@0.2.3(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))': dependencies: '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) @@ -12215,14 +12883,6 @@ snapshots: transitivePeerDependencies: - encoding - '@langchain/weaviate@0.2.3(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - uuid: 10.0.0 - weaviate-client: 3.9.0 - transitivePeerDependencies: - - encoding - '@libsql/client@0.15.15': dependencies: '@libsql/core': 0.15.15 @@ -12285,6 +12945,22 @@ snapshots: '@libsql/win32-x64-msvc@0.5.22': optional: true + '@lit-labs/react@2.1.3(@types/react@19.2.2)': + dependencies: + '@lit/react': 1.0.8(@types/react@19.2.2) + transitivePeerDependencies: + - '@types/react' + + '@lit-labs/ssr-dom-shim@1.4.0': {} + + '@lit/react@1.0.8(@types/react@19.2.2)': + dependencies: + '@types/react': 19.2.2 + + '@lit/reactive-element@2.1.1': + dependencies: + '@lit-labs/ssr-dom-shim': 1.4.0 + '@lukeed/csprng@1.1.0': {} '@lukeed/uuid@2.0.1': @@ -12429,8 +13105,8 @@ snapshots: ai-v5: ai@5.0.60(zod@3.25.76) date-fns: 3.6.0 dotenv: 16.6.1 - hono: 4.9.12 - hono-openapi: 0.4.8(hono@4.9.12)(openapi-types@12.1.3)(zod@3.25.76) + hono: 4.10.3 + hono-openapi: 0.4.8(hono@4.10.3)(openapi-types@12.1.3)(zod@3.25.76) js-tiktoken: 1.0.21 json-schema: 0.4.0 json-schema-to-zod: 2.6.1 @@ -12654,6 +13330,10 @@ snapshots: '@types/react': 19.2.2 react: 19.2.0 + '@mermaid-js/parser@0.6.3': + dependencies: + langium: 3.3.1 + '@modelcontextprotocol/sdk@1.20.0': dependencies: ajv: 6.12.6 @@ -13707,6 +14387,26 @@ snapshots: '@types/react': 19.2.2 '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)': dependencies: react: 19.2.0 @@ -13755,6 +14455,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + '@types/react': 19.2.2 + '@types/react-dom': 19.2.2(@types/react@19.2.2) + '@radix-ui/rect@1.1.1': {} '@react-aria/focus@3.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': @@ -14052,6 +14761,39 @@ snapshots: prompts: 2.4.2 zod: 3.25.76 + '@shikijs/core@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-oniguruma@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + + '@shikijs/themes@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + + '@shikijs/types@3.14.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/merge-streams@4.0.0': {} @@ -14680,15 +15422,132 @@ snapshots: '@types/bunyan@1.8.11': dependencies: - '@types/node': 20.19.21 + '@types/node': 20.19.21 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.19.21 + + '@types/cors@2.8.19': + dependencies: + '@types/node': 20.19.21 + + '@types/d3-array@3.2.2': {} + + '@types/d3-axis@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-brush@3.0.6': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-chord@3.0.6': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-contour@3.0.6': + dependencies: + '@types/d3-array': 3.2.2 + '@types/geojson': 7946.0.16 + + '@types/d3-delaunay@6.0.4': {} + + '@types/d3-dispatch@3.0.7': {} + + '@types/d3-drag@3.0.7': + dependencies: + '@types/d3-selection': 3.0.11 + + '@types/d3-dsv@3.0.7': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-fetch@3.0.7': + dependencies: + '@types/d3-dsv': 3.0.7 + + '@types/d3-force@3.0.10': {} + + '@types/d3-format@3.0.4': {} + + '@types/d3-geo@3.1.0': + dependencies: + '@types/geojson': 7946.0.16 + + '@types/d3-hierarchy@3.1.7': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-polygon@3.0.2': {} + + '@types/d3-quadtree@3.0.6': {} + + '@types/d3-random@3.0.3': {} + + '@types/d3-scale-chromatic@3.1.0': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-selection@3.0.11': {} + + '@types/d3-shape@3.1.7': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time-format@4.0.3': {} + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + + '@types/d3-transition@3.0.9': + dependencies: + '@types/d3-selection': 3.0.11 - '@types/connect@3.4.38': + '@types/d3-zoom@3.0.8': dependencies: - '@types/node': 20.19.21 + '@types/d3-interpolate': 3.0.4 + '@types/d3-selection': 3.0.11 - '@types/cors@2.8.19': + '@types/d3@7.4.3': dependencies: - '@types/node': 20.19.21 + '@types/d3-array': 3.2.2 + '@types/d3-axis': 3.0.6 + '@types/d3-brush': 3.0.6 + '@types/d3-chord': 3.0.6 + '@types/d3-color': 3.1.3 + '@types/d3-contour': 3.0.6 + '@types/d3-delaunay': 6.0.4 + '@types/d3-dispatch': 3.0.7 + '@types/d3-drag': 3.0.7 + '@types/d3-dsv': 3.0.7 + '@types/d3-ease': 3.0.2 + '@types/d3-fetch': 3.0.7 + '@types/d3-force': 3.0.10 + '@types/d3-format': 3.0.4 + '@types/d3-geo': 3.1.0 + '@types/d3-hierarchy': 3.1.7 + '@types/d3-interpolate': 3.0.4 + '@types/d3-path': 3.1.1 + '@types/d3-polygon': 3.0.2 + '@types/d3-quadtree': 3.0.6 + '@types/d3-random': 3.0.3 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + '@types/d3-selection': 3.0.11 + '@types/d3-shape': 3.1.7 + '@types/d3-time': 3.0.4 + '@types/d3-time-format': 4.0.3 + '@types/d3-timer': 3.0.2 + '@types/d3-transition': 3.0.9 + '@types/d3-zoom': 3.0.8 '@types/debug@4.1.12': dependencies: @@ -14718,6 +15577,8 @@ snapshots: '@types/qs': 6.14.0 '@types/serve-static': 1.15.9 + '@types/geojson@7946.0.16': {} + '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.19.21 @@ -14871,6 +15732,8 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} @@ -15515,6 +16378,20 @@ snapshots: chardet@2.1.0: {} + chevrotain-allstar@0.3.1(chevrotain@11.0.3): + dependencies: + chevrotain: 11.0.3 + lodash-es: 4.17.21 + + chevrotain@11.0.3: + dependencies: + '@chevrotain/cst-dts-gen': 11.0.3 + '@chevrotain/gast': 11.0.3 + '@chevrotain/regexp-to-ast': 11.0.3 + '@chevrotain/types': 11.0.3 + '@chevrotain/utils': 11.0.3 + lodash-es: 4.17.21 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -15605,12 +16482,16 @@ snapshots: commander@4.1.1: {} + commander@7.2.0: {} + commander@8.3.0: {} commander@9.5.0: {} commondir@1.0.1: {} + compare-versions@6.1.1: {} + concat-map@0.0.1: {} concurrently@9.2.1: @@ -15657,6 +16538,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cose-base@1.0.3: + dependencies: + layout-base: 1.0.2 + + cose-base@2.2.0: + dependencies: + layout-base: 2.0.1 + create-jest@29.7.0(@types/node@20.19.21): dependencies: '@jest/types': 29.6.3 @@ -15694,6 +16583,190 @@ snapshots: csstype@3.1.3: {} + cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): + dependencies: + cose-base: 1.0.3 + cytoscape: 3.33.1 + + cytoscape-fcose@2.2.0(cytoscape@3.33.1): + dependencies: + cose-base: 2.2.0 + cytoscape: 3.33.1 + + cytoscape@3.33.1: {} + + d3-array@2.12.1: + dependencies: + internmap: 1.0.1 + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-axis@3.0.0: {} + + d3-brush@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3-chord@3.0.1: + dependencies: + d3-path: 3.1.0 + + d3-color@3.1.0: {} + + d3-contour@4.0.2: + dependencies: + d3-array: 3.2.4 + + d3-delaunay@6.0.4: + dependencies: + delaunator: 5.0.1 + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@3.0.1: + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-fetch@3.0.1: + dependencies: + d3-dsv: 3.0.1 + + d3-force@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + + d3-format@3.1.0: {} + + d3-geo@3.1.1: + dependencies: + d3-array: 3.2.4 + + d3-hierarchy@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@1.0.9: {} + + d3-path@3.1.0: {} + + d3-polygon@3.0.1: {} + + d3-quadtree@3.0.1: {} + + d3-random@3.0.1: {} + + d3-sankey@0.12.3: + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + + d3-scale-chromatic@3.1.0: + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@1.3.7: + dependencies: + d3-path: 1.0.9 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + d3@7.9.0: + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + + dagre-d3-es@7.0.13: + dependencies: + d3: 7.9.0 + lodash-es: 4.17.21 + damerau-levenshtein@1.0.8: {} data-uri-to-buffer@4.0.1: {} @@ -15722,6 +16795,8 @@ snapshots: dateformat@4.6.3: {} + dayjs@1.11.18: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -15777,6 +16852,10 @@ snapshots: defu@6.1.4: {} + delaunator@5.0.1: + dependencies: + robust-predicates: 3.0.2 + delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -15813,6 +16892,10 @@ snapshots: dompurify@3.1.7: {} + dompurify@3.3.0: + optionalDependencies: + '@types/trusted-types': 2.0.7 + dotenv@16.6.1: {} dprint-node@1.0.8: @@ -16085,7 +17168,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: @@ -16107,7 +17190,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.37.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -16737,6 +17820,8 @@ snapshots: globals@14.0.0: {} + globals@15.15.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -16828,6 +17913,8 @@ snapshots: - encoding - supports-color + hachure-fill@0.5.2: {} + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -16859,6 +17946,28 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + hast-util-from-parse5@8.0.3: dependencies: '@types/hast': 3.0.4 @@ -16870,6 +17979,10 @@ snapshots: vfile-location: 5.0.3 web-namespaces: 2.0.1 + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-parse-selector@2.2.5: {} hast-util-parse-selector@4.0.0: @@ -16913,6 +18026,20 @@ snapshots: transitivePeerDependencies: - supports-color + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.6: dependencies: '@types/estree': 1.0.8 @@ -16943,6 +18070,13 @@ snapshots: web-namespaces: 2.0.1 zwitch: 2.0.4 + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + hast-util-whitespace@2.0.1: {} hast-util-whitespace@3.0.0: @@ -16971,6 +18105,14 @@ snapshots: highlightjs-vue@1.0.0: {} + hono-openapi@0.4.8(hono@4.10.3)(openapi-types@12.1.3)(zod@3.25.76): + dependencies: + json-schema-walker: 2.0.0 + openapi-types: 12.1.3 + optionalDependencies: + hono: 4.10.3 + zod: 3.25.76 + hono-openapi@0.4.8(hono@4.9.12)(openapi-types@12.1.3)(zod@3.25.76): dependencies: json-schema-walker: 2.0.0 @@ -16979,6 +18121,8 @@ snapshots: hono: 4.9.12 zod: 3.25.76 + hono@4.10.3: {} + hono@4.9.12: {} html-escaper@2.0.2: {} @@ -17034,7 +18178,7 @@ snapshots: isstream: 0.1.2 jsonwebtoken: 9.0.2 mime-types: 2.1.35 - retry-axios: 2.6.0(axios@1.12.2) + retry-axios: 2.6.0(axios@1.12.2(debug@4.4.3)) tough-cookie: 4.1.4 transitivePeerDependencies: - supports-color @@ -17105,6 +18249,10 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + internmap@1.0.1: {} + + internmap@2.0.3: {} + ip-regex@4.3.0: {} ipaddr.js@1.9.1: {} @@ -17782,10 +18930,14 @@ snapshots: dependencies: json-buffer: 3.0.1 + khroma@2.1.0: {} + kleur@3.0.3: {} kleur@4.1.5: {} + kolorist@1.8.0: {} + langchain@0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3): dependencies: '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) @@ -17811,30 +18963,13 @@ snapshots: - openai - ws - langchain@0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3): + langium@3.3.1: dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)) - '@langchain/openai': 0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))) - js-tiktoken: 1.0.21 - js-yaml: 4.1.0 - jsonpointer: 5.0.1 - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - openapi-types: 12.1.3 - p-retry: 4.6.2 - uuid: 10.0.0 - yaml: 2.8.1 - zod: 3.25.76 - optionalDependencies: - '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76))) - axios: 1.12.2(debug@4.4.3) - handlebars: 4.7.8 - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - ws + chevrotain: 11.0.3 + chevrotain-allstar: 0.3.1(chevrotain@11.0.3) + vscode-languageserver: 9.0.1 + vscode-languageserver-textdocument: 1.0.12 + vscode-uri: 3.0.8 langsmith@0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)): dependencies: @@ -17851,7 +18986,7 @@ snapshots: '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - langsmith@0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.76)): + langsmith@0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 @@ -17872,6 +19007,10 @@ snapshots: dependencies: language-subtag-registry: 0.3.23 + layout-base@1.0.2: {} + + layout-base@2.0.1: {} + leven@3.1.0: {} levn@0.4.1: @@ -17949,6 +19088,22 @@ snapshots: dependencies: uc.micro: 2.1.0 + lit-element@4.2.1: + dependencies: + '@lit-labs/ssr-dom-shim': 1.4.0 + '@lit/reactive-element': 2.1.1 + lit-html: 3.3.1 + + lit-html@3.3.1: + dependencies: + '@types/trusted-types': 2.0.7 + + lit@3.3.1: + dependencies: + '@lit/reactive-element': 2.1.1 + lit-element: 4.2.1 + lit-html: 3.3.1 + load-tsconfig@0.2.5: {} local-pkg@1.1.2: @@ -17965,6 +19120,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} lodash.get@4.4.2: {} @@ -18021,6 +19178,16 @@ snapshots: dependencies: react: 19.2.0 + lucide-react@0.525.0(react@19.2.0): + dependencies: + react: 19.2.0 + + lucide-react@0.542.0(react@19.2.0): + dependencies: + react: 19.2.0 + + lucide@0.525.0: {} + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -18052,6 +19219,8 @@ snapshots: marked@14.0.0: {} + marked@16.4.1: {} + mastra@0.15.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.9.3)(zod@3.25.76): dependencies: '@clack/prompts': 0.11.0 @@ -18322,6 +19491,31 @@ snapshots: merge2@1.4.1: {} + mermaid@11.12.1: + dependencies: + '@braintree/sanitize-url': 7.1.1 + '@iconify/utils': 3.0.2 + '@mermaid-js/parser': 0.6.3 + '@types/d3': 7.4.3 + cytoscape: 3.33.1 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) + cytoscape-fcose: 2.2.0(cytoscape@3.33.1) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.13 + dayjs: 1.11.18 + dompurify: 3.3.0 + katex: 0.16.25 + khroma: 2.1.0 + lodash-es: 4.17.21 + marked: 16.4.1 + roughjs: 4.6.6 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 11.1.0 + transitivePeerDependencies: + - supports-color + methods@1.1.2: {} micromark-core-commonmark@1.1.0: @@ -18970,6 +20164,14 @@ snapshots: dependencies: mimic-fn: 4.0.0 + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + open@10.2.0: dependencies: default-browser: 5.2.1 @@ -19066,6 +20268,8 @@ snapshots: package-json-from-dist@1.0.1: {} + package-manager-detector@1.5.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -19106,6 +20310,8 @@ snapshots: partial-json@0.1.7: {} + path-data-parser@0.1.0: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -19251,6 +20457,13 @@ snapshots: optionalDependencies: fsevents: 2.3.2 + points-on-curve@0.2.0: {} + + points-on-path@0.2.1: + dependencies: + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + possible-typed-array-names@1.1.0: {} postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1): @@ -19680,6 +20893,16 @@ snapshots: parse-entities: 2.0.0 prismjs: 1.27.0 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -19689,6 +20912,18 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + rehype-harden@1.1.5: {} + + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.7 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.25 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.3 + rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 @@ -19809,7 +21044,7 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - retry-axios@2.6.0(axios@1.12.2): + retry-axios@2.6.0(axios@1.12.2(debug@4.4.3)): dependencies: axios: 1.12.2(debug@4.4.3) @@ -19817,6 +21052,8 @@ snapshots: reusify@1.1.0: {} + robust-predicates@3.0.2: {} + rollup-plugin-esbuild@6.2.1(esbuild@0.25.10)(rollup@4.50.2): dependencies: debug: 4.4.3 @@ -19889,6 +21126,13 @@ snapshots: rope-sequence@1.3.4: {} + roughjs@4.6.6: + dependencies: + hachure-fill: 0.5.2 + path-data-parser: 0.1.0 + points-on-curve: 0.2.0 + points-on-path: 0.2.1 + router@2.2.0: dependencies: debug: 4.4.3 @@ -19907,6 +21151,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rw@1.3.3: {} + rxjs@7.8.1: dependencies: tslib: 2.8.1 @@ -20065,6 +21311,17 @@ snapshots: shell-quote@1.8.3: {} + shiki@3.14.0: + dependencies: + '@shikijs/core': 3.14.0 + '@shikijs/engine-javascript': 3.14.0 + '@shikijs/engine-oniguruma': 3.14.0 + '@shikijs/langs': 3.14.0 + '@shikijs/themes': 3.14.0 + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -20160,6 +21417,26 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + streamdown@1.4.0(@types/react@19.2.2)(react@19.2.0): + dependencies: + clsx: 2.1.1 + katex: 0.16.25 + lucide-react: 0.542.0(react@19.2.0) + marked: 16.4.1 + mermaid: 11.12.1 + react: 19.2.0 + react-markdown: 10.1.0(@types/react@19.2.2)(react@19.2.0) + rehype-harden: 1.1.5 + rehype-katex: 7.0.1 + rehype-raw: 7.0.0 + remark-gfm: 4.0.1 + remark-math: 6.0.0 + shiki: 3.14.0 + tailwind-merge: 3.3.1 + transitivePeerDependencies: + - '@types/react' + - supports-color + streamsearch@1.1.0: {} string-length@4.0.2: @@ -20284,6 +21561,8 @@ snapshots: client-only: 0.0.1 react: 19.2.0 + stylis@4.3.6: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -20406,10 +21685,35 @@ snapshots: dependencies: typescript: 5.9.3 + ts-dedent@2.2.0: {} + + ts-deepmerge@7.0.3: {} + ts-error@1.0.6: {} ts-interface-checker@0.1.13: {} + ts-jest@29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + handlebars: 4.7.8 + jest: 29.7.0(@types/node@20.19.21) + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.3 + type-fest: 4.41.0 + typescript: 5.9.3 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.28.4 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.28.4) + esbuild: 0.25.10 + jest-util: 29.7.0 + ts-jest@29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3): dependencies: bs-logger: 0.2.6 @@ -20516,6 +21820,8 @@ snapshots: turbo-windows-64: 2.5.8 turbo-windows-arm64: 2.5.8 + tw-animate-css@1.4.0: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -20633,6 +21939,11 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-generated@2.0.1: {} unist-util-is@5.2.1: @@ -20765,6 +22076,10 @@ snapshots: optionalDependencies: '@types/react': 19.2.2 + use-stick-to-bottom@1.1.1(react@19.2.0): + dependencies: + react: 19.2.0 + use-sync-external-store@1.6.0(react@19.2.0): dependencies: react: 19.2.0 @@ -20823,6 +22138,23 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vscode-jsonrpc@8.2.0: {} + + vscode-languageserver-protocol@3.17.5: + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + + vscode-languageserver-textdocument@1.0.12: {} + + vscode-languageserver-types@3.17.5: {} + + vscode-languageserver@9.0.1: + dependencies: + vscode-languageserver-protocol: 3.17.5 + + vscode-uri@3.0.8: {} + w3c-keyname@2.2.8: {} wait-port@1.1.0: diff --git a/sdks/python/README.md b/sdks/python/README.md index 843d9d028..d9e48e26a 100644 --- a/sdks/python/README.md +++ b/sdks/python/README.md @@ -38,6 +38,23 @@ sse_data = encoder.encode(event) # Output: data: {"type":"TEXT_MESSAGE_CONTENT","messageId":"msg_123","delta":"Hello from Python!"}\n\n ``` +### Multimodal user message + +```python +from ag_ui.core import UserMessage, TextInputContent, BinaryInputContent + +message = UserMessage( + id="user-123", + content=[ + TextInputContent(text="Please describe this image"), + BinaryInputContent(mime_type="image/png", url="https://example.com/cat.png"), + ], +) + +payload = message.model_dump(by_alias=True) +# {"id": "user-123", "role": "user", "content": [...]} +``` + ## Packages - **`ag_ui.core`** – Types, events, and data models for AG-UI protocol diff --git a/sdks/python/ag_ui/core/__init__.py b/sdks/python/ag_ui/core/__init__.py index 7e909ad5b..248ff1005 100644 --- a/sdks/python/ag_ui/core/__init__.py +++ b/sdks/python/ag_ui/core/__init__.py @@ -22,6 +22,8 @@ StateSnapshotEvent, StateDeltaEvent, MessagesSnapshotEvent, + ActivitySnapshotEvent, + ActivityDeltaEvent, RawEvent, CustomEvent, RunStartedEvent, @@ -41,12 +43,16 @@ AssistantMessage, UserMessage, ToolMessage, + ActivityMessage, Message, Role, Context, Tool, RunAgentInput, - State + State, + TextInputContent, + BinaryInputContent, + InputContent, ) __all__ = [ @@ -70,6 +76,8 @@ "StateSnapshotEvent", "StateDeltaEvent", "MessagesSnapshotEvent", + "ActivitySnapshotEvent", + "ActivityDeltaEvent", "RawEvent", "CustomEvent", "RunStartedEvent", @@ -87,10 +95,14 @@ "AssistantMessage", "UserMessage", "ToolMessage", + "ActivityMessage", "Message", "Role", "Context", "Tool", "RunAgentInput", - "State" + "State", + "TextInputContent", + "BinaryInputContent", + "InputContent", ] diff --git a/sdks/python/ag_ui/core/events.py b/sdks/python/ag_ui/core/events.py index 2a54a9c8e..94fb63c75 100644 --- a/sdks/python/ag_ui/core/events.py +++ b/sdks/python/ag_ui/core/events.py @@ -7,7 +7,7 @@ from pydantic import Field -from .types import ConfiguredBaseModel, Message, State, Role +from .types import ConfiguredBaseModel, Message, State, Role, RunAgentInput # Text messages can have any role except "tool" TextMessageRole = Literal["developer", "system", "assistant", "user"] @@ -34,6 +34,8 @@ class EventType(str, Enum): STATE_SNAPSHOT = "STATE_SNAPSHOT" STATE_DELTA = "STATE_DELTA" MESSAGES_SNAPSHOT = "MESSAGES_SNAPSHOT" + ACTIVITY_SNAPSHOT = "ACTIVITY_SNAPSHOT" + ACTIVITY_DELTA = "ACTIVITY_DELTA" RAW = "RAW" CUSTOM = "CUSTOM" RUN_STARTED = "RUN_STARTED" @@ -188,6 +190,25 @@ class MessagesSnapshotEvent(BaseEvent): messages: List[Message] +class ActivitySnapshotEvent(BaseEvent): + """Event containing a snapshot of an activity message.""" + + type: Literal[EventType.ACTIVITY_SNAPSHOT] = EventType.ACTIVITY_SNAPSHOT # pyright: ignore[reportIncompatibleVariableOverride] + message_id: str + activity_type: str + content: Any + replace: bool = True + + +class ActivityDeltaEvent(BaseEvent): + """Event containing a JSON Patch delta for an activity message.""" + + type: Literal[EventType.ACTIVITY_DELTA] = EventType.ACTIVITY_DELTA # pyright: ignore[reportIncompatibleVariableOverride] + message_id: str + activity_type: str + patch: List[Any] + + class RawEvent(BaseEvent): """ Event containing a raw event. @@ -213,6 +234,8 @@ class RunStartedEvent(BaseEvent): type: Literal[EventType.RUN_STARTED] = EventType.RUN_STARTED # pyright: ignore[reportIncompatibleVariableOverride] thread_id: str run_id: str + parent_run_id: Optional[str] = None + input: Optional[RunAgentInput] = None class RunFinishedEvent(BaseEvent): @@ -264,6 +287,8 @@ class StepFinishedEvent(BaseEvent): StateSnapshotEvent, StateDeltaEvent, MessagesSnapshotEvent, + ActivitySnapshotEvent, + ActivityDeltaEvent, RawEvent, CustomEvent, RunStartedEvent, diff --git a/sdks/python/ag_ui/core/types.py b/sdks/python/ag_ui/core/types.py index 47b7ae182..e4e358caf 100644 --- a/sdks/python/ag_ui/core/types.py +++ b/sdks/python/ag_ui/core/types.py @@ -2,9 +2,9 @@ This module contains the types for the Agent User Interaction Protocol Python SDK. """ -from typing import Annotated, Any, List, Literal, Optional, Union +from typing import Annotated, Any, Dict, List, Literal, Optional, Union -from pydantic import BaseModel, ConfigDict, Field +from pydantic import BaseModel, ConfigDict, Field, model_validator from pydantic.alias_generators import to_camel @@ -13,7 +13,7 @@ class ConfiguredBaseModel(BaseModel): A configurable base model. """ model_config = ConfigDict( - extra="forbid", + extra="allow", alias_generator=to_camel, populate_by_name=True, ) @@ -70,12 +70,44 @@ class AssistantMessage(BaseMessage): tool_calls: Optional[List[ToolCall]] = None +class TextInputContent(ConfiguredBaseModel): + """A text fragment in a multimodal user message.""" + + type: Literal["text"] = "text" + text: str + + +class BinaryInputContent(ConfiguredBaseModel): + """A binary payload reference in a multimodal user message.""" + + type: Literal["binary"] = "binary" # pyright: ignore[reportIncompatibleVariableOverride] + mime_type: str + id: Optional[str] = None + url: Optional[str] = None + data: Optional[str] = None + filename: Optional[str] = None + + @model_validator(mode="after") + def validate_source(self) -> "BinaryInputContent": + """Ensure at least one binary payload source is provided.""" + if not any([self.id, self.url, self.data]): + raise ValueError("BinaryInputContent requires id, url, or data to be provided.") + return self + + +InputContent = Annotated[ + Union[TextInputContent, BinaryInputContent], + Field(discriminator="type"), +] + + class UserMessage(BaseMessage): """ - A user message. + A user message supporting text or multimodal content. """ - role: Literal["user"] = "user" # pyright: ignore[reportIncompatibleVariableOverride] - content: str + + role: Literal["user"] = "user" # pyright: ignore[reportIncompatibleVariableOverride] + content: Union[str, List[InputContent]] class ToolMessage(ConfiguredBaseModel): @@ -89,12 +121,30 @@ class ToolMessage(ConfiguredBaseModel): error: Optional[str] = None +class ActivityMessage(ConfiguredBaseModel): + """ + An activity progress message emitted between chat messages. + """ + + id: str + role: Literal["activity"] = "activity" # pyright: ignore[reportIncompatibleVariableOverride] + activity_type: str + content: Dict[str, Any] + + Message = Annotated[ - Union[DeveloperMessage, SystemMessage, AssistantMessage, UserMessage, ToolMessage], + Union[ + DeveloperMessage, + SystemMessage, + AssistantMessage, + UserMessage, + ToolMessage, + ActivityMessage, + ], Field(discriminator="role") ] -Role = Literal["developer", "system", "assistant", "user", "tool"] +Role = Literal["developer", "system", "assistant", "user", "tool", "activity"] class Context(ConfiguredBaseModel): @@ -120,6 +170,7 @@ class RunAgentInput(ConfiguredBaseModel): """ thread_id: str run_id: str + parent_run_id: Optional[str] = None state: Any messages: List[Message] tools: List[Tool] diff --git a/sdks/python/pyproject.toml b/sdks/python/pyproject.toml index a8de00217..84eadcfee 100644 --- a/sdks/python/pyproject.toml +++ b/sdks/python/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ag-ui-protocol" -version = "0.1.9" +version = "0.1.10" description = "" authors = ["Markus Ecker "] readme = "README.md" diff --git a/sdks/python/tests/test_events.py b/sdks/python/tests/test_events.py index c73a2537c..7245d88aa 100644 --- a/sdks/python/tests/test_events.py +++ b/sdks/python/tests/test_events.py @@ -16,6 +16,8 @@ StateSnapshotEvent, StateDeltaEvent, MessagesSnapshotEvent, + ActivitySnapshotEvent, + ActivityDeltaEvent, RawEvent, CustomEvent, RunStartedEvent, @@ -202,6 +204,58 @@ def test_messages_snapshot(self): self.assertEqual(serialized["messages"][0]["role"], "user") self.assertEqual(serialized["messages"][1]["toolCalls"][0]["function"]["name"], "get_weather") + def test_activity_snapshot(self): + """Test creating and serializing an ActivitySnapshotEvent""" + content = {"tasks": ["search", "summarize"]} + event = ActivitySnapshotEvent( + message_id="msg_activity", + activity_type="PLAN", + content=content, + timestamp=1648214400000, + ) + + self.assertEqual(event.message_id, "msg_activity") + self.assertEqual(event.activity_type, "PLAN") + self.assertEqual(event.content, content) + self.assertTrue(event.replace) + + serialized = event.model_dump(by_alias=True) + self.assertEqual(serialized["type"], "ACTIVITY_SNAPSHOT") + self.assertEqual(serialized["messageId"], "msg_activity") + self.assertEqual(serialized["activityType"], "PLAN") + self.assertEqual(serialized["content"], content) + self.assertTrue(serialized["replace"]) + + event_replace_false = ActivitySnapshotEvent( + message_id="msg_activity", + activity_type="PLAN", + content=content, + replace=False, + ) + self.assertFalse(event_replace_false.replace) + serialized_false = event_replace_false.model_dump(by_alias=True) + self.assertFalse(serialized_false["replace"]) + + def test_activity_delta(self): + """Test creating and serializing an ActivityDeltaEvent""" + patch = [{"op": "replace", "path": "/tasks/0", "value": "āœ“ search"}] + event = ActivityDeltaEvent( + message_id="msg_activity", + activity_type="PLAN", + patch=patch, + timestamp=1648214400000, + ) + + self.assertEqual(event.message_id, "msg_activity") + self.assertEqual(event.activity_type, "PLAN") + self.assertEqual(event.patch, patch) + + serialized = event.model_dump(by_alias=True) + self.assertEqual(serialized["type"], "ACTIVITY_DELTA") + self.assertEqual(serialized["messageId"], "msg_activity") + self.assertEqual(serialized["activityType"], "PLAN") + self.assertEqual(serialized["patch"], patch) + def test_raw_event(self): """Test creating and serializing a RawEvent""" raw_data = {"origin": "server", "data": {"key": "value"}} @@ -338,6 +392,13 @@ def test_event_union_deserialization(self): "snapshot": {"status": "active"}, "timestamp": 1648214400000 }, + { + "type": "ACTIVITY_SNAPSHOT", + "messageId": "msg_activity", + "activityType": "PLAN", + "content": {"tasks": []}, + "timestamp": 1648214400000, + }, { "type": "RUN_ERROR", "message": "Error occurred", @@ -345,12 +406,13 @@ def test_event_union_deserialization(self): "timestamp": 1648214400000 } ] - + expected_types = [ TextMessageStartEvent, TextMessageContentEvent, ToolCallStartEvent, StateSnapshotEvent, + ActivitySnapshotEvent, RunErrorEvent ] @@ -392,6 +454,16 @@ def test_serialization_round_trip(self): UserMessage(id="user_1", content="Hello") ] ), + ActivitySnapshotEvent( + message_id="msg_activity", + activity_type="PLAN", + content={"tasks": []}, + ), + ActivityDeltaEvent( + message_id="msg_activity", + activity_type="PLAN", + patch=[{"op": "add", "path": "/tasks/-", "value": "search"}], + ), RunStartedEvent( thread_id="thread_123", run_id="run_456" diff --git a/sdks/python/tests/test_types.py b/sdks/python/tests/test_types.py index e534aa5ab..843a5a977 100644 --- a/sdks/python/tests/test_types.py +++ b/sdks/python/tests/test_types.py @@ -10,8 +10,11 @@ AssistantMessage, UserMessage, ToolMessage, + ActivityMessage, Message, - RunAgentInput + RunAgentInput, + TextInputContent, + BinaryInputContent, ) @@ -56,6 +59,24 @@ def test_tool_message_camel_case(self): self.assertIn("toolCallId", serialized) self.assertEqual(serialized["toolCallId"], "call_456") + def test_activity_message(self): + """Test creating and serializing an activity message""" + content = {"steps": ["search", "summarize"]} + msg = ActivityMessage( + id="activity_123", + activity_type="PLAN", + content=content, + ) + + self.assertEqual(msg.role, "activity") + self.assertEqual(msg.activity_type, "PLAN") + self.assertEqual(msg.content, content) + + serialized = msg.model_dump(by_alias=True) + self.assertEqual(serialized["role"], "activity") + self.assertEqual(serialized["activityType"], "PLAN") + self.assertEqual(serialized["content"], content) + def test_parse_camel_case_json_tool_message(self): """Test parsing JSON with camelCase field names""" # JSON data with camelCase field names @@ -143,6 +164,31 @@ def test_user_message(self): self.assertEqual(serialized["role"], "user") self.assertEqual(serialized["content"], "User query") + def test_user_message_multimodal_content(self): + """Test creating and serializing a multimodal user message""" + contents = [ + TextInputContent(text="Check this out"), + BinaryInputContent(mime_type="image/png", url="https://example.com/image.png"), + ] + msg = UserMessage( + id="user_multi", + content=contents, + ) + self.assertIsInstance(msg.content, list) + self.assertEqual(len(msg.content), 2) + serialized = msg.model_dump(by_alias=True) + self.assertIsInstance(serialized["content"], list) + self.assertEqual(serialized["content"][0]["type"], "text") + self.assertEqual(serialized["content"][0]["text"], "Check this out") + self.assertEqual(serialized["content"][1]["mimeType"], "image/png") + self.assertEqual(serialized["content"][1]["url"], "https://example.com/image.png") + + def test_binary_input_requires_payload_source(self): + """Binary content must specify at least one delivery channel""" + with self.assertRaises(ValidationError): + BinaryInputContent(mime_type="image/png") + + def test_message_union_deserialization(self): """Test that the Message union correctly deserializes to the appropriate type""" # Create type adapter for the union @@ -159,7 +205,13 @@ def test_message_union_deserialization(self): "role": "tool", "content": "Tool result", "toolCallId": "call_303" - } + }, + { + "id": "activity_404", + "role": "activity", + "activityType": "PLAN", + "content": {"steps": []}, + }, ] expected_types = [ @@ -167,7 +219,8 @@ def test_message_union_deserialization(self): SystemMessage, AssistantMessage, UserMessage, - ToolMessage + ToolMessage, + ActivityMessage, ] for data, expected_type in zip(message_data, expected_types): @@ -209,6 +262,7 @@ def test_run_agent_input_deserialization(self): run_agent_input_data = { "threadId": "thread_12345", "runId": "run_67890", + "parentRunId": "run_parent_123", "state": {"conversation_state": "active", "custom_data": {"key": "value"}}, "messages": [ # System message @@ -256,7 +310,14 @@ def test_run_agent_input_deserialization(self): { "id": "user_002", "role": "user", - "content": "Can you explain these results?" + "content": [ + {"type": "text", "text": "Can you explain these results?"}, + { + "type": "binary", + "mimeType": "image/png", + "url": "https://example.com/results-chart.png" + } + ] } ], "tools": [ @@ -307,6 +368,7 @@ def test_run_agent_input_deserialization(self): # Verify basic fields self.assertEqual(run_agent_input.thread_id, "thread_12345") self.assertEqual(run_agent_input.run_id, "run_67890") + self.assertEqual(run_agent_input.parent_run_id, "run_parent_123") self.assertEqual(run_agent_input.state["conversation_state"], "active") # Verify messages count and types @@ -321,6 +383,12 @@ def test_run_agent_input_deserialization(self): # Verify specific message content self.assertEqual(run_agent_input.messages[0].content, "You are a helpful assistant.") self.assertEqual(run_agent_input.messages[1].content, "Can you help me analyze this data?") + multimodal_content = run_agent_input.messages[5].content + self.assertIsInstance(multimodal_content, list) + self.assertEqual(multimodal_content[0].type, "text") + self.assertEqual(multimodal_content[0].text, "Can you explain these results?") + self.assertEqual(multimodal_content[1].mime_type, "image/png") + self.assertEqual(multimodal_content[1].url, "https://example.com/results-chart.png") # Verify assistant message with tool call assistant_msg = run_agent_input.messages[3] @@ -368,15 +436,17 @@ def test_validation_errors(self): with self.assertRaises(ValidationError): UserMessage.model_validate(missing_id_data) - # Test extra fields + # Test extra fields are now allowed for backwards compatibility extra_field_data = { "id": "msg_456", "role": "user", "content": "Hello", - "extra_field": "This shouldn't be here" # Extra field + "extra_field": "This is allowed for backwards compatibility" # Extra field } - with self.assertRaises(ValidationError): - UserMessage.model_validate(extra_field_data) + # Should not raise an error - extra fields are allowed + msg = UserMessage.model_validate(extra_field_data) + self.assertEqual(msg.id, "msg_456") + self.assertEqual(msg.content, "Hello") # Test invalid tool_call_id in ToolMessage invalid_tool_data = { diff --git a/sdks/typescript/README.md b/sdks/typescript/README.md index 64b9a5f4a..1de4bd2f4 100644 --- a/sdks/typescript/README.md +++ b/sdks/typescript/README.md @@ -3,3 +3,21 @@ The TypeScript SDK for the [Agent User Interaction Protocol](https://ag-ui.com). For more information visit the [official documentation](https://docs.ag-ui.com/). + +## Multimodal user messages + +```ts +import { UserMessageSchema } from "@ag-ui/core"; + +const message = UserMessageSchema.parse({ + id: "user-123", + role: "user" as const, + content: [ + { type: "text", text: "Please describe this image" }, + { type: "binary", mimeType: "image/png", url: "https://example.com/cat.png" }, + ], +}); + +console.log(message); +// { id: "user-123", role: "user", content: [...] } +``` diff --git a/sdks/typescript/packages/client/README.md b/sdks/typescript/packages/client/README.md index 1be36135a..fbc9c41db 100644 --- a/sdks/typescript/packages/client/README.md +++ b/sdks/typescript/packages/client/README.md @@ -19,6 +19,7 @@ yarn add @ag-ui/client - šŸ“” **Event streaming** – Full AG-UI event processing with validation and transformation - šŸ”„ **State management** – Automatic message/state tracking with reactive updates - šŸŖ **Subscriber system** – Middleware-style hooks for logging, persistence, and custom logic +- šŸŽÆ **Middleware support** – Transform and filter events with function or class-based middleware ## Quick example @@ -37,6 +38,32 @@ const result = await agent.runAgent({ console.log(result.newMessages); ``` +## Using Middleware + +```ts +import { HttpAgent, FilterToolCallsMiddleware } from "@ag-ui/client"; + +const agent = new HttpAgent({ + url: "https://api.example.com/agent", +}); + +// Add middleware to transform or filter events +agent.use( + // Function middleware for logging + (input, next) => { + console.log("Starting run:", input.runId); + return next.run(input); + }, + + // Class middleware for filtering tool calls + new FilterToolCallsMiddleware({ + allowedToolCalls: ["search", "calculate"] + }) +); + +await agent.runAgent(); +``` + ## Documentation - Concepts & architecture: [`docs/concepts`](https://docs.ag-ui.com/concepts/architecture) diff --git a/sdks/typescript/packages/client/jest.config.js b/sdks/typescript/packages/client/jest.config.js index 0521f8d91..919fd78b9 100644 --- a/sdks/typescript/packages/client/jest.config.js +++ b/sdks/typescript/packages/client/jest.config.js @@ -6,5 +6,11 @@ module.exports = { passWithNoTests: true, moduleNameMapper: { "^@/(.*)$": "/src/$1", + "^@ag-ui/core$": "/../core/src/index.ts", + "^@ag-ui/core/(.*)$": "/../core/src/$1", + "^@ag-ui/proto$": "/../proto/src/index.ts", + "^@ag-ui/proto/(.*)$": "/../proto/src/$1", + "^@ag-ui/encoder$": "/../encoder/src/index.ts", + "^@ag-ui/encoder/(.*)$": "/../encoder/src/$1", }, }; diff --git a/sdks/typescript/packages/client/package.json b/sdks/typescript/packages/client/package.json index c963ffe1a..908c96199 100644 --- a/sdks/typescript/packages/client/package.json +++ b/sdks/typescript/packages/client/package.json @@ -25,9 +25,10 @@ }, "dependencies": { "@ag-ui/core": "workspace:*", - "@ag-ui/proto": "workspace:*", "@ag-ui/encoder": "workspace:*", + "@ag-ui/proto": "workspace:*", "@types/uuid": "^10.0.0", + "compare-versions": "^6.1.1", "fast-json-patch": "^3.1.1", "rxjs": "7.8.1", "untruncate-json": "^0.0.1", diff --git a/sdks/typescript/packages/client/src/agent/__tests__/agent-clone.test.ts b/sdks/typescript/packages/client/src/agent/__tests__/agent-clone.test.ts new file mode 100644 index 000000000..3fb00e8a0 --- /dev/null +++ b/sdks/typescript/packages/client/src/agent/__tests__/agent-clone.test.ts @@ -0,0 +1,81 @@ +import { AbstractAgent } from "../agent"; +import { HttpAgent } from "../http"; +import { BaseEvent, Message, RunAgentInput } from "@ag-ui/core"; +import { EMPTY, Observable } from "rxjs"; + +class CloneableTestAgent extends AbstractAgent { + constructor() { + super({ + agentId: "test-agent", + description: "Cloneable test agent", + threadId: "thread-test", + initialMessages: [ + { + id: "msg-1", + role: "user", + content: "Hello world", + toolCalls: [], + } as Message, + ], + initialState: { stage: "initial" }, + }); + } + + protected run(_: RunAgentInput): Observable { + return EMPTY as Observable; + } +} + +describe("AbstractAgent cloning", () => { + it("clones subclass instances with independent state", () => { + const agent = new CloneableTestAgent(); + + const cloned = agent.clone() as CloneableTestAgent; + + expect(cloned).toBeInstanceOf(CloneableTestAgent); + expect(cloned).not.toBe(agent); + expect(cloned.agentId).toBe(agent.agentId); + expect(cloned.threadId).toBe(agent.threadId); + expect(cloned.messages).toEqual(agent.messages); + expect(cloned.messages).not.toBe(agent.messages); + expect(cloned.state).toEqual(agent.state); + expect(cloned.state).not.toBe(agent.state); + }); +}); + +describe("HttpAgent cloning", () => { + it("produces a new HttpAgent with cloned configuration and abort controller", () => { + const httpAgent = new HttpAgent({ + url: "https://example.com/agent", + headers: { Authorization: "Bearer token" }, + threadId: "thread-http", + initialMessages: [ + { + id: "msg-http", + role: "assistant", + content: "response", + toolCalls: [], + } as Message, + ], + initialState: { status: "ready" }, + }); + + httpAgent.abortController.abort("cancelled"); + + const cloned = httpAgent.clone() as HttpAgent; + + expect(cloned).toBeInstanceOf(HttpAgent); + expect(cloned).not.toBe(httpAgent); + expect(cloned.url).toBe(httpAgent.url); + expect(cloned.headers).toEqual(httpAgent.headers); + expect(cloned.headers).not.toBe(httpAgent.headers); + expect(cloned.messages).toEqual(httpAgent.messages); + expect(cloned.messages).not.toBe(httpAgent.messages); + expect(cloned.state).toEqual(httpAgent.state); + expect(cloned.state).not.toBe(httpAgent.state); + expect(cloned.abortController).not.toBe(httpAgent.abortController); + expect(cloned.abortController).toBeInstanceOf(AbortController); + expect(cloned.abortController.signal.aborted).toBe(true); + expect(cloned.abortController.signal.reason).toBe("cancelled"); + }); +}); diff --git a/sdks/typescript/packages/client/src/agent/__tests__/agent-multiple-runs.test.ts b/sdks/typescript/packages/client/src/agent/__tests__/agent-multiple-runs.test.ts index 4f3633d6a..009df2cb7 100644 --- a/sdks/typescript/packages/client/src/agent/__tests__/agent-multiple-runs.test.ts +++ b/sdks/typescript/packages/client/src/agent/__tests__/agent-multiple-runs.test.ts @@ -1,5 +1,5 @@ -import { AbstractAgent, RunAgentResult } from "../agent"; -import { BaseEvent, EventType, Message, RunAgentInput, TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, RunStartedEvent, RunFinishedEvent } from "@ag-ui/core"; +import { AbstractAgent } from "../agent"; +import { BaseEvent, EventType, Message, RunAgentInput, TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, RunStartedEvent, RunFinishedEvent, ActivitySnapshotEvent } from "@ag-ui/core"; import { Observable, of } from "rxjs"; describe("AbstractAgent multiple runs", () => { @@ -273,4 +273,65 @@ describe("AbstractAgent multiple runs", () => { expect(agent.messages[0].content).toBe("Initial message"); expect(agent.messages[1].content).toBe("Response message"); }); -}); \ No newline at end of file + + it("should retain activity messages across runs", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + const firstRunEvents: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + } as RunStartedEvent, + { + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["task 1"] }, + } as ActivitySnapshotEvent, + { + type: EventType.RUN_FINISHED, + } as RunFinishedEvent, + ]; + + agent.setEvents(firstRunEvents); + await agent.runAgent({ runId: "run-1" }); + + expect(agent.messages.length).toBe(1); + expect(agent.messages[0].role).toBe("activity"); + + const secondRunEvents: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-2", + } as RunStartedEvent, + { + type: EventType.TEXT_MESSAGE_START, + messageId: "msg-2", + role: "assistant", + } as TextMessageStartEvent, + { + type: EventType.TEXT_MESSAGE_CONTENT, + messageId: "msg-2", + delta: "Hello from run 2", + } as TextMessageContentEvent, + { + type: EventType.TEXT_MESSAGE_END, + messageId: "msg-2", + } as TextMessageEndEvent, + { + type: EventType.RUN_FINISHED, + } as RunFinishedEvent, + ]; + + agent.setEvents(secondRunEvents); + await agent.runAgent({ runId: "run-2" }); + + expect(agent.messages.length).toBe(2); + expect(agent.messages.some((message) => message.role === "activity" && message.id === "activity-1")).toBe(true); + }); +}); diff --git a/sdks/typescript/packages/client/src/agent/__tests__/agent-mutations.test.ts b/sdks/typescript/packages/client/src/agent/__tests__/agent-mutations.test.ts index 55d50ddd1..e6e7c0fbc 100644 --- a/sdks/typescript/packages/client/src/agent/__tests__/agent-mutations.test.ts +++ b/sdks/typescript/packages/client/src/agent/__tests__/agent-mutations.test.ts @@ -17,14 +17,18 @@ jest.mock("uuid", () => ({ })); // Mock utils -jest.mock("@/utils", () => ({ - structuredClone_: (obj: any) => { - if (obj === undefined) return undefined; - const jsonString = JSON.stringify(obj); - if (jsonString === undefined || jsonString === "undefined") return undefined; - return JSON.parse(jsonString); - }, -})); +jest.mock("@/utils", () => { + const actual = jest.requireActual("@/utils"); + return { + ...actual, + structuredClone_: (obj: any) => { + if (obj === undefined) return undefined; + const jsonString = JSON.stringify(obj); + if (jsonString === undefined || jsonString === "undefined") return undefined; + return JSON.parse(jsonString); + }, + }; +}); // Helper function to wait for async notifications to complete const waitForAsyncNotifications = async () => { diff --git a/sdks/typescript/packages/client/src/agent/__tests__/agent-result.test.ts b/sdks/typescript/packages/client/src/agent/__tests__/agent-result.test.ts index 5df3a5cf1..bf7b614ae 100644 --- a/sdks/typescript/packages/client/src/agent/__tests__/agent-result.test.ts +++ b/sdks/typescript/packages/client/src/agent/__tests__/agent-result.test.ts @@ -1,11 +1,12 @@ import { AbstractAgent } from "../agent"; import { AgentSubscriber } from "../subscriber"; import { + ActivityDeltaEvent, + ActivitySnapshotEvent, BaseEvent, EventType, Message, RunAgentInput, - State, MessagesSnapshotEvent, RunFinishedEvent, RunStartedEvent, @@ -18,14 +19,18 @@ jest.mock("uuid", () => ({ })); // Mock utils -jest.mock("@/utils", () => ({ - structuredClone_: (obj: any) => { - if (obj === undefined) return undefined; - const jsonString = JSON.stringify(obj); - if (jsonString === undefined || jsonString === "undefined") return undefined; - return JSON.parse(jsonString); - }, -})); +jest.mock("@/utils", () => { + const actual = jest.requireActual("@/utils"); + return { + ...actual, + structuredClone_: (obj: any) => { + if (obj === undefined) return undefined; + const jsonString = JSON.stringify(obj); + if (jsonString === undefined || jsonString === "undefined") return undefined; + return JSON.parse(jsonString); + }, + }; +}); // Mock the verify and chunks modules jest.mock("@/verify", () => ({ @@ -307,6 +312,60 @@ describe("Agent Result", () => { expect(result.newMessages[1].id).toBe("new-2"); expect(result.newMessages[2].id).toBe("new-3"); }); + + it("should retain appended activity operations in agent messages", async () => { + const firstOperation = { id: "op-1", status: "PENDING" }; + const secondOperation = { id: "op-2", status: "COMPLETE" }; + + agent.setEventsToEmit([ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-ops", + } as RunStartedEvent, + { + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-ops", + activityType: "PLAN", + content: { operations: [] }, + replace: false, + } as ActivitySnapshotEvent, + { + type: EventType.ACTIVITY_DELTA, + messageId: "activity-ops", + activityType: "PLAN", + patch: [{ op: "add", path: "/operations/-", value: firstOperation }], + } as ActivityDeltaEvent, + { + type: EventType.ACTIVITY_DELTA, + messageId: "activity-ops", + activityType: "PLAN", + patch: [{ op: "add", path: "/operations/-", value: secondOperation }], + } as ActivityDeltaEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-ops", + } as RunFinishedEvent, + ]); + + const result = await agent.runAgent({ runId: "run-ops" }); + + const activityMessage = agent.messages.find((message) => message.id === "activity-ops"); + + expect(activityMessage).toBeTruthy(); + expect(activityMessage?.role).toBe("activity"); + expect(activityMessage?.activityType).toBe("PLAN"); + expect(activityMessage?.content).toEqual({ + operations: [firstOperation, secondOperation], + }); + + expect(result.newMessages).toHaveLength(1); + expect(result.newMessages[0].id).toBe("activity-ops"); + expect(result.newMessages[0].content).toEqual({ + operations: [firstOperation, secondOperation], + }); + }); }); describe("combined result and newMessages", () => { diff --git a/sdks/typescript/packages/client/src/agent/__tests__/agent-version.test.ts b/sdks/typescript/packages/client/src/agent/__tests__/agent-version.test.ts new file mode 100644 index 000000000..382cc9733 --- /dev/null +++ b/sdks/typescript/packages/client/src/agent/__tests__/agent-version.test.ts @@ -0,0 +1,19 @@ +import { AbstractAgent } from "@/agent"; +import { BaseEvent, RunAgentInput } from "@ag-ui/core"; +import { Observable } from "rxjs"; +import packageJson from "../../../package.json"; + +describe("AbstractAgent maxVersion default", () => { + class VersionAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + subscriber.complete(); + }); + } + } + + it("uses the package.json version by default", () => { + const agent = new VersionAgent(); + expect(agent.maxVersion).toBe(packageJson.version); + }); +}); diff --git a/sdks/typescript/packages/client/src/agent/__tests__/subscriber.test.ts b/sdks/typescript/packages/client/src/agent/__tests__/subscriber.test.ts index 6dee07da1..f6305a1a9 100644 --- a/sdks/typescript/packages/client/src/agent/__tests__/subscriber.test.ts +++ b/sdks/typescript/packages/client/src/agent/__tests__/subscriber.test.ts @@ -28,14 +28,18 @@ jest.mock("uuid", () => ({ })); // Mock utils with handling for undefined values -jest.mock("@/utils", () => ({ - structuredClone_: (obj: any) => { - if (obj === undefined) return undefined; - const jsonString = JSON.stringify(obj); - if (jsonString === undefined || jsonString === "undefined") return undefined; - return JSON.parse(jsonString); - }, -})); +jest.mock("@/utils", () => { + const actual = jest.requireActual("@/utils"); + return { + ...actual, + structuredClone_: (obj: any) => { + if (obj === undefined) return undefined; + const jsonString = JSON.stringify(obj); + if (jsonString === undefined || jsonString === "undefined") return undefined; + return JSON.parse(jsonString); + }, + }; +}); // Mock the verify modules but NOT apply - we want to test against real defaultApplyEvents jest.mock("@/verify", () => ({ diff --git a/sdks/typescript/packages/client/src/agent/agent.ts b/sdks/typescript/packages/client/src/agent/agent.ts index 8e2f95610..4820ed5b2 100644 --- a/sdks/typescript/packages/client/src/agent/agent.ts +++ b/sdks/typescript/packages/client/src/agent/agent.ts @@ -4,15 +4,24 @@ import { Message, State, RunAgentInput, BaseEvent, ToolCall, AssistantMessage } import { AgentConfig, RunAgentParameters } from "./types"; import { v4 as uuidv4 } from "uuid"; import { structuredClone_ } from "@/utils"; +import { compareVersions } from "compare-versions"; import { catchError, map, tap } from "rxjs/operators"; import { finalize } from "rxjs/operators"; -import { pipe, Observable, from, of } from "rxjs"; +import { pipe, Observable, from, of, EMPTY } from "rxjs"; import { verifyEvents } from "@/verify"; import { convertToLegacyEvents } from "@/legacy/convert"; import { LegacyRuntimeProtocolEvent } from "@/legacy/types"; import { lastValueFrom } from "rxjs"; import { transformChunks } from "@/chunks"; import { AgentStateMutation, AgentSubscriber, runSubscribersWithMutation } from "./subscriber"; +import { AGUIConnectNotImplementedError } from "@ag-ui/core"; +import { + Middleware, + MiddlewareFunction, + FunctionMiddleware, + BackwardCompatibility_0_0_39, +} from "@/middleware"; +import packageJson from "../../package.json"; export interface RunAgentResult { result: any; @@ -27,6 +36,12 @@ export abstract class AbstractAgent { public state: State; public debug: boolean = false; public subscribers: AgentSubscriber[] = []; + public isRunning: boolean = false; + private middlewares: Middleware[] = []; + + get maxVersion() { + return packageJson.version; + } constructor({ agentId, @@ -42,6 +57,10 @@ export abstract class AbstractAgent { this.messages = structuredClone_(initialMessages ?? []); this.state = structuredClone_(initialState ?? {}); this.debug = debug ?? false; + + if (compareVersions(this.maxVersion, "0.0.39") <= 0) { + this.middlewares.unshift(new BackwardCompatibility_0_0_39()); + } } public subscribe(subscriber: AgentSubscriber) { @@ -55,47 +74,131 @@ export abstract class AbstractAgent { abstract run(input: RunAgentInput): Observable; + public use(...middlewares: (Middleware | MiddlewareFunction)[]): this { + const normalizedMiddlewares = middlewares.map((middleware) => + typeof middleware === "function" ? new FunctionMiddleware(middleware) : middleware, + ); + this.middlewares.push(...normalizedMiddlewares); + return this; + } + public async runAgent( parameters?: RunAgentParameters, subscriber?: AgentSubscriber, ): Promise { - this.agentId = this.agentId ?? uuidv4(); - const input = this.prepareRunAgentInput(parameters); - let result: any = undefined; - const currentMessageIds = new Set(this.messages.map((message) => message.id)); - - const subscribers: AgentSubscriber[] = [ - { - onRunFinishedEvent: (params) => { - result = params.result; + try { + this.isRunning = true; + this.agentId = this.agentId ?? uuidv4(); + const input = this.prepareRunAgentInput(parameters); + let result: any = undefined; + const currentMessageIds = new Set(this.messages.map((message) => message.id)); + + const subscribers: AgentSubscriber[] = [ + { + onRunFinishedEvent: (params) => { + result = params.result; + }, }, - }, - ...this.subscribers, - subscriber ?? {}, - ]; + ...this.subscribers, + subscriber ?? {}, + ]; - await this.onInitialize(input, subscribers); + await this.onInitialize(input, subscribers); - const pipeline = pipe( - () => this.run(input), - transformChunks(this.debug), - verifyEvents(this.debug), - (source$) => this.apply(input, source$, subscribers), - (source$) => this.processApplyEvents(input, source$, subscribers), - catchError((error) => { - return this.onError(input, error, subscribers); - }), - finalize(() => { - void this.onFinalize(input, subscribers); - }), - ); + const pipeline = pipe( + () => { + // Build middleware chain using reduceRight so middlewares can intercept runs. + if (this.middlewares.length === 0) { + return this.run(input); + } - return lastValueFrom(pipeline(of(null))).then(() => { + const chainedAgent = this.middlewares.reduceRight( + (nextAgent: AbstractAgent, middleware) => + ({ + run: (i: RunAgentInput) => middleware.run(i, nextAgent), + }) as AbstractAgent, + this, // Original agent is the final 'next' + ); + + return chainedAgent.run(input); + }, + transformChunks(this.debug), + verifyEvents(this.debug), + (source$) => this.apply(input, source$, subscribers), + (source$) => this.processApplyEvents(input, source$, subscribers), + catchError((error) => { + this.isRunning = false; + return this.onError(input, error, subscribers); + }), + finalize(() => { + this.isRunning = false; + void this.onFinalize(input, subscribers); + }), + ); + + await lastValueFrom(pipeline(of(null))); const newMessages = structuredClone_(this.messages).filter( (message: Message) => !currentMessageIds.has(message.id), ); return { result, newMessages }; - }); + } finally { + this.isRunning = false; + } + } + + protected connect(input: RunAgentInput): Observable { + throw new AGUIConnectNotImplementedError(); + } + public async connectAgent( + parameters?: RunAgentParameters, + subscriber?: AgentSubscriber, + ): Promise { + try { + this.isRunning = true; + this.agentId = this.agentId ?? uuidv4(); + const input = this.prepareRunAgentInput(parameters); + let result: any = undefined; + const currentMessageIds = new Set(this.messages.map((message) => message.id)); + + const subscribers: AgentSubscriber[] = [ + { + onRunFinishedEvent: (params) => { + result = params.result; + }, + }, + ...this.subscribers, + subscriber ?? {}, + ]; + + await this.onInitialize(input, subscribers); + + const pipeline = pipe( + () => this.connect(input), + transformChunks(this.debug), + verifyEvents(this.debug), + (source$) => this.apply(input, source$, subscribers), + (source$) => this.processApplyEvents(input, source$, subscribers), + catchError((error) => { + this.isRunning = false; + if (!(error instanceof AGUIConnectNotImplementedError)) { + return this.onError(input, error, subscribers); + } + return EMPTY; + }), + finalize(() => { + this.isRunning = false; + void this.onFinalize(input, subscribers); + }), + ); + + await lastValueFrom(pipeline(of(null))); // wait for stream completion before toggling isRunning + const newMessages = structuredClone_(this.messages).filter( + (message: Message) => !currentMessageIds.has(message.id), + ); + return { result, newMessages }; + } finally { + this.isRunning = false; + } } public abortRun() {} @@ -142,6 +245,11 @@ export abstract class AbstractAgent { } protected prepareRunAgentInput(parameters?: RunAgentParameters): RunAgentInput { + const clonedMessages = structuredClone_(this.messages) as Message[]; + const messagesWithoutActivity = clonedMessages.filter( + (message) => message.role !== "activity", + ); + return { threadId: this.threadId, runId: parameters?.runId || uuidv4(), @@ -149,7 +257,7 @@ export abstract class AbstractAgent { context: structuredClone_(parameters?.context ?? []), forwardedProps: structuredClone_(parameters?.forwardedProps ?? {}), state: structuredClone_(this.state), - messages: structuredClone_(this.messages), + messages: messagesWithoutActivity, }; } @@ -281,12 +389,14 @@ export abstract class AbstractAgent { public clone() { const cloned = Object.create(Object.getPrototypeOf(this)); - for (const key of Object.getOwnPropertyNames(this)) { - const value = (this as any)[key]; - if (typeof value !== "function") { - cloned[key] = structuredClone_(value); - } - } + cloned.agentId = this.agentId; + cloned.description = this.description; + cloned.threadId = this.threadId; + cloned.messages = structuredClone_(this.messages); + cloned.state = structuredClone_(this.state); + cloned.debug = this.debug; + cloned.isRunning = this.isRunning; + cloned.subscribers = [...this.subscribers]; return cloned; } @@ -416,7 +526,24 @@ export abstract class AbstractAgent { this.agentId = this.agentId ?? uuidv4(); const input = this.prepareRunAgentInput(config); - return this.run(input).pipe( + // Build middleware chain for legacy bridge + const runObservable = (() => { + if (this.middlewares.length === 0) { + return this.run(input); + } + + const chainedAgent = this.middlewares.reduceRight( + (nextAgent: AbstractAgent, middleware) => + ({ + run: (i: RunAgentInput) => middleware.run(i, nextAgent), + }) as AbstractAgent, + this, + ); + + return chainedAgent.run(input); + })(); + + return runObservable.pipe( transformChunks(this.debug), verifyEvents(this.debug), convertToLegacyEvents(this.threadId, input.runId, this.agentId), diff --git a/sdks/typescript/packages/client/src/agent/http.ts b/sdks/typescript/packages/client/src/agent/http.ts index 49fae2173..f9d9c3002 100644 --- a/sdks/typescript/packages/client/src/agent/http.ts +++ b/sdks/typescript/packages/client/src/agent/http.ts @@ -58,4 +58,19 @@ export class HttpAgent extends AbstractAgent { const httpEvents = runHttpRequest(this.url, this.requestInit(input)); return transformHttpEventStream(httpEvents); } + + public clone(): HttpAgent { + const cloned = super.clone() as HttpAgent; + cloned.url = this.url; + cloned.headers = structuredClone_(this.headers ?? {}); + + const newController = new AbortController(); + const originalSignal = this.abortController.signal as AbortSignal & { reason?: unknown }; + if (originalSignal.aborted) { + newController.abort(originalSignal.reason); + } + cloned.abortController = newController; + + return cloned; + } } diff --git a/sdks/typescript/packages/client/src/agent/index.ts b/sdks/typescript/packages/client/src/agent/index.ts index e1a25b101..046bfa90b 100644 --- a/sdks/typescript/packages/client/src/agent/index.ts +++ b/sdks/typescript/packages/client/src/agent/index.ts @@ -2,4 +2,4 @@ export { AbstractAgent } from "./agent"; export type { RunAgentResult } from "./agent"; export { HttpAgent } from "./http"; export type { AgentConfig, HttpAgentConfig, RunAgentParameters } from "./types"; -export type { AgentSubscriber, AgentStateMutation, AgentSubscriberParams} from "./subscriber"; \ No newline at end of file +export type { AgentSubscriber, AgentStateMutation, AgentSubscriberParams } from "./subscriber"; diff --git a/sdks/typescript/packages/client/src/agent/subscriber.ts b/sdks/typescript/packages/client/src/agent/subscriber.ts index ab7d09e9f..204038e62 100644 --- a/sdks/typescript/packages/client/src/agent/subscriber.ts +++ b/sdks/typescript/packages/client/src/agent/subscriber.ts @@ -21,6 +21,9 @@ import { RawEvent, CustomEvent, ToolCall, + ActivitySnapshotEvent, + ActivityDeltaEvent, + ActivityMessage, } from "@ag-ui/core"; import { AbstractAgent } from "./agent"; import { structuredClone_ } from "@/utils"; @@ -123,6 +126,21 @@ export interface AgentSubscriber { params: { event: MessagesSnapshotEvent } & AgentSubscriberParams, ): MaybePromise; + onActivitySnapshotEvent?( + params: { + event: ActivitySnapshotEvent; + activityMessage?: ActivityMessage; + existingMessage?: Message; + } & AgentSubscriberParams, + ): MaybePromise; + + onActivityDeltaEvent?( + params: { + event: ActivityDeltaEvent; + activityMessage?: ActivityMessage; + } & AgentSubscriberParams, + ): MaybePromise; + onRawEvent?( params: { event: RawEvent } & AgentSubscriberParams, ): MaybePromise; diff --git a/sdks/typescript/packages/client/src/apply/__tests__/default.activity.test.ts b/sdks/typescript/packages/client/src/apply/__tests__/default.activity.test.ts new file mode 100644 index 000000000..e6d0c8263 --- /dev/null +++ b/sdks/typescript/packages/client/src/apply/__tests__/default.activity.test.ts @@ -0,0 +1,381 @@ +import { Subject } from "rxjs"; +import { toArray } from "rxjs/operators"; +import { firstValueFrom } from "rxjs"; +import { + ActivityDeltaEvent, + ActivitySnapshotEvent, + BaseEvent, + EventType, + Message, + RunAgentInput, +} from "@ag-ui/core"; +import { defaultApplyEvents } from "../default"; +import { AbstractAgent } from "@/agent"; + +const createAgent = (messages: Message[] = []) => + ({ + messages: messages.map((message) => ({ ...message })), + state: {}, + } as unknown as AbstractAgent); + +describe("defaultApplyEvents with activity events", () => { + it("creates and updates activity messages via snapshot and delta", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["search"] }, + } as ActivitySnapshotEvent); + + events$.next({ + type: EventType.ACTIVITY_DELTA, + messageId: "activity-1", + activityType: "PLAN", + patch: [{ op: "replace", path: "/tasks/0", value: "āœ“ search" }], + } as ActivityDeltaEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + + expect(stateUpdates.length).toBe(2); + + const snapshotUpdate = stateUpdates[0]; + expect(snapshotUpdate?.messages?.[0]?.role).toBe("activity"); + expect(snapshotUpdate?.messages?.[0]?.activityType).toBe("PLAN"); + expect(snapshotUpdate?.messages?.[0]?.content).toEqual({ tasks: ["search"] }); + + const deltaUpdate = stateUpdates[1]; + expect(deltaUpdate?.messages?.[0]?.content).toEqual({ tasks: ["āœ“ search"] }); + }); + + it("appends operations via delta when snapshot starts with an empty array", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + const firstOperation = { id: "op-1", status: "PENDING" }; + const secondOperation = { id: "op-2", status: "COMPLETED" }; + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-ops", + activityType: "PLAN", + content: { operations: [] }, + } as ActivitySnapshotEvent); + + events$.next({ + type: EventType.ACTIVITY_DELTA, + messageId: "activity-ops", + activityType: "PLAN", + patch: [ + { op: "add", path: "/operations/-", value: firstOperation }, + ], + } as ActivityDeltaEvent); + + events$.next({ + type: EventType.ACTIVITY_DELTA, + messageId: "activity-ops", + activityType: "PLAN", + patch: [ + { op: "add", path: "/operations/-", value: secondOperation }, + ], + } as ActivityDeltaEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + + expect(stateUpdates.length).toBe(3); + + const snapshotUpdate = stateUpdates[0]; + expect(snapshotUpdate?.messages?.[0]?.content).toEqual({ operations: [] }); + + const firstDeltaUpdate = stateUpdates[1]; + expect(firstDeltaUpdate?.messages?.[0]?.content?.operations).toEqual([ + firstOperation, + ]); + + const secondDeltaUpdate = stateUpdates[2]; + expect(secondDeltaUpdate?.messages?.[0]?.content?.operations).toEqual([ + firstOperation, + secondOperation, + ]); + }); + + it("does not replace existing activity message when replace is false", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [ + { + id: "activity-1", + role: "activity", + activityType: "PLAN", + content: { tasks: ["initial"] }, + }, + ], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["updated"] }, + replace: false, + } as ActivitySnapshotEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + expect(stateUpdates.length).toBe(1); + const update = stateUpdates[0]; + expect(update?.messages?.[0]?.content).toEqual({ tasks: ["initial"] }); + }); + + it("adds activity message when replace is false and none exists", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["first"] }, + replace: false, + } as ActivitySnapshotEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + expect(stateUpdates.length).toBe(1); + const update = stateUpdates[0]; + expect(update?.messages?.[0]?.content).toEqual({ tasks: ["first"] }); + expect(update?.messages?.[0]?.role).toBe("activity"); + }); + + it("replaces existing activity message when replace is true", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [ + { + id: "activity-1", + role: "activity" as const, + activityType: "PLAN", + content: { tasks: ["initial"] }, + }, + ], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["updated"] }, + replace: true, + } as ActivitySnapshotEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + expect(stateUpdates.length).toBe(1); + const update = stateUpdates[0]; + expect(update?.messages?.[0]?.content).toEqual({ tasks: ["updated"] }); + }); + + it("replaces non-activity message when replace is true", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [ + { + id: "activity-1", + role: "user" as const, + content: "placeholder", + }, + ], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["first"] }, + replace: true, + } as ActivitySnapshotEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + expect(stateUpdates.length).toBe(1); + const update = stateUpdates[0]; + expect(update?.messages?.[0]?.role).toBe("activity"); + expect(update?.messages?.[0]?.content).toEqual({ tasks: ["first"] }); + }); + + it("does not alter non-activity message when replace is false", async () => { + const events$ = new Subject(); + const initialState: RunAgentInput = { + messages: [ + { + id: "activity-1", + role: "user" as const, + content: "placeholder", + }, + ], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); + const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); + + events$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["first"] }, + replace: false, + } as ActivitySnapshotEvent); + + events$.complete(); + + const stateUpdates = await stateUpdatesPromise; + expect(stateUpdates.length).toBe(1); + const update = stateUpdates[0]; + expect(update?.messages?.[0]?.role).toBe("user"); + expect(update?.messages?.[0]?.content).toBe("placeholder"); + }); + + it("maintains replace semantics across runs", async () => { + const firstRunEvents$ = new Subject(); + const baseInput: RunAgentInput = { + messages: [], + state: {}, + threadId: "thread-activity", + runId: "run-activity", + tools: [], + context: [], + }; + + const baseAgent = createAgent(baseInput.messages); + const firstResult$ = defaultApplyEvents(baseInput, firstRunEvents$, baseAgent, []); + const firstUpdatesPromise = firstValueFrom(firstResult$.pipe(toArray())); + + firstRunEvents$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["initial"] }, + replace: true, + } as ActivitySnapshotEvent); + firstRunEvents$.complete(); + + const firstUpdates = await firstUpdatesPromise; + const nextMessages = firstUpdates[0]?.messages ?? []; + + const secondRunEvents$ = new Subject(); + const secondInput: RunAgentInput = { + ...baseInput, + messages: nextMessages, + }; + + const secondAgent = createAgent(secondInput.messages); + const secondResult$ = defaultApplyEvents( + secondInput, + secondRunEvents$, + secondAgent, + [], + ); + const secondUpdatesPromise = firstValueFrom(secondResult$.pipe(toArray())); + + secondRunEvents$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["updated"] }, + replace: false, + } as ActivitySnapshotEvent); + + secondRunEvents$.next({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "activity-1", + activityType: "PLAN", + content: { tasks: ["final"] }, + replace: true, + } as ActivitySnapshotEvent); + + secondRunEvents$.complete(); + + const secondUpdates = await secondUpdatesPromise; + expect(secondUpdates.length).toBe(2); + const afterReplaceFalse = secondUpdates[0]; + expect(afterReplaceFalse?.messages?.[0]?.content).toEqual({ tasks: ["initial"] }); + const afterReplaceTrue = secondUpdates[1]; + expect(afterReplaceTrue?.messages?.[0]?.content).toEqual({ tasks: ["final"] }); + }); +}); diff --git a/sdks/typescript/packages/client/src/apply/__tests__/default.concurrent.test.ts b/sdks/typescript/packages/client/src/apply/__tests__/default.concurrent.test.ts index 49cad4552..322ada5e8 100644 --- a/sdks/typescript/packages/client/src/apply/__tests__/default.concurrent.test.ts +++ b/sdks/typescript/packages/client/src/apply/__tests__/default.concurrent.test.ts @@ -19,12 +19,12 @@ import { } from "@ag-ui/core"; import { AbstractAgent } from "../../agent"; -// Mock agent for testing -const FAKE_AGENT = { - messages: [], - state: {}, - agentId: "test-agent", -} as unknown as AbstractAgent; +const createAgent = (messages: Message[] = []) => + ({ + messages: messages.map((message) => ({ ...message })), + state: {}, + agentId: "test-agent", + } as unknown as AbstractAgent); describe("defaultApplyEvents concurrent operations", () => { // Test: Concurrent text messages should create separate messages @@ -41,7 +41,8 @@ describe("defaultApplyEvents concurrent operations", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -125,7 +126,8 @@ describe("defaultApplyEvents concurrent operations", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -218,7 +220,8 @@ describe("defaultApplyEvents concurrent operations", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -333,7 +336,8 @@ describe("defaultApplyEvents concurrent operations", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -444,7 +448,8 @@ describe("defaultApplyEvents concurrent operations", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -552,7 +557,8 @@ describe("defaultApplyEvents concurrent operations", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); diff --git a/sdks/typescript/packages/client/src/apply/__tests__/default.state.test.ts b/sdks/typescript/packages/client/src/apply/__tests__/default.state.test.ts index 71e64efc1..41627ee2e 100644 --- a/sdks/typescript/packages/client/src/apply/__tests__/default.state.test.ts +++ b/sdks/typescript/packages/client/src/apply/__tests__/default.state.test.ts @@ -1,10 +1,14 @@ import { AbstractAgent } from "@/agent"; import { defaultApplyEvents } from "../default"; -import { EventType, StateDeltaEvent } from "@ag-ui/core"; +import { EventType, Message, StateDeltaEvent } from "@ag-ui/core"; import { of } from "rxjs"; import { AgentStateMutation } from "@/agent/subscriber"; -const FAKE_AGENT = null as unknown as AbstractAgent; +const createAgent = (messages: Message[] = []) => + ({ + messages: messages.map((message) => ({ ...message })), + state: {}, + } as unknown as AbstractAgent); describe("defaultApplyEvents - State Patching", () => { it("should apply state delta patch correctly", (done) => { @@ -30,7 +34,8 @@ describe("defaultApplyEvents - State Patching", () => { const events$ = of(stateDelta); - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); result$.subscribe((update: AgentStateMutation) => { expect(update.state).toEqual({ @@ -65,7 +70,8 @@ describe("defaultApplyEvents - State Patching", () => { const events$ = of(stateDelta); // Cast to any to bypass strict type checking - const result$ = defaultApplyEvents(initialState as any, events$, FAKE_AGENT, []); + const agent = createAgent((initialState as any).messages as Message[]); + const result$ = defaultApplyEvents(initialState as any, events$, agent, []); result$.subscribe((update: AgentStateMutation) => { expect(update.state).toEqual({ @@ -102,7 +108,8 @@ describe("defaultApplyEvents - State Patching", () => { const events$ = of(stateDelta); // Cast to any to bypass strict type checking - const result$ = defaultApplyEvents(initialState as any, events$, FAKE_AGENT, []); + const agent = createAgent((initialState as any).messages as Message[]); + const result$ = defaultApplyEvents(initialState as any, events$, agent, []); result$.subscribe((update: AgentStateMutation) => { expect(update.state).toEqual({ @@ -137,7 +144,8 @@ describe("defaultApplyEvents - State Patching", () => { const events$ = of(...stateDeltas); // Cast to any to bypass strict type checking - const result$ = defaultApplyEvents(initialState as any, events$, FAKE_AGENT, []); + const agent = createAgent((initialState as any).messages as Message[]); + const result$ = defaultApplyEvents(initialState as any, events$, agent, []); let updateCount = 0; result$.subscribe((update: AgentStateMutation) => { @@ -176,7 +184,8 @@ describe("defaultApplyEvents - State Patching", () => { const events$ = of(stateDelta); // Cast to any to bypass strict type checking - const result$ = defaultApplyEvents(initialState as any, events$, FAKE_AGENT, []); + const agent = createAgent((initialState as any).messages as Message[]); + const result$ = defaultApplyEvents(initialState as any, events$, agent, []); let updateCount = 0; result$.subscribe({ diff --git a/sdks/typescript/packages/client/src/apply/__tests__/default.text-message.test.ts b/sdks/typescript/packages/client/src/apply/__tests__/default.text-message.test.ts index 581f418df..031713f29 100644 --- a/sdks/typescript/packages/client/src/apply/__tests__/default.text-message.test.ts +++ b/sdks/typescript/packages/client/src/apply/__tests__/default.text-message.test.ts @@ -4,6 +4,7 @@ import { firstValueFrom } from "rxjs"; import { BaseEvent, EventType, + Message, RunStartedEvent, TextMessageStartEvent, TextMessageContentEvent, @@ -13,7 +14,11 @@ import { import { defaultApplyEvents } from "../default"; import { AbstractAgent } from "@/agent"; -const FAKE_AGENT = null as unknown as AbstractAgent; +const createAgent = (messages: Message[] = []) => + ({ + messages: messages.map((message) => ({ ...message })), + state: {}, + } as unknown as AbstractAgent); describe("defaultApplyEvents with text messages", () => { it("should handle text message events correctly", async () => { @@ -29,7 +34,8 @@ describe("defaultApplyEvents with text messages", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -102,7 +108,8 @@ describe("defaultApplyEvents with text messages", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); diff --git a/sdks/typescript/packages/client/src/apply/__tests__/default.tool-calls.test.ts b/sdks/typescript/packages/client/src/apply/__tests__/default.tool-calls.test.ts index bcce0ab40..261057677 100644 --- a/sdks/typescript/packages/client/src/apply/__tests__/default.tool-calls.test.ts +++ b/sdks/typescript/packages/client/src/apply/__tests__/default.tool-calls.test.ts @@ -2,19 +2,24 @@ import { Subject } from "rxjs"; import { toArray } from "rxjs/operators"; import { firstValueFrom } from "rxjs"; import { + AssistantMessage, BaseEvent, EventType, + Message, + RunAgentInput, RunStartedEvent, - ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, - RunAgentInput, - AssistantMessage, + ToolCallStartEvent, } from "@ag-ui/core"; import { defaultApplyEvents } from "../default"; import { AbstractAgent } from "@/agent"; -const FAKE_AGENT = null as unknown as AbstractAgent; +const createAgent = (messages: Message[] = []) => + ({ + messages: messages.map((message) => ({ ...message })), + state: {}, + } as unknown as AbstractAgent); describe("defaultApplyEvents with tool calls", () => { it("should handle a single tool call correctly", async () => { @@ -33,7 +38,8 @@ describe("defaultApplyEvents with tool calls", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -120,7 +126,8 @@ describe("defaultApplyEvents with tool calls", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -224,7 +231,8 @@ describe("defaultApplyEvents with tool calls", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages as Message[]); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -287,7 +295,8 @@ describe("defaultApplyEvents with tool calls", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); @@ -346,7 +355,8 @@ describe("defaultApplyEvents with tool calls", () => { }; // Create the observable stream - const result$ = defaultApplyEvents(initialState, events$, FAKE_AGENT, []); + const agent = createAgent(initialState.messages); + const result$ = defaultApplyEvents(initialState, events$, agent, []); // Collect all emitted state updates in an array const stateUpdatesPromise = firstValueFrom(result$.pipe(toArray())); diff --git a/sdks/typescript/packages/client/src/apply/__tests__/run-started-input.test.ts b/sdks/typescript/packages/client/src/apply/__tests__/run-started-input.test.ts new file mode 100644 index 000000000..9be1a0133 --- /dev/null +++ b/sdks/typescript/packages/client/src/apply/__tests__/run-started-input.test.ts @@ -0,0 +1,416 @@ +import { AbstractAgent } from "../../agent/agent"; +import { + BaseEvent, + EventType, + Message, + RunAgentInput, + RunStartedEvent, + RunFinishedEvent, + TextMessageStartEvent, + TextMessageContentEvent, + TextMessageEndEvent, +} from "@ag-ui/core"; +import { Observable, of } from "rxjs"; +import { AgentSubscriber } from "../../agent/subscriber"; + +describe("RunStartedEvent with input.messages", () => { + class TestAgent extends AbstractAgent { + private events: BaseEvent[] = []; + + setEvents(events: BaseEvent[]) { + this.events = events; + } + + protected run(input: RunAgentInput): Observable { + return of(...this.events); + } + } + + it("should add messages from RunStartedEvent.input that are not already present", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + const events: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + input: { + threadId: "test-thread", + runId: "run-1", + messages: [ + { + id: "msg-1", + role: "user", + content: "Hello", + }, + { + id: "msg-2", + role: "user", + content: "How are you?", + }, + ], + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(events); + const result = await agent.runAgent({ runId: "run-1" }); + + // Verify both messages were added + expect(agent.messages.length).toBe(2); + expect(agent.messages[0].id).toBe("msg-1"); + expect(agent.messages[0].content).toBe("Hello"); + expect(agent.messages[1].id).toBe("msg-2"); + expect(agent.messages[1].content).toBe("How are you?"); + + // Verify they appear in newMessages + expect(result.newMessages.length).toBe(2); + }); + + it("should not duplicate messages that already exist (by ID)", async () => { + const initialMessages: Message[] = [ + { + id: "msg-1", + role: "user", + content: "Existing message", + }, + ]; + + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages, + }); + + const events: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + input: { + threadId: "test-thread", + runId: "run-1", + messages: [ + { + id: "msg-1", + role: "user", + content: "Duplicate message (should be ignored)", + }, + { + id: "msg-2", + role: "user", + content: "New message", + }, + ], + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(events); + const result = await agent.runAgent({ runId: "run-1" }); + + // Verify only the new message was added + expect(agent.messages.length).toBe(2); + expect(agent.messages[0].id).toBe("msg-1"); + expect(agent.messages[0].content).toBe("Existing message"); // Original content preserved + expect(agent.messages[1].id).toBe("msg-2"); + expect(agent.messages[1].content).toBe("New message"); + + // Verify only the new message appears in newMessages + expect(result.newMessages.length).toBe(1); + expect(result.newMessages[0].id).toBe("msg-2"); + }); + + it("should handle RunStartedEvent without input field", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + const events: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + // No input field + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(events); + const result = await agent.runAgent({ runId: "run-1" }); + + // Verify no errors and messages remain empty + expect(agent.messages.length).toBe(0); + expect(result.newMessages.length).toBe(0); + }); + + it("should handle RunStartedEvent with input but no messages", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + const events: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + input: { + threadId: "test-thread", + runId: "run-1", + messages: [], // Empty messages array + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(events); + const result = await agent.runAgent({ runId: "run-1" }); + + // Verify no errors and messages remain empty + expect(agent.messages.length).toBe(0); + expect(result.newMessages.length).toBe(0); + }); + + it("should respect stopPropagation from subscribers", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + // Create a subscriber that stops propagation + const stopPropagationSubscriber: AgentSubscriber = { + onRunStartedEvent: () => { + return { stopPropagation: true }; + }, + }; + + const events: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + input: { + threadId: "test-thread", + runId: "run-1", + messages: [ + { + id: "msg-1", + role: "user", + content: "Should not be added", + }, + ], + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(events); + const result = await agent.runAgent({ runId: "run-1" }, stopPropagationSubscriber); + + // Verify messages were NOT added due to stopPropagation + expect(agent.messages.length).toBe(0); + expect(result.newMessages.length).toBe(0); + }); + + it("should add messages before other events in the same run", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + const events: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + input: { + threadId: "test-thread", + runId: "run-1", + messages: [ + { + id: "msg-from-input", + role: "user", + content: "From input", + }, + ], + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.TEXT_MESSAGE_START, + messageId: "msg-streamed", + role: "assistant", + } as TextMessageStartEvent, + { + type: EventType.TEXT_MESSAGE_CONTENT, + messageId: "msg-streamed", + delta: "Streamed response", + } as TextMessageContentEvent, + { + type: EventType.TEXT_MESSAGE_END, + messageId: "msg-streamed", + } as TextMessageEndEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(events); + const result = await agent.runAgent({ runId: "run-1" }); + + // Verify message order: input message first, then streamed message + expect(agent.messages.length).toBe(2); + expect(agent.messages[0].id).toBe("msg-from-input"); + expect(agent.messages[0].content).toBe("From input"); + expect(agent.messages[1].id).toBe("msg-streamed"); + expect(agent.messages[1].content).toBe("Streamed response"); + + expect(result.newMessages.length).toBe(2); + }); + + it("should handle multiple runs with input.messages", async () => { + const agent = new TestAgent({ + threadId: "test-thread", + initialMessages: [], + }); + + // First run with one message + const firstRunEvents: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-1", + input: { + threadId: "test-thread", + runId: "run-1", + messages: [ + { + id: "msg-1", + role: "user", + content: "First message", + }, + ], + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-1", + } as RunFinishedEvent, + ]; + + agent.setEvents(firstRunEvents); + const result1 = await agent.runAgent({ runId: "run-1" }); + + expect(agent.messages.length).toBe(1); + expect(agent.messages[0].id).toBe("msg-1"); + expect(result1.newMessages.length).toBe(1); + + // Second run with three messages (one duplicate, two new) + const secondRunEvents: BaseEvent[] = [ + { + type: EventType.RUN_STARTED, + threadId: "test-thread", + runId: "run-2", + input: { + threadId: "test-thread", + runId: "run-2", + messages: [ + { + id: "msg-1", + role: "user", + content: "First message (duplicate)", + }, + { + id: "msg-2", + role: "user", + content: "Second message", + }, + { + id: "msg-3", + role: "user", + content: "Third message", + }, + ], + tools: [], + context: [], + state: {}, + forwardedProps: {}, + }, + } as RunStartedEvent, + { + type: EventType.RUN_FINISHED, + threadId: "test-thread", + runId: "run-2", + } as RunFinishedEvent, + ]; + + agent.setEvents(secondRunEvents); + const result2 = await agent.runAgent({ runId: "run-2" }); + + // Verify only new messages were added + expect(agent.messages.length).toBe(3); + expect(agent.messages[0].id).toBe("msg-1"); + expect(agent.messages[0].content).toBe("First message"); // Original content preserved + expect(agent.messages[1].id).toBe("msg-2"); + expect(agent.messages[1].content).toBe("Second message"); + expect(agent.messages[2].id).toBe("msg-3"); + expect(agent.messages[2].content).toBe("Third message"); + + // Verify only the two new messages appear in newMessages for the second run + expect(result2.newMessages.length).toBe(2); + expect(result2.newMessages[0].id).toBe("msg-2"); + expect(result2.newMessages[1].id).toBe("msg-3"); + }); +}); diff --git a/sdks/typescript/packages/client/src/apply/default.ts b/sdks/typescript/packages/client/src/apply/default.ts index 8f720c7a0..6cd3dcd8b 100644 --- a/sdks/typescript/packages/client/src/apply/default.ts +++ b/sdks/typescript/packages/client/src/apply/default.ts @@ -25,6 +25,9 @@ import { RunErrorEvent, StepStartedEvent, StepFinishedEvent, + ActivitySnapshotEvent, + ActivityDeltaEvent, + ActivityMessage, } from "@ag-ui/core"; import { mergeMap, mergeAll, defaultIfEmpty, concatMap } from "rxjs/operators"; import { of, EMPTY } from "rxjs"; @@ -45,7 +48,7 @@ export const defaultApplyEvents = ( agent: AbstractAgent, subscribers: AgentSubscriber[], ): Observable => { - let messages = structuredClone_(input.messages); + let messages = structuredClone_(agent.messages); let state = structuredClone_(input.state); let currentMutation: AgentStateMutation = {}; @@ -140,14 +143,17 @@ export const defaultApplyEvents = ( state, agent, input, - textMessageBuffer: targetMessage.content ?? "", + textMessageBuffer: + typeof targetMessage.content === "string" ? targetMessage.content : "", }), ); applyMutation(mutation); if (mutation.stopPropagation !== true) { // Append content to the correct message by ID - targetMessage.content = (targetMessage.content || "") + delta; + const existingContent = + typeof targetMessage.content === "string" ? targetMessage.content : ""; + targetMessage.content = `${existingContent}${delta}`; applyMutation({ messages }); } @@ -175,7 +181,8 @@ export const defaultApplyEvents = ( state, agent, input, - textMessageBuffer: targetMessage.content ?? "", + textMessageBuffer: + typeof targetMessage.content === "string" ? targetMessage.content : "", }), ); applyMutation(mutation); @@ -513,6 +520,143 @@ export const defaultApplyEvents = ( return emitUpdates(); } + case EventType.ACTIVITY_SNAPSHOT: { + const activityEvent = event as ActivitySnapshotEvent; + const existingIndex = messages.findIndex((m) => m.id === activityEvent.messageId); + const existingMessage = existingIndex >= 0 ? messages[existingIndex] : undefined; + const existingActivityMessage = + existingMessage?.role === "activity" ? (existingMessage as ActivityMessage) : undefined; + const replace = activityEvent.replace ?? true; + + const mutation = await runSubscribersWithMutation( + subscribers, + messages, + state, + (subscriber, messages, state) => + subscriber.onActivitySnapshotEvent?.({ + event: activityEvent, + messages, + state, + agent, + input, + activityMessage: existingActivityMessage, + existingMessage, + }), + ); + applyMutation(mutation); + + if (mutation.stopPropagation !== true) { + const activityMessage: ActivityMessage = { + id: activityEvent.messageId, + role: "activity", + activityType: activityEvent.activityType, + content: structuredClone_(activityEvent.content), + }; + + let createdMessage: ActivityMessage | undefined; + + if (existingIndex === -1) { + messages.push(activityMessage); + createdMessage = activityMessage; + } else if (existingActivityMessage) { + if (replace) { + messages[existingIndex] = { + ...existingActivityMessage, + activityType: activityEvent.activityType, + content: structuredClone_(activityEvent.content), + }; + } + } else if (replace) { + messages[existingIndex] = activityMessage; + createdMessage = activityMessage; + } + + applyMutation({ messages }); + + if (createdMessage) { + await Promise.all( + subscribers.map((subscriber) => + subscriber.onNewMessage?.({ + message: createdMessage, + messages, + state, + agent, + input, + }), + ), + ); + } + } + + return emitUpdates(); + } + + case EventType.ACTIVITY_DELTA: { + const activityEvent = event as ActivityDeltaEvent; + const existingIndex = messages.findIndex((m) => m.id === activityEvent.messageId); + if (existingIndex === -1) { + console.warn( + `ACTIVITY_DELTA: No message found with ID '${activityEvent.messageId}' to apply patch`, + ); + return emitUpdates(); + } + + const existingMessage = messages[existingIndex]; + if (existingMessage.role !== "activity") { + console.warn( + `ACTIVITY_DELTA: Message '${activityEvent.messageId}' is not an activity message`, + ); + return emitUpdates(); + } + + const existingActivityMessage = existingMessage as ActivityMessage; + + const mutation = await runSubscribersWithMutation( + subscribers, + messages, + state, + (subscriber, messages, state) => + subscriber.onActivityDeltaEvent?.({ + event: activityEvent, + messages, + state, + agent, + input, + activityMessage: existingActivityMessage, + }), + ); + applyMutation(mutation); + + if (mutation.stopPropagation !== true) { + try { + const baseContent = structuredClone_(existingActivityMessage.content ?? {}); + + const result = applyPatch( + baseContent, + activityEvent.patch ?? [], + true, + false, + ); + const updatedContent = result.newDocument as ActivityMessage["content"]; + + messages[existingIndex] = { + ...existingActivityMessage, + content: structuredClone_(updatedContent), + activityType: activityEvent.activityType, + }; + + applyMutation({ messages }); + } catch (error: unknown) { + const errorMessage = error instanceof Error ? error.message : String(error); + console.warn( + `Failed to apply activity patch for '${activityEvent.messageId}': ${errorMessage}`, + ); + } + } + + return emitUpdates(); + } + case EventType.RAW: { const mutation = await runSubscribersWithMutation( subscribers, @@ -567,6 +711,25 @@ export const defaultApplyEvents = ( ); applyMutation(mutation); + // Handle input.messages if present and stopPropagation is not set + if (mutation.stopPropagation !== true) { + const runStartedEvent = event as RunStartedEvent; + + // Check if the event contains input with messages + if (runStartedEvent.input?.messages) { + // Add messages that aren't already present (checked by ID) + for (const message of runStartedEvent.input.messages) { + const existingMessage = messages.find((m) => m.id === message.id); + if (!existingMessage) { + messages.push(message); + } + } + + // Apply mutation to emit the updated messages + applyMutation({ messages }); + } + } + return emitUpdates(); } diff --git a/sdks/typescript/packages/client/src/chunks/transform.ts b/sdks/typescript/packages/client/src/chunks/transform.ts index bb0ec6ba4..0f2f4e15c 100644 --- a/sdks/typescript/packages/client/src/chunks/transform.ts +++ b/sdks/typescript/packages/client/src/chunks/transform.ts @@ -101,6 +101,8 @@ export const transformChunks = case EventType.THINKING_TEXT_MESSAGE_END: return [...closePendingEvent(), event]; case EventType.RAW: + case EventType.ACTIVITY_SNAPSHOT: + case EventType.ACTIVITY_DELTA: return [event]; case EventType.TEXT_MESSAGE_CHUNK: const messageChunkEvent = event as TextMessageChunkEvent; @@ -220,10 +222,11 @@ export const transformChunks = return toolMessageResult; } const _exhaustiveCheck: never = event.type; + return []; }), finalize(() => { // This ensures that we close any pending events when the source observable completes - return closePendingEvent(); + closePendingEvent(); }), ); }; diff --git a/sdks/typescript/packages/client/src/compact/__tests__/compact.test.ts b/sdks/typescript/packages/client/src/compact/__tests__/compact.test.ts new file mode 100644 index 000000000..17ccb017c --- /dev/null +++ b/sdks/typescript/packages/client/src/compact/__tests__/compact.test.ts @@ -0,0 +1,294 @@ +import { compactEvents } from "../compact"; +import { + EventType, + TextMessageStartEvent, + TextMessageContentEvent, + ToolCallStartEvent, + ToolCallArgsEvent, + CustomEvent, +} from "@ag-ui/core"; + +describe("Event Compaction", () => { + describe("Text Message Compaction", () => { + it("should compact multiple text message content events into one", () => { + const events = [ + { type: EventType.TEXT_MESSAGE_START, messageId: "msg1", role: "user" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "Hello" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: " " }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "world" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "msg1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(3); + expect(compacted[0].type).toBe(EventType.TEXT_MESSAGE_START); + expect(compacted[1].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect((compacted[1] as TextMessageContentEvent).delta).toBe("Hello world"); + expect(compacted[2].type).toBe(EventType.TEXT_MESSAGE_END); + }); + + it("should move interleaved events to after text message events", () => { + const events = [ + { type: EventType.TEXT_MESSAGE_START, messageId: "msg1", role: "assistant" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "Processing" }, + { type: EventType.CUSTOM, id: "custom1", name: "thinking" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "..." }, + { type: EventType.CUSTOM, id: "custom2", name: "done-thinking" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "msg1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(5); + // Text message events should come first + expect(compacted[0].type).toBe(EventType.TEXT_MESSAGE_START); + expect(compacted[1].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect((compacted[1] as TextMessageContentEvent).delta).toBe("Processing..."); + expect(compacted[2].type).toBe(EventType.TEXT_MESSAGE_END); + // Other events should come after + expect(compacted[3].type).toBe(EventType.CUSTOM); + expect((compacted[3] as CustomEvent & { id: string }).id).toBe("custom1"); + expect(compacted[4].type).toBe(EventType.CUSTOM); + expect((compacted[4] as CustomEvent & { id: string }).id).toBe("custom2"); + }); + + it("should handle multiple messages independently", () => { + const events = [ + { type: EventType.TEXT_MESSAGE_START, messageId: "msg1", role: "user" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "Hi" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "msg1" }, + { type: EventType.TEXT_MESSAGE_START, messageId: "msg2", role: "assistant" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg2", delta: "Hello" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg2", delta: " there" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "msg2" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(6); + // First message + expect(compacted[0].type).toBe(EventType.TEXT_MESSAGE_START); + expect((compacted[0] as TextMessageStartEvent).messageId).toBe("msg1"); + expect(compacted[1].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect((compacted[1] as TextMessageContentEvent).delta).toBe("Hi"); + expect(compacted[2].type).toBe(EventType.TEXT_MESSAGE_END); + // Second message + expect(compacted[3].type).toBe(EventType.TEXT_MESSAGE_START); + expect((compacted[3] as TextMessageStartEvent).messageId).toBe("msg2"); + expect(compacted[4].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect((compacted[4] as TextMessageContentEvent).delta).toBe("Hello there"); + expect(compacted[5].type).toBe(EventType.TEXT_MESSAGE_END); + }); + + it("should handle incomplete messages", () => { + const events = [ + { type: EventType.TEXT_MESSAGE_START, messageId: "msg1", role: "user" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "Incomplete" }, + // No END event + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(2); + expect(compacted[0].type).toBe(EventType.TEXT_MESSAGE_START); + expect(compacted[1].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect((compacted[1] as TextMessageContentEvent).delta).toBe("Incomplete"); + }); + + it("should pass through non-text-message events unchanged", () => { + const events = [ + { type: EventType.CUSTOM, id: "custom1", name: "event1" }, + { type: EventType.TOOL_CALL_START, toolCallId: "tool1", toolCallName: "search" }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toEqual(events); + }); + + it("should handle empty content deltas", () => { + const events = [ + { type: EventType.TEXT_MESSAGE_START, messageId: "msg1", role: "user" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "Hello" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "msg1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(3); + expect((compacted[1] as TextMessageContentEvent).delta).toBe("Hello"); + }); + }); + + describe("Tool Call Compaction", () => { + it("should compact multiple tool call args events into one", () => { + const events = [ + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool1", + toolCallName: "search", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '{"query": "' }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: "weather" }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: ' today"' }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: "}" }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(3); + expect(compacted[0].type).toBe(EventType.TOOL_CALL_START); + expect(compacted[1].type).toBe(EventType.TOOL_CALL_ARGS); + expect((compacted[1] as ToolCallArgsEvent).delta).toBe('{"query": "weather today"}'); + expect(compacted[2].type).toBe(EventType.TOOL_CALL_END); + }); + + it("should move interleaved events to after tool call events", () => { + const events = [ + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool1", + toolCallName: "calculate", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '{"a": ' }, + { type: EventType.CUSTOM, id: "custom1", name: "processing" }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '10, "b": 20}' }, + { type: EventType.CUSTOM, id: "custom2", name: "calculating" }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(5); + // Tool call events should come first + expect(compacted[0].type).toBe(EventType.TOOL_CALL_START); + expect(compacted[1].type).toBe(EventType.TOOL_CALL_ARGS); + expect((compacted[1] as ToolCallArgsEvent).delta).toBe('{"a": 10, "b": 20}'); + expect(compacted[2].type).toBe(EventType.TOOL_CALL_END); + // Other events should come after + expect(compacted[3].type).toBe(EventType.CUSTOM); + expect((compacted[3] as CustomEvent & { id: string }).id).toBe("custom1"); + expect(compacted[4].type).toBe(EventType.CUSTOM); + expect((compacted[4] as CustomEvent & { id: string }).id).toBe("custom2"); + }); + + it("should handle multiple tool calls independently", () => { + const events = [ + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool1", + toolCallName: "search", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '{"query": "test"}' }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool1" }, + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool2", + toolCallName: "calculate", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool2", delta: '{"a": ' }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool2", delta: "5}" }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool2" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(6); + // First tool call + expect(compacted[0].type).toBe(EventType.TOOL_CALL_START); + expect((compacted[0] as ToolCallStartEvent).toolCallId).toBe("tool1"); + expect(compacted[1].type).toBe(EventType.TOOL_CALL_ARGS); + expect((compacted[1] as ToolCallArgsEvent).delta).toBe('{"query": "test"}'); + expect(compacted[2].type).toBe(EventType.TOOL_CALL_END); + // Second tool call + expect(compacted[3].type).toBe(EventType.TOOL_CALL_START); + expect((compacted[3] as ToolCallStartEvent).toolCallId).toBe("tool2"); + expect(compacted[4].type).toBe(EventType.TOOL_CALL_ARGS); + expect((compacted[4] as ToolCallArgsEvent).delta).toBe('{"a": 5}'); + expect(compacted[5].type).toBe(EventType.TOOL_CALL_END); + }); + + it("should handle incomplete tool calls", () => { + const events = [ + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool1", + toolCallName: "search", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '{"incomplete": ' }, + // No END event + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(2); + expect(compacted[0].type).toBe(EventType.TOOL_CALL_START); + expect(compacted[1].type).toBe(EventType.TOOL_CALL_ARGS); + expect((compacted[1] as ToolCallArgsEvent).delta).toBe('{"incomplete": '); + }); + + it("should handle empty args deltas", () => { + const events = [ + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool1", + toolCallName: "search", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: "" }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '{"test": true}' }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: "" }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(3); + expect((compacted[1] as ToolCallArgsEvent).delta).toBe('{"test": true}'); + }); + }); + + describe("Mixed Compaction", () => { + it("should handle text messages and tool calls together", () => { + const events = [ + { type: EventType.TEXT_MESSAGE_START, messageId: "msg1", role: "assistant" }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "Let me " }, + { type: EventType.TEXT_MESSAGE_CONTENT, messageId: "msg1", delta: "search for that" }, + { type: EventType.TEXT_MESSAGE_END, messageId: "msg1" }, + { + type: EventType.TOOL_CALL_START, + toolCallId: "tool1", + toolCallName: "search", + parentMessageId: "msg1", + }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: '{"q": "' }, + { type: EventType.TOOL_CALL_ARGS, toolCallId: "tool1", delta: 'test"}' }, + { type: EventType.TOOL_CALL_END, toolCallId: "tool1" }, + ]; + + const compacted = compactEvents(events); + + expect(compacted).toHaveLength(6); + // Text message + expect(compacted[0].type).toBe(EventType.TEXT_MESSAGE_START); + expect(compacted[1].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect((compacted[1] as TextMessageContentEvent).delta).toBe("Let me search for that"); + expect(compacted[2].type).toBe(EventType.TEXT_MESSAGE_END); + // Tool call + expect(compacted[3].type).toBe(EventType.TOOL_CALL_START); + expect(compacted[4].type).toBe(EventType.TOOL_CALL_ARGS); + expect((compacted[4] as ToolCallArgsEvent).delta).toBe('{"q": "test"}'); + expect(compacted[5].type).toBe(EventType.TOOL_CALL_END); + }); + }); +}); diff --git a/sdks/typescript/packages/client/src/compact/compact.ts b/sdks/typescript/packages/client/src/compact/compact.ts new file mode 100644 index 000000000..b34c08e6a --- /dev/null +++ b/sdks/typescript/packages/client/src/compact/compact.ts @@ -0,0 +1,252 @@ +import { + BaseEvent, + EventType, + TextMessageStartEvent, + TextMessageContentEvent, + TextMessageEndEvent, + ToolCallStartEvent, + ToolCallArgsEvent, + ToolCallEndEvent, +} from "@ag-ui/core"; + +/** + * Compacts streaming events by consolidating multiple deltas into single events. + * For text messages: multiple content deltas become one concatenated delta. + * For tool calls: multiple args deltas become one concatenated delta. + * Events between related streaming events are reordered to keep streaming events together. + * + * @param events - Array of events to compact + * @returns Compacted array of events + */ +export function compactEvents(events: BaseEvent[]): BaseEvent[] { + const compacted: BaseEvent[] = []; + const pendingTextMessages = new Map< + string, + { + start?: TextMessageStartEvent; + contents: TextMessageContentEvent[]; + end?: TextMessageEndEvent; + otherEvents: BaseEvent[]; + } + >(); + const pendingToolCalls = new Map< + string, + { + start?: ToolCallStartEvent; + args: ToolCallArgsEvent[]; + end?: ToolCallEndEvent; + otherEvents: BaseEvent[]; + } + >(); + + for (const event of events) { + // Handle text message streaming events + if (event.type === EventType.TEXT_MESSAGE_START) { + const startEvent = event as TextMessageStartEvent; + const messageId = startEvent.messageId; + + if (!pendingTextMessages.has(messageId)) { + pendingTextMessages.set(messageId, { + contents: [], + otherEvents: [], + }); + } + + const pending = pendingTextMessages.get(messageId)!; + pending.start = startEvent; + } else if (event.type === EventType.TEXT_MESSAGE_CONTENT) { + const contentEvent = event as TextMessageContentEvent; + const messageId = contentEvent.messageId; + + if (!pendingTextMessages.has(messageId)) { + pendingTextMessages.set(messageId, { + contents: [], + otherEvents: [], + }); + } + + const pending = pendingTextMessages.get(messageId)!; + pending.contents.push(contentEvent); + } else if (event.type === EventType.TEXT_MESSAGE_END) { + const endEvent = event as TextMessageEndEvent; + const messageId = endEvent.messageId; + + if (!pendingTextMessages.has(messageId)) { + pendingTextMessages.set(messageId, { + contents: [], + otherEvents: [], + }); + } + + const pending = pendingTextMessages.get(messageId)!; + pending.end = endEvent; + + // Flush this message's events + flushTextMessage(messageId, pending, compacted); + pendingTextMessages.delete(messageId); + } else if (event.type === EventType.TOOL_CALL_START) { + const startEvent = event as ToolCallStartEvent; + const toolCallId = startEvent.toolCallId; + + if (!pendingToolCalls.has(toolCallId)) { + pendingToolCalls.set(toolCallId, { + args: [], + otherEvents: [], + }); + } + + const pending = pendingToolCalls.get(toolCallId)!; + pending.start = startEvent; + } else if (event.type === EventType.TOOL_CALL_ARGS) { + const argsEvent = event as ToolCallArgsEvent; + const toolCallId = argsEvent.toolCallId; + + if (!pendingToolCalls.has(toolCallId)) { + pendingToolCalls.set(toolCallId, { + args: [], + otherEvents: [], + }); + } + + const pending = pendingToolCalls.get(toolCallId)!; + pending.args.push(argsEvent); + } else if (event.type === EventType.TOOL_CALL_END) { + const endEvent = event as ToolCallEndEvent; + const toolCallId = endEvent.toolCallId; + + if (!pendingToolCalls.has(toolCallId)) { + pendingToolCalls.set(toolCallId, { + args: [], + otherEvents: [], + }); + } + + const pending = pendingToolCalls.get(toolCallId)!; + pending.end = endEvent; + + // Flush this tool call's events + flushToolCall(toolCallId, pending, compacted); + pendingToolCalls.delete(toolCallId); + } else { + // For non-streaming events, check if we're in the middle of any streaming sequences + let addedToBuffer = false; + + // Check text messages + for (const [messageId, pending] of pendingTextMessages) { + // If we have a start but no end yet, this event is "in between" + if (pending.start && !pending.end) { + pending.otherEvents.push(event); + addedToBuffer = true; + break; + } + } + + // Check tool calls if not already buffered + if (!addedToBuffer) { + for (const [toolCallId, pending] of pendingToolCalls) { + // If we have a start but no end yet, this event is "in between" + if (pending.start && !pending.end) { + pending.otherEvents.push(event); + addedToBuffer = true; + break; + } + } + } + + // If not in the middle of any streaming sequence, add directly to compacted + if (!addedToBuffer) { + compacted.push(event); + } + } + } + + // Flush any remaining incomplete messages + for (const [messageId, pending] of pendingTextMessages) { + flushTextMessage(messageId, pending, compacted); + } + + // Flush any remaining incomplete tool calls + for (const [toolCallId, pending] of pendingToolCalls) { + flushToolCall(toolCallId, pending, compacted); + } + + return compacted; +} + +function flushTextMessage( + messageId: string, + pending: { + start?: TextMessageStartEvent; + contents: TextMessageContentEvent[]; + end?: TextMessageEndEvent; + otherEvents: BaseEvent[]; + }, + compacted: BaseEvent[], +): void { + // Add start event if present + if (pending.start) { + compacted.push(pending.start); + } + + // Compact all content events into one + if (pending.contents.length > 0) { + const concatenatedDelta = pending.contents.map((c) => c.delta).join(""); + + const compactedContent: TextMessageContentEvent = { + type: EventType.TEXT_MESSAGE_CONTENT, + messageId: messageId, + delta: concatenatedDelta, + }; + + compacted.push(compactedContent); + } + + // Add end event if present + if (pending.end) { + compacted.push(pending.end); + } + + // Add any events that were in between + for (const otherEvent of pending.otherEvents) { + compacted.push(otherEvent); + } +} + +function flushToolCall( + toolCallId: string, + pending: { + start?: ToolCallStartEvent; + args: ToolCallArgsEvent[]; + end?: ToolCallEndEvent; + otherEvents: BaseEvent[]; + }, + compacted: BaseEvent[], +): void { + // Add start event if present + if (pending.start) { + compacted.push(pending.start); + } + + // Compact all args events into one + if (pending.args.length > 0) { + const concatenatedArgs = pending.args.map((a) => a.delta).join(""); + + const compactedArgs: ToolCallArgsEvent = { + type: EventType.TOOL_CALL_ARGS, + toolCallId: toolCallId, + delta: concatenatedArgs, + }; + + compacted.push(compactedArgs); + } + + // Add end event if present + if (pending.end) { + compacted.push(pending.end); + } + + // Add any events that were in between + for (const otherEvent of pending.otherEvents) { + compacted.push(otherEvent); + } +} diff --git a/sdks/typescript/packages/client/src/compact/index.ts b/sdks/typescript/packages/client/src/compact/index.ts new file mode 100644 index 000000000..bb036168b --- /dev/null +++ b/sdks/typescript/packages/client/src/compact/index.ts @@ -0,0 +1 @@ +export { compactEvents } from "./compact"; diff --git a/sdks/typescript/packages/client/src/index.ts b/sdks/typescript/packages/client/src/index.ts index aa4a0a5ef..a6300de99 100644 --- a/sdks/typescript/packages/client/src/index.ts +++ b/sdks/typescript/packages/client/src/index.ts @@ -5,5 +5,6 @@ export * from "./run"; export * from "./legacy"; export * from "./agent"; export * from "./utils"; +export * from "./compact"; export * from "@ag-ui/core"; export * from "./chunks"; diff --git a/sdks/typescript/packages/client/src/legacy/convert.ts b/sdks/typescript/packages/client/src/legacy/convert.ts index aa3ac5e6f..2f4cd6761 100644 --- a/sdks/typescript/packages/client/src/legacy/convert.ts +++ b/sdks/typescript/packages/client/src/legacy/convert.ts @@ -41,6 +41,27 @@ import { } from "./types"; import untruncateJson from "untruncate-json"; +const flattenMessageContentToText = (content: Message["content"]) => { + if (typeof content === "string") { + return content; + } + + if (!Array.isArray(content)) { + return undefined; + } + + const textParts = content + .filter((part): part is { type: "text"; text: string } => part.type === "text") + .map((part) => part.text) + .filter((text) => text.length > 0); + + if (textParts.length === 0) { + return undefined; + } + + return textParts.join("\n"); +}; + interface PredictStateValue { state_key: string; tool: string; @@ -392,11 +413,12 @@ export function convertMessagesToLegacyFormat(messages: Message[]): LegacyMessag for (const message of messages) { if (message.role === "assistant" || message.role === "user" || message.role === "system") { - if (message.content) { + const textContent = flattenMessageContentToText(message.content); + if (textContent) { const textMessage: LegacyTextMessage = { id: message.id, role: message.role, - content: message.content, + content: textContent, }; result.push(textMessage); } diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/backward-compatibility-0-0-39.test.ts b/sdks/typescript/packages/client/src/middleware/__tests__/backward-compatibility-0-0-39.test.ts new file mode 100644 index 000000000..2f9a994b7 --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/backward-compatibility-0-0-39.test.ts @@ -0,0 +1,66 @@ +import { AbstractAgent } from "@/agent"; +import { BaseEvent, EventType, Message, RunAgentInput } from "@ag-ui/core"; +import { Observable, of } from "rxjs"; + +class LegacyAgent extends AbstractAgent { + public receivedInput?: RunAgentInput; + + constructor(initialMessages: Message[]) { + super({ initialMessages }); + } + + override get maxVersion(): string { + return "0.0.39"; + } + + override run(input: RunAgentInput): Observable { + this.receivedInput = input; + return of({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + } as BaseEvent); + } + + protected override prepareRunAgentInput( + parameters?: Parameters[0], + ): RunAgentInput { + const prepared = super.prepareRunAgentInput(parameters); + return { ...prepared, parentRunId: "legacy-parent" }; + } +} + +describe("BackwardCompatibility_0_0_39 middleware (auto insertion)", () => { + it("automatically strips parentRunId and flattens array message content when maxVersion <= 0.0.39", async () => { + const initialMessages: Message[] = [ + { + id: "msg-1", + role: "user", + content: [ + { type: "text", text: "Hello " }, + { type: "text", text: "world!" }, + { type: "binary", mimeType: "text/plain", data: "ignored" }, + ] as unknown as Message["content"], + } as Message, + { + id: "msg-2", + role: "assistant", + content: undefined, + } as Message, + ]; + + const agent = new LegacyAgent(initialMessages); + + await agent.runAgent({ + runId: "run-1", + tools: [], + context: [], + forwardedProps: {}, + }); + + expect(agent.receivedInput).toBeDefined(); + expect(agent.receivedInput?.parentRunId).toBeUndefined(); + expect(agent.receivedInput?.messages[0].content).toBe("Hello world!"); + expect(agent.receivedInput?.messages[1].content).toBe(""); + }); +}); diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/filter-tool-calls.test.ts b/sdks/typescript/packages/client/src/middleware/__tests__/filter-tool-calls.test.ts new file mode 100644 index 000000000..978bbc80c --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/filter-tool-calls.test.ts @@ -0,0 +1,184 @@ +import { AbstractAgent } from "@/agent"; +import { FilterToolCallsMiddleware } from "@/middleware/filter-tool-calls"; +import { Middleware } from "@/middleware"; +import { + BaseEvent, + EventType, + RunAgentInput, + ToolCallStartEvent, + ToolCallArgsEvent, + ToolCallEndEvent, + ToolCallResultEvent, +} from "@ag-ui/core"; +import { Observable } from "rxjs"; + +describe("FilterToolCallsMiddleware", () => { + class ToolCallingAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + // Emit RUN_STARTED + subscriber.next({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + }); + + // Emit first tool call (calculator) + const toolCall1Id = "tool-call-1"; + subscriber.next({ + type: EventType.TOOL_CALL_START, + toolCallId: toolCall1Id, + toolCallName: "calculator", + parentMessageId: "message-1", + } as ToolCallStartEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_ARGS, + toolCallId: toolCall1Id, + delta: '{"operation": "add", "a": 5, "b": 3}', + } as ToolCallArgsEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_END, + toolCallId: toolCall1Id, + } as ToolCallEndEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_RESULT, + messageId: "tool-message-1", + toolCallId: toolCall1Id, + content: "8", + } as ToolCallResultEvent); + + // Emit second tool call (weather) + const toolCall2Id = "tool-call-2"; + subscriber.next({ + type: EventType.TOOL_CALL_START, + toolCallId: toolCall2Id, + toolCallName: "weather", + parentMessageId: "message-2", + } as ToolCallStartEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_ARGS, + toolCallId: toolCall2Id, + delta: '{"city": "New York"}', + } as ToolCallArgsEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_END, + toolCallId: toolCall2Id, + } as ToolCallEndEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_RESULT, + messageId: "tool-message-2", + toolCallId: toolCall2Id, + content: "Sunny, 72°F", + } as ToolCallResultEvent); + + // Emit third tool call (search) + const toolCall3Id = "tool-call-3"; + subscriber.next({ + type: EventType.TOOL_CALL_START, + toolCallId: toolCall3Id, + toolCallName: "search", + parentMessageId: "message-3", + } as ToolCallStartEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_ARGS, + toolCallId: toolCall3Id, + delta: '{"query": "TypeScript middleware"}', + } as ToolCallArgsEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_END, + toolCallId: toolCall3Id, + } as ToolCallEndEvent); + + subscriber.next({ + type: EventType.TOOL_CALL_RESULT, + messageId: "tool-message-3", + toolCallId: toolCall3Id, + content: "Results found...", + } as ToolCallResultEvent); + + // Emit RUN_FINISHED + subscriber.next({ + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + }); + + subscriber.complete(); + }); + } + } + + const input: RunAgentInput = { + threadId: "test-thread", + runId: "test-run", + tools: [], + context: [], + forwardedProps: {}, + state: {}, + messages: [], + }; + + it("should filter out disallowed tool calls", async () => { + const agent = new ToolCallingAgent(); + const middleware = new FilterToolCallsMiddleware({ + disallowedToolCalls: ["calculator", "search"], + }); + + const events: BaseEvent[] = []; + await new Promise((resolve) => { + middleware.run(input, agent).subscribe({ + next: (event) => events.push(event), + complete: () => resolve(), + }); + }); + + // Should have RUN_STARTED, weather tool events (4), and RUN_FINISHED + expect(events.length).toBe(6); + + // Check that we have RUN_STARTED + expect(events[0].type).toBe(EventType.RUN_STARTED); + + // Check that only weather tool calls are present + const toolCallStarts = events.filter((e) => e.type === EventType.TOOL_CALL_START) as ToolCallStartEvent[]; + expect(toolCallStarts.length).toBe(1); + expect(toolCallStarts[0].toolCallName).toBe("weather"); + + // Check that calculator and search are filtered out + const allToolNames = toolCallStarts.map((e) => e.toolCallName); + expect(allToolNames).not.toContain("calculator"); + expect(allToolNames).not.toContain("search"); + + // Check that we have RUN_FINISHED + expect(events[events.length - 1].type).toBe(EventType.RUN_FINISHED); + }); + + it("should allow only allowed tool calls when using allowlist", async () => { + const agent = new ToolCallingAgent(); + const middleware = new FilterToolCallsMiddleware({ + allowedToolCalls: ["calculator"], + }); + + const events: BaseEvent[] = []; + await new Promise((resolve) => { + middleware.run(input, agent).subscribe({ + next: (event) => events.push(event), + complete: () => resolve(), + }); + }); + + // Should have RUN_STARTED, calculator tool events (4), and RUN_FINISHED + expect(events.length).toBe(6); + + const toolCallStarts = events.filter((e) => e.type === EventType.TOOL_CALL_START) as ToolCallStartEvent[]; + expect(toolCallStarts.length).toBe(1); + expect(toolCallStarts[0].toolCallName).toBe("calculator"); + }); +}); diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/function-middleware.test.ts b/sdks/typescript/packages/client/src/middleware/__tests__/function-middleware.test.ts new file mode 100644 index 000000000..11f94035e --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/function-middleware.test.ts @@ -0,0 +1,86 @@ +import { AbstractAgent } from "@/agent"; +import { FunctionMiddleware, MiddlewareFunction } from "@/middleware"; +import { BaseEvent, EventType, RunAgentInput } from "@ag-ui/core"; +import { Observable } from "rxjs"; + +describe("FunctionMiddleware", () => { + class TestAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + subscriber.next({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + }); + + subscriber.next({ + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + }); + + subscriber.complete(); + }); + } + } + + const input: RunAgentInput = { + threadId: "test-thread", + runId: "test-run", + tools: [], + context: [], + forwardedProps: {}, + state: {}, + messages: [], + }; + + it("should allow function-based middleware to intercept events", async () => { + const agent = new TestAgent(); + + const middlewareFn: MiddlewareFunction = (middlewareInput, next) => { + return new Observable((subscriber) => { + const subscription = next.run(middlewareInput).subscribe({ + next: (event) => { + if (event.type === EventType.RUN_STARTED) { + subscriber.next({ + ...event, + metadata: { ...(event as any).metadata, fromMiddleware: true }, + }); + return; + } + + if (event.type === EventType.RUN_FINISHED) { + subscriber.next({ + ...event, + result: { success: true }, + }); + return; + } + + subscriber.next(event); + }, + error: (error) => subscriber.error(error), + complete: () => subscriber.complete(), + }); + + return () => subscription.unsubscribe(); + }); + }; + + const middleware = new FunctionMiddleware(middlewareFn); + + const events: BaseEvent[] = []; + await new Promise((resolve) => { + middleware.run(input, agent).subscribe({ + next: (event) => events.push(event), + complete: () => resolve(), + }); + }); + + expect(events.length).toBe(2); + expect(events[0].type).toBe(EventType.RUN_STARTED); + expect((events[0] as any).metadata).toEqual({ fromMiddleware: true }); + expect(events[1].type).toBe(EventType.RUN_FINISHED); + expect((events[1] as any).result).toEqual({ success: true }); + }); +}); diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/middleware-live-events.test.ts b/sdks/typescript/packages/client/src/middleware/__tests__/middleware-live-events.test.ts new file mode 100644 index 000000000..bedb8f8c3 --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/middleware-live-events.test.ts @@ -0,0 +1,98 @@ +import { AbstractAgent } from "@/agent"; +import { Middleware } from "@/middleware"; +import { + BaseEvent, + EventType, + RunAgentInput, + TextMessageChunkEvent, + RunFinishedEvent, + RunStartedEvent, +} from "@ag-ui/core"; +import { Observable } from "rxjs"; + +describe("Middleware live events", () => { + class LiveEventAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + subscriber.next({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + } as RunStartedEvent); + + subscriber.next({ + type: EventType.TEXT_MESSAGE_CHUNK, + messageId: "message-1", + role: "assistant", + delta: "Hello", + } as TextMessageChunkEvent); + + subscriber.next({ + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + result: { success: true }, + } as RunFinishedEvent); + + subscriber.complete(); + }); + } + } + + class CustomMiddleware extends Middleware { + run(input: RunAgentInput, next: AbstractAgent): Observable { + return new Observable((subscriber) => { + const subscription = next.run(input).subscribe({ + next: (event) => { + if (event.type === EventType.RUN_STARTED) { + const started = event as RunStartedEvent; + subscriber.next({ + ...started, + metadata: { + ...(started.metadata ?? {}), + custom: true, + }, + }); + return; + } + + subscriber.next(event); + }, + error: (error) => subscriber.error(error), + complete: () => subscriber.complete(), + }); + + return () => subscription.unsubscribe(); + }); + } + } + + const input: RunAgentInput = { + threadId: "test-thread", + runId: "test-run", + tools: [], + context: [], + forwardedProps: {}, + state: {}, + messages: [], + }; + + it("should allow middleware to emit events before the agent", async () => { + const agent = new LiveEventAgent(); + const middleware = new CustomMiddleware(); + + const events: BaseEvent[] = []; + await new Promise((resolve) => { + middleware.run(input, agent).subscribe({ + next: (event) => events.push(event), + complete: () => resolve(), + }); + }); + + expect(events.length).toBe(3); + expect(events[0].type).toBe(EventType.RUN_STARTED); + expect((events[0] as RunStartedEvent).metadata).toEqual({ custom: true }); + expect(events[1].type).toBe(EventType.TEXT_MESSAGE_CHUNK); + expect(events[2].type).toBe(EventType.RUN_FINISHED); + }); +}); diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/middleware-usage-example.ts b/sdks/typescript/packages/client/src/middleware/__tests__/middleware-usage-example.ts new file mode 100644 index 000000000..209c5dc12 --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/middleware-usage-example.ts @@ -0,0 +1,130 @@ +import { AbstractAgent } from "@/agent"; +import { + Middleware, + FunctionMiddleware, + MiddlewareFunction, + FilterToolCallsMiddleware, +} from "@/middleware"; +import { + BaseEvent, + EventType, + RunAgentInput, + TextMessageChunkEvent, + RunFinishedEvent, + RunStartedEvent, +} from "@ag-ui/core"; +import { Observable } from "rxjs"; + +/** + * Example agent that emits a simple conversation flow. + */ +class ExampleAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + subscriber.next({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + } as RunStartedEvent); + + subscriber.next({ + type: EventType.TEXT_MESSAGE_CHUNK, + messageId: "message-1", + role: "assistant", + delta: "Hello! Let me calculate that for you.", + } as TextMessageChunkEvent); + + subscriber.next({ + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + result: { answer: 42 }, + } as RunFinishedEvent); + + subscriber.complete(); + }); + } +} + +/** + * Example middleware that logs events as they pass through. + */ +class LoggingMiddleware extends Middleware { + run(input: RunAgentInput, next: AbstractAgent): Observable { + console.log("Middleware input:", input); + + return next.run(input); + } +} + +/** + * Example function-based middleware that modifies the result. + */ +const resultEnhancer: MiddlewareFunction = (input, next) => { + return new Observable((subscriber) => { + next.run(input).subscribe({ + next: (event) => { + if (event.type === EventType.RUN_FINISHED) { + subscriber.next({ + ...event, + result: { + ...(event as RunFinishedEvent).result, + enhanced: true, + }, + }); + } else { + subscriber.next(event); + } + }, + error: (error) => subscriber.error(error), + complete: () => subscriber.complete(), + }); + }); +}; + +const input: RunAgentInput = { + threadId: "example-thread", + runId: "example-run", + tools: [], + context: [], + forwardedProps: {}, + state: {}, + messages: [], +}; + +/** + * Example usage demonstrating middleware chaining. + */ +async function runExample() { + const agent = new ExampleAgent(); + + // Function-based middleware + agent.use(new FunctionMiddleware(resultEnhancer)); + + // Class-based middleware + agent.use(new LoggingMiddleware()); + + // Built-in middleware to filter tool calls + agent.use(new FilterToolCallsMiddleware({ disallowedToolCalls: ["calculator"] })); + + const events: BaseEvent[] = []; + await new Promise((resolve, reject) => { + agent.runAgent({}, { + onRunFinalized: ({ messages }) => { + console.log("Final messages:", messages); + }, + onRunFinishedEvent: ({ result }) => { + console.log("Run finished result:", result); + }, + }).then(({ newMessages, result }) => { + console.log("New messages:", newMessages); + console.log("Final result:", result); + resolve(); + }).catch(reject); + }); + + return events; +} + +// eslint-disable-next-line @typescript-eslint/no-floating-promises +runExample(); diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/middleware-with-state.test.ts b/sdks/typescript/packages/client/src/middleware/__tests__/middleware-with-state.test.ts new file mode 100644 index 000000000..6ac9573c8 --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/middleware-with-state.test.ts @@ -0,0 +1,83 @@ +import { AbstractAgent } from "@/agent"; +import { Middleware } from "@/middleware"; +import { + BaseEvent, + EventType, + RunAgentInput, + RunFinishedEvent, + TextMessageChunkEvent, +} from "@ag-ui/core"; +import { Observable } from "rxjs"; + +describe("Middleware runNextWithState", () => { + class StatefulAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + subscriber.next({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + }); + + subscriber.next({ + type: EventType.TEXT_MESSAGE_CHUNK, + messageId: "message-1", + role: "assistant", + delta: "Hello", + } as TextMessageChunkEvent); + + subscriber.next({ + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + result: { success: true }, + } as RunFinishedEvent); + + subscriber.complete(); + }); + } + } + + class StateTrackingMiddleware extends Middleware { + run(input: RunAgentInput, next: AbstractAgent): Observable { + return this.runNextWithState(input, next).pipe((source) => { + return new Observable((subscriber) => { + source.subscribe({ + next: ({ event }) => subscriber.next(event), + complete: () => subscriber.complete(), + }); + }); + }); + } + } + + const input: RunAgentInput = { + threadId: "test-thread", + runId: "test-run", + tools: [], + context: [], + forwardedProps: {}, + state: {}, + messages: [], + }; + + it("should capture state changes after each event", async () => { + const agent = new StatefulAgent(); + const middleware = new StateTrackingMiddleware(); + + const events: BaseEvent[] = []; + await new Promise((resolve) => { + middleware.run(input, agent).subscribe({ + next: (event) => events.push(event), + complete: () => resolve(), + }); + }); + + expect(events.length).toBe(5); + expect(events[0].type).toBe(EventType.RUN_STARTED); + expect(events[1].type).toBe(EventType.TEXT_MESSAGE_START); + expect(events[2].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect(events[3].type).toBe(EventType.TEXT_MESSAGE_END); + expect(events[4].type).toBe(EventType.RUN_FINISHED); + }); +}); diff --git a/sdks/typescript/packages/client/src/middleware/__tests__/middleware.test.ts b/sdks/typescript/packages/client/src/middleware/__tests__/middleware.test.ts new file mode 100644 index 000000000..a07cfb870 --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/__tests__/middleware.test.ts @@ -0,0 +1,80 @@ +import { AbstractAgent } from "@/agent"; +import { Middleware } from "@/middleware"; +import { BaseEvent, EventType, RunAgentInput } from "@ag-ui/core"; +import { Observable } from "rxjs"; + +describe("Middleware", () => { + class TestAgent extends AbstractAgent { + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + subscriber.next({ + type: EventType.RUN_STARTED, + threadId: input.threadId, + runId: input.runId, + }); + + subscriber.next({ + type: EventType.RUN_FINISHED, + threadId: input.threadId, + runId: input.runId, + result: { success: true }, + }); + + subscriber.complete(); + }); + } + } + + class TestMiddleware extends Middleware { + run(input: RunAgentInput, next: AbstractAgent): Observable { + return new Observable((subscriber) => { + const subscription = next.run(input).subscribe({ + next: (event) => { + if (event.type === EventType.RUN_STARTED) { + subscriber.next({ + ...event, + metadata: { ...(event as any).metadata, middleware: true }, + }); + return; + } + + subscriber.next(event); + }, + error: (error) => subscriber.error(error), + complete: () => subscriber.complete(), + }); + + return () => subscription.unsubscribe(); + }); + } + } + + const input: RunAgentInput = { + threadId: "test-thread", + runId: "test-run", + tools: [], + context: [], + forwardedProps: {}, + state: {}, + messages: [], + }; + + it("should allow middleware to modify the event stream", async () => { + const agent = new TestAgent(); + const middleware = new TestMiddleware(); + + const events: BaseEvent[] = []; + await new Promise((resolve) => { + middleware.run(input, agent).subscribe({ + next: (event) => events.push(event), + complete: () => resolve(), + }); + }); + + expect(events.length).toBe(2); + expect(events[0].type).toBe(EventType.RUN_STARTED); + expect((events[0] as any).metadata).toEqual({ middleware: true }); + expect(events[1].type).toBe(EventType.RUN_FINISHED); + expect((events[1] as any).result).toEqual({ success: true }); + }); +}); diff --git a/sdks/typescript/packages/client/src/middleware/backward-compatibility-0-0-39.ts b/sdks/typescript/packages/client/src/middleware/backward-compatibility-0-0-39.ts new file mode 100644 index 000000000..2a9e86a84 --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/backward-compatibility-0-0-39.ts @@ -0,0 +1,54 @@ +import { Middleware } from "./middleware"; +import { AbstractAgent } from "@/agent"; +import type { RunAgentInput, BaseEvent } from "@ag-ui/core"; +import type { Observable } from "rxjs"; + +type InputMessage = RunAgentInput["messages"][number]; + +function sanitizeMessageContent(message: InputMessage): InputMessage { + const rawContent = (message as { content?: unknown }).content; + + if (Array.isArray(rawContent)) { + const concatenatedContent = rawContent + .filter( + (part): part is { type: "text"; text: string } => + typeof part === "object" && + part !== null && + "type" in part && + (part as { type: unknown }).type === "text" && + typeof (part as { text?: unknown }).text === "string", + ) + .map((part) => part.text) + .join(""); + + return { + ...message, + content: concatenatedContent, + } as InputMessage; + } + + if (typeof rawContent === "string") { + return message; + } + + return { + ...message, + content: "", + } as InputMessage; +} + +/** + * Middleware placeholder that maintains compatibility with AG-UI 0.0.39 flows. + * Currently it simply forwards all events to the next middleware/agent. + */ +export class BackwardCompatibility_0_0_39 extends Middleware { + override run(input: RunAgentInput, next: AbstractAgent): Observable { + const { parentRunId: _parentRunId, ...rest } = input; + const sanitizedInput: RunAgentInput = { + ...rest, + messages: rest.messages.map(sanitizeMessageContent), + } as RunAgentInput; + + return this.runNext(sanitizedInput, next); + } +} diff --git a/sdks/typescript/packages/client/src/middleware/filter-tool-calls.ts b/sdks/typescript/packages/client/src/middleware/filter-tool-calls.ts new file mode 100644 index 000000000..157ff6c3d --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/filter-tool-calls.ts @@ -0,0 +1,104 @@ +import { Middleware } from "./middleware"; +import { AbstractAgent } from "@/agent"; +import { + RunAgentInput, + BaseEvent, + EventType, + ToolCallStartEvent, + ToolCallArgsEvent, + ToolCallEndEvent, + ToolCallResultEvent, +} from "@ag-ui/core"; +import { Observable } from "rxjs"; +import { filter } from "rxjs/operators"; + +type FilterToolCallsConfig = + | { allowedToolCalls: string[]; disallowedToolCalls?: never } + | { disallowedToolCalls: string[]; allowedToolCalls?: never }; + +export class FilterToolCallsMiddleware extends Middleware { + private blockedToolCallIds = new Set(); + private readonly allowedTools?: Set; + private readonly disallowedTools?: Set; + + constructor(config: FilterToolCallsConfig) { + super(); + + // Runtime validation (belt and suspenders approach) + if (config.allowedToolCalls && config.disallowedToolCalls) { + throw new Error("Cannot specify both allowedToolCalls and disallowedToolCalls"); + } + + if (!config.allowedToolCalls && !config.disallowedToolCalls) { + throw new Error("Must specify either allowedToolCalls or disallowedToolCalls"); + } + + if (config.allowedToolCalls) { + this.allowedTools = new Set(config.allowedToolCalls); + } else if (config.disallowedToolCalls) { + this.disallowedTools = new Set(config.disallowedToolCalls); + } + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + // Use runNext which already includes transformChunks + return this.runNext(input, next).pipe( + filter((event) => { + // Handle TOOL_CALL_START events + if (event.type === EventType.TOOL_CALL_START) { + const toolCallStartEvent = event as ToolCallStartEvent; + const shouldFilter = this.shouldFilterTool(toolCallStartEvent.toolCallName); + + if (shouldFilter) { + // Track this tool call ID as blocked + this.blockedToolCallIds.add(toolCallStartEvent.toolCallId); + return false; // Filter out this event + } + + return true; // Allow this event + } + + // Handle TOOL_CALL_ARGS events + if (event.type === EventType.TOOL_CALL_ARGS) { + const toolCallArgsEvent = event as ToolCallArgsEvent; + return !this.blockedToolCallIds.has(toolCallArgsEvent.toolCallId); + } + + // Handle TOOL_CALL_END events + if (event.type === EventType.TOOL_CALL_END) { + const toolCallEndEvent = event as ToolCallEndEvent; + return !this.blockedToolCallIds.has(toolCallEndEvent.toolCallId); + } + + // Handle TOOL_CALL_RESULT events + if (event.type === EventType.TOOL_CALL_RESULT) { + const toolCallResultEvent = event as ToolCallResultEvent; + const isBlocked = this.blockedToolCallIds.has(toolCallResultEvent.toolCallId); + + if (isBlocked) { + // Clean up the blocked ID after the last event + this.blockedToolCallIds.delete(toolCallResultEvent.toolCallId); + return false; + } + + return true; + } + + // Allow all other events through + return true; + }), + ); + } + + private shouldFilterTool(toolName: string): boolean { + if (this.allowedTools) { + // If using allowed list, filter out tools NOT in the list + return !this.allowedTools.has(toolName); + } else if (this.disallowedTools) { + // If using disallowed list, filter out tools IN the list + return this.disallowedTools.has(toolName); + } + + return false; + } +} diff --git a/sdks/typescript/packages/client/src/middleware/index.ts b/sdks/typescript/packages/client/src/middleware/index.ts new file mode 100644 index 000000000..6b923491e --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/index.ts @@ -0,0 +1,4 @@ +export { Middleware, FunctionMiddleware } from "./middleware"; +export type { MiddlewareFunction } from "./middleware"; +export { FilterToolCallsMiddleware } from "./filter-tool-calls"; +export { BackwardCompatibility_0_0_39 } from "./backward-compatibility-0-0-39"; diff --git a/sdks/typescript/packages/client/src/middleware/middleware.ts b/sdks/typescript/packages/client/src/middleware/middleware.ts new file mode 100644 index 000000000..3d33c589a --- /dev/null +++ b/sdks/typescript/packages/client/src/middleware/middleware.ts @@ -0,0 +1,87 @@ +import { AbstractAgent } from "@/agent"; +import { RunAgentInput, BaseEvent, Message } from "@ag-ui/core"; +import { Observable, ReplaySubject } from "rxjs"; +import { concatMap } from "rxjs/operators"; +import { transformChunks } from "@/chunks"; +import { defaultApplyEvents } from "@/apply"; +import { structuredClone_ } from "@/utils"; + +export type MiddlewareFunction = ( + input: RunAgentInput, + next: AbstractAgent, +) => Observable; + +export interface EventWithState { + event: BaseEvent; + messages: Message[]; + state: any; +} + +export abstract class Middleware { + abstract run(input: RunAgentInput, next: AbstractAgent): Observable; + + /** + * Runs the next agent in the chain with automatic chunk transformation. + */ + protected runNext(input: RunAgentInput, next: AbstractAgent): Observable { + return next.run(input).pipe( + transformChunks(false), // Always transform chunks to full events + ); + } + + /** + * Runs the next agent and tracks state, providing current messages and state with each event. + * The messages and state represent the state AFTER the event has been applied. + */ + protected runNextWithState( + input: RunAgentInput, + next: AbstractAgent, + ): Observable { + let currentMessages = structuredClone_(input.messages || []); + let currentState = structuredClone_(input.state || {}); + + // Use a ReplaySubject to feed events one by one + const eventSubject = new ReplaySubject(); + + // Set up defaultApplyEvents to process events + const mutations$ = defaultApplyEvents(input, eventSubject, next, []); + + // Subscribe to track state changes + mutations$.subscribe((mutation) => { + if (mutation.messages !== undefined) { + currentMessages = mutation.messages; + } + if (mutation.state !== undefined) { + currentState = mutation.state; + } + }); + + return this.runNext(input, next).pipe( + concatMap(async (event) => { + // Feed the event to defaultApplyEvents and wait for it to process + eventSubject.next(event); + + // Give defaultApplyEvents a chance to process + await new Promise((resolve) => setTimeout(resolve, 0)); + + // Return event with current state + return { + event, + messages: structuredClone_(currentMessages), + state: structuredClone_(currentState), + }; + }), + ); + } +} + +// Wrapper class to convert a function into a Middleware instance +export class FunctionMiddleware extends Middleware { + constructor(private fn: MiddlewareFunction) { + super(); + } + + run(input: RunAgentInput, next: AbstractAgent): Observable { + return this.fn(input, next); + } +} diff --git a/sdks/typescript/packages/client/src/utils.ts b/sdks/typescript/packages/client/src/utils.ts index 7c03e8064..0353a9842 100644 --- a/sdks/typescript/packages/client/src/utils.ts +++ b/sdks/typescript/packages/client/src/utils.ts @@ -1,4 +1,4 @@ -import { v4 as uuidv4 } from 'uuid'; +import { v4 as uuidv4 } from "uuid"; export const structuredClone_ = (obj: T): T => { if (typeof structuredClone === "function") { @@ -19,3 +19,15 @@ export const structuredClone_ = (obj: T): T => { export function randomUUID(): string { return uuidv4(); } + +// Note: semver helpers were removed in favor of using +// the external `compare-versions` library directly at call sites. + + +/** + * Parses a semantic version string into its numeric components. + * Supports incomplete versions (e.g. "1", "1.2") by defaulting missing segments to zero. + * + * @throws If the version string is not a valid semantic version. + */ +// (Intentionally left minimal.) diff --git a/sdks/typescript/packages/core/package.json b/sdks/typescript/packages/core/package.json index d3626f998..4f066b79e 100644 --- a/sdks/typescript/packages/core/package.json +++ b/sdks/typescript/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/core", "author": "Markus Ecker ", - "version": "0.0.39", + "version": "0.0.40", "private": false, "publishConfig": { "access": "public" diff --git a/sdks/typescript/packages/core/src/__tests__/activity-events.test.ts b/sdks/typescript/packages/core/src/__tests__/activity-events.test.ts new file mode 100644 index 000000000..78b31d3a3 --- /dev/null +++ b/sdks/typescript/packages/core/src/__tests__/activity-events.test.ts @@ -0,0 +1,54 @@ +import { ActivitySnapshotEventSchema, ActivityDeltaEventSchema, EventType } from "../events"; +import { ActivityMessageSchema } from "../types"; + +describe("Activity events", () => { + it("parses ActivitySnapshotEvent", () => { + const result = ActivitySnapshotEventSchema.parse({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "msg_activity", + activityType: "PLAN", + content: { tasks: ["search"] }, + }); + + expect(result.type).toBe(EventType.ACTIVITY_SNAPSHOT); + expect(result.messageId).toBe("msg_activity"); + expect(result.content.tasks).toEqual(["search"]); + expect(result.replace).toBe(true); + }); + + it("respects replace flag in ActivitySnapshotEvent", () => { + const result = ActivitySnapshotEventSchema.parse({ + type: EventType.ACTIVITY_SNAPSHOT, + messageId: "msg_activity", + activityType: "PLAN", + content: { tasks: [] }, + replace: false, + }); + + expect(result.replace).toBe(false); + }); + + it("parses ActivityDeltaEvent", () => { + const result = ActivityDeltaEventSchema.parse({ + type: EventType.ACTIVITY_DELTA, + messageId: "msg_activity", + activityType: "PLAN", + patch: [{ op: "replace", path: "/tasks/0", value: "āœ“ search" }], + }); + + expect(result.type).toBe(EventType.ACTIVITY_DELTA); + expect(result.patch).toHaveLength(1); + }); + + it("parses ActivityMessage", () => { + const result = ActivityMessageSchema.parse({ + id: "activity_1", + role: "activity" as const, + activityType: "PLAN", + content: { tasks: [] }, + }); + + expect(result.activityType).toBe("PLAN"); + expect(result.content).toEqual({ tasks: [] }); + }); +}); diff --git a/sdks/typescript/packages/core/src/__tests__/backwards-compatibility.test.ts b/sdks/typescript/packages/core/src/__tests__/backwards-compatibility.test.ts new file mode 100644 index 000000000..34c47961f --- /dev/null +++ b/sdks/typescript/packages/core/src/__tests__/backwards-compatibility.test.ts @@ -0,0 +1,252 @@ +import { + UserMessageSchema, + AssistantMessageSchema, + RunAgentInputSchema, + TextMessageStartEventSchema, + RunStartedEventSchema, + ToolSchema, + ContextSchema, + EventType, +} from "../index"; + +describe("Backwards Compatibility", () => { + describe("Message Schemas", () => { + it("should accept UserMessage with extra fields from future versions", () => { + const messageWithExtraFields = { + id: "msg_1", + role: "user" as const, + content: "Hello", + futureField: "This is from a future version", + anotherNewProp: { nested: "data" }, + }; + + const result = UserMessageSchema.safeParse(messageWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.id).toBe("msg_1"); + expect(result.data.role).toBe("user"); + expect(result.data.content).toBe("Hello"); + // Extra fields should be stripped (Zod default behavior) + expect('futureField' in result.data).toBe(false); + expect('anotherNewProp' in result.data).toBe(false); + } + }); + + it("should accept AssistantMessage with extra fields", () => { + const messageWithExtraFields = { + id: "msg_2", + role: "assistant" as const, + content: "Response", + newFeatureFlag: true, + experimentalData: [1, 2, 3], + }; + + const result = AssistantMessageSchema.safeParse(messageWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.id).toBe("msg_2"); + expect(result.data.content).toBe("Response"); + } + }); + }); + + describe("RunAgentInput Schema", () => { + it("should accept RunAgentInput with extra fields at top level", () => { + const inputWithExtraFields = { + threadId: "thread_1", + runId: "run_1", + parentRunId: "parent_run_1", + state: {}, + messages: [], + tools: [], + context: [], + forwardedProps: {}, + // Extra fields from future version + newFeatureFlag: true, + experimentalTimeout: 5000, + futureConfig: { option: "value" }, + }; + + const result = RunAgentInputSchema.safeParse(inputWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.threadId).toBe("thread_1"); + expect(result.data.runId).toBe("run_1"); + expect(result.data.parentRunId).toBe("parent_run_1"); + } + }); + + it("should accept RunAgentInput with messages containing extra fields", () => { + const inputWithExtraFieldsInMessages = { + threadId: "thread_2", + runId: "run_2", + state: {}, + messages: [ + { + id: "m1", + role: "user" as const, + content: "Hi", + extraProp: "value", + metadata: { source: "web" }, + }, + ], + tools: [], + context: [], + forwardedProps: {}, + }; + + const result = RunAgentInputSchema.safeParse(inputWithExtraFieldsInMessages); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.messages.length).toBe(1); + expect(result.data.messages[0].content).toBe("Hi"); + } + }); + }); + + describe("Event Schemas", () => { + it("should accept TextMessageStartEvent with extra fields", () => { + const eventWithExtraFields = { + type: EventType.TEXT_MESSAGE_START, + messageId: "msg_1", + role: "assistant" as const, + // Extra fields from future version + metadata: { tokenCount: 10 }, + experimentalFeature: true, + }; + + const result = TextMessageStartEventSchema.safeParse(eventWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.type).toBe(EventType.TEXT_MESSAGE_START); + expect(result.data.messageId).toBe("msg_1"); + } + }); + + it("should accept RunStartedEvent with extra fields", () => { + const eventWithExtraFields = { + type: EventType.RUN_STARTED, + threadId: "thread_1", + runId: "run_1", + // Extra fields from future version + startTime: Date.now(), + priority: "high", + }; + + const result = RunStartedEventSchema.safeParse(eventWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.threadId).toBe("thread_1"); + expect(result.data.runId).toBe("run_1"); + } + }); + }); + + describe("Tool and Context Schemas", () => { + it("should accept Tool with extra fields", () => { + const toolWithExtraFields = { + name: "calculator", + description: "Performs calculations", + parameters: { type: "object" }, + // Extra fields from future version + version: "2.0", + deprecationWarning: null, + }; + + const result = ToolSchema.safeParse(toolWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.name).toBe("calculator"); + expect(result.data.description).toBe("Performs calculations"); + } + }); + + it("should accept Context with extra fields", () => { + const contextWithExtraFields = { + description: "User preferences", + value: '{"theme":"dark"}', + // Extra fields from future version + priority: 1, + expiresAt: Date.now() + 3600000, + }; + + const result = ContextSchema.safeParse(contextWithExtraFields); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.description).toBe("User preferences"); + expect(result.data.value).toBe('{"theme":"dark"}'); + } + }); + }); + + describe("Complex nested structures", () => { + it("should handle deeply nested objects with extra fields at multiple levels", () => { + const complexInput = { + threadId: "thread_complex", + runId: "run_complex", + state: { currentStep: 1 }, + messages: [ + { + id: "m1", + role: "user" as const, + content: "Hello", + extraUserProp: "value1", + }, + { + id: "m2", + role: "assistant" as const, + content: "Hi there", + toolCalls: [ + { + id: "tc1", + type: "function" as const, + function: { + name: "search", + arguments: "{}", + extraFunctionProp: "value2", + }, + extraToolCallProp: "value3", + }, + ], + extraAssistantProp: "value4", + }, + ], + tools: [ + { + name: "search", + description: "Search tool", + parameters: {}, + extraToolProp: "value5", + }, + ], + context: [ + { + description: "ctx", + value: "val", + extraContextProp: "value6", + }, + ], + forwardedProps: { custom: true }, + extraTopLevelProp: "value7", + }; + + const result = RunAgentInputSchema.safeParse(complexInput); + + expect(result.success).toBe(true); + if (result.success) { + expect(result.data.messages.length).toBe(2); + expect(result.data.messages[1].toolCalls?.length).toBe(1); + expect(result.data.tools.length).toBe(1); + expect(result.data.context.length).toBe(1); + } + }); + }); +}); diff --git a/sdks/typescript/packages/core/src/__tests__/multimodal-messages.test.ts b/sdks/typescript/packages/core/src/__tests__/multimodal-messages.test.ts new file mode 100644 index 000000000..3bcca30e8 --- /dev/null +++ b/sdks/typescript/packages/core/src/__tests__/multimodal-messages.test.ts @@ -0,0 +1,52 @@ +import { + UserMessageSchema, + BinaryInputContentSchema, +} from "../types"; + +describe("Multimodal messages", () => { + it("parses user message with content array", () => { + const result = UserMessageSchema.parse({ + id: "user_multimodal", + role: "user" as const, + content: [ + { type: "text" as const, text: "Check this out" }, + { type: "binary" as const, mimeType: "image/png", url: "https://example.com/image.png" }, + ], + }); + + expect(Array.isArray(result.content)).toBe(true); + if (Array.isArray(result.content)) { + expect(result.content[0].type).toBe("text"); + expect(result.content[0].text).toBe("Check this out"); + expect(result.content[1].type).toBe("binary"); + expect(result.content[1].mimeType).toBe("image/png"); + expect(result.content[1].url).toBe("https://example.com/image.png"); + } + }); + + it("rejects binary content without payload source", () => { + const result = UserMessageSchema.safeParse({ + id: "user_invalid", + role: "user" as const, + content: [{ type: "binary" as const, mimeType: "image/png" }], + }); + + expect(result.success).toBe(false); + }); + + it("parses binary input with embedded data", () => { + const binary = BinaryInputContentSchema.parse({ + type: "binary" as const, + mimeType: "image/png", + data: "base64", + }); + + expect(binary.data).toBe("base64"); + }); + + it("requires binary payload source", () => { + expect(() => + BinaryInputContentSchema.parse({ type: "binary" as const, mimeType: "image/png" }), + ).toThrow(/id, url, or data/); + }); +}); diff --git a/sdks/typescript/packages/core/src/events.ts b/sdks/typescript/packages/core/src/events.ts index a95fc8e15..36076896c 100644 --- a/sdks/typescript/packages/core/src/events.ts +++ b/sdks/typescript/packages/core/src/events.ts @@ -1,5 +1,5 @@ import { z } from "zod"; -import { MessageSchema, StateSchema } from "./types"; +import { MessageSchema, StateSchema, RunAgentInputSchema } from "./types"; // Text messages can have any role except "tool" const TextMessageRoleSchema = z.union([ @@ -27,6 +27,8 @@ export enum EventType { STATE_SNAPSHOT = "STATE_SNAPSHOT", STATE_DELTA = "STATE_DELTA", MESSAGES_SNAPSHOT = "MESSAGES_SNAPSHOT", + ACTIVITY_SNAPSHOT = "ACTIVITY_SNAPSHOT", + ACTIVITY_DELTA = "ACTIVITY_DELTA", RAW = "RAW", CUSTOM = "CUSTOM", RUN_STARTED = "RUN_STARTED", @@ -139,6 +141,21 @@ export const MessagesSnapshotEventSchema = BaseEventSchema.extend({ messages: z.array(MessageSchema), }); +export const ActivitySnapshotEventSchema = BaseEventSchema.extend({ + type: z.literal(EventType.ACTIVITY_SNAPSHOT), + messageId: z.string(), + activityType: z.string(), + content: z.record(z.any()), + replace: z.boolean().optional().default(true), +}); + +export const ActivityDeltaEventSchema = BaseEventSchema.extend({ + type: z.literal(EventType.ACTIVITY_DELTA), + messageId: z.string(), + activityType: z.string(), + patch: z.array(z.any()), +}); + export const RawEventSchema = BaseEventSchema.extend({ type: z.literal(EventType.RAW), event: z.any(), @@ -155,6 +172,8 @@ export const RunStartedEventSchema = BaseEventSchema.extend({ type: z.literal(EventType.RUN_STARTED), threadId: z.string(), runId: z.string(), + parentRunId: z.string().optional(), + input: RunAgentInputSchema.optional(), }); export const RunFinishedEventSchema = BaseEventSchema.extend({ @@ -198,6 +217,8 @@ export const EventSchemas = z.discriminatedUnion("type", [ StateSnapshotEventSchema, StateDeltaEventSchema, MessagesSnapshotEventSchema, + ActivitySnapshotEventSchema, + ActivityDeltaEventSchema, RawEventSchema, CustomEventSchema, RunStartedEventSchema, @@ -225,6 +246,8 @@ export type ThinkingEndEvent = z.infer; export type StateSnapshotEvent = z.infer; export type StateDeltaEvent = z.infer; export type MessagesSnapshotEvent = z.infer; +export type ActivitySnapshotEvent = z.infer; +export type ActivityDeltaEvent = z.infer; export type RawEvent = z.infer; export type CustomEvent = z.infer; export type RunStartedEvent = z.infer; diff --git a/sdks/typescript/packages/core/src/types.ts b/sdks/typescript/packages/core/src/types.ts index 1abb31a0b..6a8560293 100644 --- a/sdks/typescript/packages/core/src/types.ts +++ b/sdks/typescript/packages/core/src/types.ts @@ -18,6 +18,48 @@ export const BaseMessageSchema = z.object({ name: z.string().optional(), }); +export const TextInputContentSchema = z.object({ + type: z.literal("text"), + text: z.string(), +}); + +const BinaryInputContentObjectSchema = z.object({ + type: z.literal("binary"), + mimeType: z.string(), + id: z.string().optional(), + url: z.string().optional(), + data: z.string().optional(), + filename: z.string().optional(), +}); + +const ensureBinaryPayload = ( + value: { id?: string; url?: string; data?: string }, + ctx: z.RefinementCtx, +) => { + if (!value.id && !value.url && !value.data) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: "BinaryInputContent requires at least one of id, url, or data.", + path: ["id"], + }); + } +}; + +export const BinaryInputContentSchema = BinaryInputContentObjectSchema.superRefine((value, ctx) => { + ensureBinaryPayload(value, ctx); +}); + +const InputContentBaseSchema = z.discriminatedUnion("type", [ + TextInputContentSchema, + BinaryInputContentObjectSchema, +]); + +export const InputContentSchema = InputContentBaseSchema.superRefine((value, ctx) => { + if (value.type === "binary") { + ensureBinaryPayload(value, ctx); + } +}); + export const DeveloperMessageSchema = BaseMessageSchema.extend({ role: z.literal("developer"), content: z.string(), @@ -36,7 +78,7 @@ export const AssistantMessageSchema = BaseMessageSchema.extend({ export const UserMessageSchema = BaseMessageSchema.extend({ role: z.literal("user"), - content: z.string(), + content: z.union([z.string(), z.array(InputContentSchema)]), }); export const ToolMessageSchema = z.object({ @@ -47,12 +89,20 @@ export const ToolMessageSchema = z.object({ error: z.string().optional(), }); +export const ActivityMessageSchema = z.object({ + id: z.string(), + role: z.literal("activity"), + activityType: z.string(), + content: z.record(z.any()), +}); + export const MessageSchema = z.discriminatedUnion("role", [ DeveloperMessageSchema, SystemMessageSchema, AssistantMessageSchema, UserMessageSchema, ToolMessageSchema, + ActivityMessageSchema, ]); export const RoleSchema = z.union([ @@ -61,6 +111,7 @@ export const RoleSchema = z.union([ z.literal("assistant"), z.literal("user"), z.literal("tool"), + z.literal("activity"), ]); export const ContextSchema = z.object({ @@ -77,6 +128,7 @@ export const ToolSchema = z.object({ export const RunAgentInputSchema = z.object({ threadId: z.string(), runId: z.string(), + parentRunId: z.string().optional(), state: z.any(), messages: z.array(MessageSchema), tools: z.array(ToolSchema), @@ -88,11 +140,15 @@ export const StateSchema = z.any(); export type ToolCall = z.infer; export type FunctionCall = z.infer; +export type TextInputContent = z.infer; +export type BinaryInputContent = z.infer; +export type InputContent = z.infer; export type DeveloperMessage = z.infer; export type SystemMessage = z.infer; export type AssistantMessage = z.infer; export type UserMessage = z.infer; export type ToolMessage = z.infer; +export type ActivityMessage = z.infer; export type Message = z.infer; export type Context = z.infer; export type Tool = z.infer; @@ -105,3 +161,9 @@ export class AGUIError extends Error { super(message); } } + +export class AGUIConnectNotImplementedError extends AGUIError { + constructor() { + super("Connect not implemented. This method is not supported by the current agent."); + } +} diff --git a/sdks/typescript/packages/encoder/package.json b/sdks/typescript/packages/encoder/package.json index b95c5ee70..efe085cfd 100644 --- a/sdks/typescript/packages/encoder/package.json +++ b/sdks/typescript/packages/encoder/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/encoder", "author": "Markus Ecker ", - "version": "0.0.39", + "version": "0.0.40", "private": false, "publishConfig": { "access": "public" diff --git a/sdks/typescript/packages/proto/package.json b/sdks/typescript/packages/proto/package.json index 7c1fed72b..685b5fe8e 100644 --- a/sdks/typescript/packages/proto/package.json +++ b/sdks/typescript/packages/proto/package.json @@ -1,7 +1,7 @@ { "name": "@ag-ui/proto", "author": "Markus Ecker ", - "version": "0.0.39", + "version": "0.0.40", "private": false, "publishConfig": { "access": "public" From 1857c0af57015b102ad8c9b61d02917df5837bb2 Mon Sep 17 00:00:00 2001 From: xdave Date: Thu, 6 Nov 2025 09:24:15 -0700 Subject: [PATCH 06/18] fix(langgraph): handle Command tool output (#639) - fixes #431 Co-authored-by: Ran Shemtov --- .../langgraph/python/ag_ui_langgraph/agent.py | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/integrations/langgraph/python/ag_ui_langgraph/agent.py b/integrations/langgraph/python/ag_ui_langgraph/agent.py index a67deae3b..5751af75f 100644 --- a/integrations/langgraph/python/ag_ui_langgraph/agent.py +++ b/integrations/langgraph/python/ag_ui_langgraph/agent.py @@ -6,10 +6,10 @@ from langgraph.graph.state import CompiledStateGraph try: - from langchain.schema import BaseMessage, SystemMessage + from langchain.schema import BaseMessage, SystemMessage, ToolMessage except ImportError: # Langchain >= 1.0.0 - from langchain_core.messages import BaseMessage, SystemMessage + from langchain_core.messages import BaseMessage, SystemMessage, ToolMessage from langchain_core.runnables import RunnableConfig, ensure_config from langchain_core.messages import HumanMessage @@ -682,6 +682,51 @@ async def _handle_single_event(self, event: Any, state: State) -> AsyncGenerator elif event_type == LangGraphEventTypes.OnToolEnd: tool_call_output = event["data"]["output"] + + if isinstance(tool_call_output, Command): + # Extract ToolMessages from Command.update + messages = tool_call_output.update.get('messages', []) + tool_messages = [m for m in messages if isinstance(m, ToolMessage)] + + # Process each tool message + for tool_msg in tool_messages: + if not self.active_run["has_function_streaming"]: + yield self._dispatch_event( + ToolCallStartEvent( + type=EventType.TOOL_CALL_START, + tool_call_id=tool_msg.tool_call_id, + tool_call_name=tool_msg.name, + parent_message_id=tool_msg.id, + raw_event=event, + ) + ) + yield self._dispatch_event( + ToolCallArgsEvent( + type=EventType.TOOL_CALL_ARGS, + tool_call_id=tool_msg.tool_call_id, + delta=json.dumps(event["data"].get("input", {})), + raw_event=event + ) + ) + yield self._dispatch_event( + ToolCallEndEvent( + type=EventType.TOOL_CALL_END, + tool_call_id=tool_msg.tool_call_id, + raw_event=event + ) + ) + + yield self._dispatch_event( + ToolCallResultEvent( + type=EventType.TOOL_CALL_RESULT, + tool_call_id=tool_msg.tool_call_id, + message_id=str(uuid.uuid4()), + content=tool_msg.content, + role="tool" + ) + ) + return + if not self.active_run["has_function_streaming"]: yield self._dispatch_event( ToolCallStartEvent( From 913c18b84eba3b4ffde1b9b2675fca9b67693130 Mon Sep 17 00:00:00 2001 From: Max Korp Date: Thu, 6 Nov 2025 12:18:31 -0700 Subject: [PATCH 07/18] make sidebar nav maintain query string params (#649) --- apps/dojo/src/components/sidebar/sidebar.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/dojo/src/components/sidebar/sidebar.tsx b/apps/dojo/src/components/sidebar/sidebar.tsx index d2b1a83c9..5a60e3cda 100644 --- a/apps/dojo/src/components/sidebar/sidebar.tsx +++ b/apps/dojo/src/components/sidebar/sidebar.tsx @@ -3,7 +3,7 @@ import React, { useState, useEffect } from "react"; import { EyeIcon as Eye, CodeIcon as Code, BookOpenTextIcon as Book } from "@phosphor-icons/react"; import { cn } from "@/lib/utils"; -import { useRouter, usePathname } from "next/navigation"; +import { useRouter, usePathname, useSearchParams } from "next/navigation"; import { DemoList } from "@/components/demo-list/demo-list"; import { ThemeToggle } from "@/components/ui/theme-toggle"; import { ChevronDown } from "lucide-react"; @@ -31,6 +31,7 @@ interface SidebarProps { export function Sidebar({ isMobile, onMobileClose }: SidebarProps) { const router = useRouter(); const pathname = usePathname(); + const searchParams = useSearchParams(); const { theme, setTheme } = useTheme(); const isDarkTheme = theme === "dark" const { view, frameworkPickerHidden, viewPickerHidden, featurePickerHidden, setView} = useURLParams(); @@ -56,7 +57,10 @@ export function Sidebar({ isMobile, onMobileClose }: SidebarProps) { // Handle selecting a demo const handleDemoSelect = (demoId: string) => { if (currentIntegration) { - router.push(`/${currentIntegration.id}/feature/${demoId}`); + const queryString = searchParams.toString(); + const newPath = `/${currentIntegration.id}/feature/${demoId}`; + const url = queryString ? `${newPath}?${queryString}` : newPath; + router.push(url); // Close mobile sidebar when demo is selected if (isMobile && onMobileClose) { onMobileClose(); @@ -66,7 +70,10 @@ export function Sidebar({ isMobile, onMobileClose }: SidebarProps) { // Handle integration selection const handleIntegrationSelect = (integrationId: string) => { - router.push(`/${integrationId}`); + const queryString = searchParams.toString(); + const newPath = `/${integrationId}`; + const url = queryString ? `${newPath}?${queryString}` : newPath; + router.push(url); }; const tabClass = `cursor-pointer flex-1 h-8 px-2 text-sm text-primary shadow-none bg-none border-none font-medium gap-1 rounded-lg data-[state=active]:bg-white data-[state=active]:text-primary data-[state=active]:shadow-none` From 4a2627a3ecb7e830f920fc8394e8e0e205c1d698 Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Fri, 7 Nov 2025 17:08:02 +0800 Subject: [PATCH 08/18] ag-ui support claude agent python sdk --- .../adk-middleware/python/IMPLEMENTATION.md | 652 + .../claude-agent-sdk/IMPLEMENTATION_PLAN.md | 317 + .../claude-agent-sdk/python/.env.local | 17 + .../python/.env.local.example | 14 + .../claude-agent-sdk/python/ARCHITECTURE.md | 113 + .../claude-agent-sdk/python/CONFIGURATION.md | 275 + .../python/IMPLEMENTATION_STATUS.md | 328 + .../claude-agent-sdk/python/README.md | 388 + .../claude-agent-sdk/python/TEST_SUMMARY.md | 270 + .../claude-agent-sdk/python/USAGE_GUIDE.md | 369 + .../python/examples/README.md | 45 + .../python/examples/pyproject.toml | 11 + .../python/examples/server/fastapi_server.py | 97 + .../python/examples/test_client.py | 218 + .../claude-agent-sdk/python/pyproject.toml | 33 + .../claude-agent-sdk/python/pytest.ini | 15 + .../python/src/ag_ui_claude/__init__.py | 19 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 754 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 654 bytes .../__pycache__/claude_agent.cpython-311.pyc | Bin 0 -> 38677 bytes .../__pycache__/claude_agent.cpython-312.pyc | Bin 0 -> 34269 bytes .../__pycache__/endpoint.cpython-311.pyc | Bin 0 -> 5162 bytes .../__pycache__/endpoint.cpython-312.pyc | Bin 0 -> 4497 bytes .../event_translator.cpython-311.pyc | Bin 0 -> 14040 bytes .../event_translator.cpython-312.pyc | Bin 0 -> 12423 bytes .../execution_state.cpython-311.pyc | Bin 0 -> 6122 bytes .../execution_state.cpython-312.pyc | Bin 0 -> 5882 bytes .../session_manager.cpython-311.pyc | Bin 0 -> 22110 bytes .../session_manager.cpython-312.pyc | Bin 0 -> 20772 bytes .../__pycache__/tool_adapter.cpython-311.pyc | Bin 0 -> 7731 bytes .../__pycache__/tool_adapter.cpython-312.pyc | Bin 0 -> 7019 bytes .../python/src/ag_ui_claude/claude_agent.py | 906 ++ .../python/src/ag_ui_claude/endpoint.py | 88 + .../src/ag_ui_claude/event_translator.py | 315 + .../src/ag_ui_claude/execution_state.py | 124 + .../src/ag_ui_claude/session_manager.py | 453 + .../python/src/ag_ui_claude/tool_adapter.py | 182 + .../python/src/ag_ui_claude/utils/__init__.py | 2 + .../src/ag_ui_claude/utils/converters.py | 203 + .../claude-agent-sdk/python/tests/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 245 bytes .../conftest.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 8120 bytes ..._claude_agent.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 25162 bytes ...test_endpoint.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 14393 bytes ...nt_translator.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 36904 bytes ...gration_basic.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 10954 bytes ...tion_sessions.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 8778 bytes ...gration_tools.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 8009 bytes ...test_real_api.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 8121 bytes ...ssion_manager.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 24372 bytes ..._tool_adapter.cpython-312-pytest-8.4.2.pyc | Bin 0 -> 11309 bytes .../claude-agent-sdk/python/tests/conftest.py | 219 + .../python/tests/test_claude_agent.py | 264 + .../python/tests/test_endpoint.py | 165 + .../python/tests/test_event_translator.py | 241 + .../python/tests/test_integration_basic.py | 170 + .../python/tests/test_integration_sessions.py | 162 + .../python/tests/test_integration_tools.py | 150 + .../python/tests/test_real_api.py | 110 + .../python/tests/test_session_manager.py | 301 + .../python/tests/test_tool_adapter.py | 136 + .../typescript/examples/README.md | 10 + .../typescript/examples/copilotkit/.gitignore | 36 + .../typescript/examples/copilotkit/README.md | 131 + .../examples/copilotkit/next.config.js | 7 + .../examples/copilotkit/package-lock.json | 12917 ++++++++++++++++ .../examples/copilotkit/package.json | 30 + .../examples/copilotkit/postcss.config.js | 7 + .../src/app/api/copilotkit/route.ts | 54 + .../examples/copilotkit/src/app/globals.css | 19 + .../examples/copilotkit/src/app/layout.tsx | 20 + .../examples/copilotkit/src/app/page.tsx | 79 + .../examples/copilotkit/tailwind.config.js | 12 + .../examples/copilotkit/tsconfig.json | 28 + 74 files changed, 20724 insertions(+) create mode 100644 integrations/adk-middleware/python/IMPLEMENTATION.md create mode 100644 integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md create mode 100644 integrations/claude-agent-sdk/python/.env.local create mode 100644 integrations/claude-agent-sdk/python/.env.local.example create mode 100644 integrations/claude-agent-sdk/python/ARCHITECTURE.md create mode 100644 integrations/claude-agent-sdk/python/CONFIGURATION.md create mode 100644 integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md create mode 100644 integrations/claude-agent-sdk/python/README.md create mode 100644 integrations/claude-agent-sdk/python/TEST_SUMMARY.md create mode 100644 integrations/claude-agent-sdk/python/USAGE_GUIDE.md create mode 100644 integrations/claude-agent-sdk/python/examples/README.md create mode 100644 integrations/claude-agent-sdk/python/examples/pyproject.toml create mode 100644 integrations/claude-agent-sdk/python/examples/server/fastapi_server.py create mode 100644 integrations/claude-agent-sdk/python/examples/test_client.py create mode 100644 integrations/claude-agent-sdk/python/pyproject.toml create mode 100644 integrations/claude-agent-sdk/python/pytest.ini create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__init__.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/__init__.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/__init__.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/claude_agent.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/claude_agent.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/endpoint.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/endpoint.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/event_translator.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/event_translator.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/execution_state.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/execution_state.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/session_manager.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/session_manager.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/tool_adapter.cpython-311.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/tool_adapter.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/claude_agent.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/endpoint.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/event_translator.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/execution_state.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/session_manager.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/tool_adapter.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/__init__.py create mode 100644 integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/converters.py create mode 100644 integrations/claude-agent-sdk/python/tests/__init__.py create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/__init__.cpython-312.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/conftest.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_claude_agent.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_endpoint.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_event_translator.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_integration_basic.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_integration_sessions.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_integration_tools.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_real_api.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_session_manager.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/__pycache__/test_tool_adapter.cpython-312-pytest-8.4.2.pyc create mode 100644 integrations/claude-agent-sdk/python/tests/conftest.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_claude_agent.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_endpoint.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_event_translator.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_integration_basic.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_integration_sessions.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_integration_tools.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_real_api.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_session_manager.py create mode 100644 integrations/claude-agent-sdk/python/tests/test_tool_adapter.py create mode 100644 integrations/claude-agent-sdk/typescript/examples/README.md create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/.gitignore create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/next.config.js create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/package-lock.json create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/package.json create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/postcss.config.js create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/api/copilotkit/route.ts create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/globals.css create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/layout.tsx create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/page.tsx create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/tailwind.config.js create mode 100644 integrations/claude-agent-sdk/typescript/examples/copilotkit/tsconfig.json diff --git a/integrations/adk-middleware/python/IMPLEMENTATION.md b/integrations/adk-middleware/python/IMPLEMENTATION.md new file mode 100644 index 000000000..451c08049 --- /dev/null +++ b/integrations/adk-middleware/python/IMPLEMENTATION.md @@ -0,0 +1,652 @@ +# ADK Middleware å®žēŽ°é€»č¾‘čÆ¦č§£ + +## 目录 + +1. [ęž¶ęž„ę¦‚čæ°](#ęž¶ęž„ę¦‚čæ°) +2. [ę øåæƒē»„ä»¶](#ę øåæƒē»„ä»¶) +3. [ę‰§č”ŒęµēØ‹](#ę‰§č”ŒęµēØ‹) +4. [äŗ‹ä»¶č½¬ę¢ęœŗåˆ¶](#äŗ‹ä»¶č½¬ę¢ęœŗåˆ¶) +5. [ä¼ščÆē®”ē†](#ä¼ščÆē®”ē†) +6. [å·„å…·ę”ÆęŒ](#å·„å…·ę”ÆęŒ) +7. [ēŠ¶ę€ē®”ē†](#ēŠ¶ę€ē®”ē†) +8. [错误处理](#错误处理) + +--- + +## ęž¶ęž„ę¦‚čæ° + +ADK Middleware ę˜Æäø€äøŖåč®®é€‚é…å±‚ļ¼Œå°† Google ADK (Agent Development Kit) ēš„ę‰§č”ŒęØ”åž‹č½¬ę¢äøŗ AG-UI Protocol ēš„äŗ‹ä»¶ęµć€‚ę•“ä½“ęž¶ęž„é‡‡ē”Øäŗ‹ä»¶é©±åŠØć€å¼‚ę­„ę‰§č”Œēš„č®¾č®”ęØ”å¼ć€‚ + +### č®¾č®”åŽŸåˆ™ + +1. **åč®®ę”„ęŽ„**: 将 ADK ēš„äŗ‹ä»¶ęØ”åž‹č½¬ę¢äøŗ AG-UI ēš„ę ‡å‡†äŗ‹ä»¶ē±»åž‹ +2. **å¼‚ę­„ę‰§č”Œ**: ä½æē”ØåŽå°ä»»åŠ”ę‰§č”Œ ADK agentļ¼Œé€ščæ‡é˜Ÿåˆ—ęµå¼ä¼ č¾“äŗ‹ä»¶ +3. **ä¼ščÆéš”ē¦»**: ęÆäøŖ thread_id 对应一个 ADK sessionļ¼ŒäæęŒåÆ¹čÆčæžē»­ę€§ +4. **巄具代理**: å®¢ęˆ·ē«Æå·„å…·é€ščæ‡ä»£ē†ęØ”å¼č½¬å‘åˆ°å‰ē«Æę‰§č”Œ + +### ę•°ę®ęµ + +``` +AG-UI Client + ↓ (RunAgentInput) +ADKAgent.run() + ↓ (åŽå°ę‰§č”Œ) +ADK Runner + ↓ (ADK Events) +EventTranslator + ↓ (AG-UI Events) +Event Queue + ↓ (ęµå¼ä¼ č¾“) +AG-UI Client +``` + +--- + +## ę øåæƒē»„ä»¶ + +### 1. ADKAgent + +**ä½ē½®**: `src/ag_ui_adk/adk_agent.py` + +ADKAgent ę˜Æę•“äøŖäø­é—“ä»¶ēš„ę øåæƒå…„å£ļ¼Œč“Ÿč“£ļ¼š + +- **åˆå§‹åŒ–é…ē½®**: 箔理 ADK agentć€ęœåŠ”ć€ä¼ščÆå‚ę•° +- **ę‰§č”Œē¼–ęŽ’**: åč°ƒę–°ę‰§č”ŒåÆåŠØć€å·„å…·ē»“ęžœå¤„ē†ć€ę¶ˆęÆę‰¹å¤„ē† +- **ē”Ÿå‘½å‘ØęœŸē®”ē†**: 箔理 RUN_STARTED/FINISHED 事件、错误处理 + +#### 关键方法 + +```python +async def run(input: RunAgentInput) -> AsyncGenerator[BaseEvent, None] +``` +äø»å…„å£ę–¹ę³•ļ¼Œå¤„ē†ę¶ˆęÆåˆ†ē±»å’Œę‰§č”Œč·Æē”±ļ¼š + +1. **ę¶ˆęÆåˆ†ęž**: čÆ†åˆ«ęœŖå¤„ē†ę¶ˆęÆ (`_get_unseen_messages`) +2. **路由决策**: + - å·„å…·ē»“ęžœę¶ˆęÆ → `_handle_tool_result_submission` + - ę–°ē”Øęˆ·ę¶ˆęÆ → `_start_new_execution` + - Assistant 消息 → 标记为已处理 +3. **äŗ‹ä»¶ęµå¼č¾“å‡ŗ**: å¼‚ę­„ē”Ÿęˆ AG-UI åč®®äŗ‹ä»¶ + +#### åˆå§‹åŒ–å‚ę•° + +- `adk_agent`: Google ADK Agent 实例 +- `app_name` / `user_id`: åŗ”ē”Øå’Œē”Øęˆ·ę ‡čÆ†ļ¼ˆę”ÆęŒé™ę€ęˆ–åŠØę€ęå–ļ¼‰ +- `session_service`: ADK ä¼ščÆęœåŠ”ļ¼ˆé»˜č®¤ InMemorySessionService) +- `memory_service`: č®°åæ†ęœåŠ”ļ¼ˆåÆé€‰ļ¼Œē”ØäŗŽä¼ščÆč®°åæ†ļ¼‰ +- `run_config_factory`: č‡Ŗå®šä¹‰ RunConfig å·„åŽ‚å‡½ę•° +- `execution_timeout_seconds`: ę‰§č”Œč¶…ę—¶ļ¼ˆé»˜č®¤ 600 秒) +- `tool_timeout_seconds`: å·„å…·č°ƒē”Øč¶…ę—¶ļ¼ˆé»˜č®¤ 300 秒) + +### 2. EventTranslator + +**ä½ē½®**: `src/ag_ui_adk/event_translator.py` + +EventTranslator č“Ÿč“£å°† ADK äŗ‹ä»¶č½¬ę¢äøŗ AG-UI åč®®äŗ‹ä»¶ć€‚ + +#### č½¬ę¢ę˜ å°„ + +| ADK Event | AG-UI Event | +|-----------|-------------| +| Content with text (partial) | TEXT_MESSAGE_START, TEXT_MESSAGE_CONTENT | +| Content with text (final) | TEXT_MESSAGE_END | +| FunctionCall | TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END | +| FunctionResponse | TOOL_CALL_RESULT | +| LongRunningFunctionCall | TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END (LRO) | +| Actions.state_delta | STATE_DELTA | + +#### ęµå¼ę–‡ęœ¬å¤„ē† + +EventTranslator ē»“ęŠ¤ęµå¼ę¶ˆęÆēŠ¶ę€ļ¼š + +- `_streaming_message_id`: å½“å‰ęµå¼ę¶ˆęÆ ID +- `_is_streaming`: ę˜Æå¦ę­£åœØęµå¼ä¼ č¾“ +- `_current_stream_text`: ē“Æē§Æēš„ę–‡ęœ¬å†…å®¹ +- `_last_streamed_text`: äøŠę¬”ęµå¼ä¼ č¾“ēš„ę–‡ęœ¬ļ¼ˆē”ØäŗŽåŽ»é‡ļ¼‰ + +**åŽ»é‡ęœŗåˆ¶**: å½“ę£€ęµ‹åˆ° `is_final_response` äŗ‹ä»¶ę—¶ļ¼Œå¦‚ęžœå†…å®¹äøŽåˆšå®Œęˆēš„ęµå¼ä¼ č¾“ē›øåŒļ¼Œåˆ™č·³čæ‡ä»„éæå…é‡å¤ć€‚ + +#### é•æčæč”Œå·„å…· (LRO) 处理 + +```python +async def translate_lro_function_calls(adk_event: ADKEvent) +``` + +äø“é—Øå¤„ē†é•æčæč”Œå·„å…·č°ƒē”Øļ¼š +- 从 `adk_event.long_running_tool_ids` čÆ†åˆ« LRO å·„å…· +- ē«‹å³å‘é€ TOOL_CALL_START/ARGS/END äŗ‹ä»¶ +- 标记为 LROļ¼Œå‰ē«Æč“Ÿč“£ę‰§č”Œ + +### 3. SessionManager + +**ä½ē½®**: `src/ag_ui_adk/session_manager.py` + +SessionManager ę˜Æå•ä¾‹ęØ”å¼ļ¼Œå°č£… ADK ēš„ä¼ščÆęœåŠ”ļ¼Œę·»åŠ ē”Ÿäŗ§ēŗ§åŠŸčƒ½ć€‚ + +#### 核心功能 + +1. **ä¼ščÆē”Ÿå‘½å‘ØęœŸ**: + - `get_or_create_session()`: čŽ·å–ęˆ–åˆ›å»ŗä¼ščÆ + - ä¼ščÆé”®ę ¼å¼: `{app_name}:{session_id}` + - ē”Øęˆ·ä¼ščÆč·ŸčøŖ: `_user_sessions[user_id] -> Set[session_keys]` + +2. **超时箔理**: + - åŸŗäŗŽ `session.last_update_time` ę£€ęµ‹čæ‡ęœŸ + - åŽå°ęø…ē†ä»»åŠ”ļ¼ˆé»˜č®¤ 5 åˆ†é’Ÿé—“éš”ļ¼‰ + - äæē•™ęœ‰ pending tool calls ēš„ä¼ščÆļ¼ˆHITL åœŗę™Æļ¼‰ + +3. **ēŠ¶ę€ē®”ē†**: + - `update_session_state()`: ę›“ę–°ä¼ščÆēŠ¶ę€ļ¼ˆä½æē”Ø ADK EventActions) + - `get_state_value()` / `set_state_value()`: é”®å€¼åÆ¹ę“ä½œ + - `clear_session_state()`: ęø…ē†ēŠ¶ę€ļ¼ˆę”ÆęŒå‰ē¼€äæē•™ļ¼‰ + +4. **消息追踪**: + - `get_processed_message_ids()`: čŽ·å–å·²å¤„ē†ę¶ˆęÆ ID + - `mark_messages_processed()`: ę ‡č®°ę¶ˆęÆäøŗå·²å¤„ē† + - ē”ØäŗŽéæå…é‡å¤å¤„ē†ę¶ˆęÆ + +5. **č‡ŖåŠØč®°åæ†**: + - å¦‚ęžœé…ē½®äŗ† `memory_service`ļ¼Œåˆ é™¤ä¼ščÆå‰č‡ŖåŠØę·»åŠ åˆ°č®°åæ† + +### 4. ClientProxyToolset / ClientProxyTool + +**ä½ē½®**: `src/ag_ui_adk/client_proxy_toolset.py`, `client_proxy_tool.py` + +å®žēŽ°å®¢ęˆ·ē«Æå·„å…·ēš„ä»£ē†ęØ”å¼ć€‚ + +#### ClientProxyToolset + +- åŠØę€åˆ›å»ŗ: ęÆäøŖę‰§č”Œę ¹ę® `RunAgentInput.tools` åˆ›å»ŗ +- å·„å…·åŒ…č£…: 将 AG-UI Tool åŒ…č£…äøŗ `ClientProxyTool` +- äŗ‹ä»¶é˜Ÿåˆ—ę³Øå…„: ęÆäøŖå·„å…·å…±äŗ«åŒäø€äøŖäŗ‹ä»¶é˜Ÿåˆ— + +#### ClientProxyTool + +继承 `BaseTool`ļ¼Œå†…éƒØä½æē”Ø `LongRunningFunctionTool`: + +1. **å‚ę•°å£°ę˜Ž**: `_get_declaration()` 将 AG-UI JSON Schema č½¬ę¢äøŗ ADK `FunctionDeclaration` +2. **ę‰§č”ŒęµēØ‹**: + ```python + async def _execute_proxy_tool(args, tool_context): + # 1. 发送 TOOL_CALL_START + # 2. 发送 TOOL_CALL_ARGS + # 3. 发送 TOOL_CALL_END + # 4. čæ”å›ž None (LRO å·„å…·) + ``` +3. **ID 箔理**: ä¼˜å…ˆä½æē”Ø ADK ē”Ÿęˆēš„ `function_call_id`ļ¼Œå¦åˆ™ē”Ÿęˆ UUID + +### 5. ExecutionState + +**ä½ē½®**: `src/ag_ui_adk/execution_state.py` + +č·ŸčøŖåŽå°ę‰§č”Œēš„å…ƒę•°ę®ļ¼š + +- `task`: asyncio.Task 对豔 +- `thread_id`: 线程标识 +- `event_queue`: äŗ‹ä»¶é˜Ÿåˆ— +- `pending_tool_calls`: å¾…å¤„ē†ēš„å·„å…·č°ƒē”Ø ID(HITL åœŗę™Æļ¼‰ +- `is_complete`: ę‰§č”Œę˜Æå¦å®Œęˆ + +--- + +## ę‰§č”ŒęµēØ‹ + +### 1. ę–°ę‰§č”ŒåÆåŠØęµēØ‹ + +``` +ē”Øęˆ·čÆ·ę±‚ (RunAgentInput) + ↓ +ADKAgent.run() + ↓ +åˆ†ęžęœŖå¤„ē†ę¶ˆęÆ + ↓ +_start_new_execution() + ↓ +发送 RUN_STARTED äŗ‹ä»¶ + ↓ +_start_background_execution() + ↓ +åˆ›å»ŗ Event Queue +准备 Agent (SystemMessage + Tools) +åˆ›å»ŗ Runner + ↓ +后台任劔: _run_adk_in_background() + ↓ +ē”®äæä¼ščÆå­˜åœØ +ę›“ę–°ä¼ščÆēŠ¶ę€ (åŒę­„å‰ē«ÆēŠ¶ę€) +č½¬ę¢ę¶ˆęÆäøŗ ADK ę ¼å¼ + ↓ +runner.run_async() + ↓ +ADK Events → EventTranslator → AG-UI Events → Queue + ↓ +_stream_events() ä»Žé˜Ÿåˆ—čÆ»å–å¹¶ęµå¼č¾“å‡ŗ + ↓ +发送 RUN_FINISHED äŗ‹ä»¶ +``` + +### 2. å·„å…·ē»“ęžœęäŗ¤ęµēØ‹ + +``` +å‰ē«Æå·„å…·ę‰§č”Œå®Œęˆ + ↓ +发送 ToolMessage (role="tool") + ↓ +ADKAgent.run() + ↓ +čÆ†åˆ«äøŗå·„å…·ē»“ęžœę¶ˆęÆ + ↓ +_handle_tool_result_submission() + ↓ +_extract_tool_results() + ↓ +č½¬ę¢äøŗ ADK FunctionResponse + ↓ +_start_new_execution(tool_results=...) + ↓ +_run_adk_in_background() + ↓ +åˆ›å»ŗ Content(role='function', parts=[FunctionResponse]) + ↓ +runner.run_async(new_message=function_response) + ↓ +ADK ē»§ē»­å¤„ē†å·„å…·ē»“ęžœ +``` + +### 3. ę¶ˆęÆę‰¹å¤„ē† + +`run()` ę–¹ę³•å°†ęœŖå¤„ē†ę¶ˆęÆåˆ†ē»„å¤„ē†ļ¼š + +- **å·„å…·ę¶ˆęÆę‰¹**: čæžē»­ēš„å·„å…·ę¶ˆęÆę‰¹é‡ęäŗ¤ +- **ę™®é€šę¶ˆęÆę‰¹**: éžå·„å…·ę¶ˆęÆę‰¹é‡ęäŗ¤ +- **Assistant 消息**: ę ‡č®°äøŗå·²å¤„ē†ļ¼Œäøč§¦å‘ę‰§č”Œ + +--- + +## äŗ‹ä»¶č½¬ę¢ęœŗåˆ¶ + +### ADK äŗ‹ä»¶å±žę€§ + +ADK äŗ‹ä»¶ēš„å…³é”®å±žę€§ļ¼š + +- `partial`: ę˜Æå¦äøŗéƒØåˆ†å“åŗ”ļ¼ˆęµå¼ļ¼‰ +- `turn_complete`: å›žåˆę˜Æå¦å®Œęˆ +- `is_final_response()`: ę˜Æå¦äøŗęœ€ē»ˆå“åŗ” +- `finish_reason`: å®ŒęˆåŽŸå›  +- `long_running_tool_ids`: é•æčæč”Œå·„å…· ID åˆ—č”Ø + +### ę–‡ęœ¬ę¶ˆęÆč½¬ę¢ + +```python +async def _translate_text_content(adk_event, thread_id, run_id): + # 1. ę£€ęŸ„ is_final_response + if is_final_response: + if _is_streaming: + # å…³é—­ę“»č·ƒęµ + yield TEXT_MESSAGE_END + else: + # ę£€ęŸ„åŽ»é‡ + if not is_duplicate: + yield TEXT_MESSAGE_START + yield TEXT_MESSAGE_CONTENT + yield TEXT_MESSAGE_END + return + + # 2. ęµå¼å¤„ē† + if not _is_streaming: + yield TEXT_MESSAGE_START + _is_streaming = True + + yield TEXT_MESSAGE_CONTENT + + if should_send_end: + yield TEXT_MESSAGE_END + _is_streaming = False +``` + +### å·„å…·č°ƒē”Øč½¬ę¢ + +**ę™®é€šå·„å…·**: +``` +FunctionCall → TOOL_CALL_START → TOOL_CALL_ARGS → TOOL_CALL_END +FunctionResponse → TOOL_CALL_RESULT +``` + +**é•æčæč”Œå·„å…·**: +``` +LongRunningFunctionCall → TOOL_CALL_START → TOOL_CALL_ARGS → TOOL_CALL_END +(äøå‘é€ TOOL_CALL_RESULTļ¼Œē”±å‰ē«Æę‰§č”Œ) +``` + +### ēŠ¶ę€č½¬ę¢ + +```python +def _create_state_delta_event(state_delta, thread_id, run_id): + # č½¬ę¢äøŗ JSON Patch (RFC 6902) + patches = [ + {"op": "add", "path": f"/{key}", "value": value} + for key, value in state_delta.items() + ] + return StateDeltaEvent(delta=patches) +``` + +--- + +## ä¼ščÆē®”ē† + +### ä¼ščÆé”®ē»“ęž„ + +``` +session_key = f"{app_name}:{session_id}" +``` + +### ä¼ščÆęŸ„ę‰¾ē¼“å­˜ + +`ADKAgent._session_lookup_cache` ęä¾› O(1) ęŸ„ę‰¾ļ¼š + +```python +_cache[session_id] = {"app_name": str, "user_id": str} +``` + +### č‡ŖåŠØęø…ē†ęœŗåˆ¶ + +```python +async def _cleanup_expired_sessions(): + for session_key in tracked_sessions: + session = await get_session(...) + age = current_time - session.last_update_time + if age > timeout: + pending_calls = session.state.get("pending_tool_calls", []) + if not pending_calls: + await _delete_session(session) +``` + +**äæęŠ¤ęœŗåˆ¶**: ꜉ pending tool calls ēš„ä¼ščÆäøä¼šč¢«ęø…ē†ļ¼ˆHITL åœŗę™Æļ¼‰ć€‚ + +### ē”Øęˆ·ä¼ščÆé™åˆ¶ + +å¦‚ęžœč®¾ē½®äŗ† `max_sessions_per_user`: + +```python +if user_count >= max_sessions_per_user: + await _remove_oldest_user_session(user_id) +``` + +åŸŗäŗŽ `last_update_time` åˆ é™¤ęœ€ę—§ēš„ä¼ščÆć€‚ + +--- + +## å·„å…·ę”ÆęŒ + +### å·„å…·ē±»åž‹ + +1. **åŽē«Æå·„å…·**: ADK Agent ē›“ęŽ„ęä¾›ēš„å·„å…·ļ¼ˆåŒę­„ę‰§č”Œļ¼‰ +2. **å‰ē«Æå·„å…·**: é€ščæ‡ `ClientProxyTool` ä»£ē†ēš„å·„å…·ļ¼ˆé•æčæč”Œļ¼‰ + +### å·„å…·åˆå¹¶ē­–ē•„ + +```python +# 1. čŽ·å– Agent ēŽ°ęœ‰å·„å…· +existing_tools = adk_agent.tools + +# 2. čæ‡ę»¤å‰ē«Æå·„å…·ļ¼ˆéæå…äøŽåŽē«Æå·„å…·å†²ēŖļ¼‰ +input_tools = [ + tool for tool in input.tools + if tool.name not in existing_tool_names + and tool.name != 'transfer_to_agent' # ADK å†…éƒØå·„å…· +] + +# 3. åˆ›å»ŗä»£ē†å·„å…·é›† +proxy_toolset = ClientProxyToolset(input_tools, event_queue) + +# 4. 合并 +combined_tools = existing_tools + [proxy_toolset] +``` + +### å·„å…·ę‰§č”ŒęµēØ‹ + +**å‰ē«Æå·„å…·**: +``` +ADK Agent č°ƒē”Øå·„å…· + ↓ +ClientProxyTool.run_async() + ↓ +发送 TOOL_CALL_START/ARGS/END äŗ‹ä»¶ + ↓ +čæ”å›ž None (LRO) + ↓ +å‰ē«ÆęŽ„ę”¶äŗ‹ä»¶å¹¶ę‰§č”Œ + ↓ +å‰ē«Æå‘é€ ToolMessage + ↓ +ē»§ē»­ę‰§č”Œ +``` + +**åŽē«Æå·„å…·**: +``` +ADK Agent č°ƒē”Øå·„å…· + ↓ +ę‰§č”Œå·„å…·å‡½ę•° + ↓ +čæ”å›žē»“ęžœ + ↓ +ADK ē”Ÿęˆ FunctionResponse + ↓ +EventTranslator č½¬ę¢äøŗ TOOL_CALL_RESULT +``` + +### å·„å…·ē»“ęžœå¤„ē† + +```python +# č§£ęž JSON 内容 +try: + result = json.loads(content) +except json.JSONDecodeError: + result = { + "error": f"Invalid JSON: {str(error)}", + "error_type": "JSON_DECODE_ERROR" + } + +# åˆ›å»ŗ FunctionResponse +function_response = types.FunctionResponse( + id=tool_call_id, + name=tool_name, + response=result +) +``` + +--- + +## ēŠ¶ę€ē®”ē† + +### ēŠ¶ę€åŒę­„ę–¹å‘ + +1. **å‰ē«Æ → åŽē«Æ**: ęÆę¬”ę‰§č”Œå‰ę›“ę–°ä¼ščÆēŠ¶ę€ + ```python + await session_manager.update_session_state( + thread_id, app_name, user_id, input.state + ) + ``` + +2. **åŽē«Æ → å‰ē«Æ**: é€ščæ‡ STATE_DELTA äŗ‹ä»¶ + ```python + if adk_event.actions.state_delta: + yield StateDeltaEvent(delta=json_patch) + ``` + +3. **ęœ€ē»ˆåæ«ē…§**: ę‰§č”Œå®ŒęˆåŽå‘é€ STATE_SNAPSHOT + ```python + final_state = await session_manager.get_session_state(...) + yield StateSnapshotEvent(snapshot=final_state) + ``` + +### National JSON Patch ę ¼å¼ + +ēŠ¶ę€å˜ę›“ä½æē”Ø JSON Patch (RFC 6902): + +```json +[ + {"op": "add", "path": "/key", "value": "value"}, + {"op": "remove", "path": "/old_key"} +] +``` + +### ēŠ¶ę€ę›“ę–°å®žēŽ° + +```python +# 使用 ADK EventActions +actions = EventActions(state_delta=updates) +event = Event( + invocation_id=f"state_update_{timestamp}", + author="system", + actions=actions +) +await session_service.append_event(session, event) +``` + +--- + +## 错误处理 + +### é”™čÆÆē±»åž‹ + +1. **ę‰§č”Œč¶…ę—¶**: `execution.is_stale(timeout)` → `RUN_ERROR` (code: "EXECUTION_TIMEOUT") +2. **å·„å…·ē»“ęžœé”™čÆÆ**: JSON č§£ęžå¤±č“„ → åŒ…å«é”™čÆÆäæ”ęÆēš„ FunctionResponse +3. **编码错误**: EventEncoder 失蓄 → `RUN_ERROR` (code: "ENCODING_ERROR") +4. **åŽå°ę‰§č”Œé”™čÆÆ**: å¼‚åøøę•čŽ· → `RUN_ERROR` (code: "BACKGROUND_EXECUTION_ERROR") + +### 错误传播 + +```python +try: + async for event in agent.run(input): + yield event +except Exception as e: + yield RunErrorEvent( + type=EventType.RUN_ERROR, + message=str(e), + code="AGENT_ERROR" + ) +``` + +### ęø…ē†ęœŗåˆ¶ + +ę‰§č”Œå®ŒęˆåŽęø…ē†ļ¼š + +```python +finally: + if execution.is_complete: + has_pending = await _has_pending_tool_calls(thread_id) + if not has_pending: + del _active_executions[thread_id] +``` + +**HITL äæęŠ¤**: ꜉ pending tool calls ēš„ę‰§č”Œäøä¼šč¢«ęø…ē†ć€‚ + +--- + +## 关键设讔决策 + +### 1. ę‰€ęœ‰å®¢ęˆ·ē«Æå·„å…·éƒ½ę˜Æé•æčæč”Œå·„å…· + +**原因**: ē®€åŒ–ęž¶ęž„ļ¼Œē»Ÿäø€å¤„ē†ęµēØ‹ļ¼Œéæå…åŒę­„ē­‰å¾…ć€‚ + +### 2. åŽå°ę‰§č”Œ + äŗ‹ä»¶é˜Ÿåˆ— + +**原因**: +- ADK ēš„ę‰§č”Œę˜Æé˜»å”žēš„ļ¼Œéœ€č¦åŽå°čæč”Œ +- ęµå¼č¾“å‡ŗéœ€č¦é˜Ÿåˆ—ē¼“å†² +- ę”ÆęŒå¹¶å‘ę‰§č”Œå¤šäøŖčÆ·ę±‚ + +### 3. ä¼ščÆēŠ¶ę€åŒę­„ + +**原因**: +- å‰ē«ÆåÆčƒ½äæ®ę”¹ēŠ¶ę€ļ¼ˆå¦‚ UI ę“ä½œļ¼‰ +- åŽē«Æéœ€č¦ęœ€ę–°ēŠ¶ę€čæ›č”ŒęŽØē† +- åŒå‘åŒę­„äæčÆäø€č‡“ę€§ + +### 4. ę¶ˆęÆåŽ»é‡ + +**原因**: +- ADK åÆčƒ½åŒę—¶å‘é€ęµå¼å—å’Œęœ€ē»ˆå“åŗ” +- éæå…å‰ē«Æé‡å¤ęø²ęŸ“ +- åŸŗäŗŽ run_id 和内容匹配 + +### 5. 单例 SessionManager + +**原因**: +- å…Øå±€ä¼ščÆē®”ē† +- ē»Ÿäø€ēš„ęø…ē†ä»»åŠ” +- č·Ø Agent å®žä¾‹å…±äŗ«ēŠ¶ę€ + +--- + +## ę€§čƒ½č€ƒč™‘ + +### 并发限制 + +```python +max_concurrent_executions = 10 # 默认 +``` + +č¶…čæ‡é™åˆ¶ę—¶ęø…ē†čæ‡ęœŸę‰§č”Œļ¼Œä»ę»”åˆ™ęŠ›å‡ŗå¼‚åøøć€‚ + +### ä¼ščÆęŸ„ę‰¾ä¼˜åŒ– + +- O(1) ē¼“å­˜ęŸ„ę‰¾ (`_session_lookup_cache`) +- å›žé€€åˆ°ēŗæę€§ęœē“¢ļ¼ˆå‘åŽå…¼å®¹ļ¼‰ + +### äŗ‹ä»¶é˜Ÿåˆ—å¤§å° + +使用 `asyncio.Queue`ļ¼Œę— å¤§å°é™åˆ¶ļ¼Œä¾čµ– backpressure ęœŗåˆ¶ć€‚ + +--- + +## 扩展点 + +### č‡Ŗå®šä¹‰ RunConfig + +```python +def custom_run_config(input: RunAgentInput) -> ADKRunConfig: + return ADKRunConfig( + streaming_mode=StreamingMode.SSE, + save_input_blobs_as_artifacts=True, + # č‡Ŗå®šä¹‰é…ē½® + ) + +agent = ADKAgent( + adk_agent=my_agent, + run_config_factory=custom_run_config +) +``` + +### č‡Ŗå®šä¹‰ App/User ęå– + +```python +def extract_app_name(input: RunAgentInput) -> str: + return input.context.get("app_name", "default") + +agent = ADKAgent( + adk_agent=my_agent, + app_name_extractor=extract_app_name +) +``` + +### č‡Ŗå®šä¹‰ęœåŠ” + +```python +from google.adk.sessions import MyCustomSessionService + +agent = ADKAgent( + adk_agent=my_agent, + session_service=MyCustomSessionService(), + use_in_memory_services=False +) +``` + +--- + +## 总结 + +ADK Middleware é€ščæ‡ē²¾åæƒč®¾č®”ēš„äŗ‹ä»¶č½¬ę¢ć€ä¼ščÆē®”ē†å’Œå·„å…·ä»£ē†ęœŗåˆ¶ļ¼Œå®žēŽ°äŗ† Google ADK äøŽ AG-UI Protocol ä¹‹é—“ēš„ę— ē¼ę”„ęŽ„ć€‚ę øåæƒč®¾č®”å›“ē»•å¼‚ę­„ę‰§č”Œć€äŗ‹ä»¶é©±åŠØå’ŒēŠ¶ę€åŒę­„å±•å¼€ļ¼Œē”®äæé«˜å¹¶å‘ć€ä½Žå»¶čæŸēš„ę™ŗčƒ½ä½“äŗ¤äŗ’ä½“éŖŒć€‚ + diff --git a/integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md b/integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md new file mode 100644 index 000000000..fc0de1b24 --- /dev/null +++ b/integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md @@ -0,0 +1,317 @@ +# Claude Agent SDK é›†ęˆå®žēŽ°č®”åˆ’ + +## 概述 + +ęœ¬ę–‡ę”£ęčæ°äŗ† Claude Agent SDK äøŽ AG-UI Protocol é›†ęˆēš„å®žēŽ°č®”åˆ’ć€‚čÆ„é›†ęˆå°† Claude Agent SDK ēš„ę‰§č”ŒęØ”åž‹č½¬ę¢äøŗ AG-UI ę ‡å‡†äŗ‹ä»¶ęµļ¼Œę”ÆęŒå·„å…·č°ƒē”Øć€ä¼ščÆē®”ē†å’Œęµå¼å“åŗ”ć€‚ + +## é”¹ē›®ēŠ¶ę€ + +āœ… **已完成**: +- é”¹ē›®ē›®å½•ē»“ęž„åˆ›å»ŗ +- ę øåæƒē»„ä»¶å®žēŽ°ļ¼ˆClaudeAgent, EventTranslator, SessionManager, ToolAdapter) +- FastAPI ē«Æē‚¹é›†ęˆ +- ē¤ŗä¾‹ä»£ē å’Œę–‡ę”£ +- **ęµ‹čÆ•ę”†ęž¶ę­å»ŗ**(pytest.ini, conftest.py) +- **å•å…ƒęµ‹čÆ•å®žēŽ°**(72 个测试用例) +- **é›†ęˆęµ‹čÆ•å®žēŽ°**(8 äøŖé›†ęˆęµ‹čÆ•ē”Øä¾‹ļ¼‰ +- **ęµ‹čÆ•ę‰§č”ŒéŖŒčÆ**(72/72 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… +- **ēœŸå®ž API ęµ‹čÆ•ę”ÆęŒ**ļ¼ˆę”ÆęŒ ANTHROPIC_AUTH_TOKEN/BASE_URL) +- **ę‰€ęœ‰ęµ‹čÆ•äæ®å¤å®Œęˆ**(72/72 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… + +āœ… **å·²äæ®å¤**: +- āœ… SessionManager ē¼ŗå¤±č¾…åŠ©ę–¹ę³•ļ¼ˆå·²å…ØéƒØę·»åŠ ļ¼‰ +- āœ… EventTranslator Mock åÆ¹č±”ē±»åž‹ę£€ęŸ„ļ¼ˆå·²äæ®å¤ļ¼‰ +- āœ… é›†ęˆęµ‹čÆ• Mock ē­–ē•„ä¼˜åŒ–ļ¼ˆå·²äæ®å¤ļ¼‰ +- āœ… ClaudeAgent ē¼ŗå¤±ę–¹ę³•ļ¼ˆå·²ę·»åŠ ļ¼‰ +- āœ… ę¶ˆęÆå¤„ē†é€»č¾‘ä¼˜åŒ–ļ¼ˆå·²äæ®å¤ļ¼‰ + +āœ… **å·²ę ¹ę®å®žé™… API č°ƒę•“**: +- Claude SDK å®¢ęˆ·ē«Æåˆå§‹åŒ–ļ¼ˆ`claude_agent.py::_get_claude_client()`) +- Claude SDK č°ƒē”Øę–¹ę³•ļ¼ˆ`claude_agent.py::_call_claude_sdk()`) +- å·„å…·ę ¼å¼č½¬ę¢ļ¼ˆ`tool_adapter.py`)- ęµ‹čÆ•å…ØéƒØé€ščæ‡ +- äŗ‹ä»¶č½¬ę¢é€»č¾‘ļ¼ˆ`event_translator.py`)- ę øåæƒåŠŸčƒ½é€ščæ‡ + +## é”¹ē›®ē»“ęž„ + +``` +integrations/claude-agent-sdk/ +ā”œā”€ā”€ python/ +│ ā”œā”€ā”€ src/ +│ │ └── ag_ui_claude/ +│ │ ā”œā”€ā”€ __init__.py +│ │ ā”œā”€ā”€ claude_agent.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“ SDK č°ƒē”Øļ¼‰ +│ │ ā”œā”€ā”€ event_translator.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“å“åŗ”ę ¼å¼ļ¼‰ +│ │ ā”œā”€ā”€ session_manager.py āœ… 已完成 +│ │ ā”œā”€ā”€ tool_adapter.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“å·„å…·ę ¼å¼ļ¼‰ +│ │ ā”œā”€ā”€ endpoint.py āœ… 已完成 +│ │ ā”œā”€ā”€ execution_state.py āœ… 已完成 +│ │ └── utils/ +│ │ ā”œā”€ā”€ __init__.py +│ │ └── converters.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“ę¶ˆęÆę ¼å¼ļ¼‰ +│ ā”œā”€ā”€ examples/ +│ │ ā”œā”€ā”€ pyproject.toml +│ │ ā”œā”€ā”€ README.md +│ │ └── server/ +│ │ └── fastapi_server.py āœ… 已完成 +│ ā”œā”€ā”€ tests/ āœ… 已完成(72 个测试用例) +│ │ ā”œā”€ā”€ __init__.py +│ │ ā”œā”€ā”€ conftest.py āœ… ęµ‹čÆ•č¾…åŠ©ęØ”å— +│ │ ā”œā”€ā”€ test_claude_agent.py āœ… 17 äøŖē”Øä¾‹ļ¼Œ17 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_event_translator.py āœ… 14 äøŖē”Øä¾‹ļ¼Œ14 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_session_manager.py āœ… 16 äøŖē”Øä¾‹ļ¼Œ16 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_tool_adapter.py āœ… 9 äøŖē”Øä¾‹ļ¼Œ9 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_endpoint.py āœ… 6 äøŖē”Øä¾‹ļ¼Œ6 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_integration_basic.py āœ… 3 äøŖē”Øä¾‹ļ¼Œ3 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_integration_tools.py āœ… 2 äøŖē”Øä¾‹ļ¼Œ2 é€ščæ‡ āœ… +│ │ ā”œā”€ā”€ test_integration_sessions.py āœ… 3 äøŖē”Øä¾‹ļ¼Œ3 é€ščæ‡ āœ… +│ │ └── test_real_api.py āœ… 2 äøŖē”Øä¾‹ļ¼Œ2 é€ščæ‡ āœ…ļ¼ˆę”ÆęŒ AUTH_TOKEN/BASE_URL) +│ ā”œā”€ā”€ pytest.ini āœ… pytest é…ē½® +│ ā”œā”€ā”€ pyproject.toml āœ… 已完成 +│ ā”œā”€ā”€ README.md āœ… 已完成 +│ ā”œā”€ā”€ ARCHITECTURE.md āœ… 已完成 +│ ā”œā”€ā”€ CONFIGURATION.md āœ… 已完成 +│ └── IMPLEMENTATION_STATUS.md āœ… 已曓新 +└── IMPLEMENTATION_PLAN.md āœ… ęœ¬ę–‡ę”£ +``` + +## å…³é”®å®žēŽ°č¦ē‚¹ + +### 1. ClaudeAgent 主类 + +**ä½ē½®**: `src/ag_ui_claude/claude_agent.py` + +**已完成功能**: +- āœ… åˆå§‹åŒ–é…ē½® +- āœ… `run()` ę–¹ę³•å®žēŽ° +- āœ… ę¶ˆęÆč·Æē”±å’Œå¤„ē† +- āœ… ä¼ščÆē®”ē†é›†ęˆ +- āœ… åŽå°ę‰§č”Œå’Œäŗ‹ä»¶é˜Ÿåˆ—ē®”ē† +- āœ… 错误处理 +- āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š17/17(100%ļ¼‰āœ… + +### 2. EventTranslator + +**ä½ē½®**: `src/ag_ui_claude/event_translator.py` + +**已完成功能**: +- āœ… åŸŗē”€äŗ‹ä»¶č½¬ę¢ę”†ęž¶ +- āœ… ęµå¼ę–‡ęœ¬å¤„ē†é€»č¾‘ +- āœ… å·„å…·č°ƒē”Øč½¬ę¢ę”†ęž¶ +- āœ… ēŠ¶ę€č½¬ę¢ę”ÆęŒ +- āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š14/14(100%ļ¼‰āœ… + +### 3. SessionManager + +**ä½ē½®**: `src/ag_ui_claude/session_manager.py` + +**ēŠ¶ę€**: āœ… 已完成 + +**功能**: +- ä¼ščÆē”Ÿå‘½å‘ØęœŸē®”ē† āœ… +- ę¶ˆęÆåŽ»é‡č·ŸčøŖ āœ… +- ēŠ¶ę€ē®”ē† āœ…ļ¼ˆå®Œę•“åŠŸčƒ½ļ¼‰ +- č‡ŖåŠØęø…ē†ęœŗåˆ¶ āœ… +- č¾…åŠ©ę–¹ę³• āœ…ļ¼ˆå…ØéƒØę·»åŠ ļ¼‰ +- ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š16/16(100%ļ¼‰āœ… + +### 4. ToolAdapter + +**ä½ē½®**: `src/ag_ui_claude/tool_adapter.py` + +**已完成功能**: +- āœ… AG-UI Tool 到 Claude SDK ę ¼å¼č½¬ę¢ę”†ęž¶ +- āœ… å·„å…·č°ƒē”Øęå–ę–¹ę³• +- āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š9/9(100%ļ¼‰āœ… + +**ēŠ¶ę€**: āœ… å·²å®Œęˆļ¼Œęµ‹čÆ•å…ØéƒØé€ščæ‡ + +### 5. Converters + +**ä½ē½®**: `src/ag_ui_claude/utils/converters.py` + +**已完成功能**: +- āœ… AG-UI 消息到 Claude ę ¼å¼č½¬ę¢ę”†ęž¶ +- āœ… Claude 消息到 AG-UI ę ¼å¼č½¬ę¢ę”†ęž¶ +- āœ… ēŠ¶ę€č½¬ę¢ę”ÆęŒ + +**éœ€č¦č°ƒę•“**: +- āš ļø `convert_ag_ui_messages_to_claude()`: ę ¹ę®å®žé™…ę¶ˆęÆę ¼å¼č°ƒę•“ +- āš ļø `convert_claude_message_to_ag_ui()`: ę ¹ę®å®žé™…å“åŗ”ę ¼å¼č°ƒę•“ + +## äø‹äø€ę­„č”ŒåŠØ + +### āœ… 1. 甮认 Claude Agent SDK API - 已完成 + +å‚č€ƒę–‡ę”£: https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient + +已甮认: +- āœ… SDK 包名: `claude-agent-sdk` +- āœ… å®¢ęˆ·ē«Æåˆå§‹åŒ–: `ClaudeSDKClient(options=ClaudeAgentOptions())` ꈖ `query()` 函数 +- āœ… ä¼ščÆē®”ē†: `ClaudeSDKClient` ē”ØäŗŽęŒä¹…ä¼ščÆļ¼Œ`query()` ē”ØäŗŽę— ēŠ¶ę€ęØ”å¼ +- āœ… ę¶ˆęÆę ¼å¼: `Message` ē±»åž‹ļ¼ˆ`AssistantMessage`, `UserMessage`, `SystemMessage`, `ResultMessage`) +- āœ… å†…å®¹å—ę ¼å¼: `ContentBlock` ē±»åž‹ļ¼ˆ`TextBlock`, `ToolUseBlock`, `ToolResultBlock`, `ThinkingBlock`) +- āœ… å·„å…·å®šä¹‰ę ¼å¼: `SdkMcpTool` 和 `create_sdk_mcp_server()` +- āœ… ęµå¼å“åŗ”: `client.receive_response()` ꈖ `query()` čæ”å›ž `AsyncIterator[Message]` +- āœ… å·„å…·č°ƒē”Øę ¼å¼: `ToolUseBlock` (id, name, input) +- āœ… å·„å…·ē»“ęžœę ¼å¼: `ToolResultBlock` (tool_use_id, content, is_error) + +### āœ… 2. č°ƒę•“å®žēŽ°ä»£ē  - 已完成 + +已曓新仄下文件: + +1. **claude_agent.py**: āœ… + - āœ… å®žēŽ° `_get_claude_client()` ę–¹ę³•ļ¼ˆę”ÆęŒęŒä¹…ä¼ščÆå’Œę— ēŠ¶ę€ęØ”å¼ļ¼‰ + - āœ… å®žēŽ° `_call_claude_sdk()` ę–¹ę³•ļ¼ˆå¤„ē†äø¤ē§ęØ”å¼ļ¼‰ + - āœ… å®žēŽ° `_extract_user_prompt()` ę–¹ę³•ļ¼ˆęå–ē”Øęˆ·ęē¤ŗļ¼‰ + - āœ… å®žēŽ° `_prepare_request_options()` ę–¹ę³•ļ¼ˆåŠØę€å·„å…·é…ē½®ļ¼‰ + - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š11/17(65%) + +2. **event_translator.py**: āœ… + - āœ… å®žēŽ° `translate_claude_message()` ę–¹ę³•ļ¼ˆå¤„ē† Message ē±»åž‹ļ¼‰ + - āœ… å®žēŽ° `_translate_assistant_message()` ę–¹ę³•ļ¼ˆå¤„ē†å†…å®¹å—ļ¼‰ + - āœ… å®žēŽ° `_translate_text_block()` ę–¹ę³•ļ¼ˆęµå¼ę–‡ęœ¬å¤„ē†ļ¼‰ + - āœ… å®žēŽ° `_translate_tool_use_block()` ę–¹ę³•ļ¼ˆå·„å…·č°ƒē”Øč½¬ę¢ļ¼‰ + - āœ… å®žēŽ° `_translate_tool_result_block()` ę–¹ę³•ļ¼ˆå·„å…·ē»“ęžœč½¬ę¢ļ¼‰ + - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š8/14(57%ļ¼‰ļ¼Œéœ€č¦äæ®å¤ Mock ē±»åž‹ę£€ęŸ„ + +3. **tool_adapter.py**: āœ… + - āœ… ę›“ę–°å·„å…·ę ¼å¼č½¬ę¢ļ¼ˆAG-UI Tool → SdkMcpTool) + - āœ… å®žēŽ° `create_mcp_server_for_tools()` 方法 + - āœ… ę›“ę–°å·„å…·č°ƒē”Øęå–ę–¹ę³•ļ¼ˆåŸŗäŗŽ ToolUseBlock) + - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š9/9(100%) + +4. **session_manager.py**: āœ… + - āœ… åŸŗē”€ä¼ščÆē®”ē†åŠŸčƒ½å®Œę•“ + - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š8/16(50%ļ¼‰ļ¼Œéœ€č¦ę·»åŠ č¾…åŠ©ę–¹ę³• + +5. **utils/converters.py**: āœ… + - āœ… å·²å®žēŽ°åŸŗē”€ę¶ˆęÆč½¬ę¢ę”†ęž¶ + +### āœ… 3. å®žēŽ°ęµ‹čÆ• - 已完成 + +āœ… å·²åˆ›å»ŗęµ‹čÆ•ę–‡ä»¶: +- `tests/test_claude_agent.py`: Agent ę‰§č”ŒęµēØ‹ęµ‹čÆ•ļ¼ˆ17 äøŖē”Øä¾‹ļ¼Œ17/17 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_event_translator.py`: äŗ‹ä»¶č½¬ę¢ęµ‹čÆ•ļ¼ˆ14 äøŖē”Øä¾‹ļ¼Œ14/14 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_session_manager.py`: ä¼ščÆē®”ē†ęµ‹čÆ•ļ¼ˆ16 äøŖē”Øä¾‹ļ¼Œ16/16 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_tool_adapter.py`: å·„å…·é€‚é…ęµ‹čÆ•ļ¼ˆ9 äøŖē”Øä¾‹ļ¼Œ9/9 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_endpoint.py`: FastAPI ē«Æē‚¹ęµ‹čÆ•ļ¼ˆ6 äøŖē”Øä¾‹ļ¼Œ6/6 é€ščæ‡ āœ…ļ¼‰ + +### āœ… 4. é›†ęˆęµ‹čÆ• - 已完成 + +āœ… å·²åˆ›å»ŗé›†ęˆęµ‹čÆ•ę–‡ä»¶: +- `tests/test_integration_basic.py`: åŸŗęœ¬åÆ¹čÆęµēØ‹ęµ‹čÆ•ļ¼ˆ3 äøŖē”Øä¾‹ļ¼Œ3/3 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_integration_tools.py`: å·„å…·č°ƒē”Øęµ‹čÆ•ļ¼ˆ2 äøŖē”Øä¾‹ļ¼Œ2/2 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_integration_sessions.py`: ä¼ščÆē®”ē†ęµ‹čÆ•ļ¼ˆ3 äøŖē”Øä¾‹ļ¼Œ3/3 é€ščæ‡ āœ…ļ¼‰ +- `tests/test_real_api.py`: ēœŸå®ž API ęµ‹čÆ•ļ¼ˆ2 äøŖē”Øä¾‹ļ¼Œ2/2 é€ščæ‡ āœ…ļ¼‰ + - āœ… ę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL` 认证 + - āœ… ę”ÆęŒ `ANTHROPIC_API_KEY` ä½œäøŗåŽå¤‡č®¤čÆę–¹å¼ + +### āœ… 5. ęµ‹čÆ•äæ®å¤å’Œä¼˜åŒ– - 已完成 + +å·²äæ®å¤ēš„é—®é¢˜: +1. **SessionManager č¾…åŠ©ę–¹ę³•**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… ę·»åŠ äŗ† `get_state_value()`, `set_state_value()`, `remove_state_keys()` + - āœ… ę·»åŠ äŗ† `get_session_count()`, `get_user_session_count()` + - āœ… ę·»åŠ äŗ† `clear_session_state()` 方法 + +2. **EventTranslator Mock ē±»åž‹ę£€ęŸ„**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… 将 `isinstance()` 改为 `hasattr()` ę£€ęŸ„ + - āœ… äæ®å¤äŗ† Mock åÆ¹č±”ēš„ē±»åž‹ęØ”ę‹Ÿ + - āœ… ę”¹čæ›äŗ†å†…å®¹å—ē±»åž‹čÆ†åˆ«é€»č¾‘ + +3. **é›†ęˆęµ‹čÆ• Mock ē­–ē•„**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… ę”¹čæ›äŗ†å¼‚ę­„ē”Ÿęˆå™Øēš„ Mock + - āœ… äæ®å¤äŗ† Mock åÆ¹č±”ēš„ē±»åž‹ę£€ęŸ„ + - āœ… ē§»é™¤äŗ†ę‰€ęœ‰ `__class__` čµ‹å€¼é—®é¢˜ + +4. **ClaudeAgent 缺失方法**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… ę·»åŠ äŗ† `_is_tool_result_submission()` 方法 + +5. **ę¶ˆęÆå¤„ē†é€»č¾‘**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… äæ®å¤äŗ†ę¶ˆęÆåŽ»é‡é€»č¾‘ + - āœ… äæ®å¤äŗ†å®¢ęˆ·ē«Æé‡ē”Øé€»č¾‘ + +## 锹目进度时闓线 + +### 阶ꮵ 1: ę øåæƒå®žēŽ° āœ… (已完成) +- āœ… é”¹ē›®ē»“ęž„åˆ›å»ŗ +- āœ… ę øåæƒē»„ä»¶å®žēŽ° +- āœ… FastAPI 集ꈐ +- āœ… 文攣编写 + +### 阶ꮵ 2: API 适配 āœ… (已完成) +- āœ… Claude SDK API 研究 +- āœ… å®žēŽ°ä»£ē č°ƒę•“ +- āœ… å·„å…·ę ¼å¼č½¬ę¢ +- āœ… äŗ‹ä»¶č½¬ę¢é€»č¾‘ + +### 阶ꮵ 3: ęµ‹čÆ•å®žę–½ āœ… (已完成) +- āœ… ęµ‹čÆ•ę”†ęž¶ę­å»ŗ +- āœ… å•å…ƒęµ‹čÆ•ē¼–å†™ļ¼ˆ72 个用例) +- āœ… é›†ęˆęµ‹čÆ•ē¼–å†™ļ¼ˆ8 个用例) +- āœ… ęµ‹čÆ•ę‰§č”ŒéŖŒčÆļ¼ˆ47/72 é€ščæ‡ļ¼Œ65%) + +### 阶ꮵ 4: ęµ‹čÆ•äæ®å¤ āœ… (已完成) +- āœ… SessionManager č¾…åŠ©ę–¹ę³•ę·»åŠ  +- āœ… EventTranslator Mock äæ®å¤ +- āœ… é›†ęˆęµ‹čÆ•ä¼˜åŒ– +- āœ… ClaudeAgent ē¼ŗå¤±ę–¹ę³•ę·»åŠ  +- āœ… ę¶ˆęÆå¤„ē†é€»č¾‘ä¼˜åŒ– + +### 阶ꮵ 5: ä¼˜åŒ–å’Œå‘åøƒ ā³ (待开始) +- ā³ é”™čÆÆå¤„ē†å®Œå–„ +- ā³ ę€§čƒ½ä¼˜åŒ– +- ā³ ę–‡ę”£å®Œå–„ +- ā³ å‘åøƒå‡†å¤‡ + +## å‚č€ƒå®žēŽ° + +ęœ¬é”¹ē›®å‚č€ƒäŗ†ä»„äø‹å®žēŽ°: +- **ADK Middleware**: `integrations/adk-middleware/python/` +- **LangGraph Integration**: `integrations/langgraph/python/` + +## 文攣 + +- [README.md](./python/README.md): åæ«é€Ÿå¼€å§‹ęŒ‡å— +- [ARCHITECTURE.md](./python/ARCHITECTURE.md): ęž¶ęž„č®¾č®”ę–‡ę”£ +- [CONFIGURATION.md](./python/CONFIGURATION.md): é…ē½®é€‰é”¹ę–‡ę”£ +- [USAGE_GUIDE.md](./python/USAGE_GUIDE.md): čÆ¦ē»†ä½æē”ØęŒ‡å—ļ¼ˆå¦‚ä½•åÆåŠØå’Œęµ‹čÆ• agent) + +## ę³Øę„äŗ‹é”¹ + +1. **API 兼容性**: 实际 Claude Agent SDK API åÆčƒ½äøŽęØ”ęæå®žēŽ°äøåŒļ¼Œéœ€č¦ę ¹ę®ę–‡ę”£č°ƒę•“ +2. **错误处理**: ē”®äæę‰€ęœ‰é”™čÆÆč·Æå¾„éƒ½ęœ‰é€‚å½“ēš„å¤„ē†å’Œé”™čÆÆäŗ‹ä»¶ē”Ÿęˆ +3. **ę€§čƒ½ä¼˜åŒ–**: ę³Øę„å¹¶å‘é™åˆ¶ć€ä¼ščÆęø…ē†ē­‰ę€§čƒ½ē›øå…³é…ē½® +4. **向后兼容**: å¦‚ęžœ SDK API å˜ę›“ļ¼Œéœ€č¦č€ƒč™‘ē‰ˆęœ¬é€‚é… + +## 总结 + +āœ… **ę øåæƒå®žēŽ°å·²å®Œęˆ**: ę ¹ę® [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient) å®Œęˆäŗ†ę‰€ęœ‰ę øåæƒåŠŸčƒ½ēš„å®žēŽ°ļ¼š + +1. āœ… SDK 集ꈐ: `ClaudeSDKClient` 和 `query()` å‡½ę•°ę”ÆęŒ +2. āœ… ę¶ˆęÆå¤„ē†: å®Œę•“ēš„ Message ē±»åž‹å’Œ ContentBlock 处理 +3. āœ… å·„å…·ę”ÆęŒ: MCP ęœåŠ”å™Øåˆ›å»ŗå’Œå·„å…·ę³Øå†Œļ¼ˆęµ‹čÆ• 100% é€ščæ‡ļ¼‰ +4. āœ… äŗ‹ä»¶č½¬ę¢: AG-UI åč®®äŗ‹ä»¶č½¬ę¢ļ¼ˆę øåæƒåŠŸčƒ½é€ščæ‡ļ¼‰ +5. āœ… ä¼ščÆē®”ē†: ęŒä¹…ä¼ščÆå’Œę— ēŠ¶ę€ęØ”å¼ę”ÆęŒļ¼ˆåŸŗē”€åŠŸčƒ½é€ščæ‡ļ¼‰ +6. āœ… ęµ‹čÆ•ę”†ęž¶: å®Œę•“ēš„ęµ‹čÆ•å„—ä»¶ļ¼ˆ72 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼Œ65% é€ščæ‡ēŽ‡ļ¼‰ + +### å½“å‰ēŠ¶ę€ + +- **ä»£ē å®žēŽ°**: āœ… 完成 +- **ęµ‹čÆ•ę”†ęž¶**: āœ… 完成 +- **å•å…ƒęµ‹čÆ•**: āœ… 完成(72/72 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… +- **é›†ęˆęµ‹čÆ•**: āœ… 完成(8/8 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… +- **ä»£ē č“Øé‡**: āœ… ä¼˜ē§€ļ¼ˆę‰€ęœ‰ęµ‹čÆ•é€ščæ‡ļ¼‰ + +### äø‹äø€ę­„ä¼˜å…ˆäŗ‹é”¹ + +1. āœ… ~~添加 SessionManager ē¼ŗå¤±ēš„č¾…åŠ©ę–¹ę³•~~ - 已完成 +2. āœ… ~~äæ®å¤ EventTranslator ēš„ Mock ē±»åž‹ę£€ęŸ„~~ - 已完成 +3. āœ… ~~ä¼˜åŒ–é›†ęˆęµ‹čÆ•ēš„ Mock ē­–ē•„~~ - 已完成 +4. āœ… ~~čæč”Œå®Œę•“ęµ‹čÆ•å„—ä»¶éŖŒčÆäæ®å¤~~ - 已完成(72/72 é€ščæ‡ļ¼‰ +5. ā³ ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē†åœŗę™Æ +6. ā³ ę€§čƒ½ä¼˜åŒ–å’Œčµ„ęŗä½æē”Øä¼˜åŒ– +7. ā³ ę·»åŠ ę›“å¤šé›†ęˆęµ‹čÆ•åœŗę™Æ + +å®žēŽ°å·²åŸŗäŗŽå®žé™…ēš„ Claude Agent SDK APIļ¼Œę‰€ęœ‰ę øåæƒåŠŸčƒ½å·²éŖŒčÆåÆē”Øļ¼Œę‰€ęœ‰ęµ‹čÆ•å·²é€ščæ‡ć€‚é”¹ē›®å·²å‡†å¤‡å„½čæ›č”Œę€§čƒ½ä¼˜åŒ–å’Œčæ›äø€ę­„ēš„åŠŸčƒ½ę‰©å±•ć€‚ + diff --git a/integrations/claude-agent-sdk/python/.env.local b/integrations/claude-agent-sdk/python/.env.local new file mode 100644 index 000000000..1849bdf1e --- /dev/null +++ b/integrations/claude-agent-sdk/python/.env.local @@ -0,0 +1,17 @@ +# Claude Agent SDK Integration - Environment Variables +# Copy this file to .env.local and fill in your actual values + +# Anthropic API Key (required for real API tests) +# Get your API key from: https://console.anthropic.com/ +# ANTHROPIC_API_KEY=your-anthropic-api-key-here + +ANTHROPIC_AUTH_TOKEN=sk-3bf9c6e925614b1e869ccdcd84e7cc65 +ANTHROPIC_BASE_URL=https://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy + +# Optional: Override default Claude SDK options +# CLAUDE_SYSTEM_PROMPT=You are a helpful assistant +# CLAUDE_PERMISSION_MODE=acceptEdits + +# Optional: Test configuration +# TEST_TIMEOUT_SECONDS=60 +# TEST_MAX_CONCURRENT=5 diff --git a/integrations/claude-agent-sdk/python/.env.local.example b/integrations/claude-agent-sdk/python/.env.local.example new file mode 100644 index 000000000..a3483f5e3 --- /dev/null +++ b/integrations/claude-agent-sdk/python/.env.local.example @@ -0,0 +1,14 @@ +# Claude Agent SDK Integration - Environment Variables +# Copy this file to .env.local and fill in your actual values + +# Anthropic API Key (required for real API tests) +# Get your API key from: https://console.anthropic.com/ +ANTHROPIC_API_KEY=your-anthropic-api-key-here + +# Optional: Override default Claude SDK options +# CLAUDE_SYSTEM_PROMPT=You are a helpful assistant +# CLAUDE_PERMISSION_MODE=acceptEdits + +# Optional: Test configuration +# TEST_TIMEOUT_SECONDS=60 +# TEST_MAX_CONCURRENT=5 diff --git a/integrations/claude-agent-sdk/python/ARCHITECTURE.md b/integrations/claude-agent-sdk/python/ARCHITECTURE.md new file mode 100644 index 000000000..1281ee31e --- /dev/null +++ b/integrations/claude-agent-sdk/python/ARCHITECTURE.md @@ -0,0 +1,113 @@ +# Claude Agent SDK Integration Architecture + +This document describes the architecture and design of the Claude Agent SDK integration that bridges Claude agents with the AG-UI Protocol. + +## High-Level Architecture + +``` +AG-UI Protocol Claude Middleware Claude Agent SDK + │ │ │ +RunAgentInput ──────> ClaudeAgent.run() ──────> SDK Client/Query + │ │ │ + │ EventTranslator │ + │ │ │ +BaseEvent[] <──────── translate events <──────── Response[] +``` + +## Core Components + +### ClaudeAgent (`claude_agent.py`) +The main orchestrator that: +- Manages agent lifecycle and session state +- Handles the bridge between AG-UI Protocol and Claude SDK +- Coordinates tool execution +- Supports both persistent sessions and stateless query mode + +### EventTranslator (`event_translator.py`) +Converts between event formats: +- Claude SDK responses → AG-UI protocol events (16 standard event types) +- Maintains proper message boundaries +- Handles streaming text content +- Per-execution instances for thread safety + +### SessionManager (`session_manager.py`) +Singleton pattern for centralized session control: +- Automatic session cleanup with configurable timeouts +- Session isolation per user +- Message tracking to avoid duplicates +- State management + +### ToolAdapter (`tool_adapter.py`) +Tool format conversion: +- AG-UI Tool → Claude SDK tool format +- Tool call extraction and parsing +- Long-running tool detection + +### ExecutionState (`execution_state.py`) +Tracks background Claude executions: +- Manages asyncio tasks running Claude SDK calls +- Event queue for streaming results +- Execution timing and completion tracking +- Tool call state management + +## Event Flow + +1. **Client Request**: AG-UI Protocol `RunAgentInput` received +2. **Session Resolution**: SessionManager finds or creates session +3. **Message Processing**: Unseen messages identified and processed +4. **Agent Execution**: Claude SDK called with messages and tools +5. **Event Translation**: Claude responses converted to AG-UI events +6. **Streaming Response**: Events streamed back via SSE or other transport + +## Key Design Patterns + +### Session Management +- **Persistent Mode**: Uses ClaudeSDKClient for session continuity +- **Stateless Mode**: Uses query() method with manual context management + +### Tool Handling +- **Client Tools**: Long-running tools executed on frontend +- **Backend Tools**: Synchronous tools executed on backend +- **Tool Results**: Handled through message routing + +### Event Streaming +- Background execution with event queue +- Non-blocking async/await throughout +- Proper cleanup on errors or timeouts + +## Thread Safety + +- Per-execution EventTranslator instances +- Singleton SessionManager with proper locking +- Isolated execution states per thread +- Thread-safe event queues + +## Error Handling + +- RunErrorEvent for various failure scenarios +- Proper async exception handling +- Resource cleanup on errors +- Timeout management at multiple levels + +## Performance Considerations + +- Async/await throughout for non-blocking operations +- Event streaming for real-time responses +- Configurable concurrent execution limits +- Automatic stale execution cleanup +- Efficient event queue management + +## Implementation Notes + +āœ… **Implementation Complete**: The implementation has been updated based on the actual [Claude Agent SDK API](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient). + +Key implementation details: + +1. **SDK Initialization**: āœ… Implemented `_get_claude_client()` with `ClaudeSDKClient` and `query()` support +2. **Message Format**: āœ… Implemented prompt extraction (`_extract_user_prompt()`) for Claude SDK string-based API +3. **Response Handling**: āœ… Implemented `_call_claude_sdk()` supporting both persistent and stateless modes +4. **Tool Format**: āœ… Implemented `ToolAdapter` with `SdkMcpTool` and `create_sdk_mcp_server()` +5. **Event Translation**: āœ… Implemented `EventTranslator` handling `Message`, `AssistantMessage`, `TextBlock`, `ToolUseBlock`, `ToolResultBlock` + +The implementation follows the actual Claude Agent SDK patterns and should work with the real SDK. Some fine-tuning may be needed based on real-world testing. + diff --git a/integrations/claude-agent-sdk/python/CONFIGURATION.md b/integrations/claude-agent-sdk/python/CONFIGURATION.md new file mode 100644 index 000000000..4b0aa7dc8 --- /dev/null +++ b/integrations/claude-agent-sdk/python/CONFIGURATION.md @@ -0,0 +1,275 @@ +# Configuration Guide + +This document describes configuration options for the Claude Agent SDK integration. + +## ClaudeAgent Configuration + +### Basic Configuration + +```python +from ag_ui_claude import ClaudeAgent +from claude_agent_sdk import ClaudeAgentOptions + +# Simple configuration +agent = ClaudeAgent( + app_name="my_app", + use_persistent_sessions=True # Use ClaudeSDKClient +) + +# With ClaudeAgentOptions +agent = ClaudeAgent( + app_name="my_app", + use_persistent_sessions=True, + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant", + permission_mode='acceptEdits', + cwd="/path/to/workspace" + ) +) +``` + +**Note**: The `api_key` parameter is optional. Claude Agent SDK uses `ANTHROPIC_API_KEY` environment variable by default. + +### Session Mode + +**Persistent Sessions** (Recommended for multi-turn conversations): +```python +agent = ClaudeAgent( + api_key="your-api-key", + use_persistent_sessions=True, # Use ClaudeSDKClient + app_name="my_app" +) +``` + +**Stateless Mode** (For simple queries): +```python +agent = ClaudeAgent( + api_key="your-api-key", + use_persistent_sessions=False, # Use query() method + app_name="my_app" +) +``` + +### Dynamic App/User Identification + +```python +def extract_app_name(input: RunAgentInput) -> str: + return input.context.get("app_name", "default") + +def extract_user_id(input: RunAgentInput) -> str: + return input.forwarded_props.get("user_id", "anonymous") + +agent = ClaudeAgent( + api_key="your-api-key", + app_name_extractor=extract_app_name, + user_id_extractor=extract_user_id +) +``` + +### Timeout Configuration + +```python +agent = ClaudeAgent( + api_key="your-api-key", + execution_timeout_seconds=600, # 10 minutes (default) + tool_timeout_seconds=300, # 5 minutes (default) + session_timeout_seconds=1200, # 20 minutes (default) + cleanup_interval_seconds=300 # 5 minutes (default) +) +``` + +### Concurrency Limits + +```python +agent = ClaudeAgent( + api_key="your-api-key", + max_concurrent_executions=10 # Default: 10 +) +``` + +### Additional Claude SDK Options + +```python +from claude_agent_sdk import ClaudeAgentOptions + +# Configure via ClaudeAgentOptions +options = ClaudeAgentOptions( + system_prompt="You are an expert Python developer", + permission_mode='acceptEdits', + allowed_tools=["Read", "Write", "Bash"], + cwd="/home/user/project", + # ... other options +) + +agent = ClaudeAgent( + app_name="my_app", + claude_options=options +) +``` + +See the [Claude Agent SDK documentation](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudeagentoptions) for all available options. + +## FastAPI Endpoint Configuration + +### Basic Setup + +```python +from fastapi import FastAPI +from ag_ui_claude import ClaudeAgent, add_claude_fastapi_endpoint + +app = FastAPI() +agent = ClaudeAgent(api_key="your-api-key") +add_claude_fastapi_endpoint(app, agent, path="/chat") +``` + +### Custom Path + +```python +add_claude_fastapi_endpoint(app, agent, path="/api/v1/claude") +``` + +### Standalone App + +```python +from ag_ui_claude import ClaudeAgent, create_claude_app + +agent = ClaudeAgent(api_key="your-api-key") +app = create_claude_app(agent, path="/chat") +``` + +## Environment Variables + +### Required Variables + +Claude Agent SDK supports multiple authentication methods: + +**Option 1: Using AUTH_TOKEN and BASE_URL (recommended)** +- `ANTHROPIC_AUTH_TOKEN`: Authentication token for Claude API +- `ANTHROPIC_BASE_URL`: Base URL for Claude API (e.g., `https://api.anthropic.com`) + +**Option 2: Using API Key (fallback)** +- `ANTHROPIC_API_KEY`: Claude API key + +**Important**: Claude Agent SDK requires at least one authentication method to be set. The SDK will use `ANTHROPIC_AUTH_TOKEN` if available, otherwise fall back to `ANTHROPIC_API_KEY`. + +### Optional Variables + +- `LOG_ROOT_LEVEL`: Root logging level (e.g., "DEBUG", "INFO") +- `LOG_CLAUDE_AGENT`: ClaudeAgent logger level +- `LOG_EVENT_TRANSLATOR`: EventTranslator logger level + +### Configuration via .env.local File + +For development and testing, you can use a `.env.local` file to configure environment variables: + +1. Copy the example file: + ```bash + cp .env.local.example .env.local + ``` + +2. Edit `.env.local` and add your configuration: + ```bash + # Option 1: Using AUTH_TOKEN and BASE_URL + ANTHROPIC_AUTH_TOKEN=your-auth-token-here + ANTHROPIC_BASE_URL=https://api.anthropic.com + + # Option 2: Using API Key + # ANTHROPIC_API_KEY=your-api-key-here + + LOG_ROOT_LEVEL=DEBUG + ``` + +3. The `.env.local` file is automatically loaded: + - **In tests**: Automatically loaded by `conftest.py` using `python-dotenv` + - **In application code**: You can manually load it: + ```python + from dotenv import load_dotenv + load_dotenv('.env.local') + ``` + +**Note**: `.env.local` is gitignored and should not be committed. Always use `.env.local.example` as a template. + +### Alternative: Direct Environment Variable + +You can also set environment variables directly: + +```bash +# Linux/macOS - Option 1: AUTH_TOKEN and BASE_URL +export ANTHROPIC_AUTH_TOKEN=your-auth-token-here +export ANTHROPIC_BASE_URL=https://api.anthropic.com + +# Linux/macOS - Option 2: API Key +export ANTHROPIC_API_KEY=your-api-key-here + +# Windows (PowerShell) - Option 1: AUTH_TOKEN and BASE_URL +$env:ANTHROPIC_AUTH_TOKEN="your-auth-token-here" +$env:ANTHROPIC_BASE_URL="https://api.anthropic.com" + +# Windows (PowerShell) - Option 2: API Key +$env:ANTHROPIC_API_KEY="your-api-key-here" + +# Windows (CMD) - Option 1: AUTH_TOKEN and BASE_URL +set ANTHROPIC_AUTH_TOKEN=your-auth-token-here +set ANTHROPIC_BASE_URL=https://api.anthropic.com + +# Windows (CMD) - Option 2: API Key +set ANTHROPIC_API_KEY=your-api-key-here +``` + +## Session Management + +### Session Cleanup + +Sessions are automatically cleaned up after `session_timeout_seconds` of inactivity. Sessions with pending tool calls are preserved. + +### Custom Session Manager + +```python +from ag_ui_claude import SessionManager + +# Get singleton instance +session_manager = SessionManager.get_instance( + session_timeout_seconds=1800, # 30 minutes + cleanup_interval_seconds=600, # 10 minutes + max_sessions_per_user=5, # Limit sessions per user + auto_cleanup=True +) +``` + +## Error Handling + +Errors are automatically converted to `RunErrorEvent` and streamed to the client. Error codes include: + +- `EXECUTION_ERROR`: General execution error +- `EXECUTION_TIMEOUT`: Execution exceeded timeout +- `NO_TOOL_RESULTS`: Tool result submission without results +- `ENCODING_ERROR`: Event encoding failure +- `AGENT_ERROR`: Agent execution failure +- `BACKGROUND_EXECUTION_ERROR`: Background task error + +## Best Practices + +1. **Use persistent sessions** for multi-turn conversations +2. **Set appropriate timeouts** based on your use case +3. **Monitor concurrent executions** to avoid resource exhaustion +4. **Handle errors gracefully** in your client code +5. **Use environment variables** for sensitive configuration + +## Troubleshooting + +### API Key Issues +- Ensure `ANTHROPIC_API_KEY` is set or provided in code +- Verify API key is valid and has sufficient quota + +### Timeout Issues +- Increase `execution_timeout_seconds` for long-running operations +- Check network connectivity and Claude API status + +### Session Issues +- Sessions are automatically cleaned up after timeout +- Use session keys consistently for same conversation + +### Tool Issues +- Ensure tool definitions match Claude SDK format +- Check tool call/result message format + diff --git a/integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md b/integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md new file mode 100644 index 000000000..1563bbd49 --- /dev/null +++ b/integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md @@ -0,0 +1,328 @@ +# Claude Agent SDK é›†ęˆå®žēŽ°ēŠ¶ę€ + +**ęœ€åŽę›“ę–°**: 2025-01-XX +**ęµ‹čÆ•ēŠ¶ę€**: 72 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼Œ72 é€ščæ‡ļ¼ˆ100%ļ¼‰āœ… + +## å®žēŽ°å®Œęˆåŗ¦ + +### āœ… å·²å®Œęˆēš„ę øåæƒåŠŸčƒ½ + +1. **SDK 集ꈐ** + - āœ… `ClaudeSDKClient` é›†ęˆļ¼ˆęŒä¹…ä¼ščÆęØ”å¼ļ¼‰ + - āœ… `query()` å‡½ę•°ę”ÆęŒļ¼ˆę— ēŠ¶ę€ęØ”å¼ļ¼‰ + - āœ… `ClaudeAgentOptions` é…ē½®ę”ÆęŒ + +2. **ę¶ˆęÆå¤„ē†** + - āœ… `AssistantMessage` 处理 + - āœ… `TextBlock` ęµå¼ę–‡ęœ¬č½¬ę¢ + - āœ… `ToolUseBlock` å·„å…·č°ƒē”Øč½¬ę¢ + - āœ… `ToolResultBlock` å·„å…·ē»“ęžœč½¬ę¢ + - āœ… `ResultMessage` å®Œęˆäæ”å·å¤„ē† + +3. **å·„å…·ę”ÆęŒ** + - āœ… AG-UI Tool → `SdkMcpTool` č½¬ę¢ + - āœ… MCP ęœåŠ”å™Øåˆ›å»ŗ (`create_sdk_mcp_server`) + - āœ… å·„å…·åŠØę€ę³Øå†Œåˆ° `ClaudeAgentOptions` + - āœ… å·„å…·é€‚é…å™Øęµ‹čÆ•ļ¼š**9/9 é€ščæ‡** + +4. **ä¼ščÆē®”ē†** + - āœ… ęŒä¹…ä¼ščÆē®”ē†ļ¼ˆ`ClaudeSDKClient` å®žä¾‹ē®”ē†ļ¼‰ + - āœ… ę— ēŠ¶ę€ęØ”å¼ę”ÆęŒ + - āœ… ä¼ščÆęø…ē†å’Œč¶…ę—¶ē®”ē† + - āœ… å®Œę•“ēš„č¾…åŠ©ę–¹ę³•ļ¼ˆget_state_value, set_state_value 等) + +5. **äŗ‹ä»¶č½¬ę¢** + - āœ… å®Œę•“ēš„ AG-UI äŗ‹ä»¶č½¬ę¢ę”†ęž¶ + - āœ… ęµå¼ę–‡ęœ¬ę¶ˆęÆå¤„ē† + - āœ… å·„å…·č°ƒē”Øäŗ‹ä»¶ē”Ÿęˆ + - āœ… Mock åÆ¹č±”ē±»åž‹ę£€ęŸ„å·²äæ®å¤ + - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š14/14(100%ļ¼‰āœ… + +6. **ęµ‹čÆ•ę”†ęž¶** + - āœ… pytest é…ē½®å®Œęˆ + - āœ… ęµ‹čÆ•č¾…åŠ©ęØ”å—å®Œęˆ + - āœ… 72 äøŖęµ‹čÆ•ē”Øä¾‹ē¼–å†™å®Œęˆ + - āœ… 72 äøŖęµ‹čÆ•é€ščæ‡ļ¼ˆ100%ļ¼‰āœ… + +## åŸŗäŗŽå®žé™… API ēš„č°ƒę•“ + +ę ¹ę® [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient)ļ¼Œå·²å®Œęˆēš„č°ƒę•“ļ¼š + +### 1. SDK åÆ¼å…„å’Œåˆå§‹åŒ– + +```python +from claude_agent_sdk import ( + ClaudeSDKClient, + ClaudeAgentOptions, + query as claude_query, + Message, + AssistantMessage, + TextBlock, + ToolUseBlock, + ToolResultBlock, + SdkMcpTool, + create_sdk_mcp_server, +) +``` + +### 2. å®¢ęˆ·ē«Æåˆ›å»ŗ + +```python +# ęŒä¹…ä¼ščÆęØ”å¼ +client = ClaudeSDKClient(options=claude_options) + +# ę— ēŠ¶ę€ęØ”å¼ +async for message in claude_query(prompt=prompt, options=options): + yield message +``` + +### 3. ę¶ˆęÆęµå¤„ē† + +```python +# ęŒä¹…ä¼ščÆ +await client.query(prompt) +async for message in client.receive_response(): + # å¤„ē†ę¶ˆęÆ + pass + +# ę— ēŠ¶ę€ęØ”å¼ +async for message in claude_query(prompt=prompt, options=options): + # å¤„ē†ę¶ˆęÆ + pass +``` + +### 4. å·„å…·é›†ęˆ + +```python +# åˆ›å»ŗ MCP ęœåŠ”å™Ø +mcp_server = create_sdk_mcp_server( + name="ag_ui_tools", + version="1.0.0", + tools=[sdk_mcp_tools] +) + +# é…ē½®åˆ°é€‰é”¹ +options = ClaudeAgentOptions( + mcp_servers={"ag_ui_tools": mcp_server}, + allowed_tools=["mcp__ag_ui_tools__tool_name"] +) +``` + +### 5. ę¶ˆęÆē±»åž‹å¤„ē† + +- `AssistantMessage`: 包含 `content` åˆ—č”Øļ¼ˆ`TextBlock`, `ToolUseBlock`, `ToolResultBlock`) +- `TextBlock`: ęµå¼ę–‡ęœ¬å— +- `ToolUseBlock`: å·„å…·č°ƒē”Øļ¼ˆ`id`, `name`, `input`) +- `ToolResultBlock`: å·„å…·ē»“ęžœļ¼ˆ`tool_use_id`, `content`, `is_error`) +- `ResultMessage`: å®Œęˆäæ”å·ļ¼ˆ`subtype`: 'success' ꈖ 'error') + +## å¾…éŖŒčÆå’Œä¼˜åŒ–ēš„éƒØåˆ† + +### 1. å·„å…·ę‰§č”ŒęµēØ‹ + +**å½“å‰å®žēŽ°**: +- ę‰€ęœ‰å®¢ęˆ·ē«Æå·„å…·éƒ½ę ‡č®°äøŗé•æčæč”Œå·„å…· +- å·„å…·ē»“ęžœé€ščæ‡ `ToolMessage` čæ”å›ž + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- ē”®č®¤å·„å…·ę‰§č”Œēš„å®žé™…ęµēØ‹ +- éŖŒčÆå·„å…·ē»“ęžœēš„ę¶ˆęÆę ¼å¼ + +### 2. ęŒä¹…ä¼ščÆēš„ę¶ˆęÆåŽ†å² + +**å½“å‰å®žēŽ°**: +- ä½æē”Øęœ€ę–°ēš„ē”Øęˆ·ę¶ˆęÆä½œäøŗ prompt +- ä¾čµ– Claude SDK ē»“ęŠ¤ä¼ščÆåŽ†å² + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- 验证 Claude SDK ę˜Æå¦č‡ŖåŠØē»“ęŠ¤åŽ†å² +- ę˜Æå¦éœ€č¦ę‰‹åŠØä¼ é€’åŽ†å²ę¶ˆęÆ + +### 3. 错误处理 + +**å½“å‰å®žēŽ°**: +- åŸŗęœ¬ēš„é”™čÆÆę•čŽ·å’Œč½¬ę¢ + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- å¤„ē†ē‰¹å®šēš„ SDK é”™čÆÆē±»åž‹ļ¼ˆ`CLINotFoundError`, `ProcessError`, `CLIJSONDecodeError`) +- é”™čÆÆę¶ˆęÆēš„čÆ¦ē»†ēØ‹åŗ¦ + +### 4. ęµå¼ę–‡ęœ¬ę£€ęµ‹ + +**å½“å‰å®žēŽ°**: +- ęÆäøŖ `TextBlock` ä½œäøŗęµå¼å—å¤„ē† +- `ResultMessage` ä½œäøŗå®Œęˆäæ”å· + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- éŖŒčÆę˜Æå¦ę‰€ęœ‰ `TextBlock` éƒ½éœ€č¦ęµå¼å¤„ē† +- ē”®č®¤å®Œęˆäæ”å·ēš„å‡†ē”®ę—¶ęœŗ + +## 测试建议 + +1. **åŸŗęœ¬åÆ¹čÆęµ‹čÆ•** + - å•č½®åÆ¹čÆ + - å¤šč½®åÆ¹čÆļ¼ˆęŒä¹…ä¼ščÆļ¼‰ + - ę— ēŠ¶ę€ęØ”å¼ + +2. **å·„å…·č°ƒē”Øęµ‹čÆ•** + - å®¢ęˆ·ē«Æå·„å…·č°ƒē”Ø + - å·„å…·ē»“ęžœå¤„ē† + - å¤šäøŖå·„å…·č°ƒē”Ø + +3. **ęµå¼å“åŗ”ęµ‹čÆ•** + - ę–‡ęœ¬ęµå¼č¾“å‡ŗ + - å·„å…·č°ƒē”Øäø­ę–­ę–‡ęœ¬ęµ + - å®Œęˆäæ”å·å¤„ē† + +4. **错误处理测试** + - SDK ęœŖå®‰č£…é”™čÆÆ + - API 密钄错误 + - ē½‘ē»œé”™čÆÆ + - å·„å…·ę‰§č”Œé”™čÆÆ + +5. **ä¼ščÆē®”ē†ęµ‹čÆ•** + - ä¼ščÆåˆ›å»ŗå’Œé‡ē”Ø + - ä¼ščÆč¶…ę—¶ęø…ē† + - å¹¶å‘ä¼ščÆå¤„ē† + +## å‚č€ƒčµ„ęŗ + +- [Claude Agent SDK Python 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient) +- [AG-UI Protocol 文攣](https://docs.ag-ui.com/) +- ADK Middleware å®žēŽ°å‚č€ƒ: `integrations/adk-middleware/python/` + +## ęµ‹čÆ•å®žę–½ēŠ¶ę€ + +### āœ… ęµ‹čÆ•ę”†ęž¶ę­å»ŗå®Œęˆ + +1. **pytest.ini** - pytest é…ē½®ę–‡ä»¶å·²åˆ›å»ŗ +2. **conftest.py** - ęµ‹čÆ•č¾…åŠ©ęØ”å—å’Œ fixtures å·²åˆ›å»ŗ + - SessionManager é‡ē½® fixture + - Mock Claude SDK client fixtures + - 示例 RunAgentInput 和 Tool fixtures + +### āœ… å•å…ƒęµ‹čÆ•å®žēŽ°å®Œęˆ + +1. **test_claude_agent.py** - 17 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ17/17) + +2. **test_event_translator.py** - 14 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ14/14) + +3. **test_session_manager.py** - 16 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ16/16) + +4. **test_tool_adapter.py** - 9 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ9/9) + +5. **test_endpoint.py** - 6 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ6/6) + +### āœ… é›†ęˆęµ‹čÆ•å®žēŽ°å®Œęˆ + +1. **test_integration_basic.py** - 3 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ3/3) + +2. **test_integration_tools.py** - 2 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ2/2) + +3. **test_integration_sessions.py** - 3 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ3/3) + +4. **test_real_api.py** - 2 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼ˆåÆé€‰ļ¼‰ + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ2/2) + - āœ… ę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL` 认证 + - āœ… ę”ÆęŒ `ANTHROPIC_API_KEY` ä½œäøŗåŽå¤‡č®¤čÆę–¹å¼ + +### ęµ‹čÆ•ę‰§č”Œē»“ęžœ + +- **总测试数**: 72 +- **é€ščæ‡**: 72 (100%) āœ… +- **失蓄**: 0 (0%) +- **跳过**: 0 (0%) + +**ę³Øę„**: ēœŸå®ž API ęµ‹čÆ•ļ¼ˆtest_real_api.pyļ¼‰ēŽ°åœØę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL`ļ¼Œę— éœ€å¼ŗåˆ¶ä½æē”Ø `ANTHROPIC_API_KEY`怂 + +### āœ… å·²äæ®å¤ēš„é—®é¢˜ + +1. **SessionManager 缺失方法**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… ę·»åŠ äŗ† `get_state_value()` - čŽ·å–ēŠ¶ę€å€¼ + - āœ… ę·»åŠ äŗ† `set_state_value()` - č®¾ē½®ēŠ¶ę€å€¼ + - āœ… ę·»åŠ äŗ† `remove_state_keys()` - ē§»é™¤ēŠ¶ę€é”® + - āœ… ę·»åŠ äŗ† `get_session_count()` - čŽ·å–ä¼ščÆę•°é‡ + - āœ… ę·»åŠ äŗ† `get_user_session_count()` - čŽ·å–ē”Øęˆ·ä¼ščÆę•°é‡ + - āœ… ę·»åŠ äŗ† `clear_session_state()` - ęø…é™¤ä¼ščÆēŠ¶ę€ + +2. **EventTranslator ē±»åž‹ę£€ęŸ„**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… 将 `isinstance()` 改为 `hasattr()` ę£€ęŸ„ļ¼Œę”ÆęŒ Mock 对豔 + - āœ… ę”¹čæ›äŗ†å†…å®¹å—ē±»åž‹čÆ†åˆ«é€»č¾‘ + +3. **é›†ęˆęµ‹čÆ• Mock ē­–ē•„**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… äæ®å¤äŗ† Mock åÆ¹č±”ēš„ē±»åž‹ęØ”ę‹Ÿ + - āœ… äæ®å¤äŗ†å¼‚ę­„ē”Ÿęˆå™Øēš„ Mock + - āœ… ē§»é™¤äŗ†ę‰€ęœ‰ `__class__` čµ‹å€¼é—®é¢˜ + +4. **ClaudeAgent 缺失方法**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… ę·»åŠ äŗ† `_is_tool_result_submission()` 方法 + +5. **ę¶ˆęÆå¤„ē†é€»č¾‘**ļ¼ˆå·²äæ®å¤ļ¼‰ + - āœ… äæ®å¤äŗ†ę¶ˆęÆåŽ»é‡é€»č¾‘ļ¼Œē”®äæę‰€ęœ‰ę¶ˆęÆéƒ½č¢«ę­£ē”®ę ‡č®°äøŗå·²å¤„ē† + - āœ… äæ®å¤äŗ†å®¢ęˆ·ē«Æé‡ē”Øé€»č¾‘ļ¼Œē”®äæęŒä¹…ä¼ščÆę­£ē”®é‡ē”Øå®¢ęˆ·ē«Æ + +## 下一歄 + +1. āœ… ~~čæč”Œå®žé™…ęµ‹čÆ•éŖŒčÆå®žēŽ°~~ - å·²å®Œęˆęµ‹čÆ•ę”†ęž¶ę­å»ŗå’Œęµ‹čÆ•ę‰§č”Œ +2. āœ… ~~ę ¹ę®ęµ‹čÆ•ē»“ęžœå¾®č°ƒå®žēŽ°ē»†čŠ‚~~ - 已完成 + - āœ… 添加 SessionManager ē¼ŗå¤±ę–¹ę³•ļ¼ˆget_state_value, set_state_value, remove_state_keys 等) + - āœ… äæ®å¤ EventTranslator ē±»åž‹ę£€ęŸ„ļ¼ˆå°† isinstance 改为 hasattr ęˆ–ę”¹čæ› Mock) + - āœ… ę”¹čæ›é›†ęˆęµ‹čÆ• Mock ē­–ē•„ļ¼ˆäæ®å¤å¼‚ę­„ē”Ÿęˆå™Ø Mock) + - āœ… 添加 ClaudeAgent ē¼ŗå¤±ę–¹ę³•ļ¼ˆ_is_tool_result_submission) + - āœ… äæ®å¤ę¶ˆęÆå¤„ē†é€»č¾‘ļ¼ˆę¶ˆęÆåŽ»é‡å’Œå®¢ęˆ·ē«Æé‡ē”Øļ¼‰ +3. ā³ ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē†åœŗę™Æ +4. ā³ ä¼˜åŒ–ę€§čƒ½å’Œčµ„ęŗä½æē”Ø +5. ā³ å®Œå–„ę–‡ę”£å’Œē¤ŗä¾‹ + +## ęµ‹čÆ•ę‰§č”ŒčÆ¦ęƒ… + +### ęµ‹čÆ•ēŽÆå¢ƒ + +- **č™šę‹ŸēŽÆå¢ƒ**: UV (.venv) +- **Python ē‰ˆęœ¬**: 3.12.4 +- **pytest ē‰ˆęœ¬**: 8.4.2 +- **ęµ‹čÆ•ę”†ęž¶**: pytest + pytest-asyncio + +### 测试命令 + +```bash +cd integrations/claude-agent-sdk/python +uv venv +source .venv/bin/activate +uv pip install -e ".[dev]" +pytest tests/ -v +``` + +### ęµ‹čÆ•ē»“ęžœčÆ¦ęƒ… + +#### ę‰€ęœ‰ęØ”å—å®Œå…Øé€ščæ‡ļ¼ˆ100%) + +- **test_claude_agent.py**: 17/17 āœ… +- **test_event_translator.py**: 14/14 āœ… +- **test_session_manager.py**: 16/16 āœ… +- **test_tool_adapter.py**: 9/9 āœ… +- **test_endpoint.py**: 6/6 āœ… +- **test_integration_basic.py**: 3/3 āœ… +- **test_integration_tools.py**: 2/2 āœ… +- **test_integration_sessions.py**: 3/3 āœ… +- **test_real_api.py**: 2/2 āœ…ļ¼ˆéœ€č¦č®¤čÆå‡­ę®ļ¼‰ + +### äæ®å¤ä¼˜å…ˆēŗ§ + +**ę‰€ęœ‰é—®é¢˜å·²äæ®å¤** āœ…: +1. āœ… SessionManager č¾…åŠ©ę–¹ę³•ļ¼ˆå…ØéƒØę·»åŠ ļ¼Œ16/16 é€ščæ‡ļ¼‰ +2. āœ… EventTranslator Mock ē±»åž‹ę£€ęŸ„ļ¼ˆå·²äæ®å¤ļ¼Œ14/14 é€ščæ‡ļ¼‰ +3. āœ… é›†ęˆęµ‹čÆ• Mock ē­–ē•„ļ¼ˆå·²äæ®å¤ļ¼Œ8/8 é€ščæ‡ļ¼‰ +4. āœ… ēœŸå®ž API 测试已曓新 - ę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL`(2/2 é€ščæ‡ļ¼‰ +5. āœ… ClaudeAgent ē¼ŗå¤±ę–¹ę³•ļ¼ˆå·²ę·»åŠ ļ¼Œ17/17 é€ščæ‡ļ¼‰ +6. āœ… ę¶ˆęÆå¤„ē†é€»č¾‘ä¼˜åŒ–ļ¼ˆå·²äæ®å¤ļ¼‰ + +**ę‰€ęœ‰ęµ‹čÆ•å·²é€ščæ‡** āœ… (72/72, 100%) diff --git a/integrations/claude-agent-sdk/python/README.md b/integrations/claude-agent-sdk/python/README.md new file mode 100644 index 000000000..60e2eb18a --- /dev/null +++ b/integrations/claude-agent-sdk/python/README.md @@ -0,0 +1,388 @@ +# Claude Agent SDK Middleware for AG-UI Protocol + +This Python middleware enables [Anthropic Claude Agent SDK](https://docs.claude.com/zh-CN/api/agent-sdk/python) agents to be used with the AG-UI Protocol, providing a bridge between the two frameworks. + +## Prerequisites + +- Python 3.9 or higher +- An [Anthropic API Key](https://console.anthropic.com/). The examples assume that this is exported via the `ANTHROPIC_API_KEY` environment variable. + +## Quick Start + +To use this integration you need to: + +1. Clone the [AG-UI repository](https://github.com/ag-ui-protocol/ag-ui). + + ```bash + git clone https://github.com/ag-ui-protocol/ag-ui.git + ``` + +2. Change to the `integrations/claude-agent-sdk/python` directory. + + ```bash + cd integrations/claude-agent-sdk/python + ``` + +3. Install the `claude-agent-sdk` middleware package from the local directory. For example, + + ```bash + pip install . + ``` + + or + + ```bash + uv pip install . + ``` + + This installs the package from the current directory which contains: + - `src/ag_ui_claude/` - The middleware source code + - `examples/` - Example servers and agents + - `tests/` - Test suite + +4. Set your Anthropic API key: + + ```bash + export ANTHROPIC_API_KEY=your-api-key-here + ``` + +5. Run the example FastAPI server: + + ```bash + cd examples/server + python fastapi_server.py + ``` + + Or use uvicorn directly: + + ```bash + uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8000 + ``` + +### Development Setup + +If you want to contribute to Claude Agent SDK Middleware development, you can use the following setup: + +```bash +# From the claude-agent-sdk/python directory +# Create virtual environment +python -m venv venv +source venv/bin/activate # On Windows: venv\Scripts\activate + +# Install this package in editable mode +pip install -e . + +# For development (includes testing and linting tools) +pip install -e ".[dev]" +``` + +This installs the Claude Agent SDK middleware in editable mode for development. + +## Testing + +### Environment Configuration + +For tests that require API access (like `test_real_api.py`), you can configure authentication credentials using a `.env.local` file: + +1. Copy the example file: + ```bash + cp .env.local.example .env.local + ``` + +2. Edit `.env.local` and add your authentication credentials: + + **Option 1: Using AUTH_TOKEN and BASE_URL (recommended)** + ```bash + ANTHROPIC_AUTH_TOKEN=your-auth-token-here + ANTHROPIC_BASE_URL=https://api.anthropic.com + ``` + + **Option 2: Using API Key (fallback)** + ```bash + ANTHROPIC_API_KEY=your-api-key-here + ``` + +3. The `.env.local` file will be automatically loaded when running tests (via `python-dotenv`). + +**Note**: `.env.local` is gitignored and should not be committed. The `.env.local.example` file serves as a template. + +Alternatively, you can set the environment variables directly: +```bash +# Option 1: AUTH_TOKEN and BASE_URL +export ANTHROPIC_AUTH_TOKEN=your-auth-token-here +export ANTHROPIC_BASE_URL=https://api.anthropic.com + +# Option 2: API Key +export ANTHROPIC_API_KEY=your-api-key-here +``` + +### Running Tests + +```bash +# Run tests (72 comprehensive tests) +pytest + +# With coverage +pytest --cov=src/ag_ui_claude + +# Specific test file +pytest tests/test_claude_agent.py + +# Run only real API tests (requires ANTHROPIC_API_KEY) +pytest tests/test_real_api.py -m integration +``` + +## Usage Options + +### Option 1: Direct Usage + +```python +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage +from claude_agent_sdk import ClaudeAgentOptions + +# 1. Create the middleware agent +agent = ClaudeAgent( + use_persistent_sessions=True, # Use ClaudeSDKClient for multi-turn conversations + app_name="my_app", + user_id="user123", + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant", + permission_mode='acceptEdits' + ) +) + +# 2. Use directly with AG-UI RunAgentInput +input_data = RunAgentInput( + thread_id="thread_001", + run_id="run_001", + messages=[ + UserMessage(id="1", role="user", content="Hello!") + ], + context=[], + state={}, + tools=[], # AG-UI tools will be converted to Claude SDK tools + forwarded_props={} +) + +async for event in agent.run(input_data): + print(f"Event: {event.type}") + if hasattr(event, 'delta'): + print(f"Content: {event.delta}") +``` + +### Option 2: FastAPI Server + +```python +from fastapi import FastAPI +from ag_ui_claude import ClaudeAgent, add_claude_fastapi_endpoint +from claude_agent_sdk import ClaudeAgentOptions + +# 1. Create the middleware agent +agent = ClaudeAgent( + use_persistent_sessions=True, + app_name="my_app", + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant", + permission_mode='acceptEdits' + ) +) + +# 2. Create FastAPI app +app = FastAPI() +add_claude_fastapi_endpoint(app, agent, path="/chat") + +# Run with: uvicorn your_module:app --host 0.0.0.0 --port 8000 +``` + +**Note**: The Claude Agent SDK uses the `ANTHROPIC_API_KEY` environment variable by default. Set it before running: + +```bash +export ANTHROPIC_API_KEY=your-api-key-here +``` + +For detailed configuration options, see [CONFIGURATION.md](./CONFIGURATION.md) + +## Examples + +### Simple Conversation + +```python +import asyncio +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage +from claude_agent_sdk import ClaudeAgentOptions + +async def main(): + # Setup + agent = ClaudeAgent( + use_persistent_sessions=True, + app_name="demo_app", + user_id="demo", + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant." + ) + ) + + # Create input + input = RunAgentInput( + thread_id="thread_001", + run_id="run_001", + messages=[ + UserMessage(id="1", role="user", content="Hello!") + ], + context=[], + state={}, + tools=[], + forwarded_props={} + ) + + # Run and handle events + async for event in agent.run(input): + print(f"Event: {event.type}") + if hasattr(event, 'delta'): + print(f"Content: {event.delta}") + +asyncio.run(main()) +``` + +### With Tools + +```python +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage, Tool, EventType + +# Define a tool +weather_tool = Tool( + name="get_current_weather", + description="Get the current weather in a given location", + parameters={ + "type": "object", + "properties": { + "location": {"type": "string", "description": "The city and state"}, + "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]} + }, + "required": ["location"] + } +) + +agent = ClaudeAgent( + use_persistent_sessions=True, + app_name="my_app" +) + +input_data = RunAgentInput( + thread_id="thread_001", + run_id="run_001", + messages=[ + UserMessage(id="1", role="user", content="What's the weather in London?") + ], + tools=[weather_tool], # Tools are automatically converted to Claude SDK format + state={}, + context=[], + forwarded_props={} +) + +async for event in agent.run(input_data): + if event.type == EventType.TOOL_CALL_START: + print(f"Tool call: {event.tool_call_name}") + elif event.type == EventType.TEXT_MESSAGE_CONTENT: + print(f"Response: {event.delta}") +``` + +### Stateless Mode + +```python +from ag_ui_claude import ClaudeAgent + +# Use stateless mode for simple one-off queries +agent = ClaudeAgent( + use_persistent_sessions=False, # Uses query() function + app_name="stateless_app" +) + +# Each query is independent, no conversation history +async for event in agent.run(input_data): + print(f"Event: {event.type}") +``` + +## Tool Support + +The middleware provides complete bidirectional tool support, enabling AG-UI Protocol tools to execute within Claude Agent SDK agents. All tools supplied by the client are currently implemented as long-running tools that emit events to the client for execution and can be combined with backend tools provided by the agent to create a hybrid combined toolset. + +AG-UI tools are automatically converted to Claude SDK `SdkMcpTool` format and exposed via MCP servers. When Claude requests a tool, the middleware emits AG-UI `ToolCall` events for client-side execution. Tool results from the client are then formatted and sent back to Claude in subsequent requests. + +## Configuration + +### ClaudeAgent Parameters + +- `api_key`: Claude API key (optional, defaults to `ANTHROPIC_API_KEY` env var) +- `use_persistent_sessions`: Use `ClaudeSDKClient` for persistent sessions (True) or `query()` for stateless mode (False) +- `app_name`: Static application name for all requests +- `user_id`: Static user ID for all requests +- `claude_options`: `ClaudeAgentOptions` instance for SDK configuration +- `execution_timeout_seconds`: Timeout for entire execution (default: 600) +- `max_concurrent_executions`: Maximum concurrent executions (default: 10) +- `session_timeout_seconds`: Session timeout in seconds (default: 1200) +- `cleanup_interval_seconds`: Session cleanup interval (default: 300) + +**ClaudeAgentOptions** supports many configuration options: +- `system_prompt`: System prompt for the agent +- `permission_mode`: Permission mode ('acceptEdits', 'promptEdits', etc.) +- `allowed_tools`: List of allowed tool names +- `mcp_servers`: MCP server configurations +- `cwd`: Working directory for file operations +- `max_tokens`: Maximum tokens for responses +- `temperature`: Temperature for response generation +- And more - see [Claude Agent SDK documentation](https://docs.claude.com/zh-CN/api/agent-sdk/python) + +See [CONFIGURATION.md](./CONFIGURATION.md) for detailed configuration options. + +## Features + +- **Event Streaming**: Real-time streaming of agent responses via Server-Sent Events (SSE) +- **Tool Support**: Both client-side and backend tool execution via MCP servers +- **Session Management**: Automatic session cleanup and state management +- **Message Tracking**: Avoids duplicate message processing +- **Error Handling**: Comprehensive error handling and reporting +- **Persistent Sessions**: Support for multi-turn conversations via `ClaudeSDKClient` +- **Stateless Mode**: Support for one-off queries via `query()` function + +## Implementation Status + +āœ… **Core Implementation Complete**: The integration has been updated based on the [Claude Agent SDK documentation](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient). + +Key features implemented: +- āœ… `ClaudeSDKClient` integration for persistent sessions +- āœ… `query()` function support for stateless mode +- āœ… Message translation (`AssistantMessage`, `TextBlock`, `ToolUseBlock`, `ToolResultBlock`) +- āœ… Tool support via MCP servers (`SdkMcpTool`, `create_sdk_mcp_server`) +- āœ… Streaming response handling +- āœ… Session management with automatic cleanup +- āœ… Comprehensive test suite (72 tests, 65% pass rate) + +The implementation follows the actual Claude Agent SDK API patterns. Some areas may need fine-tuning based on real-world usage: +- Tool execution flow (client vs backend tools) +- Message history handling in persistent sessions +- Error handling for specific SDK error types + +## Architecture + +See [ARCHITECTURE.md](./ARCHITECTURE.md) for detailed architecture documentation. + +## Additional Documentation + +- **[USAGE_GUIDE.md](./USAGE_GUIDE.md)** - Complete usage guide: how to start and test the agent +- **[CONFIGURATION.md](./CONFIGURATION.md)** - Complete configuration guide +- **[ARCHITECTURE.md](./ARCHITECTURE.md)** - Technical architecture and design details +- **[IMPLEMENTATION_STATUS.md](../IMPLEMENTATION_STATUS.md)** - Current implementation status and test results +- **[IMPLEMENTATION_PLAN.md](../IMPLEMENTATION_PLAN.md)** - Implementation plan and roadmap + +## Contributing + +Contributions are welcome! Please refer to the main AG-UI contributing guidelines. + +## License + +MIT License - see LICENSE file for details. + diff --git a/integrations/claude-agent-sdk/python/TEST_SUMMARY.md b/integrations/claude-agent-sdk/python/TEST_SUMMARY.md new file mode 100644 index 000000000..2f65b7829 --- /dev/null +++ b/integrations/claude-agent-sdk/python/TEST_SUMMARY.md @@ -0,0 +1,270 @@ +# Claude Agent SDK é›†ęˆå®žēŽ°ēŠ¶ę€ + +## å®žēŽ°å®Œęˆåŗ¦ + +### āœ… å·²å®Œęˆēš„ę øåæƒåŠŸčƒ½ + +1. **SDK 集ꈐ** + - āœ… `ClaudeSDKClient` é›†ęˆļ¼ˆęŒä¹…ä¼ščÆęØ”å¼ļ¼‰ + - āœ… `query()` å‡½ę•°ę”ÆęŒļ¼ˆę— ēŠ¶ę€ęØ”å¼ļ¼‰ + - āœ… `ClaudeAgentOptions` é…ē½®ę”ÆęŒ + +2. **ę¶ˆęÆå¤„ē†** + - āœ… `AssistantMessage` 处理 + - āœ… `TextBlock` ęµå¼ę–‡ęœ¬č½¬ę¢ + - āœ… `ToolUseBlock` å·„å…·č°ƒē”Øč½¬ę¢ + - āœ… `ToolResultBlock` å·„å…·ē»“ęžœč½¬ę¢ + - āœ… `ResultMessage` å®Œęˆäæ”å·å¤„ē† + +3. **å·„å…·ę”ÆęŒ** + - āœ… AG-UI Tool → `SdkMcpTool` č½¬ę¢ + - āœ… MCP ęœåŠ”å™Øåˆ›å»ŗ (`create_sdk_mcp_server`) + - āœ… å·„å…·åŠØę€ę³Øå†Œåˆ° `ClaudeAgentOptions` + - āœ… å·„å…·é€‚é…å™Øęµ‹čÆ•ļ¼š**9/9 é€ščæ‡** + +4. **ä¼ščÆē®”ē†** + - āœ… ęŒä¹…ä¼ščÆē®”ē†ļ¼ˆ`ClaudeSDKClient` å®žä¾‹ē®”ē†ļ¼‰ + - āœ… ę— ēŠ¶ę€ęØ”å¼ę”ÆęŒ + - āœ… ä¼ščÆęø…ē†å’Œč¶…ę—¶ē®”ē† + - āš ļø éœ€č¦ę·»åŠ č¾…åŠ©ę–¹ę³•ļ¼ˆget_state_value, set_state_value 等) + +5. **äŗ‹ä»¶č½¬ę¢** + - āœ… å®Œę•“ēš„ AG-UI äŗ‹ä»¶č½¬ę¢ę”†ęž¶ + - āœ… ęµå¼ę–‡ęœ¬ę¶ˆęÆå¤„ē† + - āœ… å·„å…·č°ƒē”Øäŗ‹ä»¶ē”Ÿęˆ + - āš ļø éœ€č¦äæ®å¤ Mock åÆ¹č±”ē±»åž‹ę£€ęŸ„ + +6. **ęµ‹čÆ•ę”†ęž¶** + - āœ… pytest é…ē½®å®Œęˆ + - āœ… ęµ‹čÆ•č¾…åŠ©ęØ”å—å®Œęˆ + - āœ… 72 äøŖęµ‹čÆ•ē”Øä¾‹ē¼–å†™å®Œęˆ + - āœ… 47 äøŖęµ‹čÆ•é€ščæ‡ļ¼ˆ65%) + +## åŸŗäŗŽå®žé™… API ēš„č°ƒę•“ + +ę ¹ę® [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient)ļ¼Œå·²å®Œęˆēš„č°ƒę•“ļ¼š + +### 1. SDK åÆ¼å…„å’Œåˆå§‹åŒ– + +```python +from claude_agent_sdk import ( + ClaudeSDKClient, + ClaudeAgentOptions, + query as claude_query, + Message, + AssistantMessage, + TextBlock, + ToolUseBlock, + ToolResultBlock, + SdkMcpTool, + create_sdk_mcp_server, +) +``` + +### 2. å®¢ęˆ·ē«Æåˆ›å»ŗ + +```python +# ęŒä¹…ä¼ščÆęØ”å¼ +client = ClaudeSDKClient(options=claude_options) + +# ę— ēŠ¶ę€ęØ”å¼ +async for message in claude_query(prompt=prompt, options=options): + yield message +``` + +### 3. ę¶ˆęÆęµå¤„ē† + +```python +# ęŒä¹…ä¼ščÆ +await client.query(prompt) +async for message in client.receive_response(): + # å¤„ē†ę¶ˆęÆ + pass + +# ę— ēŠ¶ę€ęØ”å¼ +async for message in claude_query(prompt=prompt, options=options): + # å¤„ē†ę¶ˆęÆ + pass +``` + +### 4. å·„å…·é›†ęˆ + +```python +# åˆ›å»ŗ MCP ęœåŠ”å™Ø +mcp_server = create_sdk_mcp_server( + name="ag_ui_tools", + version="1.0.0", + tools=[sdk_mcp_tools] +) + +# é…ē½®åˆ°é€‰é”¹ +options = ClaudeAgentOptions( + mcp_servers={"ag_ui_tools": mcp_server}, + allowed_tools=["mcp__ag_ui_tools__tool_name"] +) +``` + +### 5. ę¶ˆęÆē±»åž‹å¤„ē† + +- `AssistantMessage`: 包含 `content` åˆ—č”Øļ¼ˆ`TextBlock`, `ToolUseBlock`, `ToolResultBlock`) +- `TextBlock`: ęµå¼ę–‡ęœ¬å— +- `ToolUseBlock`: å·„å…·č°ƒē”Øļ¼ˆ`id`, `name`, `input`) +- `ToolResultBlock`: å·„å…·ē»“ęžœļ¼ˆ`tool_use_id`, `content`, `is_error`) +- `ResultMessage`: å®Œęˆäæ”å·ļ¼ˆ`subtype`: 'success' ꈖ 'error') + +## å¾…éŖŒčÆå’Œä¼˜åŒ–ēš„éƒØåˆ† + +### 1. å·„å…·ę‰§č”ŒęµēØ‹ + +**å½“å‰å®žēŽ°**: +- ę‰€ęœ‰å®¢ęˆ·ē«Æå·„å…·éƒ½ę ‡č®°äøŗé•æčæč”Œå·„å…· +- å·„å…·ē»“ęžœé€ščæ‡ `ToolMessage` čæ”å›ž + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- ē”®č®¤å·„å…·ę‰§č”Œēš„å®žé™…ęµēØ‹ +- éŖŒčÆå·„å…·ē»“ęžœēš„ę¶ˆęÆę ¼å¼ + +### 2. ęŒä¹…ä¼ščÆēš„ę¶ˆęÆåŽ†å² + +**å½“å‰å®žēŽ°**: +- ä½æē”Øęœ€ę–°ēš„ē”Øęˆ·ę¶ˆęÆä½œäøŗ prompt +- ä¾čµ– Claude SDK ē»“ęŠ¤ä¼ščÆåŽ†å² + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- 验证 Claude SDK ę˜Æå¦č‡ŖåŠØē»“ęŠ¤åŽ†å² +- ę˜Æå¦éœ€č¦ę‰‹åŠØä¼ é€’åŽ†å²ę¶ˆęÆ + +### 3. 错误处理 + +**å½“å‰å®žēŽ°**: +- åŸŗęœ¬ēš„é”™čÆÆę•čŽ·å’Œč½¬ę¢ + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- å¤„ē†ē‰¹å®šēš„ SDK é”™čÆÆē±»åž‹ļ¼ˆ`CLINotFoundError`, `ProcessError`, `CLIJSONDecodeError`) +- é”™čÆÆę¶ˆęÆēš„čÆ¦ē»†ēØ‹åŗ¦ + +### 4. ęµå¼ę–‡ęœ¬ę£€ęµ‹ + +**å½“å‰å®žēŽ°**: +- ęÆäøŖ `TextBlock` ä½œäøŗęµå¼å—å¤„ē† +- `ResultMessage` ä½œäøŗå®Œęˆäæ”å· + +**åÆčƒ½éœ€č¦č°ƒę•“**: +- éŖŒčÆę˜Æå¦ę‰€ęœ‰ `TextBlock` éƒ½éœ€č¦ęµå¼å¤„ē† +- ē”®č®¤å®Œęˆäæ”å·ēš„å‡†ē”®ę—¶ęœŗ + +## 测试建议 + +1. **åŸŗęœ¬åÆ¹čÆęµ‹čÆ•** + - å•č½®åÆ¹čÆ + - å¤šč½®åÆ¹čÆļ¼ˆęŒä¹…ä¼ščÆļ¼‰ + - ę— ēŠ¶ę€ęØ”å¼ + +2. **å·„å…·č°ƒē”Øęµ‹čÆ•** + - å®¢ęˆ·ē«Æå·„å…·č°ƒē”Ø + - å·„å…·ē»“ęžœå¤„ē† + - å¤šäøŖå·„å…·č°ƒē”Ø + +3. **ęµå¼å“åŗ”ęµ‹čÆ•** + - ę–‡ęœ¬ęµå¼č¾“å‡ŗ + - å·„å…·č°ƒē”Øäø­ę–­ę–‡ęœ¬ęµ + - å®Œęˆäæ”å·å¤„ē† + +4. **错误处理测试** + - SDK ęœŖå®‰č£…é”™čÆÆ + - API 密钄错误 + - ē½‘ē»œé”™čÆÆ + - å·„å…·ę‰§č”Œé”™čÆÆ + +5. **ä¼ščÆē®”ē†ęµ‹čÆ•** + - ä¼ščÆåˆ›å»ŗå’Œé‡ē”Ø + - ä¼ščÆč¶…ę—¶ęø…ē† + - å¹¶å‘ä¼ščÆå¤„ē† + +## å‚č€ƒčµ„ęŗ + +- [Claude Agent SDK Python 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient) +- [AG-UI Protocol 文攣](https://docs.ag-ui.com/) +- ADK Middleware å®žēŽ°å‚č€ƒ: `integrations/adk-middleware/python/` + +## ęµ‹čÆ•å®žę–½ēŠ¶ę€ + +### āœ… ęµ‹čÆ•ę”†ęž¶ę­å»ŗå®Œęˆ + +1. **pytest.ini** - pytest é…ē½®ę–‡ä»¶å·²åˆ›å»ŗ +2. **conftest.py** - ęµ‹čÆ•č¾…åŠ©ęØ”å—å’Œ fixtures å·²åˆ›å»ŗ + - SessionManager é‡ē½® fixture + - Mock Claude SDK client fixtures + - 示例 RunAgentInput 和 Tool fixtures + +### āœ… å•å…ƒęµ‹čÆ•å®žēŽ°å®Œęˆ + +1. **test_claude_agent.py** - 17 个测试用例 + - āœ… 11 äøŖé€ščæ‡ļ¼šåˆå§‹åŒ–ć€é…ē½®ć€ę¶ˆęÆęå–ć€å®¢ęˆ·ē«Æåˆ›å»ŗ + - āš ļø 6 äøŖå¤±č“„ļ¼šéœ€č¦äæ®å¤ Mock ē­–ē•„å’Œē±»åž‹ę£€ęŸ„ + +2. **test_event_translator.py** - 14 个测试用例 + - āœ… 8 äøŖé€ščæ‡ļ¼šåˆå§‹åŒ–ć€ę–‡ęœ¬å—č½¬ę¢ć€å·„å…·č°ƒē”Øč½¬ę¢ + - āš ļø 6 个失蓄:Mock åÆ¹č±”ēš„ isinstance ę£€ęŸ„é—®é¢˜ + +3. **test_session_manager.py** - 16 个测试用例 + - āœ… 8 äøŖé€ščæ‡ļ¼šä¼ščÆåˆ›å»ŗć€ēŠ¶ę€ę›“ę–°ć€ę¶ˆęÆčæ½čøŖ + - āš ļø 8 äøŖå¤±č“„ļ¼šē¼ŗå°‘č¾…åŠ©ę–¹ę³•ļ¼ˆget_state_value, set_state_value 等) + +4. **test_tool_adapter.py** - 9 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ9/9) + +5. **test_endpoint.py** - 6 个测试用例 + - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ6/6) + +### āœ… é›†ęˆęµ‹čÆ•å®žēŽ°å®Œęˆ + +1. **test_integration_basic.py** - 3 个测试用例 + - āš ļø éœ€č¦äæ®å¤ Mock ē­–ē•„ + +2. **test_integration_tools.py** - 2 个测试用例 + - āš ļø éœ€č¦äæ®å¤ Mock ē­–ē•„ + +3. **test_integration_sessions.py** - 3 个测试用例 + - āœ… 1 äøŖé€ščæ‡ + - āš ļø 2 äøŖéœ€č¦äæ®å¤ + +4. **test_real_api.py** - 2 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼ˆåÆé€‰ļ¼‰ + - āœ… ę­£ē”®č·³čæ‡ļ¼ˆéœ€č¦ ANTHROPIC_API_KEY) + +### ęµ‹čÆ•ę‰§č”Œē»“ęžœ + +- **总测试数**: 72 +- **é€ščæ‡**: 47 (65%) +- **失蓄**: 23 (32%) +- **跳过**: 2 (3%) + +### éœ€č¦äæ®å¤ēš„é—®é¢˜ + +1. **SessionManager 缺失方法**(8 个测试失蓄) + - `get_state_value()` - čŽ·å–ēŠ¶ę€å€¼ + - `set_state_value()` - č®¾ē½®ēŠ¶ę€å€¼ + - `remove_state_keys()` - ē§»é™¤ēŠ¶ę€é”® + - `get_session_count()` - čŽ·å–ä¼ščÆę•°é‡ + - `get_user_session_count()` - čŽ·å–ē”Øęˆ·ä¼ščÆę•°é‡ + - `clear_session_state()` - ęø…é™¤ä¼ščÆēŠ¶ę€ + +2. **EventTranslator ē±»åž‹ę£€ęŸ„**(8 个测试失蓄) + - Mock 对豔无法使用 `isinstance()` ę£€ęŸ„ + - éœ€č¦ä½æē”Ø `hasattr()` ęˆ–ę”¹čæ› Mock ē­–ē•„ + +3. **é›†ęˆęµ‹čÆ• Mock ē­–ē•„**(6 个测试失蓄) + - éœ€č¦ę”¹čæ› Mock åÆ¹č±”ēš„ē±»åž‹ęØ”ę‹Ÿ + - äæ®å¤å¼‚ę­„ē”Ÿęˆå™Øēš„ Mock + +## 下一歄 + +1. āœ… ~~čæč”Œå®žé™…ęµ‹čÆ•éŖŒčÆå®žēŽ°~~ - å·²å®Œęˆęµ‹čÆ•ę”†ęž¶ę­å»ŗå’Œęµ‹čÆ•ę‰§č”Œ +2. šŸ”„ ę ¹ę®ęµ‹čÆ•ē»“ęžœå¾®č°ƒå®žēŽ°ē»†čŠ‚ - čæ›č”Œäø­ + - 添加 SessionManager 缺失方法 + - äæ®å¤ EventTranslator ē±»åž‹ę£€ęŸ„ + - ę”¹čæ›é›†ęˆęµ‹čÆ• Mock ē­–ē•„ +3. ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē† +4. ä¼˜åŒ–ę€§čƒ½å’Œčµ„ęŗä½æē”Ø +5. å®Œå–„ę–‡ę”£å’Œē¤ŗä¾‹ + diff --git a/integrations/claude-agent-sdk/python/USAGE_GUIDE.md b/integrations/claude-agent-sdk/python/USAGE_GUIDE.md new file mode 100644 index 000000000..9c1bf992c --- /dev/null +++ b/integrations/claude-agent-sdk/python/USAGE_GUIDE.md @@ -0,0 +1,369 @@ +# Claude Agent SDK é›†ęˆä½æē”ØęŒ‡å— + +ęœ¬ęŒ‡å—å°†åø®åŠ©ę‚Øåæ«é€ŸåÆåŠØå’Œęµ‹čÆ• Claude Agent SDK äøŽ AG-UI Protocol ēš„é›†ęˆć€‚ + +## å‰ē½®č¦ę±‚ + +1. **Python 3.9 ęˆ–ę›“é«˜ē‰ˆęœ¬** +2. **Anthropic API Key** - 从 [Anthropic Console](https://console.anthropic.com/) čŽ·å– +3. **Git** - ē”ØäŗŽå…‹éš†ä»“åŗ“ļ¼ˆå¦‚ęžœå°šęœŖå…‹éš†ļ¼‰ + +## åæ«é€Ÿå¼€å§‹ + +### 1. å®‰č£…ä¾čµ– + +```bash +# čæ›å…„é›†ęˆē›®å½• +cd integrations/claude-agent-sdk/python + +# åˆ›å»ŗč™šę‹ŸēŽÆå¢ƒļ¼ˆęŽØčļ¼‰ +python -m venv venv +source venv/bin/activate # Windows: venv\Scripts\activate + +# å®‰č£…åŒ… +pip install . +``` + +ęˆ–č€…ä½æē”Ø `uv`: + +```bash +uv pip install . +``` + +### 2. é…ē½® API Key + +设置 Anthropic API Key ēŽÆå¢ƒå˜é‡ļ¼š + +```bash +# Option 1: 使用 AUTH_TOKEN 和 BASE_URLļ¼ˆęŽØčļ¼‰ +export ANTHROPIC_AUTH_TOKEN=your-auth-token-here +export ANTHROPIC_BASE_URL=https://api.anthropic.com + +# Option 2: 使用 API Keyļ¼ˆåŽå¤‡ę–¹å¼ļ¼‰ +export ANTHROPIC_API_KEY=your-api-key-here +``` + +### 3. åÆåŠØęœåŠ”å™Ø + +#### ę–¹å¼ 1: ē›“ęŽ„čæč”Œē¤ŗä¾‹ęœåŠ”å™Ø + +```bash +cd examples/server +python fastapi_server.py +``` + +#### ę–¹å¼ 2: 使用 uvicorn + +```bash +# ä»Žé”¹ē›®ę ¹ē›®å½• +uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8000 + +# ęˆ–č€…ä»Ž python 目录 +cd integrations/claude-agent-sdk/python +uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8000 +``` + +ęœåŠ”å™ØåÆåŠØåŽļ¼Œę‚Øåŗ”čÆ„ēœ‹åˆ°ļ¼š + +``` +INFO: Started server process [xxxxx] +INFO: Waiting for application startup. +INFO: Application startup complete. +INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) +``` + +### 4. éŖŒčÆęœåŠ”å™Øčæč”Œ + +ęœåŠ”å™Øå°†åœØä»„äø‹ē«Æē‚¹ęä¾› AG-UI åč®®ę”ÆęŒļ¼š + +- **AG-UI 端点**: `http://localhost:8000/chat` +- **API 文攣**: `http://localhost:8000/docs` (FastAPI č‡ŖåŠØē”Ÿęˆēš„ę–‡ę”£) + +## 测试方法 + +### 方法 1: 使用 curl ęµ‹čÆ•ļ¼ˆåŸŗē”€ęµ‹čÆ•ļ¼‰ + +```bash +curl -X POST http://localhost:8000/chat \ + -H "Content-Type: application/json" \ + -d '{ + "threadId": "test-thread-1", + "runId": "test-run-1", + "messages": [ + { + "id": "msg-1", + "role": "user", + "content": "Hello! Can you introduce yourself?" + } + ], + "tools": [], + "context": [], + "state": {}, + "forwardedProps": {} + }' +``` + +### 方法 2: ä½æē”Øęä¾›ēš„ęµ‹čÆ•č„šęœ¬ļ¼ˆęŽØčļ¼‰ + +é”¹ē›®åŒ…å«äø€äøŖē®€å•ēš„ęµ‹čÆ•č„šęœ¬ļ¼ŒåÆä»„ē›“ęŽ„ä½æē”Øļ¼š + +```bash +# å®‰č£…ä¾čµ–ļ¼ˆå¦‚ęžœéœ€č¦ļ¼‰ +pip install aiohttp + +# åŸŗęœ¬ęµ‹čÆ• +python examples/test_client.py + +# äŗ¤äŗ’å¼ęØ”å¼ļ¼ˆęŽØčļ¼‰ +python examples/test_client.py --interactive + +# č‡Ŗå®šä¹‰ęœåŠ”å™Øåœ°å€ +python examples/test_client.py --server http://localhost:8001/chat +``` + +äŗ¤äŗ’å¼ęØ”å¼å…č®øę‚Øļ¼š +- č¾“å…„ę¶ˆęÆäøŽ agent åÆ¹čÆ +- å®žę—¶ęŸ„ēœ‹ęµå¼å“åŗ” +- 输兄 `quit` ꈖ `exit` 退出 + +### 方法 3: 使用 AG-UI TypeScript 客户端 + +å¦‚ęžœę‚Øęœ‰ Node.js ēŽÆå¢ƒļ¼ŒåÆä»„ä½æē”Ø AG-UI TypeScript 客户端: + +```bash +# å®‰č£…ä¾čµ– +cd apps/client-cli-example +pnpm install + +# 修改 agent.ts ęŒ‡å‘ę‚Øēš„ęœåŠ”å™Ø +# ē„¶åŽčæč”Œå®¢ęˆ·ē«Æ +pnpm start +``` + +### 方法 4: ä½æē”Øé›†ęˆęµ‹čÆ•ļ¼ˆå¼€å‘ęµ‹čÆ•ļ¼‰ + +é”¹ē›®åŒ…å«å®Œę•“ēš„ęµ‹čÆ•å„—ä»¶ļ¼ŒåÆä»„ē›“ęŽ„čæč”Œļ¼š + +```bash +# 从 python ē›®å½•čæč”Œę‰€ęœ‰ęµ‹čÆ• +cd integrations/claude-agent-sdk/python +pytest + +# čæč”Œē‰¹å®šęµ‹čÆ•ę–‡ä»¶ +pytest tests/test_integration_basic.py + +# čæč”ŒēœŸå®ž API ęµ‹čÆ•ļ¼ˆéœ€č¦é…ē½® API Key) +pytest tests/test_real_api.py -m integration +``` + +## 使用巄具 + +### 定义巄具 + +AG-UI å·„å…·ä¼šč‡ŖåŠØč½¬ę¢äøŗ Claude SDK ę ¼å¼ć€‚ē¤ŗä¾‹ļ¼š + +```python +from ag_ui.core import Tool +from ag_ui_claude import ClaudeAgent, add_claude_fastapi_endpoint +from fastapi import FastAPI + +# å®šä¹‰äø€äøŖå¤©ę°”å·„å…· +weather_tool = Tool( + name="get_current_weather", + description="Get the current weather in a given location", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state" + }, + "unit": { + "type": "string", + "enum": ["celsius", "fahrenheit"] + } + }, + "required": ["location"] + } +) + +# åˆ›å»ŗ agent å¹¶ę·»åŠ å·„å…· +agent = ClaudeAgent( + use_persistent_sessions=True, + app_name="weather_app" +) + +app = FastAPI() +add_claude_fastapi_endpoint( + app, + agent, + path="/chat", + tools=[weather_tool] # å·„å…·ä¼šč‡ŖåŠØč½¬ę¢ +) +``` + +### å®¢ęˆ·ē«Æå·„å…· vs ęœåŠ”å™Øå·„å…· + +- **å®¢ęˆ·ē«Æå·„å…·**: ē”±å®¢ęˆ·ē«Æę‰§č”Œēš„å·„å…·ļ¼Œé€ščæ‡ `ToolCall` äŗ‹ä»¶å‘é€ē»™å®¢ęˆ·ē«Æ +- **ęœåŠ”å™Øå·„å…·**: åœØęœåŠ”å™Øē«Æę‰§č”Œēš„å·„å…·ļ¼ŒåÆä»„ē›“ęŽ„åœØ Claude SDK äø­ę³Øå†Œ + +## é…ē½®é€‰é”¹ + +### åŸŗęœ¬é…ē½® + +```python +from ag_ui_claude import ClaudeAgent +from claude_agent_sdk import ClaudeAgentOptions + +agent = ClaudeAgent( + # ä½æē”ØęŒä¹…ä¼ščÆļ¼ˆęŽØčē”ØäŗŽå¤šč½®åÆ¹čÆļ¼‰ + use_persistent_sessions=True, + + # åŗ”ē”Øåē§° + app_name="my_app", + + # åÆé€‰ēš„ Claude SDK é…ē½® + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant", + permission_mode='acceptEdits', + max_tokens=4096, + temperature=0.7 + ), + + # ę‰§č”Œč¶…ę—¶ļ¼ˆē§’ļ¼‰ + execution_timeout_seconds=600, + + # ęœ€å¤§å¹¶å‘ę‰§č”Œę•° + max_concurrent_executions=10, + + # ä¼ščÆč¶…ę—¶ļ¼ˆē§’ļ¼‰ + session_timeout_seconds=1200, + + # ęø…ē†é—“éš”ļ¼ˆē§’ļ¼‰ + cleanup_interval_seconds=300 +) +``` + +### ę— ēŠ¶ę€ęØ”å¼ + +åÆ¹äŗŽē®€å•ēš„å•ę¬”ęŸ„čÆ¢ļ¼ŒåÆä»„ä½æē”Øę— ēŠ¶ę€ęØ”å¼ļ¼š + +```python +agent = ClaudeAgent( + use_persistent_sessions=False, # 使用 query() 函数 + app_name="stateless_app" +) +``` + +čÆ¦ē»†é…ē½®é€‰é”¹čÆ·å‚č€ƒ [CONFIGURATION.md](./CONFIGURATION.md)怂 + +## ē›“ęŽ„ä½æē”Ø ClaudeAgentļ¼ˆäøé€ščæ‡ FastAPI) + +ę‚Øä¹ŸåÆä»„ē›“ęŽ„ä½æē”Ø `ClaudeAgent` ē±»ļ¼Œę— éœ€åÆåŠØęœåŠ”å™Øļ¼š + +```python +import asyncio +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage +from claude_agent_sdk import ClaudeAgentOptions + +async def main(): + # åˆ›å»ŗ agent + agent = ClaudeAgent( + use_persistent_sessions=True, + app_name="demo_app", + user_id="demo_user", + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant." + ) + ) + + # åˆ›å»ŗč¾“å…„ + input_data = RunAgentInput( + thread_id="thread_001", + run_id="run_001", + messages=[ + UserMessage(id="1", role="user", content="Hello!") + ], + context=[], + state={}, + tools=[], + forwarded_props={} + ) + + # čæč”Œå¹¶å¤„ē†äŗ‹ä»¶ + async for event in agent.run(input_data): + print(f"Event: {event.type}") + if hasattr(event, 'delta'): + print(f"Content: {event.delta}") + +if __name__ == "__main__": + asyncio.run(main()) +``` + +## ꕅ障ꎒ除 + +### 1. API Key 错误 + +å¦‚ęžœé‡åˆ°č®¤čÆé”™čÆÆļ¼š + +```bash +# ē”®äæč®¾ē½®äŗ†ę­£ē”®ēš„ēŽÆå¢ƒå˜é‡ +echo $ANTHROPIC_API_KEY # ꈖ +echo $ANTHROPIC_AUTH_TOKEN + +# å¦‚ęžœęœŖč®¾ē½®ļ¼ŒčÆ·č®¾ē½®ļ¼š +export ANTHROPIC_API_KEY=your-api-key-here +``` + +### 2. ē«Æå£č¢«å ē”Ø + +å¦‚ęžœ 8000 ē«Æå£č¢«å ē”Øļ¼š + +```bash +# ä½æē”Øå…¶ä»–ē«Æå£ +uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8001 +``` + +### 3. 导兄错误 + +å¦‚ęžœé‡åˆ°åÆ¼å…„é”™čÆÆļ¼š + +```bash +# ē”®äæå·²å®‰č£…åŒ… +pip install -e . + +# ę£€ęŸ„ Python ē‰ˆęœ¬ +python --version # åŗ”čÆ„ę˜Æ 3.9+ +``` + +### 4. čæžęŽ„č¶…ę—¶ + +å¦‚ęžœé‡åˆ°čæžęŽ„č¶…ę—¶ļ¼š + +- ę£€ęŸ„ē½‘ē»œčæžęŽ„ +- 甮认 Anthropic API ē«Æē‚¹åÆč®æé—® +- ę£€ęŸ„é˜²ē«å¢™č®¾ē½® +- å¢žåŠ č¶…ę—¶ę—¶é—“é…ē½® + +## 下一歄 + +- šŸ“– é˜…čÆ» [ARCHITECTURE.md](./ARCHITECTURE.md) äŗ†č§£ęž¶ęž„č®¾č®” +- āš™ļø ęŸ„ēœ‹ [CONFIGURATION.md](./CONFIGURATION.md) äŗ†č§£čÆ¦ē»†é…ē½®é€‰é”¹ +- 🧪 čæč”Œęµ‹čÆ•å„—ä»¶éŖŒčÆåŠŸčƒ½ +- šŸ”§ ęŸ„ēœ‹ [README.md](./README.md) äŗ†č§£ę›“å¤šē¤ŗä¾‹ + +## å‚č€ƒčµ„ęŗ + +- [AG-UI Protocol 文攣](https://ag-ui-protocol.github.io/ag-ui/) +- [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python) +- [FastAPI 文攣](https://fastapi.tiangolo.com/) + +## čŽ·å–åø®åŠ© + +å¦‚ęžœé‡åˆ°é—®é¢˜ļ¼š + +1. ęŸ„ēœ‹ [IMPLEMENTATION_PLAN.md](../IMPLEMENTATION_PLAN.md) äŗ†č§£å®žēŽ°ēŠ¶ę€ +2. ę£€ęŸ„ęµ‹čÆ•ē”Øä¾‹äŗ†č§£ę­£ē”®ē”Øę³• +3. ęŸ„ēœ‹ GitHub Issues ęˆ–åˆ›å»ŗę–° Issue + diff --git a/integrations/claude-agent-sdk/python/examples/README.md b/integrations/claude-agent-sdk/python/examples/README.md new file mode 100644 index 000000000..5c7b2c99b --- /dev/null +++ b/integrations/claude-agent-sdk/python/examples/README.md @@ -0,0 +1,45 @@ +# Claude Agent SDK Integration Examples + +This directory contains example implementations of the Claude Agent SDK integration with AG-UI Protocol. + +## Quick Start + +1. Install dependencies: +```bash +cd examples +pip install -r requirements.txt +# Or using uv: +uv pip install -r requirements.txt +``` + +2. Set your Anthropic API key: +```bash +export ANTHROPIC_API_KEY=your-api-key-here +``` + +3. Run the example server: +```bash +python server/fastapi_server.py +# Or using uv: +uv run server/fastapi_server.py +``` + +4. The server will be available at `http://localhost:8000/chat` + +## Example Usage + +The example server demonstrates: +- Basic Claude Agent configuration +- FastAPI server setup +- AG-UI Protocol endpoint integration + +## Notes + +This implementation is a template based on common patterns. You may need to adjust: +- Claude SDK client initialization +- Message format conversion +- Tool handling +- Session management + +Refer to the Claude Agent SDK documentation for actual API details. + diff --git a/integrations/claude-agent-sdk/python/examples/pyproject.toml b/integrations/claude-agent-sdk/python/examples/pyproject.toml new file mode 100644 index 000000000..5f8dbf538 --- /dev/null +++ b/integrations/claude-agent-sdk/python/examples/pyproject.toml @@ -0,0 +1,11 @@ +[project] +name = "claude-agent-sdk-examples" +version = "0.1.0" +requires-python = ">=3.9" + +dependencies = [ + "ag-ui-claude", + "fastapi>=0.115.2", + "uvicorn>=0.35.0", +] + diff --git a/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py b/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py new file mode 100644 index 000000000..9db541feb --- /dev/null +++ b/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py @@ -0,0 +1,97 @@ +"""Example FastAPI server for Claude Agent SDK integration.""" + +import os +from pathlib import Path +from fastapi import FastAPI +from ag_ui_claude import ClaudeAgent, add_claude_fastapi_endpoint + +# Load environment variables from .env.local if it exists +try: + from dotenv import load_dotenv + env_path = Path(__file__).parent.parent.parent / ".env.local" + if env_path.exists(): + load_dotenv(env_path) + print(f"āœ… Loaded environment variables from {env_path}") +except ImportError: + # python-dotenv not installed, skip + pass + +# Claude Agent SDK will use ANTHROPIC_API_KEY from environment if not provided +# No need to explicitly pass api_key unless you want to override + +# IMPORTANT: Claude Agent SDK requires @anthropic-ai/claude-code CLI tool to be installed. +# Install it with: npm install -g @anthropic-ai/claude-code +# Or set the path via ClaudeAgentOptions(cli_path='/path/to/claude') + +# Try to find claude CLI path automatically +import shutil +import os + +# Try multiple ways to find claude CLI +claude_path = shutil.which('claude') +if not claude_path or not os.path.exists(claude_path): + # Try common locations + home_dir = os.path.expanduser('~') + possible_paths = [ + os.path.join(home_dir, '.claude', 'local', 'claude'), + os.path.join(home_dir, 'node_modules', '.bin', 'claude'), + '/usr/local/bin/claude', + '/opt/homebrew/bin/claude', # macOS Homebrew + ] + for path in possible_paths: + if os.path.exists(path): + claude_path = path + break + +# Log detected CLI path for debugging +if claude_path and os.path.exists(claude_path): + print(f"āœ… Detected Claude CLI at: {claude_path}") +else: + print("āš ļø Claude CLI not found. Please install with: npm install -g @anthropic-ai/claude-code") + +from claude_agent_sdk import ClaudeAgentOptions + +# Example 1: Using persistent sessions (ClaudeSDKClient) - RECOMMENDED +# Supports multi-turn conversations, interrupts, hooks, custom tools, etc. +# See: https://docs.claude.com/zh-CN/api/agent-sdk/python#在-query-和-claudesdkclient-之闓选择 +agent = ClaudeAgent( + use_persistent_sessions=True, # Use ClaudeSDKClient for full features + app_name="example_app", + claude_options=ClaudeAgentOptions( + system_prompt="You are a helpful assistant", + permission_mode='acceptEdits', + cli_path=claude_path if claude_path and os.path.exists(claude_path) else None # Auto-detect CLI path + ) +) + +# Example 2: Using stateless mode (query()) - limited features +# Only supports single-turn conversations, no hooks, interrupts, or custom tools +# agent = ClaudeAgent( +# use_persistent_sessions=False, +# app_name="example_app", +# claude_options=ClaudeAgentOptions( +# system_prompt="You are a helpful assistant", +# cli_path=claude_path if claude_path and os.path.exists(claude_path) else None +# ) +# ) + +# Create FastAPI app +app = FastAPI(title="Claude Agent SDK Example") + +# Add CORS middleware for CopilotKit integration +from fastapi.middleware.cors import CORSMiddleware +app.add_middleware( + CORSMiddleware, + allow_origins=["http://localhost:3000", "http://localhost:3001"], # Add your frontend URLs + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Add AG-UI endpoint +add_claude_fastapi_endpoint(app, agent, path="/chat") + +if __name__ == "__main__": + import uvicorn + uvicorn.run(app, host="0.0.0.0", port=8000) + diff --git a/integrations/claude-agent-sdk/python/examples/test_client.py b/integrations/claude-agent-sdk/python/examples/test_client.py new file mode 100644 index 000000000..9fa1b0e45 --- /dev/null +++ b/integrations/claude-agent-sdk/python/examples/test_client.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +"""Simple test script for Claude Agent SDK integration.""" + +import asyncio +import aiohttp +import json +import sys +import os + +# ę£€ęŸ„ēŽÆå¢ƒå˜é‡ +if not os.getenv("ANTHROPIC_API_KEY") and not os.getenv("ANTHROPIC_AUTH_TOKEN"): + print("āŒ 错误: 请设置 ANTHROPIC_API_KEY ꈖ ANTHROPIC_AUTH_TOKEN ēŽÆå¢ƒå˜é‡") + print("\n示例:") + print(" export ANTHROPIC_API_KEY=your-api-key-here") + sys.exit(1) + +SERVER_URL = os.getenv("AG_UI_SERVER_URL", "http://localhost:8000/chat") + + +async def test_basic_conversation(): + """ęµ‹čÆ•åŸŗęœ¬åÆ¹čÆåŠŸčƒ½""" + print(f"šŸ“” čæžęŽ„åˆ°ęœåŠ”å™Ø: {SERVER_URL}") + print("=" * 60) + + url = SERVER_URL + + payload = { + "threadId": "test-thread-1", + "runId": "test-run-1", + "messages": [ + { + "id": "msg-1", + "role": "user", + "content": "Hello! Can you introduce yourself in one sentence?" + } + ], + "tools": [], + "context": [], + "state": {}, + "forwardedProps": {} + } + + try: + async with aiohttp.ClientSession() as session: + async with session.post(url, json=payload) as response: + if response.status != 200: + print(f"āŒ 错误: HTTP {response.status}") + text = await response.text() + print(f"å“åŗ”: {text}") + return + + print("āœ… čæžęŽ„ęˆåŠŸ! ē­‰å¾…å“åŗ”...\n") + print("šŸ¤– Assistant: ", end="", flush=True) + + # čÆ»å– SSE 굁 + buffer = "" + async for chunk in response.content.iter_chunked(1024): + if chunk: + buffer += chunk.decode('utf-8') + lines = buffer.split('\n') + buffer = lines[-1] # äæē•™äøå®Œę•“ēš„č”Œ + + for line in lines[:-1]: + line = line.strip() + if line.startswith('data: '): + data = line[6:] # 移除 'data: ' å‰ē¼€ + try: + event = json.loads(data) + event_type = event.get('type', 'unknown') + + # å¤„ē†ę–‡ęœ¬å†…å®¹ + if 'delta' in event: + print(event['delta'], end="", flush=True) + elif event_type == 'TEXT_MESSAGE_END': + print("\n") + elif event_type == 'RUN_FINISHED': + print("\nāœ… åÆ¹čÆå®Œęˆ!") + elif event_type == 'RUN_ERROR': + print(f"\nāŒ 错误: {event.get('error', 'Unknown error')}") + + except json.JSONDecodeError: + pass + + print("\n" + "=" * 60) + + except aiohttp.ClientConnectorError: + print(f"āŒ 错误: ę— ę³•čæžęŽ„åˆ°ęœåŠ”å™Ø {SERVER_URL}") + print("\nčÆ·ē”®äæ:") + print(" 1. ęœåŠ”å™Øę­£åœØčæč”Œ (python examples/server/fastapi_server.py)") + print(" 2. ęœåŠ”å™Øåœ°å€ę­£ē”®") + print(" 3. é˜²ē«å¢™å…č®øčæžęŽ„") + except Exception as e: + print(f"āŒ 错误: {type(e).__name__}: {e}") + + +async def test_interactive_mode(): + """äŗ¤äŗ’å¼ęµ‹čÆ•ęØ”å¼""" + print(f"šŸ“” čæžęŽ„åˆ°ęœåŠ”å™Ø: {SERVER_URL}") + print("=" * 60) + print("šŸ’” ęē¤ŗ: č¾“å…„ę¶ˆęÆå¹¶ęŒ‰ Enterļ¼Œč¾“å…„ 'quit' 退出") + print("=" * 60) + + thread_id = f"interactive-{os.getpid()}" + run_counter = 0 + + try: + while True: + user_input = input("\nšŸ‘¤ You: ").strip() + + if not user_input: + continue + + if user_input.lower() in ['quit', 'exit', 'q']: + print("\nšŸ‘‹ å†č§!") + break + + run_counter += 1 + url = SERVER_URL + + payload = { + "threadId": thread_id, + "runId": f"run-{run_counter}", + "messages": [ + { + "id": f"msg-{run_counter}", + "role": "user", + "content": user_input + } + ], + "tools": [], + "context": [], + "state": {}, + "forwardedProps": {} + } + + async with aiohttp.ClientSession() as session: + async with session.post(url, json=payload) as response: + if response.status != 200: + print(f"āŒ 错误: HTTP {response.status}") + continue + + print("šŸ¤– Assistant: ", end="", flush=True) + + buffer = "" + async for chunk in response.content.iter_chunked(1024): + if chunk: + buffer += chunk.decode('utf-8') + lines = buffer.split('\n') + buffer = lines[-1] + + for line in lines[:-1]: + line = line.strip() + if line.startswith('data: '): + data = line[6:] + try: + event = json.loads(data) + if 'delta' in event: + print(event['delta'], end="", flush=True) + elif event.get('type') == 'RUN_ERROR': + print(f"\nāŒ 错误: {event.get('error', 'Unknown error')}") + break + except json.JSONDecodeError: + pass + + print() # ę¢č”Œ + + except KeyboardInterrupt: + print("\n\nšŸ‘‹ å†č§!") + except Exception as e: + print(f"\nāŒ 错误: {type(e).__name__}: {e}") + + +def main(): + """主函数""" + import argparse + + parser = argparse.ArgumentParser( + description="测试 Claude Agent SDK 集ꈐ", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +示例: + # åŸŗęœ¬ęµ‹čÆ• + python test_client.py + + # äŗ¤äŗ’å¼ęØ”å¼ + python test_client.py --interactive + + # č‡Ŗå®šä¹‰ęœåŠ”å™Øåœ°å€ + python test_client.py --server http://localhost:8001/chat + """ + ) + + parser.add_argument( + '-i', '--interactive', + action='store_true', + help='åÆē”Øäŗ¤äŗ’å¼ęØ”å¼' + ) + + parser.add_argument( + '-s', '--server', + default=SERVER_URL, + help=f'ęœåŠ”å™Øåœ°å€ (默认: {SERVER_URL})' + ) + + args = parser.parse_args() + + global SERVER_URL + SERVER_URL = args.server + + if args.interactive: + asyncio.run(test_interactive_mode()) + else: + asyncio.run(test_basic_conversation()) + + +if __name__ == "__main__": + main() + diff --git a/integrations/claude-agent-sdk/python/pyproject.toml b/integrations/claude-agent-sdk/python/pyproject.toml new file mode 100644 index 000000000..1a9e4f4c5 --- /dev/null +++ b/integrations/claude-agent-sdk/python/pyproject.toml @@ -0,0 +1,33 @@ +[project] +name = "ag_ui_claude" +version = "0.1.0" +readme = "README.md" +authors = [ + { name = "AG-UI Contributors" } +] +requires-python = ">=3.9, <3.14" +dependencies = [ + "ag-ui-protocol>=0.1.7", + "claude-agent-sdk>=0.1.0", # Adjust version based on actual availability + "fastapi>=0.115.2", + "pydantic>=2.11.7", + "uvicorn>=0.35.0", +] + +[build-system] +requires = ["uv_build>=0.8.0,<0.9"] +build-backend = "uv_build" + +[dependency-groups] +dev = [ + "black>=25.1.0", + "flake8>=7.3.0", + "isort>=6.0.1", + "mypy>=1.16.1", + "pluggy>=1.6.0", + "pytest>=8.4.1", + "pytest-asyncio>=1.0.0", + "pytest-cov>=6.2.1", + "python-dotenv>=1.0.0", +] + diff --git a/integrations/claude-agent-sdk/python/pytest.ini b/integrations/claude-agent-sdk/python/pytest.ini new file mode 100644 index 000000000..774833a2b --- /dev/null +++ b/integrations/claude-agent-sdk/python/pytest.ini @@ -0,0 +1,15 @@ +[pytest] +# Configure pytest for the Claude Agent SDK middleware project +pythonpath = src +testpaths = tests +python_files = test_*.py +python_classes = Test* +python_functions = test_* +asyncio_mode = auto +addopts = --tb=short -v +filterwarnings = + ignore::UserWarning + ignore::DeprecationWarning +# Exclude optional real API tests if API key is not available +norecursedirs = .git __pycache__ .pytest_cache + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__init__.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__init__.py new file mode 100644 index 000000000..0e61a9c87 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__init__.py @@ -0,0 +1,19 @@ +"""Claude Agent SDK integration for AG-UI Protocol.""" + +from __future__ import annotations + +from .claude_agent import ClaudeAgent +from .event_translator import EventTranslator +from .session_manager import SessionManager +from .endpoint import add_claude_fastapi_endpoint, create_claude_app + +__all__ = [ + 'ClaudeAgent', + 'add_claude_fastapi_endpoint', + 'create_claude_app', + 'EventTranslator', + 'SessionManager' +] + +__version__ = "0.1.0" + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/__init__.cpython-311.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..058e2f3eb4f75fcce16bf7e42b00b0199c3d067d GIT binary patch literal 754 zcmZvZPm9zr7{-&%zs_`LXGQelr3fAd>2$p8Nrc4}5mAJ3J@gVnlc`zLq$KI!>}hX) z1n*wNk0E}69*3S5Jnd~@Z+j5a%#J!>`ttBLd3l~+)33wf0NC~YSBw3C0Q_uTw#(Zz z@ammyJ_7<0Kp^or%)P{efV4=PxAJz~eV6xgKk;4PWV@4-O($vH_i%J&%bMHFdP)3e2(&R&2EX{i< zVy#j;j!JfOB{4!wFoV#fSYG>&b4f~0pQt-Fx%nshla+M~Lbw8l6*#;A_p9By01v9& nT7jtAtrd7!?bZq$SO2SZyBm0Gu$A-P`T&gXo(IjNZd;b$=yc*; literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/__init__.cpython-312.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa752387993930681a2d454fb98644e7ebb4fb48 GIT binary patch literal 654 zcmYk3KX2497{=|~zucwQD?+faL`WS@D3|NPgpewV5JDiNwo8^*R_qHdjvd*~iR%QP zf}M?zff)G&M5-82hi(k#R#xRo%r07}DQ+Sn zrLum_TsU$+TZj29w=#LUbfHI@NF#_<+KsjknK3T;C6T0HdKxtM2&IsF2v`tfNyULl zS}DiT+{!g0mTlgXs+#t6&z0%0m0>IWRt8Q^d-K`eZ2oGx-3$Pz$^n`Yz@oObW&pb5 zcABl5D%UQpk7{;UiwX8Gr;ltVW{nEvn$>qS;fC!WLEA=zaBUI5lIiyQ06wED*N3io zdTiV*eaB^S!ik)%%5-URMOjj5b;5F+k|L>j`ro~qbWNFf%EZvOX|=L%luV7z-8$6# z=1NikF1ZDmRjcdpQK@Jx*kgUiHMjr7>^iyZV2r<`hv(@2Iodr#$r*a^10DS8_M_na P;Bp5|?tX~$ZMXRcvwp($ literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/claude_agent.cpython-311.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/claude_agent.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02246a3b33f18e8c7902e235de90b0be0bcf5378 GIT binary patch literal 38677 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 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/claude_agent.cpython-312.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/claude_agent.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..578b6593936bee18ef11b28f9342b56f7b627078 GIT binary patch literal 34269 zcmdVD3v?UTnI>2T6kY^CfCNZ_;H&r&2|h*YL5Z>+q^P$<$s*<0jNJ@HKr$&llmcj( zY|!mh+&xSm&4iln)0Q`x37yVNl(A=(;INu6zIc|KI)ZkN2IWyr$Qd*g(4$ja`vAsf5r z4dt=BeaLR37{Y{O(mCXu%pc01bPc&C-9zrlf}w)R!lA-R&yZ)*JLH`#8Y<#B7TYvY zGU*%gO_mOoPWp$+Cd-G)Co6_3CM$=k5L2A29;%+K8LFAA9jcwI8>*YEAF4+^%t6b< zrpbn(2IjX;G)@MF0?colXqs#uYUViu7s?xdT5D|j9%_99?WJp|&A=Vvf_blSLHip9 zHLQKsSj&Zq>p02CbI)*B1}r%#NGO^N#_ zMrMMcp7Wuph&VQRaUwJc-$-O^dP+PuEs1BPvEcc!sqJ$7lCT6LoQWiDy(8h!ffrDrq>bGMXD^15E<_rLj7X7C zP9`c&HGS3PS@Mw(tBZivSeGX(h|qYXnp z*S}y_&=?Xzrcxvg3L$gQq(7PAv#@XreAbZdJRdThGf)T%wdyf#Ip61nEI~W|9QbqM zFCVe;DCId{(DjOG$R2cuY{3HLDFh2&5r!NY&mKHG)#v<>D`-&4MNBW=xYaiWYJNhn z2%&|T+&kEtVw9x5V>K-Zna`PnB`DLw-utw-C_OWGbFdWocv&2OMx26B5v#X3Scdn- zK?DAkf5*V$Rj{(ydsbHEhO#qDum-DMF%Omeo;mo=S%V_dmC_ds?qua!LneGHQ?NSZ zAK$Ki_l#Tc3+i>w5v)Oflm}}!)K~jTLa+|4tzf-cAIb}ELTL?%&AuV)xk~-JSc8qo ztqT1gK&+;WSb6CAX1o(wJ}r8$uCE`B19PwyF{^`ZA>X<$BLv$~mzv;aS{6=USqN^ybDjDugo;9lnI5xvzZLK6gWF!=hBgJa!)=%~1iF*<42m#v4)gKE zSTHydx-=q%#K^QlK0{xQc;<k|XM*4u!?Dp~$6BXiAJcuVr{qqsAek zkw`KX)MzqjmMDe77pJGfp>PY!b&^N{k#d9(X$ZH7AXAZ03rk12PK=!kjn0lvgv9A{ zT1KoI;kI<;`llnIZjn`S-FiWl7C}`nf(V7gv!LBU5zENv^yDON7e^wIkTj)c)e{__ z2}jbAMn)quBNJMoJ*@52hMrSL#NhPkjJ_%5M;fo=Oh%S0z zSZiIN)p{0`}FAk%u(HTji%IWFDNgw)oWNPN(@Yodk<%N+6y;k|7Y)u}X zW{YTe)R{3o&G6gtw+5a8lsamZoKcfxkEm<{XfgkW>c7lK&3J3cdTYpd%SX9kJzdm* zCzY|_xTxdhtr04VT~a~BqWOc?F)r%-KL1ZBwZ@ilQ*}XO=5vIxa+GE~v-WBxK|!kp z&rMmPj?9$jIXvm5MJZRSR(8~cC!79c#*3pFDMB|1hTL z@Ua8Wh@q($#1}@SKvw3DnVj9?8RVhltFu>(;Y`ou3_1lylyO;&0TzdmtqD-EtfI8J z+$|D=Gd7BbU7Q#jRd`vV11v4LKoCac7LMdjo}TXA;=!4zQN{{`l&chiaur!_!CBmp z|HQ&XtWY*!{~+c()0`# zHN8sN`8|$;c8f<;nyN3F>IxvLNkq2HtOXfW_GBFckVqnrbtg#C|%0CysAbF@dE|i%$43g%F z>GKevk`{c{DR588{NZ5e+z6z^VH)M(qUM(Fc_7w7eYv<3Upv((hu4kPdZrz^+y*n$mB)9 zL6Hsfg$WIF4(8M{ZmOf-1IrZeQ z?@H^SL`$F)Ag76(W^!7{p|38r!AUyRu2v>Rm=<8RAnDF$lkI0P7{cu@qT|QMMyA?k zC)-~Lk4^_et>AsfL!*)Qk@KxHW9`I4od=jeY;F7c0oQ(UHuC)RRC`z&MfBmBG4&g( z5r^5xY`Zv%QG$LSiwqCXdH1Jbkv1)~8x;)uz%jkdJ$Q=e9A4Sibic4XR`JwI;a6gg zul&+pD3>&{kinJ0Gcm`Rl$k3P7lbR$MC0BC;hwb~0SYVTZH_HbMa}7XJrYBwqrI&DqViA#%#EVjBG!zVhxVOzYGDlFrAkl}HcES0fK{`VI zemG&OiYQ9QaKl`qNvlzSxzeoRllkg3O1Txz%iOBn6}O9b?P9`H68AL9p2nD?G2twT zJL~T{>ses4>}kG!V8zoJb9AnHs-+W1n7c#&6mR~Y?9d<|<;TH$uD^&y9pKQ}o3zd* zdPh7@?!HbsBF|&-3@XGhV3eLfj?!*8Nt^m+EGRvR=dAvAu>Mv_>6~vvcdKu{N9p#% zQG2`UuDyzNY=i7+h&dWqZ`a***0I1Q+0%4=+lr?n=IB^0s$Q!9LHq0NvFgs4XG_en zWn<@)lw!mvSo>cw`i^nD@&R;-3UAdbJrchG`Ror7`!5Wy8vn#(;^qxeLs0habD0%@P4Th_$!@gGg7X&(dQzog$OZ~jU&>X0_0?`audca7^3bNWTp3<9Fd>-oE*(c5TD`QVcyU^ad?_)Ut(pX^Y3QDWayE*Tc^Y^0%vfk5xK5N; zHfh$uf_jR6iAH}?kfyN_BTxmU3It%cz)26olVCK#3x$&gpkKBTZ5xB$tFMO7jzmVE z57?7lh5iCu3{9oed5OoBBEwUmOKD~@X`Bd6NvEk~3syp)fKt+ol`=FHOjZs*56p5R zq;RUhD~YWR&zzkcV+f_Rmr|8Xjz|~uLWa@0QB*V(l+MswV>lEExYNsW(lxWLRwjmy z5?c}sy@>T@Is&XsiNu)Jq(w#NB-(*X=CQtD4V9jwfFivov`TSa&;QfS4~vS3}!_bg7V`$Z!k@mh+Ss(1ha9g>+%0Z;^V0Gk-JFrTPTYAR_LZ-$v_BjB+PS;!=Mvt^xVK*R z)-O#jhvZF9-1F{EcuTK6dG+Yxfs~0WDSvF@mG*O}XkBBx_MlvQ5Q!2sEl5#!h+pH3 zb%mdDLV=hf=UP4Dm5G0T4D4x3+oChEWn0W$uehsUP&=`G*(8hG7mwVpZ@K==4f9Q5 zrT)NT|F5bWua_?O-Kbls-n)48qmt@GS>XCt@0RUIly}6-cgW>CZusw&_a%I-ao<+i zw{>~wo^Ri3N&WS*yCqu_zWTVYMfM@Xd%mt!y|rau(Aozg=M5yhzPL9adjoNAkL>M9 z_{4;-;=8WbT=#utvGR@;U*{(lp{V$QgY#A=8k*w``{agwH;ZCVjm8@GtuzGjv5V^P zv5V@ig%Xvu-?66v?Yg{+6Tir>NtJPBJ^Z7T6+_`stZMJ7qcBy64t(^0Iy7~VN2-Uh zhTv!6D;Q>%iw<>wuQ((M*Gk~~E8);4!@uDV)tdjt2;Yx-od|r(A0Bj|I1Pt-_&p!@CatP^pjf`G*Kh_Sky)$ z;`1XAkO<0|4PkqR_M3D%#~`W*?M^pSF8aw^$ito7v=W2b!g6n=s)spE4`LE}%l(c`$2{xjyrQ%Y_^}1zYrF7fE(T`lE z*T%1(kSlk7jg*yOCrEv$p z4_5`Ajjg3e2%@KrSs+=X7j({uhQ~U#p<7fCSRk~323oO+iImvTRHEsVCMyg5L77?W zn6p7?CZseHjryE+wTK5tCa^mK3^ycQ8ViT?Z2J%X`ak1he2Vl8z9{5n8p}z`^CMwm ztk@gCt2#)*MnuvvF%phwb1zI|f*P!_8~)+3@MGAoxlLJe^<(3i@d?AkJ1NXbIoGy3 z)_VB0_SoRl@xe)Xa56R(UKxzU`y&gkk6e`rk1tWOX-Sexnid?tauqK|m!4X2wcK?b zUoMY#^vWH*H_yo($79yxDLZ$PpW#0X6XCmD+GF9r&G(pu?=-$|e)hkFVM~)RDdwVV|;$>{?IkY^|cL;{UnW}Ibi+hN9YD-z0vS*7d* zy@<_pQWel4=C=O1uECtskO4c`RL{&WtS%LV?1*!<{nP7T(xwiS&(f1Q>FPf@Jb3ct z@!``42F@HG9QdITA_~;Kq&aj|QXtIthX&%_A*d*o4m0*VU`-Z5*kHT&nd3MtK`aFr z86q_>WkDjzRHF4cX*+$UfB3-Z(Da*2 z@qx4Qz}eX8(O7Blo+EU>uB7Os37qLk--%9(7w6gi9ai0<)SIhLyBeEs~xln;RqA5f%643xZF z+?&T=<9h|+wVrZ#Z*3ELt%h4W`Cha6R=1J-yR8VnZRX*>Z8gB3EKG|z8W)f?FKPW{ zYtT#jyd2}eW##0Lz!#k&*e7Fc5de><^D)d{aYuz*D+}IKye`goKcQBJ5IG* zcVUK^#`D$%;*p@qD-8m7<+Q+o*E2^AIcuxa7PYoH=RB>0crRj|%)!+~bRG^s7$6yK zwg+_p3;dyZoOZ0%UBod4E#J{0KyZbqZPcuCeb%|o1Ik=cW~BDP6m%8~&X~kDw=seB z9ql$%Bxd`$>9t3lixdiZ7z#NvQx~SDFHHpuKyGQ4(k3~Zy@5O_jA}~r&zdu7Z4ZF1D_|Vn5+z{{VTj}ge zR5!+}x5(97KIZs>qx|BLMCUHNkvse1ok!%(Ba0`N0zYVZz2&aA{eh8Uq)e0*W@n%| zW-U#W1U}}>HjkFI`9oL3^+SJk{D;SH99(JXO_T@X<*jmg>zn77&)<0IPGqHRF!t2& zO8M6oZ3%aE+}$X<8xz${*cf_XGBy?dhBFp;QWj*0oga5~%ql(#m!nCSD|>hIuRGxU zcRe<^w|2PT-nMRoEB!GdC}fa85M2b;{iOM{Z;pA=poJmlHqEc+9LSwMY6UD&h7vop z6zO~J6zLM9Hf=UvnPDhr3rUm!tWDdCHdx z+TPR;y*=xn=M=ni*Z=?ZUe;&Xf5l$T=!;8S zRxj(NW%ja0#gx8g06_j+`vC3Ii6bKR=``J5UC>u00TT7K-AkZMB)=*9ZD#C75x+lI zl|yAy&m}B2&e;OM>_}xSIJf;PBT#n)o=i4sv1%@1)da0;02 z*z`;|4MgY>gGx=AeBUiHe)ZtsoR8`IiNF@9ae95A638d5p%+J?;B{^q2d17ru>Z{9 zk&_wC6GEltdV8(he9+YpV)T1Vd+M&I9cj317fDw--l4Oz%HgrtYSu^{1^mIqwfZ z#}qlw{UmQY!2hbSngK6Oa#2&lU-jMg*V;++i(ZXp05JI+K>w0vxup41&gwkPKVa^C zPw`?TUeYF)w5@pBm$$~Z9Fn&jy6ZWV@K?tDJ7oWk6@Pc!+a2?E(|+vMcv+`h*11x$ zWjPY>Iwp4=yIXSXeq~dla`%m3e9vil&*|9if!M&avGV8EjD{+IiZhh@vH!WLDPI4C zT>nJ8exF>A4Z(M-ZdI++KN)k^d|E)YQR`I9xocugPsE!J-)%Zf8itOmj#$;1*i&DP zKNXUn3dPQxi&dPz=YBqAFczHV6aJRCzeDzS#JwFcZwKU3>?~LAkt_EkurW~)NK`fh zU#i**e5ooQJF=zu3rA9!9l<*fpd-jl?CM(-;_e37-EiIXSFRtrWcQ9wp)q&>RU;Q| zsH|P+Pn1_KoM8LcopM#@^3Ij2-Bfk#U&C1p-S<>n3*D>VcF(gtQ6E_BPk5{2-bUHm zc)chd*d+&c-Sa;2D<#g3d!C&)Lh(JPo`{Zw-28p+y zrL5?UN2z>j+aub2Kfpg!TB^88uY8uuN4p-zs&+rXr>RVoRmIC%<+9f6p_Q_&i&i#B znq@yJ|M@!?Es44gD*SnV@i=?6P4;hF4*h8QucvQDV`rX=4WC=_pO1Ub-}RoSYCO+> zV&y!wZ0t76Ma?p1(QxDp7kK}xd#~mhs=SJ0aG^#V%O{2>S0` zf9sOP!$3${HZLBzhmG*YmUv^I+}L;X%)7(4hF2QT#B0vPYR)Vk`>1SF0x)O!7P)-O z@_`?n{Ogmk^1e@Gne^+V*ZsLohqpG_5$UZC{&2nUR_9ju-)?Xn;kmcB^N05cZ+8jg z-&KO}9~bgRHVZ%Yc*)XOWoq|&GHwi~whIiWd zqfYZX?MCu<_O#)}of;km->K)x-)KI(%W|iUKiuKC({3UEb}NPN;Zg8=yzNM<@x46X zkw)WtHD-jr*Jz@UR)PFmD2Mm9Gk1siXrAT0J^WGL@!nnw{68^U@b)K89tHoz)kC#= z-_IYbFuz~c4gXJz_){YH(_-6+X5&w*dJHEv89%5tA?SlmCIo%ZY$Si18~ymf9=@M9 zf3R18|7XUYl2dl$&;9(#3iHp)D#^doju$b3KV=bOCNuf%=2I1xSOI^^>xdOv$X{xq zaIs*(V~ln1r?%$BItB7??=?R432`ErBSn7n#~&01TDy%8&MhZ;g`_#%qS}d z)`k*jYh>L8M8yOoL}0iI|Aq>nYw`s2MAPaE7Vze|BpTsOU8zA=J?K(6Pz8NWb7{o3 zrMaD4oT!o$%Fy z&vEC0#@nz#L?8ch&(5A*JZtS}reZNc!fa^YLFoFStq)@h0KS|m{JC~nA0z5v_Y-e& z3}Ar8VBhG{VLv7;5yA&o6+3!jbXKz1(JI;ca&=nrAMC|wuL7b($wI>ejn_$=*6rFWn;Vz9nW zk1GW_PAc@iF~ux2x90O0)Kv?p%O268WE|MFWN1e@q7Lkyd7#itN2bKM>r-=w8V-?h~1+Ygu^_v`@d zxBhxuEwvFcpO3tn*Qdg`%a1zsIHYVYAzluESUQLB_8jS5I0CIhXc2$!|%3MEljd1xZf6v^1 z$=m?oYACc{`8NJufdcz4wsTW9_$TqV7k`Zin)wh;hM=V>$QaWwDCQr3tLf=9htUk2@up|x4x=nC=$QKj04xn6q~rft3|fmAnjDKLdP0f;65x1@6U(8RH+Zt| zB+g}P7N)+G<&ShWin)<2`y%U%kF<&->r9GJeRG%&AzdD*$X&wcOyfyOCmsBR5e35B zBBA~{oUkS{2XrnFz+?odq^h!{X-v!&X))9gB?{AHIx}$K^zexT0|PyW4oCzoGCkS3 z@?M>v%;0%d0CP~fhKNajZ_oZ?hfbe7)899|4x|iJNwhbr=+zdHUhT9rtg^4Fa;yT; znphi>-kFPZ3_(A|%R&`>K`*#WMPrH`lvCQs&`62qK+*_ZM+NXB7D*!1FRhdz1?e$F z@qAG24PAt-8)#cFlM34D`J{=Eyl}DrhmJ3#t3dWz3Yo60%4Cl+yIKT$sz@Y?Xs&SG9)J2-su+sR~spbsLybfQW zCCA`A#k+Ru%_c7QTiC8E_~qIfj4H(Uw|`Zstz zSDz($JWkg6G07djFlur~Ial7iQq~f)`clF;Z);p7*`q-&Y={@`mJ4?$%Ea&PeQhtv z6_73}YrlKpwF@a5=h?HynLNM-O@tAVttNazE_?z=;;XK!u7ul{aF@`7{i=P< zwm!|~-Ldw=uTADqB|Qn`P(KCJe&>l5@#(n#>4jsz^i=9csC(|YdlSXgB+T6RR^PAK z6tCDUS8Ps*U5Sb|cA#R-XfDB-5_3UeiaGgQNex9`3a%74$KA~_cXPsBjG}7mV~#55 ztwQO?*|lgS#cj`05C>yQI~L7JPiey25cjsp-nQ#6eCXYtvLM!jJkDL4aC_tKdf8nc zckhyKCVFPwyK zAHYF>yXFXC(D!b#pZrRtJSwP(#d+bbbr6ok&i9~R&wI%*<=KqWV zW9L!It+-4b7zbInvS;W#3%(kVR<5AsQEC%cbrL~dH0ohWKz$#gx~01wKCq(|4@_L^ zG@tUKMh{blbuUv!uJs%b>{8quuR0-Domi_tL<0Ym+Dq9ha3%e z9SskEDhyJ3jsxFT7LQQ-Ozfw+qJ{hIhO9V}kkJT}JZnX+-#)O~SD};Z75O%xt~W zY$ShM5yIay^2e;!_XH~Ey>j7LvEeU?jhn z(*7jCA1k!}q{&SFPM+Lt%-zA?)yA*1s?Tz-^`=*_pK}>kJ|KpK992ANB&;n z{X!P*^-y?&a2)ZQ`D1P7_gk2MGnM;O6Mx)l{;9cx{9XL@H9aMy$BUFYVFB6b&RjqekGDqkgyI#iOR;VT!$yVw-lxV;o8*(2C&z9@wjnL91 z;4uf*BJDfR1ufs>NvjrWDd696l8IOacI8e31t(Pkhve?h01k7Okd93!p%Y$46o zsF~^D?i4t1-@*%M=NKIow^HboFQTI+6h=xDX%1d5+mucL8Cs1O6ex!%-^YE+ItmP8 z)bLyZ+GK^wg>}4;H7d&?zW=J>ibuc^c*M$Mr?l#j8#8hEA|FOS6Oxfu=1WTeP{^^( zAvcY`*Y1>>wZjCdRQ0DJ+h9J`o6N2apmsd|=B=av5Ydqu$Sj+In0&tKlRau@G7G7} zs9%F&7dgK1r~!&G{Ji}o`+$01Cmp!v*04QK++XHVD$Q<@vW<^pE-K@bMsrmQfW)Ze zY23<2t7MFS%s7NIffEU2mQXq3%--s$v$D#0_9lbz(JH8Im$M@|#H@>S){CwmD!-s_dJ>5rglOun(^o zCd^kK=o}nO*WfIJGt3Or(vdlc9Z44sK&XeIhbM6aB554Gg!6CMAfLVj9cMMm$uT^L#*v_Vo?v~TsVsLmqGdu3ORStJzrDI*9idsH)hV(mJ*u5VVBm$OZUm8 z`x4~<>o-G<8=LL^9-My`{P_zR0e-1x+e;EK5anhA`%T-K84*naK!b?@EsHk>dl z=tAD$9*@he&55?ni;ip0-E}wLFREH{Tz?Mcg#Lc;UQw_5LUuQ=?mN10{91+VXow+W z$8OZRo?NtaNbUC>$JFTxyYBZHemE>(er^sC_qU z7W40K-ugEKH!ANm$vX#Eww+no{1l2FzUyvX-P}z++1>gpI&Zn{x&uzkvF*{vF3x|3 ze~3*H+P^kra8CPf7Th$(O8f3ah;tfbJ0oQ6f}*KhvB)i!q=s) z&p0jvTPknrhmsk5r&yd(H$!O2P9G1;u<==+abS&@3U;NBu4&5!Y=P2d54)m#I=%j$ z060FU1(rV?29pIseoiY0)KqMCTxo#ctsiz1MwZdh`#~-SjtT!PWs|9pxE$${arGumo_)29fF3cn=JB; z(bK+uz^p7KG>_A{OYhSoacpb{l)6(R{I?M}SDw*FZR;Vdc_R3Py(nsBbzE7^UH{Id z!Fc^nxqjz@Yt`yQRU+K zL~+HRJAY&4+*RN2eslWoBll|ie(Hyg)4fsY-jOf~mr(l=d_-gf@q2)zx4AMw5Q z<{L)%{;tQ2KxnG;287!NFZqjw-d4kHKi}JIzFlS{f2D=O>v_b#-C!htGf&~I2Kc3) zB5T&OSw{s;2nF!Ot^EO}?c>aug(1*9W+Q>pue;J4tvGUMl%UBF#uWQ+0}# zNmHW+oigXp0taO_;sk_2Dvc0Vz^+_045xVb>=QfCVAr?KL92D$bY`tfWy-Z2>7L7= z1LH#@9SQBgZUC#SMU4t>u&hcJ4)rqEcRRIEZN4~Hpon9nBdsRLecPi zwNq5Ws}qH!OXt4T-2M}#G%F7q=5d4M{u z16Z3^{QV2A2UgBe_WIt0rzYm8fkKU=EM~8{Usw^Vytq>M^_b)9Na(4#TbQQi7GSTA zve*7dNAY@Z?gH$3@@uiuk$aA_$fL0OddaWEt_WNSs-+Adq$m+d#6x@YaX z58IlKZ#rTndvDrr%*TpO+_Uy4Tty2`W_yqwqRk?gI`&hCnXF+yL>_@Xfb0O7IRX?z zNTUeA74+kM>gnVh1Se?JPA8|CO{AoA*hHLh5fh2@n{j$sCuPbTa?|8AeemWD)Q~Rh z#vg-5h5;HGbb7j(kRw>WVLu}RbuyiRM=e?9!R#Q)^W`otXpUO53EY)dlwp)iuuH;z zh=dG)vK>w9$lszO+7ali4L&;WtbhyZwo5LYLK$Ps61ql-h?`W#Wt$!}N;>=?eG1;v5~T0XM3!7z8vhfO~dRjNDVP(bFQxrrptZ~CqkkKg=L3%+>}%6Bjh_v4%_{+DcoL| z0{#R}GLLQPMX)s*W?4#)DAbTj069YlL!Y&0B_ zSyB*zIu6@mo+6NzVjs*2l~j?PpskNN2Y%mQz0`1h=knPV|IS5A(&N{Su6=*>dc$8% zeCXXmW`njq$mblsL{&5LavtUv?TNBYOS5uW$D$QxewSWcF1^tUb8(A~q^C;H;kxUF zWBH}nrh^}P4C17BI8 zQgQ#5cAkt8Q`=na06T;vDu<91n-Thn9#s`&@Vrt)YA*~)TGU@)>7Vl)(5#n>6oy}l z!4G~Fq*WdUkDNGg^30&3K0%8V4i=$0upMy;XUPaSR5t4WDZ-?GPA?qlZy7L&FKNX& zD`K5OQV+#oroc@yy_E^u?m~d z#?rz?6Sgb8rHi}uV-Vg_98vi*d#Z%85)kDPv~#^>aSwr6A9D_;KjA4?t&piFEADyr z-1j$R>~e2QRBXoXU|BJcL)Z??;$|7DCB^&X;(b_dnL@|MXEL7?d?Vrg|r&s->{mqY1))MP1PxZ z9@Vc56b9?BbnN%RZ(wkcr=<;d_8Wp36Wf@zvJ<{jnSresb4|V=%yeqgTbsNvONgZf zLV^X8t$xE~6TV=w;e5=7$!44vUJ_nmix24B?zl7g3 z#cGU>n5#=qGiJvyM@sy55wnbzsRK6&>&wsx9Lbo0Uqg1vG+a0NREuad`N+7Zn(*IJ zbm9-fL^#=OQ`W~H;&HAvYp!LS&1GAB3>pn@qsjI!5L=mSf*r?f6D4Kwk`B3~W4URi zWcR}1k6a}Qm`SVLB3EvSS00cn4=D5G+7J$WV!m8^M)o#9!G_jOf!0o}Y~IrQWtG=v zzB~KcY%H+*hO|=EyHd9Q=7?N&CVGNR+X`V888lfMCNoBeS| zU(C^$aCxy)L=k=$-h-N6=6gN-D?5AYx&M*xsTKZREqu4C4G6qd%agy}*6TLjYV-Bl zjknDvgx|KC5OUjXgg(APr;aBGw=@J+%o;ah*fa)B%Nn<$$J>hD<;5qPH!AnhBq z^#jQ{gdBm8GmeHnVdifqNO>4X>nva88YKtlOVuGU{dPjpHE+Chi;VyFEo@7zRra)A zAD2BlV~(8(mq+<=gv^Og1B4L={8EaFO#qd6OoMZ+;u;$Yl%SL2o<-Nq8wkS9wPvHU z^erott6tjl269jX_SdF`r|+5T_m!={3FAa5V43IplT4hT#5DPd0GnQ3K)D)9700B^M0G@&fchY_sW7=^k5GkKuc zYX~#-W5z;f8yS_pgCy&;Pw7`z=+_UG4AS*JM#JuVh|dVbs?QH|YcK|0w@a?urRYbl z)a|D&-_5c^TsX2gn{fH!u4>s;y;K*k*(ulT{Ls~%UUZ-N(A`ekzMHW%;s@VswDt1~ zN0^=7cG=e+_id4VTb7Tk`1T;Quq<9!BNx`J6xPKZbumXBQHW#TJQnlsyIFeE9`hal z&~f5{h4NT+)O{8v-J8pMdIS6|9y=ld{9s5&qH4$)Gc||4N?>xd#}tWTr5J z`XE6}q8sb3T+=`sXc)wh%rV*cTuiGLOCOG^WDIDo98(~7X*nj3mJfbp8cb!{NF%H_ zZES(gzNVXzYeJ^;L_KsCHzSR%;*}25(&+8cdyX;C-@}?djlTn`wG{pjh0KE~nbuOS zoY5^eiEM%y<~;fY1E{5F)PTZTrGqG6nKovoKoXYR__RqA4Qq+fUlkY!9EV@dQU^Po zGS%oZfg_o8nbJa$eXbyL6=gwRp(*h{Ai6Ro$oMn~fe;*REimD3Ye`g8$1AqV6k2M8W=}c&??5K@90yv$-jd~oZH|2Zi2O5W}Q!76@a~2y9iNk{pt8q#u$) zt2(2zQZf0kWOB-`!7=jHXwGJM!kbX|E8GKv#bizSIQ%+TV+%N>+J;2Ow!|U&IRykA zJc@f$Yoe|p5om@tKv4p%4?3RXO?mJZ`mfbqtw>qeqZKJqHs*!maoM#kS6fpq_UPtn zny%NrUXdzbkA+-C{nFFd=dVwL;cDxZ>-Wp$eJKxn=hN~mWsiQYyl(06^~vkQH%4Qv zP>k=D%l4vMHH*=-cOP<%9Yf8;uLaS?* zc0>K$RI@yQ)6b@wRH4PRb*Yttwl43dpslIGgS@Hk+I)(m`*P(?+nud9U2?~%H5QOM zWhgLJEjv>jZa3?0hHnMd$eU{6HgA1k@t98VtFH2ti9F~lf6Y?eQuy@%)V5RXB^IN+ z{52bU-Q+X*SY+H0*H?aR|JB))g`N=0cg?o6^_okzHLlqxXls!P&?~aW9kDB@X-85P zdZIiRg5UJ7+30CI*VdV6?fBUK3~xH1)Q0&Gt)%K&WU249Ik~tgWm5w4IG?yAEDgMF zgH`U7k_NLkvv{Wx^Cg3pak(jv)dctTnNrZYEGdXGTyv7|Ft6nDz%|F48d)~vp>b7| zvM?`H8H!Uj=FQ`ZD_(u>>T@YOdvs*Az{$d3d?ww1HI{4YMPs+Aary9#!JD;z`;5Hx zP>RFzox`y+Prr9!jr^&71`ON>wnkIsYKcE(!W}gz@TM%}vufj!-lI9_49k-Dnp3uI zTC*eQ!6096D!x9N;&8ip_|Cws6U-ZX?rUollp3T)KCrZy3UOv;F?=aNPXX@wId{)yAg@h3G z2yB+hL0FPz80E%hmO>R75o4r~Q9(xb7_sX^ili_eo}Nlt=m#{B0tT*t^Ct6{u4&uo zG&E2d{bXd)PV|Y^duD!0L2GHLm*_}4vtT9BR&vrks;Kyk&<}(UKW`Aolq3Ml33R1S3U=rvaK2@5j!Ul(jd{khD6Y~R8G!2_PYr^}3<20={tY=PuZQ=2YH(7R=B$zL zH;o+M_8+)r{9m>C7fRwbzijhg+p%J+d)fS{dD_A6_?RR2VQN3mSv}ybdD|}qE4XIf z_S;k=3lezWYO(+2llUFUm{1G}@bYo&3h}H{N#goDxL_mH7HhtY>frbo zFU7@VA`(~m>4eM=MTJ>W;s<9WsF)l+!N($^7?tJ(S@L~@NAuFUxhScdC#0XwN{Z^G z^u|e5mV{U&J~JUH$wXX{pt5daHcm8+#gntRmt*8@&^rAEEQcng&aWin%P*f9q30bhiXXD`_WKf<_`Ur=spsla6V>A*L z)JP)EN8*Yq#KY2BPYgsKKa_}1M`mVasWcB`jn;L?fc5cJ3yZ6WI^7n*D-jX}RnX0{ zv3lVOR1ik@H}HS@7{~|Ib#$FQfhgF`Y3gzrl}vf(m8*aescO9EX%%ZLUTOMX&3gQb zUE~(oMKsL-?v{B*ExkV=L8CNNy%IOrOvQSYv?5g9>mGX>thrmZh^$@LCY!pvZa&>4 zgu_x2wyE3%>ceY8AY_GyEui#i8g||XjDd(1-LPaTdzJYcwrV6^Mf(ArcbFfcCFVVL z9@O2iZj50XRZGrOmAf=k`5u%<6X`VdJM@PdbSYS|vj|3{DD>;2ok+Em1&{~He}dJi zz%x^^QfvK0CQW0_B72Xk#&J6q=)^VD;wdcWLa8 zCyV?XRch@ewd-bZd*1v#W>A+lzX)Ng5eYWKxV{QwbG0=@uX8=dFWh_o4}=@4=L85g zRv>IEVMq`*ziY<$R`P&5)UILeZA!UErMM&us>Dk;m?-?ToQRcNGYJ~LK+1Xi^yzWF z6pH%z)K(IC;BAM{13`+HWH}-C@uwmFSfnfAP$Uk~54#PBZ#Zm?;C3RTTgmP8)ufbq zsYc7R5Q$1+AFtPs1cqK89t(_yMkXd+pYSp|tAc=Tj!B9FlhRon@>0FWhyV{Ug3JVL zz~dN}?B%aUq$ru)ML~&#`N_!D z(ZtM*B-;J9bXFz3(q6| zGm0cD{wuKSE=Pp8?`q8dwt{y0h$P_nMUoNG{X4d&armg`Et z)s>e$1>|gjVM^qyl4#&TT@Rz`Y{_Nh-+}_dU zQ+c;v+g?>xSK4B@HZM<+i#sd(c@ArxhoG!Jdj&P`D4=>+l1lnj!`3Co`wnf#(fj>CpnTSI(~)f$ z&ozu|4dVsc-Uw^hJfv+@z^Y7le#g$-jvwUtQxEq)cqiL`BG-RH<4-}!?|22^>D&tN zbZ!NBI=9|DQLv$|y>|k)0{8o~o`IZa;O41(>n^Ris;sWO!~-ZWa3x)7Ze2S0{z?4wrOFvmUe4BCbf_YZ&Tkd6JsN&)|g%{$a<{$xLm`2!T@dl}3h z=0NN*;y~;%$70@YJJ!!UZfQT(%RD|X$c^;VPx>f$c+&4Zwu}4JLj(WmP73q87|i!_ zAOMlb7L&w?5W~NL$fB?Ql-(W-A_}@FfaP9fr zwddpGS=WJ_>%d~&GZWg zAIyC*aQ5?ov)O^E+`yFP3}&6doHM9df=^*4D1c*dG6Ak1+brW;*UQS-I};>ie3+K^ z15t1j51<%`yu1kjaxZkng31(-Rd9h#$Yj0#=Fi_;6n}R9+W7*#k2^>GwYz}u{mCxl z{v!Gj)>g;@06N7v%{7`7$9 z+2IwplQAX;FcoL%iu3ly$LN%AsP?;e0RmLHh~Z5x;8-=vgzeH)*cpnr$p=8_U_o z7KT>X_6(Cb^YL(&-IrtcY3#ndy?)_`WCy@O6n|^-Zqd!5keCRELb|ya#f?efjjJ~n zt9)|tyNg1+gzSb!vh~3uko?FMCkcj(4{f>`=UI@X=vMGACykuT5(>qI zm=p@hZCITL6Z{Sk%l?eWG>P@kEw9BA;%rnpA`e45-j~WVAO(h^s60BTp@Ux{kG4_C zBfnN%^6R?g(N3+pWmSp8NC^WnUR&2IzPB3Z-sh{Nxo_`I;w?_`kd>?<=j%FS}Y4Qzb* zU6M<($&6%|9g;&X?6FABw|RdNV6zx0UuFPX0NCQeJa=JY%RW)nd`Aula#V`PLQzfV zi77%`SnQW%!PhGTqI>T_Arg|Lusk3tvgcc}mz&Y8Sx(*BCI7NtRy8-)i@G&M79*i( zZjFy84oSvzjD$7Dq)3d$nQ#v`f_vaN-ge%|qK4Q( z&dn!o`y}akUdXviiwUL+L1&L$fFB)vO0U{NA%X&0%i@LMP*BuDv8WJ=s+t%L%DI)q z=oX&rIza%rU;QilnBm4+Af_hl+blwoF znMr~elw?iMU*!61CUw^~DMcVQm=lc< z*>44iovi@7K41;YZRld&a?y0rZrZsOZG$8}2Rt8gqwH^Z9u0x0i?-#wlSC%h5YEM2 z-+~8n>PSoye}w+D;57_q@Co-JJBl%ScSjR?x3LCkdFJ|Br2HQIy%5QL4wI6bB{s@cecH{_dsVypuMZ>)h;)ya~d${)`+aCpp?#$TPE@HKFT0KwWgYY4P+m~ zl6qkLI&5v0~A6X4;%6 zHEOtgRu1;l;=f>q!`IQ?dDO5WvGW;asds;*%FWMLd3hCx&Tfa!D*aL2Vt7cmgk!zE zvZC{ne7e6EPU9@8qi|>GJavF>7kdN!Ax|)-$Vv&EphBvJZtFVMX&9ojs-}Qco@%69 z4Y`tDUOBil*B26_p23LsO_fALLtKgV$wAF4_BQl~ywLQ>y%5)6nd%MF&ZmLy)u2kh@WuzV zGqI>wRf4b_%ncYTyk@`Ti4W>7s&D`VX}JQP@9*cpxm#jyH{ z$B?uPVTm|_nD;xlWS{;WJsn0Ft~UP^PS;CDQ=6|7*qKXU|#_BT6ij@`V zYWFqIRnO$g>FTC2>;2M-E6&T#@n202Oomc*duB>~>595P=4Wic@!gyqt*d*2Tq`Rc z8S7FTcHNAob{$UDb*4`Ie9Sph`ufAtj(h93rK>jGt!lhe)tFwt>(k(8p6OS9mfF>o zs_jl!ZJD!j8_LEU89Towh|~4k{?hqz=grpX`i`-~>1yxHI`7l_l^dTR2B`PfRbM%D z`B2I&&a69~u0H+sy3-k+5a$13L2D|$&s2gg^N$^&2`T`C9~G_|b-w3J zRc@VZooq;z@A<0nl5?i;NQQ9~ox%@G+U`|*)8*^$mcMkT{H1ht%ct9Jo||qxm})tc z5)P-!H-UyVt1cbP*il{mwa%-ZldaRWyDuG1mu;9S+3@uKY5}wZLHA3_Mi0GrC{-1h zDS0DZcJk|zlb{_C<{y=uoU@{p8^6!2Ci?ta{S40KJl>a&-zjSIKrhf%&-?-VT$Ybm zfc}gDH}3HjF}Df`c*}(Wd#lLS=H_pe`PjBv{_~1eKiSTG-iQgjy{2ugb*hvBc&ZE& zcr95oRlx)ER1Mi?s+I@lDK|$j4HV2#JtK?Ima973D{BhrQxwwF>4oqa z2*w~+qMEVRLi0{>5o*5CWCaXnrJk^DA_K`v)dIsCkeGXhmCXR^t|gJ5X#9WjWfc*9 z5QcdpE$nEGaK&}mb+>f$ozl(M_fMB@AIYDypcR$lk(uJg5$iv>^|n)Z?g&PORaYyg ztG3=8xV!uKo!!T$cb}MX`BQoR@2INp_*}jc+)3_|cnnGyQC}gQmYY+^%a0nRI0>{B z29=Nmu+K1V?Q?8V8ewTZ;n@NM$>m~Xv0ZrW*RPF8=U>k-TlkZBq9KFG{KbYjI?uAm zQu3IRW`POm7Dd+jmFP2lJn6?~n_(D5+QMr{!nr;i`o(O|hES48LVs!YaL{Wq-N?-* z9=5^z4Q_aG@mob02x(``i{3|`CrjRhxo+D|$}b(3Jbwt+3m-LERwCnh&zgljx~L-- zy|Na)#Fl?xB|L3QpSFh=p0@Pq>+5JZc0f3y#I#s27KZfTwU8E;-HbwfM-R}=E{XsW z5Go;oRz?661*s3s`VTKZWe3nnq^bf8!)UGqIf_%I`)BM2hTHCQmE-LAvFm$hxGiZ% z!SGL&?Xbv==dstlLbnD2QY;t<=+^8#VyHnvPA|%$JWBSlt-1>QeKvay#fq+s@#MO|2L@%}FV?>pt_Ri<+ zjKrk=u>6X$7w9DNR2ha0i!r{3n*N4rA0Y1oGOmAs>b^k*XbthGJGQd1=4o5) ru;sC(6`#c8$1{k`lP8V&D|VKCKTcvNc8viRrb(7gH+$#E7ggiG?U#%} literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/event_translator.cpython-311.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/event_translator.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4423fb9a6867ad620964c4ab5fb495e7570c5bfb GIT binary patch literal 14040 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 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/event_translator.cpython-312.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/event_translator.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..35008d6af5baa6fea626d9f519e2466cae77dd59 GIT binary patch literal 12423 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 UBh0NGG={rs$Eujyb{fL}0}FO&d;kCd literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/execution_state.cpython-311.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/execution_state.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..249f9e4ca3136f586064bcff2f6eea961dc580a1 GIT binary patch literal 6122 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 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/execution_state.cpython-312.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/execution_state.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff0b459c9a94e0d191e06def97294ebebebe3f64 GIT binary patch literal 5882 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 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/session_manager.cpython-312.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/session_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..316bffd58e8db23e8d2748cbdad9140d298d5766 GIT binary patch literal 20772 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 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/tool_adapter.cpython-311.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/tool_adapter.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42c3ec1bd7779d44b0c5b387a21a157e08f31a06 GIT binary patch literal 7731 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 NB{IniA8{Pe{{b9l%_0B* literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/tool_adapter.cpython-312.pyc b/integrations/claude-agent-sdk/python/src/ag_ui_claude/__pycache__/tool_adapter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae1a4f0738f506647a305c452bf941a06d5d7780 GIT binary patch literal 7019 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 D8!jr@ literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/claude_agent.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/claude_agent.py new file mode 100644 index 000000000..9958acbc3 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/claude_agent.py @@ -0,0 +1,906 @@ +"""Main ClaudeAgent implementation for bridging AG-UI Protocol with Claude Agent SDK.""" + +from typing import Optional, Dict, Callable, Any, AsyncGenerator, List +import asyncio +import json +import logging +import time + +try: + from ag_ui.core import ( + RunAgentInput, BaseEvent, EventType, + RunStartedEvent, RunFinishedEvent, RunErrorEvent, + ToolCallEndEvent, SystemMessage, ToolCallResultEvent + ) +except ImportError: + # Type checking fallback - actual dependency will be available at runtime + pass + +# Claude Agent SDK imports +try: + from claude_agent_sdk import ( + ClaudeSDKClient, + ClaudeAgentOptions, + query as claude_query, + Message, + AssistantMessage, + UserMessage as ClaudeUserMessage, + SystemMessage as ClaudeSystemMessage, + ResultMessage, + TextBlock, + ToolUseBlock, + ToolResultBlock, + ThinkingBlock, + ) +except ImportError: + # Type checking fallback - actual dependency will be available at runtime + ClaudeSDKClient = None + ClaudeAgentOptions = None + claude_query = None + +from .event_translator import EventTranslator +from .session_manager import SessionManager +from .execution_state import ExecutionState + +logger = logging.getLogger(__name__) + + +class ClaudeAgent: + """Middleware to bridge AG-UI Protocol with Claude Agent SDK. + + This agent translates between the AG-UI protocol events and Claude SDK responses, + managing sessions, state, and the lifecycle of Claude agents. + + Note: This implementation is a template based on common patterns. + Adjust based on actual Claude Agent SDK API documentation. + """ + + def __init__( + self, + # Claude SDK configuration + api_key: Optional[str] = None, + use_persistent_sessions: bool = True, # Use ClaudeSDKClient vs query() mode + + # App identification + app_name: Optional[str] = None, + session_timeout_seconds: Optional[int] = 1200, + app_name_extractor: Optional[Callable[[RunAgentInput], str]] = None, + + # User identification + user_id: Optional[str] = None, + user_id_extractor: Optional[Callable[[RunAgentInput], str]] = None, + + # Configuration + execution_timeout_seconds: int = 600, # 10 minutes + tool_timeout_seconds: int = 300, # 5 minutes + max_concurrent_executions: int = 10, + + # Session cleanup configuration + cleanup_interval_seconds: int = 300, # 5 minutes default + + # Claude Agent SDK options + claude_options: Optional[Any] = None, # ClaudeAgentOptions instance + **claude_kwargs # Additional options for ClaudeAgentOptions + ): + """Initialize the ClaudeAgent. + + Args: + api_key: Claude API key (if None, Claude SDK will use ANTHROPIC_API_KEY env var) + use_persistent_sessions: Use ClaudeSDKClient for persistent sessions, or query() for stateless + app_name: Static application name for all requests + app_name_extractor: Function to extract app name dynamically from input + user_id: Static user ID for all requests + user_id_extractor: Function to extract user ID dynamically from input + execution_timeout_seconds: Timeout for entire execution + tool_timeout_seconds: Timeout for individual tool calls + max_concurrent_executions: Maximum concurrent background executions + cleanup_interval_seconds: Interval between session cleanup cycles + claude_options: ClaudeAgentOptions instance (if None, will create from kwargs) + **claude_kwargs: Additional options for ClaudeAgentOptions (if claude_options is None) + """ + if app_name and app_name_extractor: + raise ValueError("Cannot specify both 'app_name' and 'app_name_extractor'") + + if user_id and user_id_extractor: + raise ValueError("Cannot specify both 'user_id' and 'user_id_extractor'") + + # Claude SDK client configuration + self._api_key = api_key + self._use_persistent_sessions = use_persistent_sessions + + # Create ClaudeAgentOptions if not provided + if claude_options is None: + if ClaudeAgentOptions: + self._claude_options = ClaudeAgentOptions(**claude_kwargs) + else: + self._claude_options = None + logger.warning("ClaudeAgentOptions not available - install claude-agent-sdk") + else: + self._claude_options = claude_options + + # Store tools for dynamic addition per request + self._default_tools: List[Any] = [] + + # App/user identification + self._static_app_name = app_name + self._app_name_extractor = app_name_extractor + self._static_user_id = user_id + self._user_id_extractor = user_id_extractor + + # Session management + self._session_manager = SessionManager.get_instance( + session_timeout_seconds=session_timeout_seconds, + cleanup_interval_seconds=cleanup_interval_seconds, + max_sessions_per_user=None, + auto_cleanup=True + ) + + # Execution tracking + self._active_executions: Dict[str, ExecutionState] = {} + self._execution_timeout = execution_timeout_seconds + self._tool_timeout = tool_timeout_seconds + self._max_concurrent = max_concurrent_executions + self._execution_lock = asyncio.Lock() + + # Session lookup cache + self._session_lookup_cache: Dict[str, Dict[str, str]] = {} + + logger.info( + f"Initialized ClaudeAgent - " + f"persistent_sessions: {use_persistent_sessions}" + ) + + def _get_app_name(self, input: RunAgentInput) -> str: + """Resolve app name with clear precedence.""" + if self._static_app_name: + return self._static_app_name + elif self._app_name_extractor: + return self._app_name_extractor(input) + else: + return "claude-agent" + + def _get_user_id(self, input: RunAgentInput) -> str: + """Resolve user ID with clear precedence.""" + if self._static_user_id: + return self._static_user_id + elif self._user_id_extractor: + return self._user_id_extractor(input) + else: + return f"thread_user_{input.thread_id}" + + async def run(self, input: RunAgentInput) -> AsyncGenerator[BaseEvent, None]: + """Run the Claude agent with client-side tool support. + + Args: + input: The AG-UI run input + + Yields: + AG-UI protocol events + """ + # Get unseen messages + unseen_messages = await self._get_unseen_messages(input) + + if not unseen_messages: + # No unseen messages - start new execution + async for event in self._start_new_execution(input): + yield event + return + + # Process messages in batches + index = 0 + total_unseen = len(unseen_messages) + app_name = self._get_app_name(input) + + while index < total_unseen: + current = unseen_messages[index] + role = getattr(current, "role", None) + + if role == "tool": + # Tool result batch + tool_batch: List[Any] = [] + while index < total_unseen and getattr(unseen_messages[index], "role", None) == "tool": + tool_batch.append(unseen_messages[index]) + index += 1 + + async for event in self._handle_tool_result_submission( + input, + tool_messages=tool_batch + ): + yield event + else: + # Regular message batch + message_batch: List[Any] = [] + assistant_message_ids: List[str] = [] + processed_message_ids: List[str] = [] + + while index < total_unseen and getattr(unseen_messages[index], "role", None) != "tool": + candidate = unseen_messages[index] + candidate_role = getattr(candidate, "role", None) + + message_id = getattr(candidate, "id", None) + if message_id: + if candidate_role == "assistant": + assistant_message_ids.append(message_id) + processed_message_ids.append(message_id) + + if candidate_role != "assistant": + message_batch.append(candidate) + + index += 1 + + # Mark all processed messages (including user messages) + if processed_message_ids: + self._session_manager.mark_messages_processed( + app_name, + input.thread_id, + set(processed_message_ids) + ) + + if message_batch: + async for event in self._start_new_execution(input, message_batch=message_batch): + yield event + + async def _get_unseen_messages(self, input: RunAgentInput) -> List[Any]: + """Return messages that have not yet been processed for this session.""" + if not input.messages: + return [] + + app_name = self._get_app_name(input) + session_id = input.thread_id + processed_ids = self._session_manager.get_processed_message_ids(app_name, session_id) + + unseen_reversed: List[Any] = [] + for message in reversed(input.messages): + message_id = getattr(message, "id", None) + if message_id and message_id in processed_ids: + break + unseen_reversed.append(message) + + unseen_reversed.reverse() + return unseen_reversed + + async def _is_tool_result_submission( + self, + input: RunAgentInput, + unseen_messages: Optional[List[Any]] = None, + ) -> bool: + """Check if the current input is a tool result submission. + + Args: + input: RunAgentInput to check + unseen_messages: Optional pre-computed unseen messages + + Returns: + True if this is a tool result submission, False otherwise + """ + unseen_messages = unseen_messages if unseen_messages is not None else await self._get_unseen_messages(input) + if not unseen_messages: + return False + last_message = unseen_messages[-1] + # Check if the last message is a ToolMessage + return hasattr(last_message, "role") and last_message.role == "tool" + + async def _handle_tool_result_submission( + self, + input: RunAgentInput, + tool_messages: List[Any] + ) -> AsyncGenerator[BaseEvent, None]: + """Handle tool result submission for existing execution.""" + # Extract tool results + tool_results = await self._extract_tool_results(input, tool_messages) + + if not tool_results: + logger.error(f"Tool result submission without tool results for thread {input.thread_id}") + yield RunErrorEvent( + type=EventType.RUN_ERROR, + message="No tool results found in submission", + code="NO_TOOL_RESULTS" + ) + return + + # Start new execution with tool results + async for event in self._start_new_execution( + input, + tool_results=tool_results, + message_batch=tool_messages + ): + yield event + + async def _extract_tool_results( + self, + input: RunAgentInput, + candidate_messages: List[Any] + ) -> List[Dict]: + """Extract tool messages with their names from input.""" + tool_call_map = {} + for message in input.messages: + if hasattr(message, 'tool_calls') and message.tool_calls: + for tool_call in message.tool_calls: + tool_call_map[tool_call.id] = tool_call.function.name + + extracted_results: List[Dict] = [] + for message in candidate_messages: + if hasattr(message, 'role') and message.role == "tool": + tool_name = tool_call_map.get(getattr(message, 'tool_call_id', None), "unknown") + extracted_results.append({ + 'tool_name': tool_name, + 'message': message + }) + + return extracted_results + + async def _start_new_execution( + self, + input: RunAgentInput, + *, + tool_results: Optional[List[Dict]] = None, + message_batch: Optional[List[Any]] = None, + ) -> AsyncGenerator[BaseEvent, None]: + """Start a new Claude execution with tool support.""" + try: + # Emit RUN_STARTED + yield RunStartedEvent( + type=EventType.RUN_STARTED, + thread_id=input.thread_id, + run_id=input.run_id + ) + + # Check concurrent execution limit + async with self._execution_lock: + if len(self._active_executions) >= self._max_concurrent: + await self._cleanup_stale_executions() + if len(self._active_executions) >= self._max_concurrent: + raise RuntimeError( + f"Maximum concurrent executions ({self._max_concurrent}) reached" + ) + + existing_execution = self._active_executions.get(input.thread_id) + + # Wait for existing execution if needed + if existing_execution and not existing_execution.is_complete: + logger.debug(f"Waiting for existing execution to complete for thread {input.thread_id}") + try: + await existing_execution.task + except Exception as e: + logger.debug(f"Previous execution completed with error: {e}") + + # Start background execution + execution = await self._start_background_execution( + input, + tool_results=tool_results, + message_batch=message_batch, + ) + + # Store execution + async with self._execution_lock: + self._active_executions[input.thread_id] = execution + + # Stream events + has_tool_calls = False + tool_call_ids = [] + + async for event in self._stream_events(execution): + if isinstance(event, ToolCallEndEvent): + has_tool_calls = True + tool_call_ids.append(event.tool_call_id) + + if isinstance(event, ToolCallResultEvent) and event.tool_call_id in tool_call_ids: + tool_call_ids.remove(event.tool_call_id) + + yield event + + # Track pending tool calls + if has_tool_calls: + app_name = self._get_app_name(input) + user_id = self._get_user_id(input) + for tool_call_id in tool_call_ids: + await self._add_pending_tool_call(input.thread_id, tool_call_id, app_name, user_id) + + # Emit RUN_FINISHED + yield RunFinishedEvent( + type=EventType.RUN_FINISHED, + thread_id=input.thread_id, + run_id=input.run_id + ) + + except Exception as e: + logger.error(f"Error in new execution: {e}", exc_info=True) + yield RunErrorEvent( + type=EventType.RUN_ERROR, + message=str(e), + code="EXECUTION_ERROR" + ) + finally: + # Clean up execution + async with self._execution_lock: + if input.thread_id in self._active_executions: + execution = self._active_executions[input.thread_id] + execution.is_complete = True + has_pending = await self._has_pending_tool_calls(input.thread_id) + if not has_pending: + del self._active_executions[input.thread_id] + + async def _start_background_execution( + self, + input: RunAgentInput, + *, + tool_results: Optional[List[Dict]] = None, + message_batch: Optional[List[Any]] = None, + ) -> ExecutionState: + """Start Claude execution in background with tool support.""" + event_queue = asyncio.Queue() + user_id = self._get_user_id(input) + app_name = self._get_app_name(input) + + # Create background task + task = asyncio.create_task( + self._run_claude_in_background( + input=input, + user_id=user_id, + app_name=app_name, + event_queue=event_queue, + tool_results=tool_results, + message_batch=message_batch, + ) + ) + + return ExecutionState( + task=task, + thread_id=input.thread_id, + event_queue=event_queue + ) + + async def _run_claude_in_background( + self, + input: RunAgentInput, + user_id: str, + app_name: str, + event_queue: asyncio.Queue, + tool_results: Optional[List[Dict]] = None, + message_batch: Optional[List[Any]] = None, + ): + """Run Claude SDK in background, emitting events to queue. + + TODO: Implement based on actual Claude Agent SDK API. + This is a template implementation - adjust based on SDK documentation. + """ + event_translator = EventTranslator() + + try: + # Ensure session exists + await self._session_manager.get_or_create_session( + session_id=input.thread_id, + app_name=app_name, + user_id=user_id, + initial_state=input.state + ) + + # Update session state + await self._session_manager.update_session_state( + input.thread_id, + app_name, + user_id, + input.state + ) + + # Get messages to process + unseen_messages = message_batch if message_batch is not None else await self._get_unseen_messages(input) + + # Extract user prompt from messages + # Claude SDK uses prompt string (for query()) or sends via client.query() + user_prompt = await self._extract_user_prompt(unseen_messages, tool_results) + + if not user_prompt: + logger.warning("No user prompt found in messages") + await event_queue.put( + RunErrorEvent( + type=EventType.RUN_ERROR, + message="No user message found", + code="NO_USER_MESSAGE" + ) + ) + await event_queue.put(None) + return + + # Mark messages as processed before executing + # Collect all message IDs from unseen messages + message_ids_to_mark = [] + for msg in unseen_messages: + msg_id = getattr(msg, "id", None) + if msg_id: + message_ids_to_mark.append(msg_id) + + if message_ids_to_mark: + self._session_manager.mark_messages_processed( + app_name, + input.thread_id, + set(message_ids_to_mark) + ) + + # Prepare tools for this request + request_options = await self._prepare_request_options(input.tools) + + # Get or create Claude client + session_key = self._session_manager._make_session_key(app_name, input.thread_id) + claude_client = None + + # Try to get persistent client if enabled + if self._use_persistent_sessions: + try: + claude_client = self._get_claude_client(session_key, request_options) + except Exception as e: + logger.warning(f"Failed to get persistent client, falling back to stateless mode: {e}") + claude_client = None + + # Use client if available and connected, otherwise use stateless mode + if claude_client and self._use_persistent_sessions: + try: + # For persistent sessions, try to use client + async for claude_message in self._call_claude_sdk(claude_client, user_prompt, request_options): + # Translate Claude message to AG-UI events + async for ag_ui_event in event_translator.translate_claude_message( + claude_message, + input.thread_id, + input.run_id + ): + await event_queue.put(ag_ui_event) + except Exception as e: + # If persistent client fails, fall back to stateless mode + logger.warning(f"Persistent client failed ({e}), falling back to stateless mode") + async for claude_message in self._call_claude_sdk(None, user_prompt, request_options): + async for ag_ui_event in event_translator.translate_claude_message( + claude_message, + input.thread_id, + input.run_id + ): + await event_queue.put(ag_ui_event) + else: + # Stateless mode - use query() function directly + async for claude_message in self._call_claude_sdk(None, user_prompt, request_options): + async for ag_ui_event in event_translator.translate_claude_message( + claude_message, + input.thread_id, + input.run_id + ): + await event_queue.put(ag_ui_event) + + # Force close any streaming messages + async for event in event_translator.force_close_streaming_message(): + await event_queue.put(event) + + # Send final state snapshot + final_state = await self._session_manager.get_session_state( + input.thread_id, + app_name, + user_id + ) + if final_state: + # TODO: Create state snapshot event if needed + pass + + # Signal completion + await event_queue.put(None) + + except Exception as e: + logger.error(f"Background execution error: {e}", exc_info=True) + await event_queue.put( + RunErrorEvent( + type=EventType.RUN_ERROR, + message=str(e), + code="BACKGROUND_EXECUTION_ERROR" + ) + ) + await event_queue.put(None) + + async def _prepare_request_options(self, tools: Optional[List[Any]]) -> Optional[Any]: + """Prepare ClaudeAgentOptions for this request with tools. + + Args: + tools: Optional list of AG-UI tools + + Returns: + ClaudeAgentOptions instance (with cli_path preserved) or None to reuse existing client + """ + if ClaudeAgentOptions is None: + return None + + # Even if no tools, we should return options with cli_path for stateless mode fallback + if not tools: + # Return existing options if available (includes cli_path) + return self._claude_options + + # Convert AG-UI tools to Claude SDK format + from .tool_adapter import ToolAdapter + + try: + # Create MCP server for AG-UI tools + mcp_server = ToolAdapter.create_mcp_server_for_tools( + ag_ui_tools=tools, + server_name="ag_ui_client_tools", + server_version="1.0.0" + ) + + # Build options dict, starting with existing options if any + options_dict = {} + + # Copy existing options attributes if available + if self._claude_options: + # Try to copy common options, including cli_path for CLI tool detection + common_attrs = [ + 'system_prompt', 'permission_mode', 'cwd', 'allowed_tools', + 'mcp_servers', 'setting_sources', 'max_tokens', 'temperature', + 'cli_path' # Important: preserve cli_path for stateless mode fallback + ] + for attr in common_attrs: + if hasattr(self._claude_options, attr): + value = getattr(self._claude_options, attr) + if value is not None: + options_dict[attr] = value + + # Merge MCP servers + if 'mcp_servers' not in options_dict: + options_dict['mcp_servers'] = {} + elif not isinstance(options_dict['mcp_servers'], dict): + options_dict['mcp_servers'] = {} + + options_dict['mcp_servers']['ag_ui_client_tools'] = mcp_server + + # Add tool names to allowed_tools + tool_names = [f"mcp__ag_ui_client_tools__{tool.name}" for tool in tools] + if 'allowed_tools' in options_dict: + existing_tools = options_dict['allowed_tools'] or [] + options_dict['allowed_tools'] = list(set(existing_tools + tool_names)) + else: + options_dict['allowed_tools'] = tool_names + + return ClaudeAgentOptions(**options_dict) + except Exception as e: + logger.error(f"Failed to prepare tools for request: {e}", exc_info=True) + return self._claude_options + + async def _call_claude_sdk( + self, + claude_client: Any, + prompt: str, + options: Optional[Any] = None + ) -> AsyncGenerator[Message, None]: + """Call Claude SDK and yield Message responses. + + Supports both persistent sessions (ClaudeSDKClient) and stateless mode (query()). + + Args: + claude_client: ClaudeSDKClient instance or None for stateless mode + prompt: User prompt string + options: Optional ClaudeAgentOptions for this request + + Yields: + Message objects from Claude SDK + """ + request_options = options or self._claude_options + + if claude_client is None: + # Stateless mode - use query() function + if claude_query is None: + raise ImportError("claude-agent-sdk is not installed") + + async for message in claude_query(prompt=prompt, options=request_options): + yield message + else: + # Persistent session mode - use ClaudeSDKClient + # ClaudeSDKClient is an async context manager and requires connect() before query() + # According to docs: https://docs.claude.com/zh-CN/api/agent-sdk/python + if ClaudeSDKClient and isinstance(ClaudeSDKClient, type) and isinstance(claude_client, ClaudeSDKClient): + # Real ClaudeSDKClient instance - ensure it's connected + # ClaudeSDKClient supports async context manager, but we manage connection manually + # to reuse the same client across multiple queries in the same session + if hasattr(claude_client, 'connect'): + try: + # Check if already connected by trying to connect + # The connect() method will raise an error if already connected + await claude_client.connect() + logger.debug("Connected ClaudeSDKClient") + except Exception as e: + # If already connected, the error message typically contains "already connected" + error_msg = str(e).lower() + if "already connected" in error_msg or "already_connected" in error_msg: + logger.debug("ClaudeSDKClient already connected, reusing connection") + else: + # Re-raise if it's a different error + raise + # For Mock objects or when ClaudeSDKClient is not available, just use it directly + + # Send query to client + # According to docs, query() sends a prompt and returns immediately + await claude_client.query(prompt) + + # Receive response stream + # receive_response() yields messages as they arrive + async for message in claude_client.receive_response(): + yield message + + def _get_claude_client(self, session_key: str, request_options: Optional[Any] = None) -> Any: + """Get or create Claude SDK client for a session. + + For persistent sessions, returns a ClaudeSDKClient instance. + For stateless mode, returns None (will use query() function directly). + + Args: + session_key: Session key for lookup + request_options: Optional options for this request (used when creating new client) + """ + if not self._use_persistent_sessions: + # Stateless mode - use query() function directly + return None + + # Check if we have a persistent client + existing_client = self._session_manager.get_claude_client(session_key) + + # If we have request-specific options with tools, consider recreating client + # For now, reuse existing client if available and no request-specific options + if existing_client and not request_options: + return existing_client + + # Create new ClaudeSDKClient + if ClaudeSDKClient is None: + raise ImportError("claude-agent-sdk is not installed. Install it with: pip install claude-agent-sdk") + + # Use request-specific options if provided, otherwise use default + options = request_options or self._claude_options + + # If we have an existing client but need new options, replace it + if existing_client and request_options: + logger.debug(f"Recreating ClaudeSDKClient for session {session_key} with new options") + + # Create client with options + client = ClaudeSDKClient(options=options) + self._session_manager.set_claude_client(session_key, client) + logger.debug(f"Created new ClaudeSDKClient for session {session_key}") + return client + + async def _extract_user_prompt( + self, + messages: List[Any], + tool_results: Optional[List[Dict]] = None + ) -> str: + """Extract user prompt from AG-UI messages. + + Claude SDK query() and client.query() accept a prompt string. + For multi-turn conversations with persistent sessions, we combine + the conversation history into the prompt. + + Args: + messages: List of AG-UI messages + tool_results: Optional tool result messages + + Returns: + Combined prompt string + """ + if not messages: + return "" + + # Extract text from user messages + user_texts = [] + for message in messages: + if hasattr(message, 'role') and message.role == "user": + content = getattr(message, 'content', '') + if content: + user_texts.append(str(content)) + + # Add tool results if provided + if tool_results: + for tool_result in tool_results: + tool_msg = tool_result['message'] + tool_content = getattr(tool_msg, 'content', '') + if tool_content: + user_texts.append(f"[Tool result]: {tool_content}") + + # Combine into single prompt + # For persistent sessions, Claude SDK maintains conversation history + # So we mainly need the latest user message + if user_texts: + # Use the latest user message as the prompt + return user_texts[-1] + + return "" + + async def _stream_events( + self, + execution: ExecutionState + ) -> AsyncGenerator[BaseEvent, None]: + """Stream events from execution queue.""" + while True: + try: + event = await asyncio.wait_for( + execution.event_queue.get(), + timeout=1.0 + ) + + if event is None: + execution.is_complete = True + break + + yield event + + except asyncio.TimeoutError: + if execution.is_stale(self._execution_timeout): + yield RunErrorEvent( + type=EventType.RUN_ERROR, + message="Execution timed out", + code="EXECUTION_TIMEOUT" + ) + break + + if execution.task.done(): + if execution.event_queue.qsize() > 0: + continue + break + + async def _add_pending_tool_call( + self, + session_id: str, + tool_call_id: str, + app_name: str, + user_id: str + ): + """Add a tool call to the session's pending list.""" + try: + pending_calls = await self._session_manager.get_session_state( + session_id, app_name, user_id + ) or {} + pending_calls = pending_calls.get("pending_tool_calls", []) + + if tool_call_id not in pending_calls: + pending_calls.append(tool_call_id) + await self._session_manager.update_session_state( + session_id, + app_name, + user_id, + {"pending_tool_calls": pending_calls} + ) + except Exception as e: + logger.error(f"Failed to add pending tool call: {e}") + + async def _has_pending_tool_calls(self, session_id: str) -> bool: + """Check if session has pending tool calls.""" + try: + metadata = self._get_session_metadata(session_id) + if metadata: + state = await self._session_manager.get_session_state( + session_id, + metadata["app_name"], + metadata["user_id"] + ) + if state: + return len(state.get("pending_tool_calls", [])) > 0 + except Exception as e: + logger.error(f"Failed to check pending tool calls: {e}") + return False + + def _get_session_metadata(self, session_id: str) -> Optional[Dict[str, str]]: + """Get session metadata.""" + if session_id in self._session_lookup_cache: + return self._session_lookup_cache[session_id] + return None + + async def _cleanup_stale_executions(self): + """Clean up stale executions.""" + stale_threads = [] + for thread_id, execution in self._active_executions.items(): + if execution.is_stale(self._execution_timeout): + stale_threads.append(thread_id) + + for thread_id in stale_threads: + execution = self._active_executions.pop(thread_id) + await execution.cancel() + logger.info(f"Cleaned up stale execution for thread {thread_id}") + + async def close(self): + """Clean up resources.""" + async with self._execution_lock: + for execution in self._active_executions.values(): + await execution.cancel() + self._active_executions.clear() + + self._session_lookup_cache.clear() + await self._session_manager.stop_cleanup_task() + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/endpoint.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/endpoint.py new file mode 100644 index 000000000..4e0a25ed3 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/endpoint.py @@ -0,0 +1,88 @@ +"""FastAPI endpoint for Claude Agent SDK middleware.""" + +from fastapi import FastAPI, Request +from fastapi.responses import StreamingResponse +from ag_ui.core import RunAgentInput +from ag_ui.encoder import EventEncoder +from .claude_agent import ClaudeAgent + +import logging +logger = logging.getLogger(__name__) + + +def add_claude_fastapi_endpoint(app: FastAPI, agent: ClaudeAgent, path: str = "/"): + """Add Claude Agent SDK middleware endpoint to FastAPI app. + + Args: + app: FastAPI application instance + agent: Configured ClaudeAgent instance + path: API endpoint path + """ + + @app.post(path) + async def claude_endpoint(input_data: RunAgentInput, request: Request): + """Claude Agent SDK middleware endpoint.""" + + # Get the accept header from the request + accept_header = request.headers.get("accept") + + # Create an event encoder to properly format SSE events + encoder = EventEncoder(accept=accept_header) + + async def event_generator(): + """Generate events from Claude agent.""" + try: + async for event in agent.run(input_data): + try: + encoded = encoder.encode(event) + logger.debug(f"HTTP Response: {encoded}") + yield encoded + except Exception as encoding_error: + # Handle encoding-specific errors + logger.error(f"Event encoding error: {encoding_error}", exc_info=True) + from ag_ui.core import RunErrorEvent, EventType + error_event = RunErrorEvent( + type=EventType.RUN_ERROR, + message=f"Event encoding failed: {str(encoding_error)}", + code="ENCODING_ERROR" + ) + try: + error_encoded = encoder.encode(error_event) + yield error_encoded + except Exception: + logger.error("Failed to encode error event, yielding basic SSE error") + yield "event: error\ndata: {\"error\": \"Event encoding failed\"}\n\n" + break + except Exception as agent_error: + # Handle errors from ClaudeAgent.run() itself + logger.error(f"ClaudeAgent error: {agent_error}", exc_info=True) + try: + from ag_ui.core import RunErrorEvent, EventType + error_event = RunErrorEvent( + type=EventType.RUN_ERROR, + message=f"Agent execution failed: {str(agent_error)}", + code="AGENT_ERROR" + ) + error_encoded = encoder.encode(error_event) + yield error_encoded + except Exception: + logger.error("Failed to encode agent error event, yielding basic SSE error") + yield "event: error\ndata: {\"error\": \"Agent execution failed\"}\n\n" + + return StreamingResponse(event_generator(), media_type=encoder.get_content_type()) + + +def create_claude_app(agent: ClaudeAgent, path: str = "/") -> FastAPI: + """Create a FastAPI app with Claude Agent SDK middleware endpoint. + + Args: + agent: Configured ClaudeAgent instance + path: API endpoint path + + Returns: + FastAPI application instance + """ + app = FastAPI(title="Claude Agent SDK Middleware for AG-UI Protocol") + add_claude_fastapi_endpoint(app, agent, path) + return app + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/event_translator.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/event_translator.py new file mode 100644 index 000000000..50907c32f --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/event_translator.py @@ -0,0 +1,315 @@ +"""Event translator for converting Claude SDK responses to AG-UI protocol events.""" + +import json +import uuid +from typing import AsyncGenerator, Optional, Dict, Any, List +import logging + +try: + from ag_ui.core import ( + BaseEvent, EventType, + TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, + ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, + ToolCallResultEvent, StateSnapshotEvent, StateDeltaEvent, + CustomEvent + ) +except ImportError: + pass + +# Claude SDK imports +try: + from claude_agent_sdk import ( + Message, + AssistantMessage, + UserMessage, + SystemMessage, + ResultMessage, + TextBlock, + ToolUseBlock, + ToolResultBlock, + ThinkingBlock, + ) +except ImportError: + # Type checking fallback + Message = None + AssistantMessage = None + TextBlock = None + ToolUseBlock = None + ToolResultBlock = None + ThinkingBlock = None + +logger = logging.getLogger(__name__) + + +class EventTranslator: + """Translates Claude SDK responses to AG-UI protocol events. + + This class handles the conversion between Claude SDK responses and AG-UI events, + managing streaming sequences and maintaining event consistency. + + Note: This implementation is based on common Anthropic SDK patterns. + Actual API may vary - adjust based on Claude Agent SDK documentation. + """ + + def __init__(self): + """Initialize the event translator.""" + # Track tool call IDs for consistency + self._active_tool_calls: Dict[str, str] = {} + # Track streaming message state + self._streaming_message_id: Optional[str] = None + self._is_streaming: bool = False + self._current_stream_text: str = "" + self._last_streamed_text: Optional[str] = None + self._last_streamed_run_id: Optional[str] = None + self.long_running_tool_ids: List[str] = [] + + async def translate_claude_message( + self, + claude_message: Message, + thread_id: str, + run_id: str + ) -> AsyncGenerator[BaseEvent, None]: + """Translate a Claude SDK Message to AG-UI protocol events. + + Args: + claude_message: The Claude SDK Message object + thread_id: The AG-UI thread ID + run_id: The AG-UI run ID + + Yields: + One or more AG-UI protocol events + """ + try: + # Handle different message types + # Use hasattr to check for content attribute (AssistantMessage) or subtype (ResultMessage) + # This works with both real types and Mock objects + if hasattr(claude_message, 'content') and claude_message.content is not None: + # Treat as AssistantMessage + async for event in self._translate_assistant_message( + claude_message, thread_id, run_id + ): + yield event + elif hasattr(claude_message, 'subtype') or (AssistantMessage is not None and isinstance(claude_message, ResultMessage)): + # ResultMessage indicates completion or error + # Close any active streaming message + async for event in self.force_close_streaming_message(): + yield event + + # Check subtype for success/error + subtype = getattr(claude_message, 'subtype', None) + if subtype == 'error': + # Handle error - should already be handled by agent + logger.warning(f"Received error result: {claude_message}") + # UserMessage, SystemMessage are typically input, not output + # They don't need translation to AG-UI events + + except Exception as e: + logger.error(f"Error translating Claude message: {e}", exc_info=True) + + async def _translate_assistant_message( + self, + message: AssistantMessage, + thread_id: str, + run_id: str + ) -> AsyncGenerator[BaseEvent, None]: + """Translate AssistantMessage content blocks to AG-UI events.""" + if not hasattr(message, 'content') or not message.content: + return + + # Process each content block + # Use hasattr checks to support both real types and Mock objects + for block in message.content: + if hasattr(block, 'text'): + # TextBlock has 'text' attribute + async for event in self._translate_text_block(block, thread_id, run_id): + yield event + elif hasattr(block, 'id') and hasattr(block, 'name') and hasattr(block, 'input'): + # ToolUseBlock has 'id', 'name', and 'input' attributes + async for event in self._translate_tool_use_block(block): + yield event + elif hasattr(block, 'tool_use_id') or (hasattr(block, 'id') and hasattr(block, 'content') and not hasattr(block, 'text')): + # ToolResultBlock has 'tool_use_id' or 'id' with 'content' but no 'text' + async for event in self._translate_tool_result_block(block): + yield event + elif isinstance(block, ThinkingBlock) if ThinkingBlock else False: + # Thinking blocks can be translated to thinking events if needed + # For now, we'll skip them or convert to text + logger.debug(f"Received ThinkingBlock: {block}") + + async def _translate_text_block( + self, + block: TextBlock, + thread_id: str, + run_id: str + ) -> AsyncGenerator[BaseEvent, None]: + """Translate TextBlock to AG-UI text message events.""" + text = getattr(block, 'text', '') or '' + if not text: + return + + # Check if this is a complete message or streaming chunk + # Claude SDK streams TextBlocks, so we treat each as a content chunk + if not self._is_streaming: + # Start new message + self._streaming_message_id = str(uuid.uuid4()) + self._is_streaming = True + self._current_stream_text = "" + + yield TextMessageStartEvent( + type=EventType.TEXT_MESSAGE_START, + message_id=self._streaming_message_id, + role="assistant" + ) + + # Add text content + self._current_stream_text += text + yield TextMessageContentEvent( + type=EventType.TEXT_MESSAGE_CONTENT, + message_id=self._streaming_message_id, + delta=text + ) + + async def _translate_tool_use_block( + self, + block: ToolUseBlock + ) -> AsyncGenerator[BaseEvent, None]: + """Translate ToolUseBlock to AG-UI tool call events.""" + # Close any active text stream before tool calls + async for event in self.force_close_streaming_message(): + yield event + + tool_call_id = getattr(block, 'id', None) or str(uuid.uuid4()) + tool_name = getattr(block, 'name', 'unknown') + tool_input = getattr(block, 'input', {}) + + # Check if this is a long-running tool + # This depends on tool configuration - for now, assume client tools are LRO + is_long_running = True # TODO: Determine from tool configuration + + if is_long_running: + self.long_running_tool_ids.append(tool_call_id) + + self._active_tool_calls[tool_call_id] = tool_call_id + + yield ToolCallStartEvent( + type=EventType.TOOL_CALL_START, + tool_call_id=tool_call_id, + tool_call_name=tool_name, + parent_message_id=None + ) + + if tool_input: + args_str = json.dumps(tool_input) if isinstance(tool_input, dict) else str(tool_input) + yield ToolCallArgsEvent( + type=EventType.TOOL_CALL_ARGS, + tool_call_id=tool_call_id, + delta=args_str + ) + + yield ToolCallEndEvent( + type=EventType.TOOL_CALL_END, + tool_call_id=tool_call_id + ) + + self._active_tool_calls.pop(tool_call_id, None) + + async def _translate_tool_result_block( + self, + block: ToolResultBlock + ) -> AsyncGenerator[BaseEvent, None]: + """Translate ToolResultBlock to AG-UI tool result events.""" + tool_call_id = getattr(block, 'tool_use_id', None) or getattr(block, 'id', None) + + if not tool_call_id: + logger.warning("ToolResultBlock missing tool_call_id") + return + + # Skip long-running tools (handled by frontend) + if tool_call_id in self.long_running_tool_ids: + logger.debug(f"Skipping ToolCallResultEvent for long-running tool: {tool_call_id}") + return + + # Extract content from tool result + content = getattr(block, 'content', None) + is_error = getattr(block, 'is_error', False) + + # Convert content to string + if isinstance(content, list): + # Content is list of content blocks + content_str = json.dumps([self._extract_text_from_block(cb) for cb in content]) + elif isinstance(content, str): + content_str = content + else: + content_str = json.dumps(content) if content else "" + + if is_error: + # Mark as error in content + content_str = json.dumps({"error": True, "content": content_str}) + + yield ToolCallResultEvent( + message_id=str(uuid.uuid4()), + type=EventType.TOOL_CALL_RESULT, + tool_call_id=tool_call_id, + content=content_str + ) + + def _extract_text_from_block(self, block: Any) -> str: + """Extract text from a content block.""" + if isinstance(block, dict): + return block.get('text', '') or block.get('content', '') + elif hasattr(block, 'text'): + return block.text + elif hasattr(block, 'content'): + return block.content + else: + return str(block) + + + def _create_state_delta_event( + self, + state_delta: Dict[str, Any], + thread_id: str, + run_id: str + ) -> StateDeltaEvent: + """Create a state delta event from state changes.""" + # Convert to JSON Patch format (RFC 6902) + patches = [] + for key, value in state_delta.items(): + patches.append({ + "op": "add", + "path": f"/{key}", + "value": value + }) + + return StateDeltaEvent( + type=EventType.STATE_DELTA, + delta=patches + ) + + async def force_close_streaming_message(self) -> AsyncGenerator[BaseEvent, None]: + """Force close any open streaming message.""" + if self._is_streaming and self._streaming_message_id: + logger.warning(f"Force-closing unterminated streaming message: {self._streaming_message_id}") + yield TextMessageEndEvent( + type=EventType.TEXT_MESSAGE_END, + message_id=self._streaming_message_id + ) + self._reset_streaming_state() + + def _reset_streaming_state(self): + """Reset streaming state.""" + if self._current_stream_text: + self._last_streamed_text = self._current_stream_text + self._current_stream_text = "" + self._streaming_message_id = None + self._is_streaming = False + + def reset(self): + """Reset the translator state.""" + self._active_tool_calls.clear() + self._reset_streaming_state() + self._last_streamed_text = None + self._last_streamed_run_id = None + self.long_running_tool_ids.clear() + logger.debug("Reset EventTranslator state") + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/execution_state.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/execution_state.py new file mode 100644 index 000000000..2079a4067 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/execution_state.py @@ -0,0 +1,124 @@ +"""Execution state management for background Claude SDK runs with tool support.""" + +import asyncio +import time +from typing import Optional, Set +import logging + +logger = logging.getLogger(__name__) + + +class ExecutionState: + """Manages the state of a background Claude SDK execution. + + This class tracks: + - The background asyncio task running the Claude SDK client + - Event queue for streaming results to the client + - Execution timing and completion state + """ + + def __init__( + self, + task: asyncio.Task, + thread_id: str, + event_queue: asyncio.Queue + ): + """Initialize execution state. + + Args: + task: The asyncio task running the Claude SDK client + thread_id: The thread ID for this execution + event_queue: Queue containing events to stream to client + """ + self.task = task + self.thread_id = thread_id + self.event_queue = event_queue + self.start_time = time.time() + self.is_complete = False + self.pending_tool_calls: Set[str] = set() # Track outstanding tool call IDs for HITL + + logger.debug(f"Created execution state for thread {thread_id}") + + def is_stale(self, timeout_seconds: int) -> bool: + """Check if this execution has been running too long. + + Args: + timeout_seconds: Maximum execution time in seconds + + Returns: + True if execution has exceeded timeout + """ + return time.time() - self.start_time > timeout_seconds + + async def cancel(self): + """Cancel the execution and clean up resources.""" + logger.info(f"Cancelling execution for thread {self.thread_id}") + + # Cancel the background task + if not self.task.done(): + self.task.cancel() + try: + await self.task + except asyncio.CancelledError: + pass + + self.is_complete = True + + def get_execution_time(self) -> float: + """Get the total execution time in seconds. + + Returns: + Time in seconds since execution started + """ + return time.time() - self.start_time + + def add_pending_tool_call(self, tool_call_id: str): + """Add a tool call ID to the pending set. + + Args: + tool_call_id: The tool call ID to track + """ + self.pending_tool_calls.add(tool_call_id) + logger.debug(f"Added pending tool call {tool_call_id} to thread {self.thread_id}") + + def remove_pending_tool_call(self, tool_call_id: str): + """Remove a tool call ID from the pending set. + + Args: + tool_call_id: The tool call ID to remove + """ + self.pending_tool_calls.discard(tool_call_id) + logger.debug(f"Removed pending tool call {tool_call_id} from thread {self.thread_id}") + + def has_pending_tool_calls(self) -> bool: + """Check if there are outstanding tool calls waiting for responses. + + Returns: + True if there are pending tool calls (HITL scenario) + """ + return len(self.pending_tool_calls) > 0 + + def get_status(self) -> str: + """Get a human-readable status of the execution. + + Returns: + Status string describing the current state + """ + if self.is_complete: + if self.has_pending_tool_calls(): + return "complete_awaiting_tools" + else: + return "complete" + elif self.task.done(): + return "task_done" + else: + return "running" + + def __repr__(self) -> str: + """String representation of the execution state.""" + return ( + f"ExecutionState(thread_id='{self.thread_id}', " + f"status='{self.get_status()}', " + f"runtime={self.get_execution_time():.1f}s)" + ) + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/session_manager.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/session_manager.py new file mode 100644 index 000000000..bb96b9810 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/session_manager.py @@ -0,0 +1,453 @@ +"""Session manager for Claude SDK integration.""" + +from typing import Dict, Optional, Set, Any, List, Union +import asyncio +import logging +import time + +logger = logging.getLogger(__name__) + + +class SessionManager: + """Session manager for Claude SDK sessions. + + Manages conversation sessions, message tracking, and state management. + Supports both persistent client sessions and stateless query mode. + """ + + _instance = None + _initialized = False + + def __new__(cls, **kwargs): + """Ensure singleton instance.""" + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__( + self, + session_timeout_seconds: int = 1200, # 20 minutes default + cleanup_interval_seconds: int = 300, # 5 minutes + max_sessions_per_user: Optional[int] = None, + auto_cleanup: bool = True + ): + """Initialize the session manager. + + Args: + session_timeout_seconds: Time before a session is considered expired + cleanup_interval_seconds: Interval between cleanup cycles + max_sessions_per_user: Maximum concurrent sessions per user (None = unlimited) + auto_cleanup: Enable automatic session cleanup task + """ + if self._initialized: + return + + self._timeout = session_timeout_seconds + self._cleanup_interval = cleanup_interval_seconds + self._max_per_user = max_sessions_per_user + self._auto_cleanup = auto_cleanup + + # Session tracking + self._sessions: Dict[str, Dict[str, Any]] = {} # session_key -> session_data + self._session_keys: Set[str] = set() # "app_name:session_id" keys + self._user_sessions: Dict[str, Set[str]] = {} # user_id -> set of session_keys + self._processed_message_ids: Dict[str, Set[str]] = {} # session_key -> set of message_ids + self._claude_clients: Dict[str, Any] = {} # session_key -> Claude SDK client (if using persistent mode) + + self._cleanup_task: Optional[asyncio.Task] = None + self._initialized = True + + logger.info( + f"Initialized SessionManager - " + f"timeout: {session_timeout_seconds}s, " + f"cleanup: {cleanup_interval_seconds}s, " + f"max/user: {max_sessions_per_user or 'unlimited'}" + ) + + @classmethod + def get_instance(cls, **kwargs): + """Get the singleton instance.""" + return cls(**kwargs) + + @classmethod + def reset_instance(cls): + """Reset singleton for testing.""" + if cls._instance and hasattr(cls._instance, '_cleanup_task'): + task = cls._instance._cleanup_task + if task: + try: + task.cancel() + except RuntimeError: + pass + cls._instance = None + cls._initialized = False + + def _make_session_key(self, app_name: str, session_id: str) -> str: + """Create a session key.""" + return f"{app_name}:{session_id}" + + def _track_session(self, session_key: str, user_id: str): + """Track a session key.""" + self._session_keys.add(session_key) + if user_id not in self._user_sessions: + self._user_sessions[user_id] = set() + self._user_sessions[user_id].add(session_key) + + def _untrack_session(self, session_key: str, user_id: str): + """Remove session tracking.""" + self._session_keys.discard(session_key) + self._sessions.pop(session_key, None) + self._processed_message_ids.pop(session_key, None) + self._claude_clients.pop(session_key, None) + + if user_id in self._user_sessions: + self._user_sessions[user_id].discard(session_key) + if not self._user_sessions[user_id]: + del self._user_sessions[user_id] + + async def get_or_create_session( + self, + session_id: str, + app_name: str, + user_id: str, + initial_state: Optional[Dict[str, Any]] = None + ) -> Dict[str, Any]: + """Get existing session or create new one. + + Returns session data dictionary. + """ + session_key = self._make_session_key(app_name, session_id) + + # Check user limits before creating + if session_key not in self._session_keys and self._max_per_user: + user_count = len(self._user_sessions.get(user_id, set())) + if user_count >= self._max_per_user: + await self._remove_oldest_user_session(user_id) + + if session_key not in self._sessions: + # Create new session + self._sessions[session_key] = { + "session_id": session_id, + "app_name": app_name, + "user_id": user_id, + "state": initial_state or {}, + "created_at": time.time(), + "last_update_time": time.time(), + "messages": [] + } + logger.info(f"Created new session: {session_key}") + else: + # Update last access time + self._sessions[session_key]["last_update_time"] = time.time() + logger.debug(f"Retrieved existing session: {session_key}") + + # Track the session + self._track_session(session_key, user_id) + + # Start cleanup if needed + if self._auto_cleanup and not self._cleanup_task: + self._start_cleanup_task() + + return self._sessions[session_key] + + def get_processed_message_ids(self, app_name: str, session_id: str) -> Set[str]: + """Get processed message IDs for a session.""" + session_key = self._make_session_key(app_name, session_id) + return set(self._processed_message_ids.get(session_key, set())) + + def mark_messages_processed( + self, + app_name: str, + session_id: str, + message_ids: Set[str], + ) -> None: + """Mark messages as processed.""" + session_key = self._make_session_key(app_name, session_id) + processed_ids = self._processed_message_ids.setdefault(session_key, set()) + processed_ids.update(message_ids) + + async def update_session_state( + self, + session_id: str, + app_name: str, + user_id: str, + state_updates: Dict[str, Any], + merge: bool = True + ) -> bool: + """Update session state. + + Args: + session_id: Session identifier + app_name: Application name + user_id: User identifier + state_updates: Dictionary of state key-value pairs to update + merge: If True, merge with existing state; if False, replace completely + + Returns: + True if successful, False otherwise + """ + try: + session_key = self._make_session_key(app_name, session_id) + if session_key not in self._sessions: + logger.debug(f"Session not found for update: {session_key}") + return False + + if merge: + self._sessions[session_key]["state"].update(state_updates) + else: + self._sessions[session_key]["state"] = state_updates + + self._sessions[session_key]["last_update_time"] = time.time() + logger.debug(f"Updated state for session {session_key}") + return True + except Exception as e: + logger.error(f"Failed to update session state: {e}", exc_info=True) + return False + + async def get_session_state( + self, + session_id: str, + app_name: str, + user_id: str + ) -> Optional[Dict[str, Any]]: + """Get current session state.""" + try: + session_key = self._make_session_key(app_name, session_id) + if session_key not in self._sessions: + return None + return self._sessions[session_key].get("state", {}) + except Exception as e: + logger.error(f"Failed to get session state: {e}", exc_info=True) + return None + + async def get_state_value( + self, + session_id: str, + app_name: str, + user_id: str, + key: str, + default: Any = None + ) -> Any: + """Get a specific state value by key. + + Args: + session_id: Session identifier + app_name: Application name + user_id: User identifier + key: State key to retrieve + default: Default value if key not found + + Returns: + State value or default + """ + state = await self.get_session_state(session_id, app_name, user_id) + if state is None: + return default + return state.get(key, default) + + async def set_state_value( + self, + session_id: str, + app_name: str, + user_id: str, + key: str, + value: Any + ) -> bool: + """Set a specific state value by key. + + Args: + session_id: Session identifier + app_name: Application name + user_id: User identifier + key: State key to set + value: Value to set + + Returns: + True if successful, False otherwise + """ + return await self.update_session_state( + session_id=session_id, + app_name=app_name, + user_id=user_id, + state_updates={key: value} + ) + + async def remove_state_keys( + self, + session_id: str, + app_name: str, + user_id: str, + keys: Union[str, List[str]] + ) -> bool: + """Remove one or more state keys. + + Args: + session_id: Session identifier + app_name: Application name + user_id: User identifier + keys: Key or list of keys to remove + + Returns: + True if successful, False otherwise + """ + try: + session_key = self._make_session_key(app_name, session_id) + if session_key not in self._sessions: + return False + + if isinstance(keys, str): + keys = [keys] + + state = self._sessions[session_key].get("state", {}) + for key in keys: + state.pop(key, None) + + self._sessions[session_key]["last_update_time"] = time.time() + logger.debug(f"Removed state keys {keys} from session {session_key}") + return True + except Exception as e: + logger.error(f"Failed to remove state keys: {e}", exc_info=True) + return False + + async def clear_session_state( + self, + session_id: str, + app_name: str, + user_id: str, + preserve_prefixes: Optional[List[str]] = None + ) -> bool: + """Clear session state, optionally preserving keys with specific prefixes. + + Args: + session_id: Session identifier + app_name: Application name + user_id: User identifier + preserve_prefixes: List of prefixes to preserve (e.g., ["user_", "app_"]) + + Returns: + True if successful, False otherwise + """ + try: + session_key = self._make_session_key(app_name, session_id) + if session_key not in self._sessions: + return False + + state = self._sessions[session_key].get("state", {}) + preserve_prefixes = preserve_prefixes or [] + + # Build new state with preserved keys + new_state = {} + for key, value in state.items(): + should_preserve = any(key.startswith(prefix) for prefix in preserve_prefixes) + if should_preserve: + new_state[key] = value + + self._sessions[session_key]["state"] = new_state + self._sessions[session_key]["last_update_time"] = time.time() + logger.debug(f"Cleared session state for {session_key}, preserved {len(new_state)} keys") + return True + except Exception as e: + logger.error(f"Failed to clear session state: {e}", exc_info=True) + return False + + def get_session_count(self) -> int: + """Get total number of active sessions. + + Returns: + Number of active sessions + """ + return len(self._session_keys) + + def get_user_session_count(self, user_id: str) -> int: + """Get number of active sessions for a specific user. + + Args: + user_id: User identifier + + Returns: + Number of active sessions for the user + """ + return len(self._user_sessions.get(user_id, set())) + + def get_claude_client(self, session_key: str) -> Optional[Any]: + """Get Claude SDK client for a session (if using persistent mode).""" + return self._claude_clients.get(session_key) + + def set_claude_client(self, session_key: str, client: Any): + """Set Claude SDK client for a session.""" + self._claude_clients[session_key] = client + + def _start_cleanup_task(self): + """Start the cleanup task if not already running.""" + try: + loop = asyncio.get_running_loop() + self._cleanup_task = loop.create_task(self._cleanup_loop()) + logger.debug(f"Started session cleanup task") + except RuntimeError: + logger.debug("No event loop, cleanup will start later") + + async def _cleanup_loop(self): + """Periodically clean up expired sessions.""" + logger.debug("Cleanup loop started") + while True: + try: + await asyncio.sleep(self._cleanup_interval) + await self._cleanup_expired_sessions() + except asyncio.CancelledError: + logger.info("Cleanup task cancelled") + break + except Exception as e: + logger.error(f"Cleanup error: {e}", exc_info=True) + + async def _cleanup_expired_sessions(self): + """Clean up expired sessions and disconnect ClaudeSDKClient connections.""" + current_time = time.time() + expired_count = 0 + + for session_key in list(self._session_keys): + session = self._sessions.get(session_key) + if not session: + continue + + age = current_time - session["last_update_time"] + if age > self._timeout: + # Check for pending tool calls before deletion (HITL scenarios) + pending_calls = session.get("state", {}).get("pending_tool_calls", []) + if pending_calls: + logger.info(f"Preserving expired session {session_key} - has {len(pending_calls)} pending tool calls") + else: + user_id = session["user_id"] + self._untrack_session(session_key, user_id) + expired_count += 1 + + if expired_count > 0: + logger.info(f"Cleaned up {expired_count} expired sessions") + + async def _remove_oldest_user_session(self, user_id: str): + """Remove the oldest session for a user.""" + if user_id not in self._user_sessions: + return + + oldest_session_key = None + oldest_time = float('inf') + + for session_key in self._user_sessions[user_id]: + session = self._sessions.get(session_key) + if session and session["last_update_time"] < oldest_time: + oldest_time = session["last_update_time"] + oldest_session_key = session_key + + if oldest_session_key: + self._untrack_session(oldest_session_key, user_id) + logger.info(f"Removed oldest session for user {user_id}: {oldest_session_key}") + + async def stop_cleanup_task(self): + """Stop the cleanup task.""" + if self._cleanup_task: + self._cleanup_task.cancel() + try: + await self._cleanup_task + except asyncio.CancelledError: + pass + self._cleanup_task = None + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/tool_adapter.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/tool_adapter.py new file mode 100644 index 000000000..a968aa2e4 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/tool_adapter.py @@ -0,0 +1,182 @@ +"""Tool adapter for converting AG-UI tools to Claude SDK format.""" + +import json +from typing import List, Dict, Any, Optional +import logging + +try: + from ag_ui.core import Tool as AGUITool +except ImportError: + AGUITool = None + +try: + from claude_agent_sdk import SdkMcpTool, create_sdk_mcp_server +except ImportError: + SdkMcpTool = None + create_sdk_mcp_server = None + +logger = logging.getLogger(__name__) + + +class ToolAdapter: + """Adapter for converting AG-UI tools to Claude SDK tool format. + + Note: This implementation is based on common Anthropic SDK patterns. + Adjust based on actual Claude Agent SDK tool format (e.g., SdkMcpTool). + """ + + @staticmethod + def convert_ag_ui_tool_to_claude(ag_ui_tool: AGUITool) -> Any: + """Convert an AG-UI tool to Claude SDK SdkMcpTool format. + + Args: + ag_ui_tool: AG-UI tool definition + + Returns: + SdkMcpTool instance + + Note: For client-side tools (long-running), we create a placeholder handler. + The actual tool execution is handled by the frontend via AG-UI events. + For backend tools, implement the actual handler logic. + """ + if SdkMcpTool is None: + raise ImportError("claude-agent-sdk is not installed. Install it with: pip install claude-agent-sdk") + + # Convert AG-UI parameters (JSON Schema) to Claude format + parameters = ag_ui_tool.parameters + + # Ensure it's a proper object schema + if not isinstance(parameters, dict): + parameters = {"type": "object", "properties": {}} + logger.warning(f"Tool {ag_ui_tool.name} had non-dict parameters, using empty schema") + + # For client-side tools (long-running), create a placeholder handler + # The tool will emit events to frontend, which executes it + async def placeholder_handler(args: Dict[str, Any]) -> Dict[str, Any]: + """Placeholder handler for client-side long-running tools. + + This handler should not be called for client-side tools. + The tool execution happens on the frontend via AG-UI events. + If this is called, it indicates a configuration issue. + """ + logger.warning( + f"Placeholder handler called for client-side tool '{ag_ui_tool.name}'. " + f"This should not happen - tool execution should be handled by frontend." + ) + return { + "content": [{ + "type": "text", + "text": "Tool execution handled by frontend" + }] + } + + # Create SdkMcpTool with placeholder handler + # Note: The actual tool execution flow: + # 1. Claude SDK calls tool -> ToolUseBlock emitted + # 2. EventTranslator converts to AG-UI TOOL_CALL_* events + # 3. Frontend receives events and executes tool + # 4. Frontend sends ToolMessage back + # 5. Tool result processed and sent to Claude SDK + claude_tool = SdkMcpTool( + name=ag_ui_tool.name, + description=ag_ui_tool.description or "", + input_schema=parameters, + handler=placeholder_handler + ) + + logger.debug(f"Converted AG-UI tool '{ag_ui_tool.name}' to SdkMcpTool (client-side)") + return claude_tool + + @staticmethod + def convert_ag_ui_tools_to_claude(ag_ui_tools: List[AGUITool]) -> List[Any]: + """Convert a list of AG-UI tools to Claude SDK format. + + Args: + ag_ui_tools: List of AG-UI tool definitions + + Returns: + List of SdkMcpTool instances + """ + return [ + ToolAdapter.convert_ag_ui_tool_to_claude(tool) + for tool in ag_ui_tools + ] + + @staticmethod + def create_mcp_server_for_tools( + ag_ui_tools: List[AGUITool], + server_name: str = "ag_ui_tools", + server_version: str = "1.0.0" + ) -> Any: + """Create an MCP server for AG-UI tools. + + Args: + ag_ui_tools: List of AG-UI tool definitions + server_name: Name for the MCP server + server_version: Version for the MCP server + + Returns: + MCP server instance + """ + if create_sdk_mcp_server is None: + raise ImportError("claude-agent-sdk is not installed") + + claude_tools = ToolAdapter.convert_ag_ui_tools_to_claude(ag_ui_tools) + + return create_sdk_mcp_server( + name=server_name, + version=server_version, + tools=claude_tools + ) + + @staticmethod + def is_long_running_tool(ag_ui_tool: AGUITool) -> bool: + """Check if a tool should be treated as long-running (client-side execution). + + Args: + ag_ui_tool: AG-UI tool definition + + Returns: + True if tool should be executed on client side + """ + # TODO: Determine logic for long-running tools + # For now, assume all client-provided tools are long-running + # Backend tools should be handled separately + return True + + @staticmethod + def extract_tool_call_id(tool_call: Any) -> Optional[str]: + """Extract tool call ID from Claude SDK ToolUseBlock. + + Args: + tool_call: Claude SDK ToolUseBlock object + + Returns: + Tool call ID or None + """ + return getattr(tool_call, 'id', None) + + @staticmethod + def extract_tool_name(tool_call: Any) -> Optional[str]: + """Extract tool name from Claude SDK ToolUseBlock. + + Args: + tool_call: Claude SDK ToolUseBlock object + + Returns: + Tool name or None + """ + return getattr(tool_call, 'name', None) + + @staticmethod + def extract_tool_args(tool_call: Any) -> Dict[str, Any]: + """Extract tool arguments from Claude SDK ToolUseBlock. + + Args: + tool_call: Claude SDK ToolUseBlock object + + Returns: + Dictionary of tool arguments + """ + return getattr(tool_call, 'input', {}) or {} + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/__init__.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/__init__.py new file mode 100644 index 000000000..557443e64 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/__init__.py @@ -0,0 +1,2 @@ +"""Utility functions for Claude Agent SDK integration.""" + diff --git a/integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/converters.py b/integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/converters.py new file mode 100644 index 000000000..054ba5e36 --- /dev/null +++ b/integrations/claude-agent-sdk/python/src/ag_ui_claude/utils/converters.py @@ -0,0 +1,203 @@ +"""Conversion utilities between AG-UI and Claude SDK formats.""" + +from typing import List, Dict, Any, Optional +import json +import logging + +from ag_ui.core import ( + Message, UserMessage, AssistantMessage, SystemMessage, ToolMessage, + ToolCall, FunctionCall +) + +logger = logging.getLogger(__name__) + + +def convert_ag_ui_messages_to_claude(messages: List[Message]) -> List[Dict[str, Any]]: + """Convert AG-UI messages to Claude SDK message format. + + Args: + messages: List of AG-UI messages + + Returns: + List of Claude SDK message dictionaries + + TODO: Adjust based on actual Claude SDK message format. + Example format might be: + [ + {"role": "user", "content": "..."}, + {"role": "assistant", "content": "..."}, + {"role": "tool", "tool_call_id": "...", "content": "..."} + ] + """ + claude_messages = [] + + for message in messages: + try: + role = message.role + + if isinstance(message, (UserMessage, SystemMessage)): + claude_messages.append({ + "role": role, + "content": message.content or "" + }) + + elif isinstance(message, AssistantMessage): + content_parts = [] + + # Add text content if present + if message.content: + content_parts.append({ + "type": "text", + "text": message.content + }) + + # Add tool calls if present + if message.tool_calls: + for tool_call in message.tool_calls: + content_parts.append({ + "type": "tool_use", + "id": tool_call.id, + "name": tool_call.function.name, + "input": json.loads(tool_call.function.arguments) if isinstance(tool_call.function.arguments, str) else tool_call.function.arguments + }) + + claude_messages.append({ + "role": "assistant", + "content": content_parts if content_parts else [{"type": "text", "text": ""}] + }) + + elif isinstance(message, ToolMessage): + claude_messages.append({ + "role": "tool", + "tool_call_id": message.tool_call_id, + "content": message.content or "" + }) + + except Exception as e: + logger.error(f"Error converting message {getattr(message, 'id', 'unknown')}: {e}") + continue + + return claude_messages + + +def convert_claude_message_to_ag_ui(claude_message: Dict[str, Any]) -> Optional[Message]: + """Convert a Claude SDK message to an AG-UI message. + + Args: + claude_message: Claude SDK message dictionary + + Returns: + AG-UI message or None if not convertible + + TODO: Adjust based on actual Claude SDK message format. + """ + try: + role = claude_message.get("role") + content = claude_message.get("content", "") + + if role == "user": + # Handle string or array content + if isinstance(content, str): + text = content + elif isinstance(content, list): + text = " ".join( + item.get("text", "") if isinstance(item, dict) else str(item) + for item in content + ) + else: + text = str(content) + + return UserMessage( + id=claude_message.get("id"), + role="user", + content=text + ) + + elif role == "assistant": + # Extract text and tool calls + text_parts = [] + tool_calls = [] + + if isinstance(content, list): + for part in content: + if isinstance(part, dict): + if part.get("type") == "text": + text_parts.append(part.get("text", "")) + elif part.get("type") == "tool_use": + tool_calls.append(ToolCall( + id=part.get("id"), + type="function", + function=FunctionCall( + name=part.get("name", ""), + arguments=json.dumps(part.get("input", {})) + ) + )) + elif isinstance(content, str): + text_parts.append(content) + + return AssistantMessage( + id=claude_message.get("id"), + role="assistant", + content="\n".join(text_parts) if text_parts else None, + tool_calls=tool_calls if tool_calls else None + ) + + elif role == "tool": + return ToolMessage( + id=claude_message.get("id"), + role="tool", + tool_call_id=claude_message.get("tool_call_id"), + content=claude_message.get("content", "") + ) + + except Exception as e: + logger.error(f"Error converting Claude message: {e}") + + return None + + +def convert_state_to_json_patch(state_delta: Dict[str, Any]) -> List[Dict[str, Any]]: + """Convert a state delta to JSON Patch format (RFC 6902). + + Args: + state_delta: Dictionary of state changes + + Returns: + List of JSON Patch operations + """ + patches = [] + + for key, value in state_delta.items(): + if value is None: + patches.append({ + "op": "remove", + "path": f"/{key}" + }) + else: + patches.append({ + "op": "add", + "path": f"/{key}", + "value": value + }) + + return patches + + +def create_error_message(error: Exception, context: str = "") -> str: + """Create a user-friendly error message. + + Args: + error: The exception + context: Additional context about where the error occurred + + Returns: + Formatted error message + """ + error_type = type(error).__name__ + error_msg = str(error) + + if context: + return f"{context}: {error_type} - {error_msg}" + else: + return f"{error_type}: {error_msg}" + diff --git a/integrations/claude-agent-sdk/python/tests/__init__.py b/integrations/claude-agent-sdk/python/tests/__init__.py new file mode 100644 index 000000000..1bd6ff3e8 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/__init__.py @@ -0,0 +1,2 @@ +"""Tests for Claude Agent SDK integration.""" + diff --git a/integrations/claude-agent-sdk/python/tests/__pycache__/__init__.cpython-312.pyc b/integrations/claude-agent-sdk/python/tests/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40f07dde3c6717c8603fb30f1a4970e5a7ef0512 GIT binary patch literal 245 zcmX@j%ge<81PA{yXX*p##~=<2FhUuhIe?7m3@Hpz43&(UOjYV3sl_G53TgR83eGu+ zr75Wjj_Ij+B?`eV-U^v{C8_B}i6xo&d3t`DjJMe1<5TjJjpzpOYpKP6SSpeR2pHMvATFgGTvg)En)$3 E0BAKx0{{R3 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/tests/__pycache__/conftest.cpython-312-pytest-8.4.2.pyc b/integrations/claude-agent-sdk/python/tests/__pycache__/conftest.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eea1b6f110147d6d5822edbda9b10fd81630f3eb GIT binary patch literal 8120 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 Rjd0i=^i5}lwf>;2a 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 JC4%gw{(mv#Uxxqy literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/tests/__pycache__/test_endpoint.cpython-312-pytest-8.4.2.pyc b/integrations/claude-agent-sdk/python/tests/__pycache__/test_endpoint.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0e21f9de6b300de71279ab4873671d4e05d1bb2 GIT binary patch literal 14393 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%0AT|WYg4|^ge7l`m0$2-z(;T2$+gI&BhxScJ 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 literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/tests/__pycache__/test_integration_tools.cpython-312-pytest-8.4.2.pyc b/integrations/claude-agent-sdk/python/tests/__pycache__/test_integration_tools.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e382c6c388d1ac607422519241f84e52a728a58b GIT binary patch literal 8009 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 Zeem$3OCX(Zvn?jUZ(n`6u*uM+E=? literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/tests/__pycache__/test_real_api.cpython-312-pytest-8.4.2.pyc b/integrations/claude-agent-sdk/python/tests/__pycache__/test_real_api.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1374019e918d71439a689727aedcc217290b3f03 GIT binary patch literal 8121 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 Oy6%U9yR?An=6?YOE!oQe literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/tests/__pycache__/test_session_manager.cpython-312-pytest-8.4.2.pyc b/integrations/claude-agent-sdk/python/tests/__pycache__/test_session_manager.cpython-312-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a5c15317be6b997955aab21fccb157f25f44987 GIT binary patch literal 24372 zcmeHPe{37qeZM1lwl;7+aJj+p*)sX&a^S`eVk{q}}EYB^VtoQq=pwWf^bFmJK7q>~%4IB2yP@_TDt{oui2c)vy5MaZ$4j9J91zM*Y zu+R6s`^Do)reZnnfF7hTzwhq7ckkZa_xJa`??$5`0mlPgUm?6#5dMV<#^KYE8y^Sq zlAs7@1VvOl+d1woNs z_3%E=gl9Zye>wR?UMp#-vy*D-@w}!LCX2tCE9OS?YUW2&?{r$M#TqY+@b(;f^}>yB zquZB+yl_UuAThWzUXPIXjj>0wHxLBHbItpz$j{M`Uezz3@uPmMu`ZRy63yon$<{8o ziFSTlyU-@u1#IoYn`kH7+C?_eE@*2P-9)>PtzB#r?ZUQp@lCXg*xDsF(JpFh*QUf? z5YDtKalj5G0ob{Tp4x0ZZQDemg~=m zU-3RArak4skLR^~DTSdDNv9?_O{bpBgV6J-Tv18o&X)3ODxVuUmnz}8GN;oXm8iKE zQ>kgTP}EAf;z%A(<YcHHPiT2n8@N~~j*b;_#mvmazy)n&QpxvEsgq;* zk6X++=Zp?yNDG)rXqZhnkt1 zscqvUaa<|)HNTsTYt1l5tkKN>hw!s!grE3@;PzE{Usc|>Ebsq;9Q~o(#fvNQ{+k-H z+UGKd#D-TFz{%(Ff5U^zn|XD!VnrO2(9&@bZ&tjDPmv1ZHUFzRe}7(30+%rPU-Z1> z{hTBTvmPZd>#cYy-f3~xSMh0oRHBivV@x(M>sOI0zO$kdq!wpAMz2b!L^HsSv50|L zzs6^FLD06@`gdW$6_3HNReMbr#%$FrinzZuYPY(U7zn@YDfQTk#v?Gk%{FmB2;J-K@8?-Kbabl)4Svkb<*;O5h8k7FJ?Pyye+S+D79t zTcs}ZE;^a3_7*NP(cA*F7r*=OPf2XqoLDp8>YOySz?>v(Gw(8wm4Na7mA03C>>H9> z{)S|ut?^6W&}?8Pa7_4uc=@}Gv9_0YaUr1Q!P$zVsa&d>pO}da9pUz+P)j|eyD=0M?HM7OsM7|cFnpvER7K(*ZAvc}{FD~Uz zUlrf+7qnDyvUF7}ckSz&nmLr#Qv6Jciigu$EoyYh+FbS2yr@Rt@H?@bhK@_D>QPk1 z$)n|?wv$KFTIdpW1SEBm)x#b7=*(bRJIGE9rL}ZuwiYUAhKQ*7l)^|U?NfK*!>3LM z2@DZ9l8$nz5*fA0l-f2bO{&=un#a63VWAH|F3=3-)LL71BsV^uRr6Eo$mGOSPR-XM zxSV}*x-gEZ*J}RpNz~A4-C6D2XB! zOYH-5fwy}0t@b=v?Rju*`@Xepy=$GlYdcd{_Al(XuO1Y7AG#q(y`i59QZh6bt;d9Y z=>@rOZuZKf3-P{Hnf_LInHNl0rL(-WWTDG)-<3zrIwpe3Ka3~m`>%B_#WM?XW-*>w zm94)OIdi$pPb^ueSz}So%=ep@4b*=5TBmv0K$qprLgQUfr7CCYZFth3Ys6Nb8#wiT z@oVC#hkS3G3Ilc53H}H3`rhdTqOg%haZP>|`U4%etxE)%E)jC*65*C5fn7szk&c#z zuqj<4d<)KR=@JoBmxwB{t<@z+7F_-o{;x4<5HH_D6qy3Wa$!(RP`YZ1bP9|Va83>eRSep0{aQ{ z5l9obkH7%}2MP2O$N;1RjH9Uobb@t!h_FEdLj(>3Xr!*`EQxcZJsYqW<5A1^Z;mY) z?TFE8RRCAsRQC(JBz8fR?Sv`UKyraDjPxaiu@I&As!^eGZ>;!f_Dh{9UU5`C-0EKU!5CI#w3TgGs z(s%(@!`5+?Yd#xaknA=F<0qzmj=SrJZlU;<04x;QuqD7%8d}3b3F;P#pj#*;(AeSX z^a(Mp5_WKvNQuaUw{qbX4Hk;kznkV~w@|E_L}QM_;y=(QBc+Y&T3jV+aurw#Hm*W6 z%MM#lrv7hS69iWaMdB6;_&U+M8|r}$@Ok5KVdOxs{K2%8{O306Yq!E|TC zm9VyAdjhw4@2G@fn|D&1|3~xgGpr!n)49D%b7pQ)FW6##A)}tM?PZBsa1o_T*xmJsH2S=NQF->SX)}@gJTI%}B8CJeOZ&aDv%-uQBP~t=oFjQwq2BbdjE7 zc2$#LKaQ{GbS(fqJxdl|kPv3&!7geP@vzXyn#;0|^V$K;6qx)*>9y88({P>$P-#zB~dH6N_L!F0@_p42+|LmCzyw_{sXT54@% z3pJRtH7`!#HpF1KGV?*gT$CC05xQ`MhHW$4j@k>y?S*69yyRBg;Gu@nkVeAEFxL1l zSCEoSL2`S@^1=1gBDdPd(7*Pd>l$jYZ4Olkstu_?K2m{vqyiC$2+7oH_mOJ%5u3`i z_saQ&9YZkal1HI3B}rxK2+ajx(CzG9kbCByn%_J3^s3y0zZG8O1rt{3EH5ot=(5~1 zzt^l|BB=aU*Y4G>foj))IS34P`ymW=I}NriG$&!CyYE?$Q*+bvuqIQhGX1UaGB230 zN@sa#$wHUq)I6+7y`_nu@>;y}_h(+5S&)b3lK?Ny%qN%Pdw^ZJ1h5d_bLCPsKC~*+ z-->>MmrPidhv=46W6467fzI%=i`2P^qE8dQa*3l3h&$K&@rG{JBbfY~^>)m{&$Xj? z=g%F4uJ={(BgcHN^#FsG_z}_)he-u|GbVoIr0>o6V`&ur;e<%=B*6y7kyJRQI3mWk zg^J^?T-3KvAAJp~qtm%fiVIxTOoVdxwxuw*iBNZwRN6At<=rWd(k(=urMj%=-fmTt zZQ$N!Ch50fl758=typ<4u^r1KO=(m4k;2)+2p3x^CX$+jm(wbBiY#un4&zg^iz!`H z!0G6aPFEvNIS^-@oQXX)f>uSqRlD8F%w`u>-)y&bGPdlvXL57!dgz>l|Qz>kR~N{l7Oz`PgaUa-VKHQu`_)87g& z^MVPhbe5NvEOc4!oe!9GOk`2+)lJhF?qiy!50hzn!uQ6m;fKZRF<7I%>+wepqVUa! zL_l{Av$YPd^-Y^w@D`Y+;4XS_&BZX)Lua?iUBY*nyM$ZjF6%kGZil<*rYR}Mm%n3j zmw5T!2JXT%PtHFrxwsF zsl-kQI9l*l zDgJATbv=dwmeT<5Q_GCGjd`rv9UiNWEo024A8Jz`tB#f#^BwdVGOvYr`7-lYdxnyRt~=Dz9j@x>z6E(NBu}Iohv83uE4<7LCals~ zURtuyWqI#>#H?c?i}K$30Jn_soHy&8OiAUI@hK1F(PJkdkAOiQJ$BM}JvuC+0L%E4 z0L%E1gD8CKB%S(ufnbB)YKByPZ%aiKS;mV0WzV&Mjn&DU2(1K1#cQGU+9I$L-c(>E z!kA>#5mwsEXwCK)#aD+#4-ivla;-bL!yMu8P2c&&ZicMwoyJ+#tVaLafH zjiHtQKZ5EGzJnQ=iKyRYa0-IzbzM-g#PgJzpP0NriB#N_fbh|r#zW1|1jC^IJA{lT zALL}Q8v!k8rX)TEI{vNJrO(=)1F!#Pb;rZt>uw$javKj;y9X@~MSJ%bx=}ef^d9<*9YUzf zRS4}~kas}{`6$I`7yedwkrzx@rL(-WWTDIQu6dtX$3zz8UG)J(?{C&)+&gQ@phKr5 z@eL9@U*8SvdV<8x^)|>LNqnhjAk$3h-eMUv>bWKvq5X~g zC1#>4(vHE?;CH>y8c*{xxdM(>@mOI?8&`KpD6Uu@Pq{?dF6?kyzp+kW-z~uCE`Qwa zZq`ItSyqCkTnQ=REs`q{$Q3Wb!X#UMIg_{JU(#oCCc>maw7iE{AC@Vo=Sdh$AmE9$ z0$M7krLd}i;-7gX!?UO;VWcKaXrtLd{xgIeDwaM)QPx^mZ;R|%gj5k&EgBwcL@85+ zqM0TeG&{cPQ7K_Z-A%wuwK{EgV%N6Q(6Yw3vS!;_l6=Qz(WpUpw}}dtiz<;;9bD@SZ+!>XIt~67H`4wWz}>+mliLZdCdw8?&S;Xd zMZ52Vmn+!!6FmgEZP#k&(Q4<>*T=q*S?c`tx!_v7YeC+FIAfYc$`CBuv%<^3@V7(- zj+zh+=F{e712r!LL908{@v^+FZ=HG+pMIf%_l{_0S2Z23crfJ;~ zUM?|S?thoOJaCtJIka(;mj{*57V+{h=jAhD#(^R_2Ld%S$B9YN1}{o|_)%!4ERT~o zkUBwNlE7yOXatCO)oB727f~-zc?O`_H*Mv6o42zwkd5=bU7LJ|?(-#p7Rh%$csFR* zBC+B34exCxF{nzyjh8`UtuBxKfM$ip7XAC^)JZ%bJ_xe#Br=}^N7G%`_i;2;{b$@uy9nSUAuJ7O>t0Qy ztBLed;=r7=){RWBB%A``i&!g!#H{2BFY2bO>Us;$@W5hv?(YqXjiQ2q%Zk{#ETNg8_F|H(R)Ob4{o)%&-8@z$QC}ti} z7#YET8E+w23DU9)t+Pbr$qs9=_iR{cn~hY$l?Y2Mh*qMg8^W^wzp~AMTV83n5`=u#1hpUCVs5rS9mU*q zKOKHLVw;;}%ina;*1wA?RWcXc7^A`_2|;7XV=muoa|`%+lgcmp+X@@cxAD_eB1S!B zhrV?|T-mAYs>JoTisf6bZ#7}G!!9w_{E-8~aa4TDZo?QZ2u%96DLqPWrA@y>d&}uT z?Z!QgUo5R5dS}KVen}EjnS3nK*$9gPdMJ+&3vFI!k-)c^*Cl0ar!bz+sVoY}<=i?; zY!p0^nkR6U0DU8;RmxqtRfvzod|F>$L(5+Znz01}TP1>>Z}w1!w8FL=p!GAy_~r=5 zn2m~-N9g3BxrBx=eGLuP$@H;{*eAiZd}fesuP~l3A}IM7x@GHQ4ly{y;L)NgfpMIV}z!xacxYiCb9Zqdf3Y}DnE?!d{L>zjO`GfoSYn= zoJx1Jl2`Kx^_13__CLy=)yqFN{eXpA@j0<;tp3r{46TGk~6Ds zj9>)yejW(M8@P$Z+~zW!Lm%@Y5d6^xeP7=R3>otueHa<@!vYF##>J0`zBd!64x;eg zheg2ei3A%=M^g#*fEjJ65{z^tBqOc6m()f91?)s6Blr-sCBitD>ikj>zTLc8eIF`w zp$^|WqOE*{m`{pvnkLc5v+1X3S2OiOUO^Bvf3|Qj-;^7}@-Wk$TJU^6Kb0+=D`>T_ zo-9HIE+T6ZyV{%{(`MWN0ZiWiEd*)Wxvoe3LvY1bm14BN`Fmfu}uqVa)#c!Sz0ULN0IVza1xQ>ZwJr>j2=7zJLidgZ$ zv_mR|_N|h>oCn)|!b#vf6cKwCVCOt)VKYX&Hig&4yfeJhY=1kef49^T(-ntIaI2=v zjuaKMCX5g4RTarl;f-HX z<>5plA2i!&F;zO3D>?RtB?UT{!v0^Q5xs~ZPiij=Su6JgpIr)bTrMKeS=Z`leL0p_aZcl0e zUPU&> zR&@uJUTqWQb}-d|@BL~FjxSMkbC@^QyO(J857289%^KUnV)0xv{a#$Kufw}I4+7QK z<#B}8;pyjS9iHRT}{>rtM77L z?U2&?Rbch|99MTphxMz#>c<^d+ohC#6|M zC!uF_)yLluy&S0TU&l{PHulhDk>6S}%fFlq_t#)2Ol+t8lv*g|YeDl=Euf#{6#JL- zuK$`k+m##5P8YI#hv$qD7Be=^B=wPh7=J_9vjj+0dq;kVf6ouAe}^Kz6+ycPpzak# h@%uvWzthL_eDnuG?4N{VKlLj*`594k`yVC5=jpwQ}Qa}lB>VSvZPd@EZ23U1dtpwbdl+5XGku& zf4MU&X}8P5i4AxI6sS-qh>H3_D1yR*93YQ*3?Ta{dEkmvNDo|8K-HfBeV`DKF)_ z3W@1%o)fs&I4$@tr-kka>|N76RUs+Yc3##E(@oE5&1nayRfCdpe-pF9*rEM{5Xj7oOliOJ)nbZ(l5iNS=X1G+d*7sD^k zahmWhcgL=p4uVWq>vJs4cW<3n`bY))8npV&-Nv=3s>%ELZIkT!{ikf1W(0x*{M6+7ft*E9OS&}Q8xl+*z zW%ay~s~A>fCNl?J&gnTbDG=OTmZ%pi1!yMcOW6#S7AwV^Np`@)WPr&;%A{1*iJ8+4 zOD6jFDmkKSw?Q?EnSxFd*iEFIAy5F#F+dgMv#-7RIxae@g`wwX3|u_r>FmUt21ra? zhvCoXGR0K2Fmct$mNb1FUV)RF$jpvcaud0tsm~HR9%CY#&s0DnGYg9`ZfFY=<*GSX zDo&WFxRk0Uyi3j4s#~sFJ#3NH%&c0;(WkZ1wvCY5AQFc$8h--hZSM0R*FCV-GqN_2 zelVb{2f5MY+JRRdNrBOw>k%xB9{lhdOUlboGraRrH2gyEdLK9P(#>x?8jKHgeIDxR zj;wP%;m8x{jjO%LhQa2MY8mS#ZQ(+;j7wF6spDWfNoDEYQDN?CAzM~q4X^4X>tH6n zBLx5N!2gr~fR%oO<6AbYqiBm_U99t}yOG13=|B`WAH;52ueu8RK_ zWH=aoy-+R@lSu^GPyo#qa^+-%;O}L{3*ZP)t;Dsq613chfURq0)o-Ro-tCM~B zAd2H>>v`B;NV5VP(NTZlxPd-{;$8&ziZx2tXtR~9rQ5M@%O*HNjc8smY z@b5k=vw};TSj$Sw9=j47yVd8)xXiuS*zZ0|?0(D%;gb(zy?_1258qfCIPsg<%j*)< z{I`*WVg8_Z>L~x?ub-Ui=I$nV;O};iOr-;NQv&jnJo4!P@LAjYgEl_Y{0FFIs9EP{ z`9%Sc(M8F5e+$}-itFH}C$M`i6imc#T z_U>Ei-q(=UMbSpoGtK@pzo;ztzuGwe*^ZqzuD<`uQf%L?Q6M*7xi#9{v2QhofA?9L z6AwOBYr;nXClCWKR(vKeR-#@k^?QAo9Qp%$u_2%Dxw#iByIyQqi##VU7Eukn*g8M& zVwm$&a&Cfv=c*#0o{McZ>Y+nKulW&&^X^)-1@*)h)Qi>jG1S9I2r=)%)VCBC2hr3G z!#pcWb(YoFq;zUBH3=!4s22trR+K$uK4F(#0MFR~Z}1{fU_4|m5QwsAlto^|ngd9{ zl5-5;x~WG?4q^p$WcSz+n&DN z+qLKYnMQQ&;4$zfSL6c^diL7z7qQ{*RI~ro+R*6QP;%{s{hx=#on4Ld>oIQc{@;UZ z34Z8WY-BZ-ZpPC0V@I}zxc+ky{^nGCYCm^(j0gVi{*iN`z{jEh{Kr8a`A`7(mP`^t z975ic55Ok-Gf6JIL2&4YH_xT)7?$&nqAWr#5uj112dJ9~;r%uObCJ54(8dR8&o3}{ z9pfznb60X3fw`NAa07G5y+L3u+0I&U+kv?o;yY^y&YFzQ+G3z8Lohu-VMf1hl1!EY z4I&Gq3-fv9^>fM$DHUkW4)R!Ehlq0_WyMi|MW^Y*N61nVP)uHn%(U8Q7*1*Z}EwktSD@@Fupjv#lUnjp~JO zt?l1hw@?lz*rr&!QLz#a`(9Y>OE>${KR>wKce)V<`u2`;^oivWN+NQ?cW_FEf+|2(* z`#(%9?K#nitjGfo6T4Rvhnk5)A5JePPBg@|fxWlBxwPx(l6$}eY=8{ zT-wBHR$BJh75ON%b%k8!o_zF68MYkv<($hL_l$bSQ@s<~^e*rR*1N#A^-gs44&2M< z!_yw7%05INytJIcVfY`|I}TZ-(0$@y}l?5w3# zQ=O9^O!-okC0{{qo6cQ(p3}}@h&UMUWT!oaxxwJEkAXHGJE=Hl)t-&&&AIk9oaY7` zxcv^$A{svh!m^v}tD&K_fswUc3ZyQ(BMosq=07R_g|^&3)j0p)_j^#j*&$70D$V~5 z9F)hoyD>Nx=kLZxrc!~sUlEWW=aEkZfWMgBVaX~@ldGx~QPo08tK@ayW2*YSN+yp1 zDU?F0s+F>;N>Ask&`j<+eC46DqdBpVAq!S0V^kqxC=o;wf(c=A0m+{t`Ew*15(G(7 zKthmQ2XdREP)1Wz1kEia_z{Hh8zAp;pNeA-r09F!{r-0!2|J|7lK>a&TSspFAQz0i z_ty8{T9pQx(!i%uWGR|nmJUoN01Dz2cd3#cT3Ahg3ROw*O7zI zyf*a9y6f?EH@GfB@$vqkbntPvO^zYA`*F7@jX*Zr-^n8(Zoh(ZY|1#>WG|`1&61t3 zT<9UGHK?+WQBv%@0M0E^M88IICVb=KR#_ptj;SCXomz4HvJaI!g~tT!41@kA=t)?E zU-3`%7{8w<1=TAQ7kkXF+2O_FubpQYW literal 0 HcmV?d00001 diff --git a/integrations/claude-agent-sdk/python/tests/conftest.py b/integrations/claude-agent-sdk/python/tests/conftest.py new file mode 100644 index 000000000..2d0f5f900 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/conftest.py @@ -0,0 +1,219 @@ +"""Pytest configuration and shared fixtures for Claude Agent SDK tests.""" + +import os +import pytest +from pathlib import Path +from unittest.mock import Mock, MagicMock, AsyncMock +from types import SimpleNamespace + +# Load environment variables from .env.local if it exists +try: + from dotenv import load_dotenv + + # Get the project root directory (integrations/claude-agent-sdk/python) + project_root = Path(__file__).parent.parent + + # Try to load .env.local first, then fall back to .env + env_local = project_root / ".env.local" + env_file = project_root / ".env" + + if env_local.exists(): + load_dotenv(env_local, override=True) + print(f"Loaded environment variables from {env_local}") + elif env_file.exists(): + load_dotenv(env_file, override=True) + print(f"Loaded environment variables from {env_file}") +except ImportError: + # python-dotenv not installed, skip loading + pass + +try: + from ag_ui.core import RunAgentInput, UserMessage, Tool as AGUITool +except ImportError: + pass + +try: + from claude_agent_sdk import ( + ClaudeSDKClient, + ClaudeAgentOptions, + AssistantMessage, + TextBlock, + ToolUseBlock, + ResultMessage, + ) +except ImportError: + # Type checking fallback + pass + + +@pytest.fixture(autouse=True) +def reset_session_manager(): + """Reset session manager before and after each test.""" + from ag_ui_claude.session_manager import SessionManager + + try: + SessionManager.reset_instance() + except (RuntimeError, AttributeError): + # Event loop may be closed or instance not initialized - ignore + pass + + yield + + # Cleanup after test + try: + SessionManager.reset_instance() + except (RuntimeError, AttributeError): + pass + + +@pytest.fixture +def mock_claude_sdk_client(): + """Create a mock ClaudeSDKClient.""" + client = AsyncMock(spec=ClaudeSDKClient) + + # Mock the query method + async def mock_query(prompt: str): + pass + + # Mock the receive_response method + async def mock_receive_response(): + # Return empty generator by default + if False: + yield + + client.query = AsyncMock(side_effect=mock_query) + client.receive_response = AsyncMock(side_effect=mock_receive_response) + + return client + + +@pytest.fixture +def mock_claude_agent_options(): + """Create a mock ClaudeAgentOptions.""" + options = Mock(spec=ClaudeAgentOptions) + options.system_prompt = None + options.permission_mode = None + options.allowed_tools = None + options.mcp_servers = None + return options + + +@pytest.fixture +def sample_run_agent_input(): + """Create a sample RunAgentInput for testing.""" + return RunAgentInput( + thread_id="test_thread_001", + run_id="test_run_001", + messages=[ + UserMessage( + id="msg_1", + role="user", + content="Hello, Claude!" + ) + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + +@pytest.fixture +def sample_ag_ui_tool(): + """Create a sample AG-UI Tool for testing.""" + return AGUITool( + name="get_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state" + } + }, + "required": ["location"] + } + ) + + +@pytest.fixture +def mock_assistant_message_with_text(): + """Create a mock AssistantMessage with TextBlock.""" + text_block = SimpleNamespace() + text_block.text = "Hello! How can I help you?" + + # Create a class that mimics AssistantMessage + class MockAssistantMessage: + def __init__(self): + self.content = [text_block] + + message = MockAssistantMessage() + return message + + +@pytest.fixture +def mock_assistant_message_with_tool(): + """Create a mock AssistantMessage with ToolUseBlock.""" + tool_block = SimpleNamespace() + tool_block.id = "tool_call_123" + tool_block.name = "get_weather" + tool_block.input = {"location": "San Francisco"} + + class MockAssistantMessage: + def __init__(self): + self.content = [tool_block] + + message = MockAssistantMessage() + return message + + +@pytest.fixture +def mock_result_message_success(): + """Create a mock ResultMessage indicating success.""" + class MockResultMessage: + def __init__(self): + self.subtype = "success" + + message = MockResultMessage() + return message + + +@pytest.fixture +def mock_result_message_error(): + """Create a mock ResultMessage indicating error.""" + class MockResultMessage: + def __init__(self): + self.subtype = "error" + + message = MockResultMessage() + return message + + +@pytest.fixture +def claude_agent_persistent(): + """Create a ClaudeAgent instance with persistent sessions.""" + from ag_ui_claude import ClaudeAgent + + return ClaudeAgent( + use_persistent_sessions=True, + app_name="test_app", + user_id="test_user", + execution_timeout_seconds=60, + max_concurrent_executions=5 + ) + + +@pytest.fixture +def claude_agent_stateless(): + """Create a ClaudeAgent instance with stateless mode.""" + from ag_ui_claude import ClaudeAgent + + return ClaudeAgent( + use_persistent_sessions=False, + app_name="test_app", + user_id="test_user", + execution_timeout_seconds=60, + max_concurrent_executions=5 + ) + diff --git a/integrations/claude-agent-sdk/python/tests/test_claude_agent.py b/integrations/claude-agent-sdk/python/tests/test_claude_agent.py new file mode 100644 index 000000000..79f5aa765 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_claude_agent.py @@ -0,0 +1,264 @@ +"""Tests for ClaudeAgent middleware.""" + +import pytest +import asyncio +from unittest.mock import Mock, MagicMock, AsyncMock, patch, call +from types import SimpleNamespace + +from ag_ui_claude import ClaudeAgent, SessionManager +from ag_ui.core import ( + RunAgentInput, EventType, UserMessage, SystemMessage, + RunStartedEvent, RunFinishedEvent, RunErrorEvent, + TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, + ToolCallStartEvent, ToolCallEndEvent +) + + +class TestClaudeAgent: + """Test cases for ClaudeAgent.""" + + @pytest.fixture(autouse=True) + def reset_session_manager(self): + """Reset session manager before each test.""" + SessionManager.reset_instance() + yield + SessionManager.reset_instance() + + @pytest.fixture + def claude_agent_persistent(self): + """Create ClaudeAgent with persistent sessions.""" + return ClaudeAgent( + use_persistent_sessions=True, + app_name="test_app", + user_id="test_user", + execution_timeout_seconds=60, + max_concurrent_executions=5 + ) + + @pytest.fixture + def claude_agent_stateless(self): + """Create ClaudeAgent with stateless mode.""" + return ClaudeAgent( + use_persistent_sessions=False, + app_name="test_app", + user_id="test_user", + execution_timeout_seconds=60, + max_concurrent_executions=5 + ) + + @pytest.fixture + def sample_input(self): + """Create a sample RunAgentInput.""" + return RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage( + id="msg_1", + role="user", + content="Hello!" + ) + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + def test_initialization_persistent(self): + """Test ClaudeAgent initialization with persistent sessions.""" + agent = ClaudeAgent( + use_persistent_sessions=True, + app_name="test_app", + user_id="test_user" + ) + + assert agent._use_persistent_sessions is True + assert agent._static_app_name == "test_app" + assert agent._static_user_id == "test_user" + + def test_initialization_stateless(self): + """Test ClaudeAgent initialization with stateless mode.""" + agent = ClaudeAgent( + use_persistent_sessions=False, + app_name="test_app" + ) + + assert agent._use_persistent_sessions is False + + def test_initialization_with_claude_options(self): + """Test initialization with ClaudeAgentOptions.""" + from claude_agent_sdk import ClaudeAgentOptions + + options = ClaudeAgentOptions(system_prompt="Test prompt") + agent = ClaudeAgent( + claude_options=options, + app_name="test_app" + ) + + assert agent._claude_options == options + + def test_app_name_extraction(self, claude_agent_persistent, sample_input): + """Test app name extraction.""" + app_name = claude_agent_persistent._get_app_name(sample_input) + assert app_name == "test_app" + + def test_user_id_extraction(self, claude_agent_persistent, sample_input): + """Test user ID extraction.""" + user_id = claude_agent_persistent._get_user_id(sample_input) + assert user_id == "test_user" + + @pytest.mark.asyncio + async def test_get_unseen_messages(self, claude_agent_persistent, sample_input): + """Test unseen messages extraction.""" + unseen = await claude_agent_persistent._get_unseen_messages(sample_input) + assert len(unseen) == 1 + assert unseen[0].content == "Hello!" + + @pytest.mark.asyncio + async def test_get_unseen_messages_with_processed(self, claude_agent_persistent, sample_input): + """Test unseen messages with processed message IDs.""" + # Mark message as processed + claude_agent_persistent._session_manager.mark_messages_processed( + "test_app", + "test_thread", + ["msg_1"] + ) + + unseen = await claude_agent_persistent._get_unseen_messages(sample_input) + assert len(unseen) == 0 + + @pytest.mark.asyncio + async def test_extract_user_prompt(self, claude_agent_persistent): + """Test user prompt extraction.""" + messages = [ + UserMessage(id="1", role="user", content="First message"), + UserMessage(id="2", role="user", content="Second message") + ] + + prompt = await claude_agent_persistent._extract_user_prompt(messages) + assert prompt == "Second message" + + @pytest.mark.asyncio + async def test_extract_user_prompt_empty(self, claude_agent_persistent): + """Test user prompt extraction with empty messages.""" + prompt = await claude_agent_persistent._extract_user_prompt([]) + assert prompt == "" + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.ClaudeSDKClient') + async def test_get_claude_client_persistent(self, mock_client_class, claude_agent_persistent): + """Test getting Claude client in persistent mode.""" + mock_client = AsyncMock() + mock_client_class.return_value = mock_client + + session_key = "test_app:test_thread" + client = claude_agent_persistent._get_claude_client(session_key) + + assert client is not None + mock_client_class.assert_called_once() + + @pytest.mark.asyncio + async def test_get_claude_client_stateless(self, claude_agent_stateless): + """Test getting Claude client in stateless mode.""" + session_key = "test_app:test_thread" + client = claude_agent_stateless._get_claude_client(session_key) + + assert client is None + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.claude_query') + async def test_call_claude_sdk_stateless(self, mock_query, claude_agent_stateless): + """Test calling Claude SDK in stateless mode.""" + # Mock messages - use MagicMock instead of SimpleNamespace with __class__ assignment + mock_message = MagicMock() + + async def mock_query_gen(): + yield mock_message + + mock_query.return_value = mock_query_gen() + + messages = [] + async for msg in claude_agent_stateless._call_claude_sdk(None, "test prompt", None): + messages.append(msg) + + assert len(messages) == 1 + mock_query.assert_called_once() + + @pytest.mark.asyncio + async def test_is_tool_result_submission_true(self, claude_agent_persistent): + """Test detecting tool result submission.""" + from ag_ui.core import ToolMessage + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="1", role="user", content="Hello"), + ToolMessage(id="2", role="tool", tool_call_id="tool_1", content="result") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + is_tool_result = await claude_agent_persistent._is_tool_result_submission(input_data) + assert is_tool_result is True + + @pytest.mark.asyncio + async def test_is_tool_result_submission_false(self, claude_agent_persistent, sample_input): + """Test detecting non-tool result submission.""" + is_tool_result = await claude_agent_persistent._is_tool_result_submission(sample_input) + assert is_tool_result is False + + @pytest.mark.asyncio + async def test_prepare_request_options_no_tools(self, claude_agent_persistent): + """Test preparing request options without tools.""" + options = await claude_agent_persistent._prepare_request_options(None) + assert options is None # Should return None when no tools provided + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.ClaudeAgentOptions') + @patch('ag_ui_claude.tool_adapter.ToolAdapter') + async def test_prepare_request_options_with_tools( + self, mock_tool_adapter, mock_options_class, claude_agent_persistent, sample_ag_ui_tool + ): + """Test preparing request options with tools.""" + # Mock MCP server + mock_mcp_server = Mock() + mock_tool_adapter.create_mcp_server_for_tools.return_value = mock_mcp_server + + # Mock options + mock_options = Mock() + mock_options_class.return_value = mock_options + + tools = [sample_ag_ui_tool] + options = await claude_agent_persistent._prepare_request_options(tools) + + assert options is not None + mock_tool_adapter.create_mcp_server_for_tools.assert_called_once() + + @pytest.mark.asyncio + async def test_run_error_on_no_user_message(self, claude_agent_persistent): + """Test run() handles missing user message.""" + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[], # No user messages + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + events = [] + async for event in claude_agent_persistent.run(input_data): + events.append(event) + + # Should emit RUN_STARTED and then handle the error + assert len(events) > 0 + # Check if we got an error or finished event + event_types = [e.type for e in events] + assert EventType.RUN_STARTED in event_types + diff --git a/integrations/claude-agent-sdk/python/tests/test_endpoint.py b/integrations/claude-agent-sdk/python/tests/test_endpoint.py new file mode 100644 index 000000000..e46771d10 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_endpoint.py @@ -0,0 +1,165 @@ +"""Tests for FastAPI endpoint integration.""" + +import pytest +from unittest.mock import Mock, AsyncMock, patch +from fastapi.testclient import TestClient + +from ag_ui_claude.endpoint import add_claude_fastapi_endpoint, create_claude_app +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage, EventType, RunStartedEvent, RunFinishedEvent + + +class TestAddClaudeFastAPIEndpoint: + """Test cases for add_claude_fastapi_endpoint.""" + + @pytest.fixture + def mock_agent(self): + """Create a mock ClaudeAgent.""" + agent = AsyncMock(spec=ClaudeAgent) + + async def mock_run(input_data): + yield RunStartedEvent( + type=EventType.RUN_STARTED, + thread_id=input_data.thread_id, + run_id=input_data.run_id + ) + yield RunFinishedEvent( + type=EventType.RUN_FINISHED, + thread_id=input_data.thread_id, + run_id=input_data.run_id + ) + + agent.run = AsyncMock(side_effect=mock_run) + return agent + + @pytest.fixture + def app(self, mock_agent): + """Create a FastAPI app with Claude endpoint.""" + from fastapi import FastAPI + + app = FastAPI() + add_claude_fastapi_endpoint(app, mock_agent, path="/chat") + return app + + @pytest.fixture + def client(self, app): + """Create a test client.""" + return TestClient(app) + + def test_endpoint_exists(self, client): + """Test that the endpoint exists.""" + # Test with invalid request to check endpoint exists + response = client.post("/chat", json={}) + # Should not be 404 + assert response.status_code != 404 + + def test_endpoint_accepts_run_agent_input(self, client, mock_agent): + """Test that endpoint accepts RunAgentInput.""" + input_data = { + "thread_id": "test_thread", + "run_id": "test_run", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "Hello!" + } + ], + "state": {}, + "context": [], + "tools": [], + "forwarded_props": {} + } + + response = client.post("/chat", json=input_data) + + # Should process the request (may return 200 or streaming response) + assert response.status_code in [200, 200] # Streaming may return 200 + + # Verify agent.run was called + assert mock_agent.run.called + + def test_endpoint_streaming_response(self, client, mock_agent): + """Test that endpoint returns streaming response.""" + input_data = { + "thread_id": "test_thread", + "run_id": "test_run", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "Hello!" + } + ], + "state": {}, + "context": [], + "tools": [], + "forwarded_props": {} + } + + response = client.post( + "/chat", + json=input_data, + headers={"Accept": "text/event-stream"} + ) + + # Should return streaming response + assert response.status_code == 200 + # Content type should be for SSE + assert "text/event-stream" in response.headers.get("content-type", "").lower() or \ + "application/x-ndjson" in response.headers.get("content-type", "").lower() + + def test_endpoint_error_handling(self, client): + """Test endpoint error handling.""" + # Create agent that raises error + error_agent = AsyncMock(spec=ClaudeAgent) + + async def error_run(input_data): + raise Exception("Test error") + + error_agent.run = AsyncMock(side_effect=error_run) + + from fastapi import FastAPI + app = FastAPI() + add_claude_fastapi_endpoint(app, error_agent, path="/chat") + + client = TestClient(app) + + input_data = { + "thread_id": "test_thread", + "run_id": "test_run", + "messages": [], + "state": {}, + "context": [], + "tools": [], + "forwarded_props": {} + } + + response = client.post("/chat", json=input_data) + + # Should handle error gracefully + assert response.status_code in [200, 500] # May return error event or 500 + + +class TestCreateClaudeApp: + """Test cases for create_claude_app.""" + + @pytest.fixture + def mock_agent(self): + """Create a mock ClaudeAgent.""" + return AsyncMock(spec=ClaudeAgent) + + def test_create_claude_app(self, mock_agent): + """Test creating Claude app.""" + app = create_claude_app(mock_agent, path="/claude-chat") + + assert app is not None + # Verify it's a FastAPI app + assert hasattr(app, "post") + + def test_create_claude_app_default_path(self, mock_agent): + """Test creating Claude app with default path.""" + app = create_claude_app(mock_agent) + + assert app is not None + diff --git a/integrations/claude-agent-sdk/python/tests/test_event_translator.py b/integrations/claude-agent-sdk/python/tests/test_event_translator.py new file mode 100644 index 000000000..f93b02bab --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_event_translator.py @@ -0,0 +1,241 @@ +"""Tests for EventTranslator.""" + +import pytest +from unittest.mock import Mock, MagicMock +from types import SimpleNamespace + +from ag_ui_claude.event_translator import EventTranslator +from ag_ui.core import ( + EventType, + TextMessageStartEvent, + TextMessageContentEvent, + TextMessageEndEvent, + ToolCallStartEvent, + ToolCallArgsEvent, + ToolCallEndEvent, + ToolCallResultEvent, +) + + +class TestEventTranslator: + """Test cases for EventTranslator.""" + + @pytest.fixture + def translator(self): + """Create an EventTranslator instance.""" + return EventTranslator() + + def test_initialization(self, translator): + """Test EventTranslator initialization.""" + assert translator._active_tool_calls == {} + assert translator._streaming_message_id is None + assert translator._is_streaming is False + assert translator._current_stream_text == "" + + @pytest.mark.asyncio + async def test_translate_text_block(self, translator): + """Test translating TextBlock to AG-UI events.""" + text_block = SimpleNamespace() + text_block.text = "Hello, world!" + + events = [] + async for event in translator._translate_text_block(text_block, "thread_1", "run_1"): + events.append(event) + + assert len(events) == 2 # START + CONTENT + assert isinstance(events[0], TextMessageStartEvent) + assert isinstance(events[1], TextMessageContentEvent) + assert events[1].delta == "Hello, world!" + + @pytest.mark.asyncio + async def test_translate_text_block_streaming(self, translator): + """Test translating multiple TextBlocks in sequence.""" + # First block + block1 = SimpleNamespace() + block1.text = "Hello, " + + events1 = [] + async for event in translator._translate_text_block(block1, "thread_1", "run_1"): + events1.append(event) + + # Second block + block2 = SimpleNamespace() + block2.text = "world!" + + events2 = [] + async for event in translator._translate_text_block(block2, "thread_1", "run_1"): + events2.append(event) + + # Should have START from first, CONTENT from both + assert len(events1) == 2 + assert len(events2) == 1 # Only CONTENT, reusing message_id + assert events2[0].delta == "world!" + + @pytest.mark.asyncio + async def test_translate_tool_use_block(self, translator): + """Test translating ToolUseBlock to AG-UI events.""" + tool_block = SimpleNamespace() + tool_block.id = "tool_call_123" + tool_block.name = "get_weather" + tool_block.input = {"location": "San Francisco"} + + events = [] + async for event in translator._translate_tool_use_block(tool_block): + events.append(event) + + assert len(events) >= 3 # START, ARGS, END + assert isinstance(events[0], ToolCallStartEvent) + assert events[0].tool_call_id == "tool_call_123" + assert events[0].tool_call_name == "get_weather" + assert isinstance(events[-1], ToolCallEndEvent) + + @pytest.mark.asyncio + async def test_translate_tool_result_block(self, translator): + """Test translating ToolResultBlock to AG-UI events.""" + tool_result_block = SimpleNamespace() + tool_result_block.tool_use_id = "tool_call_123" + tool_result_block.content = "Sunny, 72°F" + tool_result_block.is_error = False + + events = [] + async for event in translator._translate_tool_result_block(tool_result_block): + events.append(event) + + assert len(events) == 1 + assert isinstance(events[0], ToolCallResultEvent) + assert events[0].tool_call_id == "tool_call_123" + + @pytest.mark.asyncio + async def test_translate_tool_result_block_error(self, translator): + """Test translating ToolResultBlock with error.""" + tool_result_block = SimpleNamespace() + tool_result_block.tool_use_id = "tool_call_123" + tool_result_block.content = "Error occurred" + tool_result_block.is_error = True + + events = [] + async for event in translator._translate_tool_result_block(tool_result_block): + events.append(event) + + assert len(events) == 1 + assert isinstance(events[0], ToolCallResultEvent) + # Error should be marked in content + assert "error" in events[0].content.lower() or "true" in events[0].content.lower() + + @pytest.mark.asyncio + async def test_translate_assistant_message_text(self, translator): + """Test translating AssistantMessage with TextBlock.""" + text_block = SimpleNamespace() + text_block.text = "Hello!" + + message = SimpleNamespace() + message.content = [text_block] + + events = [] + async for event in translator._translate_assistant_message(message, "thread_1", "run_1"): + events.append(event) + + assert len(events) >= 1 + assert any(isinstance(e, TextMessageStartEvent) for e in events) + assert any(isinstance(e, TextMessageContentEvent) for e in events) + + @pytest.mark.asyncio + async def test_translate_assistant_message_tool(self, translator): + """Test translating AssistantMessage with ToolUseBlock.""" + tool_block = SimpleNamespace() + tool_block.id = "tool_1" + tool_block.name = "test_tool" + tool_block.input = {} + + message = SimpleNamespace() + message.content = [tool_block] + + events = [] + async for event in translator._translate_assistant_message(message, "thread_1", "run_1"): + events.append(event) + + assert len(events) >= 1 + assert any(isinstance(e, ToolCallStartEvent) for e in events) + + @pytest.mark.asyncio + async def test_translate_result_message_success(self, translator): + """Test translating ResultMessage with success.""" + result_message = SimpleNamespace() + result_message.subtype = "success" + + events = [] + async for event in translator.translate_claude_message(result_message, "thread_1", "run_1"): + events.append(event) + + # Should close any streaming messages + assert len(events) >= 0 # May have force_close_streaming_message events + + @pytest.mark.asyncio + async def test_force_close_streaming_message(self, translator): + """Test force closing streaming message.""" + # Start streaming + text_block = SimpleNamespace() + text_block.text = "Hello" + + async for _ in translator._translate_text_block(text_block, "thread_1", "run_1"): + pass + + # Force close + events = [] + async for event in translator.force_close_streaming_message(): + events.append(event) + + assert len(events) == 1 + assert isinstance(events[0], TextMessageEndEvent) + assert translator._is_streaming is False + + @pytest.mark.asyncio + async def test_force_close_no_streaming(self, translator): + """Test force close when not streaming.""" + events = [] + async for event in translator.force_close_streaming_message(): + events.append(event) + + assert len(events) == 0 + + def test_reset(self, translator): + """Test resetting translator state.""" + # Set some state + translator._streaming_message_id = "msg_123" + translator._is_streaming = True + translator._active_tool_calls["tool_1"] = "tool_1" + + translator.reset() + + assert translator._streaming_message_id is None + assert translator._is_streaming is False + assert translator._active_tool_calls == {} + + @pytest.mark.asyncio + async def test_translate_claude_message_assistant(self, translator): + """Test translating AssistantMessage.""" + text_block = SimpleNamespace() + text_block.text = "Response" + + message = SimpleNamespace() + message.content = [text_block] + + events = [] + async for event in translator.translate_claude_message(message, "thread_1", "run_1"): + events.append(event) + + assert len(events) > 0 + + @pytest.mark.asyncio + async def test_translate_claude_message_result(self, translator): + """Test translating ResultMessage.""" + result_message = SimpleNamespace() + result_message.subtype = "success" + + events = [] + async for event in translator.translate_claude_message(result_message, "thread_1", "run_1"): + events.append(event) + + # Should handle result message + assert isinstance(events, list) + diff --git a/integrations/claude-agent-sdk/python/tests/test_integration_basic.py b/integrations/claude-agent-sdk/python/tests/test_integration_basic.py new file mode 100644 index 000000000..d91762248 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_integration_basic.py @@ -0,0 +1,170 @@ +"""Integration tests for basic Claude Agent SDK functionality.""" + +import pytest +from unittest.mock import Mock, AsyncMock, patch +from types import SimpleNamespace + +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage, EventType, RunStartedEvent, RunFinishedEvent + + +class TestBasicIntegration: + """Basic integration tests.""" + + @pytest.fixture(autouse=True) + def reset_session_manager(self): + """Reset session manager.""" + from ag_ui_claude.session_manager import SessionManager + SessionManager.reset_instance() + yield + SessionManager.reset_instance() + + @pytest.fixture + def claude_agent(self): + """Create ClaudeAgent instance.""" + return ClaudeAgent( + use_persistent_sessions=False, # Use stateless for simpler testing + app_name="test_app", + user_id="test_user" + ) + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.claude_query') + async def test_basic_conversation_flow(self, mock_query, claude_agent): + """Test basic conversation flow.""" + # Mock Claude SDK response + text_block = SimpleNamespace() + text_block.text = "Hello! How can I help you?" + + assistant_message = SimpleNamespace() + assistant_message.content = [text_block] + + result_message = SimpleNamespace() + result_message.subtype = "success" + + async def mock_query_gen(): + yield assistant_message + yield result_message + + mock_query.return_value = mock_query_gen() + + # Create input + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="msg_1", role="user", content="Hello!") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + # Run agent + events = [] + async for event in claude_agent.run(input_data): + events.append(event) + + # Verify events + assert len(events) > 0 + + # Should have RUN_STARTED + event_types = [e.type for e in events] + assert EventType.RUN_STARTED in event_types + + # Should have RUN_FINISHED + assert EventType.RUN_FINISHED in event_types + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.ClaudeSDKClient') + async def test_persistent_session_flow(self, mock_client_class, claude_agent): + """Test persistent session flow.""" + # Switch to persistent mode + claude_agent._use_persistent_sessions = True + + # Mock client + mock_client = AsyncMock() + mock_client.query = AsyncMock() + + async def mock_receive(): + text_block = SimpleNamespace() + text_block.text = "Response" + + message = SimpleNamespace() + message.__class__ = type('AssistantMessage', (), {}) + message.content = [text_block] + + result_message = SimpleNamespace() + result_message.__class__ = type('ResultMessage', (), {}) + result_message.subtype = "success" + + yield message + yield result_message + + mock_client.receive_response = AsyncMock(side_effect=mock_receive) + mock_client_class.return_value = mock_client + + # Create input + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="msg_1", role="user", content="Hello!") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + # Run agent + events = [] + async for event in claude_agent.run(input_data): + events.append(event) + + # Verify client was used + assert mock_client.query.called + + @pytest.mark.asyncio + async def test_event_sequence(self, claude_agent): + """Test that events are emitted in correct sequence.""" + with patch('ag_ui_claude.claude_agent.claude_query') as mock_query: + # Mock response + text_block = SimpleNamespace() + text_block.text = "Test" + + message = SimpleNamespace() + message.content = [text_block] + + result_message = SimpleNamespace() + result_message.subtype = "success" + + async def mock_gen(): + yield message + yield result_message + + mock_query.return_value = mock_gen() + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="msg_1", role="user", content="Test") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + events = [] + async for event in claude_agent.run(input_data): + events.append(event) + + # Check sequence: RUN_STARTED should come first + assert events[0].type == EventType.RUN_STARTED + + # RUN_FINISHED should come last + assert events[-1].type == EventType.RUN_FINISHED + diff --git a/integrations/claude-agent-sdk/python/tests/test_integration_sessions.py b/integrations/claude-agent-sdk/python/tests/test_integration_sessions.py new file mode 100644 index 000000000..1fdbf84a1 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_integration_sessions.py @@ -0,0 +1,162 @@ +"""Integration tests for session management.""" + +import pytest +from unittest.mock import Mock, AsyncMock, patch +from types import SimpleNamespace + +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage, EventType + + +class TestSessionIntegration: + """Session integration tests.""" + + @pytest.fixture(autouse=True) + def reset_session_manager(self): + """Reset session manager.""" + from ag_ui_claude.session_manager import SessionManager + SessionManager.reset_instance() + yield + SessionManager.reset_instance() + + @pytest.fixture + def claude_agent_persistent(self): + """Create ClaudeAgent with persistent sessions.""" + return ClaudeAgent( + use_persistent_sessions=True, + app_name="test_app", + user_id="test_user" + ) + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.ClaudeSDKClient') + async def test_persistent_session_reuse(self, mock_client_class, claude_agent_persistent): + """Test that persistent sessions reuse clients.""" + mock_client = AsyncMock() + mock_client.query = AsyncMock() + + async def mock_receive(): + result_message = SimpleNamespace() + result_message.subtype = "success" + yield result_message + + mock_client.receive_response = mock_receive + mock_client_class.return_value = mock_client + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run_1", + messages=[ + UserMessage(id="msg_1", role="user", content="First message") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + # First run + events1 = [] + async for event in claude_agent_persistent.run(input_data): + events1.append(event) + + # Second run with same thread_id + input_data2 = RunAgentInput( + thread_id="test_thread", # Same thread + run_id="test_run_2", + messages=[ + UserMessage(id="msg_2", role="user", content="Second message") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + events2 = [] + async for event in claude_agent_persistent.run(input_data2): + events2.append(event) + + # Client should be reused (created once) + assert mock_client_class.call_count == 1 + + @pytest.mark.asyncio + async def test_stateless_session_no_reuse(self, claude_agent_persistent): + """Test that stateless mode doesn't reuse sessions.""" + claude_agent_persistent._use_persistent_sessions = False + + with patch('ag_ui_claude.claude_agent.claude_query') as mock_query: + async def mock_gen(): + result_message = SimpleNamespace() + result_message = SimpleNamespace() + result_message.subtype = "success" + yield result_message + + mock_query.return_value = mock_gen() + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="msg_1", role="user", content="Hello") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + events = [] + async for event in claude_agent_persistent.run(input_data): + events.append(event) + + # Should use query() function directly + assert mock_query.called + + @pytest.mark.asyncio + async def test_message_deduplication(self, claude_agent_persistent): + """Test message deduplication across runs.""" + with patch('ag_ui_claude.claude_agent.claude_query') as mock_query: + async def mock_gen(): + result_message = SimpleNamespace() + result_message = SimpleNamespace() + result_message.subtype = "success" + yield result_message + + mock_query.return_value = mock_gen() + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run_1", + messages=[ + UserMessage(id="msg_1", role="user", content="First") + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + # First run + async for _ in claude_agent_persistent.run(input_data): + pass + + # Second run with same message + input_data2 = RunAgentInput( + thread_id="test_thread", + run_id="test_run_2", + messages=[ + UserMessage(id="msg_1", role="user", content="First"), # Same message + UserMessage(id="msg_2", role="user", content="Second") # New message + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + # Should only process unseen messages + unseen = await claude_agent_persistent._get_unseen_messages(input_data2) + assert len(unseen) == 1 # Only msg_2 should be unseen + assert unseen[0].id == "msg_2" + diff --git a/integrations/claude-agent-sdk/python/tests/test_integration_tools.py b/integrations/claude-agent-sdk/python/tests/test_integration_tools.py new file mode 100644 index 000000000..ce2712653 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_integration_tools.py @@ -0,0 +1,150 @@ +"""Integration tests for tool calling functionality.""" + +import pytest +from unittest.mock import Mock, AsyncMock, patch +from types import SimpleNamespace + +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage, Tool as AGUITool, ToolMessage, EventType + + +class TestToolIntegration: + """Tool integration tests.""" + + @pytest.fixture(autouse=True) + def reset_session_manager(self): + """Reset session manager.""" + from ag_ui_claude.session_manager import SessionManager + SessionManager.reset_instance() + yield + SessionManager.reset_instance() + + @pytest.fixture + def claude_agent(self): + """Create ClaudeAgent instance.""" + return ClaudeAgent( + use_persistent_sessions=False, + app_name="test_app", + user_id="test_user" + ) + + @pytest.fixture + def sample_tool(self): + """Create a sample tool.""" + return AGUITool( + name="get_weather", + description="Get weather", + parameters={ + "type": "object", + "properties": { + "location": {"type": "string"} + }, + "required": ["location"] + } + ) + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.claude_query') + async def test_tool_call_flow(self, mock_query, claude_agent, sample_tool): + """Test tool call flow.""" + # Mock tool use block + tool_block = SimpleNamespace() + tool_block.id = "tool_call_123" + tool_block.name = "get_weather" + tool_block.input = {"location": "San Francisco"} + + message = SimpleNamespace() + message.content = [tool_block] + + result_message = SimpleNamespace() + result_message.subtype = "success" + + async def mock_gen(): + yield message + yield result_message + + mock_query.return_value = mock_gen() + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="msg_1", role="user", content="What's the weather?") + ], + state={}, + context=[], + tools=[sample_tool], + forwarded_props={} + ) + + events = [] + async for event in claude_agent.run(input_data): + events.append(event) + + # Should have tool call events + event_types = [e.type for e in events] + assert EventType.TOOL_CALL_START in event_types + assert EventType.TOOL_CALL_END in event_types + + @pytest.mark.asyncio + @patch('ag_ui_claude.claude_agent.claude_query') + async def test_tool_result_submission(self, mock_query, claude_agent, sample_tool): + """Test tool result submission flow.""" + # Mock response after tool result + text_block = SimpleNamespace() + text_block.text = "The weather is sunny." + + message = SimpleNamespace() + message.content = [text_block] + + result_message = SimpleNamespace() + result_message.subtype = "success" + + async def mock_gen(): + yield message + yield result_message + + mock_query.return_value = mock_gen() + + # Input with tool result + from ag_ui.core import AssistantMessage as AGUIAssistantMessage, ToolCall, FunctionCall + + input_data = RunAgentInput( + thread_id="test_thread", + run_id="test_run", + messages=[ + UserMessage(id="msg_1", role="user", content="What's the weather?"), + AGUIAssistantMessage( + id="msg_2", + role="assistant", + content="", + tool_calls=[ + ToolCall( + id="tool_call_123", + function=FunctionCall( + name="get_weather", + arguments='{"location": "San Francisco"}' + ) + ) + ] + ), + ToolMessage( + id="msg_3", + role="tool", + tool_call_id="tool_call_123", + content="Sunny, 72°F" + ) + ], + state={}, + context=[], + tools=[sample_tool], + forwarded_props={} + ) + + events = [] + async for event in claude_agent.run(input_data): + events.append(event) + + # Should process tool result and continue + assert len(events) > 0 + diff --git a/integrations/claude-agent-sdk/python/tests/test_real_api.py b/integrations/claude-agent-sdk/python/tests/test_real_api.py new file mode 100644 index 000000000..4427a235e --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_real_api.py @@ -0,0 +1,110 @@ +"""Optional real API tests for Claude Agent SDK integration. + +These tests require authentication credentials (ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY). +Skip if not available. +""" + +import pytest +import os + +from ag_ui_claude import ClaudeAgent +from ag_ui.core import RunAgentInput, UserMessage + + +def has_auth_credentials(): + """Check if any authentication credentials are available.""" + return bool(os.getenv("ANTHROPIC_AUTH_TOKEN") or os.getenv("ANTHROPIC_API_KEY")) + + +@pytest.mark.skipif( + not has_auth_credentials(), + reason="No authentication credentials found (ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY) - skipping real API tests" +) +class TestRealAPI: + """Real API integration tests (optional).""" + + @pytest.fixture(autouse=True) + def reset_session_manager(self): + """Reset session manager.""" + from ag_ui_claude.session_manager import SessionManager + SessionManager.reset_instance() + yield + SessionManager.reset_instance() + + @pytest.fixture + def claude_agent(self): + """Create ClaudeAgent with real API.""" + return ClaudeAgent( + use_persistent_sessions=False, # Use stateless for simpler testing + app_name="test_app", + user_id="test_user" + ) + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_real_api_basic_conversation(self, claude_agent): + """Test basic conversation with real API.""" + input_data = RunAgentInput( + thread_id="test_thread_real", + run_id="test_run_real", + messages=[ + UserMessage( + id="msg_1", + role="user", + content="Say hello in exactly 3 words." + ) + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + events = [] + try: + async for event in claude_agent.run(input_data): + events.append(event) + print(f"Event: {event.type}") + except Exception as e: + pytest.fail(f"Real API test failed: {e}") + + # Should have events + assert len(events) > 0 + + # Should have RUN_STARTED and RUN_FINISHED + event_types = [e.type for e in events] + assert "RUN_STARTED" in str(event_types) + assert "RUN_FINISHED" in str(event_types) + + @pytest.mark.asyncio + @pytest.mark.integration + async def test_real_api_with_system_message(self, claude_agent): + """Test with system message.""" + from ag_ui.core import SystemMessage + + input_data = RunAgentInput( + thread_id="test_thread_system", + run_id="test_run_system", + messages=[ + SystemMessage(id="sys_msg_1", content="You are a helpful assistant."), + UserMessage( + id="msg_1", + role="user", + content="What is 2+2?" + ) + ], + state={}, + context=[], + tools=[], + forwarded_props={} + ) + + events = [] + try: + async for event in claude_agent.run(input_data): + events.append(event) + except Exception as e: + pytest.fail(f"Real API test with system message failed: {e}") + + assert len(events) > 0 + diff --git a/integrations/claude-agent-sdk/python/tests/test_session_manager.py b/integrations/claude-agent-sdk/python/tests/test_session_manager.py new file mode 100644 index 000000000..fbff235d9 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_session_manager.py @@ -0,0 +1,301 @@ +"""Tests for SessionManager.""" + +import pytest +import asyncio +from ag_ui_claude.session_manager import SessionManager + + +class TestSessionManager: + """Test cases for SessionManager.""" + + @pytest.fixture(autouse=True) + def reset_session_manager(self): + """Reset session manager before and after each test.""" + SessionManager.reset_instance() + yield + SessionManager.reset_instance() + + @pytest.mark.asyncio + async def test_get_or_create_session_new(self): + """Test creating a new session.""" + manager = SessionManager.get_instance() + + session_state = await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user", + initial_state={"key": "value"} + ) + + assert session_state is not None + assert isinstance(session_state, dict) + + @pytest.mark.asyncio + async def test_get_or_create_session_existing(self): + """Test getting an existing session.""" + manager = SessionManager.get_instance() + + # Create session + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user", + initial_state={"key": "value"} + ) + + # Get existing session + session_state = await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + assert session_state is not None + + @pytest.mark.asyncio + async def test_update_session_state(self): + """Test updating session state.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + success = await manager.update_session_state( + session_id="test_session", + app_name="test_app", + user_id="test_user", + state_updates={"new_key": "new_value"} + ) + + assert success is True + + state = await manager.get_session_state( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + assert state is not None + assert state.get("new_key") == "new_value" + + @pytest.mark.asyncio + async def test_get_state_value(self): + """Test getting a specific state value.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user", + initial_state={"key": "value"} + ) + + value = await manager.get_state_value( + session_id="test_session", + app_name="test_app", + user_id="test_user", + key="key" + ) + + assert value == "value" + + @pytest.mark.asyncio + async def test_get_state_value_default(self): + """Test getting state value with default.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + value = await manager.get_state_value( + session_id="test_session", + app_name="test_app", + user_id="test_user", + key="nonexistent", + default="default_value" + ) + + assert value == "default_value" + + @pytest.mark.asyncio + async def test_set_state_value(self): + """Test setting a specific state value.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + success = await manager.set_state_value( + session_id="test_session", + app_name="test_app", + user_id="test_user", + key="test_key", + value="test_value" + ) + + assert success is True + + value = await manager.get_state_value( + session_id="test_session", + app_name="test_app", + user_id="test_user", + key="test_key" + ) + + assert value == "test_value" + + @pytest.mark.asyncio + async def test_remove_state_keys(self): + """Test removing state keys.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user", + initial_state={"key1": "value1", "key2": "value2"} + ) + + success = await manager.remove_state_keys( + session_id="test_session", + app_name="test_app", + user_id="test_user", + keys=["key1"] + ) + + assert success is True + + value = await manager.get_state_value( + session_id="test_session", + app_name="test_app", + user_id="test_user", + key="key1" + ) + + assert value is None + + @pytest.mark.asyncio + async def test_mark_messages_processed(self): + """Test marking messages as processed.""" + manager = SessionManager.get_instance() + + manager.mark_messages_processed( + app_name="test_app", + session_id="test_session", + message_ids=["msg_1", "msg_2"] + ) + + processed = manager.get_processed_message_ids("test_app", "test_session") + assert "msg_1" in processed + assert "msg_2" in processed + + @pytest.mark.asyncio + async def test_get_processed_message_ids(self): + """Test getting processed message IDs.""" + manager = SessionManager.get_instance() + + manager.mark_messages_processed( + app_name="test_app", + session_id="test_session", + message_ids=["msg_1"] + ) + + processed = manager.get_processed_message_ids("test_app", "test_session") + assert "msg_1" in processed + + def test_make_session_key(self): + """Test session key generation.""" + manager = SessionManager.get_instance() + + key = manager._make_session_key("test_app", "test_session") + assert key == "test_app:test_session" + + def test_get_session_count(self): + """Test getting session count.""" + manager = SessionManager.get_instance() + + # Initially should be 0 + count = manager.get_session_count() + assert count == 0 + + def test_get_user_session_count(self): + """Test getting user session count.""" + manager = SessionManager.get_instance() + + count = manager.get_user_session_count("test_user") + assert count == 0 + + @pytest.mark.asyncio + async def test_clear_session_state(self): + """Test clearing session state.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user", + initial_state={"key1": "value1", "key2": "value2"} + ) + + success = await manager.clear_session_state( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + assert success is True + + state = await manager.get_session_state( + session_id="test_session", + app_name="test_app", + user_id="test_user" + ) + + # State should be cleared or minimal + assert state is None or len(state) == 0 + + @pytest.mark.asyncio + async def test_clear_session_state_preserve_prefixes(self): + """Test clearing session state with preserved prefixes.""" + manager = SessionManager.get_instance() + + await manager.get_or_create_session( + session_id="test_session", + app_name="test_app", + user_id="test_user", + initial_state={"keep_this": "value", "remove_this": "value"} + ) + + success = await manager.clear_session_state( + session_id="test_session", + app_name="test_app", + user_id="test_user", + preserve_prefixes=["keep_"] + ) + + assert success is True + + def test_singleton_pattern(self): + """Test that SessionManager is a singleton.""" + manager1 = SessionManager.get_instance() + manager2 = SessionManager.get_instance() + + assert manager1 is manager2 + + def test_reset_instance(self): + """Test resetting the singleton instance.""" + manager1 = SessionManager.get_instance() + SessionManager.reset_instance() + manager2 = SessionManager.get_instance() + + assert manager1 is not manager2 + diff --git a/integrations/claude-agent-sdk/python/tests/test_tool_adapter.py b/integrations/claude-agent-sdk/python/tests/test_tool_adapter.py new file mode 100644 index 000000000..ee7eb0230 --- /dev/null +++ b/integrations/claude-agent-sdk/python/tests/test_tool_adapter.py @@ -0,0 +1,136 @@ +"""Tests for ToolAdapter.""" + +import pytest +from unittest.mock import Mock, patch, MagicMock + +from ag_ui_claude.tool_adapter import ToolAdapter +from ag_ui.core import Tool as AGUITool + + +class TestToolAdapter: + """Test cases for ToolAdapter.""" + + @pytest.fixture + def sample_ag_ui_tool(self): + """Create a sample AG-UI Tool.""" + return AGUITool( + name="get_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state" + }, + "unit": { + "type": "string", + "enum": ["celsius", "fahrenheit"] + } + }, + "required": ["location"] + } + ) + + @pytest.mark.asyncio + @patch('ag_ui_claude.tool_adapter.SdkMcpTool') + @patch('ag_ui_claude.tool_adapter.create_sdk_mcp_server') + async def test_convert_ag_ui_tool_to_claude(self, mock_sdk_tool, mock_mcp_server, sample_ag_ui_tool): + """Test converting AG-UI tool to Claude SDK format.""" + # Mock SdkMcpTool + mock_tool_instance = Mock() + mock_sdk_tool.return_value = mock_tool_instance + + try: + result = ToolAdapter.convert_ag_ui_tool_to_claude(sample_ag_ui_tool) + assert result is not None + except ImportError: + # If claude-agent-sdk is not installed, skip this test + pytest.skip("claude-agent-sdk not installed") + + @pytest.mark.asyncio + async def test_convert_ag_ui_tools_to_claude(self, sample_ag_ui_tool): + """Test converting multiple AG-UI tools.""" + tools = [sample_ag_ui_tool] + + try: + result = ToolAdapter.convert_ag_ui_tools_to_claude(tools) + assert len(result) == 1 + except ImportError: + pytest.skip("claude-agent-sdk not installed") + + @pytest.mark.asyncio + @patch('ag_ui_claude.tool_adapter.create_sdk_mcp_server') + async def test_create_mcp_server_for_tools(self, mock_create_server, sample_ag_ui_tool): + """Test creating MCP server for tools.""" + mock_server = Mock() + mock_create_server.return_value = mock_server + + tools = [sample_ag_ui_tool] + + try: + server = ToolAdapter.create_mcp_server_for_tools( + ag_ui_tools=tools, + server_name="test_server", + server_version="1.0.0" + ) + + assert server is not None + mock_create_server.assert_called_once() + except ImportError: + pytest.skip("claude-agent-sdk not installed") + + def test_extract_tool_call_id(self): + """Test extracting tool call ID from ToolUseBlock.""" + tool_block = Mock() + tool_block.id = "tool_call_123" + + tool_id = ToolAdapter.extract_tool_call_id(tool_block) + assert tool_id == "tool_call_123" + + def test_extract_tool_name(self): + """Test extracting tool name from ToolUseBlock.""" + tool_block = Mock() + tool_block.name = "get_weather" + + tool_name = ToolAdapter.extract_tool_name(tool_block) + assert tool_name == "get_weather" + + def test_extract_tool_args(self): + """Test extracting tool arguments from ToolUseBlock.""" + tool_block = Mock() + tool_block.input = {"location": "San Francisco"} + + args = ToolAdapter.extract_tool_args(tool_block) + assert args == {"location": "San Francisco"} + + def test_extract_tool_args_empty(self): + """Test extracting tool arguments when input is empty.""" + tool_block = Mock() + tool_block.input = {} + + args = ToolAdapter.extract_tool_args(tool_block) + assert args == {} + + def test_is_long_running_tool(self, sample_ag_ui_tool): + """Test checking if tool is long-running.""" + is_lro = ToolAdapter.is_long_running_tool(sample_ag_ui_tool) + # Currently all client tools are treated as long-running + assert is_lro is True + + @pytest.mark.asyncio + async def test_convert_ag_ui_tool_with_invalid_parameters(self): + """Test converting tool with invalid parameters.""" + tool = AGUITool( + name="test_tool", + description="Test", + parameters="invalid" # Not a dict + ) + + try: + result = ToolAdapter.convert_ag_ui_tool_to_claude(tool) + # Should handle gracefully with empty schema + assert result is not None + except ImportError: + pytest.skip("claude-agent-sdk not installed") + diff --git a/integrations/claude-agent-sdk/typescript/examples/README.md b/integrations/claude-agent-sdk/typescript/examples/README.md new file mode 100644 index 000000000..c20eb8c47 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/README.md @@ -0,0 +1,10 @@ +# CopilotKit Integration Examples + +This directory contains examples showing how to integrate Claude Agent SDK with CopilotKit. + +## copilotkit/ + +A complete Next.js application demonstrating CopilotKit integration with Claude Agent SDK. + +See [copilotkit/README.md](./copilotkit/README.md) for details. + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/.gitignore b/integrations/claude-agent-sdk/typescript/examples/copilotkit/.gitignore new file mode 100644 index 000000000..1403e903b --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md b/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md new file mode 100644 index 000000000..00af938f9 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md @@ -0,0 +1,131 @@ +# CopilotKit + Claude Agent SDK Integration Demo + +这个示例展示了如何使用 AG-UI Protocol 将 Claude Agent SDK é›†ęˆåˆ° CopilotKit 中。 + +## ęž¶ęž„å›¾ + +``` +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ CopilotKit Frontend (React/Next.js) │ +│ - CopilotChat UI │ +│ - Frontend Tools │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ + │ HTTP/SSE + ↓ +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ CopilotKit Runtime (Next.js API) │ +│ - HttpAgent (@ag-ui/client) │ +│ - CopilotRuntime │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ + │ AG-UI Protocol + ↓ +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ Claude Agent SDK Server (FastAPI) │ +│ - AG-UI Protocol Endpoint │ +│ - ClaudeAgent │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¬ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ + │ + ↓ +ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” +│ Claude Agent SDK (Python) │ +│ - ClaudeSDKClient │ +│ - Multi-turn Conversations │ +ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ +``` + +## åæ«é€Ÿå¼€å§‹ + +### 1. 启动 Claude Agent SDK ęœåŠ”å™Ø + +åœØäø€äøŖē»ˆē«Æäø­ļ¼š + +```bash +cd ../../python/examples/server +python fastapi_server.py +``` + +ęœåŠ”å™Øå°†åœØ `http://localhost:8000/chat` čæč”Œć€‚ + +### 2. å®‰č£…å¹¶åÆåŠØ CopilotKit å‰ē«Æ + +åœØå¦äø€äøŖē»ˆē«Æäø­ļ¼š + +```bash +cd integrations/claude-agent-sdk/typescript/examples/copilotkit +npm install +npm run dev +``` + +å‰ē«Æå°†åœØ `http://localhost:3000` čæč”Œć€‚ + +### 3. ę‰“å¼€ęµč§ˆå™Ø + +访问 `http://localhost:3000` ęŸ„ēœ‹ CopilotKit čŠå¤©ē•Œé¢ć€‚ + +## åŠŸčƒ½ē‰¹ę€§ + +- āœ… **ęŒē»­åÆ¹čÆ**: 使用 `ClaudeSDKClient` ē»“ęŠ¤åÆ¹čÆåŽ†å² +- āœ… **å·„å…·ę”ÆęŒ**: Claude åÆä»„č°ƒē”Øå‰ē«Æå·„å…· +- āœ… **ęµå¼å“åŗ”**: é€ščæ‡ Server-Sent Events å®žę—¶ęµå¼ä¼ č¾“ +- āœ… **ä¼ščÆē®”ē†**: č·Øå¤šäøŖčÆ·ę±‚ēš„ęŒä¹…ä¼ščÆ +- āœ… **å®Œę•“åŠŸčƒ½**: ę”ÆęŒäø­ę–­ć€é’©å­ć€č‡Ŗå®šä¹‰å·„å…·ļ¼ˆä½æē”Ø `ClaudeSDKClient` 时) + +## ē›®å½•ē»“ęž„ + +``` +copilotkit/ +ā”œā”€ā”€ src/ +│ └── app/ +│ ā”œā”€ā”€ api/ +│ │ └── copilotkit/ +│ │ └── route.ts # CopilotKit čæč”Œę—¶ē«Æē‚¹ +│ ā”œā”€ā”€ layout.tsx # Next.js åøƒå±€ +│ ā”œā”€ā”€ page.tsx # å‰ē«ÆčŠå¤©ē•Œé¢ +│ └── globals.css # å…Øå±€ę ·å¼ +ā”œā”€ā”€ package.json # ä¾čµ–é…ē½® +ā”œā”€ā”€ tsconfig.json # TypeScript é…ē½® +ā”œā”€ā”€ next.config.js # Next.js é…ē½® +ā”œā”€ā”€ tailwind.config.js # Tailwind CSS é…ē½® +ā”œā”€ā”€ postcss.config.js # PostCSS é…ē½® +└── README.md # 详细文攣 +``` + +## å·„ä½œåŽŸē† + +### 1. å‰ē«Æ (React + CopilotKit) + +`src/app/page.tsx` 使用 CopilotKit ēš„ React ē»„ä»¶ļ¼š +- `CopilotKit`: åŒ…č£…åŗ”ē”Øå¹¶čæžęŽ„åˆ°čæč”Œę—¶ +- `CopilotChat`: ęä¾›čŠå¤© UI +- `useFrontendTool`: 定义 Claude åÆä»„č°ƒē”Øēš„å‰ē«Æå·„å…· + +### 2. API č·Æē”± (Next.js) + +`src/app/api/copilotkit/route.ts`: +- åˆ›å»ŗęŒ‡å‘ Claude Agent SDK ęœåŠ”å™Øēš„ `HttpAgent` (ę„č‡Ŗ `@ag-ui/client`) +- å°†å…¶åŒ…č£…åœØ `CopilotRuntime` äø­ +- 暓露 CopilotKit č°ƒē”Øēš„ POST 端点 + +### 3. åŽē«Æ (Claude Agent SDK) + +Claude Agent SDK ęœåŠ”å™Ø (`../../python/examples/server/fastapi_server.py`): +- 处理 AG-UI Protocol 请求 +- å°†å®ƒä»¬č½¬ę¢äøŗ Claude Agent SDK č°ƒē”Ø +- čæ”å›ž AG-UI Protocol äŗ‹ä»¶ +- ę”ÆęŒ CORS ä»„ä¾æå‰ē«Æé›†ęˆ + +## ēŽÆå¢ƒå˜é‡ + +- `CLAUDE_AGENT_URL`: Claude Agent SDK ęœåŠ”å™Øēš„ URL (默认: `http://localhost:8000/chat`) + +## ꕅ障ꎒ除 + +1. **čæžęŽ„é”™čÆÆ**: ē”®äæ Claude Agent SDK ęœåŠ”å™ØåœØę­£ē”®ēš„ē«Æå£čæč”Œ +2. **CORS 问题**: FastAPI ęœåŠ”å™ØåŒ…å« CORS äø­é—“ä»¶ć€‚å¦‚ęžœéœ€č¦ę·»åŠ ę›“å¤šęŗļ¼ŒčÆ·ē¼–č¾‘ `fastapi_server.py` +3. **Agent ęœŖę‰¾åˆ°**: ę£€ęŸ„å‰ē«Æēš„ agent ID (`agentic_chat`) ę˜Æå¦äøŽ API č·Æē”±äø­ēš„åŒ¹é… + +## å‚č€ƒę–‡ę”£ + +- [CopilotKit 文攣](https://docs.copilotkit.ai/adk/quickstart?path=exiting-agent) +- [AG-UI Protocol 文攣](https://ag-ui-protocol.github.io/ag-ui/) +- [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python) diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/next.config.js b/integrations/claude-agent-sdk/typescript/examples/copilotkit/next.config.js new file mode 100644 index 000000000..3776bb093 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/next.config.js @@ -0,0 +1,7 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +}; + +module.exports = nextConfig; + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/package-lock.json b/integrations/claude-agent-sdk/typescript/examples/copilotkit/package-lock.json new file mode 100644 index 000000000..9b6f59ca3 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/package-lock.json @@ -0,0 +1,12917 @@ +{ + "name": "claude-agent-sdk-copilotkit-demo", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "claude-agent-sdk-copilotkit-demo", + "version": "0.1.0", + "dependencies": { + "@ag-ui/client": "^0.0.40", + "@copilotkit/react-core": "^1.10.6", + "@copilotkit/react-ui": "^1.10.6", + "@copilotkit/runtime": "^1.10.6", + "next": "^14.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "tailwindcss": "^3.4.0", + "typescript": "^5.0.0" + } + }, + "node_modules/@0no-co/graphql.web": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz", + "integrity": "sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==", + "license": "MIT", + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "graphql": { + "optional": true + } + } + }, + "node_modules/@ag-ui/client": { + "version": "0.0.40", + "resolved": "https://registry.npmmirror.com/@ag-ui/client/-/client-0.0.40.tgz", + "integrity": "sha512-4ftyZgMN7DIAX64k7Mdex/KGq7lfz8yxEKzniqosD6TE/xk65k4Z0v3bxTzPk2iS2+Cj2uVBgFkb5lC7k5Loqg==", + "dependencies": { + "@ag-ui/core": "0.0.39", + "@ag-ui/encoder": "0.0.39", + "@ag-ui/proto": "0.0.39", + "@types/uuid": "^10.0.0", + "fast-json-patch": "^3.1.1", + "rxjs": "7.8.1", + "untruncate-json": "^0.0.1", + "uuid": "^11.1.0", + "zod": "^3.22.4" + } + }, + "node_modules/@ag-ui/core": { + "version": "0.0.39", + "resolved": "https://registry.npmmirror.com/@ag-ui/core/-/core-0.0.39.tgz", + "integrity": "sha512-T5Hp4oFkQ+H5MynWAvSwrX/rNYJOD+PJ4qPQ0o771oSZQAxoIvDDft47Cx5wRyBNNLXAe1RWqJjfWUUwJFNKqA==", + "dependencies": { + "rxjs": "7.8.1", + "zod": "^3.22.4" + } + }, + "node_modules/@ag-ui/encoder": { + "version": "0.0.39", + "resolved": "https://registry.npmmirror.com/@ag-ui/encoder/-/encoder-0.0.39.tgz", + "integrity": "sha512-6fsoFwPWkStK7Uyj3pwBn7+aQjUWf7pbDTSI43cD53sBLvTr5oEFNnoKOzRfC5UqvHc4JjUIuLKPQyjHRwWg4g==", + "dependencies": { + "@ag-ui/core": "0.0.39", + "@ag-ui/proto": "0.0.39" + } + }, + "node_modules/@ag-ui/langgraph": { + "version": "0.0.18", + "resolved": "https://registry.npmmirror.com/@ag-ui/langgraph/-/langgraph-0.0.18.tgz", + "integrity": "sha512-soWSV8+xR91jMArZUJoRv85UCgTi3Zt3u3gTMZhvs1t6fGFpAi6+hEQ4AqP13Rgvg90IlmIU8MTWo2k0OZDnoA==", + "peer": true, + "dependencies": { + "@langchain/core": "^0.3.66", + "@langchain/langgraph-sdk": "^0.1.2", + "partial-json": "^0.1.7", + "rxjs": "7.8.1" + }, + "peerDependencies": { + "@ag-ui/client": ">=0.0.38", + "@ag-ui/core": ">=0.0.38" + } + }, + "node_modules/@ag-ui/proto": { + "version": "0.0.39", + "resolved": "https://registry.npmmirror.com/@ag-ui/proto/-/proto-0.0.39.tgz", + "integrity": "sha512-xlj/PzZHkJ3CgoQC5QP9g7DEl/78wUK1+A2rdkoLKoNAMOkM2g6jKw0N88iFIh5GZhtiCNN2wb8XwRWPYx9XQQ==", + "dependencies": { + "@ag-ui/core": "0.0.39", + "@bufbuild/protobuf": "^2.2.5", + "@protobuf-ts/protoc": "^2.11.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.57.0", + "resolved": "https://registry.npmmirror.com/@anthropic-ai/sdk/-/sdk-0.57.0.tgz", + "integrity": "sha512-z5LMy0MWu0+w2hflUgj4RlJr1R+0BxKXL7ldXTO8FasU8fu599STghO+QKwId2dAD0d464aHtU+ChWuRHw4FNw==", + "license": "MIT", + "bin": { + "anthropic-ai-sdk": "bin/cli" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD", + "optional": true, + "peer": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-bedrock-agent-runtime": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/client-bedrock-agent-runtime/-/client-bedrock-agent-runtime-3.921.0.tgz", + "integrity": "sha512-nK97vLzXZoLZLfJKq19F0Y35a5YMHNst3AlAo3KMfsRDbe3uctsgjv0Xtib/PuED4x8mcy2RpmqvzmHTFry5TA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.921.0", + "@aws-sdk/credential-provider-node": "3.921.0", + "@aws-sdk/middleware-host-header": "3.921.0", + "@aws-sdk/middleware-logger": "3.921.0", + "@aws-sdk/middleware-recursion-detection": "3.921.0", + "@aws-sdk/middleware-user-agent": "3.921.0", + "@aws-sdk/region-config-resolver": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-endpoints": "3.921.0", + "@aws-sdk/util-user-agent-browser": "3.921.0", + "@aws-sdk/util-user-agent-node": "3.921.0", + "@smithy/config-resolver": "^4.4.1", + "@smithy/core": "^3.17.2", + "@smithy/eventstream-serde-browser": "^4.2.4", + "@smithy/eventstream-serde-config-resolver": "^4.3.4", + "@smithy/eventstream-serde-node": "^4.2.4", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/hash-node": "^4.2.4", + "@smithy/invalid-dependency": "^4.2.4", + "@smithy/middleware-content-length": "^4.2.4", + "@smithy/middleware-endpoint": "^4.3.6", + "@smithy/middleware-retry": "^4.4.6", + "@smithy/middleware-serde": "^4.2.4", + "@smithy/middleware-stack": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.5", + "@smithy/util-defaults-mode-node": "^4.2.7", + "@smithy/util-endpoints": "^3.2.4", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-retry": "^4.2.4", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-agent-runtime/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-agent-runtime/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.921.0.tgz", + "integrity": "sha512-FWOcHJj2li0TvGYYFLxJBVrz/dpInWHk+d1gonEG+YAiG1TPS5bxOQVQPj6o4IclwwaFM3MTzzHw4BMlwTc5NQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.921.0", + "@aws-sdk/credential-provider-node": "3.921.0", + "@aws-sdk/eventstream-handler-node": "3.921.0", + "@aws-sdk/middleware-eventstream": "3.921.0", + "@aws-sdk/middleware-host-header": "3.921.0", + "@aws-sdk/middleware-logger": "3.921.0", + "@aws-sdk/middleware-recursion-detection": "3.921.0", + "@aws-sdk/middleware-user-agent": "3.921.0", + "@aws-sdk/middleware-websocket": "3.921.0", + "@aws-sdk/region-config-resolver": "3.921.0", + "@aws-sdk/token-providers": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-endpoints": "3.921.0", + "@aws-sdk/util-user-agent-browser": "3.921.0", + "@aws-sdk/util-user-agent-node": "3.921.0", + "@smithy/config-resolver": "^4.4.1", + "@smithy/core": "^3.17.2", + "@smithy/eventstream-serde-browser": "^4.2.4", + "@smithy/eventstream-serde-config-resolver": "^4.3.4", + "@smithy/eventstream-serde-node": "^4.2.4", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/hash-node": "^4.2.4", + "@smithy/invalid-dependency": "^4.2.4", + "@smithy/middleware-content-length": "^4.2.4", + "@smithy/middleware-endpoint": "^4.3.6", + "@smithy/middleware-retry": "^4.4.6", + "@smithy/middleware-serde": "^4.2.4", + "@smithy/middleware-stack": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.5", + "@smithy/util-defaults-mode-node": "^4.2.7", + "@smithy/util-endpoints": "^3.2.4", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-retry": "^4.2.4", + "@smithy/util-stream": "^4.5.5", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-bedrock-runtime/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-kendra": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/client-kendra/-/client-kendra-3.921.0.tgz", + "integrity": "sha512-/8D1OneFcZy6Dtylyg2vT9u6vd2lSH/cxZl3+Fq646I3xnGoHzKWrGEb5FWxafpSNYlYuuavFGZQHhWnhJW5cw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.921.0", + "@aws-sdk/credential-provider-node": "3.921.0", + "@aws-sdk/middleware-host-header": "3.921.0", + "@aws-sdk/middleware-logger": "3.921.0", + "@aws-sdk/middleware-recursion-detection": "3.921.0", + "@aws-sdk/middleware-user-agent": "3.921.0", + "@aws-sdk/region-config-resolver": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-endpoints": "3.921.0", + "@aws-sdk/util-user-agent-browser": "3.921.0", + "@aws-sdk/util-user-agent-node": "3.921.0", + "@smithy/config-resolver": "^4.4.1", + "@smithy/core": "^3.17.2", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/hash-node": "^4.2.4", + "@smithy/invalid-dependency": "^4.2.4", + "@smithy/middleware-content-length": "^4.2.4", + "@smithy/middleware-endpoint": "^4.3.6", + "@smithy/middleware-retry": "^4.4.6", + "@smithy/middleware-serde": "^4.2.4", + "@smithy/middleware-stack": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.5", + "@smithy/util-defaults-mode-node": "^4.2.7", + "@smithy/util-endpoints": "^3.2.4", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-retry": "^4.2.4", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-kendra/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-kendra/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/client-sso/-/client-sso-3.921.0.tgz", + "integrity": "sha512-qWyT7WikdkPRAMuWidZ2l8jcQAPwNjvLcFZ/8K+oCAaMLt0LKLd7qeTwZ5tZFNqRNPXKfE8MkvAjyqSpE3i2yg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.921.0", + "@aws-sdk/middleware-host-header": "3.921.0", + "@aws-sdk/middleware-logger": "3.921.0", + "@aws-sdk/middleware-recursion-detection": "3.921.0", + "@aws-sdk/middleware-user-agent": "3.921.0", + "@aws-sdk/region-config-resolver": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-endpoints": "3.921.0", + "@aws-sdk/util-user-agent-browser": "3.921.0", + "@aws-sdk/util-user-agent-node": "3.921.0", + "@smithy/config-resolver": "^4.4.1", + "@smithy/core": "^3.17.2", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/hash-node": "^4.2.4", + "@smithy/invalid-dependency": "^4.2.4", + "@smithy/middleware-content-length": "^4.2.4", + "@smithy/middleware-endpoint": "^4.3.6", + "@smithy/middleware-retry": "^4.4.6", + "@smithy/middleware-serde": "^4.2.4", + "@smithy/middleware-stack": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.5", + "@smithy/util-defaults-mode-node": "^4.2.7", + "@smithy/util-endpoints": "^3.2.4", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-retry": "^4.2.4", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/core/-/core-3.921.0.tgz", + "integrity": "sha512-1eiD9ZO9cvEHdQUn/pwJVGN9LXg6D0O7knGVA0TA/v7nFSYy0n8RYG8vdnlcoYYnV1BcHgaf4KmRVMOszafNZQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@aws-sdk/xml-builder": "3.921.0", + "@smithy/core": "^3.17.2", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/property-provider": "^4.2.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/signature-v4": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-5.3.4.tgz", + "integrity": "sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.921.0.tgz", + "integrity": "sha512-RGG+zZdOYGJBQ8+L7BI6v41opoF8knErMtBZAUGcD3gvWEhjatc7lSbIpBeYWbTaWPPLHQU+ZVbmQ/jRLBgefw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/property-provider": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.921.0.tgz", + "integrity": "sha512-TAv08Ow0oF/olV4DTLoPDj46KMk35bL1IUCfToESDrWk1TOSur7d4sCL0p/7dUsAxS244cEgeyIIijKNtxj2AA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/property-provider": "^4.2.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/util-stream": "^4.5.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.921.0.tgz", + "integrity": "sha512-MUSRYGiMRq5NRGPRgJ7Nuh7GqXzE9iteAwdbzMJ4pnImgr7CjeWDihCIGk+gKLSG+NoRVVJM0V9PA4rxFir0Pg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/credential-provider-env": "3.921.0", + "@aws-sdk/credential-provider-http": "3.921.0", + "@aws-sdk/credential-provider-process": "3.921.0", + "@aws-sdk/credential-provider-sso": "3.921.0", + "@aws-sdk/credential-provider-web-identity": "3.921.0", + "@aws-sdk/nested-clients": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/credential-provider-imds": "^4.2.4", + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.921.0.tgz", + "integrity": "sha512-bxUAqRyo49WzKWn/XS0d8QXT9GydY/ew5m58PYfSMwYfmwBZXx1GLSWe3tZnefm6santFiqmIWfMmeRWdygKmQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.921.0", + "@aws-sdk/credential-provider-http": "3.921.0", + "@aws-sdk/credential-provider-ini": "3.921.0", + "@aws-sdk/credential-provider-process": "3.921.0", + "@aws-sdk/credential-provider-sso": "3.921.0", + "@aws-sdk/credential-provider-web-identity": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/credential-provider-imds": "^4.2.4", + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.921.0.tgz", + "integrity": "sha512-DM62ooWI/aZ+ENBcLszuKmOkiICf6p4vYO2HgA3Cy2OEsTsjb67NEcntksxpZkD3mSIrCy/Qi4Z7tc77gle2Nw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.921.0.tgz", + "integrity": "sha512-Nh5jPJ6Y6nu3cHzZnq394lGXE5YO8Szke5zlATbNI7Tl0QJR65GE0IZsBcjzRMGpYX6ENCqPDK8FmklkmCYyVQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.921.0", + "@aws-sdk/core": "3.921.0", + "@aws-sdk/token-providers": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.921.0.tgz", + "integrity": "sha512-VWcbgB2/shPPK674roHV4s8biCtvn0P/05EbTqy9WeyM5Oblx291gRGccyDhQbJbOL/6diRPBM08tlKPlBKNfw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/nested-clients": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.921.0.tgz", + "integrity": "sha512-wgvhLaUpJv0h9WJFTvIJVmxtCWAeHZhk6VU3HCGwWSOAcBiiGbsFt8bMZ7SE6aAMoLYQQLblxS3yqLSiiw8ZXw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/eventstream-codec": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/eventstream-handler-node/node_modules/@smithy/eventstream-codec": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz", + "integrity": "sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.8.1", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.921.0.tgz", + "integrity": "sha512-5i+YdW5L4UA/jOhrprtkgJvQTBsI3ltJsua5NMpTcFYQhOXmt//1UizhspruSSH/xF9K/b4TU83fljOX7R4vzw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-eventstream/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.921.0.tgz", + "integrity": "sha512-eX1Ka29XzuEcXG4YABTwyLtPLchjmcjSjaq4irKJTFkxSYzX7gjoKt18rh/ZzOWOSqi23+cpjvBacL4VBKvE2Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-logger/-/middleware-logger-3.921.0.tgz", + "integrity": "sha512-14Qqp8wisKGj/2Y22OfO5jTBG5Xez+p3Zr2piAtz7AcbY8vBEoZbd6f+9lwwVFC73Aobkau223wzKbGT8HYQMw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.921.0.tgz", + "integrity": "sha512-MYU5oI2b97M7u1dC1nt7SiGEvvLrQDlzV6hq9CB5TYX2glgbyvkaS//1Tjm87VF6qVSf5jYfwFDPeFGd8O1NrQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@aws/lambda-invoke-store": "^0.1.1", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.921.0.tgz", + "integrity": "sha512-gXgokMBTPZAbQMm1+JOxItqA81aSFK6n7V2mAwxdmHjzCUZacX5RzkVPNbSaPPgDkroYnIzK09EusIpM6dLaqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-endpoints": "3.921.0", + "@smithy/core": "^3.17.2", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-websocket/-/middleware-websocket-3.921.0.tgz", + "integrity": "sha512-MjA5JhLSm7umZqy9BiStmDSqxp/9dyleVo2H62y0kYypUZwyIEC0+NbyUzrxTX9QmAM8ZC44fUBvKmikGKyRHA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-format-url": "3.921.0", + "@smithy/eventstream-codec": "^4.2.4", + "@smithy/eventstream-serde-browser": "^4.2.4", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/protocol-http": "^5.3.4", + "@smithy/signature-v4": "^5.3.4", + "@smithy/types": "^4.8.1", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/eventstream-codec": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz", + "integrity": "sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.8.1", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/signature-v4": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-5.3.4.tgz", + "integrity": "sha512-ScDCpasxH7w1HXHYbtk3jcivjvdA1VICyAdgvVqKhKKwxi+MTwZEqFw0minE+oZ7F07oF25xh4FGJxgqgShz0A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-websocket/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/nested-clients/-/nested-clients-3.921.0.tgz", + "integrity": "sha512-GV9aV8WqH/EWo4x3T5BrYb2ph1yfYuzUXZc0hhvxbFbDKD8m2fX9menao3Mgm7E5C68Su392u+MD9SGmGCmfKQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.921.0", + "@aws-sdk/middleware-host-header": "3.921.0", + "@aws-sdk/middleware-logger": "3.921.0", + "@aws-sdk/middleware-recursion-detection": "3.921.0", + "@aws-sdk/middleware-user-agent": "3.921.0", + "@aws-sdk/region-config-resolver": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@aws-sdk/util-endpoints": "3.921.0", + "@aws-sdk/util-user-agent-browser": "3.921.0", + "@aws-sdk/util-user-agent-node": "3.921.0", + "@smithy/config-resolver": "^4.4.1", + "@smithy/core": "^3.17.2", + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/hash-node": "^4.2.4", + "@smithy/invalid-dependency": "^4.2.4", + "@smithy/middleware-content-length": "^4.2.4", + "@smithy/middleware-endpoint": "^4.3.6", + "@smithy/middleware-retry": "^4.4.6", + "@smithy/middleware-serde": "^4.2.4", + "@smithy/middleware-stack": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.5", + "@smithy/util-defaults-mode-node": "^4.2.7", + "@smithy/util-endpoints": "^3.2.4", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-retry": "^4.2.4", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.921.0.tgz", + "integrity": "sha512-cSycw4wXcvsrssUdcEaeYQhQcZYVsBwHtgATh9HcIm01PrMV0lV71vcoyZ+9vUhwHwchRT6dItAyTHSQxwjvjg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/config-resolver": "^4.4.1", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.921.0.tgz", + "integrity": "sha512-d+w6X7ykqXirFBF+dYyK5Ntw0KmO2sgMj+JLR/vAe1vaR8/Fuqs3yOAFU7yNEzpcnbLJmMznxKpht03CSEMh4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.921.0", + "@aws-sdk/nested-clients": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/types/-/types-3.921.0.tgz", + "integrity": "sha512-mqEG8+vFh5w0ZZC+R8VCOdSk998Hy93pIDuwYpfMAWgYwVhFaIMOLn1fZw0w2DhTs5+ONHHwMJ6uVXtuuqOLQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-endpoints/-/util-endpoints-3.921.0.tgz", + "integrity": "sha512-kuJYRqug6V8gOg401BuK4w4IAVO3575VDR8iYiFw0gPwNIfOXvdlChfsJQoREqwJfif45J4eSmUsFtMfx87BQg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-endpoints": "^3.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-format-url/-/util-format-url-3.921.0.tgz", + "integrity": "sha512-ubU5/w/LERnELxgUKGQcVBlbcZaKGnCM9yuNqRuOuQeOKn+O6TLtFLxafrAcO0Ss1vwhoG5LEELFIykjE0soWQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/querystring-builder": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.893.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", + "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.921.0.tgz", + "integrity": "sha512-buhv/ICWr4Nt8bquHOejCiVikBsfEYw4/HSc9U050QebRXIakt50zKYaWDQw4iCMeeqCiwE9mElEaXJAysythg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.921.0", + "@smithy/types": "^4.8.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.921.0.tgz", + "integrity": "sha512-Ilftai6AMAU1cEaUqIiTxkyj1NupLhP9Eq8HRfVuIH8489J2wLCcOyiLklAgSzBNmrxW+fagxkY+Dg0lFwmcVA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.921.0", + "@aws-sdk/types": "3.921.0", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.921.0", + "resolved": "https://registry.npmmirror.com/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz", + "integrity": "sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz", + "integrity": "sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@browserbasehq/sdk": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/@browserbasehq/sdk/-/sdk-2.6.0.tgz", + "integrity": "sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@browserbasehq/sdk/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@browserbasehq/sdk/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", + "peer": true + }, + "node_modules/@browserbasehq/stagehand": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/@browserbasehq/stagehand/-/stagehand-1.14.0.tgz", + "integrity": "sha512-Hi/EzgMFWz+FKyepxHTrqfTPjpsuBS4zRy3e9sbMpBgLPv+9c0R+YZEvS7Bw4mTS66QtvvURRT6zgDGFotthVQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@anthropic-ai/sdk": "^0.27.3", + "@browserbasehq/sdk": "^2.0.0", + "ws": "^8.18.0", + "zod-to-json-schema": "^3.23.5" + }, + "peerDependencies": { + "@playwright/test": "^1.42.1", + "deepmerge": "^4.3.1", + "dotenv": "^16.4.5", + "openai": "^4.62.1", + "zod": "^3.23.8" + } + }, + "node_modules/@browserbasehq/stagehand/node_modules/@anthropic-ai/sdk": { + "version": "0.27.3", + "resolved": "https://registry.npmmirror.com/@anthropic-ai/sdk/-/sdk-0.27.3.tgz", + "integrity": "sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + } + }, + "node_modules/@browserbasehq/stagehand/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@browserbasehq/stagehand/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", + "peer": true + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/@bufbuild/protobuf/-/protobuf-2.10.0.tgz", + "integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@cfworker/json-schema": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/@cfworker/json-schema/-/json-schema-4.1.1.tgz", + "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", + "license": "MIT" + }, + "node_modules/@copilotkit/react-core": { + "version": "1.10.6", + "resolved": "https://registry.npmmirror.com/@copilotkit/react-core/-/react-core-1.10.6.tgz", + "integrity": "sha512-sdojpntwgOxP8lWRzaFEiWr0g2wDefjQHtve5GPPie+otseFonV88FZjSqIq5LN+q5BIwDOEhCmDjALsGjXvuQ==", + "license": "MIT", + "dependencies": { + "@copilotkit/runtime-client-gql": "1.10.6", + "@copilotkit/shared": "1.10.6", + "@scarf/scarf": "^1.3.0", + "react-markdown": "^8.0.7", + "untruncate-json": "^0.0.1" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@copilotkit/react-ui": { + "version": "1.10.6", + "resolved": "https://registry.npmmirror.com/@copilotkit/react-ui/-/react-ui-1.10.6.tgz", + "integrity": "sha512-eNIbZKMvBVZqlAR4fqkmZRIYIt8WhwZOxfVJVwMD9nfmWdtatmxrOLecyDiPk/hkq2o/8s2/rubaZSMK6m+GHQ==", + "license": "MIT", + "dependencies": { + "@copilotkit/react-core": "1.10.6", + "@copilotkit/runtime-client-gql": "1.10.6", + "@copilotkit/shared": "1.10.6", + "@headlessui/react": "^2.1.3", + "react-markdown": "^10.1.0", + "react-syntax-highlighter": "^15.6.1", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "remark-math": "^6.0.0" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react": { + "version": "2.2.9", + "resolved": "https://registry.npmmirror.com/@headlessui/react/-/react-2.2.9.tgz", + "integrity": "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.20.2", + "@react-aria/interactions": "^3.25.0", + "@tanstack/react-virtual": "^3.13.9", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmmirror.com/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@floating-ui/react/node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@react-aria/focus": { + "version": "3.21.2", + "resolved": "https://registry.npmmirror.com/@react-aria/focus/-/focus-3.21.2.tgz", + "integrity": "sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.6", + "@react-aria/utils": "^3.31.0", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@react-aria/focus/node_modules/@react-aria/utils": { + "version": "3.31.0", + "resolved": "https://registry.npmmirror.com/@react-aria/utils/-/utils-3.31.0.tgz", + "integrity": "sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-stately/flags": "^3.1.2", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@react-aria/interactions": { + "version": "3.25.6", + "resolved": "https://registry.npmmirror.com/@react-aria/interactions/-/interactions-3.25.6.tgz", + "integrity": "sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.31.0", + "@react-stately/flags": "^3.1.2", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@react-aria/interactions/node_modules/@react-aria/utils": { + "version": "3.31.0", + "resolved": "https://registry.npmmirror.com/@react-aria/utils/-/utils-3.31.0.tgz", + "integrity": "sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-stately/flags": "^3.1.2", + "@react-stately/utils": "^3.10.8", + "@react-types/shared": "^3.32.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@headlessui/react/node_modules/@tanstack/react-virtual": { + "version": "3.13.12", + "resolved": "https://registry.npmmirror.com/@tanstack/react-virtual/-/react-virtual-3.13.12.tgz", + "integrity": "sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@copilotkit/react-ui/node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@copilotkit/react-ui/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@copilotkit/runtime": { + "version": "1.10.6", + "resolved": "https://registry.npmmirror.com/@copilotkit/runtime/-/runtime-1.10.6.tgz", + "integrity": "sha512-35MdJ6nutC+spgHRJURbanLxBoQCNvVBYD0CBIk4Rv3/Ck8XgZA4lcc+5aGteuERXOPBsYEQjGD4xEPy3QXmGg==", + "license": "MIT", + "dependencies": { + "@anthropic-ai/sdk": "^0.57.0", + "@copilotkit/shared": "1.10.6", + "@graphql-yoga/plugin-defer-stream": "^3.3.1", + "@langchain/aws": "^0.1.9", + "@langchain/community": "^0.3.29", + "@langchain/core": "^0.3.38", + "@langchain/google-gauth": "^0.1.0", + "@langchain/langgraph-sdk": "^0.0.70", + "@langchain/openai": "^0.4.2", + "@scarf/scarf": "^1.3.0", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "express": "^4.19.2", + "graphql": "^16.8.1", + "graphql-scalars": "^1.23.0", + "graphql-yoga": "^5.3.1", + "groq-sdk": "^0.5.0", + "langchain": "^0.3.3", + "openai": "^4.85.1", + "partial-json": "^0.1.7", + "pino": "^9.2.0", + "pino-pretty": "^11.2.1", + "reflect-metadata": "^0.2.2", + "rxjs": "7.8.1", + "type-graphql": "2.0.0-rc.1", + "zod": "^3.23.3" + }, + "peerDependencies": { + "@ag-ui/client": ">=0.0.39", + "@ag-ui/core": ">=0.0.39", + "@ag-ui/encoder": ">=0.0.39", + "@ag-ui/langgraph": ">=0.0.18", + "@ag-ui/proto": ">=0.0.39" + } + }, + "node_modules/@copilotkit/runtime-client-gql": { + "version": "1.10.6", + "resolved": "https://registry.npmmirror.com/@copilotkit/runtime-client-gql/-/runtime-client-gql-1.10.6.tgz", + "integrity": "sha512-oLX8mjppVvQCWfquW9A0500hYVNxM4X/mtt76SEvfGUb2KsNQ4j2HOCzpmtm85MeLproC+f9738wLwRueLliZg==", + "license": "MIT", + "dependencies": { + "@copilotkit/shared": "1.10.6", + "@urql/core": "^5.0.3", + "untruncate-json": "^0.0.1", + "urql": "^4.1.0" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/@copilotkit/runtime/node_modules/@langchain/langgraph-sdk": { + "version": "0.0.70", + "resolved": "https://registry.npmmirror.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.70.tgz", + "integrity": "sha512-O8I12bfeMVz5fOrXnIcK4IdRf50IqyJTO458V56wAIHLNoi4H8/JHM+2M+Y4H2PtslXIGnvomWqlBd0eY5z/Og==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.15", + "p-queue": "^6.6.2", + "p-retry": "4", + "uuid": "^9.0.0" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.31 <0.4.0", + "react": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@langchain/core": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@copilotkit/runtime/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@copilotkit/shared": { + "version": "1.10.6", + "resolved": "https://registry.npmmirror.com/@copilotkit/shared/-/shared-1.10.6.tgz", + "integrity": "sha512-56Rltf4fDBqCpl1ZXARypt5NdE4LTg3tGPPLurZpgPmm31Lv5EAHpfjC7I55vt9A0mXWlTCHtCrpiaAlTyzGJw==", + "license": "MIT", + "dependencies": { + "@ag-ui/core": "^0.0.37", + "@segment/analytics-node": "^2.1.2", + "chalk": "4.1.2", + "graphql": "^16.8.1", + "uuid": "^10.0.0", + "zod": "^3.23.3", + "zod-to-json-schema": "^3.23.5" + } + }, + "node_modules/@copilotkit/shared/node_modules/@ag-ui/core": { + "version": "0.0.37", + "resolved": "https://registry.npmmirror.com/@ag-ui/core/-/core-0.0.37.tgz", + "integrity": "sha512-7bmjPn1Ol0Zo00F+MrPr0eOwH4AFZbhmq/ZMhCsrMILtVYBiBLcLU9QFBpBL3Zm9MCHha8b79N7JE2FzwcMaVA==", + "dependencies": { + "rxjs": "7.8.1", + "zod": "^3.22.4" + } + }, + "node_modules/@copilotkit/shared/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@envelop/core": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/@envelop/core/-/core-5.3.2.tgz", + "integrity": "sha512-06Mu7fmyKzk09P2i2kHpGfItqLLgCq7uO5/nX4fc/iHMplWPNuAx4iYR+WXUQoFHDnP6EUbceQNQ5iyeMz9f3g==", + "license": "MIT", + "dependencies": { + "@envelop/instrumentation": "^1.0.0", + "@envelop/types": "^5.2.1", + "@whatwg-node/promise-helpers": "^1.2.4", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@envelop/instrumentation": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@envelop/instrumentation/-/instrumentation-1.0.0.tgz", + "integrity": "sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==", + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.2.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@envelop/types": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/@envelop/types/-/types-5.2.1.tgz", + "integrity": "sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==", + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@graphql-tools/executor": { + "version": "1.4.10", + "resolved": "https://registry.npmmirror.com/@graphql-tools/executor/-/executor-1.4.10.tgz", + "integrity": "sha512-/o7QScMdJpx/qIJlQcYs9ohB2qU2jSpuMyPStQy30kKTLHKyMETWpbljvRsuQxHJ2MJmEF3bYZgBHzdNAQHhug==", + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.10.0", + "@graphql-typed-document-node/core": "^3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "9.1.2", + "resolved": "https://registry.npmmirror.com/@graphql-tools/merge/-/merge-9.1.2.tgz", + "integrity": "sha512-Ny9YhWKv+KxZFdXYt+wlyEW55GzhFiq4daV4wYgpP0aRbwQaczNJd1L3VjjBsPKjmW8lctZXUoqYTqU5QPcBGw==", + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "10.0.26", + "resolved": "https://registry.npmmirror.com/@graphql-tools/schema/-/schema-10.0.26.tgz", + "integrity": "sha512-KOmjuiWa9poP/Lza4HV0ZBPYGJI3VE3QzXA/8e0+wjcsRuEmxMLP82re1PUg0QRzp2UzifAB/gd7DoXmVGG9Fg==", + "license": "MIT", + "dependencies": { + "@graphql-tools/merge": "^9.1.2", + "@graphql-tools/utils": "^10.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "10.10.0", + "resolved": "https://registry.npmmirror.com/@graphql-tools/utils/-/utils-10.10.0.tgz", + "integrity": "sha512-OOeab5Y9qeKq0zfoJCSScMcDfGcIxp05+LW2xYVCS2l3su+K3lYcg5+cAAx9n0SFxpJl8zF5denq2QDsfM7NnQ==", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@whatwg-node/promise-helpers": "^1.0.0", + "cross-inspect": "1.0.1", + "dset": "^3.1.4", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-yoga/logger": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@graphql-yoga/logger/-/logger-2.0.1.tgz", + "integrity": "sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphql-yoga/plugin-defer-stream": { + "version": "3.16.0", + "resolved": "https://registry.npmmirror.com/@graphql-yoga/plugin-defer-stream/-/plugin-defer-stream-3.16.0.tgz", + "integrity": "sha512-LGn8DSSIB4iWT/EgeXR+rIvl80LOlZqIZrnK4slNJLgnXyMyvXMSlIcE/NnzH4zQq1YRixZtshXNOtekrVH9+g==", + "license": "MIT", + "dependencies": { + "@graphql-tools/utils": "^10.6.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "graphql": "^15.2.0 || ^16.0.0", + "graphql-yoga": "^5.16.0" + } + }, + "node_modules/@graphql-yoga/subscription": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/@graphql-yoga/subscription/-/subscription-5.0.5.tgz", + "integrity": "sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==", + "license": "MIT", + "dependencies": { + "@graphql-yoga/typed-event-target": "^3.0.2", + "@repeaterjs/repeater": "^3.0.4", + "@whatwg-node/events": "^0.1.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphql-yoga/typed-event-target": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@graphql-yoga/typed-event-target/-/typed-event-target-3.0.2.tgz", + "integrity": "sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==", + "license": "MIT", + "dependencies": { + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.0", + "resolved": "https://registry.npmmirror.com/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", + "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@ibm-cloud/watsonx-ai": { + "version": "1.7.2", + "resolved": "https://registry.npmmirror.com/@ibm-cloud/watsonx-ai/-/watsonx-ai-1.7.2.tgz", + "integrity": "sha512-8NhBvyWoHM/UjOF2AZPqO1otu82lTA0su1VTsCIafC0G1+KW4uFGUIDjI2b/gJrIAtQy7c9so/fTERe/lCv3iw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "^18.0.0", + "extend": "3.0.2", + "form-data": "^4.0.4", + "ibm-cloud-sdk-core": "^5.4.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ibm-cloud/watsonx-ai/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@ibm-cloud/watsonx-ai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", + "peer": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@langchain/aws": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/@langchain/aws/-/aws-0.1.15.tgz", + "integrity": "sha512-oyOMhTHP0rxdSCVI/g5KXYCOs9Kq/FpXMZbOk1JSIUoaIzUg4p6d98lsHu7erW//8NSaT+SX09QRbVDAgt7pNA==", + "license": "MIT", + "dependencies": { + "@aws-sdk/client-bedrock-agent-runtime": "^3.755.0", + "@aws-sdk/client-bedrock-runtime": "^3.840.0", + "@aws-sdk/client-kendra": "^3.750.0", + "@aws-sdk/credential-provider-node": "^3.750.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.3.58 <0.4.0" + } + }, + "node_modules/@langchain/community": { + "version": "0.3.57", + "resolved": "https://registry.npmmirror.com/@langchain/community/-/community-0.3.57.tgz", + "integrity": "sha512-xUe5UIlh1yZjt/cMtdSVlCoC5xm/RMN/rp+KZGLbquvjQeONmQ2rvpCqWjAOgQ6SPLqKiXvoXaKSm20r+LHISw==", + "license": "MIT", + "dependencies": { + "@langchain/openai": ">=0.2.0 <0.7.0", + "@langchain/weaviate": "^0.2.0", + "binary-extensions": "^2.2.0", + "expr-eval": "^2.0.2", + "flat": "^5.0.2", + "js-yaml": "^4.1.0", + "langchain": ">=0.2.3 <0.3.0 || >=0.3.4 <0.4.0", + "langsmith": "^0.3.67", + "uuid": "^10.0.0", + "zod": "^3.25.32" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@arcjet/redact": "^v1.0.0-alpha.23", + "@aws-crypto/sha256-js": "^5.0.0", + "@aws-sdk/client-bedrock-agent-runtime": "^3.749.0", + "@aws-sdk/client-bedrock-runtime": "^3.749.0", + "@aws-sdk/client-dynamodb": "^3.749.0", + "@aws-sdk/client-kendra": "^3.749.0", + "@aws-sdk/client-lambda": "^3.749.0", + "@aws-sdk/client-s3": "^3.749.0", + "@aws-sdk/client-sagemaker-runtime": "^3.749.0", + "@aws-sdk/client-sfn": "^3.749.0", + "@aws-sdk/credential-provider-node": "^3.388.0", + "@azure/search-documents": "^12.0.0", + "@azure/storage-blob": "^12.15.0", + "@browserbasehq/sdk": "*", + "@browserbasehq/stagehand": "^1.0.0", + "@clickhouse/client": "^0.2.5", + "@cloudflare/ai": "*", + "@datastax/astra-db-ts": "^1.0.0", + "@elastic/elasticsearch": "^8.4.0", + "@getmetal/metal-sdk": "*", + "@getzep/zep-cloud": "^1.0.6", + "@getzep/zep-js": "^0.9.0", + "@gomomento/sdk": "^1.51.1", + "@gomomento/sdk-core": "^1.51.1", + "@google-ai/generativelanguage": "*", + "@google-cloud/storage": "^6.10.1 || ^7.7.0", + "@gradientai/nodejs-sdk": "^1.2.0", + "@huggingface/inference": "^4.0.5", + "@huggingface/transformers": "^3.5.2", + "@ibm-cloud/watsonx-ai": "*", + "@lancedb/lancedb": "^0.19.1", + "@langchain/core": ">=0.3.58 <0.4.0", + "@layerup/layerup-security": "^1.5.12", + "@libsql/client": "^0.14.0", + "@mendable/firecrawl-js": "^1.4.3", + "@mlc-ai/web-llm": "*", + "@mozilla/readability": "*", + "@neondatabase/serverless": "*", + "@notionhq/client": "^2.2.10", + "@opensearch-project/opensearch": "*", + "@pinecone-database/pinecone": "*", + "@planetscale/database": "^1.8.0", + "@premai/prem-sdk": "^0.3.25", + "@qdrant/js-client-rest": "^1.15.0", + "@raycast/api": "^1.55.2", + "@rockset/client": "^0.9.1", + "@smithy/eventstream-codec": "^2.0.5", + "@smithy/protocol-http": "^3.0.6", + "@smithy/signature-v4": "^2.0.10", + "@smithy/util-utf8": "^2.0.0", + "@spider-cloud/spider-client": "^0.0.21", + "@supabase/supabase-js": "^2.45.0", + "@tensorflow-models/universal-sentence-encoder": "*", + "@tensorflow/tfjs-converter": "*", + "@tensorflow/tfjs-core": "*", + "@upstash/ratelimit": "^1.1.3 || ^2.0.3", + "@upstash/redis": "^1.20.6", + "@upstash/vector": "^1.1.1", + "@vercel/kv": "*", + "@vercel/postgres": "*", + "@writerai/writer-sdk": "^0.40.2", + "@xata.io/client": "^0.28.0", + "@zilliz/milvus2-sdk-node": ">=2.3.5", + "apify-client": "^2.7.1", + "assemblyai": "^4.6.0", + "azion": "^1.11.1", + "better-sqlite3": ">=9.4.0 <12.0.0", + "cassandra-driver": "^4.7.2", + "cborg": "^4.1.1", + "cheerio": "^1.0.0-rc.12", + "chromadb": "*", + "closevector-common": "0.1.3", + "closevector-node": "0.1.6", + "closevector-web": "0.1.6", + "cohere-ai": "*", + "convex": "^1.3.1", + "crypto-js": "^4.2.0", + "d3-dsv": "^2.0.0", + "discord.js": "^14.14.1", + "duck-duck-scrape": "^2.2.5", + "epub2": "^3.0.1", + "fast-xml-parser": "*", + "firebase-admin": "^11.9.0 || ^12.0.0 || ^13.0.0", + "google-auth-library": "*", + "googleapis": "*", + "hnswlib-node": "^3.0.0", + "html-to-text": "^9.0.5", + "ibm-cloud-sdk-core": "*", + "ignore": "^5.2.0", + "interface-datastore": "^8.2.11", + "ioredis": "^5.3.2", + "it-all": "^3.0.4", + "jsdom": "*", + "jsonwebtoken": "^9.0.2", + "llmonitor": "^0.5.9", + "lodash": "^4.17.21", + "lunary": "^0.7.10", + "mammoth": "^1.6.0", + "mariadb": "^3.4.0", + "mem0ai": "^2.1.8", + "mongodb": "^6.17.0", + "mysql2": "^3.9.8", + "neo4j-driver": "*", + "notion-to-md": "^3.1.0", + "officeparser": "^4.0.4", + "openai": "*", + "pdf-parse": "1.1.1", + "pg": "^8.11.0", + "pg-copy-streams": "^6.0.5", + "pickleparser": "^0.2.1", + "playwright": "^1.32.1", + "portkey-ai": "^0.1.11", + "puppeteer": "*", + "pyodide": ">=0.24.1 <0.27.0", + "redis": "*", + "replicate": "*", + "sonix-speech-recognition": "^2.1.1", + "srt-parser-2": "^1.2.3", + "typeorm": "^0.3.20", + "typesense": "^1.5.3", + "usearch": "^1.1.1", + "voy-search": "0.6.2", + "weaviate-client": "^3.5.2", + "web-auth-library": "^1.0.3", + "word-extractor": "*", + "ws": "^8.14.2", + "youtubei.js": "*" + }, + "peerDependenciesMeta": { + "@arcjet/redact": { + "optional": true + }, + "@aws-crypto/sha256-js": { + "optional": true + }, + "@aws-sdk/client-bedrock-agent-runtime": { + "optional": true + }, + "@aws-sdk/client-bedrock-runtime": { + "optional": true + }, + "@aws-sdk/client-dynamodb": { + "optional": true + }, + "@aws-sdk/client-kendra": { + "optional": true + }, + "@aws-sdk/client-lambda": { + "optional": true + }, + "@aws-sdk/client-s3": { + "optional": true + }, + "@aws-sdk/client-sagemaker-runtime": { + "optional": true + }, + "@aws-sdk/client-sfn": { + "optional": true + }, + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@aws-sdk/dsql-signer": { + "optional": true + }, + "@azure/search-documents": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@browserbasehq/sdk": { + "optional": true + }, + "@clickhouse/client": { + "optional": true + }, + "@cloudflare/ai": { + "optional": true + }, + "@datastax/astra-db-ts": { + "optional": true + }, + "@elastic/elasticsearch": { + "optional": true + }, + "@getmetal/metal-sdk": { + "optional": true + }, + "@getzep/zep-cloud": { + "optional": true + }, + "@getzep/zep-js": { + "optional": true + }, + "@gomomento/sdk": { + "optional": true + }, + "@gomomento/sdk-core": { + "optional": true + }, + "@google-ai/generativelanguage": { + "optional": true + }, + "@google-cloud/storage": { + "optional": true + }, + "@gradientai/nodejs-sdk": { + "optional": true + }, + "@huggingface/inference": { + "optional": true + }, + "@huggingface/transformers": { + "optional": true + }, + "@lancedb/lancedb": { + "optional": true + }, + "@layerup/layerup-security": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@mendable/firecrawl-js": { + "optional": true + }, + "@mlc-ai/web-llm": { + "optional": true + }, + "@mozilla/readability": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@notionhq/client": { + "optional": true + }, + "@opensearch-project/opensearch": { + "optional": true + }, + "@pinecone-database/pinecone": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@premai/prem-sdk": { + "optional": true + }, + "@qdrant/js-client-rest": { + "optional": true + }, + "@raycast/api": { + "optional": true + }, + "@rockset/client": { + "optional": true + }, + "@smithy/eventstream-codec": { + "optional": true + }, + "@smithy/protocol-http": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "@smithy/util-utf8": { + "optional": true + }, + "@spider-cloud/spider-client": { + "optional": true + }, + "@supabase/supabase-js": { + "optional": true + }, + "@tensorflow-models/universal-sentence-encoder": { + "optional": true + }, + "@tensorflow/tfjs-converter": { + "optional": true + }, + "@tensorflow/tfjs-core": { + "optional": true + }, + "@upstash/ratelimit": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@upstash/vector": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@writerai/writer-sdk": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "@zilliz/milvus2-sdk-node": { + "optional": true + }, + "apify-client": { + "optional": true + }, + "assemblyai": { + "optional": true + }, + "azion": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "cassandra-driver": { + "optional": true + }, + "cborg": { + "optional": true + }, + "cheerio": { + "optional": true + }, + "chromadb": { + "optional": true + }, + "closevector-common": { + "optional": true + }, + "closevector-node": { + "optional": true + }, + "closevector-web": { + "optional": true + }, + "cohere-ai": { + "optional": true + }, + "convex": { + "optional": true + }, + "crypto-js": { + "optional": true + }, + "d3-dsv": { + "optional": true + }, + "discord.js": { + "optional": true + }, + "duck-duck-scrape": { + "optional": true + }, + "epub2": { + "optional": true + }, + "fast-xml-parser": { + "optional": true + }, + "firebase-admin": { + "optional": true + }, + "google-auth-library": { + "optional": true + }, + "googleapis": { + "optional": true + }, + "hnswlib-node": { + "optional": true + }, + "html-to-text": { + "optional": true + }, + "ignore": { + "optional": true + }, + "interface-datastore": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "it-all": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "jsonwebtoken": { + "optional": true + }, + "llmonitor": { + "optional": true + }, + "lodash": { + "optional": true + }, + "lunary": { + "optional": true + }, + "mammoth": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mem0ai": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "neo4j-driver": { + "optional": true + }, + "notion-to-md": { + "optional": true + }, + "officeparser": { + "optional": true + }, + "pdf-parse": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-copy-streams": { + "optional": true + }, + "pickleparser": { + "optional": true + }, + "playwright": { + "optional": true + }, + "portkey-ai": { + "optional": true + }, + "puppeteer": { + "optional": true + }, + "pyodide": { + "optional": true + }, + "redis": { + "optional": true + }, + "replicate": { + "optional": true + }, + "sonix-speech-recognition": { + "optional": true + }, + "srt-parser-2": { + "optional": true + }, + "typeorm": { + "optional": true + }, + "typesense": { + "optional": true + }, + "usearch": { + "optional": true + }, + "voy-search": { + "optional": true + }, + "weaviate-client": { + "optional": true + }, + "web-auth-library": { + "optional": true + }, + "word-extractor": { + "optional": true + }, + "ws": { + "optional": true + }, + "youtubei.js": { + "optional": true + } + } + }, + "node_modules/@langchain/community/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@langchain/core": { + "version": "0.3.79", + "resolved": "https://registry.npmmirror.com/@langchain/core/-/core-0.3.79.tgz", + "integrity": "sha512-ZLAs5YMM5N2UXN3kExMglltJrKKoW7hs3KMZFlXUnD7a5DFKBYxPFMeXA4rT+uvTxuJRZPCYX0JKI5BhyAWx4A==", + "license": "MIT", + "dependencies": { + "@cfworker/json-schema": "^4.0.2", + "ansi-styles": "^5.0.0", + "camelcase": "6", + "decamelize": "1.2.0", + "js-tiktoken": "^1.0.12", + "langsmith": "^0.3.67", + "mustache": "^4.2.0", + "p-queue": "^6.6.2", + "p-retry": "4", + "uuid": "^10.0.0", + "zod": "^3.25.32", + "zod-to-json-schema": "^3.22.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@langchain/core/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@langchain/google-common": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/@langchain/google-common/-/google-common-0.1.8.tgz", + "integrity": "sha512-8auqWw2PMPhcHQHS+nMN3tVZrUPgSLckUaFeOHDOeSBiDvBd4KCybPwyl2oCwMDGvmyIxvOOckkMdeGaJ92vpQ==", + "license": "MIT", + "dependencies": { + "uuid": "^10.0.0", + "zod-to-json-schema": "^3.22.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/google-common/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@langchain/google-gauth": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/@langchain/google-gauth/-/google-gauth-0.1.8.tgz", + "integrity": "sha512-2QK7d5SQMrnSv7X4j05BGfO74hiA8FJuNwSsQKZvzlGoVnNXil3x2aqD5V+zsYOPpxhkDCpNlmh2Pue2Wzy1rQ==", + "license": "MIT", + "dependencies": { + "@langchain/google-common": "~0.1.8", + "google-auth-library": "^8.9.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/langgraph-sdk": { + "version": "0.1.10", + "resolved": "https://registry.npmmirror.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.1.10.tgz", + "integrity": "sha512-9srSCb2bSvcvehMgjA2sMMwX0o1VUgPN6ghwm5Fwc9JGAKsQa6n1S4eCwy1h4abuYxwajH5n3spBw+4I2WYbgw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15", + "p-queue": "^6.6.2", + "p-retry": "4", + "uuid": "^9.0.0" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.31 <0.4.0 || ^1.0.0-alpha", + "react": "^18 || ^19", + "react-dom": "^18 || ^19" + }, + "peerDependenciesMeta": { + "@langchain/core": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@langchain/langgraph-sdk/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@langchain/openai": { + "version": "0.4.9", + "resolved": "https://registry.npmmirror.com/@langchain/openai/-/openai-0.4.9.tgz", + "integrity": "sha512-NAsaionRHNdqaMjVLPkFCyjUDze+OqRHghA1Cn4fPoAafz+FXcl9c7LlEl9Xo0FH6/8yiCl7Rw2t780C/SBVxQ==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12", + "openai": "^4.87.3", + "zod": "^3.22.4", + "zod-to-json-schema": "^3.22.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.3.39 <0.4.0" + } + }, + "node_modules/@langchain/textsplitters": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/@langchain/textsplitters/-/textsplitters-0.1.0.tgz", + "integrity": "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==", + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/weaviate": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/@langchain/weaviate/-/weaviate-0.2.3.tgz", + "integrity": "sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w==", + "license": "MIT", + "dependencies": { + "uuid": "^10.0.0", + "weaviate-client": "^3.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": ">=0.2.21 <0.4.0" + } + }, + "node_modules/@langchain/weaviate/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lukeed/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@lukeed/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@next/env": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/env/-/env-14.2.33.tgz", + "integrity": "sha512-CgVHNZ1fRIlxkLhIX22flAZI/HmpDaZ8vwyJ/B0SDPTBuLZ1PJ+DWMjCHhqnExfmSQzA/PbZi8OAc7PAq2w9IA==", + "license": "MIT" + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.33.tgz", + "integrity": "sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.33.tgz", + "integrity": "sha512-8HGBeAE5rX3jzKvF593XTTFg3gxeU4f+UWnswa6JPhzaR6+zblO5+fjltJWIZc4aUalqTclvN2QtTC37LxvZAA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.33.tgz", + "integrity": "sha512-JXMBka6lNNmqbkvcTtaX8Gu5by9547bukHQvPoLe9VRBx1gHwzf5tdt4AaezW85HAB3pikcvyqBToRTDA4DeLw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.33.tgz", + "integrity": "sha512-Bm+QulsAItD/x6Ih8wGIMfRJy4G73tu1HJsrccPW6AfqdZd0Sfm5Imhgkgq2+kly065rYMnCOxTBvmvFY1BKfg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.33.tgz", + "integrity": "sha512-FnFn+ZBgsVMbGDsTqo8zsnRzydvsGV8vfiWwUo1LD8FTmPTdV+otGSWKc4LJec0oSexFnCYVO4hX8P8qQKaSlg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.33.tgz", + "integrity": "sha512-345tsIWMzoXaQndUTDv1qypDRiebFxGYx9pYkhwY4hBRaOLt8UGfiWKr9FSSHs25dFIf8ZqIFaPdy5MljdoawA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.33.tgz", + "integrity": "sha512-nscpt0G6UCTkrT2ppnJnFsYbPDQwmum4GNXYTeoTIdsmMydSKFz9Iny2jpaRupTb+Wl298+Rh82WKzt9LCcqSQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.33.tgz", + "integrity": "sha512-pc9LpGNKhJ0dXQhZ5QMmYxtARwwmWLpeocFmVG5Z0DzWq5Uf0izcI8tLc+qOpqxO1PWqZ5A7J1blrUIKrIFc7Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.33.tgz", + "integrity": "sha512-nOjfZMy8B94MdisuzZo9/57xuFVLHJaDj5e/xrduJp9CV2/HrfxTRH2fbyLe+K9QT41WBLUd4iXX3R7jBp0EUg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@playwright/test": { + "version": "1.56.1", + "resolved": "https://registry.npmmirror.com/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "playwright": "1.56.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@protobuf-ts/protoc": { + "version": "2.11.1", + "resolved": "https://registry.npmmirror.com/@protobuf-ts/protoc/-/protoc-2.11.1.tgz", + "integrity": "sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==", + "license": "Apache-2.0", + "bin": { + "protoc": "protoc.js" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmmirror.com/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@react-stately/flags/-/flags-3.1.2.tgz", + "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.8", + "resolved": "https://registry.npmmirror.com/@react-stately/utils/-/utils-3.10.8.tgz", + "integrity": "sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.32.1", + "resolved": "https://registry.npmmirror.com/@react-types/shared/-/shared-3.32.1.tgz", + "integrity": "sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@repeaterjs/repeater": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@repeaterjs/repeater/-/repeater-3.0.6.tgz", + "integrity": "sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==", + "license": "MIT" + }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, + "node_modules/@segment/analytics-core": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/@segment/analytics-core/-/analytics-core-1.8.2.tgz", + "integrity": "sha512-5FDy6l8chpzUfJcNlIcyqYQq4+JTUynlVoCeCUuVz+l+6W0PXg+ljKp34R4yLVCcY5VVZohuW+HH0VLWdwYVAg==", + "license": "MIT", + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-generic-utils": "1.2.0", + "dset": "^3.1.4", + "tslib": "^2.4.1" + } + }, + "node_modules/@segment/analytics-generic-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@segment/analytics-generic-utils/-/analytics-generic-utils-1.2.0.tgz", + "integrity": "sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.1" + } + }, + "node_modules/@segment/analytics-node": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@segment/analytics-node/-/analytics-node-2.3.0.tgz", + "integrity": "sha512-fOXLL8uY0uAWw/sTLmezze80hj8YGgXXlAfvSS6TUmivk4D/SP0C0sxnbpFdkUzWg2zT64qWIZj26afEtSnxUA==", + "license": "MIT", + "dependencies": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-core": "1.8.2", + "@segment/analytics-generic-utils": "1.2.0", + "buffer": "^6.0.3", + "jose": "^5.1.0", + "node-fetch": "^2.6.7", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-4.2.4.tgz", + "integrity": "sha512-Z4DUr/AkgyFf1bOThW2HwzREagee0sB5ycl+hDiSZOfRLW8ZgrOjDi6g8mHH19yyU5E2A/64W3z6SMIf5XiUSQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/@smithy/config-resolver/-/config-resolver-4.4.1.tgz", + "integrity": "sha512-BciDJ5hkyYEGBBKMbjGB1A/Zq8bYZ41Zo9BMnGdKF6QD1fY4zIkYx6zui/0CHaVGnv6h0iy8y4rnPX9CPCAPyQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.4", + "@smithy/types": "^4.8.1", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.4", + "@smithy/util-middleware": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.17.2", + "resolved": "https://registry.npmmirror.com/@smithy/core/-/core-3.17.2.tgz", + "integrity": "sha512-n3g4Nl1Te+qGPDbNFAYf+smkRVB+JhFsGy9uJXXZQEufoP4u0r+WLh6KvTDolCswaagysDc/afS1yvb2jnj1gQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-stream": "^4.5.5", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.4.tgz", + "integrity": "sha512-YVNMjhdz2pVto5bRdux7GMs0x1m0Afz3OcQy/4Yf9DH4fWOtroGH7uLvs7ZmDyoBJzLdegtIPpXrpJOZWvUXdw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.4", + "@smithy/property-provider": "^4.2.4", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", + "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.4.tgz", + "integrity": "sha512-d5T7ZS3J/r8P/PDjgmCcutmNxnSRvPH1U6iHeXjzI50sMr78GLmFcrczLw33Ap92oEKqa4CLrkAPeSSOqvGdUA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.4.tgz", + "integrity": "sha512-lxfDT0UuSc1HqltOGsTEAlZ6H29gpfDSdEPTapD5G63RbnYToZ+ezjzdonCCH90j5tRRCw3aLXVbiZaBW3VRVg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.4.tgz", + "integrity": "sha512-TPhiGByWnYyzcpU/K3pO5V7QgtXYpE0NaJPEZBCa1Y5jlw5SjqzMSbFiLb+ZkJhqoQc0ImGyVINqnq1ze0ZRcQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.4.tgz", + "integrity": "sha512-GNI/IXaY/XBB1SkGBFmbW033uWA0tj085eCxYih0eccUe/PFR7+UBQv9HNDk2fD9TJu7UVsCWsH99TkpEPSOzQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal/node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/eventstream-codec": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz", + "integrity": "sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.8.1", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.5", + "resolved": "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.5.tgz", + "integrity": "sha512-mg83SM3FLI8Sa2ooTJbsh5MFfyMTyNRwxqpKHmE0ICRIa66Aodv80DMsTQI02xBLVJ0hckwqTRr5IGAbbWuFLQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.4", + "@smithy/querystring-builder": "^4.2.4", + "@smithy/types": "^4.8.1", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/hash-node/-/hash-node-4.2.4.tgz", + "integrity": "sha512-kKU0gVhx/ppVMntvUOZE7WRMFW86HuaxLwvqileBEjL7PoILI8/djoILw3gPQloGVE6O0oOzqafxeNi2KbnUJw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.4.tgz", + "integrity": "sha512-z6aDLGiHzsMhbS2MjetlIWopWz//K+mCoPXjW6aLr0mypF+Y7qdEh5TyJ20Onf9FbWHiWl4eC+rITdizpnXqOw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.4.tgz", + "integrity": "sha512-hJRZuFS9UsElX4DJSJfoX4M1qXRH+VFiLMUnhsWvtOOUWRNvvOfDaUSdlNbjwv1IkpVjj/Rd/O59Jl3nhAcxow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.6.tgz", + "integrity": "sha512-PXehXofGMFpDqr933rxD8RGOcZ0QBAWtuzTgYRAHAL2BnKawHDEdf/TnGpcmfPJGwonhginaaeJIKluEojiF/w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.17.2", + "@smithy/middleware-serde": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "@smithy/url-parser": "^4.2.4", + "@smithy/util-middleware": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.6", + "resolved": "https://registry.npmmirror.com/@smithy/middleware-retry/-/middleware-retry-4.4.6.tgz", + "integrity": "sha512-OhLx131znrEDxZPAvH/OYufR9d1nB2CQADyYFN4C3V/NQS7Mg4V6uvxHC/Dr96ZQW8IlHJTJ+vAhKt6oxWRndA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/service-error-classification": "^4.2.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "@smithy/util-middleware": "^4.2.4", + "@smithy/util-retry": "^4.2.4", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-4.2.4.tgz", + "integrity": "sha512-jUr3x2CDhV15TOX2/Uoz4gfgeqLrRoTQbYAuhLS7lcVKNev7FeYSJ1ebEfjk+l9kbb7k7LfzIR/irgxys5ZTOg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/middleware-stack/-/middleware-stack-4.2.4.tgz", + "integrity": "sha512-Gy3TKCOnm9JwpFooldwAboazw+EFYlC+Bb+1QBsSi5xI0W5lX81j/P5+CXvD/9ZjtYKRgxq+kkqd/KOHflzvgA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/node-config-provider/-/node-config-provider-4.3.4.tgz", + "integrity": "sha512-3X3w7qzmo4XNNdPKNS4nbJcGSwiEMsNsRSunMA92S4DJLLIrH5g1AyuOA2XKM9PAPi8mIWfqC+fnfKNsI4KvHw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.4", + "@smithy/shared-ini-file-loader": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.4", + "resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-4.4.4.tgz", + "integrity": "sha512-VXHGfzCXLZeKnFp6QXjAdy+U8JF9etfpUXD1FAbzY1GzsFJiDQRQIt2CnMUvUdz3/YaHNqT3RphVWMUpXTIODA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/querystring-builder": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/property-provider/-/property-provider-4.2.4.tgz", + "integrity": "sha512-g2DHo08IhxV5GdY3Cpt/jr0mkTlAD39EJKN27Jb5N8Fb5qt8KG39wVKTXiTRCmHHou7lbXR8nKVU14/aRUf86w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/querystring-builder/-/querystring-builder-4.2.4.tgz", + "integrity": "sha512-KQ1gFXXC+WsbPFnk7pzskzOpn4s+KheWgO3dzkIEmnb6NskAIGp/dGdbKisTPJdtov28qNDohQrgDUKzXZBLig==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/querystring-parser/-/querystring-parser-4.2.4.tgz", + "integrity": "sha512-aHb5cqXZocdzEkZ/CvhVjdw5l4r1aU/9iMEyoKzH4eXMowT6M0YjBpp7W/+XjkBnY8Xh0kVd55GKjnPKlCwinQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/service-error-classification/-/service-error-classification-4.2.4.tgz", + "integrity": "sha512-fdWuhEx4+jHLGeew9/IvqVU/fxT/ot70tpRGuOLxE3HzZOyKeTQfYeV1oaBXpzi93WOk668hjMuuagJ2/Qs7ng==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.4.tgz", + "integrity": "sha512-y5ozxeQ9omVjbnJo9dtTsdXj9BEvGx2X8xvRgKnV+/7wLBuYJQL6dOa/qMY6omyHi7yjt1OA97jZLoVRYi8lxA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/@smithy/smithy-client/-/smithy-client-4.9.2.tgz", + "integrity": "sha512-gZU4uAFcdrSi3io8U99Qs/FvVdRxPvIMToi+MFfsy/DN9UqtknJ1ais+2M9yR8e0ASQpNmFYEKeIKVcMjQg3rg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.17.2", + "@smithy/middleware-endpoint": "^4.3.6", + "@smithy/middleware-stack": "^4.2.4", + "@smithy/protocol-http": "^5.3.4", + "@smithy/types": "^4.8.1", + "@smithy/util-stream": "^4.5.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client/node_modules/@smithy/protocol-http": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.3.4.tgz", + "integrity": "sha512-3sfFd2MAzVt0Q/klOmjFi3oIkxczHs0avbwrfn1aBqtc23WqQSmjvk77MBw9WkEQcwbOYIX5/2z4ULj8DuxSsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.8.1", + "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-4.8.1.tgz", + "integrity": "sha512-N0Zn0OT1zc+NA+UVfkYqQzviRh5ucWwO7mBV3TmHHprMnfcJNfhlPicDkBHi0ewbh+y3evR6cNAW0Raxvb01NA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-4.2.4.tgz", + "integrity": "sha512-w/N/Iw0/PTwJ36PDqU9PzAwVElo4qXxCC0eCTlUtIz/Z5V/2j/cViMHi0hPukSBHp4DVwvUlUhLgCzqSJ6plrg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from/node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.5", + "resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.5.tgz", + "integrity": "sha512-GwaGjv/QLuL/QHQaqhf/maM7+MnRFQQs7Bsl6FlaeK6lm6U7mV5AAnVabw68cIoMl5FQFyKK62u7RWRzWL25OQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.7", + "resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.7.tgz", + "integrity": "sha512-6hinjVqec0WYGsqN7h9hL/ywfULmJJNXGXnNZW7jrIn/cFuC/aVlVaiDfBIJEvKcOrmN8/EgsW69eY0gXABeHw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.1", + "@smithy/credential-provider-imds": "^4.2.4", + "@smithy/node-config-provider": "^4.3.4", + "@smithy/property-provider": "^4.2.4", + "@smithy/smithy-client": "^4.9.2", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/util-endpoints/-/util-endpoints-3.2.4.tgz", + "integrity": "sha512-f+nBDhgYRCmUEDKEQb6q0aCcOTXRDqH5wWaFHJxt4anB4pKHlgGoYP3xtioKXH64e37ANUkzWf6p4Mnv1M5/Vg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-4.2.4.tgz", + "integrity": "sha512-fKGQAPAn8sgV0plRikRVo6g6aR0KyKvgzNrPuM74RZKy/wWVzx3BMk+ZWEueyN3L5v5EDg+P582mKU+sH5OAsg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/@smithy/util-retry/-/util-retry-4.2.4.tgz", + "integrity": "sha512-yQncJmj4dtv/isTXxRb4AamZHy4QFr4ew8GxS6XLWt7sCIxkPxPzINWd7WLISEFPsIan14zrKgvyAF+/yzfwoA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.4", + "@smithy/types": "^4.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.5", + "resolved": "https://registry.npmmirror.com/@smithy/util-stream/-/util-stream-4.5.5.tgz", + "integrity": "sha512-7M5aVFjT+HPilPOKbOmQfCIPchZe4DSBc1wf1+NvHvSoFTiFtauZzT+onZvCj70xhXd0AEmYnZYmdJIuwxOo4w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.5", + "@smithy/node-http-handler": "^4.4.4", + "@smithy/types": "^4.8.1", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.12", + "resolved": "https://registry.npmmirror.com/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.10", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmmirror.com/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.24", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.24.tgz", + "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.26", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-18.3.26.tgz", + "integrity": "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "license": "MIT" + }, + "node_modules/@types/validator": { + "version": "13.15.4", + "resolved": "https://registry.npmmirror.com/@types/validator/-/validator-13.15.4.tgz", + "integrity": "sha512-LSFfpSnJJY9wbC0LQxgvfb+ynbHftFo0tMsFOl/J4wexLnYMmDSPaj2ZyDv3TkfL1UePxPrxOWJfbiRS8mQv7A==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@urql/core": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/@urql/core/-/core-5.2.0.tgz", + "integrity": "sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==", + "license": "MIT", + "dependencies": { + "@0no-co/graphql.web": "^1.0.13", + "wonka": "^6.3.2" + } + }, + "node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/events": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/@whatwg-node/events/-/events-0.1.2.tgz", + "integrity": "sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.10.11", + "resolved": "https://registry.npmmirror.com/@whatwg-node/fetch/-/fetch-0.10.11.tgz", + "integrity": "sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==", + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.8.0", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/@whatwg-node/node-fetch/-/node-fetch-0.8.1.tgz", + "integrity": "sha512-cQmQEo7IsI0EPX9VrwygXVzrVlX43Jb7/DBZSmpnC7xH4xkyOnn/HykHpTaQk7TUs7zh59A5uTGqx3p2Ouzffw==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^3.1.1", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz", + "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@whatwg-node/server": { + "version": "0.10.13", + "resolved": "https://registry.npmmirror.com/@whatwg-node/server/-/server-0.10.13.tgz", + "integrity": "sha512-Otmxo+0mp8az3B48pLI1I4msNOXPIoP7TLm6h5wOEQmynqHt8oP9nR6NJUeJk6iI5OtFpQtkbJFwfGkmplvc3Q==", + "license": "MIT", + "dependencies": { + "@envelop/instrumentation": "^1.0.0", + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/fetch": "^0.10.10", + "@whatwg-node/promise-helpers": "^1.3.2", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abort-controller-x": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/abort-controller-x/-/abort-controller-x-0.4.3.tgz", + "integrity": "sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.13.1.tgz", + "integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==", + "license": "MIT", + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.21", + "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.21.tgz", + "integrity": "sha512-JU0h5APyQNsHOlAM7HnQnPToSDQoEBZqzu/YBlqDnEeymPnZDREeXJA3KBMQee+dKteAxZ2AtvQEvVYdZf241Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "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.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bowser": { + "version": "2.12.1", + "resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.12.1.tgz", + "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" + }, + "node_modules/class-validator": { + "version": "0.14.2", + "resolved": "https://registry.npmmirror.com/class-validator/-/class-validator-0.14.2.tgz", + "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", + "license": "MIT", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.11.1", + "validator": "^13.9.0" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/console-table-printer": { + "version": "2.15.0", + "resolved": "https://registry.npmmirror.com/console-table-printer/-/console-table-printer-2.15.0.tgz", + "integrity": "sha512-SrhBq4hYVjLCkBVOWaTzceJalvn5K1Zq5aQA6wXC/cYjI3frKWNPEMK3sZsJfNNQApvCQmgBcc13ZKmFj8qExw==", + "license": "MIT", + "dependencies": { + "simple-wcswidth": "^1.1.2" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.7.0" + } + }, + "node_modules/cross-inspect": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cross-inspect/-/cross-inspect-1.0.1.tgz", + "integrity": "sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", + "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decode-named-character-reference/node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.244", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", + "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expr-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/expr-eval/-/expr-eval-2.0.2.tgz", + "integrity": "sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==", + "license": "MIT" + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "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.0", + "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.13.0", + "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.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0" + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmmirror.com/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmmirror.com/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmmirror.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", + "license": "MIT" + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "license": "Apache-2.0", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "license": "Apache-2.0", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmmirror.com/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "license": "Apache-2.0", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "deprecated": "Package is no longer maintained", + "license": "MIT", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphql": { + "version": "16.11.0", + "resolved": "https://registry.npmmirror.com/graphql/-/graphql-16.11.0.tgz", + "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-query-complexity": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/graphql-query-complexity/-/graphql-query-complexity-0.12.0.tgz", + "integrity": "sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw==", + "license": "MIT", + "dependencies": { + "lodash.get": "^4.4.2" + }, + "peerDependencies": { + "graphql": "^14.6.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-request": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/graphql-request/-/graphql-request-6.1.0.tgz", + "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.2.0", + "cross-fetch": "^3.1.5" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/graphql-scalars": { + "version": "1.25.0", + "resolved": "https://registry.npmmirror.com/graphql-scalars/-/graphql-scalars-1.25.0.tgz", + "integrity": "sha512-b0xyXZeRFkne4Eq7NAnL400gStGqG/Sx9VqX0A05nHyEbv57UJnWKsjNnrpVqv5e/8N1MUxkt0wwcRXbiyKcFg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/graphql-yoga": { + "version": "5.16.0", + "resolved": "https://registry.npmmirror.com/graphql-yoga/-/graphql-yoga-5.16.0.tgz", + "integrity": "sha512-/R2dJea7WgvNlXRU4F8iFwWd95Qn1mN+R+yC8XBs1wKjUzr0Pvv8cGYtt6UUcVHw5CiDEtu7iQY5oOe3sDAWCQ==", + "license": "MIT", + "dependencies": { + "@envelop/core": "^5.3.0", + "@envelop/instrumentation": "^1.0.0", + "@graphql-tools/executor": "^1.4.0", + "@graphql-tools/schema": "^10.0.11", + "@graphql-tools/utils": "^10.6.2", + "@graphql-yoga/logger": "^2.0.1", + "@graphql-yoga/subscription": "^5.0.5", + "@whatwg-node/fetch": "^0.10.6", + "@whatwg-node/promise-helpers": "^1.2.4", + "@whatwg-node/server": "^0.10.5", + "dset": "^3.1.4", + "lru-cache": "^10.0.0", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "graphql": "^15.2.0 || ^16.0.0" + } + }, + "node_modules/graphql-yoga/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/groq-sdk": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/groq-sdk/-/groq-sdk-0.5.0.tgz", + "integrity": "sha512-RVmhW7qZ+XZoy5fIuSdx/LGQJONpL8MHgZEW7dFwTdgkzStub2XQx6OKv28CHogijdwH41J+Npj/z2jBPu3vmw==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "web-streams-polyfill": "^3.2.1" + } + }, + "node_modules/groq-sdk/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/groq-sdk/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/groq-sdk/node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "license": "MIT", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-from-parse5/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/hast-util-from-parse5/node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-from-parse5/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-raw/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/hast-util-raw/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/highlightjs-vue": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz", + "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", + "license": "CC0-1.0" + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/ibm-cloud-sdk-core": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/ibm-cloud-sdk-core/-/ibm-cloud-sdk-core-5.4.3.tgz", + "integrity": "sha512-D0lvClcoCp/HXyaFlCbOT4aTYgGyeIb4ncxZpxRuiuw7Eo79C6c49W53+8WJRD9nxzT5vrIdaky3NBcTdBtaEg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/debug": "^4.1.12", + "@types/node": "^18.19.80", + "@types/tough-cookie": "^4.0.0", + "axios": "^1.12.2", + "camelcase": "^6.3.0", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "extend": "3.0.2", + "file-type": "16.5.4", + "form-data": "^4.0.4", + "isstream": "0.1.2", + "jsonwebtoken": "^9.0.2", + "mime-types": "2.1.35", + "retry-axios": "^2.6.0", + "tough-cookie": "^4.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/ibm-cloud-sdk-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true + }, + "node_modules/ibm-cloud-sdk-core/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT", + "peer": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT", + "peer": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jose": { + "version": "5.10.0", + "resolved": "https://registry.npmmirror.com/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tiktoken": { + "version": "1.0.21", + "resolved": "https://registry.npmmirror.com/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "jws": "^3.2.2", + "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.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "peer": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/katex": { + "version": "0.16.25", + "resolved": "https://registry.npmmirror.com/katex/-/katex-0.16.25.tgz", + "integrity": "sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/langchain": { + "version": "0.3.36", + "resolved": "https://registry.npmmirror.com/langchain/-/langchain-0.3.36.tgz", + "integrity": "sha512-PqC19KChFF0QlTtYDFgfEbIg+SCnCXox29G8tY62QWfj9bOW7ew2kgWmPw5qoHLOTKOdQPvXET20/1Pdq8vAtQ==", + "license": "MIT", + "dependencies": { + "@langchain/openai": ">=0.1.0 <0.7.0", + "@langchain/textsplitters": ">=0.0.0 <0.2.0", + "js-tiktoken": "^1.0.12", + "js-yaml": "^4.1.0", + "jsonpointer": "^5.0.1", + "langsmith": "^0.3.67", + "openapi-types": "^12.1.3", + "p-retry": "4", + "uuid": "^10.0.0", + "yaml": "^2.2.1", + "zod": "^3.25.32" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/anthropic": "*", + "@langchain/aws": "*", + "@langchain/cerebras": "*", + "@langchain/cohere": "*", + "@langchain/core": ">=0.3.58 <0.4.0", + "@langchain/deepseek": "*", + "@langchain/google-genai": "*", + "@langchain/google-vertexai": "*", + "@langchain/google-vertexai-web": "*", + "@langchain/groq": "*", + "@langchain/mistralai": "*", + "@langchain/ollama": "*", + "@langchain/xai": "*", + "axios": "*", + "cheerio": "*", + "handlebars": "^4.7.8", + "peggy": "^3.0.2", + "typeorm": "*" + }, + "peerDependenciesMeta": { + "@langchain/anthropic": { + "optional": true + }, + "@langchain/aws": { + "optional": true + }, + "@langchain/cerebras": { + "optional": true + }, + "@langchain/cohere": { + "optional": true + }, + "@langchain/deepseek": { + "optional": true + }, + "@langchain/google-genai": { + "optional": true + }, + "@langchain/google-vertexai": { + "optional": true + }, + "@langchain/google-vertexai-web": { + "optional": true + }, + "@langchain/groq": { + "optional": true + }, + "@langchain/mistralai": { + "optional": true + }, + "@langchain/ollama": { + "optional": true + }, + "@langchain/xai": { + "optional": true + }, + "axios": { + "optional": true + }, + "cheerio": { + "optional": true + }, + "handlebars": { + "optional": true + }, + "peggy": { + "optional": true + }, + "typeorm": { + "optional": true + } + } + }, + "node_modules/langchain/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/langsmith": { + "version": "0.3.76", + "resolved": "https://registry.npmmirror.com/langsmith/-/langsmith-0.3.76.tgz", + "integrity": "sha512-JIRyT+InuaaMxq3dhXVOAkedAsugY5TOEAJrI87UuIfJVgV2i7K/lPI4+jNtakaYL9gIKbIwpXHBMpb8rrRgOg==", + "license": "MIT", + "dependencies": { + "@types/uuid": "^10.0.0", + "chalk": "^4.1.2", + "console-table-printer": "^2.12.1", + "p-queue": "^6.6.2", + "p-retry": "4", + "semver": "^7.6.3", + "uuid": "^10.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-trace-base": "*", + "openai": "*" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-proto": { + "optional": true + }, + "@opentelemetry/sdk-trace-base": { + "optional": true + }, + "openai": { + "optional": true + } + } + }, + "node_modules/langsmith/node_modules/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.12.25", + "resolved": "https://registry.npmmirror.com/libphonenumber-js/-/libphonenumber-js-1.12.25.tgz", + "integrity": "sha512-u90tUu/SEF8b+RaDKCoW7ZNFDakyBtFlX1ex3J+VH+ElWes/UaitJLt/w4jGu8uAE41lltV/s+kMVtywcMEg7g==", + "license": "MIT" + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT", + "peer": true + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmmirror.com/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "license": "MIT", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-definitions": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", + "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-math/-/mdast-util-math-3.0.0.tgz", + "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "longest-streak": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.1.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-math/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/mdast-util-mdx-jsx/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-to-hast/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/micromark/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next": { + "version": "14.2.33", + "resolved": "https://registry.npmmirror.com/next/-/next-14.2.33.tgz", + "integrity": "sha512-GiKHLsD00t4ACm1p00VgrI0rUFAC9cRDGReKyERlM57aeEZkOQGcZTpIbsGn0b562FTPJWmYfKwplfO9EaT6ng==", + "license": "MIT", + "dependencies": { + "@next/env": "14.2.33", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.33", + "@next/swc-darwin-x64": "14.2.33", + "@next/swc-linux-arm64-gnu": "14.2.33", + "@next/swc-linux-arm64-musl": "14.2.33", + "@next/swc-linux-x64-gnu": "14.2.33", + "@next/swc-linux-x64-musl": "14.2.33", + "@next/swc-win32-arm64-msvc": "14.2.33", + "@next/swc-win32-ia32-msvc": "14.2.33", + "@next/swc-win32-x64-msvc": "14.2.33" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/nice-grpc": { + "version": "2.1.13", + "resolved": "https://registry.npmmirror.com/nice-grpc/-/nice-grpc-2.1.13.tgz", + "integrity": "sha512-IkXNok2NFyYh0WKp1aJFwFV3Ue2frBkJ16ojrmgX3Tc9n0g7r0VU+ur3H/leDHPPGsEeVozdMynGxYT30k3D/Q==", + "license": "MIT", + "dependencies": { + "@grpc/grpc-js": "^1.14.0", + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^2.0.2" + } + }, + "node_modules/nice-grpc-client-middleware-retry": { + "version": "3.1.12", + "resolved": "https://registry.npmmirror.com/nice-grpc-client-middleware-retry/-/nice-grpc-client-middleware-retry-3.1.12.tgz", + "integrity": "sha512-CHKIeHznAePOsT2dLeGwoOFaybQz6LvkIsFfN8SLcyGyTR7AB6vZMaECJjx+QPL8O2qVgaVE167PdeOmQrPuag==", + "license": "MIT", + "dependencies": { + "abort-controller-x": "^0.4.0", + "nice-grpc-common": "^2.0.2" + } + }, + "node_modules/nice-grpc-common": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz", + "integrity": "sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==", + "license": "MIT", + "dependencies": { + "ts-error": "^1.0.6" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openai": { + "version": "4.104.0", + "resolved": "https://registry.npmmirror.com/openai/-/openai-4.104.0.tgz", + "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "ws": "^8.18.0", + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/openai/node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmmirror.com/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "license": "MIT" + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmmirror.com/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "11.3.0", + "resolved": "https://registry.npmmirror.com/pino-pretty/-/pino-pretty-11.3.0.tgz", + "integrity": "sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/playwright": { + "version": "1.56.1", + "resolved": "https://registry.npmmirror.com/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "playwright-core": "1.56.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.56.1", + "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmmirror.com/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT", + "peer": true + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "peer": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT", + "peer": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-markdown": { + "version": "8.0.7", + "resolved": "https://registry.npmmirror.com/react-markdown/-/react-markdown-8.0.7.tgz", + "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/prop-types": "^15.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "prop-types": "^15.0.0", + "property-information": "^6.0.0", + "react-is": "^18.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/react-syntax-highlighter": { + "version": "15.6.6", + "resolved": "https://registry.npmmirror.com/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz", + "integrity": "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "highlightjs-vue": "^1.0.0", + "lowlight": "^1.17.0", + "prismjs": "^1.30.0", + "refractor": "^3.6.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz", + "integrity": "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/refractor": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/refractor/-/refractor-3.6.0.tgz", + "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", + "license": "MIT", + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.27.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw/node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/rehype-raw/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/rehype-raw/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/remark-gfm/node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/remark-math/-/remark-math-6.0.0.tgz", + "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-math": "^3.0.0", + "micromark-extension-math": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/remark-math/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-math/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/remark-parse/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/remark-parse/node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-parse/node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-parse/node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/remark-parse/node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-parse/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-parse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/remark-parse/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/remark-rehype/node_modules/mdast-util-to-hast": { + "version": "12.3.0", + "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", + "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/remark-rehype/node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-rehype/node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/remark-rehype/node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-rehype/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/remark-rehype/node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/remark-stringify/node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT", + "peer": true + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-axios": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/retry-axios/-/retry-axios-2.6.0.tgz", + "integrity": "sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=10.7.0" + }, + "peerDependencies": { + "axios": "*" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-wcswidth": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz", + "integrity": "sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==", + "license": "MIT" + }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-entities/node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/style-to-js": { + "version": "1.1.18", + "resolved": "https://registry.npmmirror.com/style-to-js/-/style-to-js-1.1.18.tgz", + "integrity": "sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.11" + } + }, + "node_modules/style-to-js/node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/style-to-js/node_modules/style-to-object": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-1.0.11.tgz", + "integrity": "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmmirror.com/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.18", + "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "dev": true, + "license": "MIT", + "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.2", + "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.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-error": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/ts-error/-/ts-error-1.0.6.tgz", + "integrity": "sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-graphql": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmmirror.com/type-graphql/-/type-graphql-2.0.0-rc.1.tgz", + "integrity": "sha512-HCu4j3jR0tZvAAoO7DMBT3MRmah0DFRe5APymm9lXUghXA0sbhiMf6SLRafRYfk0R0KiUQYRduuGP3ap1RnF1Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/TypeGraphQL" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/typegraphql" + } + ], + "license": "MIT", + "dependencies": { + "@graphql-yoga/subscription": "^5.0.0", + "@types/node": "*", + "@types/semver": "^7.5.6", + "graphql-query-complexity": "^0.12.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "peerDependencies": { + "class-validator": ">=0.14.0", + "graphql": "^16.8.1", + "graphql-scalars": "^1.22.4" + }, + "peerDependenciesMeta": { + "class-validator": { + "optional": true + } + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmmirror.com/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz", + "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/unist-util-visit/node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untruncate-json": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/untruncate-json/-/untruncate-json-0.0.1.tgz", + "integrity": "sha512-4W9enDK4X1y1s2S/Rz7ysw6kDuMS3VmRjMFg7GZrNO+98OSe+x5Lh7PKYoVjy3lW/1wmhs6HW0lusnQRHgMarA==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "license": "MIT" + }, + "node_modules/urql": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/urql/-/urql-4.2.2.tgz", + "integrity": "sha512-3GgqNa6iF7bC4hY/ImJKN4REQILcSU9VKcKL8gfELZM8mM5BnLH1BsCc8kBdnVGD1LIFOs4W3O2idNHhON1r0w==", + "license": "MIT", + "dependencies": { + "@urql/core": "^5.1.1", + "wonka": "^6.3.2" + }, + "peerDependencies": { + "@urql/core": "^5.0.0", + "react": ">= 16.8.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/validator": { + "version": "13.15.20", + "resolved": "https://registry.npmmirror.com/validator/-/validator-13.15.20.tgz", + "integrity": "sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/vfile-location/-/vfile-location-5.0.3.tgz", + "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/vfile-location/node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/weaviate-client": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/weaviate-client/-/weaviate-client-3.9.0.tgz", + "integrity": "sha512-7qwg7YONAaT4zWnohLrFdzky+rZegVe76J+Tky/+7tuyvjFpdKgSrdqI/wPDh8aji0ZGZrL4DdGwGfFnZ+uV4w==", + "license": "BSD-3-Clause", + "dependencies": { + "abort-controller-x": "^0.4.3", + "graphql": "^16.11.0", + "graphql-request": "^6.1.0", + "long": "^5.3.2", + "nice-grpc": "^2.1.12", + "nice-grpc-client-middleware-retry": "^3.1.11", + "nice-grpc-common": "^2.0.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/weaviate-client/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wonka": { + "version": "6.3.5", + "resolved": "https://registry.npmmirror.com/wonka/-/wonka-6.3.5.tgz", + "integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/package.json b/integrations/claude-agent-sdk/typescript/examples/copilotkit/package.json new file mode 100644 index 000000000..186c1213a --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/package.json @@ -0,0 +1,30 @@ +{ + "name": "claude-agent-sdk-copilotkit-demo", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@ag-ui/client": "^0.0.40", + "@copilotkit/runtime": "^1.10.6", + "@copilotkit/react-core": "^1.10.6", + "@copilotkit/react-ui": "^1.10.6", + "next": "^14.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "tailwindcss": "^3.4.0", + "typescript": "^5.0.0" + } +} + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/postcss.config.js b/integrations/claude-agent-sdk/typescript/examples/copilotkit/postcss.config.js new file mode 100644 index 000000000..c21c07635 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/api/copilotkit/route.ts b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/api/copilotkit/route.ts new file mode 100644 index 000000000..b9ebcea62 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/api/copilotkit/route.ts @@ -0,0 +1,54 @@ +import { + CopilotRuntime, + ExperimentalEmptyAdapter, + copilotRuntimeNextJSAppRouterEndpoint, +} from "@copilotkit/runtime"; + +import { HttpAgent } from "@ag-ui/client"; +import { NextRequest } from "next/server"; + +// Base URL for the Claude Agent SDK server +// This should point to your FastAPI server running Claude Agent SDK integration +const CLAUDE_AGENT_URL = process.env.CLAUDE_AGENT_URL || "http://localhost:8000/chat"; + +// You can use any service adapter here for multi-agent support. We use +// the empty adapter since we're only using one agent. +const serviceAdapter = new ExperimentalEmptyAdapter(); + +// Create HttpAgent that connects to Claude Agent SDK server +// This agent implements the AbstractAgent interface required by CopilotKit +const claudeAgent = new HttpAgent({ + url: CLAUDE_AGENT_URL, + // Optional: Set initial state if needed + // initialState: { + // 'language': 'en' + // }, + // Optional: Set initial messages for context + // initialMessages: [ + // { + // id: '1', + // role: 'user', + // content: 'Initial message' + // } + // ] +}); + +// Create CopilotRuntime with the Claude Agent +const runtime = new CopilotRuntime({ + agents: { + // Agent ID that will be used in the frontend + 'agentic_chat': claudeAgent + } +}); + +// Next.js API route handler for CopilotKit runtime requests +export const POST = async (req: NextRequest) => { + const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({ + runtime, + serviceAdapter, + endpoint: "/api/copilotkit", + }); + + return handleRequest(req); +}; + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/globals.css b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/globals.css new file mode 100644 index 000000000..447d786d6 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/globals.css @@ -0,0 +1,19 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/layout.tsx b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/layout.tsx new file mode 100644 index 000000000..9bdd6111f --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/layout.tsx @@ -0,0 +1,20 @@ +import type { Metadata } from "next"; +import "./globals.css"; + +export const metadata: Metadata = { + title: "Claude Agent SDK + CopilotKit Demo", + description: "Integration of Claude Agent SDK with CopilotKit using AG-UI Protocol", +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/page.tsx b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/page.tsx new file mode 100644 index 000000000..dab6265eb --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/src/app/page.tsx @@ -0,0 +1,79 @@ +"use client"; +import React, { useState } from "react"; +import "@copilotkit/react-ui/styles.css"; +import { + CopilotKit, + useFrontendTool, +} from "@copilotkit/react-core"; +import { CopilotChat } from "@copilotkit/react-ui"; +import "./globals.css"; + +const AgenticChat = () => { + return ( + + + + ); +}; + +const Chat = () => { + const [background, setBackground] = useState("--copilot-kit-background-color"); + + // Example frontend tool that can be called by Claude Agent + // NOTE: useFrontendTool must be called inside a component that's wrapped by CopilotKit + useFrontendTool({ + name: "change_background", + description: + "Change the background color of the chat. Can be anything that the CSS background attribute accepts. Regular colors, linear or radial gradients etc.", + parameters: [ + { + name: "background", + type: "string", + description: "The background. Prefer gradients. Only use when asked.", + }, + ], + handler: ({ background }) => { + setBackground(background); + return { + status: "success", + message: `Background changed to ${background}`, + }; + }, + }); + + return ( +
+
+ +
+
+ ); +}; + +export default AgenticChat; + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/tailwind.config.js b/integrations/claude-agent-sdk/typescript/examples/copilotkit/tailwind.config.js new file mode 100644 index 000000000..dcccb4312 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/tailwind.config.js @@ -0,0 +1,12 @@ +module.exports = { + content: [ + "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", + "./src/components/**/*.{js,ts,jsx,tsx,mdx}", + "./src/app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: {}, + }, + plugins: [], +}; + diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/tsconfig.json b/integrations/claude-agent-sdk/typescript/examples/copilotkit/tsconfig.json new file mode 100644 index 000000000..79cde9086 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} + From 970c2dbf80965951cf2260b12f0af7723ab17502 Mon Sep 17 00:00:00 2001 From: Ran Shemtov Date: Fri, 7 Nov 2025 11:04:46 +0100 Subject: [PATCH 09/18] fix: dump safe json whenever string is required in lg-python fastapi (#648) * fix: dump safe json whenever string is required in lg-python fastapi * chore: release agui langgraph fastapi 0.0.19 --- .../langgraph/python/ag_ui_langgraph/agent.py | 12 ++++++++---- integrations/langgraph/python/pyproject.toml | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/integrations/langgraph/python/ag_ui_langgraph/agent.py b/integrations/langgraph/python/ag_ui_langgraph/agent.py index 5751af75f..566ceba72 100644 --- a/integrations/langgraph/python/ag_ui_langgraph/agent.py +++ b/integrations/langgraph/python/ag_ui_langgraph/agent.py @@ -235,7 +235,7 @@ async def _handle_stream_events(self, input: RunAgentInput) -> AsyncGenerator[st CustomEvent( type=EventType.CUSTOM, name=LangGraphEventTypes.OnInterrupt.value, - value=json.dumps(interrupt.value, default=json_safe_stringify) if not isinstance(interrupt.value, str) else interrupt.value, + value=dump_json_safe(interrupt.value), raw_event=interrupt, ) ) @@ -311,7 +311,7 @@ async def prepare_stream(self, input: RunAgentInput, agent_state: State, config: CustomEvent( type=EventType.CUSTOM, name=LangGraphEventTypes.OnInterrupt.value, - value=json.dumps(interrupt.value) if not isinstance(interrupt.value, str) else interrupt.value, + value=dump_json_safe(interrupt.value), raw_event=interrupt, ) ) @@ -741,7 +741,7 @@ async def _handle_single_event(self, event: Any, state: State) -> AsyncGenerator ToolCallArgsEvent( type=EventType.TOOL_CALL_ARGS, tool_call_id=tool_call_output.tool_call_id, - delta=json.dumps(event["data"]["input"]), + delta=dump_json_safe(event["data"]["input"]), raw_event=event ) ) @@ -758,7 +758,7 @@ async def _handle_single_event(self, event: Any, state: State) -> AsyncGenerator type=EventType.TOOL_CALL_RESULT, tool_call_id=tool_call_output.tool_call_id, message_id=str(uuid.uuid4()), - content=tool_call_output.content, + content=dump_json_safe(tool_call_output.content), role="tool" ) ) @@ -917,3 +917,7 @@ def get_stream_kwargs( kwargs.update(fork) return kwargs + + +def dump_json_safe(value): + return json.dumps(value, default=json_safe_stringify) if not isinstance(value, str) else value \ No newline at end of file diff --git a/integrations/langgraph/python/pyproject.toml b/integrations/langgraph/python/pyproject.toml index 26d515725..8c0db183a 100644 --- a/integrations/langgraph/python/pyproject.toml +++ b/integrations/langgraph/python/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ag-ui-langgraph" -version = "0.0.18a0" +version = "0.0.19" description = "Implementation of the AG-UI protocol for LangGraph." authors = ["Ran Shem Tov "] readme = "README.md" From 079169dd82f48be8425c9d281eda0749518aab22 Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Fri, 7 Nov 2025 23:55:37 +0800 Subject: [PATCH 10/18] feature: implement claude agent sdk typescript version --- .../typescript/IMPLEMENTATION_SUMMARY.md | 239 ++++++++++++ .../claude-agent-sdk/typescript/README.md | 351 +++++++++++++++++ .../typescript/__tests__/agent.test.ts | 265 +++++++++++++ .../__tests__/event-translator.test.ts | 276 ++++++++++++++ .../__tests__/integration/basic.test.ts | 166 ++++++++ .../__tests__/integration/sessions.test.ts | 138 +++++++ .../__tests__/integration/tools.test.ts | 189 +++++++++ .../__tests__/session-manager.test.ts | 248 ++++++++++++ .../typescript/__tests__/tool-adapter.test.ts | 256 +++++++++++++ .../typescript/examples/README.md | 125 +++++- .../typescript/examples/package.json | 24 ++ .../typescript/examples/src/server.ts | 207 ++++++++++ .../typescript/jest.config.js | 23 ++ .../claude-agent-sdk/typescript/package.json | 47 +++ .../claude-agent-sdk/typescript/src/agent.ts | 359 ++++++++++++++++++ .../typescript/src/event-translator.ts | 227 +++++++++++ .../typescript/src/execution-state.ts | 327 ++++++++++++++++ .../claude-agent-sdk/typescript/src/index.ts | 96 +++++ .../typescript/src/session-manager.ts | 299 +++++++++++++++ .../typescript/src/tool-adapter.ts | 243 ++++++++++++ .../claude-agent-sdk/typescript/src/types.ts | 236 ++++++++++++ .../typescript/src/utils/converters.ts | 201 ++++++++++ .../claude-agent-sdk/typescript/tsconfig.json | 25 ++ .../typescript/tsup.config.ts | 14 + 24 files changed, 4576 insertions(+), 5 deletions(-) create mode 100644 integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md create mode 100644 integrations/claude-agent-sdk/typescript/README.md create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/agent.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/event-translator.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/integration/basic.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/integration/sessions.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/integration/tools.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/session-manager.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/tool-adapter.test.ts create mode 100644 integrations/claude-agent-sdk/typescript/examples/package.json create mode 100644 integrations/claude-agent-sdk/typescript/examples/src/server.ts create mode 100644 integrations/claude-agent-sdk/typescript/jest.config.js create mode 100644 integrations/claude-agent-sdk/typescript/package.json create mode 100644 integrations/claude-agent-sdk/typescript/src/agent.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/event-translator.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/execution-state.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/index.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/session-manager.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/tool-adapter.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/types.ts create mode 100644 integrations/claude-agent-sdk/typescript/src/utils/converters.ts create mode 100644 integrations/claude-agent-sdk/typescript/tsconfig.json create mode 100644 integrations/claude-agent-sdk/typescript/tsup.config.ts diff --git a/integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md b/integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md new file mode 100644 index 000000000..a5b6e6c3e --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md @@ -0,0 +1,239 @@ +# Claude Agent SDK TypeScript å®žēŽ°ę€»ē»“ + +## é”¹ē›®ēŠ¶ę€ + +āœ… **å…ØéƒØå®Œęˆ** - ꉀ꜉ 13 äøŖ todo é”¹ē›®å·²å®Œęˆ + +## å®žēŽ°å†…å®¹ + +### 1. é”¹ē›®ē»“ęž„ āœ… + +åˆ›å»ŗäŗ†å®Œę•“ēš„é”¹ē›®ē»“ęž„ļ¼š +- `src/` - 源代码目录 + - `agent.ts` - äø» Agent ē±» + - `event-translator.ts` - äŗ‹ä»¶č½¬ę¢å™Ø + - `session-manager.ts` - ä¼ščÆē®”ē†å™Ø + - `tool-adapter.ts` - å·„å…·é€‚é…å™Ø + - `execution-state.ts` - ę‰§č”ŒēŠ¶ę€ē®”ē† + - `types.ts` - TypeScript ē±»åž‹å®šä¹‰ + - `utils/converters.ts` - ę¶ˆęÆę ¼å¼č½¬ę¢å·„å…· + - `index.ts` - 主导出文件 +- `__tests__/` - 测试目录 + - å•å…ƒęµ‹čÆ•ļ¼ˆ4 äøŖę–‡ä»¶ļ¼Œēŗ¦ 50+ 个测试用例) + - é›†ęˆęµ‹čÆ•ļ¼ˆ3 äøŖę–‡ä»¶ļ¼Œēŗ¦ 10+ 个测试用例) +- `examples/` - 示例代码 + - Express ęœåŠ”å™Øē¤ŗä¾‹ +- é…ē½®ę–‡ä»¶ + - `package.json` + - `tsconfig.json` + - `tsup.config.ts` + - `jest.config.js` + +### 2. ę øåæƒē»„ä»¶ āœ… + +#### ClaudeAgent (`agent.ts`) +- 继承自 `AbstractAgent` +- å®žēŽ° `run()` ę–¹ę³•čæ”å›ž Observable +- ę”ÆęŒęŒä¹…ä¼ščÆęØ”å¼ļ¼ˆä½æē”Ø `ClaudeSDKClient`) +- ę”ÆęŒę— ēŠ¶ę€ęØ”å¼ļ¼ˆä½æē”Ø `query()` 函数) +- åŠØę€åÆ¼å…„ Claude SDK +- å®Œę•“ēš„é”™čÆÆå¤„ē†å’Œčµ„ęŗęø…ē† + +#### EventTranslator (`event-translator.ts`) +- č½¬ę¢ Claude SDK 消息为 AG-UI äŗ‹ä»¶ +- ę”ÆęŒę‰€ęœ‰å†…å®¹å—ē±»åž‹ļ¼š + - `TextBlock` → ę–‡ęœ¬ę¶ˆęÆäŗ‹ä»¶ + - `ToolUseBlock` → å·„å…·č°ƒē”Øäŗ‹ä»¶ + - `ToolResultBlock` → å·„å…·ē»“ęžœäŗ‹ä»¶ + - `ResultMessage` → 完成/错误事件 +- č‡ŖåŠØē”Ÿęˆå”Æäø€ę¶ˆęÆ ID + +#### SessionManager (`session-manager.ts`) +- å•ä¾‹ęØ”å¼å®žēŽ° +- ä¼ščÆē”Ÿå‘½å‘ØęœŸē®”ē† +- ę¶ˆęÆåŽ»é‡č·ŸčøŖ +- ēŠ¶ę€ē®”ē†ļ¼ˆget/set/remove) +- č‡ŖåŠØęø…ē†čæ‡ęœŸä¼ščÆ +- ę”ÆęŒē”Øęˆ·éš”ē¦» + +#### ToolAdapter (`tool-adapter.ts`) +- AG-UI Tool → Claude SDK MCP Tool č½¬ę¢ +- JSON Schema → Zod Schema č½¬ę¢ +- ę”ÆęŒę‰€ęœ‰åŸŗęœ¬ē±»åž‹ļ¼ˆstring, number, boolean, array, object) +- å·„å…·åē§°ę ¼å¼åŒ–ļ¼ˆMCP å‰ē¼€ļ¼‰ +- å®¢ęˆ·ē«Æå·„å…·å’ŒåŽē«Æå·„å…·ę”ÆęŒ + +#### ExecutionState (`execution-state.ts`) +- ę‰§č”ŒēŠ¶ę€č·ŸčøŖ +- äŗ‹ä»¶ę”¶é›†å’Œē®”ē† +- ę‰§č”Œē»Ÿč®” +- äø­ę­¢äæ”å·ę”ÆęŒ + +### 3. 测试覆盖 āœ… + +#### å•å…ƒęµ‹čÆ•ļ¼ˆēŗ¦ 50+ 个测试用例) + +**tool-adapter.test.ts** - 15 个测试 +- å·„å…·č½¬ę¢ęµ‹čÆ• +- JSON Schema č½¬ę¢ęµ‹čÆ• +- MCP ęœåŠ”å™Øåˆ›å»ŗęµ‹čÆ• +- å·„å…·åē§°ę ¼å¼åŒ–ęµ‹čÆ• +- å·„å…·ęå–ęµ‹čÆ• + +**session-manager.test.ts** - 18 个测试 +- å•ä¾‹ęØ”å¼ęµ‹čÆ• +- ä¼ščÆ CRUD 测试 +- ę¶ˆęÆč·ŸčøŖęµ‹čÆ• +- ēŠ¶ę€ē®”ē†ęµ‹čÆ• +- ä¼ščÆęø…ē†ęµ‹čÆ• + +**event-translator.test.ts** - 14 个测试 +- å„ē§ę¶ˆęÆē±»åž‹č½¬ę¢ęµ‹čÆ• +- ę–‡ęœ¬å—č½¬ę¢ęµ‹čÆ• +- å·„å…·č°ƒē”Øč½¬ę¢ęµ‹čÆ• +- å·„å…·ē»“ęžœč½¬ę¢ęµ‹čÆ• +- 消息 ID ē”Ÿęˆęµ‹čÆ• + +**agent.test.ts** - 12 个测试 +- Agent åˆå§‹åŒ–ęµ‹čÆ• +- ę‰§č”ŒęµēØ‹ęµ‹čÆ• +- äŗ‹ä»¶å‘å°„ęµ‹čÆ• +- å·„å…·é›†ęˆęµ‹čÆ• +- ä¼ščÆē®”ē†ęµ‹čÆ• +- ēŠ¶ę€ęØ”å¼ęµ‹čÆ• +- ę‰§č”Œäø­ę­¢ęµ‹čÆ• + +#### é›†ęˆęµ‹čÆ•ļ¼ˆēŗ¦ 10+ 个测试用例) + +**basic.test.ts** - 3 个测试 +- ē®€å•åÆ¹čÆęµ‹čÆ• +- å¤šč½®åÆ¹čÆęµ‹čÆ• +- 错误处理测试 + +**tools.test.ts** - 3 个测试 +- å·„å…·č°ƒē”Øęµ‹čÆ• +- å·„å…·ē»“ęžœęµ‹čÆ• +- å®¢ęˆ·ē«Æå·„å…·ęµ‹čÆ• + +**sessions.test.ts** - 3 个测试 +- ęŒä¹…ä¼ščÆęµ‹čÆ• +- ę— ēŠ¶ę€ęØ”å¼ęµ‹čÆ• +- ä¼ščÆéš”ē¦»ęµ‹čÆ• + +### 4. 示例代码 āœ… + +#### Express ęœåŠ”å™Øē¤ŗä¾‹ +- å®Œę•“ēš„ SSE ęµå¼å“åŗ”å®žēŽ° +- å·„å…·é›†ęˆē¤ŗä¾‹ļ¼ˆcalculator, weather) +- 错误处理 +- 优雅关闭 +- å„åŗ·ę£€ęŸ„ē«Æē‚¹ + +### 5. 文攣 āœ… + +#### README.md +- ē‰¹ę€§åˆ—č”Ø +- å®‰č£…ęŒ‡å— +- åæ«é€Ÿå¼€å§‹ +- API 文攣 +- äŗ‹ä»¶ē±»åž‹čÆ“ę˜Ž +- å·„å…·ę”ÆęŒčÆ“ę˜Ž +- ä¼ščÆē®”ē†čÆ“ę˜Ž +- ęµ‹čÆ•ęŒ‡å— +- ęž¶ęž„å›¾ + +#### Examples README +- č®¾ē½®čÆ“ę˜Ž +- API 端点文攣 +- ä½æē”Øē¤ŗä¾‹ļ¼ˆcurl) +- åŠŸčƒ½čÆ“ę˜Ž + +## å…³é”®å®žēŽ°ē‰¹ē‚¹ + +### 1. åŸŗäŗŽ Python ē‰ˆęœ¬ +- å®Œå…Øå‚č€ƒ Python å®žēŽ°ēš„ęž¶ęž„ +- äæęŒē›øåŒēš„ē»„ä»¶åˆ’åˆ† +- ē›øåŒēš„äŗ‹ä»¶č½¬ę¢é€»č¾‘ + +### 2. TypeScript 优势 +- å®Œę•“ēš„ē±»åž‹å®šä¹‰ +- é™ę€ē±»åž‹ę£€ęŸ„ +- IDE č‡ŖåŠØč”„å…Øę”ÆęŒ + +### 3. RxJS Observable +- 使用 Observable 替代 AsyncIterator +- ę›“å„½ēš„äŗ‹ä»¶ęµęŽ§åˆ¶ +- äøŽēŽ°ęœ‰ TypeScript é›†ęˆäæęŒäø€č‡“ + +### 4. åŠØę€ SDK 导兄 +- ä½æē”ØåŠØę€ import éæå…ē”¬ä¾čµ– +- ę›“å„½ēš„é”™čÆÆęē¤ŗ +- ę”ÆęŒ SDK åÆé€‰å®‰č£… + +### 5. å®Œę•“ēš„ęµ‹čÆ•č¦†ē›– +- 60+ 个测试用例 +- Mock Claude SDK +- å•å…ƒęµ‹čÆ• + é›†ęˆęµ‹čÆ• + +## äøŽ Python ē‰ˆęœ¬ēš„äø»č¦å·®å¼‚ + +| 特性 | Python | TypeScript | +|------|--------|------------| +| 异歄处理 | AsyncIterator | Observable | +| ē±»åž‹ē³»ē»Ÿ | Pydantic | Zod | +| Schema 验证 | Pydantic | Zod | +| ä¼ščÆē®”ē† | dict | Map | +| 事件流 | async for | subscribe | +| ęµ‹čÆ•ę”†ęž¶ | pytest | jest | + +## 下一歄建议 + +### åÆé€‰ä¼˜åŒ– +1. ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē†åœŗę™Æ +2. ę€§čƒ½ä¼˜åŒ–å’Œčµ„ęŗä½æē”Øē›‘ęŽ§ +3. ę·»åŠ ę—„åæ—ē³»ē»Ÿ +4. 添加 metrics ꔶ集 +5. ę”ÆęŒę›“å¤š Claude SDK 特性 + +### ēœŸå®žęµ‹čÆ• +1. ä½æē”ØēœŸå®žēš„ Claude API 测试 +2. åŽ‹åŠ›ęµ‹čÆ• +3. å¹¶å‘ęµ‹čÆ• +4. é•æę—¶é—“čæč”Œęµ‹čÆ• + +## ę–‡ä»¶ē»Ÿč®” + +- **源代码文件**: 9 个(约 2000+ č”Œļ¼‰ +- **测试文件**: 7 个(约 1500+ č”Œļ¼‰ +- **é…ē½®ę–‡ä»¶**: 4 äøŖ +- **文攣文件**: 3 äøŖ +- **示例文件**: 2 äøŖ + +**ꀻ讔**: 25 个文件 + +## 结论 + +āœ… **TypeScript ē‰ˆęœ¬å®žēŽ°å®Œęˆ** + +ę‰€ęœ‰ę øåæƒåŠŸčƒ½éƒ½å·²å®žēŽ°å¹¶ē»čæ‡ęµ‹čÆ•ļ¼š +- āœ… å®Œę•“ēš„ AG-UI Protocol ę”ÆęŒ +- āœ… Claude SDK 集ꈐ +- āœ… ä¼ščÆē®”ē† +- āœ… å·„å…·ę”ÆęŒ +- āœ… äŗ‹ä»¶č½¬ę¢ +- āœ… 测试覆盖 +- āœ… 示例代码 +- āœ… å®Œę•“ę–‡ę”£ + +čÆ„å®žēŽ°å·²å‡†å¤‡å„½čæ›č”Œļ¼š +- 代码宔柄 +- ēœŸå®ž API 测试 +- ę€§čƒ½ä¼˜åŒ– +- ē”Ÿäŗ§éƒØē½² + +## å‚č€ƒ + +- Python å®žēŽ°: `../python/` +- Claude Agent SDK 文攣: https://docs.claude.com/zh-CN/api/agent-sdk/typescript +- AG-UI Protocol: https://docs.ag-ui.com/ + diff --git a/integrations/claude-agent-sdk/typescript/README.md b/integrations/claude-agent-sdk/typescript/README.md new file mode 100644 index 000000000..5d95ece20 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/README.md @@ -0,0 +1,351 @@ +# @ag-ui/claude + +Claude Agent SDK äøŽ AG-UI Protocol ēš„é›†ęˆļ¼Œč®© Claude ä»£ē†čƒ½å¤Ÿę— ē¼å·„ä½œåœØ AG-UI 应用中。 + +## 特性 + +- āœ… **å®Œę•“ēš„ AG-UI Protocol ę”ÆęŒ** - å®žēŽ°ę‰€ęœ‰ę ‡å‡†äŗ‹ä»¶ē±»åž‹ +- āœ… **ęŒä¹…ä¼ščÆē®”ē†** - ę”ÆęŒå¤šč½®åÆ¹čÆå’Œä¼ščÆēŠ¶ę€ē»“ęŠ¤ +- āœ… **å·„å…·é›†ęˆ** - ę”ÆęŒå®¢ęˆ·ē«Æå’ŒåŽē«Æå·„å…· +- āœ… **ęµå¼å“åŗ”** - å®žę—¶ęµå¼ä¼ č¾“ AI å“åŗ” +- āœ… **ę— ēŠ¶ę€ęØ”å¼** - åÆé€‰ēš„ę— ēŠ¶ę€ę‰§č”ŒęØ”å¼ +- āœ… **TypeScript ę”ÆęŒ** - å®Œę•“ēš„ē±»åž‹å®šä¹‰ +- āœ… **åÆč§‚åÆŸåÆ¹č±” API** - åŸŗäŗŽ RxJS Observable ēš„äŗ‹ä»¶ęµ +- āœ… **č‡ŖåŠØä¼ščÆęø…ē†** - č‡ŖåŠØęø…ē†čæ‡ęœŸä¼ščÆ + +## 安装 + +```bash +npm install @ag-ui/claude @ag-ui/client @ag-ui/core +``` + +čæ˜éœ€č¦å®‰č£… Claude Agent SDK: + +```bash +npm install @anthropic-ai/claude-agent-sdk +``` + +## åæ«é€Ÿå¼€å§‹ + +### åŸŗē”€ē”Øę³• + +```typescript +import { ClaudeAgent } from '@ag-ui/claude'; +import type { RunAgentInput } from '@ag-ui/client'; + +// 初始化 agent +const agent = new ClaudeAgent({ + apiKey: process.env.ANTHROPIC_API_KEY, + enablePersistentSessions: true, +}); + +// 准备输兄 +const input: RunAgentInput = { + agentId: 'my_agent', + threadId: 'thread_123', + messages: [ + { id: 'msg_1', role: 'user', content: 'Hello!' }, + ], + context: {}, +}; + +// 运蔌 agent å¹¶č®¢é˜…äŗ‹ä»¶ +agent.run(input).subscribe({ + next: (event) => { + console.log('Event:', event); + }, + error: (error) => { + console.error('Error:', error); + }, + complete: () => { + console.log('Done!'); + }, +}); +``` + +### 使用巄具 + +```typescript +import { ClaudeAgent } from '@ag-ui/claude'; + +const agent = new ClaudeAgent({ + apiKey: process.env.ANTHROPIC_API_KEY, +}); + +const input: RunAgentInput = { + agentId: 'my_agent', + messages: [ + { id: 'msg_1', role: 'user', content: 'Calculate 42 + 58' }, + ], + context: { + tools: [ + { + name: 'calculator', + description: 'Performs calculations', + parameters: { + type: 'object', + properties: { + operation: { type: 'string' }, + a: { type: 'number' }, + b: { type: 'number' }, + }, + required: ['operation', 'a', 'b'], + }, + handler: async ({ operation, a, b }) => { + // åŽē«Æå·„å…·å®žēŽ° + if (operation === 'add') return a + b; + // ... + }, + }, + ], + }, +}; + +agent.run(input).subscribe({ + next: (event) => { + if (event.type === 'tool_call_start') { + console.log('Tool called:', event.toolName); + } + }, +}); +``` + +### Express ęœåŠ”å™Øē¤ŗä¾‹ + +```typescript +import express from 'express'; +import { ClaudeAgent } from '@ag-ui/claude'; + +const app = express(); +app.use(express.json()); + +const agent = new ClaudeAgent({ + apiKey: process.env.ANTHROPIC_API_KEY, +}); + +app.post('/api/run-agent', async (req, res) => { + const input: RunAgentInput = req.body; + + res.setHeader('Content-Type', 'text/event-stream'); + res.setHeader('Cache-Control', 'no-cache'); + + agent.run(input).subscribe({ + next: (event) => { + res.write(`data: ${JSON.stringify(event)}\n\n`); + }, + error: (error) => { + res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`); + res.end(); + }, + complete: () => { + res.end(); + }, + }); +}); + +app.listen(3000); +``` + +## API 文攣 + +### ClaudeAgent + +äø»č¦ēš„ agent ē±»ļ¼Œē»§ę‰æč‡Ŗ `AbstractAgent`怂 + +#### ęž„é€ å‡½ę•° + +```typescript +constructor(config: ClaudeAgentConfig) +``` + +**é…ē½®é€‰é”¹ļ¼š** + +- `apiKey?: string` - Anthropic API åÆ†é’„ļ¼ˆé»˜č®¤ä»Ž `ANTHROPIC_API_KEY` ēŽÆå¢ƒå˜é‡čÆ»å–ļ¼‰ +- `baseUrl?: string` - API åŸŗē”€ URLļ¼ˆé»˜č®¤ä»Ž `ANTHROPIC_BASE_URL` ēŽÆå¢ƒå˜é‡čÆ»å–ļ¼‰ +- `enablePersistentSessions?: boolean` - ę˜Æå¦åÆē”ØęŒä¹…ä¼ščÆļ¼ˆé»˜č®¤ļ¼š`true`) +- `sessionTimeout?: number` - ä¼ščÆč¶…ę—¶ę—¶é—“ļ¼ˆęÆ«ē§’ļ¼Œé»˜č®¤ļ¼š30 åˆ†é’Ÿļ¼‰ +- `permissionMode?: 'ask' | 'auto' | 'none'` - ęƒé™ęØ”å¼ļ¼ˆé»˜č®¤ļ¼š`'ask'`) + +#### 方法 + +##### `run(input: RunAgentInput): Observable` + +运蔌 agent å¹¶čæ”å›žäŗ‹ä»¶ęµēš„ Observable怂 + +**å‚ę•°ļ¼š** +- `input.agentId: string` - Agent ID +- `input.threadId?: string` - ä¼ščÆ IDļ¼ˆē”ØäŗŽęŒä¹…ä¼ščÆļ¼‰ +- `input.messages: Message[]` - ę¶ˆęÆåŽ†å² +- `input.context?: { tools?: Tool[] }` - äøŠäø‹ę–‡ļ¼ˆåŒ…ę‹¬å·„å…·å®šä¹‰ļ¼‰ + +**čæ”å›žļ¼š** Observableļ¼Œå‘å‡ŗ AG-UI Protocol äŗ‹ä»¶ + +##### `abortExecution(runId: string): void` + +äø­ę­¢ę­£åœØčæč”Œēš„ę‰§č”Œć€‚ + +##### `cleanup(): Promise` + +ęø…ē†ę‰€ęœ‰ä¼ščÆå’Œčµ„ęŗć€‚ + +### SessionManager + +ä¼ščÆē®”ē†å™Øļ¼Œé‡‡ē”Øå•ä¾‹ęØ”å¼ć€‚ + +#### 方法 + +- `getInstance(sessionTimeout?: number): SessionManager` - čŽ·å–å•ä¾‹å®žä¾‹ +- `getSession(sessionId: string, userId?: string): Session` - čŽ·å–ęˆ–åˆ›å»ŗä¼ščÆ +- `hasSession(sessionId: string): boolean` - ę£€ęŸ„ä¼ščÆę˜Æå¦å­˜åœØ +- `deleteSession(sessionId: string): boolean` - åˆ é™¤ä¼ščÆ +- `trackMessage(sessionId: string, messageId: string): void` - ę ‡č®°ę¶ˆęÆå·²å¤„ē† +- `getUnseenMessages(sessionId: string, messages: Message[]): Message[]` - čŽ·å–ęœŖå¤„ē†ēš„ę¶ˆęÆ +- `getStateValue(sessionId: string, key: string): any` - čŽ·å–ä¼ščÆēŠ¶ę€å€¼ +- `setStateValue(sessionId: string, key: string, value: any): void` - č®¾ē½®ä¼ščÆēŠ¶ę€å€¼ + +### EventTranslator + +äŗ‹ä»¶č½¬ę¢å™Øļ¼Œå°† Claude SDK ę¶ˆęÆč½¬ę¢äøŗ AG-UI 事件。 + +#### 方法 + +- `translateMessage(message: SDKMessage): ProcessedEvents[]` - č½¬ę¢å•äøŖę¶ˆęÆ + +### ToolAdapter + +å·„å…·é€‚é…å™Øļ¼Œå¤„ē†å·„å…·ę ¼å¼č½¬ę¢ć€‚ + +#### é™ę€ę–¹ę³• + +- `convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[]` - č½¬ę¢å·„å…·åˆ° SDK ę ¼å¼ +- `createMcpServerForTools(tools: Tool[]): McpSdkServerConfigWithInstance` - åˆ›å»ŗ MCP ęœåŠ”å™Ø +- `formatToolNameForSdk(toolName: string, serverName?: string): string` - ę ¼å¼åŒ–å·„å…·åē§° +- `parseToolNameFromSdk(sdkToolName: string): string` - č§£ęžå·„å…·åē§° + +## äŗ‹ä»¶ē±»åž‹ + +agent å‘å‡ŗä»„äø‹ AG-UI Protocol äŗ‹ä»¶ļ¼š + +- `RunStartedEvent` - ę‰§č”Œå¼€å§‹ +- `RunFinishedEvent` - ę‰§č”Œå®Œęˆ +- `RunErrorEvent` - ę‰§č”Œé”™čÆÆ +- `StepStartedEvent` - 歄骤开始 +- `StepFinishedEvent` - 歄骤完成 +- `TextMessageStartEvent` - ę–‡ęœ¬ę¶ˆęÆå¼€å§‹ +- `TextMessageContentEvent` - ę–‡ęœ¬ę¶ˆęÆå†…å®¹ļ¼ˆęµå¼ļ¼‰ +- `TextMessageEndEvent` - ę–‡ęœ¬ę¶ˆęÆē»“ęŸ +- `ToolCallStartEvent` - å·„å…·č°ƒē”Øå¼€å§‹ +- `ToolCallArgsEvent` - å·„å…·å‚ę•° +- `ToolCallEndEvent` - å·„å…·č°ƒē”Øē»“ęŸ +- `ToolCallResultEvent` - å·„å…·ę‰§č”Œē»“ęžœ + +## å·„å…·ę”ÆęŒ + +### åŽē«Æå·„å…· + +åŽē«Æå·„å…·åœØęœåŠ”å™Øē«Æę‰§č”Œļ¼š + +```typescript +{ + name: 'calculator', + description: 'Performs calculations', + parameters: { /* JSON Schema */ }, + handler: async (args) => { + // 巄具逻辑 + return result; + } +} +``` + +### å®¢ęˆ·ē«Æå·„å…· + +å®¢ęˆ·ē«Æå·„å…·åœØå‰ē«Æę‰§č”Œļ¼Œč®¾ē½® `client: true`: + +```typescript +{ + name: 'file_reader', + description: 'Reads files', + client: true, + parameters: { /* JSON Schema */ } +} +``` + +## ä¼ščÆē®”ē† + +### ęŒä¹…ä¼ščÆęØ”å¼ + +åÆē”ØęŒä¹…ä¼ščÆåŽļ¼Œagent ä¼šäøŗęÆäøŖ `threadId` ē»“ęŠ¤ē‹¬ē«‹ēš„ä¼ščÆļ¼š + +```typescript +const agent = new ClaudeAgent({ + apiKey: 'your_key', + enablePersistentSessions: true, + sessionTimeout: 30 * 60 * 1000, // 30 分钟 +}); +``` + +### ę— ēŠ¶ę€ęØ”å¼ + +ē¦ē”ØęŒä¹…ä¼ščÆåŽļ¼ŒęÆę¬”č°ƒē”Øéƒ½ę˜Æē‹¬ē«‹ēš„ļ¼š + +```typescript +const agent = new ClaudeAgent({ + apiKey: 'your_key', + enablePersistentSessions: false, +}); +``` + +## 测试 + +čæč”Œå•å…ƒęµ‹čÆ•ļ¼š + +```bash +npm test +``` + +čæč”Œē‰¹å®šęµ‹čÆ•ļ¼š + +```bash +npm test -- agent.test.ts +``` + +## 示例 + +ęŸ„ēœ‹ `examples/` ē›®å½•čŽ·å–å®Œę•“ēš„ē¤ŗä¾‹ļ¼š + +- **Express Server** - å®Œę•“ēš„ Express.js ęœåŠ”å™Øē¤ŗä¾‹ +- **å·„å…·é›†ęˆ** - åŽē«Æå’Œå®¢ęˆ·ē«Æå·„å…·ē¤ŗä¾‹ +- **ä¼ščÆē®”ē†** - å¤šč½®åÆ¹čÆē¤ŗä¾‹ + +## ęž¶ęž„ + +é›†ęˆęž¶ęž„åŸŗäŗŽ Python ē‰ˆęœ¬ļ¼š + +``` +AG-UI Protocol Claude Middleware Claude Agent SDK + │ │ │ +RunAgentInput ──────> ClaudeAgent.run() ──────> SDK Client/Query + │ │ │ + │ EventTranslator │ + │ │ │ +BaseEvent[] <──────── translate events <──────── Response[] +``` + +äø»č¦ē»„ä»¶ļ¼š + +- **ClaudeAgent**: äø»åč°ƒå™Øļ¼Œē®”ē†ę‰§č”ŒęµēØ‹ +- **EventTranslator**: äŗ‹ä»¶č½¬ę¢ļ¼ˆClaude SDK → AG-UI) +- **SessionManager**: ä¼ščÆē”Ÿå‘½å‘ØęœŸē®”ē† +- **ToolAdapter**: å·„å…·ę ¼å¼č½¬ę¢ +- **ExecutionState**: ę‰§č”ŒēŠ¶ę€č·ŸčøŖ + +## å‚č€ƒ + +- [Python å®žēŽ°](../python/) - Python SDK å®žēŽ°å‚č€ƒ +- [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/typescript) +- [AG-UI Protocol 文攣](https://docs.ag-ui.com/) + +## č®øåÆčÆ + +Apache-2.0 + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/agent.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/agent.test.ts new file mode 100644 index 000000000..191d904b5 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/agent.test.ts @@ -0,0 +1,265 @@ +/** + * Claude Agent tests + */ + +import { ClaudeAgent } from '../src/agent'; +import { SessionManager } from '../src/session-manager'; +import type { RunAgentInput } from '@ag-ui/client'; + +// Mock the Claude SDK +jest.mock('@anthropic-ai/claude-agent-sdk', () => ({ + ClaudeSDKClient: jest.fn().mockImplementation(() => ({ + query: jest.fn().mockResolvedValue(undefined), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Hello' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), + close: jest.fn().mockResolvedValue(undefined), + })), + query: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Hello' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), +})); + +describe('ClaudeAgent', () => { + let agent: ClaudeAgent; + + beforeEach(() => { + SessionManager.resetInstance(); + agent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + }); + + afterEach(() => { + SessionManager.resetInstance(); + }); + + describe('constructor', () => { + it('should initialize with config', () => { + expect(agent).toBeDefined(); + expect(agent.getSessionManager()).toBeDefined(); + expect(agent.getExecutionStateManager()).toBeDefined(); + }); + + it('should use environment variables for API key', () => { + process.env.ANTHROPIC_API_KEY = 'env_api_key'; + const envAgent = new ClaudeAgent({}); + expect(envAgent).toBeDefined(); + delete process.env.ANTHROPIC_API_KEY; + }); + }); + + describe('run', () => { + it('should return an observable', () => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + const observable = agent.run(input); + expect(observable).toBeDefined(); + expect(typeof observable.subscribe).toBe('function'); + }); + + it('should emit run started event', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + const events: any[] = []; + + agent.run(input).subscribe({ + next: (event) => { + events.push(event); + }, + complete: () => { + expect(events.length).toBeGreaterThan(0); + expect(events[0].type).toBe('run_started'); + done(); + }, + error: done, + }); + }); + + it('should emit run finished event', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + const events: any[] = []; + + agent.run(input).subscribe({ + next: (event) => { + events.push(event); + }, + complete: () => { + const finishedEvent = events.find((e) => e.type === 'run_finished'); + expect(finishedEvent).toBeDefined(); + done(); + }, + error: done, + }); + }); + + it('should handle tools', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: { + tools: [ + { + name: 'test_tool', + description: 'A test tool', + parameters: { + type: 'object', + properties: { + query: { type: 'string' }, + }, + }, + }, + ], + }, + }; + + agent.run(input).subscribe({ + complete: done, + error: done, + }); + }); + }); + + describe('abortExecution', () => { + it('should abort running execution', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + let runId: string; + + agent.run(input).subscribe({ + next: (event: any) => { + if (event.type === 'run_started') { + runId = event.runId; + agent.abortExecution(runId); + } + }, + complete: () => { + if (runId) { + const execution = agent.getExecutionState(runId); + expect(execution?.isAborted()).toBe(true); + } + done(); + }, + error: done, + }); + }); + }); + + describe('cleanup', () => { + it('should cleanup resources', async () => { + await agent.cleanup(); + + expect(agent.getSessionManager().getSessionCount()).toBe(0); + expect(agent.getExecutionStateManager().getExecutionCount()).toBe(0); + }); + }); + + describe('persistent sessions', () => { + it('should reuse session for same thread', (done) => { + const input1: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread1', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + const input2: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread1', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + { id: 'msg2', role: 'assistant', content: 'Hi' }, + { id: 'msg3', role: 'user', content: 'How are you?' }, + ], + context: {}, + }; + + agent.run(input1).subscribe({ + complete: () => { + const sessionCount1 = agent.getSessionManager().getSessionCount(); + + agent.run(input2).subscribe({ + complete: () => { + const sessionCount2 = agent.getSessionManager().getSessionCount(); + expect(sessionCount2).toBe(sessionCount1); + done(); + }, + error: done, + }); + }, + error: done, + }); + }); + }); + + describe('stateless mode', () => { + it('should work in stateless mode', (done) => { + const statelessAgent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: false, + }); + + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + statelessAgent.run(input).subscribe({ + complete: done, + error: done, + }); + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/event-translator.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/event-translator.test.ts new file mode 100644 index 000000000..9857481bd --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/event-translator.test.ts @@ -0,0 +1,276 @@ +/** + * Event translator tests + */ + +import { EventTranslator } from '../src/event-translator'; +import { EventType } from '@ag-ui/client'; +import type { + SDKAssistantMessage, + SDKResultMessage, + TextBlock, + ToolUseBlock, + ToolResultBlock, +} from '../src/types'; + +describe('EventTranslator', () => { + let translator: EventTranslator; + const runId = 'test_run_1'; + + beforeEach(() => { + translator = new EventTranslator(runId); + }); + + describe('translateMessage', () => { + it('should translate assistant message with text block', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'text', + text: 'Hello, world!', + } as TextBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(3); + expect(events[0].type).toBe(EventType.TEXT_MESSAGE_START); + expect(events[1].type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect(events[2].type).toBe(EventType.TEXT_MESSAGE_END); + }); + + it('should translate assistant message with tool use block', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'tool_use', + id: 'tool_1', + name: 'search', + input: { query: 'test' }, + } as ToolUseBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(3); + expect(events[0].type).toBe(EventType.TOOL_CALL_START); + expect(events[1].type).toBe(EventType.TOOL_CALL_ARGS); + expect(events[2].type).toBe(EventType.TOOL_CALL_END); + }); + + it('should translate assistant message with tool result block', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'tool_result', + tool_use_id: 'tool_1', + content: 'Result data', + is_error: false, + } as ToolResultBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(1); + expect(events[0].type).toBe(EventType.TOOL_CALL_RESULT); + }); + + it('should translate result message (success)', () => { + const message: SDKResultMessage = { + type: 'result', + subtype: 'success', + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(1); + expect(events[0].type).toBe(EventType.RUN_FINISHED); + }); + + it('should translate result message (error)', () => { + const message: SDKResultMessage = { + type: 'result', + subtype: 'error', + error: { + type: 'Error', + message: 'Something went wrong', + }, + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(1); + expect(events[0].type).toBe(EventType.RUN_ERROR); + }); + }); + + describe('translateTextBlock', () => { + it('should generate text message events', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'text', + text: 'Test content', + } as TextBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(3); + + const startEvent = events[0] as any; + expect(startEvent.type).toBe(EventType.TEXT_MESSAGE_START); + expect(startEvent.messageId).toBeDefined(); + + const contentEvent = events[1] as any; + expect(contentEvent.type).toBe(EventType.TEXT_MESSAGE_CONTENT); + expect(contentEvent.content).toBe('Test content'); + + const endEvent = events[2] as any; + expect(endEvent.type).toBe(EventType.TEXT_MESSAGE_END); + }); + }); + + describe('translateToolUseBlock', () => { + it('should generate tool call events', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'tool_use', + id: 'call_123', + name: 'calculator', + input: { operation: 'add', numbers: [1, 2] }, + } as ToolUseBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(3); + + const startEvent = events[0] as any; + expect(startEvent.type).toBe(EventType.TOOL_CALL_START); + expect(startEvent.toolCallId).toBe('call_123'); + expect(startEvent.toolName).toBe('calculator'); + + const argsEvent = events[1] as any; + expect(argsEvent.type).toBe(EventType.TOOL_CALL_ARGS); + expect(argsEvent.toolCallId).toBe('call_123'); + expect(argsEvent.args).toBe(JSON.stringify({ operation: 'add', numbers: [1, 2] })); + + const endEvent = events[2] as any; + expect(endEvent.type).toBe(EventType.TOOL_CALL_END); + expect(endEvent.toolCallId).toBe('call_123'); + }); + }); + + describe('translateToolResultBlock', () => { + it('should generate tool result event with string content', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'tool_result', + tool_use_id: 'call_123', + content: 'Result: 3', + is_error: false, + } as ToolResultBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(1); + + const resultEvent = events[0] as any; + expect(resultEvent.type).toBe(EventType.TOOL_CALL_RESULT); + expect(resultEvent.toolCallId).toBe('call_123'); + expect(resultEvent.result).toBe('Result: 3'); + expect(resultEvent.isError).toBe(false); + }); + + it('should generate tool result event with array content', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'tool_result', + tool_use_id: 'call_123', + content: [ + { type: 'text', text: 'Part 1' }, + { type: 'text', text: 'Part 2' }, + ], + is_error: false, + } as ToolResultBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(1); + + const resultEvent = events[0] as any; + expect(resultEvent.type).toBe(EventType.TOOL_CALL_RESULT); + expect(resultEvent.result).toContain('Part 1'); + expect(resultEvent.result).toContain('Part 2'); + }); + + it('should mark error results', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { + type: 'tool_result', + tool_use_id: 'call_123', + content: 'Error occurred', + is_error: true, + } as ToolResultBlock, + ], + }; + + const events = translator.translateMessage(message); + + expect(events).toHaveLength(1); + + const resultEvent = events[0] as any; + expect(resultEvent.isError).toBe(true); + }); + }); + + describe('reset', () => { + it('should reset translator state', () => { + translator.setCurrentMessageId('msg_1'); + translator.reset(); + + expect(translator.getCurrentMessageId()).toBeNull(); + }); + }); + + describe('generateMessageId', () => { + it('should generate unique message IDs', () => { + const message: SDKAssistantMessage = { + type: 'assistant', + content: [ + { type: 'text', text: 'Text 1' } as TextBlock, + { type: 'text', text: 'Text 2' } as TextBlock, + ], + }; + + const events = translator.translateMessage(message); + + const messageId1 = (events[0] as any).messageId; + const messageId2 = (events[3] as any).messageId; + + expect(messageId1).not.toBe(messageId2); + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/integration/basic.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/integration/basic.test.ts new file mode 100644 index 000000000..0dd1f076d --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/integration/basic.test.ts @@ -0,0 +1,166 @@ +/** + * Basic integration tests + */ + +import { ClaudeAgent } from '../../src/agent'; +import { SessionManager } from '../../src/session-manager'; +import type { RunAgentInput } from '@ag-ui/client'; + +// Mock the Claude SDK +jest.mock('@anthropic-ai/claude-agent-sdk'); + +describe('Basic Integration', () => { + let agent: ClaudeAgent; + + beforeEach(() => { + SessionManager.resetInstance(); + + const { ClaudeSDKClient, query } = require('@anthropic-ai/claude-agent-sdk'); + + ClaudeSDKClient.mockImplementation(() => ({ + query: jest.fn().mockResolvedValue(undefined), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Hello! How can I help you?' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), + close: jest.fn().mockResolvedValue(undefined), + })); + + query.mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Hello! How can I help you?' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }); + + agent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + }); + + afterEach(() => { + SessionManager.resetInstance(); + jest.clearAllMocks(); + }); + + it('should handle simple conversation', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + const events: any[] = []; + + agent.run(input).subscribe({ + next: (event) => { + events.push(event); + }, + complete: () => { + // Check that we received key events + expect(events.some((e) => e.type === 'run_started')).toBe(true); + expect(events.some((e) => e.type === 'text_message_start')).toBe(true); + expect(events.some((e) => e.type === 'text_message_content')).toBe(true); + expect(events.some((e) => e.type === 'text_message_end')).toBe(true); + expect(events.some((e) => e.type === 'run_finished')).toBe(true); + done(); + }, + error: done, + }); + }); + + it('should handle multi-turn conversation', (done) => { + const input1: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread1', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + agent.run(input1).subscribe({ + complete: () => { + const input2: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread1', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + { id: 'msg2', role: 'assistant', content: 'Hello! How can I help you?' }, + { id: 'msg3', role: 'user', content: 'Tell me a joke' }, + ], + context: {}, + }; + + agent.run(input2).subscribe({ + complete: () => { + // Verify session was reused + expect(agent.getSessionManager().getSessionCount()).toBe(1); + done(); + }, + error: done, + }); + }, + error: done, + }); + }); + + it('should handle errors gracefully', (done) => { + const { ClaudeSDKClient } = require('@anthropic-ai/claude-agent-sdk'); + + ClaudeSDKClient.mockImplementation(() => ({ + query: jest.fn().mockRejectedValue(new Error('API Error')), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + throw new Error('API Error'); + }, + }), + close: jest.fn().mockResolvedValue(undefined), + })); + + const errorAgent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + const events: any[] = []; + + errorAgent.run(input).subscribe({ + next: (event) => { + events.push(event); + }, + complete: () => { + // Should have error event + expect(events.some((e) => e.type === 'run_error')).toBe(true); + done(); + }, + error: done, + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/integration/sessions.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/integration/sessions.test.ts new file mode 100644 index 000000000..d4bd4ca4e --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/integration/sessions.test.ts @@ -0,0 +1,138 @@ +/** + * Sessions integration tests + */ + +import { ClaudeAgent } from '../../src/agent'; +import { SessionManager } from '../../src/session-manager'; +import type { RunAgentInput } from '@ag-ui/client'; + +// Mock the Claude SDK +jest.mock('@anthropic-ai/claude-agent-sdk'); + +describe('Sessions Integration', () => { + beforeEach(() => { + SessionManager.resetInstance(); + + const { ClaudeSDKClient, query } = require('@anthropic-ai/claude-agent-sdk'); + + ClaudeSDKClient.mockImplementation(() => ({ + query: jest.fn().mockResolvedValue(undefined), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Response' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), + close: jest.fn().mockResolvedValue(undefined), + })); + + query.mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Response' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }); + }); + + afterEach(() => { + SessionManager.resetInstance(); + jest.clearAllMocks(); + }); + + it('should maintain persistent sessions', (done) => { + const agent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + + const input: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread1', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + agent.run(input).subscribe({ + complete: () => { + expect(agent.getSessionManager().hasSession('thread1')).toBe(true); + done(); + }, + error: done, + }); + }); + + it('should work in stateless mode', (done) => { + const agent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: false, + }); + + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello' }, + ], + context: {}, + }; + + agent.run(input).subscribe({ + complete: done, + error: done, + }); + }); + + it('should isolate sessions by thread ID', (done) => { + const agent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + + const input1: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread1', + messages: [ + { id: 'msg1', role: 'user', content: 'Hello thread 1' }, + ], + context: {}, + }; + + const input2: RunAgentInput = { + agentId: 'test_agent', + threadId: 'thread2', + messages: [ + { id: 'msg2', role: 'user', content: 'Hello thread 2' }, + ], + context: {}, + }; + + agent.run(input1).subscribe({ + complete: () => { + agent.run(input2).subscribe({ + complete: () => { + expect(agent.getSessionManager().hasSession('thread1')).toBe(true); + expect(agent.getSessionManager().hasSession('thread2')).toBe(true); + expect(agent.getSessionManager().getSessionCount()).toBe(2); + done(); + }, + error: done, + }); + }, + error: done, + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/integration/tools.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/integration/tools.test.ts new file mode 100644 index 000000000..de3a349df --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/integration/tools.test.ts @@ -0,0 +1,189 @@ +/** + * Tools integration tests + */ + +import { ClaudeAgent } from '../../src/agent'; +import { SessionManager } from '../../src/session-manager'; +import type { RunAgentInput } from '@ag-ui/client'; + +// Mock the Claude SDK +jest.mock('@anthropic-ai/claude-agent-sdk'); + +describe('Tools Integration', () => { + let agent: ClaudeAgent; + + beforeEach(() => { + SessionManager.resetInstance(); + + const { ClaudeSDKClient } = require('@anthropic-ai/claude-agent-sdk'); + + ClaudeSDKClient.mockImplementation(() => ({ + query: jest.fn().mockResolvedValue(undefined), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [ + { + type: 'tool_use', + id: 'tool_call_1', + name: 'calculator', + input: { operation: 'add', numbers: [1, 2] }, + }, + ], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), + close: jest.fn().mockResolvedValue(undefined), + })); + + agent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + }); + + afterEach(() => { + SessionManager.resetInstance(); + jest.clearAllMocks(); + }); + + it('should handle tool calls', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Calculate 1 + 2' }, + ], + context: { + tools: [ + { + name: 'calculator', + description: 'Performs calculations', + parameters: { + type: 'object', + properties: { + operation: { type: 'string' }, + numbers: { type: 'array', items: { type: 'number' } }, + }, + required: ['operation', 'numbers'], + }, + }, + ], + }, + }; + + const events: any[] = []; + + agent.run(input).subscribe({ + next: (event) => { + events.push(event); + }, + complete: () => { + // Check for tool call events + expect(events.some((e) => e.type === 'tool_call_start')).toBe(true); + expect(events.some((e) => e.type === 'tool_call_args')).toBe(true); + expect(events.some((e) => e.type === 'tool_call_end')).toBe(true); + done(); + }, + error: done, + }); + }); + + it('should handle tool results', (done) => { + const { ClaudeSDKClient } = require('@anthropic-ai/claude-agent-sdk'); + + ClaudeSDKClient.mockImplementation(() => ({ + query: jest.fn().mockResolvedValue(undefined), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [ + { + type: 'tool_result', + tool_use_id: 'tool_call_1', + content: 'The result is 3', + is_error: false, + }, + ], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), + close: jest.fn().mockResolvedValue(undefined), + })); + + const resultAgent = new ClaudeAgent({ + apiKey: 'test_api_key', + enablePersistentSessions: true, + }); + + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'What is 1 + 2?' }, + ], + context: { + tools: [ + { + name: 'calculator', + description: 'Performs calculations', + }, + ], + }, + }; + + const events: any[] = []; + + resultAgent.run(input).subscribe({ + next: (event) => { + events.push(event); + }, + complete: () => { + // Check for tool result event + const resultEvent = events.find((e) => e.type === 'tool_call_result'); + expect(resultEvent).toBeDefined(); + expect(resultEvent?.result).toContain('The result is 3'); + done(); + }, + error: done, + }); + }); + + it('should handle client tools', (done) => { + const input: RunAgentInput = { + agentId: 'test_agent', + messages: [ + { id: 'msg1', role: 'user', content: 'Open a file' }, + ], + context: { + tools: [ + { + name: 'file_reader', + description: 'Reads files', + client: true, + parameters: { + type: 'object', + properties: { + path: { type: 'string' }, + }, + }, + }, + ], + }, + }; + + agent.run(input).subscribe({ + complete: done, + error: done, + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/session-manager.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/session-manager.test.ts new file mode 100644 index 000000000..55e5f2029 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/session-manager.test.ts @@ -0,0 +1,248 @@ +/** + * Session manager tests + */ + +import { SessionManager } from '../src/session-manager'; +import type { Message } from '@ag-ui/client'; + +describe('SessionManager', () => { + let sessionManager: SessionManager; + + beforeEach(() => { + SessionManager.resetInstance(); + sessionManager = SessionManager.getInstance(); + }); + + afterEach(() => { + SessionManager.resetInstance(); + }); + + describe('getInstance', () => { + it('should return singleton instance', () => { + const instance1 = SessionManager.getInstance(); + const instance2 = SessionManager.getInstance(); + + expect(instance1).toBe(instance2); + }); + }); + + describe('getSession', () => { + it('should create new session if not exists', () => { + const session = sessionManager.getSession('session1'); + + expect(session.id).toBe('session1'); + expect(session.processedMessageIds).toBeDefined(); + expect(session.state).toEqual({}); + }); + + it('should return existing session', () => { + const session1 = sessionManager.getSession('session1'); + const session2 = sessionManager.getSession('session1'); + + expect(session1).toBe(session2); + }); + + it('should update last accessed time', () => { + const session1 = sessionManager.getSession('session1'); + const time1 = session1.lastAccessedAt; + + // Wait a bit + setTimeout(() => { + const session2 = sessionManager.getSession('session1'); + expect(session2.lastAccessedAt).toBeGreaterThanOrEqual(time1); + }, 10); + }); + }); + + describe('hasSession', () => { + it('should return true for existing session', () => { + sessionManager.getSession('session1'); + expect(sessionManager.hasSession('session1')).toBe(true); + }); + + it('should return false for non-existing session', () => { + expect(sessionManager.hasSession('session1')).toBe(false); + }); + }); + + describe('deleteSession', () => { + it('should delete session', () => { + sessionManager.getSession('session1'); + expect(sessionManager.hasSession('session1')).toBe(true); + + sessionManager.deleteSession('session1'); + expect(sessionManager.hasSession('session1')).toBe(false); + }); + }); + + describe('trackMessage', () => { + it('should track processed message', () => { + sessionManager.getSession('session1'); + sessionManager.trackMessage('session1', 'msg1'); + + expect(sessionManager.isMessageProcessed('session1', 'msg1')).toBe(true); + }); + }); + + describe('isMessageProcessed', () => { + it('should return false for unprocessed message', () => { + sessionManager.getSession('session1'); + expect(sessionManager.isMessageProcessed('session1', 'msg1')).toBe(false); + }); + + it('should return true for processed message', () => { + sessionManager.getSession('session1'); + sessionManager.trackMessage('session1', 'msg1'); + expect(sessionManager.isMessageProcessed('session1', 'msg1')).toBe(true); + }); + }); + + describe('getUnseenMessages', () => { + it('should return all messages for new session', () => { + const messages: Message[] = [ + { id: 'msg1', role: 'user', content: 'Hello' }, + { id: 'msg2', role: 'assistant', content: 'Hi' }, + ]; + + const unseen = sessionManager.getUnseenMessages('session1', messages); + expect(unseen).toHaveLength(2); + }); + + it('should filter out processed messages', () => { + sessionManager.getSession('session1'); + sessionManager.trackMessage('session1', 'msg1'); + + const messages: Message[] = [ + { id: 'msg1', role: 'user', content: 'Hello' }, + { id: 'msg2', role: 'assistant', content: 'Hi' }, + ]; + + const unseen = sessionManager.getUnseenMessages('session1', messages); + expect(unseen).toHaveLength(1); + expect(unseen[0].id).toBe('msg2'); + }); + }); + + describe('markMessagesAsProcessed', () => { + it('should mark all messages as processed', () => { + sessionManager.getSession('session1'); + + const messages: Message[] = [ + { id: 'msg1', role: 'user', content: 'Hello' }, + { id: 'msg2', role: 'assistant', content: 'Hi' }, + ]; + + sessionManager.markMessagesAsProcessed('session1', messages); + + expect(sessionManager.isMessageProcessed('session1', 'msg1')).toBe(true); + expect(sessionManager.isMessageProcessed('session1', 'msg2')).toBe(true); + }); + }); + + describe('getStateValue', () => { + it('should return state value', () => { + sessionManager.getSession('session1'); + sessionManager.setStateValue('session1', 'key1', 'value1'); + + expect(sessionManager.getStateValue('session1', 'key1')).toBe('value1'); + }); + + it('should return undefined for non-existing key', () => { + sessionManager.getSession('session1'); + expect(sessionManager.getStateValue('session1', 'key1')).toBeUndefined(); + }); + }); + + describe('setStateValue', () => { + it('should set state value', () => { + sessionManager.getSession('session1'); + sessionManager.setStateValue('session1', 'key1', 'value1'); + + expect(sessionManager.getStateValue('session1', 'key1')).toBe('value1'); + }); + }); + + describe('removeStateKeys', () => { + it('should remove state keys', () => { + sessionManager.getSession('session1'); + sessionManager.setStateValue('session1', 'key1', 'value1'); + sessionManager.setStateValue('session1', 'key2', 'value2'); + + sessionManager.removeStateKeys('session1', ['key1']); + + expect(sessionManager.getStateValue('session1', 'key1')).toBeUndefined(); + expect(sessionManager.getStateValue('session1', 'key2')).toBe('value2'); + }); + }); + + describe('clearSessionState', () => { + it('should clear all state', () => { + sessionManager.getSession('session1'); + sessionManager.setStateValue('session1', 'key1', 'value1'); + sessionManager.setStateValue('session1', 'key2', 'value2'); + + sessionManager.clearSessionState('session1'); + + expect(sessionManager.getStateValue('session1', 'key1')).toBeUndefined(); + expect(sessionManager.getStateValue('session1', 'key2')).toBeUndefined(); + }); + }); + + describe('getSessionCount', () => { + it('should return session count', () => { + expect(sessionManager.getSessionCount()).toBe(0); + + sessionManager.getSession('session1'); + expect(sessionManager.getSessionCount()).toBe(1); + + sessionManager.getSession('session2'); + expect(sessionManager.getSessionCount()).toBe(2); + }); + }); + + describe('getUserSessionCount', () => { + it('should return user session count', () => { + sessionManager.getSession('session1', 'user1'); + sessionManager.getSession('session2', 'user1'); + sessionManager.getSession('session3', 'user2'); + + expect(sessionManager.getUserSessionCount('user1')).toBe(2); + expect(sessionManager.getUserSessionCount('user2')).toBe(1); + }); + }); + + describe('getAllSessionIds', () => { + it('should return all session IDs', () => { + sessionManager.getSession('session1'); + sessionManager.getSession('session2'); + + const ids = sessionManager.getAllSessionIds(); + expect(ids).toHaveLength(2); + expect(ids).toContain('session1'); + expect(ids).toContain('session2'); + }); + }); + + describe('getUserSessions', () => { + it('should return user sessions', () => { + sessionManager.getSession('session1', 'user1'); + sessionManager.getSession('session2', 'user1'); + sessionManager.getSession('session3', 'user2'); + + const userSessions = sessionManager.getUserSessions('user1'); + expect(userSessions).toHaveLength(2); + }); + }); + + describe('clearAllSessions', () => { + it('should clear all sessions', () => { + sessionManager.getSession('session1'); + sessionManager.getSession('session2'); + + sessionManager.clearAllSessions(); + + expect(sessionManager.getSessionCount()).toBe(0); + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/tool-adapter.test.ts b/integrations/claude-agent-sdk/typescript/__tests__/tool-adapter.test.ts new file mode 100644 index 000000000..6a0fd62f3 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/tool-adapter.test.ts @@ -0,0 +1,256 @@ +/** + * Tool adapter tests + */ + +import { z } from 'zod'; +import { ToolAdapter } from '../src/tool-adapter'; +import type { Tool } from '@ag-ui/client'; + +describe('ToolAdapter', () => { + describe('convertAgUiToolsToSdk', () => { + it('should convert AG-UI tools to SDK format', () => { + const tools: Tool[] = [ + { + name: 'test_tool', + description: 'A test tool', + parameters: { + type: 'object', + properties: { + query: { type: 'string' }, + count: { type: 'number' }, + }, + required: ['query'], + }, + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + + expect(sdkTools).toHaveLength(1); + expect(sdkTools[0].name).toBe('test_tool'); + expect(sdkTools[0].description).toBe('A test tool'); + expect(sdkTools[0].inputSchema).toBeDefined(); + expect(sdkTools[0].handler).toBeDefined(); + }); + + it('should handle tools without parameters', () => { + const tools: Tool[] = [ + { + name: 'simple_tool', + description: 'A simple tool', + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + + expect(sdkTools).toHaveLength(1); + expect(sdkTools[0].name).toBe('simple_tool'); + }); + }); + + describe('convertJsonSchemaToZod', () => { + it('should convert string type', () => { + const tools: Tool[] = [ + { + name: 'string_tool', + description: 'Test', + parameters: { + type: 'object', + properties: { + text: { type: 'string' }, + }, + }, + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + expect(sdkTools[0].inputSchema).toBeDefined(); + }); + + it('should convert number type', () => { + const tools: Tool[] = [ + { + name: 'number_tool', + description: 'Test', + parameters: { + type: 'object', + properties: { + count: { type: 'number', minimum: 0, maximum: 100 }, + }, + }, + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + expect(sdkTools[0].inputSchema).toBeDefined(); + }); + + it('should convert boolean type', () => { + const tools: Tool[] = [ + { + name: 'boolean_tool', + description: 'Test', + parameters: { + type: 'object', + properties: { + enabled: { type: 'boolean' }, + }, + }, + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + expect(sdkTools[0].inputSchema).toBeDefined(); + }); + + it('should convert array type', () => { + const tools: Tool[] = [ + { + name: 'array_tool', + description: 'Test', + parameters: { + type: 'object', + properties: { + items: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + expect(sdkTools[0].inputSchema).toBeDefined(); + }); + + it('should handle required fields', () => { + const tools: Tool[] = [ + { + name: 'required_tool', + description: 'Test', + parameters: { + type: 'object', + properties: { + required_field: { type: 'string' }, + optional_field: { type: 'string' }, + }, + required: ['required_field'], + }, + }, + ]; + + const sdkTools = ToolAdapter.convertAgUiToolsToSdk(tools); + expect(sdkTools[0].inputSchema).toBeDefined(); + }); + }); + + describe('createMcpServerForTools', () => { + it('should create MCP server configuration', () => { + const tools: Tool[] = [ + { + name: 'tool1', + description: 'Tool 1', + }, + { + name: 'tool2', + description: 'Tool 2', + }, + ]; + + const mcpServer = ToolAdapter.createMcpServerForTools(tools); + + expect(mcpServer.name).toBe('ag_ui_tools'); + expect(mcpServer.version).toBe('1.0.0'); + expect(mcpServer.tools).toHaveLength(2); + }); + }); + + describe('extractToolCalls', () => { + it('should extract tool calls from message', () => { + const message = { + content: [ + { type: 'text', text: 'Hello' }, + { type: 'tool_use', id: 'tool_1', name: 'search', input: { query: 'test' } }, + ], + }; + + const toolCalls = ToolAdapter.extractToolCalls(message); + + expect(toolCalls).toHaveLength(1); + expect(toolCalls[0].id).toBe('tool_1'); + expect(toolCalls[0].name).toBe('search'); + expect(toolCalls[0].input).toEqual({ query: 'test' }); + }); + + it('should return empty array for non-tool messages', () => { + const message = { + content: [{ type: 'text', text: 'Hello' }], + }; + + const toolCalls = ToolAdapter.extractToolCalls(message); + + expect(toolCalls).toHaveLength(0); + }); + }); + + describe('isClientTool', () => { + it('should identify client tools', () => { + const tools: Tool[] = [ + { name: 'client_tool', description: 'Test', client: true }, + { name: 'backend_tool', description: 'Test', client: false }, + ]; + + expect(ToolAdapter.isClientTool('client_tool', tools)).toBe(true); + expect(ToolAdapter.isClientTool('backend_tool', tools)).toBe(false); + expect(ToolAdapter.isClientTool('unknown_tool', tools)).toBe(false); + }); + }); + + describe('isLongRunningTool', () => { + it('should identify long-running tools', () => { + const tools: Tool[] = [ + { name: 'client_tool', description: 'Test', client: true }, + { name: 'long_tool', description: 'Test', longRunning: true }, + { name: 'normal_tool', description: 'Test' }, + ]; + + expect(ToolAdapter.isLongRunningTool('client_tool', tools)).toBe(true); + expect(ToolAdapter.isLongRunningTool('long_tool', tools)).toBe(true); + expect(ToolAdapter.isLongRunningTool('normal_tool', tools)).toBe(false); + }); + }); + + describe('formatToolNameForSdk', () => { + it('should format tool name with MCP prefix', () => { + expect(ToolAdapter.formatToolNameForSdk('my_tool')).toBe('mcp__ag_ui_tools__my_tool'); + expect(ToolAdapter.formatToolNameForSdk('my_tool', 'custom_server')).toBe( + 'mcp__custom_server__my_tool' + ); + }); + }); + + describe('parseToolNameFromSdk', () => { + it('should parse tool name from SDK format', () => { + expect(ToolAdapter.parseToolNameFromSdk('mcp__ag_ui_tools__my_tool')).toBe('my_tool'); + expect(ToolAdapter.parseToolNameFromSdk('mcp__custom__nested__tool')).toBe('nested__tool'); + expect(ToolAdapter.parseToolNameFromSdk('plain_tool')).toBe('plain_tool'); + }); + }); + + describe('getAllowedToolsList', () => { + it('should generate allowed tools list', () => { + const tools: Tool[] = [ + { name: 'tool1', description: 'Tool 1' }, + { name: 'tool2', description: 'Tool 2' }, + ]; + + const allowedTools = ToolAdapter.getAllowedToolsList(tools); + + expect(allowedTools).toHaveLength(2); + expect(allowedTools).toContain('mcp__ag_ui_tools__tool1'); + expect(allowedTools).toContain('mcp__ag_ui_tools__tool2'); + }); + }); +}); + diff --git a/integrations/claude-agent-sdk/typescript/examples/README.md b/integrations/claude-agent-sdk/typescript/examples/README.md index c20eb8c47..fc4345801 100644 --- a/integrations/claude-agent-sdk/typescript/examples/README.md +++ b/integrations/claude-agent-sdk/typescript/examples/README.md @@ -1,10 +1,125 @@ -# CopilotKit Integration Examples +# Claude Agent SDK Example -This directory contains examples showing how to integrate Claude Agent SDK with CopilotKit. +This example demonstrates how to use the Claude Agent SDK with Express.js to create an AI agent server that follows the AG-UI Protocol. -## copilotkit/ +## Setup -A complete Next.js application demonstrating CopilotKit integration with Claude Agent SDK. +1. Install dependencies: -See [copilotkit/README.md](./copilotkit/README.md) for details. +```bash +cd examples +npm install +``` +2. Set your Anthropic API key: + +```bash +export ANTHROPIC_API_KEY=your_api_key_here +``` + +3. Run the server: + +```bash +npm run dev +``` + +The server will start on `http://localhost:3000`. + +## API Endpoints + +### POST /api/run-agent + +Run the agent with a simple conversation. + +**Request:** + +```json +{ + "agentId": "my_agent", + "threadId": "thread_123", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "Hello, how are you?" + } + ], + "context": {} +} +``` + +**Response:** Server-Sent Events (SSE) stream with AG-UI protocol events. + +### POST /api/run-agent-with-tools + +Run the agent with predefined tools (calculator and weather). + +**Request:** + +```json +{ + "agentId": "my_agent", + "threadId": "thread_123", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "What is 42 + 58?" + } + ], + "context": {} +} +``` + +### POST /api/cleanup + +Cleanup all sessions and resources. + +## Example Usage with curl + +```bash +# Simple conversation +curl -X POST http://localhost:3000/api/run-agent \ + -H "Content-Type: application/json" \ + -d '{ + "agentId": "test_agent", + "messages": [ + {"id": "msg_1", "role": "user", "content": "Hello!"} + ], + "context": {} + }' + +# With tools +curl -X POST http://localhost:3000/api/run-agent-with-tools \ + -H "Content-Type: application/json" \ + -d '{ + "agentId": "test_agent", + "messages": [ + {"id": "msg_1", "role": "user", "content": "Calculate 15 + 27"} + ], + "context": {} + }' +``` + +## Features Demonstrated + +- **Server-Sent Events (SSE)**: Real-time streaming of agent responses +- **Persistent Sessions**: Maintains conversation context across requests +- **Tool Integration**: Example tools (calculator, weather) +- **Error Handling**: Graceful error handling and reporting +- **Graceful Shutdown**: Clean resource cleanup on server stop + +## Event Types + +The agent emits the following AG-UI protocol events: + +- `run_started`: Execution started +- `text_message_start`: Text message begins +- `text_message_content`: Streaming text content +- `text_message_end`: Text message complete +- `tool_call_start`: Tool call begins +- `tool_call_args`: Tool arguments +- `tool_call_end`: Tool call complete +- `tool_call_result`: Tool execution result +- `run_finished`: Execution complete +- `run_error`: Error occurred diff --git a/integrations/claude-agent-sdk/typescript/examples/package.json b/integrations/claude-agent-sdk/typescript/examples/package.json new file mode 100644 index 000000000..db2170b08 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/package.json @@ -0,0 +1,24 @@ +{ + "name": "@ag-ui/claude-example", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "tsx src/server.ts", + "build": "tsc" + }, + "dependencies": { + "@ag-ui/claude": "workspace:*", + "@ag-ui/client": "workspace:*", + "@ag-ui/core": "workspace:*", + "express": "^4.18.2", + "cors": "^2.8.5" + }, + "devDependencies": { + "@types/express": "^4.17.17", + "@types/cors": "^2.8.13", + "@types/node": "^20.11.19", + "tsx": "^4.7.0", + "typescript": "^5.3.3" + } +} + diff --git a/integrations/claude-agent-sdk/typescript/examples/src/server.ts b/integrations/claude-agent-sdk/typescript/examples/src/server.ts new file mode 100644 index 000000000..0b6f35253 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/src/server.ts @@ -0,0 +1,207 @@ +/** + * Example Express server using Claude Agent SDK + */ + +import express from 'express'; +import cors from 'cors'; +import { ClaudeAgent } from '@ag-ui/claude'; +import type { RunAgentInput } from '@ag-ui/client'; + +const app = express(); +const port = process.env.PORT || 3000; + +// Middleware +app.use(cors()); +app.use(express.json()); + +// Initialize Claude Agent +const agent = new ClaudeAgent({ + apiKey: process.env.ANTHROPIC_API_KEY, + enablePersistentSessions: true, + sessionTimeout: 30 * 60 * 1000, // 30 minutes + permissionMode: 'ask', // or 'auto' or 'none' +}); + +// Health check endpoint +app.get('/health', (req, res) => { + res.json({ status: 'ok' }); +}); + +// Main agent endpoint +app.post('/api/run-agent', async (req, res) => { + try { + const input: RunAgentInput = req.body; + + // Validate input + if (!input.messages || input.messages.length === 0) { + return res.status(400).json({ error: 'Messages are required' }); + } + + // Set headers for Server-Sent Events + res.setHeader('Content-Type', 'text/event-stream'); + res.setHeader('Cache-Control', 'no-cache'); + res.setHeader('Connection', 'keep-alive'); + + // Run the agent and stream events + agent.run(input).subscribe({ + next: (event) => { + // Send event as SSE + res.write(`data: ${JSON.stringify(event)}\n\n`); + }, + error: (error) => { + console.error('Agent error:', error); + res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`); + res.end(); + }, + complete: () => { + res.end(); + }, + }); + + // Handle client disconnect + req.on('close', () => { + console.log('Client disconnected'); + }); + } catch (error: any) { + console.error('Request error:', error); + res.status(500).json({ error: error.message }); + } +}); + +// Example tools definition +const exampleTools = [ + { + name: 'calculator', + description: 'Performs basic arithmetic calculations', + parameters: { + type: 'object', + properties: { + operation: { + type: 'string', + enum: ['add', 'subtract', 'multiply', 'divide'], + description: 'The operation to perform', + }, + a: { + type: 'number', + description: 'First number', + }, + b: { + type: 'number', + description: 'Second number', + }, + }, + required: ['operation', 'a', 'b'], + }, + handler: async (args: { operation: string; a: number; b: number }) => { + const { operation, a, b } = args; + let result: number; + + switch (operation) { + case 'add': + result = a + b; + break; + case 'subtract': + result = a - b; + break; + case 'multiply': + result = a * b; + break; + case 'divide': + if (b === 0) { + throw new Error('Division by zero'); + } + result = a / b; + break; + default: + throw new Error(`Unknown operation: ${operation}`); + } + + return `The result of ${a} ${operation} ${b} is ${result}`; + }, + }, + { + name: 'get_weather', + description: 'Gets the current weather for a location', + client: true, // This tool runs on the client + parameters: { + type: 'object', + properties: { + location: { + type: 'string', + description: 'The city and country, e.g. "San Francisco, US"', + }, + }, + required: ['location'], + }, + }, +]; + +// Example endpoint with tools +app.post('/api/run-agent-with-tools', async (req, res) => { + try { + const input: RunAgentInput = { + ...req.body, + context: { + ...req.body.context, + tools: exampleTools, + }, + }; + + res.setHeader('Content-Type', 'text/event-stream'); + res.setHeader('Cache-Control', 'no-cache'); + res.setHeader('Connection', 'keep-alive'); + + agent.run(input).subscribe({ + next: (event) => { + res.write(`data: ${JSON.stringify(event)}\n\n`); + }, + error: (error) => { + console.error('Agent error:', error); + res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`); + res.end(); + }, + complete: () => { + res.end(); + }, + }); + + req.on('close', () => { + console.log('Client disconnected'); + }); + } catch (error: any) { + console.error('Request error:', error); + res.status(500).json({ error: error.message }); + } +}); + +// Cleanup endpoint +app.post('/api/cleanup', async (req, res) => { + try { + await agent.cleanup(); + res.json({ message: 'Cleanup successful' }); + } catch (error: any) { + console.error('Cleanup error:', error); + res.status(500).json({ error: error.message }); + } +}); + +// Start server +app.listen(port, () => { + console.log(`Claude Agent server listening on port ${port}`); + console.log(`API endpoint: http://localhost:${port}/api/run-agent`); + console.log(`With tools: http://localhost:${port}/api/run-agent-with-tools`); +}); + +// Graceful shutdown +process.on('SIGINT', async () => { + console.log('Shutting down gracefully...'); + await agent.cleanup(); + process.exit(0); +}); + +process.on('SIGTERM', async () => { + console.log('Shutting down gracefully...'); + await agent.cleanup(); + process.exit(0); +}); + diff --git a/integrations/claude-agent-sdk/typescript/jest.config.js b/integrations/claude-agent-sdk/typescript/jest.config.js new file mode 100644 index 000000000..4030c5af7 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/jest.config.js @@ -0,0 +1,23 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + roots: ['/__tests__'], + testMatch: ['**/__tests__/**/*.test.ts'], + moduleNameMapper: { + '^@/(.*)$': '/src/$1', + }, + collectCoverageFrom: [ + 'src/**/*.ts', + '!src/**/*.d.ts', + '!src/index.ts', + ], + coverageThreshold: { + global: { + branches: 70, + functions: 70, + lines: 70, + statements: 70, + }, + }, +}; + diff --git a/integrations/claude-agent-sdk/typescript/package.json b/integrations/claude-agent-sdk/typescript/package.json new file mode 100644 index 000000000..53c54110c --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/package.json @@ -0,0 +1,47 @@ +{ + "name": "@ag-ui/claude", + "version": "0.0.1", + "license": "Apache-2.0", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "sideEffects": false, + "private": false, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist/**", + "README.md" + ], + "scripts": { + "build": "tsup", + "dev": "tsup --watch", + "clean": "rm -rf dist .turbo node_modules", + "typecheck": "tsc --noEmit", + "test": "jest", + "test:watch": "jest --watch", + "link:global": "pnpm link --global", + "unlink:global": "pnpm unlink --global" + }, + "dependencies": { + "@anthropic-ai/claude-agent-sdk": "latest", + "rxjs": "7.8.1", + "zod": "^3.25.67" + }, + "peerDependencies": { + "@ag-ui/core": ">=0.0.40", + "@ag-ui/client": ">=0.0.40" + }, + "devDependencies": { + "@ag-ui/core": "workspace:*", + "@ag-ui/client": "workspace:*", + "@types/jest": "^29.5.14", + "@types/node": "^20.11.19", + "jest": "^29.7.0", + "ts-jest": "^29.1.2", + "tsup": "^8.0.2", + "typescript": "^5.3.3" + } +} + diff --git a/integrations/claude-agent-sdk/typescript/src/agent.ts b/integrations/claude-agent-sdk/typescript/src/agent.ts new file mode 100644 index 000000000..31d7777be --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/agent.ts @@ -0,0 +1,359 @@ +/** + * Claude Agent: Main agent class that integrates Claude SDK with AG-UI Protocol + */ + +import { Observable, Subscriber } from 'rxjs'; +import { + AbstractAgent, + RunAgentInput, + EventType, + RunStartedEvent, + RunFinishedEvent, + RunErrorEvent, + StepStartedEvent, + StepFinishedEvent, +} from '@ag-ui/client'; +import type { + ClaudeAgentConfig, + ProcessedEvents, + ClaudeSDKClient, + Options, + SDKMessage, +} from './types'; +import { SessionManager } from './session-manager'; +import { EventTranslator } from './event-translator'; +import { ToolAdapter } from './tool-adapter'; +import { ExecutionState, ExecutionStateManager } from './execution-state'; +import { + generateRunId, + convertAgUiMessagesToPrompt, + isToolResultSubmission, + formatErrorMessage, +} from './utils/converters'; + +/** + * ClaudeAgent integrates Claude Agent SDK with AG-UI Protocol + */ +export class ClaudeAgent extends AbstractAgent { + private sessionManager: SessionManager; + private executionStateManager: ExecutionStateManager; + private apiKey?: string; + private baseUrl?: string; + private sessionTimeout: number; + private enablePersistentSessions: boolean; + private permissionMode: 'ask' | 'auto' | 'none'; + + constructor(config: ClaudeAgentConfig) { + super(config); + this.apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY; + this.baseUrl = config.baseUrl || process.env.ANTHROPIC_BASE_URL; + this.sessionTimeout = config.sessionTimeout || 30 * 60 * 1000; // 30 minutes + this.enablePersistentSessions = config.enablePersistentSessions !== false; + this.permissionMode = config.permissionMode || 'ask'; + this.sessionManager = SessionManager.getInstance(this.sessionTimeout); + this.executionStateManager = new ExecutionStateManager(); + } + + /** + * Run the agent with the given input + */ + run(input: RunAgentInput): Observable { + return new Observable((subscriber) => { + this.executeAgent(input, subscriber).catch((error) => { + subscriber.error(error); + }); + }); + } + + /** + * Execute the agent asynchronously + */ + private async executeAgent( + input: RunAgentInput, + subscriber: Subscriber + ): Promise { + const runId = generateRunId(); + const sessionId = input.threadId || `session_${Date.now()}`; + + // Create execution state + const execution = this.executionStateManager.createExecution(runId, sessionId); + + try { + // Emit run started event + const runStartedEvent: RunStartedEvent = { + type: EventType.RUN_STARTED, + runId, + }; + subscriber.next(runStartedEvent); + execution.addEvent(runStartedEvent); + + // Get or create session + const session = this.sessionManager.getSession(sessionId, input.agentId); + + // Get unseen messages + const unseenMessages = this.sessionManager.getUnseenMessages( + sessionId, + input.messages || [] + ); + + // Check if this is a tool result submission + const isToolResult = isToolResultSubmission(input.messages || []); + + // Prepare tools + const tools = input.context?.tools || []; + + // Prepare options for Claude SDK + const options = this.prepareClaudeOptions(tools); + + // Extract prompt from messages + const prompt = convertAgUiMessagesToPrompt(unseenMessages); + + // Emit step started event + const stepStartedEvent: StepStartedEvent = { + type: EventType.STEP_STARTED, + runId, + stepId: `step_${runId}_1`, + }; + subscriber.next(stepStartedEvent); + execution.addEvent(stepStartedEvent); + + // Call Claude SDK + await this.callClaudeSDK( + prompt, + options, + session, + runId, + subscriber, + execution + ); + + // Mark messages as processed + this.sessionManager.markMessagesAsProcessed(sessionId, unseenMessages); + + // Emit step finished event + const stepFinishedEvent: StepFinishedEvent = { + type: EventType.STEP_FINISHED, + runId, + stepId: `step_${runId}_1`, + }; + subscriber.next(stepFinishedEvent); + execution.addEvent(stepFinishedEvent); + + // Emit run finished event + const runFinishedEvent: RunFinishedEvent = { + type: EventType.RUN_FINISHED, + runId, + }; + subscriber.next(runFinishedEvent); + execution.addEvent(runFinishedEvent); + + // Complete execution + execution.complete(); + subscriber.complete(); + } catch (error: any) { + // Emit run error event + const runErrorEvent: RunErrorEvent = { + type: EventType.RUN_ERROR, + runId, + error: formatErrorMessage(error), + }; + subscriber.next(runErrorEvent); + execution.addEvent(runErrorEvent); + + // Mark execution as failed + execution.fail(error); + + // Complete the observable + subscriber.complete(); + } + } + + /** + * Prepare Claude SDK options + */ + private prepareClaudeOptions(tools: any[]): Options { + const options: Options = { + apiKey: this.apiKey, + baseUrl: this.baseUrl, + permissionMode: this.permissionMode, + }; + + // Add tools if provided + if (tools && tools.length > 0) { + const mcpServer = ToolAdapter.createMcpServerForTools(tools); + options.mcpServers = { + ag_ui_tools: mcpServer, + }; + + // Set allowed tools + options.allowedTools = ToolAdapter.getAllowedToolsList(tools); + } + + return options; + } + + /** + * Call Claude SDK + */ + private async callClaudeSDK( + prompt: string, + options: Options, + session: any, + runId: string, + subscriber: Subscriber, + execution: ExecutionState + ): Promise { + const eventTranslator = new EventTranslator(runId); + + if (this.enablePersistentSessions) { + // Persistent session mode + await this.callClaudeSDKPersistent( + prompt, + options, + session, + eventTranslator, + subscriber, + execution + ); + } else { + // Stateless mode + await this.callClaudeSDKStateless( + prompt, + options, + eventTranslator, + subscriber, + execution + ); + } + } + + /** + * Call Claude SDK in persistent session mode + */ + private async callClaudeSDKPersistent( + prompt: string, + options: Options, + session: any, + eventTranslator: EventTranslator, + subscriber: Subscriber, + execution: ExecutionState + ): Promise { + // Get or create Claude SDK client + let client = this.sessionManager.getClient(session.id); + + if (!client) { + // Import Claude SDK dynamically + const { ClaudeSDKClient } = await this.importClaudeSDK(); + client = new ClaudeSDKClient(options); + this.sessionManager.setClient(session.id, client); + } + + // Send query + await client.query(prompt); + + // Receive and process responses + for await (const message of client.receiveResponse()) { + if (execution.isAborted()) { + break; + } + + const events = eventTranslator.translateMessage(message); + for (const event of events) { + subscriber.next(event); + execution.addEvent(event); + } + } + } + + /** + * Call Claude SDK in stateless mode + */ + private async callClaudeSDKStateless( + prompt: string, + options: Options, + eventTranslator: EventTranslator, + subscriber: Subscriber, + execution: ExecutionState + ): Promise { + // Import Claude SDK dynamically + const { query } = await this.importClaudeSDK(); + + // Call query function + const queryResult = query({ prompt, options }); + + // Process responses + for await (const message of queryResult) { + if (execution.isAborted()) { + break; + } + + const events = eventTranslator.translateMessage(message); + for (const event of events) { + subscriber.next(event); + execution.addEvent(event); + } + } + } + + /** + * Dynamically import Claude SDK + */ + private async importClaudeSDK(): Promise { + try { + return await import('@anthropic-ai/claude-agent-sdk'); + } catch (error) { + throw new Error( + 'Claude Agent SDK not found. Please install it: npm install @anthropic-ai/claude-agent-sdk' + ); + } + } + + /** + * Abort a running execution + */ + abortExecution(runId: string): void { + const execution = this.executionStateManager.getExecution(runId); + if (execution) { + execution.abort(); + } + } + + /** + * Get execution state + */ + getExecutionState(runId: string): ExecutionState | undefined { + return this.executionStateManager.getExecution(runId); + } + + /** + * Get session manager (for testing) + */ + getSessionManager(): SessionManager { + return this.sessionManager; + } + + /** + * Get execution state manager (for testing) + */ + getExecutionStateManager(): ExecutionStateManager { + return this.executionStateManager; + } + + /** + * Cleanup resources + */ + async cleanup(): Promise { + // Abort all running executions + const runningExecutions = this.executionStateManager.getRunningExecutions(); + for (const execution of runningExecutions) { + execution.abort(); + } + + // Clear all sessions + this.sessionManager.clearAllSessions(); + + // Clear all executions + this.executionStateManager.clearAll(); + } +} + diff --git a/integrations/claude-agent-sdk/typescript/src/event-translator.ts b/integrations/claude-agent-sdk/typescript/src/event-translator.ts new file mode 100644 index 000000000..c1a2fc899 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/event-translator.ts @@ -0,0 +1,227 @@ +/** + * Event translator: Converts Claude SDK messages to AG-UI events + */ + +import { + TextMessageStartEvent, + TextMessageContentEvent, + TextMessageEndEvent, + ToolCallStartEvent, + ToolCallArgsEvent, + ToolCallEndEvent, + ToolCallResultEvent, + RunFinishedEvent, + RunErrorEvent, + EventType, +} from '@ag-ui/client'; +import type { + SDKMessage, + SDKAssistantMessage, + SDKResultMessage, + ContentBlock, + TextBlock, + ToolUseBlock, + ToolResultBlock, + ProcessedEvents, +} from './types'; +import { + isAssistantMessage, + isResultMessage, + hasContentProperty, + isTextBlock, + isToolUseBlock, + isToolResultBlock, +} from './types'; + +/** + * EventTranslator converts Claude SDK messages to AG-UI protocol events + */ +export class EventTranslator { + private messageIdCounter = 0; + private currentMessageId: string | null = null; + private runId: string; + + constructor(runId: string) { + this.runId = runId; + } + + /** + * Translate a Claude SDK message to AG-UI events + */ + translateMessage(message: SDKMessage): ProcessedEvents[] { + const events: ProcessedEvents[] = []; + + if (hasContentProperty(message)) { + events.push(...this.translateAssistantMessage(message as SDKAssistantMessage)); + } else if (isResultMessage(message)) { + events.push(...this.translateResultMessage(message)); + } + + return events; + } + + /** + * Translate an AssistantMessage with content blocks + */ + private translateAssistantMessage(message: SDKAssistantMessage): ProcessedEvents[] { + const events: ProcessedEvents[] = []; + + for (const block of message.content) { + if (isTextBlock(block)) { + events.push(...this.translateTextBlock(block)); + } else if (isToolUseBlock(block)) { + events.push(...this.translateToolUseBlock(block)); + } else if (isToolResultBlock(block)) { + events.push(...this.translateToolResultBlock(block)); + } + } + + return events; + } + + /** + * Translate a TextBlock to text message events + */ + private translateTextBlock(block: TextBlock): ProcessedEvents[] { + const events: ProcessedEvents[] = []; + const messageId = this.generateMessageId(); + + // Start event + events.push({ + type: EventType.TEXT_MESSAGE_START, + messageId, + }); + + // Content event + events.push({ + type: EventType.TEXT_MESSAGE_CONTENT, + messageId, + content: block.text, + }); + + // End event + events.push({ + type: EventType.TEXT_MESSAGE_END, + messageId, + }); + + return events; + } + + /** + * Translate a ToolUseBlock to tool call events + */ + private translateToolUseBlock(block: ToolUseBlock): ProcessedEvents[] { + const events: ProcessedEvents[] = []; + const toolCallId = block.id; + + // Start event + events.push({ + type: EventType.TOOL_CALL_START, + toolCallId, + toolName: block.name, + }); + + // Args event - send args as JSON string + events.push({ + type: EventType.TOOL_CALL_ARGS, + toolCallId, + args: JSON.stringify(block.input), + }); + + // End event + events.push({ + type: EventType.TOOL_CALL_END, + toolCallId, + }); + + return events; + } + + /** + * Translate a ToolResultBlock to tool call result event + */ + private translateToolResultBlock(block: ToolResultBlock): ProcessedEvents[] { + const events: ProcessedEvents[] = []; + + // Extract content as string + let resultContent: string; + if (typeof block.content === 'string') { + resultContent = block.content; + } else if (Array.isArray(block.content)) { + // Handle array of content blocks + resultContent = block.content + .map((item) => { + if (item.type === 'text') { + return item.text || ''; + } + return JSON.stringify(item); + }) + .join('\n'); + } else { + resultContent = JSON.stringify(block.content); + } + + events.push({ + type: EventType.TOOL_CALL_RESULT, + toolCallId: block.tool_use_id, + result: resultContent, + isError: block.is_error || false, + }); + + return events; + } + + /** + * Translate a ResultMessage to run finished or error event + */ + private translateResultMessage(message: SDKResultMessage): ProcessedEvents[] { + const events: ProcessedEvents[] = []; + + if (message.subtype === 'success') { + events.push({ + type: EventType.RUN_FINISHED, + runId: this.runId, + }); + } else if (message.subtype === 'error') { + events.push({ + type: EventType.RUN_ERROR, + runId: this.runId, + error: message.error?.message || 'Unknown error', + }); + } + + return events; + } + + /** + * Generate a unique message ID + */ + private generateMessageId(): string { + this.messageIdCounter++; + return `msg_${this.runId}_${this.messageIdCounter}`; + } + + /** + * Reset the translator state for a new execution + */ + reset(): void { + this.messageIdCounter = 0; + this.currentMessageId = null; + } + + /** + * Get current message ID + */ + getCurrentMessageId(): string | null { + return this.currentMessageId; + } + + /** + * Set current message ID + */ + setCurrentMessageId(messageId: string | null): void { + this.currentMessageId = messageId; + } +} + diff --git a/integrations/claude-agent-sdk/typescript/src/execution-state.ts b/integrations/claude-agent-sdk/typescript/src/execution-state.ts new file mode 100644 index 000000000..e5c98dba1 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/execution-state.ts @@ -0,0 +1,327 @@ +/** + * Execution state: Tracks background Claude executions + */ + +import type { ProcessedEvents } from './types'; + +/** + * ExecutionState manages the state of a Claude SDK execution + */ +export class ExecutionState { + readonly id: string; + readonly sessionId: string; + private _isRunning: boolean; + private _startTime: number; + private _endTime?: number; + private _events: ProcessedEvents[]; + private _error?: Error; + private _abortController: AbortController; + + constructor(id: string, sessionId: string) { + this.id = id; + this.sessionId = sessionId; + this._isRunning = true; + this._startTime = Date.now(); + this._events = []; + this._abortController = new AbortController(); + } + + /** + * Check if execution is running + */ + get isRunning(): boolean { + return this._isRunning; + } + + /** + * Get start time + */ + get startTime(): number { + return this._startTime; + } + + /** + * Get end time + */ + get endTime(): number | undefined { + return this._endTime; + } + + /** + * Get duration in milliseconds + */ + get duration(): number { + const end = this._endTime || Date.now(); + return end - this._startTime; + } + + /** + * Get all collected events + */ + get events(): ProcessedEvents[] { + return [...this._events]; + } + + /** + * Get error if any + */ + get error(): Error | undefined { + return this._error; + } + + /** + * Get abort signal + */ + get signal(): AbortSignal { + return this._abortController.signal; + } + + /** + * Add an event to the execution state + */ + addEvent(event: ProcessedEvents): void { + this._events.push(event); + } + + /** + * Add multiple events + */ + addEvents(events: ProcessedEvents[]): void { + this._events.push(...events); + } + + /** + * Mark execution as completed + */ + complete(): void { + if (this._isRunning) { + this._isRunning = false; + this._endTime = Date.now(); + } + } + + /** + * Mark execution as failed + */ + fail(error: Error): void { + if (this._isRunning) { + this._isRunning = false; + this._endTime = Date.now(); + this._error = error; + } + } + + /** + * Abort the execution + */ + abort(): void { + if (this._isRunning) { + this._abortController.abort(); + this._isRunning = false; + this._endTime = Date.now(); + } + } + + /** + * Get execution statistics + */ + getStats(): { + duration: number; + eventCount: number; + isRunning: boolean; + hasError: boolean; + } { + return { + duration: this.duration, + eventCount: this._events.length, + isRunning: this._isRunning, + hasError: !!this._error, + }; + } + + /** + * Clear events (useful for memory management) + */ + clearEvents(): void { + this._events = []; + } + + /** + * Get the last N events + */ + getLastEvents(count: number): ProcessedEvents[] { + return this._events.slice(-count); + } + + /** + * Check if execution has been aborted + */ + isAborted(): boolean { + return this._abortController.signal.aborted; + } +} + +/** + * ExecutionStateManager manages multiple execution states + */ +export class ExecutionStateManager { + private executions: Map = new Map(); + private readonly maxExecutions: number; + + constructor(maxExecutions: number = 100) { + this.maxExecutions = maxExecutions; + } + + /** + * Create a new execution state + */ + createExecution(id: string, sessionId: string): ExecutionState { + const execution = new ExecutionState(id, sessionId); + this.executions.set(id, execution); + + // Clean up old executions if we exceed the limit + if (this.executions.size > this.maxExecutions) { + this.cleanupOldExecutions(); + } + + return execution; + } + + /** + * Get an execution state by ID + */ + getExecution(id: string): ExecutionState | undefined { + return this.executions.get(id); + } + + /** + * Check if an execution exists + */ + hasExecution(id: string): boolean { + return this.executions.has(id); + } + + /** + * Delete an execution state + */ + deleteExecution(id: string): boolean { + return this.executions.delete(id); + } + + /** + * Get all executions for a session + */ + getSessionExecutions(sessionId: string): ExecutionState[] { + const executions: ExecutionState[] = []; + for (const execution of this.executions.values()) { + if (execution.sessionId === sessionId) { + executions.push(execution); + } + } + return executions; + } + + /** + * Get running executions + */ + getRunningExecutions(): ExecutionState[] { + const running: ExecutionState[] = []; + for (const execution of this.executions.values()) { + if (execution.isRunning) { + running.push(execution); + } + } + return running; + } + + /** + * Get completed executions + */ + getCompletedExecutions(): ExecutionState[] { + const completed: ExecutionState[] = []; + for (const execution of this.executions.values()) { + if (!execution.isRunning) { + completed.push(execution); + } + } + return completed; + } + + /** + * Abort all running executions for a session + */ + abortSessionExecutions(sessionId: string): void { + const sessionExecutions = this.getSessionExecutions(sessionId); + for (const execution of sessionExecutions) { + if (execution.isRunning) { + execution.abort(); + } + } + } + + /** + * Clean up old completed executions + */ + private cleanupOldExecutions(): void { + const completed = this.getCompletedExecutions(); + + // Sort by end time (oldest first) + completed.sort((a, b) => { + const aTime = a.endTime || a.startTime; + const bTime = b.endTime || b.startTime; + return aTime - bTime; + }); + + // Remove the oldest executions + const toRemove = Math.max(0, this.executions.size - this.maxExecutions); + for (let i = 0; i < toRemove && i < completed.length; i++) { + this.executions.delete(completed[i].id); + } + } + + /** + * Clear all executions + */ + clearAll(): void { + this.executions.clear(); + } + + /** + * Get total execution count + */ + getExecutionCount(): number { + return this.executions.size; + } + + /** + * Get execution statistics + */ + getStats(): { + total: number; + running: number; + completed: number; + failed: number; + } { + let running = 0; + let completed = 0; + let failed = 0; + + for (const execution of this.executions.values()) { + if (execution.isRunning) { + running++; + } else if (execution.error) { + failed++; + } else { + completed++; + } + } + + return { + total: this.executions.size, + running, + completed, + failed, + }; + } +} + diff --git a/integrations/claude-agent-sdk/typescript/src/index.ts b/integrations/claude-agent-sdk/typescript/src/index.ts new file mode 100644 index 000000000..ab4080b9d --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/index.ts @@ -0,0 +1,96 @@ +/** + * Claude Agent SDK integration with AG-UI Protocol + * + * This package provides a bridge between Claude Agent SDK and the AG-UI Protocol, + * enabling Claude agents to work seamlessly with AG-UI applications. + * + * @example + * ```typescript + * import { ClaudeAgent } from '@ag-ui/claude'; + * + * const agent = new ClaudeAgent({ + * apiKey: process.env.ANTHROPIC_API_KEY, + * enablePersistentSessions: true + * }); + * + * agent.run(input).subscribe({ + * next: (event) => console.log(event), + * error: (error) => console.error(error), + * complete: () => console.log('Done') + * }); + * ``` + */ + +// Main agent class +export { ClaudeAgent } from './agent'; + +// Session management +export { SessionManager } from './session-manager'; + +// Event translation +export { EventTranslator } from './event-translator'; + +// Tool adaptation +export { ToolAdapter } from './tool-adapter'; + +// Execution state management +export { ExecutionState, ExecutionStateManager } from './execution-state'; + +// Utility functions +export { + convertAgUiMessagesToPrompt, + convertAgUiMessageToClaude, + convertAgUiMessagesToClaude, + extractMessageContent, + hasToolResults, + extractToolResults, + generateRunId, + generateMessageId, + safeJsonParse, + safeJsonStringify, + isToolResultSubmission, + formatErrorMessage, + truncateText, + mergeTextBlocks, +} from './utils/converters'; + +// Type exports +export type { + ClaudeAgentConfig, + ProcessedEvents, + Session, + ClaudeSDKClient, + Options, + Query, + SDKMessage, + SDKAssistantMessage, + SDKUserMessage, + SDKSystemMessage, + SDKResultMessage, + SDKPartialAssistantMessage, + SDKCompactBoundaryMessage, + SDKPermissionDenial, + ContentBlock, + TextBlock, + ToolUseBlock, + ToolResultBlock, + ThinkingBlock, + SdkMcpToolDefinition, + CallToolResult, + McpSdkServerConfigWithInstance, + ExecutionState as ExecutionStateType, + ToolExecutionContext, + ConvertedMessage, +} from './types'; + +// Re-export type guards +export { + isAssistantMessage, + isResultMessage, + isTextBlock, + isToolUseBlock, + isToolResultBlock, + isThinkingBlock, + hasContentProperty, +} from './types'; + diff --git a/integrations/claude-agent-sdk/typescript/src/session-manager.ts b/integrations/claude-agent-sdk/typescript/src/session-manager.ts new file mode 100644 index 000000000..339cd94cb --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/session-manager.ts @@ -0,0 +1,299 @@ +/** + * Session manager: Manages agent sessions and state + */ + +import type { Message } from '@ag-ui/client'; +import type { Session, ClaudeSDKClient } from './types'; + +const DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes +const CLEANUP_INTERVAL = 5 * 60 * 1000; // 5 minutes + +/** + * SessionManager handles session lifecycle, message tracking, and state management + * Implements singleton pattern for centralized session control + */ +export class SessionManager { + private static instance: SessionManager | null = null; + private sessions: Map = new Map(); + private cleanupInterval: ReturnType | null = null; + private sessionTimeout: number; + + private constructor(sessionTimeout: number = DEFAULT_SESSION_TIMEOUT) { + this.sessionTimeout = sessionTimeout; + this.startCleanupInterval(); + } + + /** + * Get the singleton instance + */ + static getInstance(sessionTimeout?: number): SessionManager { + if (!SessionManager.instance) { + SessionManager.instance = new SessionManager(sessionTimeout); + } + return SessionManager.instance; + } + + /** + * Reset the singleton instance (useful for testing) + */ + static resetInstance(): void { + if (SessionManager.instance) { + SessionManager.instance.stopCleanupInterval(); + SessionManager.instance = null; + } + } + + /** + * Get or create a session + */ + getSession(sessionId: string, userId?: string): Session { + let session = this.sessions.get(sessionId); + + if (!session) { + session = { + id: sessionId, + userId, + processedMessageIds: new Set(), + state: {}, + createdAt: Date.now(), + lastAccessedAt: Date.now(), + }; + this.sessions.set(sessionId, session); + } else { + // Update last accessed time + session.lastAccessedAt = Date.now(); + } + + return session; + } + + /** + * Check if a session exists + */ + hasSession(sessionId: string): boolean { + return this.sessions.has(sessionId); + } + + /** + * Delete a session + */ + deleteSession(sessionId: string): boolean { + const session = this.sessions.get(sessionId); + if (session?.client) { + // Close the Claude SDK client if it exists + session.client.close().catch((error) => { + console.error(`Error closing Claude SDK client for session ${sessionId}:`, error); + }); + } + return this.sessions.delete(sessionId); + } + + /** + * Track a processed message + */ + trackMessage(sessionId: string, messageId: string): void { + const session = this.sessions.get(sessionId); + if (session) { + session.processedMessageIds.add(messageId); + session.lastAccessedAt = Date.now(); + } + } + + /** + * Check if a message has been processed + */ + isMessageProcessed(sessionId: string, messageId: string): boolean { + const session = this.sessions.get(sessionId); + return session ? session.processedMessageIds.has(messageId) : false; + } + + /** + * Get unseen messages (messages not yet processed) + */ + getUnseenMessages(sessionId: string, messages: Message[]): Message[] { + const session = this.sessions.get(sessionId); + if (!session) { + return messages; + } + + return messages.filter((msg) => { + const msgId = msg.id || `${msg.role}_${msg.content}`; + return !session.processedMessageIds.has(msgId); + }); + } + + /** + * Mark messages as processed + */ + markMessagesAsProcessed(sessionId: string, messages: Message[]): void { + const session = this.sessions.get(sessionId); + if (session) { + for (const msg of messages) { + const msgId = msg.id || `${msg.role}_${msg.content}`; + session.processedMessageIds.add(msgId); + } + session.lastAccessedAt = Date.now(); + } + } + + /** + * Get state value from session + */ + getStateValue(sessionId: string, key: string): any { + const session = this.sessions.get(sessionId); + return session?.state[key]; + } + + /** + * Set state value in session + */ + setStateValue(sessionId: string, key: string, value: any): void { + const session = this.sessions.get(sessionId); + if (session) { + session.state[key] = value; + session.lastAccessedAt = Date.now(); + } + } + + /** + * Remove state keys from session + */ + removeStateKeys(sessionId: string, keys: string[]): void { + const session = this.sessions.get(sessionId); + if (session) { + for (const key of keys) { + delete session.state[key]; + } + session.lastAccessedAt = Date.now(); + } + } + + /** + * Clear all state for a session + */ + clearSessionState(sessionId: string): void { + const session = this.sessions.get(sessionId); + if (session) { + session.state = {}; + session.lastAccessedAt = Date.now(); + } + } + + /** + * Set Claude SDK client for a session + */ + setClient(sessionId: string, client: ClaudeSDKClient): void { + const session = this.sessions.get(sessionId); + if (session) { + session.client = client; + session.lastAccessedAt = Date.now(); + } + } + + /** + * Get Claude SDK client for a session + */ + getClient(sessionId: string): ClaudeSDKClient | undefined { + const session = this.sessions.get(sessionId); + return session?.client; + } + + /** + * Get total number of sessions + */ + getSessionCount(): number { + return this.sessions.size; + } + + /** + * Get number of sessions for a specific user + */ + getUserSessionCount(userId: string): number { + let count = 0; + for (const session of this.sessions.values()) { + if (session.userId === userId) { + count++; + } + } + return count; + } + + /** + * Get all session IDs + */ + getAllSessionIds(): string[] { + return Array.from(this.sessions.keys()); + } + + /** + * Get all sessions for a specific user + */ + getUserSessions(userId: string): Session[] { + const userSessions: Session[] = []; + for (const session of this.sessions.values()) { + if (session.userId === userId) { + userSessions.push(session); + } + } + return userSessions; + } + + /** + * Clean up stale sessions + */ + private cleanupStaleSessions(): void { + const now = Date.now(); + const sessionsToDelete: string[] = []; + + for (const [sessionId, session] of this.sessions.entries()) { + if (now - session.lastAccessedAt > this.sessionTimeout) { + sessionsToDelete.push(sessionId); + } + } + + for (const sessionId of sessionsToDelete) { + this.deleteSession(sessionId); + } + + if (sessionsToDelete.length > 0) { + console.log(`Cleaned up ${sessionsToDelete.length} stale sessions`); + } + } + + /** + * Start the cleanup interval + */ + private startCleanupInterval(): void { + if (!this.cleanupInterval) { + this.cleanupInterval = setInterval(() => { + this.cleanupStaleSessions(); + }, CLEANUP_INTERVAL); + + // Don't keep the process alive just for this interval + if (typeof (this.cleanupInterval as any).unref === 'function') { + (this.cleanupInterval as any).unref(); + } + } + } + + /** + * Stop the cleanup interval + */ + private stopCleanupInterval(): void { + if (this.cleanupInterval) { + clearInterval(this.cleanupInterval); + this.cleanupInterval = null; + } + } + + /** + * Clear all sessions (useful for testing) + */ + clearAllSessions(): void { + for (const sessionId of this.sessions.keys()) { + this.deleteSession(sessionId); + } + this.sessions.clear(); + } +} + diff --git a/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts b/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts new file mode 100644 index 000000000..2e660830c --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts @@ -0,0 +1,243 @@ +/** + * Tool adapter: Converts AG-UI tools to Claude SDK format + */ + +import { z } from 'zod'; +import type { Tool } from '@ag-ui/client'; +import type { + SdkMcpToolDefinition, + McpSdkServerConfigWithInstance, + CallToolResult, +} from './types'; + +/** + * ToolAdapter handles conversion of AG-UI tools to Claude SDK format + */ +export class ToolAdapter { + /** + * Convert AG-UI tools to Claude SDK MCP tool definitions + */ + static convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[] { + return tools.map((tool) => this.convertSingleTool(tool)); + } + + /** + * Convert a single AG-UI tool to Claude SDK format + */ + private static convertSingleTool(tool: Tool): SdkMcpToolDefinition { + const zodSchema = this.convertJsonSchemaToZod(tool.parameters || {}); + + return { + name: tool.name, + description: tool.description || '', + inputSchema: zodSchema, + handler: async (args: any) => { + // For client tools, we mark them as long-running + // The actual execution will be handled by the client + if (tool.client) { + return { + content: [ + { + type: 'text', + text: JSON.stringify({ + toolName: tool.name, + args, + isClientTool: true, + isLongRunning: true, + }), + }, + ], + }; + } + + // For backend tools, if there's a handler, execute it + if (tool.handler) { + try { + const result = await tool.handler(args); + return { + content: [ + { + type: 'text', + text: typeof result === 'string' ? result : JSON.stringify(result), + }, + ], + }; + } catch (error: any) { + return { + content: [ + { + type: 'text', + text: error.message || 'Tool execution failed', + }, + ], + isError: true, + }; + } + } + + // Default response for tools without handlers + return { + content: [ + { + type: 'text', + text: 'Tool executed (no handler)', + }, + ], + }; + }, + }; + } + + /** + * Convert JSON Schema to Zod schema + */ + private static convertJsonSchemaToZod(jsonSchema: any): z.ZodTypeAny { + if (!jsonSchema || typeof jsonSchema !== 'object') { + return z.object({}); + } + + const properties = jsonSchema.properties || {}; + const required = jsonSchema.required || []; + + const zodShape: Record = {}; + + for (const [key, prop] of Object.entries(properties)) { + const propSchema = prop as any; + let zodType = this.convertJsonSchemaTypeToZod(propSchema); + + // Make optional if not in required array + if (!required.includes(key)) { + zodType = zodType.optional(); + } + + zodShape[key] = zodType; + } + + return z.object(zodShape); + } + + /** + * Convert a single JSON Schema type to Zod type + */ + private static convertJsonSchemaTypeToZod(schema: any): z.ZodTypeAny { + const type = schema.type; + + switch (type) { + case 'string': + if (schema.enum) { + return z.enum(schema.enum as [string, ...string[]]); + } + return z.string(); + + case 'number': + case 'integer': + let numType = type === 'integer' ? z.number().int() : z.number(); + if (schema.minimum !== undefined) { + numType = numType.min(schema.minimum); + } + if (schema.maximum !== undefined) { + numType = numType.max(schema.maximum); + } + return numType; + + case 'boolean': + return z.boolean(); + + case 'array': + if (schema.items) { + const itemType = this.convertJsonSchemaTypeToZod(schema.items); + return z.array(itemType); + } + return z.array(z.any()); + + case 'object': + if (schema.properties) { + return this.convertJsonSchemaToZod(schema); + } + return z.record(z.any()); + + case 'null': + return z.null(); + + default: + // For any other type or if type is not specified + return z.any(); + } + } + + /** + * Create an MCP server configuration for AG-UI tools + */ + static createMcpServerForTools(tools: Tool[]): McpSdkServerConfigWithInstance { + const sdkTools = this.convertAgUiToolsToSdk(tools); + + return { + name: 'ag_ui_tools', + version: '1.0.0', + tools: sdkTools, + }; + } + + /** + * Extract tool calls from Claude SDK response + */ + static extractToolCalls(message: any): Array<{ + id: string; + name: string; + input: Record; + }> { + if (!message.content || !Array.isArray(message.content)) { + return []; + } + + return message.content + .filter((block: any) => block.type === 'tool_use') + .map((block: any) => ({ + id: block.id, + name: block.name, + input: block.input, + })); + } + + /** + * Check if a tool is a long-running client tool + */ + static isClientTool(toolName: string, tools: Tool[]): boolean { + const tool = tools.find((t) => t.name === toolName); + return tool?.client === true; + } + + /** + * Check if a tool is marked as long-running + */ + static isLongRunningTool(toolName: string, tools: Tool[]): boolean { + const tool = tools.find((t) => t.name === toolName); + return tool?.client === true || tool?.longRunning === true; + } + + /** + * Format tool names for Claude SDK (with MCP server prefix) + */ + static formatToolNameForSdk(toolName: string, serverName: string = 'ag_ui_tools'): string { + return `mcp__${serverName}__${toolName}`; + } + + /** + * Parse tool name from SDK format (remove MCP server prefix) + */ + static parseToolNameFromSdk(sdkToolName: string): string { + const parts = sdkToolName.split('__'); + if (parts.length >= 3 && parts[0] === 'mcp') { + return parts.slice(2).join('__'); + } + return sdkToolName; + } + + /** + * Get allowed tools list for SDK options + */ + static getAllowedToolsList(tools: Tool[], serverName: string = 'ag_ui_tools'): string[] { + return tools.map((tool) => this.formatToolNameForSdk(tool.name, serverName)); + } +} + diff --git a/integrations/claude-agent-sdk/typescript/src/types.ts b/integrations/claude-agent-sdk/typescript/src/types.ts new file mode 100644 index 000000000..1e8c51e10 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/types.ts @@ -0,0 +1,236 @@ +/** + * Type definitions for Claude Agent SDK integration with AG-UI Protocol + */ + +import type { + TextMessageStartEvent, + TextMessageContentEvent, + TextMessageEndEvent, + ToolCallStartEvent, + ToolCallArgsEvent, + ToolCallEndEvent, + ToolCallResultEvent, + RunStartedEvent, + RunFinishedEvent, + RunErrorEvent, + StepStartedEvent, + StepFinishedEvent, + AgentConfig, + Tool, + Message, +} from '@ag-ui/client'; + +// Re-export Claude SDK types (will be imported from the actual SDK) +// These are placeholder interfaces based on the SDK documentation +export interface ClaudeSDKClient { + query(prompt: string): Promise; + receiveResponse(): AsyncIterableIterator; + close(): Promise; +} + +export interface Options { + apiKey?: string; + baseUrl?: string; + mcpServers?: Record; + allowedTools?: string[]; + permissionMode?: 'ask' | 'auto' | 'none'; + [key: string]: any; +} + +export interface Query { + next(): Promise>; + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +// SDK Message types based on documentation +export type SDKMessage = + | SDKAssistantMessage + | SDKUserMessage + | SDKSystemMessage + | SDKResultMessage + | SDKPartialAssistantMessage + | SDKCompactBoundaryMessage + | SDKPermissionDenial; + +export interface SDKAssistantMessage { + type: 'assistant'; + content: ContentBlock[]; + id?: string; +} + +export interface SDKUserMessage { + type: 'user'; + content: string; + id?: string; +} + +export interface SDKSystemMessage { + type: 'system'; + content: string; +} + +export interface SDKResultMessage { + type: 'result'; + subtype: 'success' | 'error'; + error?: { + type: string; + message: string; + }; +} + +export interface SDKPartialAssistantMessage { + type: 'partial_assistant'; + content: ContentBlock[]; +} + +export interface SDKCompactBoundaryMessage { + type: 'compact_boundary'; +} + +export interface SDKPermissionDenial { + type: 'permission_denial'; + tool: string; + reason: string; +} + +// Content block types +export type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ThinkingBlock; + +export interface TextBlock { + type: 'text'; + text: string; +} + +export interface ToolUseBlock { + type: 'tool_use'; + id: string; + name: string; + input: Record; +} + +export interface ToolResultBlock { + type: 'tool_result'; + tool_use_id: string; + content: string | Array<{ type: string; [key: string]: any }>; + is_error?: boolean; +} + +export interface ThinkingBlock { + type: 'thinking'; + thinking: string; +} + +// Tool definition types +export interface SdkMcpToolDefinition { + name: string; + description: string; + inputSchema: Schema; + handler: (args: any, extra?: any) => Promise; +} + +export interface CallToolResult { + content: Array<{ + type: 'text' | 'image' | 'resource'; + text?: string; + data?: string; + mimeType?: string; + [key: string]: any; + }>; + isError?: boolean; +} + +export interface McpSdkServerConfigWithInstance { + name: string; + version?: string; + tools?: Array>; +} + +// AG-UI Integration types +export type ProcessedEvents = + | TextMessageStartEvent + | TextMessageContentEvent + | TextMessageEndEvent + | ToolCallStartEvent + | ToolCallArgsEvent + | ToolCallEndEvent + | ToolCallResultEvent + | RunStartedEvent + | RunFinishedEvent + | RunErrorEvent + | StepStartedEvent + | StepFinishedEvent; + +// Session management types +export interface Session { + id: string; + userId?: string; + client?: ClaudeSDKClient; + processedMessageIds: Set; + state: Record; + createdAt: number; + lastAccessedAt: number; +} + +// Agent configuration +export interface ClaudeAgentConfig extends AgentConfig { + apiKey?: string; + baseUrl?: string; + sessionTimeout?: number; + enablePersistentSessions?: boolean; + permissionMode?: 'ask' | 'auto' | 'none'; + mcpServers?: Record; +} + +// Execution state types +export interface ExecutionState { + id: string; + sessionId: string; + isRunning: boolean; + startTime: number; + events: ProcessedEvents[]; + error?: Error; +} + +// Helper type guards +export function isAssistantMessage(message: SDKMessage): message is SDKAssistantMessage { + return message.type === 'assistant'; +} + +export function isResultMessage(message: SDKMessage): message is SDKResultMessage { + return message.type === 'result'; +} + +export function isTextBlock(block: ContentBlock): block is TextBlock { + return block.type === 'text'; +} + +export function isToolUseBlock(block: ContentBlock): block is ToolUseBlock { + return block.type === 'tool_use'; +} + +export function isToolResultBlock(block: ContentBlock): block is ToolResultBlock { + return block.type === 'tool_result'; +} + +export function isThinkingBlock(block: ContentBlock): block is ThinkingBlock { + return block.type === 'thinking'; +} + +export function hasContentProperty(message: SDKMessage): message is SDKAssistantMessage | SDKPartialAssistantMessage { + return 'content' in message && Array.isArray(message.content); +} + +// Tool execution types +export interface ToolExecutionContext { + toolName: string; + toolCallId: string; + isClientTool: boolean; + isLongRunning: boolean; +} + +// Message conversion types +export interface ConvertedMessage { + role: 'user' | 'assistant' | 'system'; + content: string | Array<{ type: string; [key: string]: any }>; +} + diff --git a/integrations/claude-agent-sdk/typescript/src/utils/converters.ts b/integrations/claude-agent-sdk/typescript/src/utils/converters.ts new file mode 100644 index 000000000..ba66d7913 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/src/utils/converters.ts @@ -0,0 +1,201 @@ +/** + * Message format converters + */ + +import type { Message } from '@ag-ui/client'; +import type { ConvertedMessage } from '../types'; + +/** + * Convert AG-UI messages to a format suitable for Claude SDK + */ +export function convertAgUiMessagesToPrompt(messages: Message[]): string { + // For Claude SDK, we typically extract the last user message as the prompt + // The SDK maintains conversation history internally (in persistent mode) + + // Find the last user message + for (let i = messages.length - 1; i >= 0; i--) { + const msg = messages[i]; + if (msg.role === 'user') { + return extractMessageContent(msg); + } + } + + // If no user message found, return a default prompt + return 'Hello'; +} + +/** + * Extract text content from a message + */ +export function extractMessageContent(message: Message): string { + if (typeof message.content === 'string') { + return message.content; + } + + if (Array.isArray(message.content)) { + return message.content + .map((block: any) => { + if (typeof block === 'string') { + return block; + } + if (block.type === 'text') { + return block.text || ''; + } + // For other types (image, file, etc.), we might need special handling + return ''; + }) + .filter(Boolean) + .join('\n'); + } + + return String(message.content); +} + +/** + * Convert AG-UI message to Claude message format + */ +export function convertAgUiMessageToClaude(message: Message): ConvertedMessage { + const role = message.role as 'user' | 'assistant' | 'system'; + const content = extractMessageContent(message); + + return { + role, + content, + }; +} + +/** + * Convert multiple AG-UI messages to Claude format + */ +export function convertAgUiMessagesToClaude(messages: Message[]): ConvertedMessage[] { + return messages.map(convertAgUiMessageToClaude); +} + +/** + * Check if messages contain tool results + */ +export function hasToolResults(messages: Message[]): boolean { + return messages.some((msg) => { + if (typeof msg.content === 'string') { + return false; + } + if (Array.isArray(msg.content)) { + return msg.content.some((block: any) => { + return typeof block === 'object' && block.type === 'tool_result'; + }); + } + return false; + }); +} + +/** + * Extract tool results from messages + */ +export function extractToolResults(messages: Message[]): Array<{ + toolCallId: string; + result: string; +}> { + const results: Array<{ toolCallId: string; result: string }> = []; + + for (const msg of messages) { + if (typeof msg.content === 'string') { + continue; + } + + if (Array.isArray(msg.content)) { + for (const block of msg.content as any[]) { + if (typeof block === 'object' && block.type === 'tool_result') { + results.push({ + toolCallId: (block as any).toolCallId || (block as any).tool_use_id || '', + result: (block as any).result || (block as any).content || '', + }); + } + } + } + } + + return results; +} + +/** + * Generate a unique run ID + */ +export function generateRunId(): string { + return `run_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; +} + +/** + * Generate a unique message ID + */ +export function generateMessageId(prefix: string = 'msg'): string { + return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; +} + +/** + * Safely parse JSON string + */ +export function safeJsonParse(json: string, defaultValue: any = null): any { + try { + return JSON.parse(json); + } catch { + return defaultValue; + } +} + +/** + * Safely stringify JSON + */ +export function safeJsonStringify(obj: any, defaultValue: string = '{}'): string { + try { + return JSON.stringify(obj); + } catch { + return defaultValue; + } +} + +/** + * Check if a message is a tool result submission + */ +export function isToolResultSubmission(messages: Message[]): boolean { + // Check if the last message contains tool results + if (messages.length === 0) { + return false; + } + + const lastMessage = messages[messages.length - 1]; + return hasToolResults([lastMessage]); +} + +/** + * Format error message for display + */ +export function formatErrorMessage(error: any): string { + if (error instanceof Error) { + return error.message; + } + if (typeof error === 'string') { + return error; + } + return 'An unknown error occurred'; +} + +/** + * Truncate text to a maximum length + */ +export function truncateText(text: string, maxLength: number = 1000): string { + if (text.length <= maxLength) { + return text; + } + return text.slice(0, maxLength) + '...'; +} + +/** + * Merge consecutive text blocks + */ +export function mergeTextBlocks(blocks: Array<{ type: string; text?: string }>): string { + return blocks + .filter((block: any) => block.type === 'text' && block.text) + .map((block: any) => block.text) + .join(''); +} + diff --git a/integrations/claude-agent-sdk/typescript/tsconfig.json b/integrations/claude-agent-sdk/typescript/tsconfig.json new file mode 100644 index 000000000..051745ce9 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es2017", + "module": "esnext", + "lib": ["dom", "dom.iterable", "esnext"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "moduleResolution": "node", + "skipLibCheck": true, + "strict": true, + "jsx": "react-jsx", + "esModuleInterop": true, + "resolveJsonModule": true, + "isolatedModules": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "stripInternal": true + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "__tests__"] +} + diff --git a/integrations/claude-agent-sdk/typescript/tsup.config.ts b/integrations/claude-agent-sdk/typescript/tsup.config.ts new file mode 100644 index 000000000..a6809a760 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/tsup.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: { + index: 'src/index.ts', + }, + dts: true, + format: ['cjs', 'esm'], + splitting: false, + sourcemap: true, + clean: true, + external: ['@ag-ui/core', '@ag-ui/client', '@anthropic-ai/claude-agent-sdk'], +}); + From a3c0fe1526eeb1106457a65bf7cb77ed4b85e3fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathan=20=F0=9F=94=B6=20Tarbert?= <66887028+NathanTarbert@users.noreply.github.com> Date: Fri, 7 Nov 2025 09:04:25 -0800 Subject: [PATCH 11/18] chore(docs): Add the frameworks, protocols, and clients section in the introduction (#617) * update the docs and add the frameworks, protocols, and clients * adjust framework titles & header styling * Change the title of frameworks to integrations, add links to demos --------- Co-authored-by: John Rae-Grant --- docs/introduction.mdx | 82 +++++++++++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 19 deletions(-) diff --git a/docs/introduction.mdx b/docs/introduction.mdx index 19f2539bd..ac5bf82e1 100644 --- a/docs/introduction.mdx +++ b/docs/introduction.mdx @@ -232,25 +232,69 @@ You can see demo apps of the AG-UI features with the framework of your choice, w --- -## Supported Frameworks - -AG-UI was born from an initial partnership between CopilotKit, LangGraph and CrewAI - and is steadily gaining integrations across the wider AI developer ecosystem. - -| Framework | Docs | Demos | -| :----------------------- | :--- | :---- | -| [LangGraph](https://www.langchain.com/langgraph) | [Documentation](https://docs.copilotkit.ai/langgraph/) | [Live Demo](https://dojo.ag-ui.com/langgraph-fastapi/feature/shared_state) | -| [Mastra](https://mastra.ai/) | [Documentation](https://docs.copilotkit.ai/mastra/) | [Live Demo](https://dojo.ag-ui.com/mastra) | -| [Pydantic AI](https://github.com/pydantic/pydantic-ai) | [Documentation](https://docs.copilotkit.ai/pydantic-ai/) | [Live Demo](https://dojo.ag-ui.com/pydantic-ai/feature/shared_state) | -| [Google ADK](https://google.github.io/adk-docs/get-started/) | [Documentation](https://docs.copilotkit.ai/adk) | [Live Demo](https://dojo.ag-ui.com/adk-middleware) | -| [Agno](https://github.com/agno-agi/agno) | [Documentation](https://docs.copilotkit.ai/agno/) | [Live Demo](https://dojo.ag-ui.com/agno) | -| [LlamaIndex](https://github.com/run-llama/llama_index) | [Documentation](https://docs.copilotkit.ai/llamaindex/) | [Live Demo](https://dojo.ag-ui.com/llamaindex/feature/shared_state) | -| [CrewAI](https://crewai.com/) | [Documentation](https://docs.copilotkit.ai/crewai-flows) | [Live Demo](https://dojo.ag-ui.com/crewai/feature/shared_state) | -| [AG2](https://ag2.ai/) | [Documentation](https://docs.copilotkit.ai/ag2/) | Coming Soon | -| [AWS Bedrock Agents](https://aws.amazon.com/bedrock/agents/) | In Progress | Coming Soon | -| [AWS Strands Agents](https://github.com/strands-agents/sdk-python) | In Progress | Coming Soon | -| [Vercel AI SDK](https://github.com/vercel/ai) | In Progress | Coming Soon | -| [OpenAI Agent SDK](https://openai.github.io/openai-agents-python/) | In Progress | Coming Soon | -| [Cloudflare Agents](https://developers.cloudflare.com/agents/) | Open to Contributions | Coming Soon | +## Supported Integrations + +AG-UI was born from CopilotKit's initial partnership with LangGraph and CrewAI - and brings the incredibly popular agent-user-interactivity infrastructure to the wider agentic ecosystem. + +#### Direct to LLM + +| Framework | Status | AG-UI Resources | +| :-------- | ------ | --------------- | +| Direct to LLM | Supported | [Docs](https://docs.copilotkit.ai/direct-to-llm) | + +#### Agent Framework - Partnerships +| Framework | Status | AG-UI Resources | +| :-------- | ------ | --------------- | +| [LangGraph](https://www.langchain.com/langgraph) | Supported | [Docs](https://docs.copilotkit.ai/langgraph/), [Demos](https://dojo.ag-ui.com/langgraph-fastapi/feature/shared_state) | +| [Google ADK](https://google.github.io/adk-docs/get-started/) | Supported | [Docs](https://docs.copilotkit.ai/adk), [Demos](https://dojo.ag-ui.com/adk-middleware/feature/shared_state?openCopilot=true) | +| [CrewAI](https://crewai.com/) | Supported | [Docs](https://docs.copilotkit.ai/crewai-flows), [Demos](https://dojo.ag-ui.com/crewai/feature/shared_state) | + +#### Agent Framework - 1st Party +| Framework | Status | AG-UI Resources | +| :-------- | ------ | --------------- | +| [Mastra](https://mastra.ai/) | Supported | [Docs](https://docs.copilotkit.ai/mastra/), [Demos](https://dojo.ag-ui.com/mastra/feature/tool_based_generative_ui) | +| [Pydantic AI](https://github.com/pydantic/pydantic-ai) | Supported | [Docs](https://docs.copilotkit.ai/pydantic-ai/), [Demos](https://dojo.ag-ui.com/pydantic-ai/feature/shared_state) | +| [Agno](https://github.com/agno-agi/agno) | Supported | [Docs](https://docs.copilotkit.ai/agno/), [Demos](https://dojo.ag-ui.com/agno/feature/tool_based_generative_ui) | +| [LlamaIndex](https://github.com/run-llama/llama_index) | Supported | [Docs](https://docs.copilotkit.ai/llamaindex/), [Demos](https://dojo.ag-ui.com/llamaindex/feature/shared_state) | +| [AG2](https://ag2.ai/) | Supported | [Docs](https://docs.copilotkit.ai/ag2/) | +| [AWS Bedrock Agents](https://aws.amazon.com/bedrock/agents/) | In Progress | – | +| [AWS Strands Agents](https://github.com/strands-agents/sdk-python) | In Progress | – | +| [Microsoft Agent Framework](https://azure.microsoft.com/en-us/blog/introducing-microsoft-agent-framework/) | In Progress | – | + +#### Agent Framework - Community +| Framework | Status | AG-UI Resources | +| :-------- | ------ | --------------- | +| [Vercel AI SDK](https://github.com/vercel/ai) | Supported | [Docs](https://github.com/ag-ui-protocol/ag-ui/tree/main/integrations/vercel-ai-sdk/typescript) | +| [OpenAI Agent SDK](https://openai.github.io/openai-agents-python/) | In Progress | – | +| [Cloudflare Agents](https://developers.cloudflare.com/agents/) | In Progress | – | + +### Agent Interaction Protocols + +| Protocol | Status | AG-UI Resources | Integrations | +| :------- | ------ | --------------- | ------------ | +| [A2A Middleware](https://a2a.org/) | Supported | [Docs](https://docs.copilotkit.ai/a2a-protocol) | Partnership | + +### SDKs + +| SDK | Status | AG-UI Resources | Integrations | +| :-- | ------- | ---------------- | ------------- | +| [Kotlin]() | Supported | [Getting Started](https://github.com/ag-ui-protocol/ag-ui/blob/main/docs/sdk/kotlin/overview.mdx) | Community | +| [Golang]() | Supported | [Getting Started](https://github.com/ag-ui-protocol/ag-ui/blob/main/docs/sdk/go/overview.mdx) | Community | +| [Java]() | Supported | [Getting Started](https://github.com/ag-ui-protocol/ag-ui/blob/main/docs/sdk/java/overview.mdx) | Community | +| [Rust]() | Supported | [Getting Started](https://github.com/ag-ui-protocol/ag-ui/tree/main/sdks/community/rust/crates/ag-ui-client) | Community | +| [.NET]() | In Progress | [PR](https://github.com/ag-ui-protocol/ag-ui/pull/38) | Community | +| [Nim]() | In Progress | [PR](https://github.com/ag-ui-protocol/ag-ui/pull/29) | Community | +| [Dart]() | In Progress | [PR](https://github.com/ag-ui-protocol/ag-ui/pull/432) | Community | +| [Flowise]() | In Progress | [GitHub Source](https://github.com/ag-ui-protocol/ag-ui/issues/367) | Community | +| [Langflow]() | In Progress | [GitHub Source](https://github.com/ag-ui-protocol/ag-ui/issues/366) | Community | + +### Clients + +| Client | Status | AG-UI Resources | Integrations | +| :----- | ------ | --------------- | ------------ | +| [CopilotKit](https://github.com/CopilotKit/CopilotKit) | Supported | [Getting Started](https://docs.copilotkit.ai/direct-to-llm/guides/quickstart) | 1st Party | +| [Terminal + Agent]() | Supported | [Getting Started](https://docs.ag-ui.com/quickstart/clients) | Community | +| [React Native](https://reactnative.dev/) | Help Wanted | [GitHub Source](https://github.com/ag-ui-protocol/ag-ui/issues/510) | Community | --- From e7df7c603389cb8d0b6da7408987c8dc1ef277ee Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Sat, 8 Nov 2025 21:43:59 +0800 Subject: [PATCH 12/18] fix: fix claude code agent sdk protocal transform error --- apps/dojo/e2e/pnpm-lock.yaml | 1783 -- docs/pnpm-lock.yaml | 8029 ------ .../typescript/examples/pnpm-lock.yaml | 393 - pnpm-lock.yaml | 22346 ---------------- 4 files changed, 32551 deletions(-) delete mode 100644 apps/dojo/e2e/pnpm-lock.yaml delete mode 100644 docs/pnpm-lock.yaml delete mode 100644 integrations/langgraph/typescript/examples/pnpm-lock.yaml delete mode 100644 pnpm-lock.yaml diff --git a/apps/dojo/e2e/pnpm-lock.yaml b/apps/dojo/e2e/pnpm-lock.yaml deleted file mode 100644 index 25fa39ba2..000000000 --- a/apps/dojo/e2e/pnpm-lock.yaml +++ /dev/null @@ -1,1783 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@aws-sdk/client-s3': - specifier: ^3.600.0 - version: 3.840.0 - json2md: - specifier: ^2.0.1 - version: 2.0.3 - devDependencies: - '@playwright/test': - specifier: ^1.43.1 - version: 1.52.0 - '@slack/types': - specifier: ^2.14.0 - version: 2.14.0 - '@types/node': - specifier: ^22.15.28 - version: 22.15.28 - playwright-slack-report: - specifier: ^1.1.93 - version: 1.1.93(@types/node@22.15.28)(typescript@5.8.3) - -packages: - - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/crc32c@5.2.0': - resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} - - '@aws-crypto/sha1-browser@5.2.0': - resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-s3@3.840.0': - resolution: {integrity: sha512-dRuo03EqGBbl9+PTogpwY9bYmGWIjn8nB82HN5Qj20otgjUvhLOdEkkip9mroYsrvqNoKbMedWdCudIcB/YY1w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.840.0': - resolution: {integrity: sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.840.0': - resolution: {integrity: sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.840.0': - resolution: {integrity: sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.840.0': - resolution: {integrity: sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.840.0': - resolution: {integrity: sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.840.0': - resolution: {integrity: sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.840.0': - resolution: {integrity: sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.840.0': - resolution: {integrity: sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.840.0': - resolution: {integrity: sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-bucket-endpoint@3.840.0': - resolution: {integrity: sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-expect-continue@3.840.0': - resolution: {integrity: sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-flexible-checksums@3.840.0': - resolution: {integrity: sha512-Kg/o2G6o72sdoRH0J+avdcf668gM1bp6O4VeEXpXwUj/urQnV5qiB2q1EYT110INHUKWOLXPND3sQAqh6sTqHw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.840.0': - resolution: {integrity: sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-location-constraint@3.840.0': - resolution: {integrity: sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.840.0': - resolution: {integrity: sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.840.0': - resolution: {integrity: sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.840.0': - resolution: {integrity: sha512-rOUji7CayWN3O09zvvgLzDVQe0HiJdZkxoTS6vzOS3WbbdT7joGdVtAJHtn+x776QT3hHzbKU5gnfhel0o6gQA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-ssec@3.840.0': - resolution: {integrity: sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.840.0': - resolution: {integrity: sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/nested-clients@3.840.0': - resolution: {integrity: sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.840.0': - resolution: {integrity: sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.840.0': - resolution: {integrity: sha512-8AoVgHrkSfhvGPtwx23hIUO4MmMnux2pjnso1lrLZGqxfElM6jm2w4jTNLlNXk8uKHGyX89HaAIuT0lL6dJj9g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/token-providers@3.840.0': - resolution: {integrity: sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.840.0': - resolution: {integrity: sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-arn-parser@3.804.0': - resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-endpoints@3.840.0': - resolution: {integrity: sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-locate-window@3.804.0': - resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-user-agent-browser@3.840.0': - resolution: {integrity: sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==} - - '@aws-sdk/util-user-agent-node@3.840.0': - resolution: {integrity: sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.821.0': - resolution: {integrity: sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==} - engines: {node: '>=18.0.0'} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@playwright/test@1.52.0': - resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} - engines: {node: '>=18'} - hasBin: true - - '@slack/logger@4.0.0': - resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} - engines: {node: '>= 18', npm: '>= 8.6.0'} - - '@slack/types@2.14.0': - resolution: {integrity: sha512-n0EGm7ENQRxlXbgKSrQZL69grzg1gHLAVd+GlRVQJ1NSORo0FrApR7wql/gaKdu2n4TO83Sq/AmeUOqD60aXUA==} - engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} - - '@slack/web-api@7.9.2': - resolution: {integrity: sha512-3HoDwV6+ZSTfV+DsbnUd82GlZY0a+DPXuHQHpxWTqgxjM3JWZyGiwR+ov3d2M16pWiMzA+l58UJ5lm1znGq0yA==} - engines: {node: '>= 18', npm: '>= 8.6.0'} - - '@slack/webhook@7.0.5': - resolution: {integrity: sha512-PmbZx89+SmH4zt78FUwe4If8hWX2MAIRmGXjmlF0A8PwyJb/H7CWaQYV6DDlZn1+7Zs6CEytKH0ejEE/idVSDw==} - engines: {node: '>= 18', npm: '>= 8.6.0'} - - '@smithy/abort-controller@4.0.4': - resolution: {integrity: sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==} - engines: {node: '>=18.0.0'} - - '@smithy/chunked-blob-reader-native@4.0.0': - resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} - engines: {node: '>=18.0.0'} - - '@smithy/chunked-blob-reader@5.0.0': - resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} - engines: {node: '>=18.0.0'} - - '@smithy/config-resolver@4.1.4': - resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.6.0': - resolution: {integrity: sha512-Pgvfb+TQ4wUNLyHzvgCP4aYZMh16y7GcfF59oirRHcgGgkH1e/s9C0nv/v3WP+Quymyr5je71HeFQCwh+44XLg==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.0.6': - resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-codec@4.0.4': - resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-browser@4.0.4': - resolution: {integrity: sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-config-resolver@4.1.2': - resolution: {integrity: sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-node@4.0.4': - resolution: {integrity: sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-universal@4.0.4': - resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.0.4': - resolution: {integrity: sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-blob-browser@4.0.4': - resolution: {integrity: sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.0.4': - resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-stream-node@4.0.4': - resolution: {integrity: sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.0.4': - resolution: {integrity: sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} - engines: {node: '>=18.0.0'} - - '@smithy/md5-js@4.0.4': - resolution: {integrity: sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.0.4': - resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.1.13': - resolution: {integrity: sha512-xg3EHV/Q5ZdAO5b0UiIMj3RIOCobuS40pBBODguUDVdko6YK6QIzCVRrHTogVuEKglBWqWenRnZ71iZnLL3ZAQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.1.14': - resolution: {integrity: sha512-eoXaLlDGpKvdmvt+YBfRXE7HmIEtFF+DJCbTPwuLunP0YUnrydl+C4tS+vEM0+nyxXrX3PSUFqC+lP1+EHB1Tw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.0.8': - resolution: {integrity: sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.0.4': - resolution: {integrity: sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.1.3': - resolution: {integrity: sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.0.6': - resolution: {integrity: sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.0.4': - resolution: {integrity: sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.1.2': - resolution: {integrity: sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.0.4': - resolution: {integrity: sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.0.4': - resolution: {integrity: sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.0.6': - resolution: {integrity: sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.0.4': - resolution: {integrity: sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.1.2': - resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.4.5': - resolution: {integrity: sha512-+lynZjGuUFJaMdDYSTMnP/uPBBXXukVfrJlP+1U/Dp5SFTEI++w6NMga8DjOENxecOF71V9Z2DllaVDYRnGlkg==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.3.1': - resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.0.4': - resolution: {integrity: sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.0.21': - resolution: {integrity: sha512-wM0jhTytgXu3wzJoIqpbBAG5U6BwiubZ6QKzSbP7/VbmF1v96xlAbX2Am/mz0Zep0NLvLh84JT0tuZnk3wmYQA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.0.21': - resolution: {integrity: sha512-/F34zkoU0GzpUgLJydHY8Rxu9lBn8xQC/s/0M0U9lLBkYbA1htaAFjWYJzpzsbXPuri5D1H8gjp2jBum05qBrA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.0.6': - resolution: {integrity: sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.0.4': - resolution: {integrity: sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.0.6': - resolution: {integrity: sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.2.2': - resolution: {integrity: sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} - engines: {node: '>=18.0.0'} - - '@smithy/util-waiter@4.0.6': - resolution: {integrity: sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==} - engines: {node: '>=18.0.0'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/node@22.15.28': - resolution: {integrity: sha512-I0okKVDmyKR281I0UIFV7EWAWRnR0gkuSKob5wVcByyyhr7Px/slhkQapcYX4u00ekzNWaS1gznKZnuzxwo4pw==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - axios@1.9.0: - resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} - - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} - hasBin: true - - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} - engines: {node: '>= 6'} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - indento@1.1.14: - resolution: {integrity: sha512-K4cK97v4M/ucCAbe3LUpg994folYL0WnEiCFxHXAIowKLbBb/Ahiazkz3Ao5gRar4i9pDr3imcpq4suOu0FbNw==} - - is-electron@2.2.2: - resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - json2md@2.0.3: - resolution: {integrity: sha512-ZPzh6Djvqz8grJMxKllfCHo0p+p7BsbZ1J95KcCJgvvfdoy7myuKrrkUp80Kpy+wGauykC0dYljLqLY0kENaOw==} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - playwright-core@1.52.0: - resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} - engines: {node: '>=18'} - hasBin: true - - playwright-slack-report@1.1.93: - resolution: {integrity: sha512-KuCHFyFx7rWOJ5mnpISqtWuB6S8NOOtkkcyUEwxkKTvPVjp5QndB+6fX0w8fTggqZ79x/bM0XO/QU5POOtIGZg==} - hasBin: true - - playwright@1.52.0: - resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} - engines: {node: '>=18'} - hasBin: true - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - zod@3.25.42: - resolution: {integrity: sha512-PcALTLskaucbeHc41tU/xfjfhcz8z0GdhhDcSgrCTmSazUuqnYqiXO63M0QUBVwpBlsLsNVn5qHSC5Dw3KZvaQ==} - -snapshots: - - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - tslib: 2.8.1 - - '@aws-crypto/crc32c@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - tslib: 2.8.1 - - '@aws-crypto/sha1-browser@5.2.0': - dependencies: - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-locate-window': 3.804.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-locate-window': 3.804.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-js@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - tslib: 2.8.1 - - '@aws-crypto/supports-web-crypto@5.2.0': - dependencies: - tslib: 2.8.1 - - '@aws-crypto/util@5.2.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/client-s3@3.840.0': - dependencies: - '@aws-crypto/sha1-browser': 5.2.0 - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-bucket-endpoint': 3.840.0 - '@aws-sdk/middleware-expect-continue': 3.840.0 - '@aws-sdk/middleware-flexible-checksums': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-location-constraint': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-sdk-s3': 3.840.0 - '@aws-sdk/middleware-ssec': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/signature-v4-multi-region': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@aws-sdk/xml-builder': 3.821.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.6.0 - '@smithy/eventstream-serde-browser': 4.0.4 - '@smithy/eventstream-serde-config-resolver': 4.1.2 - '@smithy/eventstream-serde-node': 4.0.4 - '@smithy/fetch-http-handler': 5.0.4 - '@smithy/hash-blob-browser': 4.0.4 - '@smithy/hash-node': 4.0.4 - '@smithy/hash-stream-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/md5-js': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.13 - '@smithy/middleware-retry': 4.1.14 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.0.6 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.21 - '@smithy/util-defaults-mode-node': 4.0.21 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-stream': 4.2.2 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.6 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.6.0 - '@smithy/fetch-http-handler': 5.0.4 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.13 - '@smithy/middleware-retry': 4.1.14 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.0.6 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.21 - '@smithy/util-defaults-mode-node': 4.0.21 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.6.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-utf8': 4.0.0 - fast-xml-parser: 4.4.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/fetch-http-handler': 5.0.4 - '@smithy/node-http-handler': 4.0.6 - '@smithy/property-provider': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/util-stream': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-env': 3.840.0 - '@aws-sdk/credential-provider-http': 3.840.0 - '@aws-sdk/credential-provider-process': 3.840.0 - '@aws-sdk/credential-provider-sso': 3.840.0 - '@aws-sdk/credential-provider-web-identity': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.840.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.840.0 - '@aws-sdk/credential-provider-http': 3.840.0 - '@aws-sdk/credential-provider-ini': 3.840.0 - '@aws-sdk/credential-provider-process': 3.840.0 - '@aws-sdk/credential-provider-sso': 3.840.0 - '@aws-sdk/credential-provider-web-identity': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.840.0': - dependencies: - '@aws-sdk/client-sso': 3.840.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/token-providers': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/middleware-bucket-endpoint@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-expect-continue@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-flexible-checksums@3.840.0': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/crc32c': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/is-array-buffer': 4.0.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-stream': 4.2.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-host-header@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-location-constraint@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/core': 3.6.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-stream': 4.2.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-ssec@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@smithy/core': 3.6.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.6.0 - '@smithy/fetch-http-handler': 5.0.4 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.13 - '@smithy/middleware-retry': 4.1.14 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.0.6 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.21 - '@smithy/util-defaults-mode-node': 4.0.21 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.4 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.840.0': - dependencies: - '@aws-sdk/middleware-sdk-s3': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.840.0': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.804.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - '@smithy/util-endpoints': 3.0.6 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.804.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - bowser: 2.11.0 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.840.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.821.0': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@playwright/test@1.52.0': - dependencies: - playwright: 1.52.0 - - '@slack/logger@4.0.0': - dependencies: - '@types/node': 22.15.28 - - '@slack/types@2.14.0': {} - - '@slack/web-api@7.9.2': - dependencies: - '@slack/logger': 4.0.0 - '@slack/types': 2.14.0 - '@types/node': 22.15.28 - '@types/retry': 0.12.0 - axios: 1.9.0 - eventemitter3: 5.0.1 - form-data: 4.0.2 - is-electron: 2.2.2 - is-stream: 2.0.1 - p-queue: 6.6.2 - p-retry: 4.6.2 - retry: 0.13.1 - transitivePeerDependencies: - - debug - - '@slack/webhook@7.0.5': - dependencies: - '@slack/types': 2.14.0 - '@types/node': 22.15.28 - axios: 1.9.0 - transitivePeerDependencies: - - debug - - '@smithy/abort-controller@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/chunked-blob-reader-native@4.0.0': - dependencies: - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/chunked-blob-reader@5.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/config-resolver@4.1.4': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.4 - tslib: 2.8.1 - - '@smithy/core@3.6.0': - dependencies: - '@smithy/middleware-serde': 4.0.8 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-stream': 4.2.2 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.0.6': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.0.4': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.3.1 - '@smithy/util-hex-encoding': 4.0.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.0.4': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.1.2': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.0.4': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.0.4': - dependencies: - '@smithy/eventstream-codec': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.0.4': - dependencies: - '@smithy/protocol-http': 5.1.2 - '@smithy/querystring-builder': 4.0.4 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-blob-browser@4.0.4': - dependencies: - '@smithy/chunked-blob-reader': 5.0.0 - '@smithy/chunked-blob-reader-native': 4.0.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/hash-node@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-stream-node@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/md5-js@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.0.4': - dependencies: - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.1.13': - dependencies: - '@smithy/core': 3.6.0 - '@smithy/middleware-serde': 4.0.8 - '@smithy/node-config-provider': 4.1.3 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-middleware': 4.0.4 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.1.14': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/service-error-classification': 4.0.6 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/middleware-serde@4.0.8': - dependencies: - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.1.3': - dependencies: - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.0.6': - dependencies: - '@smithy/abort-controller': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/querystring-builder': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/property-provider@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/protocol-http@5.1.2': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-uri-escape': 4.0.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.0.6': - dependencies: - '@smithy/types': 4.3.1 - - '@smithy/shared-ini-file-loader@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/signature-v4@5.1.2': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/smithy-client@4.4.5': - dependencies: - '@smithy/core': 3.6.0 - '@smithy/middleware-endpoint': 4.1.13 - '@smithy/middleware-stack': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-stream': 4.2.2 - tslib: 2.8.1 - - '@smithy/types@4.3.1': - dependencies: - tslib: 2.8.1 - - '@smithy/url-parser@4.0.4': - dependencies: - '@smithy/querystring-parser': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-base64@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-body-length-browser@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-body-length-node@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-buffer-from@4.0.0': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-config-provider@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-defaults-mode-browser@4.0.21': - dependencies: - '@smithy/property-provider': 4.0.4 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - bowser: 2.11.0 - tslib: 2.8.1 - - '@smithy/util-defaults-mode-node@4.0.21': - dependencies: - '@smithy/config-resolver': 4.1.4 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/smithy-client': 4.4.5 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-endpoints@3.0.6': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-middleware@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-retry@4.0.6': - dependencies: - '@smithy/service-error-classification': 4.0.6 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-stream@4.2.2': - dependencies: - '@smithy/fetch-http-handler': 5.0.4 - '@smithy/node-http-handler': 4.0.6 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-uri-escape@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-utf8@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-waiter@4.0.6': - dependencies: - '@smithy/abort-controller': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@types/node@22.15.28': - dependencies: - undici-types: 6.21.0 - - '@types/retry@0.12.0': {} - - '@types/uuid@9.0.8': {} - - acorn-walk@8.3.4: - dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - agent-base@7.1.3: {} - - arg@4.1.3: {} - - asynckit@0.4.0: {} - - axios@1.9.0: - dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.2 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - bowser@2.11.0: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@13.1.0: {} - - create-require@1.1.1: {} - - debug@4.4.1: - dependencies: - ms: 2.1.3 - - delayed-stream@1.0.0: {} - - diff@4.0.2: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - eventemitter3@4.0.7: {} - - eventemitter3@5.0.1: {} - - fast-xml-parser@4.4.1: - dependencies: - strnum: 1.1.2 - - follow-redirects@1.15.9: {} - - form-data@4.0.2: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - - fsevents@2.3.2: - optional: true - - function-bind@1.1.2: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - gopd@1.2.0: {} - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - transitivePeerDependencies: - - supports-color - - indento@1.1.14: {} - - is-electron@2.2.2: {} - - is-stream@2.0.1: {} - - json2md@2.0.3: - dependencies: - indento: 1.1.14 - - make-error@1.3.6: {} - - math-intrinsics@1.1.0: {} - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - ms@2.1.3: {} - - p-finally@1.0.0: {} - - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - playwright-core@1.52.0: {} - - playwright-slack-report@1.1.93(@types/node@22.15.28)(typescript@5.8.3): - dependencies: - '@slack/web-api': 7.9.2 - '@slack/webhook': 7.0.5 - commander: 13.1.0 - https-proxy-agent: 7.0.6 - ts-node: 10.9.2(@types/node@22.15.28)(typescript@5.8.3) - zod: 3.25.42 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - debug - - supports-color - - typescript - - playwright@1.52.0: - dependencies: - playwright-core: 1.52.0 - optionalDependencies: - fsevents: 2.3.2 - - proxy-from-env@1.1.0: {} - - retry@0.13.1: {} - - strnum@1.1.2: {} - - ts-node@10.9.2(@types/node@22.15.28)(typescript@5.8.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': 22.15.28 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.8.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - tslib@2.8.1: {} - - typescript@5.8.3: {} - - undici-types@6.21.0: {} - - uuid@9.0.1: {} - - v8-compile-cache-lib@3.0.1: {} - - yn@3.1.1: {} - - zod@3.25.42: {} diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml deleted file mode 100644 index 97da637d9..000000000 --- a/docs/pnpm-lock.yaml +++ /dev/null @@ -1,8029 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@icons-pack/react-simple-icons': - specifier: ^11.2.0 - version: 11.2.0(react@19.1.1) - lucide-react: - specifier: ^0.446.0 - version: 0.446.0(react@19.1.1) - mintlify: - specifier: ^4.0.459 - version: 4.2.123(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) - react-icons: - specifier: ^5.3.0 - version: 5.5.0(react@19.1.1) - -packages: - - '@alcalzone/ansi-tokenize@0.2.0': - resolution: {integrity: sha512-qI/5TaaaCZE4yeSZ83lu0+xi1r88JSxUjnH4OP/iZF7+KKZ75u3ee5isd0LxX+6N8U0npL61YrpbthILHB6BnA==} - engines: {node: '>=18'} - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@ark/schema@0.49.0': - resolution: {integrity: sha512-GphZBLpW72iS0v4YkeUtV3YIno35Gimd7+ezbPO9GwEi9kzdUrPVjvf6aXSBAfHikaFc/9pqZOpv3pOXnC71tw==} - - '@ark/util@0.49.0': - resolution: {integrity: sha512-/BtnX7oCjNkxi2vi6y1399b+9xd1jnCrDYhZ61f0a+3X8x8DxlK52VgEEzyuC2UQMPACIfYrmHkhD3lGt2GaMA==} - - '@asyncapi/parser@3.4.0': - resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} - - '@asyncapi/specs@6.10.0': - resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@icons-pack/react-simple-icons@11.2.0': - resolution: {integrity: sha512-jCJ+1Fe0yiBQGYSfhx8QGU/9o27t8J4Hw3mxHEI9vohRltLSi5CaPzO2fCQcMNeTrAUAm4j+yaDuAutskiKRjA==} - peerDependencies: - react: ^16.13 || ^17 || ^18 || ^19 - - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@inquirer/ansi@1.0.0': - resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} - engines: {node: '>=18'} - - '@inquirer/checkbox@4.2.4': - resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/confirm@5.1.18': - resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.2.2': - resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/editor@4.2.20': - resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/expand@4.0.20': - resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} - engines: {node: '>=18'} - - '@inquirer/input@4.2.4': - resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/number@3.0.20': - resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/password@4.0.20': - resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/prompts@7.8.6': - resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/rawlist@4.1.8': - resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/search@3.1.3': - resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/select@4.3.4': - resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/type@3.0.8': - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@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 - - '@jsep-plugin/ternary@1.1.4': - resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - - '@mdx-js/mdx@3.1.1': - resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - - '@mdx-js/react@3.1.1': - resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - - '@mintlify/cli@4.0.727': - resolution: {integrity: sha512-6iplgwOC9wK1FFdSFE9NX92qhxF0TkuZADf2rVkSR/A3MQ9LzTh9iKttRWD0q66pQ8l2kwOhzwqt/tW22ZLmcA==} - engines: {node: '>=18.0.0'} - hasBin: true - - '@mintlify/common@1.0.537': - resolution: {integrity: sha512-Mqm9OuXhaL0mVxkbPZHTIYNH8cVZdh9lsi5GHSGl8U7Vc+qHfv0CS+fempV1RAg6zRBjdSwD5rh43RMrPJSl/Q==} - - '@mintlify/link-rot@3.0.674': - resolution: {integrity: sha512-QzbMAva0GdbBBG6R+pWmHrVzNdR08ug6e6a5Tnxk1NaNr8+/YR7cehu5xdAX31aO6n+CIv8Ot5HxzsqsY2vwtA==} - engines: {node: '>=18.0.0'} - - '@mintlify/mdx@2.0.11': - resolution: {integrity: sha512-yXwuM0BNCxNaJetPrh89c5Q2lhzU2al4QrOM3zLUdrPOdjOpPmv8ewcdiXV/qIhZDpl5Ll9k47dsz33bZjVWTg==} - peerDependencies: - '@radix-ui/react-popover': ^1.1.15 - react: ^18.3.1 - react-dom: ^18.3.1 - - '@mintlify/models@0.0.229': - resolution: {integrity: sha512-1P3R6dQFNzjTbmVDCQf/vAGFGOEUdUv6sCaJAmZCNWY2mhwgvDU/Oa2YLiNmVrAqnWDH1Pkz5nq+i7gClrdXgA==} - engines: {node: '>=18.0.0'} - - '@mintlify/openapi-parser@0.0.7': - resolution: {integrity: sha512-3ecbkzPbsnkKVZJypVL0H5pCTR7a4iLv4cP7zbffzAwy+vpH70JmPxNVpPPP62yLrdZlfNcMxu5xKeT7fllgMg==} - engines: {node: '>=18'} - - '@mintlify/prebuild@1.0.661': - resolution: {integrity: sha512-hcYLxhf53RV6hecJLIEdG7ajQuTtDj3vuoueeLmhcVXEDYkvKKa36EOk9/olLUDvjqsENnK601NmdmHPd80pJA==} - - '@mintlify/previewing@4.0.710': - resolution: {integrity: sha512-3SyO58i7kmR4W+UCcP9gq/wTKsJ0Vs+pudFnfJt5Qk1QIMTXbZGjC/ojaYDbGqSt+VOmIPwbGchQzZrAp1aXbA==} - engines: {node: '>=18.0.0'} - - '@mintlify/scraping@4.0.396': - resolution: {integrity: sha512-cPavXt7yrnyGLNb5QEY8C8anPfw9Tj8TL7CVE76Ey/+l7sae9inLd2f5E3vKYfWrqyIouxGmvA+pFuenOt66aw==} - engines: {node: '>=18.0.0'} - hasBin: true - - '@mintlify/validation@0.1.471': - resolution: {integrity: sha512-lf4zp9sJspXmDA9HH9VaJfK4ll+BaaH9XxuU2SVNuploKjRKmpHYFfN9YI42pA2bda/X32rkqDZSRI+JHdQcNg==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': - resolution: {integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@puppeteer/browsers@2.3.0': - resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} - engines: {node: '>=18'} - hasBin: true - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dismissable-layer@1.1.11': - resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.3': - resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-popover@1.1.15': - resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@shikijs/core@3.13.0': - resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} - - '@shikijs/engine-javascript@3.13.0': - resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} - - '@shikijs/engine-oniguruma@3.13.0': - resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} - - '@shikijs/langs@3.13.0': - resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} - - '@shikijs/themes@3.13.0': - resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} - - '@shikijs/transformers@3.13.0': - resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} - - '@shikijs/twoslash@3.13.0': - resolution: {integrity: sha512-OmNKNoZ8Hevt4VKQHfJL+hrsrqLSnW/Nz7RMutuBqXBCIYZWk80HnF9pcXEwRmy9MN0MGRmZCW2rDDP8K7Bxkw==} - peerDependencies: - typescript: '>=5.5.0' - - '@shikijs/types@3.13.0': - resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - - '@sindresorhus/slugify@2.2.1': - resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} - engines: {node: '>=12'} - - '@sindresorhus/transliterate@1.6.0': - resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} - engines: {node: '>=12'} - - '@socket.io/component-emitter@3.1.2': - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - - '@stoplight/better-ajv-errors@1.0.3': - resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} - engines: {node: ^12.20 || >= 14.13} - peerDependencies: - ajv: '>=8' - - '@stoplight/json-ref-readers@1.2.2': - resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} - engines: {node: '>=8.3.0'} - - '@stoplight/json-ref-resolver@3.1.6': - resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} - engines: {node: '>=8.3.0'} - - '@stoplight/json@3.21.0': - resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} - engines: {node: '>=8.3.0'} - - '@stoplight/ordered-object-literal@1.0.5': - resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} - engines: {node: '>=8'} - - '@stoplight/path@1.3.2': - resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} - engines: {node: '>=8'} - - '@stoplight/spectral-core@1.20.0': - resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-formats@1.8.2': - resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-functions@1.10.1': - resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-parsers@1.0.5': - resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-ref-resolver@1.0.5': - resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/spectral-runtime@1.1.4': - resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} - - '@stoplight/types@13.20.0': - resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/types@13.6.0': - resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/types@14.1.1': - resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} - engines: {node: ^12.20 || >=14.13} - - '@stoplight/yaml-ast-parser@0.0.50': - resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} - - '@stoplight/yaml@4.3.0': - resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} - engines: {node: '>=10.8'} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/es-aggregate-error@1.0.6': - resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/katex@0.16.7': - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/nlcst@2.0.3': - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - - '@types/node@24.5.2': - resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} - - '@types/react@19.1.13': - resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/urijs@1.19.25': - resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} - - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - - '@typescript/vfs@1.6.1': - resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==} - peerDependencies: - typescript: '*' - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} - - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-errors@3.0.0: - resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} - peerDependencies: - ajv: ^8.0.1 - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - - ansi-escapes@7.1.1: - resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} - engines: {node: '>=18'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} - - arktype@2.1.22: - resolution: {integrity: sha512-xdzl6WcAhrdahvRRnXaNwsipCgHuNoLobRqhiP8RjnfL9Gp947abGlo68GAIyLtxbD+MLzNyH2YR4kEqioMmYQ==} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - array-iterate@2.0.1: - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - auto-bind@5.0.1: - resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - avsc@5.7.9: - resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} - engines: {node: '>=0.11'} - - axios@1.12.2: - resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} - - b4a@1.7.2: - resolution: {integrity: sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - bare-events@2.7.0: - resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} - - bare-fs@4.4.4: - resolution: {integrity: sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.2.2: - resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - - basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - - better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - - chromium-bidi@0.6.3: - resolution: {integrity: sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==} - peerDependencies: - devtools-protocol: '*' - - clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.2.0: - resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@2.1.1: - resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==} - engines: {node: '>=8'} - - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - - detect-port@1.6.1: - resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} - engines: {node: '>= 4.0.0'} - hasBin: true - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - devtools-protocol@0.0.1312386: - resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - - dns-socket@4.2.2: - resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} - engines: {node: '>=6'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - emoji-regex@10.5.0: - resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - engine.io-parser@5.2.3: - resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} - engines: {node: '>=10.0.0'} - - engine.io@6.6.4: - resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} - engines: {node: '>=10.2.0'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-aggregate-error@1.0.14: - resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - es-toolkit@1.39.10: - resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} - - esast-util-from-estree@2.0.0: - resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} - - esast-util-from-js@2.0.1: - resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} - - estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-util-scope@1.0.0: - resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} - - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-memoize@2.5.2: - resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - - favicons@7.2.0: - resolution: {integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==} - engines: {node: '>=14.0.0'} - - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} - - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gcd@0.0.1: - resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@12.6.1: - resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} - engines: {node: '>=14.16'} - - got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hast-util-embedded@3.0.0: - resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} - - hast-util-from-dom@5.0.1: - resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} - - hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} - - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - - hast-util-has-property@3.0.0: - resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} - - hast-util-is-body-ok-link@3.0.1: - resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-minify-whitespace@1.0.1: - resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-phrasing@3.0.1: - resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} - - hast-util-to-estree@3.1.3: - resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} - - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-to-mdast@10.1.2: - resolution: {integrity: sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==} - - hast-util-to-string@3.0.1: - resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} - - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} - - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ink-spinner@5.0.0: - resolution: {integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==} - engines: {node: '>=14.16'} - peerDependencies: - ink: '>=4.0.0' - react: '>=18.0.0' - - ink@6.3.1: - resolution: {integrity: sha512-3wGwITGrzL6rkWsi2gEKzgwdafGn4ZYd3u4oRp+sOPvfoxEHlnoB5Vnk9Uy5dMRUhDOqF3hqr4rLQ4lEzBc2sQ==} - engines: {node: '>=20'} - peerDependencies: - '@types/react': '>=19.0.0' - react: '>=19.0.0' - react-devtools-core: ^6.1.2 - peerDependenciesMeta: - '@types/react': - optional: true - react-devtools-core: - optional: true - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - - inquirer@12.9.6: - resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - - ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} - - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-in-ci@2.0.0: - resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} - engines: {node: '>=20'} - hasBin: true - - is-ip@3.1.0: - resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} - engines: {node: '>=8'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-online@10.0.0: - resolution: {integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==} - engines: {node: '>=14.16'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsep@1.4.0: - resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} - engines: {node: '>= 10.16.0'} - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - jsonc-parser@2.2.1: - resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - jsonpath-plus@10.3.0: - resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} - engines: {node: '>=18.0.0'} - hasBin: true - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - katex@0.16.22: - resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - lcm@0.0.3: - resolution: {integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - leven@4.1.0: - resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - lodash.topath@4.5.2: - resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - lucide-react@0.446.0: - resolution: {integrity: sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc - - markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - - mdast-util-frontmatter@2.0.1: - resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} - - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - - mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdast@3.0.0: - resolution: {integrity: sha512-xySmf8g4fPKMeC07jXGz971EkLbWAJ83s4US2Tj9lEdnZ142UP5grN73H1Xd3HzrdbU5o9GYYP/y8F9ZSwLE9g==} - deprecated: '`mdast` was renamed to `remark`' - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-extension-frontmatter@2.0.0: - resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - - micromark-extension-mdx-expression@3.0.1: - resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} - - micromark-extension-mdx-jsx@3.0.2: - resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} - - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} - - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-mdx-expression@2.0.3: - resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-events-to-acorn@2.0.3: - resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mintlify@4.2.123: - resolution: {integrity: sha512-5489Uv0O0ryv5lY0rlHB1JszZWUd8/S+4g4UwQ1adXzKXURAz1D2ZW694hMivnAHebhlEylb9neQ6h38WdapSQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - neotraverse@0.6.18: - resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} - engines: {node: '>= 10'} - - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - - next-mdx-remote-client@1.1.2: - resolution: {integrity: sha512-LZJxBU420dTZsbWOrNYZXkahGJu8lNKxLTrQrZl4JUsKeFtp91yA78dHMTfOcp7UAud3txhM1tayyoKFq4tw7A==} - engines: {node: '>=18.18.0'} - peerDependencies: - react: '>= 18.3.0 < 19.0.0' - react-dom: '>= 18.3.0 < 19.0.0' - - nimma@0.2.3: - resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} - engines: {node: ^12.20 || >=14.13} - - nlcst-to-string@4.0.0: - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-url@8.1.0: - resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} - engines: {node: '>=14.16'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - oniguruma-parser@0.12.1: - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - - oniguruma-to-es@4.3.3: - resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-any@4.0.0: - resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==} - engines: {node: '>=12.20'} - - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - - p-some@6.0.0: - resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==} - engines: {node: '>=12.20'} - - p-timeout@5.1.0: - resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} - engines: {node: '>=12'} - - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-latin@7.0.0: - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - patch-console@2.0.0: - resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - - pony-cause@1.1.1: - resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} - engines: {node: '>=12.0.0'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.1.0: - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - public-ip@5.0.0: - resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==} - engines: {node: ^14.13.1 || >=16.0.0} - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - puppeteer-core@22.15.0: - resolution: {integrity: sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==} - engines: {node: '>=18'} - - puppeteer@22.15.0: - resolution: {integrity: sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==} - engines: {node: '>=18'} - deprecated: < 24.10.2 is no longer supported - hasBin: true - - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-icons@5.5.0: - resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} - peerDependencies: - react: '*' - - react-reconciler@0.32.0: - resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^19.1.0 - - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react@19.1.1: - resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - recma-build-jsx@1.0.0: - resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - - recma-jsx@1.0.1: - resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - recma-parse@1.0.0: - resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} - - recma-stringify@1.0.0: - resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.0.1: - resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} - - rehype-minify-whitespace@6.0.2: - resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==} - - rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} - - rehype-recma@1.0.0: - resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - - remark-frontmatter@5.0.0: - resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} - - remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - - remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - - remark-mdx-remove-esm@1.2.1: - resolution: {integrity: sha512-Vz1GKmRR9u7ij8TTf88DK8dFc/mVror9YUJekl1uP+S0sTzHxGdszJMeBbh96aIR+ZiI2QRKHu2UsV+/pWj7uQ==} - peerDependencies: - unified: ^11 - - remark-mdx@3.1.1: - resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - - remark-smartypants@3.0.2: - resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} - engines: {node: '>=16.0.0'} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - remark@15.0.1: - resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - retext-latin@4.0.0: - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} - - retext-smartypants@6.2.0: - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} - - retext-stringify@4.0.0: - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} - - retext@9.0.0: - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-async@4.0.6: - resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@1.1.1: - resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} - - serialize-error@12.0.0: - resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} - engines: {node: '>=18'} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shiki@3.13.0: - resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-eval@1.0.1: - resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==} - engines: {node: '>=12'} - - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} - - socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} - - socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} - engines: {node: '>=10.2.0'} - - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} - - socks@2.8.7: - resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - - style-to-js@1.1.17: - resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} - - style-to-object@1.0.9: - resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} - hasBin: true - - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} - - tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - - text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trim-trailing-lines@2.1.0: - resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - twoslash-protocol@0.3.4: - resolution: {integrity: sha512-HHd7lzZNLUvjPzG/IE6js502gEzLC1x7HaO1up/f72d8G8ScWAs9Yfa97igelQRDl5h9tGcdFsRp+lNVre1EeQ==} - - twoslash@0.3.4: - resolution: {integrity: sha512-RtJURJlGRxrkJmTcZMjpr7jdYly1rfgpujJr1sBM9ch7SKVht/SjFk23IOAyvwT1NLCk+SJiMrvW4rIAUM2Wug==} - peerDependencies: - typescript: ^5.5.0 - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - - undici-types@7.12.0: - resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unist-builder@4.0.0: - resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} - - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-map@4.0.0: - resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==} - - unist-util-modify-children@4.0.0: - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} - - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-remove@4.0.0: - resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-children@3.0.0: - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} - - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - urijs@1.19.11: - resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} - - urlpattern-polyfill@10.0.0: - resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} - - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - - vfile-matter@5.0.1: - resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - widest-line@5.0.0: - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} - engines: {node: '>=18'} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} - - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - - yoga-layout@3.2.1: - resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - - zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} - peerDependencies: - zod: ^3.24.1 - - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@alcalzone/ansi-tokenize@0.2.0': - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - '@alloc/quick-lru@5.2.0': {} - - '@ark/schema@0.49.0': - dependencies: - '@ark/util': 0.49.0 - - '@ark/util@0.49.0': {} - - '@asyncapi/parser@3.4.0': - dependencies: - '@asyncapi/specs': 6.10.0 - '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 - '@stoplight/json': 3.21.0 - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-core': 1.20.0 - '@stoplight/spectral-functions': 1.10.1 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/types': 13.20.0 - '@types/json-schema': 7.0.15 - '@types/urijs': 1.19.25 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) - avsc: 5.7.9 - js-yaml: 4.1.0 - jsonpath-plus: 10.3.0 - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - - '@asyncapi/specs@6.10.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.27.1': {} - - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@floating-ui/core@1.7.3': - dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.4': - dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - - '@floating-ui/utils@0.2.10': {} - - '@icons-pack/react-simple-icons@11.2.0(react@19.1.1)': - dependencies: - react: 19.1.1 - - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.5.0 - optional: true - - '@img/sharp-win32-ia32@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.33.5': - optional: true - - '@inquirer/ansi@1.0.0': {} - - '@inquirer/checkbox@4.2.4(@types/node@24.5.2)': - dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.5.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/confirm@5.1.18(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/core@10.2.2(@types/node@24.5.2)': - dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.5.2) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/editor@4.2.20(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/external-editor': 1.0.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/expand@4.0.20(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/external-editor@1.0.2(@types/node@24.5.2)': - dependencies: - chardet: 2.1.0 - iconv-lite: 0.7.0 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/figures@1.0.13': {} - - '@inquirer/input@4.2.4(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/number@3.0.20(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/password@4.0.20(@types/node@24.5.2)': - dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/prompts@7.8.6(@types/node@24.5.2)': - dependencies: - '@inquirer/checkbox': 4.2.4(@types/node@24.5.2) - '@inquirer/confirm': 5.1.18(@types/node@24.5.2) - '@inquirer/editor': 4.2.20(@types/node@24.5.2) - '@inquirer/expand': 4.0.20(@types/node@24.5.2) - '@inquirer/input': 4.2.4(@types/node@24.5.2) - '@inquirer/number': 3.0.20(@types/node@24.5.2) - '@inquirer/password': 4.0.20(@types/node@24.5.2) - '@inquirer/rawlist': 4.1.8(@types/node@24.5.2) - '@inquirer/search': 3.1.3(@types/node@24.5.2) - '@inquirer/select': 4.3.4(@types/node@24.5.2) - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/rawlist@4.1.8(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/search@3.1.3(@types/node@24.5.2)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.5.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/select@4.3.4(@types/node@24.5.2)': - dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.5.2) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.5.2 - - '@inquirer/type@3.0.8(@types/node@24.5.2)': - optionalDependencies: - '@types/node': 24.5.2 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@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 - - '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@leichtgewicht/ip-codec@2.0.5': {} - - '@mdx-js/mdx@3.1.1': - dependencies: - '@types/estree': 1.0.8 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.15.0 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-util-scope: 1.0.0 - estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 - markdown-extensions: 2.0.0 - recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.15.0) - recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - source-map: 0.7.6 - unified: 11.0.5 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.1.13 - react: 19.1.1 - - '@mintlify/cli@4.0.727(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2)': - dependencies: - '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/link-rot': 3.0.674(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/models': 0.0.229 - '@mintlify/prebuild': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/previewing': 4.0.710(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) - '@mintlify/validation': 0.1.471 - chalk: 5.6.2 - detect-port: 1.6.1 - fs-extra: 11.3.2 - gray-matter: 4.0.3 - ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) - inquirer: 12.9.6(@types/node@24.5.2) - js-yaml: 4.1.0 - react: 19.1.1 - semver: 7.7.2 - yargs: 17.7.2 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/node' - - '@types/react' - - bare-buffer - - bufferutil - - debug - - encoding - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/common@1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': - dependencies: - '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 2.0.11(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/models': 0.0.229 - '@mintlify/openapi-parser': 0.0.7 - '@mintlify/validation': 0.1.471 - '@sindresorhus/slugify': 2.2.1 - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - estree-util-to-js: 2.0.0 - estree-walker: 3.0.3 - gray-matter: 4.0.3 - hast-util-from-html: 2.0.3 - hast-util-to-html: 9.0.5 - hast-util-to-text: 4.0.2 - js-yaml: 4.1.0 - lodash: 4.17.21 - mdast: 3.0.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm: 3.1.0 - mdast-util-mdx: 3.0.0 - mdast-util-mdx-jsx: 3.2.0 - micromark-extension-gfm: 3.0.0 - micromark-extension-mdx-jsx: 3.0.2 - micromark-extension-mdxjs: 3.0.0 - openapi-types: 12.1.3 - postcss: 8.5.6 - remark: 15.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - remark-mdx: 3.1.1 - remark-stringify: 11.0.0 - tailwindcss: 3.4.17 - unified: 11.0.5 - unist-builder: 4.0.0 - unist-util-map: 4.0.0 - unist-util-remove: 4.0.0 - unist-util-remove-position: 5.0.0 - unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - debug - - encoding - - react - - react-dom - - supports-color - - ts-node - - typescript - - '@mintlify/link-rot@3.0.674(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': - dependencies: - '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/prebuild': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/previewing': 4.0.710(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) - '@mintlify/validation': 0.1.471 - fs-extra: 11.3.2 - unist-util-visit: 4.1.2 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-buffer - - bufferutil - - debug - - encoding - - react - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/mdx@2.0.11(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': - dependencies: - '@radix-ui/react-popover': 1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@shikijs/transformers': 3.13.0 - '@shikijs/twoslash': 3.13.0(typescript@5.9.2) - hast-util-to-string: 3.0.1 - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm: 3.1.0 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-to-hast: 13.2.0 - next-mdx-remote-client: 1.1.2(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(unified@11.0.5) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - rehype-katex: 7.0.1 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - remark-smartypants: 3.0.2 - shiki: 3.13.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - transitivePeerDependencies: - - '@types/react' - - supports-color - - typescript - - '@mintlify/models@0.0.229': - dependencies: - axios: 1.12.2 - openapi-types: 12.1.3 - transitivePeerDependencies: - - debug - - '@mintlify/openapi-parser@0.0.7': - dependencies: - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-formats: 3.0.1(ajv@8.17.1) - jsonpointer: 5.0.1 - leven: 4.1.0 - yaml: 2.8.1 - - '@mintlify/prebuild@1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': - dependencies: - '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/openapi-parser': 0.0.7 - '@mintlify/scraping': 4.0.396(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/validation': 0.1.471 - chalk: 5.6.2 - favicons: 7.2.0 - fs-extra: 11.3.2 - gray-matter: 4.0.3 - js-yaml: 4.1.0 - mdast: 3.0.0 - openapi-types: 12.1.3 - unist-util-visit: 4.1.2 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-buffer - - bufferutil - - debug - - encoding - - react - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/previewing@4.0.710(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2)': - dependencies: - '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/prebuild': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/validation': 0.1.471 - better-opn: 3.0.2 - chalk: 5.6.2 - chokidar: 3.6.0 - express: 4.21.2 - fs-extra: 11.3.2 - got: 13.0.0 - gray-matter: 4.0.3 - ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) - ink-spinner: 5.0.0(ink@6.3.1(@types/react@19.1.13)(react@19.1.1))(react@19.1.1) - is-online: 10.0.0 - js-yaml: 4.1.0 - mdast: 3.0.0 - openapi-types: 12.1.3 - react: 19.1.1 - socket.io: 4.8.1 - tar: 6.2.1 - unist-util-visit: 4.1.2 - yargs: 17.7.2 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-buffer - - bufferutil - - debug - - encoding - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/scraping@4.0.396(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': - dependencies: - '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) - '@mintlify/openapi-parser': 0.0.7 - fs-extra: 11.3.2 - hast-util-to-mdast: 10.1.2 - js-yaml: 4.1.0 - mdast-util-mdx-jsx: 3.2.0 - neotraverse: 0.6.18 - puppeteer: 22.15.0(typescript@5.9.2) - rehype-parse: 9.0.1 - remark-gfm: 4.0.1 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - yargs: 17.7.2 - zod: 3.25.76 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-buffer - - bufferutil - - debug - - encoding - - react - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/validation@0.1.471': - dependencies: - '@mintlify/models': 0.0.229 - arktype: 2.1.22 - lcm: 0.0.3 - lodash: 4.17.21 - openapi-types: 12.1.3 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - debug - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': - dependencies: - fast-deep-equal: 3.1.3 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@puppeteer/browsers@2.3.0': - dependencies: - debug: 4.4.3 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.2 - tar-fs: 3.1.1 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-buffer - - react-native-b4a - - supports-color - - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-arrow@1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.1.1)': - dependencies: - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.1.1)': - dependencies: - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.1.1)': - dependencies: - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-focus-scope@1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-popper': 1.2.8(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-portal': 1.1.9(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-presence': 1.1.5(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1) - aria-hidden: 1.2.6 - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-popper@1.2.8(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-arrow': 1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/rect': 1.1.1 - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-portal@1.1.9(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-presence@1.1.5(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-primitive@2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.1.1)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - optionalDependencies: - '@types/react': 19.1.13 - - '@radix-ui/rect@1.1.1': {} - - '@shikijs/core@3.13.0': - dependencies: - '@shikijs/types': 3.13.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@3.13.0': - dependencies: - '@shikijs/types': 3.13.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - - '@shikijs/engine-oniguruma@3.13.0': - dependencies: - '@shikijs/types': 3.13.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.13.0': - dependencies: - '@shikijs/types': 3.13.0 - - '@shikijs/themes@3.13.0': - dependencies: - '@shikijs/types': 3.13.0 - - '@shikijs/transformers@3.13.0': - dependencies: - '@shikijs/core': 3.13.0 - '@shikijs/types': 3.13.0 - - '@shikijs/twoslash@3.13.0(typescript@5.9.2)': - dependencies: - '@shikijs/core': 3.13.0 - '@shikijs/types': 3.13.0 - twoslash: 0.3.4(typescript@5.9.2) - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@shikijs/types@3.13.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@sindresorhus/is@5.6.0': {} - - '@sindresorhus/slugify@2.2.1': - dependencies: - '@sindresorhus/transliterate': 1.6.0 - escape-string-regexp: 5.0.0 - - '@sindresorhus/transliterate@1.6.0': - dependencies: - escape-string-regexp: 5.0.0 - - '@socket.io/component-emitter@3.1.2': {} - - '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': - dependencies: - ajv: 8.17.1 - jsonpointer: 5.0.1 - leven: 3.1.0 - - '@stoplight/json-ref-readers@1.2.2': - dependencies: - node-fetch: 2.6.7 - tslib: 1.14.1 - transitivePeerDependencies: - - encoding - - '@stoplight/json-ref-resolver@3.1.6': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - '@types/urijs': 1.19.25 - dependency-graph: 0.11.0 - fast-memoize: 2.5.2 - immer: 9.0.21 - lodash: 4.17.21 - tslib: 2.8.1 - urijs: 1.19.11 - - '@stoplight/json@3.21.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - jsonc-parser: 2.2.1 - lodash: 4.17.21 - safe-stable-stringify: 1.1.1 - - '@stoplight/ordered-object-literal@1.0.5': {} - - '@stoplight/path@1.3.2': {} - - '@stoplight/spectral-core@1.20.0': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/spectral-runtime': 1.1.4 - '@stoplight/types': 13.6.0 - '@types/es-aggregate-error': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) - es-aggregate-error: 1.0.14 - jsonpath-plus: 10.3.0 - lodash: 4.17.21 - lodash.topath: 4.5.2 - minimatch: 3.1.2 - nimma: 0.2.3 - pony-cause: 1.1.1 - simple-eval: 1.0.1 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-formats@1.8.2': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.20.0 - '@types/json-schema': 7.0.15 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-functions@1.10.1': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.20.0 - '@stoplight/spectral-formats': 1.8.2 - '@stoplight/spectral-runtime': 1.1.4 - ajv: 8.17.1 - ajv-draft-04: 1.0.0(ajv@8.17.1) - ajv-errors: 3.0.0(ajv@8.17.1) - ajv-formats: 2.1.1(ajv@8.17.1) - lodash: 4.17.21 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-parsers@1.0.5': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/types': 14.1.1 - '@stoplight/yaml': 4.3.0 - tslib: 2.8.1 - - '@stoplight/spectral-ref-resolver@1.0.5': - dependencies: - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-runtime': 1.1.4 - dependency-graph: 0.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-runtime@1.1.4': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - abort-controller: 3.0.0 - lodash: 4.17.21 - node-fetch: 2.7.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/types@13.20.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@13.6.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@14.1.1': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/yaml-ast-parser@0.0.50': {} - - '@stoplight/yaml@4.3.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/types': 14.1.1 - '@stoplight/yaml-ast-parser': 0.0.50 - tslib: 2.8.1 - - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - - '@tootallnate/quickjs-emscripten@0.23.0': {} - - '@types/cors@2.8.19': - dependencies: - '@types/node': 24.5.2 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/es-aggregate-error@1.0.6': - dependencies: - '@types/node': 24.5.2 - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.8 - - '@types/estree@1.0.8': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/http-cache-semantics@4.0.4': {} - - '@types/json-schema@7.0.15': {} - - '@types/katex@0.16.7': {} - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdx@2.0.13': {} - - '@types/ms@2.1.0': {} - - '@types/nlcst@2.0.3': - dependencies: - '@types/unist': 3.0.3 - - '@types/node@24.5.2': - dependencies: - undici-types: 7.12.0 - - '@types/react@19.1.13': - dependencies: - csstype: 3.1.3 - - '@types/unist@2.0.11': {} - - '@types/unist@3.0.3': {} - - '@types/urijs@1.19.25': {} - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 24.5.2 - optional: true - - '@typescript/vfs@1.6.1(typescript@5.9.2)': - dependencies: - debug: 4.4.3 - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - '@ungap/structured-clone@1.3.0': {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - address@1.2.2: {} - - agent-base@7.1.4: {} - - aggregate-error@4.0.1: - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - - ajv-draft-04@1.0.0(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv-errors@3.0.0(ajv@8.17.1): - dependencies: - ajv: 8.17.1 - - ajv-formats@2.1.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - - ajv@8.17.1: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - - ansi-escapes@7.1.1: - dependencies: - environment: 1.1.0 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@6.2.3: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - aria-hidden@1.2.6: - dependencies: - tslib: 2.8.1 - - arktype@2.1.22: - dependencies: - '@ark/schema': 0.49.0 - '@ark/util': 0.49.0 - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-flatten@1.1.1: {} - - array-iterate@2.0.1: {} - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - - astring@1.9.0: {} - - async-function@1.0.0: {} - - asynckit@0.4.0: {} - - auto-bind@5.0.1: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - avsc@5.7.9: {} - - axios@1.12.2: - dependencies: - follow-redirects: 1.15.11 - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - b4a@1.7.2: {} - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - bare-events@2.7.0: {} - - bare-fs@4.4.4: - dependencies: - bare-events: 2.7.0 - bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.7.0) - bare-url: 2.2.2 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - react-native-b4a - optional: true - - bare-os@3.6.2: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.2 - optional: true - - bare-stream@2.7.0(bare-events@2.7.0): - dependencies: - streamx: 2.23.0 - optionalDependencies: - bare-events: 2.7.0 - transitivePeerDependencies: - - react-native-b4a - optional: true - - bare-url@2.2.2: - dependencies: - bare-path: 3.0.0 - optional: true - - base64-js@1.5.1: {} - - base64id@2.0.0: {} - - basic-ftp@5.0.5: {} - - better-opn@3.0.2: - dependencies: - open: 8.4.2 - - binary-extensions@2.3.0: {} - - body-parser@1.20.3: - 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.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-crc32@0.2.13: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - bytes@3.1.2: {} - - cacheable-lookup@7.0.0: {} - - cacheable-request@10.2.14: - dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 6.0.1 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.1.0 - responselike: 3.0.0 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase-css@2.0.1: {} - - ccount@2.0.1: {} - - chalk@5.6.2: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - character-entities@2.0.2: {} - - character-reference-invalid@2.0.1: {} - - chardet@2.1.0: {} - - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - - chownr@2.0.0: {} - - chromium-bidi@0.6.3(devtools-protocol@0.0.1312386): - dependencies: - devtools-protocol: 0.0.1312386 - mitt: 3.0.1 - urlpattern-polyfill: 10.0.0 - zod: 3.23.8 - - clean-stack@4.2.0: - dependencies: - escape-string-regexp: 5.0.0 - - cli-boxes@3.0.0: {} - - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - - cli-spinners@2.9.2: {} - - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 - - cli-width@4.1.0: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - code-excerpt@4.0.0: - dependencies: - convert-to-spaces: 2.0.1 - - collapse-white-space@2.1.0: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - comma-separated-tokens@2.0.3: {} - - commander@4.1.1: {} - - commander@8.3.0: {} - - concat-map@0.0.1: {} - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-to-spaces@2.0.1: {} - - cookie-signature@1.0.6: {} - - cookie@0.7.1: {} - - cookie@0.7.2: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cosmiconfig@9.0.0(typescript@5.9.2): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - parse-json: 5.2.0 - optionalDependencies: - typescript: 5.9.2 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssesc@3.0.0: {} - - csstype@3.1.3: {} - - data-uri-to-buffer@6.0.2: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@4.3.7: - dependencies: - ms: 2.1.3 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decode-named-character-reference@1.2.0: - dependencies: - character-entities: 2.0.2 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@2.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - dependency-graph@0.11.0: {} - - dequal@2.0.3: {} - - destroy@1.2.0: {} - - detect-libc@2.1.1: {} - - detect-node-es@1.1.0: {} - - detect-port@1.6.1: - dependencies: - address: 1.2.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - devtools-protocol@0.0.1312386: {} - - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - - dns-packet@5.6.1: - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - - dns-socket@4.2.2: - dependencies: - dns-packet: 5.6.1 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - ee-first@1.1.1: {} - - emoji-regex@10.5.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encodeurl@1.0.2: {} - - encodeurl@2.0.0: {} - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - engine.io-parser@5.2.3: {} - - engine.io@6.6.4: - dependencies: - '@types/cors': 2.8.19 - '@types/node': 24.5.2 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.7.2 - cors: 2.8.5 - debug: 4.3.7 - engine.io-parser: 5.2.3 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - entities@6.0.1: {} - - env-paths@2.2.1: {} - - environment@1.1.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-aggregate-error@1.0.14: - dependencies: - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - set-function-name: 2.0.2 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es-toolkit@1.39.10: {} - - esast-util-from-estree@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - unist-util-position-from-estree: 2.0.0 - - esast-util-from-js@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 - esast-util-from-estree: 2.0.0 - vfile-message: 4.0.3 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@5.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - estree-util-attach-comments@3.0.0: - dependencies: - '@types/estree': 1.0.8 - - estree-util-build-jsx@3.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-walker: 3.0.3 - - estree-util-is-identifier-name@3.0.0: {} - - estree-util-scope@1.0.0: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - - estree-util-to-js@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - astring: 1.9.0 - source-map: 0.7.6 - - estree-util-visit@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.3 - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - event-target-shim@5.0.1: {} - - events-universal@1.0.1: - dependencies: - bare-events: 2.7.0 - - express@4.21.2: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - 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.0 - 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.13.0 - 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.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - - extend@3.0.2: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - fast-deep-equal@3.1.3: {} - - fast-fifo@1.3.2: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-memoize@2.5.2: {} - - fast-uri@3.1.0: {} - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fault@2.0.1: - dependencies: - format: 0.2.2 - - favicons@7.2.0: - dependencies: - escape-html: 1.0.3 - sharp: 0.33.5 - xml2js: 0.6.2 - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.3.1: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - follow-redirects@1.15.11: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data-encoder@2.1.4: {} - - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - format@0.2.2: {} - - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gcd@0.0.1: {} - - get-caller-file@2.0.5: {} - - get-east-asian-width@1.4.0: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-nonce@1.0.1: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@5.2.0: - dependencies: - pump: 3.0.3 - - get-stream@6.0.1: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-uri@6.0.5: - dependencies: - basic-ftp: 5.0.5 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - got@12.6.1: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - - got@13.0.0: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - - graceful-fs@4.2.11: {} - - gray-matter@4.0.3: - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - - has-bigints@1.1.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hast-util-embedded@3.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-is-element: 3.0.0 - - hast-util-from-dom@5.0.1: - dependencies: - '@types/hast': 3.0.4 - hastscript: 9.0.1 - web-namespaces: 2.0.1 - - hast-util-from-html-isomorphic@2.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-dom: 5.0.1 - hast-util-from-html: 2.0.3 - unist-util-remove-position: 5.0.0 - - hast-util-from-html@2.0.3: - dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.3.0 - vfile: 6.0.3 - vfile-message: 4.0.3 - - hast-util-from-parse5@8.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.1.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-has-property@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-is-body-ok-link@3.0.1: - dependencies: - '@types/hast': 3.0.4 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-minify-whitespace@1.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-is-element: 3.0.0 - hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.0 - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-phrasing@3.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-has-property: 3.0.0 - hast-util-is-body-ok-link: 3.0.1 - hast-util-is-element: 3.0.0 - - hast-util-to-estree@3.1.3: - dependencies: - '@types/estree': 1.0.8 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.17 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-to-jsx-runtime@2.3.6: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.17 - unist-util-position: 5.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - hast-util-to-mdast@10.1.2: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - hast-util-phrasing: 3.0.1 - hast-util-to-html: 9.0.5 - hast-util-to-text: 4.0.2 - hast-util-whitespace: 3.0.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-hast: 13.2.0 - mdast-util-to-string: 4.0.0 - rehype-minify-whitespace: 6.0.2 - trim-trailing-lines: 2.1.0 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - - hast-util-to-string@3.0.1: - dependencies: - '@types/hast': 3.0.4 - - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - - html-void-elements@3.0.0: {} - - http-cache-semantics@4.2.0: {} - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.7.0: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - immer@9.0.21: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - indent-string@5.0.0: {} - - inherits@2.0.4: {} - - ink-spinner@5.0.0(ink@6.3.1(@types/react@19.1.13)(react@19.1.1))(react@19.1.1): - dependencies: - cli-spinners: 2.9.2 - ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - - ink@6.3.1(@types/react@19.1.13)(react@19.1.1): - dependencies: - '@alcalzone/ansi-tokenize': 0.2.0 - ansi-escapes: 7.1.1 - ansi-styles: 6.2.3 - auto-bind: 5.0.1 - chalk: 5.6.2 - cli-boxes: 3.0.0 - cli-cursor: 4.0.0 - cli-truncate: 4.0.0 - code-excerpt: 4.0.0 - es-toolkit: 1.39.10 - indent-string: 5.0.0 - is-in-ci: 2.0.0 - patch-console: 2.0.0 - react: 19.1.1 - react-reconciler: 0.32.0(react@19.1.1) - signal-exit: 3.0.7 - slice-ansi: 7.1.2 - stack-utils: 2.0.6 - string-width: 7.2.0 - type-fest: 4.41.0 - widest-line: 5.0.0 - wrap-ansi: 9.0.2 - ws: 8.18.3 - yoga-layout: 3.2.1 - optionalDependencies: - '@types/react': 19.1.13 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - inline-style-parser@0.2.4: {} - - inquirer@12.9.6(@types/node@24.5.2): - dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/core': 10.2.2(@types/node@24.5.2) - '@inquirer/prompts': 7.8.6(@types/node@24.5.2) - '@inquirer/type': 3.0.8(@types/node@24.5.2) - mute-stream: 2.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 24.5.2 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - ip-address@10.0.1: {} - - ip-regex@4.3.0: {} - - ipaddr.js@1.9.1: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-arrayish@0.3.4: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-decimal@2.0.1: {} - - is-docker@2.2.1: {} - - is-extendable@0.1.1: {} - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.4.0 - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@2.0.1: {} - - is-in-ci@2.0.0: {} - - is-ip@3.1.0: - dependencies: - ip-regex: 4.3.0 - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-online@10.0.0: - dependencies: - got: 12.6.1 - p-any: 4.0.0 - p-timeout: 5.1.0 - public-ip: 5.0.0 - - is-plain-obj@4.1.0: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jiti@1.21.7: {} - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsep@1.4.0: {} - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-traverse@1.0.0: {} - - jsonc-parser@2.2.1: {} - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonpath-plus@10.3.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 - - jsonpointer@5.0.1: {} - - katex@0.16.22: - dependencies: - commander: 8.3.0 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - kind-of@6.0.3: {} - - lcm@0.0.3: - dependencies: - gcd: 0.0.1 - - leven@3.1.0: {} - - leven@4.1.0: {} - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - lodash.topath@4.5.2: {} - - lodash@4.17.21: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lowercase-keys@3.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@7.18.3: {} - - lucide-react@0.446.0(react@19.1.1): - dependencies: - react: 19.1.1 - - markdown-extensions@2.0.0: {} - - markdown-table@3.0.4: {} - - math-intrinsics@1.1.0: {} - - mdast-util-find-and-replace@3.0.2: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-extension-frontmatter: 2.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-autolink-literal@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.1 - - mdast-util-gfm-footnote@2.1.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-table@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-task-list-item@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.1.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-math@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - unist-util-remove-position: 5.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 - - mdast-util-to-hast@13.2.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdast@3.0.0: {} - - media-typer@0.3.0: {} - - merge-descriptors@1.0.3: {} - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-frontmatter@2.0.0: - dependencies: - fault: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-autolink-literal@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-footnote@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-strikethrough@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-table@2.1.1: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-tagfilter@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-gfm-task-list-item@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm@3.0.0: - dependencies: - micromark-extension-gfm-autolink-literal: 2.1.0 - micromark-extension-gfm-footnote: 2.1.0 - micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 - micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-math@3.1.0: - dependencies: - '@types/katex': 0.16.7 - devlop: 1.1.0 - katex: 0.16.22 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-expression@3.0.1: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-jsx@3.0.2: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-extension-mdx-md@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-mdxjs-esm@3.0.0: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-extension-mdxjs@3.0.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.2 - micromark-extension-mdx-md: 2.0.0 - micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-mdx-expression@2.0.3: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.2.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@2.0.1: {} - - micromark-util-events-to-acorn@2.0.3: - dependencies: - '@types/estree': 1.0.8 - '@types/unist': 3.0.3 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@3.1.0: {} - - mimic-response@4.0.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - - mintlify@4.2.123(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2): - dependencies: - '@mintlify/cli': 4.0.727(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/node' - - '@types/react' - - bare-buffer - - bufferutil - - debug - - encoding - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - mitt@3.0.1: {} - - mkdirp@1.0.4: {} - - ms@2.0.0: {} - - ms@2.1.3: {} - - mute-stream@2.0.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.11: {} - - negotiator@0.6.3: {} - - neotraverse@0.6.18: {} - - netmask@2.0.2: {} - - next-mdx-remote-client@1.1.2(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(unified@11.0.5): - dependencies: - '@babel/code-frame': 7.27.1 - '@mdx-js/mdx': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1) - react: 19.1.1 - react-dom: 18.3.1(react@19.1.1) - remark-mdx-remove-esm: 1.2.1(unified@11.0.5) - serialize-error: 12.0.0 - vfile: 6.0.3 - vfile-matter: 5.0.1 - transitivePeerDependencies: - - '@types/react' - - supports-color - - unified - - nimma@0.2.3: - dependencies: - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0) - astring: 1.9.0 - jsep: 1.4.0 - optionalDependencies: - jsonpath-plus: 10.3.0 - lodash.topath: 4.5.2 - - nlcst-to-string@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - - node-fetch@2.6.7: - dependencies: - whatwg-url: 5.0.0 - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - normalize-path@3.0.0: {} - - normalize-url@8.1.0: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - oniguruma-parser@0.12.1: {} - - oniguruma-to-es@4.3.3: - dependencies: - oniguruma-parser: 0.12.1 - regex: 6.0.1 - regex-recursion: 6.0.2 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - openapi-types@12.1.3: {} - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-any@4.0.0: - dependencies: - p-cancelable: 3.0.0 - p-some: 6.0.0 - - p-cancelable@3.0.0: {} - - p-some@6.0.0: - dependencies: - aggregate-error: 4.0.1 - p-cancelable: 3.0.0 - - p-timeout@5.1.0: {} - - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3 - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - - package-json-from-dist@1.0.1: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.2.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-latin@7.0.0: - dependencies: - '@types/nlcst': 2.0.3 - '@types/unist': 3.0.3 - nlcst-to-string: 4.0.0 - unist-util-modify-children: 4.0.0 - unist-util-visit-children: 3.0.0 - vfile: 6.0.3 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: {} - - patch-console@2.0.0: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@0.1.12: {} - - pend@1.2.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - pify@2.3.0: {} - - pirates@4.0.7: {} - - pony-cause@1.1.1: {} - - possible-typed-array-names@1.1.0: {} - - postcss-import@15.1.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 - - postcss-js@4.1.0(postcss@8.5.6): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.6 - - postcss-load-config@4.0.2(postcss@8.5.6): - dependencies: - lilconfig: 3.1.3 - yaml: 2.8.1 - optionalDependencies: - postcss: 8.5.6 - - postcss-nested@6.2.0(postcss@8.5.6): - dependencies: - postcss: 8.5.6 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - progress@2.0.3: {} - - property-information@7.1.0: {} - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - public-ip@5.0.0: - dependencies: - dns-socket: 4.2.2 - got: 12.6.1 - is-ip: 3.1.0 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - puppeteer-core@22.15.0: - dependencies: - '@puppeteer/browsers': 2.3.0 - chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) - debug: 4.4.3 - devtools-protocol: 0.0.1312386 - ws: 8.18.3 - transitivePeerDependencies: - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - - puppeteer@22.15.0(typescript@5.9.2): - dependencies: - '@puppeteer/browsers': 2.3.0 - cosmiconfig: 9.0.0(typescript@5.9.2) - devtools-protocol: 0.0.1312386 - puppeteer-core: 22.15.0 - transitivePeerDependencies: - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - typescript - - utf-8-validate - - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - quick-lru@5.1.1: {} - - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - react-dom@18.3.1(react@19.1.1): - dependencies: - loose-envify: 1.4.0 - react: 19.1.1 - scheduler: 0.23.2 - - react-icons@5.5.0(react@19.1.1): - dependencies: - react: 19.1.1 - - react-reconciler@0.32.0(react@19.1.1): - dependencies: - react: 19.1.1 - scheduler: 0.26.0 - - react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.1.1): - dependencies: - react: 19.1.1 - react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.13 - - react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.1.1): - dependencies: - react: 19.1.1 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.1.1) - react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.1.1) - use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.1.1) - optionalDependencies: - '@types/react': 19.1.13 - - react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.1.1): - dependencies: - get-nonce: 1.0.1 - react: 19.1.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.13 - - react@19.1.1: {} - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - recma-build-jsx@1.0.0: - dependencies: - '@types/estree': 1.0.8 - estree-util-build-jsx: 3.0.1 - vfile: 6.0.3 - - recma-jsx@1.0.1(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - estree-util-to-js: 2.0.0 - recma-parse: 1.0.0 - recma-stringify: 1.0.0 - unified: 11.0.5 - - recma-parse@1.0.0: - dependencies: - '@types/estree': 1.0.8 - esast-util-from-js: 2.0.1 - unified: 11.0.5 - vfile: 6.0.3 - - recma-stringify@1.0.0: - dependencies: - '@types/estree': 1.0.8 - estree-util-to-js: 2.0.0 - unified: 11.0.5 - vfile: 6.0.3 - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.0.1: - dependencies: - regex-utilities: 2.3.0 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - rehype-katex@7.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/katex': 0.16.7 - hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.2 - katex: 0.16.22 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - - rehype-minify-whitespace@6.0.2: - dependencies: - '@types/hast': 3.0.4 - hast-util-minify-whitespace: 1.0.1 - - rehype-parse@9.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-html: 2.0.3 - unified: 11.0.5 - - rehype-recma@1.0.0: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.3 - transitivePeerDependencies: - - supports-color - - remark-frontmatter@5.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 - micromark-extension-frontmatter: 2.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-gfm@4.0.1: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 - micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-math@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-math: 3.0.0 - micromark-extension-math: 3.1.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-mdx-remove-esm@1.2.1(unified@11.0.5): - dependencies: - '@types/mdast': 4.0.4 - mdast-util-mdxjs-esm: 2.0.1 - unified: 11.0.5 - unist-util-remove: 4.0.0 - transitivePeerDependencies: - - supports-color - - remark-mdx@3.1.1: - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.2: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 - unified: 11.0.5 - vfile: 6.0.3 - - remark-smartypants@3.0.2: - dependencies: - retext: 9.0.0 - retext-smartypants: 6.2.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 - unified: 11.0.5 - - remark@15.0.1: - dependencies: - '@types/mdast': 4.0.4 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - resolve-alpn@1.2.1: {} - - resolve-from@4.0.0: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@3.0.0: - dependencies: - lowercase-keys: 3.0.0 - - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retext-latin@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - parse-latin: 7.0.0 - unified: 11.0.5 - - retext-smartypants@6.2.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unist-util-visit: 5.0.0 - - retext-stringify@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unified: 11.0.5 - - retext@9.0.0: - dependencies: - '@types/nlcst': 2.0.3 - retext-latin: 4.0.0 - retext-stringify: 4.0.0 - unified: 11.0.5 - - reusify@1.1.0: {} - - run-async@4.0.6: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@1.1.1: {} - - safer-buffer@2.1.2: {} - - sax@1.4.1: {} - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - scheduler@0.26.0: {} - - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - - semver@7.7.2: {} - - send@0.19.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - serialize-error@12.0.0: - dependencies: - type-fest: 4.41.0 - - serve-static@1.16.2: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.0 - transitivePeerDependencies: - - supports-color - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - setprototypeof@1.2.0: {} - - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.1.1 - semver: 7.7.2 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shiki@3.13.0: - dependencies: - '@shikijs/core': 3.13.0 - '@shikijs/engine-javascript': 3.13.0 - '@shikijs/engine-oniguruma': 3.13.0 - '@shikijs/langs': 3.13.0 - '@shikijs/themes': 3.13.0 - '@shikijs/types': 3.13.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-eval@1.0.1: - dependencies: - jsep: 1.4.0 - - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - smart-buffer@4.2.0: {} - - socket.io-adapter@2.5.5: - dependencies: - debug: 4.3.7 - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-parser@4.2.4: - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - - socket.io@4.8.1: - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - cors: 2.8.5 - debug: 4.3.7 - engine.io: 6.6.4 - socket.io-adapter: 2.5.5 - socket.io-parser: 4.2.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.7 - transitivePeerDependencies: - - supports-color - - socks@2.8.7: - dependencies: - ip-address: 10.0.1 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map@0.6.1: - optional: true - - source-map@0.7.6: {} - - space-separated-tokens@2.0.2: {} - - sprintf-js@1.0.3: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - statuses@2.0.1: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - streamx@2.23.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.3 - transitivePeerDependencies: - - react-native-b4a - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string-width@7.2.0: - dependencies: - emoji-regex: 10.5.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-bom-string@1.0.0: {} - - style-to-js@1.1.17: - dependencies: - style-to-object: 1.0.9 - - style-to-object@1.0.9: - dependencies: - inline-style-parser: 0.2.4 - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - ts-interface-checker: 0.1.13 - - supports-preserve-symlinks-flag@1.0.0: {} - - tailwindcss@3.4.17: - 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.6 - postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6) - postcss-nested: 6.2.0(postcss@8.5.6) - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node - - tar-fs@3.1.1: - dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.4.4 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-buffer - - react-native-b4a - - tar-stream@3.1.7: - dependencies: - b4a: 1.7.2 - fast-fifo: 1.3.2 - streamx: 2.23.0 - transitivePeerDependencies: - - react-native-b4a - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - text-decoder@1.2.3: - dependencies: - b4a: 1.7.2 - transitivePeerDependencies: - - react-native-b4a - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - through@2.3.8: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - tr46@0.0.3: {} - - trim-lines@3.0.1: {} - - trim-trailing-lines@2.1.0: {} - - trough@2.2.0: {} - - ts-interface-checker@0.1.13: {} - - tslib@1.14.1: {} - - tslib@2.8.1: {} - - twoslash-protocol@0.3.4: {} - - twoslash@0.3.4(typescript@5.9.2): - dependencies: - '@typescript/vfs': 1.6.1(typescript@5.9.2) - twoslash-protocol: 0.3.4 - typescript: 5.9.2 - transitivePeerDependencies: - - supports-color - - type-fest@4.41.0: {} - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript@5.9.2: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - unbzip2-stream@1.4.3: - dependencies: - buffer: 5.7.1 - through: 2.3.8 - - undici-types@7.12.0: {} - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unist-builder@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-is@5.2.1: - dependencies: - '@types/unist': 2.0.11 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-map@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-modify-children@4.0.0: - dependencies: - '@types/unist': 3.0.3 - array-iterate: 2.0.1 - - unist-util-position-from-estree@2.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - - unist-util-remove@4.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-children@3.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@5.1.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@4.1.2: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - urijs@1.19.11: {} - - urlpattern-polyfill@10.0.0: {} - - use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.1.1): - dependencies: - react: 19.1.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.13 - - use-sidecar@1.1.3(@types/react@19.1.13)(react@19.1.1): - dependencies: - detect-node-es: 1.1.0 - react: 19.1.1 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.1.13 - - util-deprecate@1.0.2: {} - - utility-types@3.11.0: {} - - utils-merge@1.0.1: {} - - vary@1.1.2: {} - - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - - vfile-matter@5.0.1: - dependencies: - vfile: 6.0.3 - yaml: 2.8.1 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - web-namespaces@2.0.1: {} - - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - widest-line@5.0.0: - dependencies: - string-width: 7.2.0 - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - ws@8.17.1: {} - - ws@8.18.3: {} - - xml2js@0.6.2: - dependencies: - sax: 1.4.1 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - - y18n@5.0.8: {} - - yallist@4.0.0: {} - - yaml@2.8.1: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yoctocolors-cjs@2.1.3: {} - - yoga-layout@3.2.1: {} - - zod-to-json-schema@3.24.6(zod@3.25.76): - dependencies: - zod: 3.25.76 - - zod@3.23.8: {} - - zod@3.25.76: {} - - zwitch@2.0.4: {} diff --git a/integrations/langgraph/typescript/examples/pnpm-lock.yaml b/integrations/langgraph/typescript/examples/pnpm-lock.yaml deleted file mode 100644 index 7a1da5201..000000000 --- a/integrations/langgraph/typescript/examples/pnpm-lock.yaml +++ /dev/null @@ -1,393 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - dependencies: - '@langchain/core': - specifier: ^0.3.66 - version: 0.3.66(openai@5.10.2(zod@3.25.76)) - '@langchain/langgraph': - specifier: ^0.2.65 - version: 0.2.74(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))(zod-to-json-schema@3.24.6(zod@3.25.76)) - '@langchain/openai': - specifier: ^0.6.3 - version: 0.6.3(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))) - dotenv: - specifier: ^16.4.5 - version: 16.6.1 - uuid: - specifier: ^10.0.0 - version: 10.0.0 - devDependencies: - '@types/node': - specifier: ^20.0.0 - version: 20.19.9 - '@types/uuid': - specifier: ^10.0.0 - version: 10.0.0 - typescript: - specifier: ^5.0.0 - version: 5.8.3 - -packages: - - '@cfworker/json-schema@4.1.1': - resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - - '@langchain/core@0.3.66': - resolution: {integrity: sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw==} - engines: {node: '>=18'} - - '@langchain/langgraph-checkpoint@0.0.18': - resolution: {integrity: sha512-IS7zJj36VgY+4pf8ZjsVuUWef7oTwt1y9ylvwu0aLuOn1d0fg05Om9DLm3v2GZ2Df6bhLV1kfWAM0IAl9O5rQQ==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0' - - '@langchain/langgraph-sdk@0.0.104': - resolution: {integrity: sha512-wUO6GMy65Y7DsWtjTJ3dA59enrZy2wN4o48AMYN7dF7u/PMXXYyBjBCKSzgVWqO6uWH2yNpyGDrcMwKuk5kQLA==} - peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0' - react: ^18 || ^19 - react-dom: ^18 || ^19 - peerDependenciesMeta: - '@langchain/core': - optional: true - react: - optional: true - react-dom: - optional: true - - '@langchain/langgraph@0.2.74': - resolution: {integrity: sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.36 <0.3.0 || >=0.3.40 < 0.4.0' - zod-to-json-schema: ^3.x - peerDependenciesMeta: - zod-to-json-schema: - optional: true - - '@langchain/openai@0.6.3': - resolution: {integrity: sha512-dSNuXDTJitDzN8D2wFNqWVELDbBRhMpJiFeiWpHjfPuq7R6wSjzNNY/Uk6x+FLpvbOs/zKNWy5+0q0p3KrCjRQ==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.3.58 <0.4.0' - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@20.19.9': - resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - console-table-printer@2.14.6: - resolution: {integrity: sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - js-tiktoken@1.0.20: - resolution: {integrity: sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==} - - langsmith@0.3.49: - resolution: {integrity: sha512-hVLpGzTDq4dFffScKuF9yIuwXqp6LJCsvxK4UjmLae+oEodfnFIQ6yVmNyhxFnm3QuRl1NY8qLFul3k+R1YnGQ==} - peerDependencies: - '@opentelemetry/api': '*' - '@opentelemetry/exporter-trace-otlp-proto': '*' - '@opentelemetry/sdk-trace-base': '*' - openai: '*' - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@opentelemetry/exporter-trace-otlp-proto': - optional: true - '@opentelemetry/sdk-trace-base': - optional: true - openai: - optional: true - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - openai@5.10.2: - resolution: {integrity: sha512-n+vi74LzHtvlKcDPn9aApgELGiu5CwhaLG40zxLTlFQdoSJCLACORIPC2uVQ3JEYAbqapM+XyRKFy2Thej7bIw==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - - simple-wcswidth@1.1.2: - resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} - peerDependencies: - zod: ^3.24.1 - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - -snapshots: - - '@cfworker/json-schema@4.1.1': {} - - '@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))': - dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.20 - langsmith: 0.3.49(openai@5.10.2(zod@3.25.76)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - '@langchain/langgraph-checkpoint@0.0.18(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) - uuid: 10.0.0 - - '@langchain/langgraph-sdk@0.0.104(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))': - dependencies: - '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 - optionalDependencies: - '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) - - '@langchain/langgraph@0.2.74(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))(zod-to-json-schema@3.24.6(zod@3.25.76))': - dependencies: - '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) - '@langchain/langgraph-checkpoint': 0.0.18(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))) - '@langchain/langgraph-sdk': 0.0.104(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))) - uuid: 10.0.0 - zod: 3.25.76 - optionalDependencies: - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - react - - react-dom - - '@langchain/openai@0.6.3(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) - js-tiktoken: 1.0.20 - openai: 5.10.2(zod@3.25.76) - zod: 3.25.76 - transitivePeerDependencies: - - ws - - '@types/json-schema@7.0.15': {} - - '@types/node@20.19.9': - dependencies: - undici-types: 6.21.0 - - '@types/retry@0.12.0': {} - - '@types/uuid@10.0.0': {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - base64-js@1.5.1: {} - - camelcase@6.3.0: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - console-table-printer@2.14.6: - dependencies: - simple-wcswidth: 1.1.2 - - decamelize@1.2.0: {} - - dotenv@16.6.1: {} - - eventemitter3@4.0.7: {} - - has-flag@4.0.0: {} - - js-tiktoken@1.0.20: - dependencies: - base64-js: 1.5.1 - - langsmith@0.3.49(openai@5.10.2(zod@3.25.76)): - dependencies: - '@types/uuid': 10.0.0 - chalk: 4.1.2 - console-table-printer: 2.14.6 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.7.2 - uuid: 10.0.0 - optionalDependencies: - openai: 5.10.2(zod@3.25.76) - - mustache@4.2.0: {} - - openai@5.10.2(zod@3.25.76): - optionalDependencies: - zod: 3.25.76 - - p-finally@1.0.0: {} - - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - retry@0.13.1: {} - - semver@7.7.2: {} - - simple-wcswidth@1.1.2: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - typescript@5.8.3: {} - - undici-types@6.21.0: {} - - uuid@10.0.0: {} - - uuid@9.0.1: {} - - zod-to-json-schema@3.24.6(zod@3.25.76): - dependencies: - zod: 3.25.76 - - zod@3.25.76: {} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 0758e2016..000000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,22346 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - prettier: - specifier: ^3.5.3 - version: 3.6.2 - turbo: - specifier: ^2.4.4 - version: 2.5.8 - typescript: - specifier: 5.8.2 - version: 5.8.2 - - apps/client-cli-example: - dependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../sdks/typescript/packages/core - '@ag-ui/mastra': - specifier: workspace:* - version: link:../../integrations/mastra/typescript - '@ai-sdk/openai': - specifier: 1.3.22 - version: 1.3.22(zod@3.25.76) - '@mastra/client-js': - specifier: 0.10.18 - version: 0.10.18(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/core': - specifier: 0.12.1 - version: 0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/libsql': - specifier: 0.12.0 - version: 0.12.0(@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/loggers': - specifier: 0.10.5 - version: 0.10.5(@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/memory': - specifier: 0.12.0 - version: 0.12.0(@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(react@19.2.0) - open: - specifier: ^10.1.2 - version: 10.2.0 - zod: - specifier: ^3.22.4 - version: 3.25.76 - devDependencies: - '@types/node': - specifier: ^20 - version: 20.19.21 - tsx: - specifier: ^4.7.0 - version: 4.20.6 - typescript: - specifier: ^5 - version: 5.9.3 - - apps/dojo: - dependencies: - '@a2a-js/sdk': - specifier: 0.2.5 - version: 0.2.5 - '@ag-ui/a2a': - specifier: workspace:* - version: link:../../integrations/a2a/typescript - '@ag-ui/a2a-middleware': - specifier: workspace:* - version: link:../../middlewares/a2a-middleware - '@ag-ui/adk': - specifier: workspace:* - version: link:../../integrations/adk-middleware/typescript - '@ag-ui/agno': - specifier: workspace:* - version: link:../../integrations/agno/typescript - '@ag-ui/client': - specifier: workspace:* - version: link:../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../sdks/typescript/packages/core - '@ag-ui/crewai': - specifier: workspace:* - version: link:../../integrations/crew-ai/typescript - '@ag-ui/encoder': - specifier: workspace:* - version: link:../../sdks/typescript/packages/encoder - '@ag-ui/langgraph': - specifier: workspace:* - version: link:../../integrations/langgraph/typescript - '@ag-ui/llamaindex': - specifier: workspace:* - version: link:../../integrations/llama-index/typescript - '@ag-ui/mastra': - specifier: workspace:* - version: link:../../integrations/mastra/typescript - '@ag-ui/middleware-starter': - specifier: workspace:* - version: link:../../middlewares/middleware-starter - '@ag-ui/proto': - specifier: workspace:* - version: link:../../sdks/typescript/packages/proto - '@ag-ui/pydantic-ai': - specifier: workspace:* - version: link:../../integrations/pydantic-ai/typescript - '@ag-ui/server-starter': - specifier: workspace:* - version: link:../../integrations/server-starter/typescript - '@ag-ui/server-starter-all-features': - specifier: workspace:* - version: link:../../integrations/server-starter-all-features/typescript - '@ag-ui/spring-ai': - specifier: workspace:* - version: link:../../integrations/community/spring-ai/typescript - '@ag-ui/vercel-ai-sdk': - specifier: workspace:* - version: link:../../integrations/vercel-ai-sdk/typescript - '@ai-sdk/openai': - specifier: ^2.0.42 - version: 2.0.52(zod@3.25.76) - '@copilotkit/react-core': - specifier: 1.10.6 - version: 1.10.6(@types/react@19.2.2)(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@copilotkit/react-ui': - specifier: 1.10.6 - version: 1.10.6(@types/react@19.2.2)(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@copilotkit/runtime': - specifier: 1.10.6 - version: 1.10.6(iqshwn2xropb3vpfei3flnb2ay) - '@copilotkit/runtime-client-gql': - specifier: 1.10.6 - version: 1.10.6(graphql@16.11.0)(react@19.2.0) - '@copilotkit/shared': - specifier: 1.10.6 - version: 1.10.6 - '@copilotkitnext/agent': - specifier: 0.0.19-alpha.0 - version: 0.0.19-alpha.0 - '@copilotkitnext/react': - specifier: 0.0.19-alpha.0 - version: 0.0.19-alpha.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@copilotkitnext/runtime': - specifier: 0.0.19-alpha.0 - version: 0.0.19-alpha.0(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@mastra/client-js': - specifier: ^0.15.2 - version: 0.15.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/core': - specifier: ^0.20.2 - version: 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/dynamodb': - specifier: ^0.15.6 - version: 0.15.6(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/libsql': - specifier: ^0.15.1 - version: 0.15.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/loggers': - specifier: ^0.10.15 - version: 0.10.15(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/memory': - specifier: ^0.15.6 - version: 0.15.6(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(react@19.2.0)(zod@3.25.76) - '@mdx-js/loader': - specifier: ^3.1.0 - version: 3.1.1 - '@mdx-js/mdx': - specifier: ^3.1.0 - version: 3.1.1 - '@mdx-js/react': - specifier: ^3.1.0 - version: 3.1.1(@types/react@19.2.2)(react@19.2.0) - '@monaco-editor/react': - specifier: ^4.7.0 - version: 4.7.0(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@next/mdx': - specifier: ^15.2.3 - version: 15.5.5(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)) - '@phosphor-icons/react': - specifier: ^2.1.10 - version: 2.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-dropdown-menu': - specifier: ^2.1.6 - version: 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': - specifier: ^1.2.3 - version: 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-tabs': - specifier: ^1.1.3 - version: 1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tiptap/extension-color': - specifier: ^2.11.5 - version: 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/extension-text-style@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))) - '@tiptap/extension-placeholder': - specifier: ^2.11.5 - version: 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/pm': - specifier: ^2.11.5 - version: 2.26.3 - '@tiptap/react': - specifier: ^2.11.5 - version: 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tiptap/starter-kit': - specifier: ^2.11.5 - version: 2.26.3 - '@types/react-syntax-highlighter': - specifier: ^15.5.13 - version: 15.5.13 - class-variance-authority: - specifier: ^0.7.1 - version: 0.7.1 - clsx: - specifier: ^2.1.1 - version: 2.1.1 - dedent: - specifier: ^1.7.0 - version: 1.7.0 - diff: - specifier: ^7.0.0 - version: 7.0.0 - embla-carousel-react: - specifier: ^8.6.0 - version: 8.6.0(react@19.2.0) - fast-json-patch: - specifier: ^3.1.1 - version: 3.1.1 - hono: - specifier: ^4.10.3 - version: 4.10.3 - lucide-react: - specifier: ^0.477.0 - version: 0.477.0(react@19.2.0) - markdown-it: - specifier: ^14.1.0 - version: 14.1.0 - markdown-it-ins: - specifier: ^4.0.0 - version: 4.0.0 - next: - specifier: 15.2.1 - version: 15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.56.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - next-themes: - specifier: ^0.4.6 - version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - openai: - specifier: ^4.98.0 - version: 4.104.0(ws@8.18.3)(zod@3.25.76) - react: - specifier: ^19.0.0 - version: 19.2.0 - react-dom: - specifier: ^19.0.0 - version: 19.2.0(react@19.2.0) - react-markdown: - specifier: ^10.1.0 - version: 10.1.0(@types/react@19.2.2)(react@19.2.0) - react-syntax-highlighter: - specifier: ^15.6.1 - version: 15.6.6(react@19.2.0) - rxjs: - specifier: 7.8.1 - version: 7.8.1 - tailwind-merge: - specifier: ^3.3.0 - version: 3.3.1 - tailwindcss-animate: - specifier: ^1.0.7 - version: 1.0.7(tailwindcss@4.1.14) - untruncate-json: - specifier: ^0.0.1 - version: 0.0.1 - uuid: - specifier: ^11.1.0 - version: 11.1.0 - zod: - specifier: ^3.25.67 - version: 3.25.76 - devDependencies: - '@eslint/eslintrc': - specifier: ^3 - version: 3.3.1 - '@shadcn/ui': - specifier: ^0.0.4 - version: 0.0.4 - '@tailwindcss/postcss': - specifier: ^4 - version: 4.1.14 - '@tailwindcss/typography': - specifier: ^0.5.16 - version: 0.5.19(tailwindcss@4.1.14) - '@types/diff': - specifier: ^7.0.1 - version: 7.0.2 - '@types/markdown-it': - specifier: ^14.1.2 - version: 14.1.2 - '@types/node': - specifier: ^20 - version: 20.19.21 - '@types/react': - specifier: ^19 - version: 19.2.2 - '@types/react-dom': - specifier: ^19 - version: 19.2.2(@types/react@19.2.2) - concurrently: - specifier: ^9.2.0 - version: 9.2.1 - eslint: - specifier: ^9 - version: 9.37.0(jiti@2.6.1) - eslint-config-next: - specifier: 15.2.1 - version: 15.2.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - tailwindcss: - specifier: ^4 - version: 4.1.14 - tsx: - specifier: ^4.7.0 - version: 4.20.6 - typescript: - specifier: ^5 - version: 5.9.3 - wait-port: - specifier: ^1.1.0 - version: 1.1.0 - - integrations/a2a/typescript: - dependencies: - '@a2a-js/sdk': - specifier: ^0.2.2 - version: 0.2.5 - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/adk-middleware/typescript: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/agno/typescript: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/community/spring-ai/typescript: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/crew-ai/typescript: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/langgraph/typescript: - dependencies: - '@langchain/core': - specifier: ^0.3.66 - version: 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)) - '@langchain/langgraph-sdk': - specifier: ^0.1.2 - version: 0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - partial-json: - specifier: ^0.1.7 - version: 0.1.7 - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/llama-index/typescript: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/mastra/typescript: - dependencies: - '@ai-sdk/ui-utils': - specifier: ^1.1.19 - version: 1.2.11(zod@3.25.76) - '@copilotkit/runtime': - specifier: ^1.10.5 - version: 1.10.6(jkrvcwfv2zltibfgwihn5nuqn4) - '@mastra/client-js': - specifier: ^0.15.2 - version: 0.15.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - rxjs: - specifier: 7.8.1 - version: 7.8.1 - zod: - specifier: ^3.25.67 - version: 3.25.76 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@mastra/core': - specifier: ^0.20.1 - version: 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/mastra/typescript/examples: - dependencies: - '@ai-sdk/openai': - specifier: ^2.0.23 - version: 2.0.52(zod@3.25.76) - '@mastra/client-js': - specifier: ^0.15.2 - version: 0.15.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/core': - specifier: ^0.20.2 - version: 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/libsql': - specifier: ^0.15.1 - version: 0.15.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/loggers': - specifier: ^0.10.15 - version: 0.10.15(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/memory': - specifier: ^0.15.6 - version: 0.15.6(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(react@19.2.0)(zod@3.25.76) - zod: - specifier: ^3.25.48 - version: 3.25.76 - devDependencies: - '@types/node': - specifier: ^22.15.29 - version: 22.18.10 - mastra: - specifier: ^0.15.1 - version: 0.15.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.9.3)(zod@3.25.76) - typescript: - specifier: ^5.8.3 - version: 5.9.3 - - integrations/pydantic-ai/typescript: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/server-starter-all-features/typescript: - dependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/server-starter/typescript: - dependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - integrations/vercel-ai-sdk/typescript: - dependencies: - ai: - specifier: ^4.3.16 - version: 4.3.19(react@19.2.0)(zod@3.25.76) - rxjs: - specifier: 7.8.1 - version: 7.8.1 - zod: - specifier: ^3.22.4 - version: 3.25.76 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/client - '@ag-ui/core': - specifier: workspace:* - version: link:../../../sdks/typescript/packages/core - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - middlewares/a2a-middleware: - dependencies: - '@a2a-js/sdk': - specifier: ^0.2.2 - version: 0.2.5 - ai: - specifier: ^4.3.16 - version: 4.3.19(react@19.2.0)(zod@3.25.76) - rxjs: - specifier: 7.8.1 - version: 7.8.1 - zod: - specifier: ^3.22.4 - version: 3.25.76 - devDependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../sdks/typescript/packages/client - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - middlewares/middleware-starter: - dependencies: - '@ag-ui/client': - specifier: workspace:* - version: link:../../sdks/typescript/packages/client - rxjs: - specifier: 7.8.1 - version: 7.8.1 - devDependencies: - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - sdks/typescript/packages/cli: - dependencies: - '@types/inquirer': - specifier: ^9.0.8 - version: 9.0.9 - commander: - specifier: ^12.1.0 - version: 12.1.0 - giget: - specifier: 2.0.0 - version: 2.0.0 - inquirer: - specifier: ^12.6.3 - version: 12.10.0(@types/node@20.19.21) - devDependencies: - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - sdks/typescript/packages/client: - dependencies: - '@ag-ui/core': - specifier: workspace:* - version: link:../core - '@ag-ui/encoder': - specifier: workspace:* - version: link:../encoder - '@ag-ui/proto': - specifier: workspace:* - version: link:../proto - '@types/uuid': - specifier: ^10.0.0 - version: 10.0.0 - compare-versions: - specifier: ^6.1.1 - version: 6.1.1 - fast-json-patch: - specifier: ^3.1.1 - version: 3.1.1 - rxjs: - specifier: 7.8.1 - version: 7.8.1 - untruncate-json: - specifier: ^0.0.1 - version: 0.0.1 - uuid: - specifier: ^11.1.0 - version: 11.1.0 - zod: - specifier: ^3.22.4 - version: 3.25.76 - devDependencies: - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - '@types/node': - specifier: ^20.11.19 - version: 20.19.21 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.3.3 - version: 5.9.3 - - sdks/typescript/packages/core: - dependencies: - rxjs: - specifier: 7.8.1 - version: 7.8.1 - zod: - specifier: ^3.22.4 - version: 3.25.76 - devDependencies: - '@types/jest': - specifier: ^29.5.12 - version: 29.5.14 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.8.2 - version: 5.9.3 - - sdks/typescript/packages/encoder: - dependencies: - '@ag-ui/core': - specifier: workspace:* - version: link:../core - '@ag-ui/proto': - specifier: workspace:* - version: link:../proto - devDependencies: - '@types/jest': - specifier: ^29.5.12 - version: 29.5.14 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.8.2 - version: 5.9.3 - - sdks/typescript/packages/proto: - dependencies: - '@ag-ui/core': - specifier: workspace:* - version: link:../core - '@bufbuild/protobuf': - specifier: ^2.2.5 - version: 2.9.0 - '@protobuf-ts/protoc': - specifier: ^2.11.1 - version: 2.11.1 - devDependencies: - '@jest/globals': - specifier: ^29.7.0 - version: 29.7.0 - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 - jest: - specifier: ^29.7.0 - version: 29.7.0(@types/node@20.19.21) - ts-jest: - specifier: ^29.1.2 - version: 29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3) - ts-proto: - specifier: ^2.7.0 - version: 2.7.7 - tsup: - specifier: ^8.0.2 - version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1) - typescript: - specifier: ^5.8.2 - version: 5.9.3 - -packages: - - '@0no-co/graphql.web@1.2.0': - resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - graphql: - optional: true - - '@a2a-js/sdk@0.2.5': - resolution: {integrity: sha512-VTDuRS5V0ATbJ/LkaQlisMnTAeYKXAK6scMguVBstf+KIBQ7HIuKhiXLv+G/hvejkV+THoXzoNifInAkU81P1g==} - engines: {node: '>=18'} - - '@ag-ui/client@0.0.35': - resolution: {integrity: sha512-rHtMQSU232dZeVx9qAGt1+j4ar4RWqwFanXcyNxAwbAh0XrY7VZeXFBDUeazy1LtBoViS7xehX8V1Ssf1a+bUw==} - - '@ag-ui/client@0.0.40-alpha.10': - resolution: {integrity: sha512-b1hcS1+nMzsNSSt4E3tryFD4Bd9DQqcqYg0R1CeD9dx4bbDg2cF0sjtUBDpbAQ6N3l4438VranGE9Sj+UozUBg==} - - '@ag-ui/core@0.0.35': - resolution: {integrity: sha512-YAqrln3S3fdo+Hs5FFQPODXiBttyilv/E3xSSHCuxqC0Y/Fp3+VqyDx97BorO3NVp2VKZ9cG2nsO3cbmcTwkQw==} - - '@ag-ui/core@0.0.37': - resolution: {integrity: sha512-7bmjPn1Ol0Zo00F+MrPr0eOwH4AFZbhmq/ZMhCsrMILtVYBiBLcLU9QFBpBL3Zm9MCHha8b79N7JE2FzwcMaVA==} - - '@ag-ui/core@0.0.40-alpha.10': - resolution: {integrity: sha512-VczUym5UTwVdvJPD95z4cqSEnrygjINqrqZX4ru1gnNlf8PPmhElNPdE/ZiFEgmZAXaxzK6rI+LB6iDx5NltQA==} - - '@ag-ui/core@0.0.40-alpha.11': - resolution: {integrity: sha512-zGOl1NSF3QOgHCniu58BeicIuCRPiuxQFmDFXb5asciI60LLM9GdF+E58EwUczMsq/+ouK5lNp9lKdrduiURWg==} - - '@ag-ui/encoder@0.0.35': - resolution: {integrity: sha512-Ym0h0ZKIiD1Ld3+e3v/WQSogY62xs72ysoEBW1kt+dDs79QazBsW5ZlcBBj2DelEs9NrczQLxTVEvrkcvhrHqA==} - - '@ag-ui/encoder@0.0.40-alpha.10': - resolution: {integrity: sha512-aoBhFIcX+SGWzvw/FAK4+mHY6NIz5YA7DchjRCBWAyAGWrdSEObKRgPRifahOrl3hhKgSZo0MYwOin9Q33B+rg==} - - '@ag-ui/encoder@0.0.40-alpha.11': - resolution: {integrity: sha512-T/sLvCIpDK2H7I3/XI3Sa8kMRBuvpZTs+zRJfcpFyzLWfDbqovOXLACmMeruap7tlmk2IPXcY9CVUmJsQPBwjw==} - - '@ag-ui/langgraph@0.0.19-alpha.1': - resolution: {integrity: sha512-rX8Y4LSxTXWUMFzCspO0c42b6YWGTuciP69Okrh7Lw3kpGsmFq/zmXoBLFz654Yuii2zLHl5mZvkBJ5a3nI6lA==} - peerDependencies: - '@ag-ui/client': 0.0.40-alpha.7 - '@ag-ui/core': 0.0.40-alpha.7 - - '@ag-ui/proto@0.0.35': - resolution: {integrity: sha512-+rz3LAYHcR3D2xVgRKa7QE5mp+cwmZs6j+1XxG5dT7HNdg51uKea12L57EVY2bxE3JzpAvCIgOjFEmQCNH82pw==} - - '@ag-ui/proto@0.0.40-alpha.10': - resolution: {integrity: sha512-d7FzAIjWyQzaMEZyMkTMgIyW+qK7LUg2T/MpjAGqWjjcrWGk2Zh6DU/rNMwMbYnK/YlXS3Ljo5a5gI95SrLS+Q==} - - '@ag-ui/proto@0.0.40-alpha.11': - resolution: {integrity: sha512-AlPaBBDdVAl8ZAu6fW/knFI4XDmSQJHDy6ADi+va8Hx4oPcG7cI9WhBaEVqETDLqhglRrFfGMt7KeQL+1NMo8Q==} - - '@ai-sdk/anthropic@2.0.23': - resolution: {integrity: sha512-ZEBiiv1UhjGjBwUU63pFhLK5LCSlNDb1idY9K1oZHm5/Fda1cuTojf32tOp0opH0RPbPAN/F8fyyNjbU33n9Kw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/gateway@1.0.33': - resolution: {integrity: sha512-v9i3GPEo4t3fGcSkQkc07xM6KJN75VUv7C1Mqmmsu2xD8lQwnQfsrgAXyNuWe20yGY0eHuheSPDZhiqsGKtH1g==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/google@2.0.17': - resolution: {integrity: sha512-6LyuUrCZuiULg0rUV+kT4T2jG19oUntudorI4ttv1ARkSbwl8A39ue3rA487aDDy6fUScdbGFiV5Yv/o4gidVA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/openai-compatible@1.0.19': - resolution: {integrity: sha512-hnsqPCCSNKgpZRNDOAIXZs7OcUDM4ut5ggWxj2sjB4tNL/aBn/xrM7pJkqu+WuPowyrE60wPVSlw0LvtXAlMXQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/openai@1.3.22': - resolution: {integrity: sha512-QwA+2EkG0QyjVR+7h6FE7iOu2ivNqAVMm9UJZkVxxTk5OIq5fFJDTEI/zICEMuHImTTXR2JjsL6EirJ28Jc4cw==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.0.0 - - '@ai-sdk/openai@2.0.42': - resolution: {integrity: sha512-9mM6QS8k0ooH9qMC27nlrYLQmNDnO6Rk0JTmFo/yUxpABEWOcvQhMWNHbp9lFL6Ty5vkdINrujhsAQfWuEleOg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/openai@2.0.52': - resolution: {integrity: sha512-n1arAo4+63e6/FFE6z/1ZsZbiOl4cfsoZ3F4i2X7LPIEea786Y2yd7Qdr7AdB4HTLVo3OSb1PHVIcQmvYIhmEA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider-utils@2.2.8': - resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - - '@ai-sdk/provider-utils@3.0.10': - resolution: {integrity: sha512-T1gZ76gEIwffep6MWI0QNy9jgoybUHE7TRaHB5k54K8mF91ciGFlbtCGxDYhMH3nCRergKwYFIDeFF0hJSIQHQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider-utils@3.0.12': - resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/provider@1.1.3': - resolution: {integrity: sha512-qZMxYJ0qqX/RfnuIaab+zp8UAeJn/ygXXAffR5I4N0n1IrvA6qBsjc8hXLmBiMV2zoXlifkacF7sEFnYnjBcqg==} - engines: {node: '>=18'} - - '@ai-sdk/provider@2.0.0': - resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==} - engines: {node: '>=18'} - - '@ai-sdk/react@1.2.12': - resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - zod: - optional: true - - '@ai-sdk/ui-utils@1.2.11': - resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.23.8 - - '@ai-sdk/xai@2.0.23': - resolution: {integrity: sha512-Xo4r5W/Wvi4mkCD98DoafNxj9V3xysUlWOeqAYpqKeKkNQ2xtOTly2MHq+gP6wKud0Y/mI7hemkCMQgH6HOwzQ==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@antfu/install-pkg@1.1.0': - resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - - '@antfu/utils@9.3.0': - resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==} - - '@anthropic-ai/sdk@0.27.3': - resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} - - '@anthropic-ai/sdk@0.57.0': - resolution: {integrity: sha512-z5LMy0MWu0+w2hflUgj4RlJr1R+0BxKXL7ldXTO8FasU8fu599STghO+QKwId2dAD0d464aHtU+ChWuRHw4FNw==} - hasBin: true - - '@apidevtools/json-schema-ref-parser@11.9.3': - resolution: {integrity: sha512-60vepv88RwcJtSHrD6MjIL6Ta3SOYbgfnkHb+ppAVK+o9mXprRtulx7VlRl3lN3bbvysAfCS7WMVfhUYemB0IQ==} - engines: {node: '>= 16'} - - '@apidevtools/json-schema-ref-parser@14.2.1': - resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==} - engines: {node: '>= 20'} - peerDependencies: - '@types/json-schema': ^7.0.15 - - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-bedrock-agent-runtime@3.910.0': - resolution: {integrity: sha512-03xy78mQNBWmLrHT+Tx1Q3oVG4Y/cSQTYzuRPCdpzpgbWXTGJ5yNx8lzdX1Xys7yyGYbw2kX5IzdBiBxk66Vdw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-bedrock-runtime@3.910.0': - resolution: {integrity: sha512-qWzvNFuv0fZWvc5cpMm2S5CRsn5EKUeqb3OL8PAVk4QPSJmFnX3RMlELxnd4+o1mvpYNs6fxwjEHN0SYPBFdPw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-dynamodb@3.910.0': - resolution: {integrity: sha512-taIbikBDq1J3e6Hk1YIe3736l2Ep0blzY5JRuNnXeh1xJxnINaWH3BQW0w+OXmNThV/LRYruOru6+QAd2BekmA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-kendra@3.910.0': - resolution: {integrity: sha512-hzSspLIBXWYk1iqKV5oNNbtF3CP0so5hPXAuOcGHysv+OIV+L98moUH4oYBMWeaGCjBZixE0+W3xHQS1VG8k7A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.910.0': - resolution: {integrity: sha512-oEWXhe2RHiSPKxhrq1qp7M4fxOsxMIJc4d75z8tTLLm5ujlmTZYU3kd0l2uBBaZSlbkrMiefntT6XrGint1ibw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.910.0': - resolution: {integrity: sha512-b/FVNyPxZMmBp+xDwANDgR6o5Ehh/RTY9U/labH56jJpte196Psru/FmQULX3S6kvIiafQA9JefWUq81SfWVLg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.910.0': - resolution: {integrity: sha512-Os8I5XtTLBBVyHJLxrEB06gSAZeFMH2jVoKhAaFybjOTiV7wnjBgjvWjRfStnnXs7p9d+vc/gd6wIZHjony5YQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.910.0': - resolution: {integrity: sha512-3KiGsTlqMnvthv90K88Uv3SvaUbmcTShBIVWYNaHdbrhrjVRR08dm2Y6XjQILazLf1NPFkxUou1YwCWK4nae1Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.910.0': - resolution: {integrity: sha512-/8x9LKKaLGarvF1++bFEFdIvd9/djBb+HTULbJAf4JVg3tUlpHtGe7uquuZaQkQGeW4XPbcpB9RMWx5YlZkw3w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.910.0': - resolution: {integrity: sha512-Zz5tF/U4q9ir3rfVnPLlxbhMTHjPaPv78TarspFYn9mNN7cPVXBaXVVnMNu6ypZzBdTB8M44UYo827Qcw3kouA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.910.0': - resolution: {integrity: sha512-l1lZfHIl/z0SxXibt7wMQ2HmRIyIZjlOrT6a554xlO//y671uxPPwScVw7QW4fPIvwfmKbl8dYCwGI//AgQ0bA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.910.0': - resolution: {integrity: sha512-cwc9bmomjUqPDF58THUCmEnpAIsCFV3Y9FHlQmQbMkYUm7Wlrb5E2iFrZ4WDefAHuh25R/gtj+Yo74r3gl9kbw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.910.0': - resolution: {integrity: sha512-HFQgZm1+7WisJ8tqcZkNRRmnoFO+So+L12wViVxneVJ+OclfL2vE/CoKqHTozP6+JCOKMlv6Vi61Lu6xDtKdTA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/endpoint-cache@3.893.0': - resolution: {integrity: sha512-KSwTfyLZyNLszz5f/yoLC+LC+CRKpeJii/+zVAy7JUOQsKhSykiRUPYUx7o2Sdc4oJfqqUl26A/jSttKYnYtAA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/eventstream-handler-node@3.910.0': - resolution: {integrity: sha512-oh91l4hR0makDcdK2uPoIETI8QKrDxgEDdo5VZNPddnr7XBNPenm8bWLvSQI2sEtn0uaQw5q9eT75I5HaiWB5g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/lib-dynamodb@3.910.0': - resolution: {integrity: sha512-ltGlB9p57RTHuyKBci5siNb92iq43kWd4EwwIIgPyADjgjcRIZcSbyAhB9eBdb2aX0IqsDpPUyBz7iAsOzOffQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@aws-sdk/client-dynamodb': ^3.910.0 - - '@aws-sdk/middleware-endpoint-discovery@3.910.0': - resolution: {integrity: sha512-KZvTt8lUUhkQptu00iSSdf5+6h6NP3L5tP251/4FRh9XDXMdpIoAAGsmamhVySkUSODDaALMHjXPSK5SJq/RYw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-eventstream@3.910.0': - resolution: {integrity: sha512-zeV4DVypzV+77AQ7sqVfKacVWFBM2HVBVORZ4PnCjToCg1BQgw39IDVtklF1/Fs+mmGp4dJdTlJ7TKBCqBNdhw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.910.0': - resolution: {integrity: sha512-F9Lqeu80/aTM6S/izZ8RtwSmjfhWjIuxX61LX+/9mxJyEkgaECRxv0chsLQsLHJumkGnXRy/eIyMLBhcTPF5vg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.910.0': - resolution: {integrity: sha512-3LJyyfs1USvRuRDla1pGlzGRtXJBXD1zC9F+eE9Iz/V5nkmhyv52A017CvKWmYoR0DM9dzjLyPOI0BSSppEaTw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.910.0': - resolution: {integrity: sha512-m/oLz0EoCy+WoIVBnXRXJ4AtGpdl0kPE7U+VH9TsuUzHgxY1Re/176Q1HWLBRVlz4gr++lNsgsMWEC+VnAwMpw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.910.0': - resolution: {integrity: sha512-djpnECwDLI/4sck1wxK/cZJmZX5pAhRvjONyJqr0AaOfJyuIAG0PHLe7xwCrv2rCAvIBR9ofnNFzPIGTJPDUwg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-websocket@3.910.0': - resolution: {integrity: sha512-W0t8nHo6SY2g5+ZAofsnzxr3K8E1hRT2qq1BlYcNwX76m2Kw0wP+kaMhKlAdtY7rglu7HZhwErZHxQfenO9UZg==} - engines: {node: '>= 14.0.0'} - - '@aws-sdk/nested-clients@3.910.0': - resolution: {integrity: sha512-Jr/smgVrLZECQgMyP4nbGqgJwzFFbkjOVrU8wh/gbVIZy1+Gu6R7Shai7KHDkEjwkGcHpN1MCCO67jTAOoSlMw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.910.0': - resolution: {integrity: sha512-gzQAkuHI3xyG6toYnH/pju+kc190XmvnB7X84vtN57GjgdQJICt9So/BD0U6h+eSfk9VBnafkVrAzBzWMEFZVw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/token-providers@3.910.0': - resolution: {integrity: sha512-dQr3pFpzemKyrB7SEJ2ipPtWrZiL5vaimg2PkXpwyzGrigYRc8F2R9DMUckU5zi32ozvQqq4PI3bOrw6xUfcbQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/types@3.910.0': - resolution: {integrity: sha512-o67gL3vjf4nhfmuSUNNkit0d62QJEwwHLxucwVJkR/rw9mfUtAWsgBs8Tp16cdUbMgsyQtCQilL8RAJDoGtadQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-dynamodb@3.910.0': - resolution: {integrity: sha512-DI9mg8bcmvxPMDUcPgNZEgWqaeaeOTgvZKnHP8Rmdneaw5h7Cdnm+aall0jcxu7aIMnMytRmgIcu0QAWm8x5bw==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@aws-sdk/client-dynamodb': ^3.910.0 - - '@aws-sdk/util-endpoints@3.910.0': - resolution: {integrity: sha512-6XgdNe42ibP8zCQgNGDWoOF53RfEKzpU/S7Z29FTTJ7hcZv0SytC0ZNQQZSx4rfBl036YWYwJRoJMlT4AA7q9A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-format-url@3.910.0': - resolution: {integrity: sha512-cYfgDGxZnrAq7wvntBjW6/ZewRcwywOE1Q9KKPO05ZHXpWCrqKNkx0JG8h2xlu+2qX6lkLZS+NyFAlwCQa0qfA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-locate-window@3.893.0': - resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/util-user-agent-browser@3.910.0': - resolution: {integrity: sha512-iOdrRdLZHrlINk9pezNZ82P/VxO/UmtmpaOAObUN+xplCUJu31WNM2EE/HccC8PQw6XlAudpdA6HDTGiW6yVGg==} - - '@aws-sdk/util-user-agent-node@3.910.0': - resolution: {integrity: sha512-qNV+rywWQDOOWmGpNlWLCU6zkJurocTBB2uLSdQ8b6Xg6U/i1VTJsoUQ5fbhSQpp/SuBGiIglyB1gSc0th7hPw==} - engines: {node: '>=18.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.910.0': - resolution: {integrity: sha512-UK0NzRknzUITYlkDibDSgkWvhhC11OLhhhGajl6pYCACup+6QE4SsLvmAGMkyNtGVCJ6Q+BM6PwDCBZyBgwl9A==} - engines: {node: '>=18.0.0'} - - '@aws/lambda-invoke-store@0.0.1': - resolution: {integrity: sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==} - engines: {node: '>=18.0.0'} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.28.4': - resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} - engines: {node: '>=6.9.0'} - - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-create-class-features-plugin@7.28.3': - resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.27.1': - resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.27.1': - resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-replace-supers@7.27.1': - resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-bigint@7.8.3': - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.27.1': - resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.27.1': - resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-typescript@7.27.1': - resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-modules-commonjs@7.27.1': - resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-typescript@7.28.0': - resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/preset-typescript@7.27.1': - resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/runtime@7.28.4': - resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} - - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@braintree/sanitize-url@7.1.1': - resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} - - '@browserbasehq/sdk@2.6.0': - resolution: {integrity: sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA==} - - '@browserbasehq/stagehand@1.14.0': - resolution: {integrity: sha512-Hi/EzgMFWz+FKyepxHTrqfTPjpsuBS4zRy3e9sbMpBgLPv+9c0R+YZEvS7Bw4mTS66QtvvURRT6zgDGFotthVQ==} - peerDependencies: - '@playwright/test': ^1.42.1 - deepmerge: ^4.3.1 - dotenv: ^16.4.5 - openai: ^4.62.1 - zod: ^3.23.8 - - '@bufbuild/protobuf@2.9.0': - resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} - - '@cfworker/json-schema@4.1.1': - resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - - '@chevrotain/cst-dts-gen@11.0.3': - resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} - - '@chevrotain/gast@11.0.3': - resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} - - '@chevrotain/regexp-to-ast@11.0.3': - resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} - - '@chevrotain/types@11.0.3': - resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} - - '@chevrotain/utils@11.0.3': - resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - - '@clack/core@0.5.0': - resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} - - '@clack/prompts@0.11.0': - resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} - - '@copilotkit/react-core@1.10.6': - resolution: {integrity: sha512-sdojpntwgOxP8lWRzaFEiWr0g2wDefjQHtve5GPPie+otseFonV88FZjSqIq5LN+q5BIwDOEhCmDjALsGjXvuQ==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - - '@copilotkit/react-ui@1.10.6': - resolution: {integrity: sha512-eNIbZKMvBVZqlAR4fqkmZRIYIt8WhwZOxfVJVwMD9nfmWdtatmxrOLecyDiPk/hkq2o/8s2/rubaZSMK6m+GHQ==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - - '@copilotkit/runtime-client-gql@1.10.6': - resolution: {integrity: sha512-oLX8mjppVvQCWfquW9A0500hYVNxM4X/mtt76SEvfGUb2KsNQ4j2HOCzpmtm85MeLproC+f9738wLwRueLliZg==} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - - '@copilotkit/runtime@1.10.6': - resolution: {integrity: sha512-35MdJ6nutC+spgHRJURbanLxBoQCNvVBYD0CBIk4Rv3/Ck8XgZA4lcc+5aGteuERXOPBsYEQjGD4xEPy3QXmGg==} - peerDependencies: - '@ag-ui/client': '>=0.0.39' - '@ag-ui/core': '>=0.0.39' - '@ag-ui/encoder': '>=0.0.39' - '@ag-ui/langgraph': '>=0.0.18' - '@ag-ui/proto': '>=0.0.39' - - '@copilotkit/shared@1.10.6': - resolution: {integrity: sha512-56Rltf4fDBqCpl1ZXARypt5NdE4LTg3tGPPLurZpgPmm31Lv5EAHpfjC7I55vt9A0mXWlTCHtCrpiaAlTyzGJw==} - - '@copilotkitnext/agent@0.0.19-alpha.0': - resolution: {integrity: sha512-8S9Ds+9gHeNYyaGLA0luExqrqyEpJG4msQn5d5RM+Vw/mcQ4870b4JR5WG6QUi/pzvrsYhTKI//rWl8LrDAzLA==} - engines: {node: '>=18'} - - '@copilotkitnext/core@0.0.19-alpha.0': - resolution: {integrity: sha512-pIv1mrAW2uNNpaWWgUtkZNhscQwu6dGAfL1BA9WYW0ipZPgrlSbR3OleKV0D5z+uV51XCknWTSNM49ioTcgZZQ==} - engines: {node: '>=18'} - - '@copilotkitnext/react@0.0.19-alpha.0': - resolution: {integrity: sha512-ApVlwXDalzwYaVNki6srA4Ab9LDw5VcqECzoZK8wf+6aSYvdLIXLe1ZLxIFemzU/Cuks8rmhJ0Bwk0gbRSk9eA==} - engines: {node: '>=18'} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@copilotkitnext/runtime@0.0.19-alpha.0': - resolution: {integrity: sha512-QVlHOg/hJyg3i5J2Sm+OEHACeYJYYtBBmwzQpqz2o0j4B20Z4PPgeffMEBta0LjbPen+mdsDykTVRvupVTd+5g==} - engines: {node: '>=18'} - peerDependencies: - openai: ^5.9.0 - - '@copilotkitnext/shared@0.0.19-alpha.0': - resolution: {integrity: sha512-dfQCod+NmD0ttfpLOZxeEj3IQprlgsj8Z5+XCRAkXtKRWf+BaW53BzPZMPPKN1oUSJSK8g7jb3aoD+3Ek5w1AA==} - engines: {node: '>=18'} - - '@copilotkitnext/web-inspector@0.0.19-alpha.0': - resolution: {integrity: sha512-em2OACHCarRXuZgpqpULshXGQpZhAeZVbwzkD5u60zy4ALmGDjFZ4Rb7FUhR+vwIpFQ/yZfOjvxoduVzu+wrBA==} - engines: {node: '>=18'} - - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - - '@envelop/core@5.3.2': - resolution: {integrity: sha512-06Mu7fmyKzk09P2i2kHpGfItqLLgCq7uO5/nX4fc/iHMplWPNuAx4iYR+WXUQoFHDnP6EUbceQNQ5iyeMz9f3g==} - engines: {node: '>=18.0.0'} - - '@envelop/instrumentation@1.0.0': - resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==} - engines: {node: '>=18.0.0'} - - '@envelop/types@5.2.1': - resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} - engines: {node: '>=18.0.0'} - - '@esbuild/aix-ppc64@0.25.10': - resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.10': - resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.10': - resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.10': - resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.10': - resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.10': - resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.10': - resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.10': - resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.10': - resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.10': - resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.10': - resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.10': - resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.10': - resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.10': - resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.10': - resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.10': - resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.10': - resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.10': - resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.10': - resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.10': - resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.10': - resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.10': - resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.10': - resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.10': - resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.10': - resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.10': - resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.0': - resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.16.0': - resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.37.0': - resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.0': - resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@expo/devcert@1.2.0': - resolution: {integrity: sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==} - - '@expo/sudo-prompt@9.3.2': - resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==} - - '@fastify/busboy@3.2.0': - resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} - - '@floating-ui/core@1.7.3': - resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} - - '@floating-ui/dom@1.7.4': - resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} - - '@floating-ui/react-dom@2.1.6': - resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/react@0.26.28': - resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.10': - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - - '@graphql-tools/executor@1.4.9': - resolution: {integrity: sha512-SAUlDT70JAvXeqV87gGzvDzUGofn39nvaVcVhNf12Dt+GfWHtNNO/RCn/Ea4VJaSLGzraUd41ObnN3i80EBU7w==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/merge@9.1.1': - resolution: {integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/schema@10.0.25': - resolution: {integrity: sha512-/PqE8US8kdQ7lB9M5+jlW8AyVjRGCKU7TSktuW3WNKSKmDO0MK1wakvb5gGdyT49MjAIb4a3LWxIpwo5VygZuw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-tools/utils@10.9.1': - resolution: {integrity: sha512-B1wwkXk9UvU7LCBkPs8513WxOQ2H8Fo5p8HR1+Id9WmYE5+bd51vqN+MbrqvWczHCH2gwkREgHJN88tE0n1FCw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - - '@graphql-yoga/logger@2.0.1': - resolution: {integrity: sha512-Nv0BoDGLMg9QBKy9cIswQ3/6aKaKjlTh87x3GiBg2Z4RrjyrM48DvOOK0pJh1C1At+b0mUIM67cwZcFTDLN4sA==} - engines: {node: '>=18.0.0'} - - '@graphql-yoga/plugin-defer-stream@3.16.0': - resolution: {integrity: sha512-LGn8DSSIB4iWT/EgeXR+rIvl80LOlZqIZrnK4slNJLgnXyMyvXMSlIcE/NnzH4zQq1YRixZtshXNOtekrVH9+g==} - engines: {node: '>=18.0.0'} - peerDependencies: - graphql: ^15.2.0 || ^16.0.0 - graphql-yoga: ^5.16.0 - - '@graphql-yoga/subscription@5.0.5': - resolution: {integrity: sha512-oCMWOqFs6QV96/NZRt/ZhTQvzjkGB4YohBOpKM4jH/lDT4qb7Lex/aGCxpi/JD9njw3zBBtMqxbaC22+tFHVvw==} - engines: {node: '>=18.0.0'} - - '@graphql-yoga/typed-event-target@3.0.2': - resolution: {integrity: sha512-ZpJxMqB+Qfe3rp6uszCQoag4nSw42icURnBRfFYSOmTgEeOe4rD0vYlbA8spvCu2TlCesNTlEN9BLWtQqLxabA==} - engines: {node: '>=18.0.0'} - - '@grpc/grpc-js@1.14.0': - resolution: {integrity: sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.8.0': - resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} - engines: {node: '>=6'} - hasBin: true - - '@headlessui/react@2.2.9': - resolution: {integrity: sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==} - engines: {node: '>=10'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - react-dom: ^18 || ^19 || ^19.0.0-rc - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@ibm-cloud/watsonx-ai@1.7.0': - resolution: {integrity: sha512-TmLaoFXmLc7yVFJIQS25mzZcuWfju4JmRXcO62KthDKNENyPpXXJukrHN6gXfv1BotzFt0M2kyRnO1Vt8ZLlxQ==} - engines: {node: '>=18.0.0'} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - - '@iconify/utils@3.0.2': - resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==} - - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@inquirer/ansi@1.0.1': - resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} - engines: {node: '>=18'} - - '@inquirer/checkbox@4.3.0': - resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/confirm@5.1.19': - resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@10.3.0': - resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/editor@4.2.21': - resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/expand@4.0.21': - resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/figures@1.0.14': - resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} - engines: {node: '>=18'} - - '@inquirer/input@4.2.5': - resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/number@3.0.21': - resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/password@4.0.21': - resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/prompts@7.9.0': - resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/rawlist@4.1.9': - resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/search@3.2.0': - resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/select@4.4.0': - resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/type@3.0.9': - resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@isaacs/ttlcache@1.4.1': - resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} - engines: {node: '>=12'} - - '@istanbuljs/load-nyc-config@1.1.0': - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - - '@jest/console@29.7.0': - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/core@29.7.0': - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/environment@29.7.0': - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/expect@29.7.0': - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/fake-timers@29.7.0': - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/globals@29.7.0': - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/reporters@29.7.0': - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/source-map@29.6.3': - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-result@29.7.0': - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/test-sequencer@29.7.0': - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/transform@29.7.0': - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - - '@jsdevtools/ono@7.1.3': - resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - - '@langchain/aws@0.1.15': - resolution: {integrity: sha512-oyOMhTHP0rxdSCVI/g5KXYCOs9Kq/FpXMZbOk1JSIUoaIzUg4p6d98lsHu7erW//8NSaT+SX09QRbVDAgt7pNA==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.3.58 <0.4.0' - - '@langchain/community@0.3.57': - resolution: {integrity: sha512-xUe5UIlh1yZjt/cMtdSVlCoC5xm/RMN/rp+KZGLbquvjQeONmQ2rvpCqWjAOgQ6SPLqKiXvoXaKSm20r+LHISw==} - engines: {node: '>=18'} - peerDependencies: - '@arcjet/redact': ^v1.0.0-alpha.23 - '@aws-crypto/sha256-js': ^5.0.0 - '@aws-sdk/client-bedrock-agent-runtime': ^3.749.0 - '@aws-sdk/client-bedrock-runtime': ^3.749.0 - '@aws-sdk/client-dynamodb': ^3.749.0 - '@aws-sdk/client-kendra': ^3.749.0 - '@aws-sdk/client-lambda': ^3.749.0 - '@aws-sdk/client-s3': ^3.749.0 - '@aws-sdk/client-sagemaker-runtime': ^3.749.0 - '@aws-sdk/client-sfn': ^3.749.0 - '@aws-sdk/credential-provider-node': ^3.388.0 - '@aws-sdk/dsql-signer': '*' - '@azure/search-documents': ^12.0.0 - '@azure/storage-blob': ^12.15.0 - '@browserbasehq/sdk': '*' - '@browserbasehq/stagehand': ^1.0.0 - '@clickhouse/client': ^0.2.5 - '@cloudflare/ai': '*' - '@datastax/astra-db-ts': ^1.0.0 - '@elastic/elasticsearch': ^8.4.0 - '@getmetal/metal-sdk': '*' - '@getzep/zep-cloud': ^1.0.6 - '@getzep/zep-js': ^0.9.0 - '@gomomento/sdk': ^1.51.1 - '@gomomento/sdk-core': ^1.51.1 - '@google-ai/generativelanguage': '*' - '@google-cloud/storage': ^6.10.1 || ^7.7.0 - '@gradientai/nodejs-sdk': ^1.2.0 - '@huggingface/inference': ^4.0.5 - '@huggingface/transformers': ^3.5.2 - '@ibm-cloud/watsonx-ai': '*' - '@lancedb/lancedb': ^0.19.1 - '@langchain/core': '>=0.3.58 <0.4.0' - '@layerup/layerup-security': ^1.5.12 - '@libsql/client': ^0.14.0 - '@mendable/firecrawl-js': ^1.4.3 - '@mlc-ai/web-llm': '*' - '@mozilla/readability': '*' - '@neondatabase/serverless': '*' - '@notionhq/client': ^2.2.10 - '@opensearch-project/opensearch': '*' - '@pinecone-database/pinecone': '*' - '@planetscale/database': ^1.8.0 - '@premai/prem-sdk': ^0.3.25 - '@qdrant/js-client-rest': ^1.15.0 - '@raycast/api': ^1.55.2 - '@rockset/client': ^0.9.1 - '@smithy/eventstream-codec': ^2.0.5 - '@smithy/protocol-http': ^3.0.6 - '@smithy/signature-v4': ^2.0.10 - '@smithy/util-utf8': ^2.0.0 - '@spider-cloud/spider-client': ^0.0.21 - '@supabase/supabase-js': ^2.45.0 - '@tensorflow-models/universal-sentence-encoder': '*' - '@tensorflow/tfjs-converter': '*' - '@tensorflow/tfjs-core': '*' - '@upstash/ratelimit': ^1.1.3 || ^2.0.3 - '@upstash/redis': ^1.20.6 - '@upstash/vector': ^1.1.1 - '@vercel/kv': '*' - '@vercel/postgres': '*' - '@writerai/writer-sdk': ^0.40.2 - '@xata.io/client': ^0.28.0 - '@zilliz/milvus2-sdk-node': '>=2.3.5' - apify-client: ^2.7.1 - assemblyai: ^4.6.0 - azion: ^1.11.1 - better-sqlite3: '>=9.4.0 <12.0.0' - cassandra-driver: ^4.7.2 - cborg: ^4.1.1 - cheerio: ^1.0.0-rc.12 - chromadb: '*' - closevector-common: 0.1.3 - closevector-node: 0.1.6 - closevector-web: 0.1.6 - cohere-ai: '*' - convex: ^1.3.1 - crypto-js: ^4.2.0 - d3-dsv: ^2.0.0 - discord.js: ^14.14.1 - duck-duck-scrape: ^2.2.5 - epub2: ^3.0.1 - fast-xml-parser: '*' - firebase-admin: ^11.9.0 || ^12.0.0 || ^13.0.0 - google-auth-library: '*' - googleapis: '*' - hnswlib-node: ^3.0.0 - html-to-text: ^9.0.5 - ibm-cloud-sdk-core: '*' - ignore: ^5.2.0 - interface-datastore: ^8.2.11 - ioredis: ^5.3.2 - it-all: ^3.0.4 - jsdom: '*' - jsonwebtoken: ^9.0.2 - llmonitor: ^0.5.9 - lodash: ^4.17.21 - lunary: ^0.7.10 - mammoth: ^1.6.0 - mariadb: ^3.4.0 - mem0ai: ^2.1.8 - mongodb: ^6.17.0 - mysql2: ^3.9.8 - neo4j-driver: '*' - notion-to-md: ^3.1.0 - officeparser: ^4.0.4 - openai: '*' - pdf-parse: 1.1.1 - pg: ^8.11.0 - pg-copy-streams: ^6.0.5 - pickleparser: ^0.2.1 - playwright: ^1.32.1 - portkey-ai: ^0.1.11 - puppeteer: '*' - pyodide: '>=0.24.1 <0.27.0' - redis: '*' - replicate: '*' - sonix-speech-recognition: ^2.1.1 - srt-parser-2: ^1.2.3 - typeorm: ^0.3.20 - typesense: ^1.5.3 - usearch: ^1.1.1 - voy-search: 0.6.2 - weaviate-client: ^3.5.2 - web-auth-library: ^1.0.3 - word-extractor: '*' - ws: ^8.14.2 - youtubei.js: '*' - peerDependenciesMeta: - '@arcjet/redact': - optional: true - '@aws-crypto/sha256-js': - optional: true - '@aws-sdk/client-bedrock-agent-runtime': - optional: true - '@aws-sdk/client-bedrock-runtime': - optional: true - '@aws-sdk/client-dynamodb': - optional: true - '@aws-sdk/client-kendra': - optional: true - '@aws-sdk/client-lambda': - optional: true - '@aws-sdk/client-s3': - optional: true - '@aws-sdk/client-sagemaker-runtime': - optional: true - '@aws-sdk/client-sfn': - optional: true - '@aws-sdk/credential-provider-node': - optional: true - '@aws-sdk/dsql-signer': - optional: true - '@azure/search-documents': - optional: true - '@azure/storage-blob': - optional: true - '@browserbasehq/sdk': - optional: true - '@clickhouse/client': - optional: true - '@cloudflare/ai': - optional: true - '@datastax/astra-db-ts': - optional: true - '@elastic/elasticsearch': - optional: true - '@getmetal/metal-sdk': - optional: true - '@getzep/zep-cloud': - optional: true - '@getzep/zep-js': - optional: true - '@gomomento/sdk': - optional: true - '@gomomento/sdk-core': - optional: true - '@google-ai/generativelanguage': - optional: true - '@google-cloud/storage': - optional: true - '@gradientai/nodejs-sdk': - optional: true - '@huggingface/inference': - optional: true - '@huggingface/transformers': - optional: true - '@lancedb/lancedb': - optional: true - '@layerup/layerup-security': - optional: true - '@libsql/client': - optional: true - '@mendable/firecrawl-js': - optional: true - '@mlc-ai/web-llm': - optional: true - '@mozilla/readability': - optional: true - '@neondatabase/serverless': - optional: true - '@notionhq/client': - optional: true - '@opensearch-project/opensearch': - optional: true - '@pinecone-database/pinecone': - optional: true - '@planetscale/database': - optional: true - '@premai/prem-sdk': - optional: true - '@qdrant/js-client-rest': - optional: true - '@raycast/api': - optional: true - '@rockset/client': - optional: true - '@smithy/eventstream-codec': - optional: true - '@smithy/protocol-http': - optional: true - '@smithy/signature-v4': - optional: true - '@smithy/util-utf8': - optional: true - '@spider-cloud/spider-client': - optional: true - '@supabase/supabase-js': - optional: true - '@tensorflow-models/universal-sentence-encoder': - optional: true - '@tensorflow/tfjs-converter': - optional: true - '@tensorflow/tfjs-core': - optional: true - '@upstash/ratelimit': - optional: true - '@upstash/redis': - optional: true - '@upstash/vector': - optional: true - '@vercel/kv': - optional: true - '@vercel/postgres': - optional: true - '@writerai/writer-sdk': - optional: true - '@xata.io/client': - optional: true - '@zilliz/milvus2-sdk-node': - optional: true - apify-client: - optional: true - assemblyai: - optional: true - azion: - optional: true - better-sqlite3: - optional: true - cassandra-driver: - optional: true - cborg: - optional: true - cheerio: - optional: true - chromadb: - optional: true - closevector-common: - optional: true - closevector-node: - optional: true - closevector-web: - optional: true - cohere-ai: - optional: true - convex: - optional: true - crypto-js: - optional: true - d3-dsv: - optional: true - discord.js: - optional: true - duck-duck-scrape: - optional: true - epub2: - optional: true - fast-xml-parser: - optional: true - firebase-admin: - optional: true - google-auth-library: - optional: true - googleapis: - optional: true - hnswlib-node: - optional: true - html-to-text: - optional: true - ignore: - optional: true - interface-datastore: - optional: true - ioredis: - optional: true - it-all: - optional: true - jsdom: - optional: true - jsonwebtoken: - optional: true - llmonitor: - optional: true - lodash: - optional: true - lunary: - optional: true - mammoth: - optional: true - mariadb: - optional: true - mem0ai: - optional: true - mongodb: - optional: true - mysql2: - optional: true - neo4j-driver: - optional: true - notion-to-md: - optional: true - officeparser: - optional: true - pdf-parse: - optional: true - pg: - optional: true - pg-copy-streams: - optional: true - pickleparser: - optional: true - playwright: - optional: true - portkey-ai: - optional: true - puppeteer: - optional: true - pyodide: - optional: true - redis: - optional: true - replicate: - optional: true - sonix-speech-recognition: - optional: true - srt-parser-2: - optional: true - typeorm: - optional: true - typesense: - optional: true - usearch: - optional: true - voy-search: - optional: true - weaviate-client: - optional: true - web-auth-library: - optional: true - word-extractor: - optional: true - ws: - optional: true - youtubei.js: - optional: true - - '@langchain/core@0.3.78': - resolution: {integrity: sha512-Nn0x9erQlK3zgtRU1Z8NUjLuyW0gzdclMsvLQ6wwLeDqV91pE+YKl6uQb+L2NUDs4F0N7c2Zncgz46HxrvPzuA==} - engines: {node: '>=18'} - - '@langchain/google-common@0.1.8': - resolution: {integrity: sha512-8auqWw2PMPhcHQHS+nMN3tVZrUPgSLckUaFeOHDOeSBiDvBd4KCybPwyl2oCwMDGvmyIxvOOckkMdeGaJ92vpQ==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - - '@langchain/google-gauth@0.1.8': - resolution: {integrity: sha512-2QK7d5SQMrnSv7X4j05BGfO74hiA8FJuNwSsQKZvzlGoVnNXil3x2aqD5V+zsYOPpxhkDCpNlmh2Pue2Wzy1rQ==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - - '@langchain/langgraph-sdk@0.0.70': - resolution: {integrity: sha512-O8I12bfeMVz5fOrXnIcK4IdRf50IqyJTO458V56wAIHLNoi4H8/JHM+2M+Y4H2PtslXIGnvomWqlBd0eY5z/Og==} - peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0' - react: ^18 || ^19 - peerDependenciesMeta: - '@langchain/core': - optional: true - react: - optional: true - - '@langchain/langgraph-sdk@0.1.10': - resolution: {integrity: sha512-9srSCb2bSvcvehMgjA2sMMwX0o1VUgPN6ghwm5Fwc9JGAKsQa6n1S4eCwy1h4abuYxwajH5n3spBw+4I2WYbgw==} - peerDependencies: - '@langchain/core': '>=0.2.31 <0.4.0 || ^1.0.0-alpha' - react: ^18 || ^19 - react-dom: ^18 || ^19 - peerDependenciesMeta: - '@langchain/core': - optional: true - react: - optional: true - react-dom: - optional: true - - '@langchain/openai@0.4.9': - resolution: {integrity: sha512-NAsaionRHNdqaMjVLPkFCyjUDze+OqRHghA1Cn4fPoAafz+FXcl9c7LlEl9Xo0FH6/8yiCl7Rw2t780C/SBVxQ==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.3.39 <0.4.0' - - '@langchain/openai@0.6.16': - resolution: {integrity: sha512-v9INBOjE0w6ZrUE7kP9UkRyNsV7daH7aPeSOsPEJ35044UI3udPHwNduQ8VmaOUsD26OvSdg1b1GDhrqWLMaRw==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.3.68 <0.4.0' - - '@langchain/textsplitters@0.1.0': - resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - - '@langchain/weaviate@0.2.3': - resolution: {integrity: sha512-WqNGn1eSrI+ZigJd7kZjCj3fvHBYicKr054qts2nNJ+IyO5dWmY3oFTaVHFq1OLFVZJJxrFeDnxSEOC3JnfP0w==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/core': '>=0.2.21 <0.4.0' - - '@libsql/client@0.15.15': - resolution: {integrity: sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==} - - '@libsql/core@0.15.15': - resolution: {integrity: sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==} - - '@libsql/darwin-arm64@0.5.22': - resolution: {integrity: sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==} - cpu: [arm64] - os: [darwin] - - '@libsql/darwin-x64@0.5.22': - resolution: {integrity: sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==} - cpu: [x64] - os: [darwin] - - '@libsql/hrana-client@0.7.0': - resolution: {integrity: sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==} - - '@libsql/isomorphic-fetch@0.3.1': - resolution: {integrity: sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==} - engines: {node: '>=18.0.0'} - - '@libsql/isomorphic-ws@0.1.5': - resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - - '@libsql/linux-arm-gnueabihf@0.5.22': - resolution: {integrity: sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==} - cpu: [arm] - os: [linux] - - '@libsql/linux-arm-musleabihf@0.5.22': - resolution: {integrity: sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==} - cpu: [arm] - os: [linux] - - '@libsql/linux-arm64-gnu@0.5.22': - resolution: {integrity: sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-arm64-musl@0.5.22': - resolution: {integrity: sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==} - cpu: [arm64] - os: [linux] - - '@libsql/linux-x64-gnu@0.5.22': - resolution: {integrity: sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==} - cpu: [x64] - os: [linux] - - '@libsql/linux-x64-musl@0.5.22': - resolution: {integrity: sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==} - cpu: [x64] - os: [linux] - - '@libsql/win32-x64-msvc@0.5.22': - resolution: {integrity: sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==} - cpu: [x64] - os: [win32] - - '@lit-labs/react@2.1.3': - resolution: {integrity: sha512-OD9h2JynerBQUMNzb563jiVpxfvPF0HjQkKY2mx0lpVYvD7F+rtJpOGz6ek+6ufMidV3i+MPT9SX62OKWHFrQg==} - - '@lit-labs/ssr-dom-shim@1.4.0': - resolution: {integrity: sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==} - - '@lit/react@1.0.8': - resolution: {integrity: sha512-p2+YcF+JE67SRX3mMlJ1TKCSTsgyOVdAwd/nxp3NuV1+Cb6MWALbN6nT7Ld4tpmYofcE5kcaSY1YBB9erY+6fw==} - peerDependencies: - '@types/react': 17 || 18 || 19 - - '@lit/reactive-element@2.1.1': - resolution: {integrity: sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==} - - '@lukeed/csprng@1.1.0': - resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} - engines: {node: '>=8'} - - '@lukeed/uuid@2.0.1': - resolution: {integrity: sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==} - engines: {node: '>=8'} - - '@mastra/client-js@0.10.18': - resolution: {integrity: sha512-w6+1ycIj8S3ZQwOEN1vT0yKrKXH/K+Q3VR84jMOjy0yZZN/LOeHOgAugHQj3HK7T1jxS/jCqAMOEWtYh8pO9SA==} - peerDependencies: - zod: ^3.0.0 - - '@mastra/client-js@0.15.2': - resolution: {integrity: sha512-n5qfXS0OfLqljJpQjwD6eTimIWkmwRacNDPd1CAwXGkVZqr9rgFU6dyQTAgEV3J45MaGu4tMpuz6ZYcmg9S5gA==} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - '@mastra/core@0.12.1': - resolution: {integrity: sha512-iWvkIBnhFXZH+XkpV7Yy0YJphVM7BBtnJmv0z9hHgcvo6poH8+YUpEAHsveuvt4rcvNkR34yfdEQxzhh5bcabA==} - engines: {node: '>=20'} - peerDependencies: - zod: ^3.0.0 - - '@mastra/core@0.20.2': - resolution: {integrity: sha512-RbwuLwOVrcLbbjLFEBSlGTBA3mzGAy4bXp4JeXg2miJWDR/7WbXtxKIU+sTZGw5LpzlvvEFtj7JtHI1l+gKMVg==} - engines: {node: '>=20'} - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - - '@mastra/deployer@0.20.2': - resolution: {integrity: sha512-pkD7ViXeAoMvb0bQAL7VHTjptXTDTOgkcpE/37edrdyF3/Smi3t5S8FStveGaNzrfx7O6ywHkRKXU8nL3c0wAg==} - peerDependencies: - '@mastra/core': '>=0.20.1-0 <0.21.0-0' - zod: ^3.25.0 || ^4.0.0 - - '@mastra/dynamodb@0.15.6': - resolution: {integrity: sha512-9n1a+YCB2dV8E/6q6oatQuXukKDOWGsFBaADAEMsn0qxd2yww4aUOMgax+CWexo+HufQyhsUZfJ/5de5EgbrkA==} - peerDependencies: - '@mastra/core': '>=0.18.1-0 <0.21.0-0' - - '@mastra/libsql@0.12.0': - resolution: {integrity: sha512-VRZNO904HfaubAsk93F1r7OGEYX/O9W9MGfqQ/mtuwFgPGUlNo7CPAjOWmtZ+Rt+5Ds7iE8t5DmnKT7aun+rVw==} - peerDependencies: - '@mastra/core': '>=0.12.0-0 <0.13.0-0' - - '@mastra/libsql@0.15.1': - resolution: {integrity: sha512-a5a7i6WiBdPX601GaI4COJjxX004jn3NyeJx29neGPrVYn5ESksvDCYsu60iUdgSP2R4/vSfNXl6bbq7IuydTg==} - peerDependencies: - '@mastra/core': '>=0.19.0-alpha.1 <0.21.0-0' - - '@mastra/loggers@0.10.15': - resolution: {integrity: sha512-/s4RPYTuTyJ8/oRU1ThHQaOal7/Bml5ARJhQBXIX3qcG3MIprRyPmtK1XrdLuuBuh7XpaWUFZFqW0pJaE1FLtw==} - peerDependencies: - '@mastra/core': '>=0.18.1-0 <0.21.0-0' - - '@mastra/loggers@0.10.5': - resolution: {integrity: sha512-H1Ry1s4mbBSE1MUekWFM/8RV6Dy8WoghIP+BVZlTR5edIkGY/a83CE/8wMTA8KUJLoj743dibubZna4dBgJvdA==} - peerDependencies: - '@mastra/core': '>=0.10.4-0 <0.13.0-0' - - '@mastra/mcp@0.13.4': - resolution: {integrity: sha512-vd/WuyP34pS68jnSDOf3T8Ug4WdS6QUrOxIHegpTKCmbmYhRlWF5RVlff9TOO9h91lxkHzX0Gsegi+J8l37i2w==} - peerDependencies: - '@mastra/core': '>=0.20.1-0 <0.21.0-0' - zod: ^3.25.0 || ^4.0.0 - - '@mastra/memory@0.12.0': - resolution: {integrity: sha512-YDuzZoJq1HeDmgA1rtZ94DtzTVc3f39Dh6d/C+9p6Mv52tqPE0LrUSP5BBQOFEnRlw+Yb9v5KCcufnyywaiKaA==} - peerDependencies: - '@mastra/core': '>=0.12.0-0 <0.13.0-0' - - '@mastra/memory@0.15.6': - resolution: {integrity: sha512-k6X4nZ+YFhlW46YPKgTAuPYma+uebLQ2xYeDdx0BQvQyO6lWp9s9cpgSjCwOMzctPZqrxauOfzgWyyUUrFfwBw==} - peerDependencies: - '@mastra/core': '>=0.20.1-0 <0.21.0-0' - zod: ^3.25.0 || ^4.0.0 - - '@mastra/schema-compat@0.10.5': - resolution: {integrity: sha512-Qhz8W4Hz7b9tNoVW306NMzotVy11bya1OjiTN+pthj00HZoaH7nmK8SWBiX4drS+PyhIqA16X5AenELe2QgZag==} - peerDependencies: - ai: ^4.0.0 - zod: ^3.0.0 - - '@mastra/schema-compat@0.11.4': - resolution: {integrity: sha512-oh3+enP3oYftZlmJAKQQj5VXR86KgTMwfMnwALZyLk04dPSWfVD2wGytoDg5Qbi3rX9qHj6g0rMNa0CUjR6aTg==} - peerDependencies: - ai: ^4.0.0 || ^5.0.0 - zod: ^3.25.0 || ^4.0.0 - - '@mastra/server@0.20.2': - resolution: {integrity: sha512-Cnuwh+6Evjf5K0R9Jt6euBR89wmTXNwbvuPpVD+LN3nBxwxJj0AcG5Yfy0rXJIur8UFW9aP8d6DwOvClLCKv/w==} - peerDependencies: - '@mastra/core': '>=0.20.1-0 <0.21.0-0' - zod: ^3.25.0 || ^4.0.0 - - '@mdx-js/loader@3.1.1': - resolution: {integrity: sha512-0TTacJyZ9mDmY+VefuthVshaNIyCGZHJG2fMnGaDttCt8HmjUF7SizlHJpaCDoGnN635nK1wpzfpx/Xx5S4WnQ==} - peerDependencies: - webpack: '>=5' - peerDependenciesMeta: - webpack: - optional: true - - '@mdx-js/mdx@3.1.1': - resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - - '@mdx-js/react@3.1.1': - resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - - '@mermaid-js/parser@0.6.3': - resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==} - - '@modelcontextprotocol/sdk@1.20.0': - resolution: {integrity: sha512-kOQ4+fHuT4KbR2iq2IjeV32HiihueuOf1vJkq18z08CLZ1UQrTc8BXJpVfxZkq45+inLLD+D4xx4nBjUelJa4Q==} - engines: {node: '>=18'} - - '@monaco-editor/loader@1.6.1': - resolution: {integrity: sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==} - - '@monaco-editor/react@4.7.0': - resolution: {integrity: sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==} - peerDependencies: - monaco-editor: '>= 0.25.0 < 1' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - - '@neon-rs/load@0.0.4': - resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - - '@neon-rs/load@0.1.82': - resolution: {integrity: sha512-H4Gu2o5kPp+JOEhRrOQCnJnf7X6sv9FBLttM/wSbb4efsgFWeHzfU/ItZ01E5qqEk+U6QGdeVO7lxXIAtYHr5A==} - - '@next/env@15.2.1': - resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} - - '@next/eslint-plugin-next@15.2.1': - resolution: {integrity: sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q==} - - '@next/mdx@15.5.5': - resolution: {integrity: sha512-+niIZwo1ObCj8YJCR31FwF3gUXnyQZTnrrt5DnJGF/nj6yW7VE0hhmhT2yWW244MuBKqL3SbXjaFX+GqWOPXfA==} - peerDependencies: - '@mdx-js/loader': '>=0.15.0' - '@mdx-js/react': '>=0.15.0' - peerDependenciesMeta: - '@mdx-js/loader': - optional: true - '@mdx-js/react': - optional: true - - '@next/swc-darwin-arm64@15.2.1': - resolution: {integrity: sha512-aWXT+5KEREoy3K5AKtiKwioeblmOvFFjd+F3dVleLvvLiQ/mD//jOOuUcx5hzcO9ISSw4lrqtUPntTpK32uXXQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@next/swc-darwin-x64@15.2.1': - resolution: {integrity: sha512-E/w8ervu4fcG5SkLhvn1NE/2POuDCDEy5gFbfhmnYXkyONZR68qbUlJlZwuN82o7BrBVAw+tkR8nTIjGiMW1jQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@next/swc-linux-arm64-gnu@15.2.1': - resolution: {integrity: sha512-gXDX5lIboebbjhiMT6kFgu4svQyjoSed6dHyjx5uZsjlvTwOAnZpn13w9XDaIMFFHw7K8CpBK7HfDKw0VZvUXQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-arm64-musl@15.2.1': - resolution: {integrity: sha512-3v0pF/adKZkBWfUffmB/ROa+QcNTrnmYG4/SS+r52HPwAK479XcWoES2I+7F7lcbqc7mTeVXrIvb4h6rR/iDKg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-x64-gnu@15.2.1': - resolution: {integrity: sha512-RbsVq2iB6KFJRZ2cHrU67jLVLKeuOIhnQB05ygu5fCNgg8oTewxweJE8XlLV+Ii6Y6u4EHwETdUiRNXIAfpBww==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-linux-x64-musl@15.2.1': - resolution: {integrity: sha512-QHsMLAyAIu6/fWjHmkN/F78EFPKmhQlyX5C8pRIS2RwVA7z+t9cTb0IaYWC3EHLOTjsU7MNQW+n2xGXr11QPpg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-win32-arm64-msvc@15.2.1': - resolution: {integrity: sha512-Gk42XZXo1cE89i3hPLa/9KZ8OuupTjkDmhLaMKFohjf9brOeZVEa3BQy1J9s9TWUqPhgAEbwv6B2+ciGfe54Vw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@next/swc-win32-x64-msvc@15.2.1': - resolution: {integrity: sha512-YjqXCl8QGhVlMR8uBftWk0iTmvtntr41PhG1kvzGp0sUP/5ehTM+cwx25hKE54J0CRnHYjSGjSH3gkHEaHIN9g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@nolyfill/is-core-module@1.0.39': - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - - '@openrouter/ai-sdk-provider@1.2.0': - resolution: {integrity: sha512-stuIwq7Yb7DNmk3GuCtz+oS3nZOY4TXEV3V5KsknDGQN7Fpu3KRMQVWRc1J073xKdf0FC9EHOctSyzsACmp5Ag==} - engines: {node: '>=18'} - peerDependencies: - ai: ^5.0.0 - zod: ^3.24.1 || ^v4 - - '@opentelemetry/api-logs@0.203.0': - resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/auto-instrumentations-node@0.62.2': - resolution: {integrity: sha512-Ipe6X7ddrCiRsuewyTU83IvKiSFT4piqmv9z8Ovg1E7v98pdTj1pUE6sDrHV50zl7/ypd+cONBgt+EYSZu4u9Q==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.4.1 - '@opentelemetry/core': ^2.0.0 - - '@opentelemetry/context-async-hooks@2.0.1': - resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/context-async-hooks@2.1.0': - resolution: {integrity: sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@2.0.1': - resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} - engines: {node: ^18.19.0 || >=20.6.0} - 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/exporter-logs-otlp-grpc@0.203.0': - resolution: {integrity: sha512-g/2Y2noc/l96zmM+g0LdeuyYKINyBwN6FJySoU15LHPLcMN/1a0wNk2SegwKcxrRdE7Xsm7fkIR5n6XFe3QpPw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-logs-otlp-http@0.203.0': - resolution: {integrity: sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-logs-otlp-proto@0.203.0': - resolution: {integrity: sha512-nl/7S91MXn5R1aIzoWtMKGvqxgJgepB/sH9qW0rZvZtabnsjbf8OQ1uSx3yogtvLr0GzwD596nQKz2fV7q2RBw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-metrics-otlp-grpc@0.203.0': - resolution: {integrity: sha512-FCCj9nVZpumPQSEI57jRAA89hQQgONuoC35Lt+rayWY/mzCAc6BQT7RFyFaZKJ2B7IQ8kYjOCPsF/HGFWjdQkQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-metrics-otlp-http@0.203.0': - resolution: {integrity: sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-metrics-otlp-proto@0.203.0': - resolution: {integrity: sha512-OZnhyd9npU7QbyuHXFEPVm3LnjZYifuKpT3kTnF84mXeEQ84pJJZgyLBpU4FSkSwUkt/zbMyNAI7y5+jYTWGIg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-prometheus@0.203.0': - resolution: {integrity: sha512-2jLuNuw5m4sUj/SncDf/mFPabUxMZmmYetx5RKIMIQyPnl6G6ooFzfeE8aXNRf8YD1ZXNlCnRPcISxjveGJHNg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-trace-otlp-grpc@0.203.0': - resolution: {integrity: sha512-322coOTf81bm6cAA8+ML6A+m4r2xTCdmAZzGNTboPXRzhwPt4JEmovsFAs+grpdarObd68msOJ9FfH3jxM6wqA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-trace-otlp-http@0.203.0': - resolution: {integrity: sha512-ZDiaswNYo0yq/cy1bBLJFe691izEJ6IgNmkjm4C6kE9ub/OMQqDXORx2D2j8fzTBTxONyzusbaZlqtfmyqURPw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-trace-otlp-proto@0.203.0': - resolution: {integrity: sha512-1xwNTJ86L0aJmWRwENCJlH4LULMG2sOXWIVw+Szta4fkqKVY50Eo4HoVKKq6U9QEytrWCr8+zjw0q/ZOeXpcAQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/exporter-zipkin@2.0.1': - resolution: {integrity: sha512-a9eeyHIipfdxzCfc2XPrE+/TI3wmrZUDFtG2RRXHSbZZULAny7SyybSvaDvS77a7iib5MPiAvluwVvbGTsHxsw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/instrumentation-amqplib@0.50.0': - resolution: {integrity: sha512-kwNs/itehHG/qaQBcVrLNcvXVPW0I4FCOVtw3LHMLdYIqD7GJ6Yv2nX+a4YHjzbzIeRYj8iyMp0Bl7tlkidq5w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-aws-lambda@0.54.1': - resolution: {integrity: sha512-qm8pGSAM1mXk7unbrGktWWGJc6IFI58ZsaHJ+i420Fp5VO3Vf7GglIgaXTS8CKBrVB4LHFj3NvzJg31PtsAQcA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-aws-sdk@0.58.0': - resolution: {integrity: sha512-9vFH7gU686dsAeLMCkqUj9y0MQZ1xrTtStSpNV2UaGWtDnRjJrAdJLu9Y545oKEaDTeVaob4UflyZvvpZnw3Xw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-bunyan@0.49.0': - resolution: {integrity: sha512-ky5Am1y6s3Ex/3RygHxB/ZXNG07zPfg9Z6Ora+vfeKcr/+I6CJbWXWhSBJor3gFgKN3RvC11UWVURnmDpBS6Pg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-cassandra-driver@0.49.0': - resolution: {integrity: sha512-BNIvqldmLkeikfI5w5Rlm9vG5NnQexfPoxOgEMzfDVOEF+vS6351I6DzWLLgWWR9CNF/jQJJi/lr6am2DLp0Rw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-connect@0.47.0': - resolution: {integrity: sha512-pjenvjR6+PMRb6/4X85L4OtkQCootgb/Jzh/l/Utu3SJHBid1F+gk9sTGU2FWuhhEfV6P7MZ7BmCdHXQjgJ42g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-cucumber@0.19.0': - resolution: {integrity: sha512-99ms8kQWRuPt5lkDqbJJzD+7Tq5TMUlBZki4SA2h6CgK4ncX+tyep9XFY1e+XTBLJIWmuFMGbWqBLJ4fSKIQNQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/instrumentation-dataloader@0.21.1': - resolution: {integrity: sha512-hNAm/bwGawLM8VDjKR0ZUDJ/D/qKR3s6lA5NV+btNaPVm2acqhPcT47l2uCVi+70lng2mywfQncor9v8/ykuyw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-dns@0.47.0': - resolution: {integrity: sha512-775fOnewWkTF4iXMGKgwvOGqEmPrU1PZpXjjqvTrEErYBJe7Fz1WlEeUStHepyKOdld7Ghv7TOF/kE3QDctvrg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-express@0.52.0': - resolution: {integrity: sha512-W7pizN0Wh1/cbNhhTf7C62NpyYw7VfCFTYg0DYieSTrtPBT1vmoSZei19wfKLnrMsz3sHayCg0HxCVL2c+cz5w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-fastify@0.48.0': - resolution: {integrity: sha512-3zQlE/DoVfVH6/ycuTv7vtR/xib6WOa0aLFfslYcvE62z0htRu/ot8PV/zmMZfnzpTQj8S/4ULv36R6UIbpJIg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-fs@0.23.0': - resolution: {integrity: sha512-Puan+QopWHA/KNYvDfOZN6M/JtF6buXEyD934vrb8WhsX1/FuM7OtoMlQyIqAadnE8FqqDL4KDPiEfCQH6pQcQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-generic-pool@0.47.0': - resolution: {integrity: sha512-UfHqf3zYK+CwDwEtTjaD12uUqGGTswZ7ofLBEdQ4sEJp9GHSSJMQ2hT3pgBxyKADzUdoxQAv/7NqvL42ZI+Qbw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-graphql@0.51.0': - resolution: {integrity: sha512-LchkOu9X5DrXAnPI1+Z06h/EH/zC7D6sA86hhPrk3evLlsJTz0grPrkL/yUJM9Ty0CL/y2HSvmWQCjbJEz/ADg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-grpc@0.203.0': - resolution: {integrity: sha512-Qmjx2iwccHYRLoE4RFS46CvQE9JG9Pfeae4EPaNZjvIuJxb/pZa2R9VWzRlTehqQWpAvto/dGhtkw8Tv+o0LTg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-hapi@0.50.0': - resolution: {integrity: sha512-5xGusXOFQXKacrZmDbpHQzqYD1gIkrMWuwvlrEPkYOsjUqGUjl1HbxCsn5Y9bUXOCgP1Lj6A4PcKt1UiJ2MujA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-http@0.203.0': - resolution: {integrity: sha512-y3uQAcCOAwnO6vEuNVocmpVzG3PER6/YZqbPbbffDdJ9te5NkHEkfSMNzlC3+v7KlE+WinPGc3N7MR30G1HY2g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-ioredis@0.51.0': - resolution: {integrity: sha512-9IUws0XWCb80NovS+17eONXsw1ZJbHwYYMXiwsfR9TSurkLV5UNbRSKb9URHO+K+pIJILy9wCxvyiOneMr91Ig==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-kafkajs@0.13.0': - resolution: {integrity: sha512-FPQyJsREOaGH64hcxlzTsIEQC4DYANgTwHjiB7z9lldmvua1LRMVn3/FfBlzXoqF179B0VGYviz6rn75E9wsDw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-knex@0.48.0': - resolution: {integrity: sha512-V5wuaBPv/lwGxuHjC6Na2JFRjtPgstw19jTFl1B1b6zvaX8zVDYUDaR5hL7glnQtUSCMktPttQsgK4dhXpddcA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-koa@0.51.0': - resolution: {integrity: sha512-XNLWeMTMG1/EkQBbgPYzCeBD0cwOrfnn8ao4hWgLv0fNCFQu1kCsJYygz2cvKuCs340RlnG4i321hX7R8gj3Rg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-lru-memoizer@0.48.0': - resolution: {integrity: sha512-KUW29wfMlTPX1wFz+NNrmE7IzN7NWZDrmFWHM/VJcmFEuQGnnBuTIdsP55CnBDxKgQ/qqYFp4udQFNtjeFosPw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-memcached@0.47.0': - resolution: {integrity: sha512-vXDs/l4hlWy1IepPG1S6aYiIZn+tZDI24kAzwKKJmR2QEJRL84PojmALAEJGazIOLl/VdcCPZdMb0U2K0VzojA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-mongodb@0.56.0': - resolution: {integrity: sha512-YG5IXUUmxX3Md2buVMvxm9NWlKADrnavI36hbJsihqqvBGsWnIfguf0rUP5Srr0pfPqhQjUP+agLMsvu0GmUpA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-mongoose@0.50.0': - resolution: {integrity: sha512-Am8pk1Ct951r4qCiqkBcGmPIgGhoDiFcRtqPSLbJrUZqEPUsigjtMjoWDRLG1Ki1NHgOF7D0H7d+suWz1AAizw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-mysql2@0.50.0': - resolution: {integrity: sha512-PoOMpmq73rOIE3nlTNLf3B1SyNYGsp7QXHYKmeTZZnJ2Ou7/fdURuOhWOI0e6QZ5gSem18IR1sJi6GOULBQJ9g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-mysql@0.49.0': - resolution: {integrity: sha512-QU9IUNqNsrlfE3dJkZnFHqLjlndiU39ll/YAAEvWE40sGOCi9AtOF6rmEGzJ1IswoZ3oyePV7q2MP8SrhJfVAA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-nestjs-core@0.49.0': - resolution: {integrity: sha512-1R/JFwdmZIk3T/cPOCkVvFQeKYzbbUvDxVH3ShXamUwBlGkdEu5QJitlRMyVNZaHkKZKWgYrBarGQsqcboYgaw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-net@0.47.0': - resolution: {integrity: sha512-csoJ++Njpf7C09JH+0HNGenuNbDZBqO1rFhMRo6s0rAmJwNh9zY3M/urzptmKlqbKnf4eH0s+CKHy/+M8fbFsQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-oracledb@0.29.0': - resolution: {integrity: sha512-2aHLiJdkyiUbooIUm7FaZf+O4jyqEl+RfFpgud1dxT87QeeYM216wi+xaMNzsb5yKtRBqbA3qeHBCyenYrOZwA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-pg@0.56.1': - resolution: {integrity: sha512-0/PiHDPVaLdcXNw6Gqb3JBdMxComMEwh444X8glwiynJKJHRTR49+l2cqJfoOVzB8Sl1XRl3Yaqw6aDi3s8e9w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-pino@0.50.1': - resolution: {integrity: sha512-pBbvuWiHA9iAumAuQ0SKYOXK7NRlbnVTf/qBV0nMdRnxBPrc/GZTbh0f7Y59gZfYsbCLhXLL1oRTEnS+PwS3CA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-redis@0.52.0': - resolution: {integrity: sha512-R8Y7cCZlJ2Vl31S2i7bl5SqyC/aul54ski4wCFip/Tp9WGtLK1xVATi2rwy2wkc8ZCtjdEe9eEVR+QFG6gGZxg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-restify@0.49.0': - resolution: {integrity: sha512-tsGZZhS4mVZH7omYxw5jpsrD3LhWizqWc0PYtAnzpFUvL5ZINHE+cm57bssTQ2AK/GtZMxu9LktwCvIIf3dSmw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-router@0.48.0': - resolution: {integrity: sha512-Wixrc8CchuJojXpaS/dCQjFOMc+3OEil1H21G+WLYQb8PcKt5kzW9zDBT19nyjjQOx/D/uHPfgbrT+Dc7cfJ9w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-runtime-node@0.17.1': - resolution: {integrity: sha512-c1FlAk+bB2uF9a8YneGmNPTl7c/xVaan4mmWvbkWcOmH/ipKqR1LaKUlz/BMzLrJLjho1EJlG2NrS2w2Arg+nw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-socket.io@0.50.0': - resolution: {integrity: sha512-6JN6lnKN9ZuZtZdMQIR+no1qHzQvXSZUsNe3sSWMgqmNRyEXuDUWBIyKKeG0oHRHtR4xE4QhJyD4D5kKRPWZFA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-tedious@0.22.0': - resolution: {integrity: sha512-XrrNSUCyEjH1ax9t+Uo6lv0S2FCCykcF7hSxBMxKf7Xn0bPRxD3KyFUZy25aQXzbbbUHhtdxj3r2h88SfEM3aA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-undici@0.14.0': - resolution: {integrity: sha512-2HN+7ztxAReXuxzrtA3WboAKlfP5OsPA57KQn2AdYZbJ3zeRPcLXyW4uO/jpLE6PLm0QRtmeGCmfYpqRlwgSwg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.7.0 - - '@opentelemetry/instrumentation-winston@0.48.1': - resolution: {integrity: sha512-XyOuVwdziirHHYlsw+BWrvdI/ymjwnexupKA787zQQ+D5upaE/tseZxjfQa7+t4+FdVLxHICaMTmkSD4yZHpzQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation@0.203.0': - resolution: {integrity: sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-exporter-base@0.203.0': - resolution: {integrity: sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-grpc-exporter-base@0.203.0': - resolution: {integrity: sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-transformer@0.203.0': - resolution: {integrity: sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/propagator-b3@2.0.1': - resolution: {integrity: sha512-Hc09CaQ8Tf5AGLmf449H726uRoBNGPBL4bjr7AnnUpzWMvhdn61F78z9qb6IqB737TffBsokGAK1XykFEZ1igw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/propagator-jaeger@2.0.1': - resolution: {integrity: sha512-7PMdPBmGVH2eQNb/AtSJizQNgeNTfh6jQFqys6lfhd6P4r+m/nTh3gKPPpaCXVdRQ+z93vfKk+4UGty390283w==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/redis-common@0.38.2': - resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==} - engines: {node: ^18.19.0 || >=20.6.0} - - '@opentelemetry/resource-detector-alibaba-cloud@0.31.9': - resolution: {integrity: sha512-V+HbpICyzmJoQHYpiN0xRlj7QqeR9pPo+JZiZztV77L2MdlUCa/Cq7h0gdFNIKc0P9u9rYYYW21oaqdhhC5LZg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resource-detector-aws@2.6.0': - resolution: {integrity: sha512-atZ9/HNXh9ZJuMZUH2TPl89imFZBaoiU0Mksa70ysVhYRzhk3hfJyiu+eETjZ7NhGjBPrd3sfVYEq/St/7+o3g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resource-detector-azure@0.10.0': - resolution: {integrity: sha512-5cNAiyPBg53Uxe/CW7hsCq8HiKNAUGH+gi65TtgpzSR9bhJG4AEbuZhbJDFwe97tn2ifAD1JTkbc/OFuaaFWbA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resource-detector-container@0.7.9': - resolution: {integrity: sha512-BiS14kCylLzh/mayN/sjnOdhnpfgiekaEsIzaL29MErfQR0mFCZjAE2uu8jMjShva9bSDFs65ouuAFft+vBthg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resource-detector-gcp@0.37.0': - resolution: {integrity: sha512-LGpJBECIMsVKhiulb4nxUw++m1oF4EiDDPmFGW2aqYaAF0oUvJNv8Z/55CAzcZ7SxvlTgUwzewXDBsuCup7iqw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resources@2.0.1': - resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.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/sdk-logs@0.203.0': - resolution: {integrity: sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' - - '@opentelemetry/sdk-metrics@2.0.1': - resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.9.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-node@0.203.0': - resolution: {integrity: sha512-zRMvrZGhGVMvAbbjiNQW3eKzW/073dlrSiAKPVWmkoQzah9wfynpVPeL55f9fVIm0GaBxTLcPeukWGy0/Wj7KQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - - '@opentelemetry/sdk-trace-base@2.0.1': - resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.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-node@2.0.1': - resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/sdk-trace-node@2.1.0': - resolution: {integrity: sha512-SvVlBFc/jI96u/mmlKm86n9BbTCbQ35nsPoOohqJX6DXH92K0kTe73zGY5r8xoI1QkjR9PizszVJLzMC966y9Q==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/semantic-conventions@1.37.0': - resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} - engines: {node: '>=14'} - - '@opentelemetry/sql-common@0.41.2': - resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.1.0 - - '@optimize-lodash/rollup-plugin@5.0.2': - resolution: {integrity: sha512-UWBD9/C5jO0rDAbiqrZqiTLPD0LOHG3DzBo8ubLTpNWY9xOz5f5+S2yuxG/7ICk8sx8K6pZ8O/jsAbFgjtfh6w==} - engines: {node: '>= 18'} - peerDependencies: - rollup: '>= 4.x' - - '@optimize-lodash/transform@3.0.6': - resolution: {integrity: sha512-9+qMSaDpahC0+vX2ChM46/ls6a5Ankqs6RTLrHSaFpm7o1mFanP82e+jm9/0o5D660ueK8dWJGPCXQrBxBNNWA==} - engines: {node: '>= 12'} - - '@phosphor-icons/react@2.1.10': - resolution: {integrity: sha512-vt8Tvq8GLjheAZZYa+YG/pW7HDbov8El/MANW8pOAz4eGxrwhnbfrQZq0Cp4q8zBEu8NIhHdnr+r8thnfRSNYA==} - engines: {node: '>=10'} - peerDependencies: - react: '>= 16.8' - react-dom: '>= 16.8' - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@playwright/test@1.56.0': - resolution: {integrity: sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==} - engines: {node: '>=18'} - hasBin: true - - '@popperjs/core@2.11.8': - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - - '@protobuf-ts/protoc@2.11.1': - resolution: {integrity: sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==} - hasBin: true - - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-collection@1.1.7': - resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-direction@1.1.1': - resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-dismissable-layer@1.1.11': - resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-dropdown-menu@2.1.16': - resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-focus-guards@1.1.3': - resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-menu@2.1.16': - resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.1.11': - resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-tabs@1.1.13': - resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-tooltip@1.2.8': - resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-visually-hidden@1.2.3': - resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} - - '@react-aria/focus@3.21.2': - resolution: {integrity: sha512-JWaCR7wJVggj+ldmM/cb/DXFg47CXR55lznJhZBh4XVqJjMKwaOOqpT5vNN7kpC1wUpXicGNuDnJDN1S/+6dhQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/interactions@3.25.6': - resolution: {integrity: sha512-5UgwZmohpixwNMVkMvn9K1ceJe6TzlRlAfuYoQDUuOkk62/JVJNDLAPKIf5YMRc7d2B0rmfgaZLMtbREb0Zvkw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/ssr@3.9.10': - resolution: {integrity: sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==} - engines: {node: '>= 12'} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-aria/utils@3.31.0': - resolution: {integrity: sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-stately/flags@3.1.2': - resolution: {integrity: sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==} - - '@react-stately/utils@3.10.8': - resolution: {integrity: sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@react-types/shared@3.32.1': - resolution: {integrity: sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 - - '@redis/bloom@5.8.3': - resolution: {integrity: sha512-1eldTzHvdW3Oi0TReb8m1yiFt8ZwyF6rv1NpZyG5R4TpCwuAdKQetBKoCw7D96tNFgsVVd6eL+NaGZZCqhRg4g==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.8.3 - - '@redis/client@5.8.3': - resolution: {integrity: sha512-MZVUE+l7LmMIYlIjubPosruJ9ltSLGFmJqsXApTqPLyHLjsJUSAbAJb/A3N34fEqean4ddiDkdWzNu4ZKPvRUg==} - engines: {node: '>= 18'} - - '@redis/json@5.8.3': - resolution: {integrity: sha512-DRR09fy/u8gynHGJ4gzXYeM7D8nlS6EMv5o+h20ndTJiAc7RGR01fdk2FNjnn1Nz5PjgGGownF+s72bYG4nZKQ==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.8.3 - - '@redis/search@5.8.3': - resolution: {integrity: sha512-EMIvEeGRR2I0BJEz4PV88DyCuPmMT1rDtznlsHY3cKSDcc9vj0Q411jUnX0iU2vVowUgWn/cpySKjpXdZ8m+5g==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.8.3 - - '@redis/time-series@5.8.3': - resolution: {integrity: sha512-5Jwy3ilsUYQjzpE7WZ1lEeG1RkqQ5kHtwV1p8yxXHSEmyUbC/T/AVgyjMcm52Olj/Ov/mhDKjx6ndYUi14bXsw==} - engines: {node: '>= 18'} - peerDependencies: - '@redis/client': ^5.8.3 - - '@remirror/core-constants@3.0.0': - resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==} - - '@repeaterjs/repeater@3.0.6': - resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - - '@rollup/plugin-alias@5.1.1': - resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-commonjs@28.0.7': - resolution: {integrity: sha512-6cE2Wr/MkpdtTS8gXlCn9Zdmf7e9Xm96yFqOwFEXuvYLAHtjRf57/n6GEVF4K8NSesT1eKdBtcDA/SQdpW/8nA==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-esm-shim@0.1.8': - resolution: {integrity: sha512-xEU0b/BShgDDSPjidhJd4R74J9xZ9jLVtFWNGtsUXyEsdwwwB1a3XOAwwGaNIyUHD6EhxPO21JMfUmJWoMn7SA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-json@6.1.0': - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-node-resolve@16.0.3': - resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/plugin-virtual@3.0.2': - resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/pluginutils@5.3.0': - resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - - '@rollup/rollup-android-arm-eabi@4.50.2': - resolution: {integrity: sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm-eabi@4.52.4': - resolution: {integrity: sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.50.2': - resolution: {integrity: sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-android-arm64@4.52.4': - resolution: {integrity: sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.50.2': - resolution: {integrity: sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-arm64@4.52.4': - resolution: {integrity: sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.50.2': - resolution: {integrity: sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.52.4': - resolution: {integrity: sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.50.2': - resolution: {integrity: sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-arm64@4.52.4': - resolution: {integrity: sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.50.2': - resolution: {integrity: sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.52.4': - resolution: {integrity: sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.50.2': - resolution: {integrity: sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': - resolution: {integrity: sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.50.2': - resolution: {integrity: sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm-musleabihf@4.52.4': - resolution: {integrity: sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==} - cpu: [arm] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.50.2': - resolution: {integrity: sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-gnu@4.52.4': - resolution: {integrity: sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.50.2': - resolution: {integrity: sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-arm64-musl@4.52.4': - resolution: {integrity: sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==} - cpu: [arm64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.50.2': - resolution: {integrity: sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-loong64-gnu@4.52.4': - resolution: {integrity: sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==} - cpu: [loong64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.50.2': - resolution: {integrity: sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-ppc64-gnu@4.52.4': - resolution: {integrity: sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==} - cpu: [ppc64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.50.2': - resolution: {integrity: sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-gnu@4.52.4': - resolution: {integrity: sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.50.2': - resolution: {integrity: sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-riscv64-musl@4.52.4': - resolution: {integrity: sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==} - cpu: [riscv64] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.50.2': - resolution: {integrity: sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-s390x-gnu@4.52.4': - resolution: {integrity: sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==} - cpu: [s390x] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.50.2': - resolution: {integrity: sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-gnu@4.52.4': - resolution: {integrity: sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.50.2': - resolution: {integrity: sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-linux-x64-musl@4.52.4': - resolution: {integrity: sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==} - cpu: [x64] - os: [linux] - - '@rollup/rollup-openharmony-arm64@4.50.2': - resolution: {integrity: sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-openharmony-arm64@4.52.4': - resolution: {integrity: sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.50.2': - resolution: {integrity: sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-arm64-msvc@4.52.4': - resolution: {integrity: sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.50.2': - resolution: {integrity: sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.52.4': - resolution: {integrity: sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.52.4': - resolution: {integrity: sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.50.2': - resolution: {integrity: sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.52.4': - resolution: {integrity: sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==} - cpu: [x64] - os: [win32] - - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@rushstack/eslint-patch@1.14.0': - resolution: {integrity: sha512-WJFej426qe4RWOm9MMtP4V3CV4AucXolQty+GRgAWLgQXmpCuwzs7hEpxxhSc/znXUSxum9d/P/32MW0FlAAlA==} - - '@scarf/scarf@1.4.0': - resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} - - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - - '@segment/analytics-core@1.8.2': - resolution: {integrity: sha512-5FDy6l8chpzUfJcNlIcyqYQq4+JTUynlVoCeCUuVz+l+6W0PXg+ljKp34R4yLVCcY5VVZohuW+HH0VLWdwYVAg==} - - '@segment/analytics-generic-utils@1.2.0': - resolution: {integrity: sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==} - - '@segment/analytics-node@2.3.0': - resolution: {integrity: sha512-fOXLL8uY0uAWw/sTLmezze80hj8YGgXXlAfvSS6TUmivk4D/SP0C0sxnbpFdkUzWg2zT64qWIZj26afEtSnxUA==} - engines: {node: '>=20'} - - '@shadcn/ui@0.0.4': - resolution: {integrity: sha512-0dtu/5ApsOZ24qgaZwtif8jVwqol7a4m1x5AxPuM1k5wxhqU7t/qEfBGtaSki1R8VlbTQfCj5PAlO45NKCa7Gg==} - hasBin: true - - '@shikijs/core@3.14.0': - resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} - - '@shikijs/engine-javascript@3.14.0': - resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} - - '@shikijs/engine-oniguruma@3.14.0': - resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} - - '@shikijs/langs@3.14.0': - resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} - - '@shikijs/themes@3.14.0': - resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} - - '@shikijs/types@3.14.0': - resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - - '@sindresorhus/slugify@2.2.1': - resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} - engines: {node: '>=12'} - - '@sindresorhus/transliterate@1.6.0': - resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} - engines: {node: '>=12'} - - '@sinonjs/commons@3.0.1': - resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} - - '@sinonjs/fake-timers@10.3.0': - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - - '@smithy/abort-controller@4.2.2': - resolution: {integrity: sha512-fPbcmEI+A6QiGOuumTpKSo7z+9VYr5DLN8d5/8jDJOwmt4HAKy/UGuRstCMpKbtr+FMaHH4pvFinSAbIAYCHZQ==} - engines: {node: '>=18.0.0'} - - '@smithy/config-resolver@4.3.2': - resolution: {integrity: sha512-F/G+VaulIebINyfvcoXmODgIc7JU/lxWK9/iI0Divxyvd2QWB7/ZcF7JKwMssWI6/zZzlMkq/Pt6ow2AOEebPw==} - engines: {node: '>=18.0.0'} - - '@smithy/core@3.16.1': - resolution: {integrity: sha512-yRx5ag3xEQ/yGvyo80FVukS7ZkeUP49Vbzg0MjfHLkuCIgg5lFtaEJfZR178KJmjWPqLU4d0P4k7SKgF9UkOaQ==} - engines: {node: '>=18.0.0'} - - '@smithy/credential-provider-imds@4.2.2': - resolution: {integrity: sha512-hOjFTK+4mfehDnfjNkPqHUKBKR2qmlix5gy7YzruNbTdeoBE3QkfNCPvuCK2r05VUJ02QQ9bz2G41CxhSexsMw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-codec@4.2.2': - resolution: {integrity: sha512-TDJFBixL6p/CZ6VyTfU+9YrPtcriAouv2IECk5jM4Y3zRJYXyei8lvsCSMMgYW9mLMbtp3mvJbeI8SLOF2BunA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-browser@4.2.2': - resolution: {integrity: sha512-WDNt+DpzqlXibmCW/b4290dNPMPLL0KrrsXDUQsMycj1NhR60s90pgmRSqaVzNMI5jhdyYVVNMmSh6bgQ9/eiQ==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-config-resolver@4.3.2': - resolution: {integrity: sha512-vwc532Ji2FFaoXa+IaWXbO+OrG39t+atwlsLDwh2ayt5Ryn2Bd7gAnEZw6bHT/slreSn+4MKmO2fuRzA1wf1uA==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-node@4.2.2': - resolution: {integrity: sha512-JJ+PhJ3jf+Xshx6fmz10evfu4k0Xk/uv+i43JnsvIonyugiY8fU4CNhTKScYOU6lL9mAEKxvEhy5DCnElKvkZw==} - engines: {node: '>=18.0.0'} - - '@smithy/eventstream-serde-universal@4.2.2': - resolution: {integrity: sha512-QrHhyQV0s2D1RaXPLIPCIy/dAQD3bBSW8nw5IkOmgOHAPDs54nwe6UXR2nsl25fW92BTGVQeOOcHad6rJ2m81A==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.3.3': - resolution: {integrity: sha512-cipIcM3xQ5NdIVwcRb37LaQwIxZNMEZb/ZOPmLFS9uGo9TGx2dGCyMBj9oT7ypH4TUD/kOTc/qHmwQzthrSk+g==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.2.2': - resolution: {integrity: sha512-xuOPGrF2GUP+9og5NU02fplRVjJjMhAaY8ZconB3eLKjv/VSV9/s+sFf72MYO5Q2jcSRVk/ywZHpyGbE3FYnFQ==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.2.2': - resolution: {integrity: sha512-Z0844Zpoid5L1DmKX2+cn2Qu9i3XWjhzwYBRJEWrKJwjUuhEkzf37jKPj9dYFsZeKsAbS2qI0JyLsYafbXJvpA==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.2.0': - resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.2.2': - resolution: {integrity: sha512-aJ7LAuIXStF6EqzRVX9kAW+6/sYoJJv0QqoFrz2BhA9r/85kLYOJ6Ph47wYSGBxzSLxsYT5jqgMw/qpbv1+m+w==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.3.3': - resolution: {integrity: sha512-CfxQ6X9L87/3C67Po6AGWXsx8iS4w2BO8vQEZJD6hwqg2vNRC/lMa2O5wXYCG9tKotdZ0R8KG33TS7kpUnYKiw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.4.3': - resolution: {integrity: sha512-EHnKGeFuzbmER4oSl/VJDxPLi+aiZUb3nk5KK8eNwHjMhI04jHlui2ZkaBzMfNmXOgymaS6zV//fyt6PSnI1ow==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.2.2': - resolution: {integrity: sha512-tDMPMBCsA1GBxanShhPvQYwdiau3NmctUp+eELMhUTDua+EUrugXlaKCnTMMoEB5mbHFebdv81uJPkVP02oihA==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.2.2': - resolution: {integrity: sha512-7rgzDyLOQouh1bC6gOXnCGSX2dqvbOclgClsFkj735xQM2CHV63Ams8odNZGJgcqnBsEz44V/pDGHU6ALEUD+w==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.3.2': - resolution: {integrity: sha512-u38G0Audi2ORsL0QnzhopZ3yweMblQf8CZNbzUJ3wfTtZ7OiOwOzee0Nge/3dKeG/8lx0kt8K0kqDi6sYu0oKQ==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.4.1': - resolution: {integrity: sha512-9gKJoL45MNyOCGTG082nmx0A6KrbLVQ+5QSSKyzRi0AzL0R81u3wC1+nPvKXgTaBdAKM73fFPdCBHpmtipQwdQ==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.2.2': - resolution: {integrity: sha512-MW7MfI+qYe/Ue5RH0uEztEKB+vBlOMM+1Dz68qzTsY8fC9kanXMFPEVdiq35JTGKWt5wZAjU1R0uXYEjK2MM1g==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.3.2': - resolution: {integrity: sha512-nkKOI8xEkBXUmdxsFExomOb+wkU+Xgn0Fq2LMC7YIX5r4YPUg7PLayV/s/u3AtbyjWYlrvN7nAiDTLlqSdUjHw==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.2.2': - resolution: {integrity: sha512-YgXvq89o+R/8zIoeuXYv8Ysrbwgjx+iVYu9QbseqZjMDAhIg/FRt7jis0KASYFtd/Cnsnz4/nYTJXkJDWe8wHg==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.2.2': - resolution: {integrity: sha512-DczOD2yJy3NXcv1JvhjFC7bIb/tay6nnIRD/qrzBaju5lrkVBOwCT3Ps37tra20wy8PicZpworStK7ZcI9pCRQ==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.2.2': - resolution: {integrity: sha512-1X17cMLwe/vb4RpZbQVpJ1xQQ7fhQKggMdt3qjdV3+6QNllzvUXyS3WFnyaFWLyaGqfYHKkNONbO1fBCMQyZtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.3.2': - resolution: {integrity: sha512-AWnLgSmOTdDXM8aZCN4Im0X07M3GGffeL9vGfea4mdKZD0cPT9yLF9SsRbEa00tHLI+KfubDrmjpaKT2pM4GdQ==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.3.2': - resolution: {integrity: sha512-BRnQGGyaRSSL0KtjjFF9YoSSg8qzSqHMub4H2iKkd+LZNzZ1b7H5amslZBzi+AnvuwPMyeiNv0oqay/VmIuoRA==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.8.1': - resolution: {integrity: sha512-N5wK57pVThzLVK5NgmHxocTy5auqGDGQ+JsL5RjCTriPt8JLYgXT0Awa915zCpzc9hXHDOKqDX5g9BFdwkSfUA==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.7.1': - resolution: {integrity: sha512-WwP7vzoDyzvIFLzF5UhLQ6AsEx/PvSObzlNtJNW3lLy+BaSvTqCU628QKVvcJI/dydlAS1mSHQP7anKcxDcOxA==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.2.2': - resolution: {integrity: sha512-s2EYKukaswzjiHJCss6asB1F4zjRc0E/MFyceAKzb3+wqKA2Z/+Gfhb5FP8xVVRHBAvBkregaQAydifgbnUlCw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.3.0': - resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.2.0': - resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.2.1': - resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.2.0': - resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.2.0': - resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.3.2': - resolution: {integrity: sha512-6JvKHZ5GORYkEZ2+yJKEHp6dQQKng+P/Mu3g3CDy0fRLQgXEO8be+FLrBGGb4kB9lCW6wcQDkN7kRiGkkVAXgg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.2.3': - resolution: {integrity: sha512-bkTGuMmKvghfCh9NayADrQcjngoF8P+XTgID5r3rm+8LphFiuM6ERqpBS95YyVaLjDetnKus9zK/bGlkQOOtNQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.2.2': - resolution: {integrity: sha512-ZQi6fFTMBkfwwSPAlcGzArmNILz33QH99CL8jDfVWrzwVVcZc56Mge10jGk0zdRgWPXyL1/OXKjfw4vT5VtRQg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.2.0': - resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.2.2': - resolution: {integrity: sha512-wL9tZwWKy0x0qf6ffN7tX5CT03hb1e7XpjdepaKfKcPcyn5+jHAWPqivhF1Sw/T5DYi9wGcxsX8Lu07MOp2Puw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.2.2': - resolution: {integrity: sha512-TlbnWAOoCuG2PgY0Hi3BGU1w2IXs3xDsD4E8WDfKRZUn2qx3wRA9mbYnmpWHPswTJCz2L+ebh+9OvD42sV4mNw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.5.2': - resolution: {integrity: sha512-RWYVuQVKtNbr7E0IxV8XHDId714yHPTxU6dHScd6wSMWAXboErzTG7+xqcL+K3r0Xg0cZSlfuNhl1J0rzMLSSw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.2.0': - resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.2.0': - resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-waiter@4.2.2': - resolution: {integrity: sha512-ZkanmAo9F47PIxuxaQ1E+VPn/jNIbOM7cpJyABfyI15jnr4l5toSDVXPRuvHIyC2f4fMYC7EKe5DIde7YP7c7A==} - engines: {node: '>=18.0.0'} - - '@smithy/uuid@1.1.0': - resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} - engines: {node: '>=18.0.0'} - - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@swc/helpers@0.5.17': - resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - - '@tailwindcss/node@4.1.14': - resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==} - - '@tailwindcss/oxide-android-arm64@4.1.14': - resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@tailwindcss/oxide-darwin-arm64@4.1.14': - resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@tailwindcss/oxide-darwin-x64@4.1.14': - resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@tailwindcss/oxide-freebsd-x64@4.1.14': - resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': - resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': - resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-arm64-musl@4.1.14': - resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-gnu@4.1.14': - resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-linux-x64-musl@4.1.14': - resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@tailwindcss/oxide-wasm32-wasi@4.1.14': - resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - bundledDependencies: - - '@napi-rs/wasm-runtime' - - '@emnapi/core' - - '@emnapi/runtime' - - '@tybys/wasm-util' - - '@emnapi/wasi-threads' - - tslib - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': - resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@tailwindcss/oxide-win32-x64-msvc@4.1.14': - resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@tailwindcss/oxide@4.1.14': - resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==} - engines: {node: '>= 10'} - - '@tailwindcss/postcss@4.1.14': - resolution: {integrity: sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==} - - '@tailwindcss/typography@0.5.19': - resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - - '@tanstack/react-virtual@3.13.12': - resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tanstack/virtual-core@3.13.12': - resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} - - '@tiptap/core@2.26.3': - resolution: {integrity: sha512-TaOJzu2v5ufsOx+yu94NqXE504zmupVdFCxH1g3hk5fzZ3gT57Lh9R/27OjwM4e6o+Z3DXDl8yfFMHIcR3zUkg==} - peerDependencies: - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-blockquote@2.26.3': - resolution: {integrity: sha512-brz8+wh03TuMevNUztTSC9BzZEsLCNakPJCCicD8FRpBJoLj4benT6T3GYVdMhkk4BmhpruSFZB0FPY+rxCVlA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-bold@2.26.3': - resolution: {integrity: sha512-ssXKQxSwQ+Webv65emK/A1d13iTvnfbw8I2wlzuxsrMChyb4wH2HyqI5N4g0FpLqCpkXFumforoY+0XKktve+w==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-bubble-menu@2.26.3': - resolution: {integrity: sha512-vliC5bv/md4qkguqqL8w7LW8jnXBD1FLdSMDavHRVwdRaRnEfLRAIY7Oxtc1Voy3+762tfn912TuwDlCOPsNSQ==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-bullet-list@2.26.3': - resolution: {integrity: sha512-pfBMOup1JbXgf2aVTtG1A5t7qFZJrpD+wNPuypjF2YWmCl/pAlwbPFz9hNuWyZq14+QoQg5tML1/G1M7cgrrtw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-code-block@2.26.3': - resolution: {integrity: sha512-3DbzKRfMqw9EGS7mGkpyopbRWTO+qpV52Mby4Ll2+OfhvGnHzSN4Q7xOsp+VeZr14GMEmua5Oq2e/gRypqXatQ==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-code@2.26.3': - resolution: {integrity: sha512-bAkUNzV+tA1J1RYbtbAGTFqkRw9+yRpAd+d3S9jy/dAD+uOe1ZD1EIngyEf2GTonnoy4bpDYtytbCjUt9PozoA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-color@2.26.3': - resolution: {integrity: sha512-ijwfLpLWXDi797aKtQLPnMYrIQuC2g/Sqw+1k+tDNCfAgqK1LaALGiqf8j1vAcdE0tHdl37PIjud3Qv0hh6J5w==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/extension-text-style': ^2.7.0 - - '@tiptap/extension-document@2.26.3': - resolution: {integrity: sha512-gcJg4Otchilr4eSUwhPNwbhPUkEYvXhkUZ/1MAhVGD40Ovq2P8ZWkJipA3tKOCJinL5MJK59ccZBstnKSTw+JA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-dropcursor@2.26.3': - resolution: {integrity: sha512-54rgDTmRStVmXZR7KdCvSOCAbumh5luXgticUkRM8OM8PBe1c0T9X8jfV7+XEFGugRVl8mtCZZpgUt5vhuxHog==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-floating-menu@2.26.3': - resolution: {integrity: sha512-i2dsIMa0L6vjCPnTiXjPZXZqUu3sIIIAI+E1T4p0FsGYjjPTmN+AgkJqeO3bbe5XHmWcWKtgQevNCMF0kmU5rQ==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-gapcursor@2.26.3': - resolution: {integrity: sha512-ZDNSkpz7ik2PJOjrys27rwko5Ufe6GtLjaAxjvkWmyzcgAOTadDeth9NaRdBVMDGgSLBKbXihYZZXLkiAP9RLA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-hard-break@2.26.3': - resolution: {integrity: sha512-KJWUi+2KOZejVRb2KI0NM3LgCpNimxcunbOCKsZKygV/UByzhUl7UaCAIa+ySMM+kbu/Ec3hkTzafGfaU9ZkLg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-heading@2.26.3': - resolution: {integrity: sha512-bp7YildFOustuGJGl8TInG26h7xbcpBKskm49TjwyBjUqRHPGH4V11554afStAr+bsTlPN4TDXt7extvq3UYLA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-history@2.26.3': - resolution: {integrity: sha512-Qg4+WWf/hDgiBspxLbrhrIFUy7lzi2eBKPSoF/haEYFw/t/FeN60NXYYYtpLimUNpUzyJSOSIwsngFcVJO5X+g==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-horizontal-rule@2.26.3': - resolution: {integrity: sha512-NhlJEDj0b/P1Rj4UOMgt4CjS4IXEhXQFsdiXmsYZxchfr4J72HrsOfZs4vAqIQbkrLgUlYEr/DGMNWzME78FrA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-italic@2.26.3': - resolution: {integrity: sha512-DJX31JQsyerqoNM+hAtbjHoJ42W/EpnMMCtQr/gRS8ssEdrVtcDDhSO2tkaP6dNjhG8zH2hKYsXpLCCFdDgvwg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-list-item@2.26.3': - resolution: {integrity: sha512-9qU0SoC+tDSKYhfdWFS3dkioEk3ml1ycBeRmOxh7h+w0ezmTomiT5yvc9t3KM30ps8n1p78sIPo19GF65u1dFQ==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-ordered-list@2.26.3': - resolution: {integrity: sha512-x6G0qA7dAvSq+kphA7P64m+ScoVEAW8s9pl7o3jIJzcIW/LrbL1xkyOjbgCvGEvwyQVsgyqtLQDQ2oeloosDBw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-paragraph@2.26.3': - resolution: {integrity: sha512-eBC5UsaTJRUMhePtK1dcCAfes0CpqqFiewpIM0lWk4XMtpG2aoczVVVkImybbFKfqsvEEo3vgHJ2YiE5YZFCSg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-placeholder@2.26.3': - resolution: {integrity: sha512-HDF4FZj8CmQQvbSyXb/G+Ujqoue7TMQPMAe1h1OMJAXq856Y0AsVLXYKiBojUTfI11I7zVwYe08D8atIXHLZZw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - - '@tiptap/extension-strike@2.26.3': - resolution: {integrity: sha512-Po3al5hP0IwvHHIHYy3DbUvCD/kbYTsi3sWTjPAB9QgqaoJGl+jyhIyha8FsR+U3MCIIJIekMktI5o1+ySMGpg==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-text-style@2.26.3': - resolution: {integrity: sha512-B+t6k41xtmlIxyi0r+g8MAShGMCK6kmz8EdxoLAUVrlCxYWVk6qvzoojZbjQKlb2sE+idIo4X5yCcKpdkxFe0w==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/extension-text@2.26.3': - resolution: {integrity: sha512-sGRbX96ss4jQeKw9d0iphuAWja8Dv4w4ryTDKfxD7Lizx3UaIxQB/y+Wna89tM3kfbi/qJcrD3AF7NJgfc/tEA==} - peerDependencies: - '@tiptap/core': ^2.7.0 - - '@tiptap/pm@2.26.3': - resolution: {integrity: sha512-8gUmdxWlUevmgq2mNvGxvf2CpDW097tVKECMWKEn8sf846kXv3CoqaGRhI3db4kfR+09uWZeRM7rtrjRBmUThg==} - - '@tiptap/react@2.26.3': - resolution: {integrity: sha512-4g7pbdyawIO5YZXJQMwNv0dptblV4QUa7T/BYHe+PjAm4H+OeQbo7UmbxU427u8hPt1PhXZjbvT7D5i3r/MXCw==} - peerDependencies: - '@tiptap/core': ^2.7.0 - '@tiptap/pm': ^2.7.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - - '@tiptap/starter-kit@2.26.3': - resolution: {integrity: sha512-hznj/j+mFIuKfNB0ToaZVcVjdtpSOHoBoX3ocSz9BaYCtK+nX1c0gTlfbJ1BcpYUZNtqG+tpUeIfvXifRkq/OQ==} - - '@tokenizer/token@0.3.0': - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - - '@types/aws-lambda@8.10.152': - resolution: {integrity: sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw==} - - '@types/babel__core@7.20.5': - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - - '@types/babel__generator@7.27.0': - resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - - '@types/babel__template@7.4.4': - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - - '@types/babel__traverse@7.28.0': - resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} - - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - - '@types/bunyan@1.8.11': - resolution: {integrity: sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - - '@types/d3-array@3.2.2': - resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} - - '@types/d3-axis@3.0.6': - resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==} - - '@types/d3-brush@3.0.6': - resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==} - - '@types/d3-chord@3.0.6': - resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==} - - '@types/d3-color@3.1.3': - resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} - - '@types/d3-contour@3.0.6': - resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==} - - '@types/d3-delaunay@6.0.4': - resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==} - - '@types/d3-dispatch@3.0.7': - resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==} - - '@types/d3-drag@3.0.7': - resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==} - - '@types/d3-dsv@3.0.7': - resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==} - - '@types/d3-ease@3.0.2': - resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} - - '@types/d3-fetch@3.0.7': - resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==} - - '@types/d3-force@3.0.10': - resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==} - - '@types/d3-format@3.0.4': - resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==} - - '@types/d3-geo@3.1.0': - resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==} - - '@types/d3-hierarchy@3.1.7': - resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==} - - '@types/d3-interpolate@3.0.4': - resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} - - '@types/d3-path@3.1.1': - resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} - - '@types/d3-polygon@3.0.2': - resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==} - - '@types/d3-quadtree@3.0.6': - resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==} - - '@types/d3-random@3.0.3': - resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==} - - '@types/d3-scale-chromatic@3.1.0': - resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} - - '@types/d3-scale@4.0.9': - resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} - - '@types/d3-selection@3.0.11': - resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==} - - '@types/d3-shape@3.1.7': - resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==} - - '@types/d3-time-format@4.0.3': - resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==} - - '@types/d3-time@3.0.4': - resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} - - '@types/d3-timer@3.0.2': - resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} - - '@types/d3-transition@3.0.9': - resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==} - - '@types/d3-zoom@3.0.8': - resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} - - '@types/d3@7.4.3': - resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==} - - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/diff-match-patch@1.0.36': - resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} - - '@types/diff@7.0.2': - resolution: {integrity: sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/express-serve-static-core@4.19.7': - resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} - - '@types/express@4.17.23': - resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} - - '@types/geojson@7946.0.16': - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - - '@types/graceful-fs@4.1.9': - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/http-errors@2.0.5': - resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - - '@types/inquirer@9.0.9': - resolution: {integrity: sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/jest@29.5.14': - resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/katex@0.16.7': - resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - - '@types/mdast@3.0.15': - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - - '@types/memcached@2.2.10': - resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/mysql@2.15.27': - resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} - - '@types/node-fetch@2.6.13': - resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - - '@types/node@18.19.130': - resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - - '@types/node@20.19.21': - resolution: {integrity: sha512-CsGG2P3I5y48RPMfprQGfy4JPRZ6csfC3ltBZSRItG3ngggmNY/qs2uZKp4p9VbrpqNNSMzUZNFZKzgOGnd/VA==} - - '@types/node@22.18.10': - resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} - - '@types/oracledb@6.5.2': - resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==} - - '@types/pg-pool@2.0.6': - resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} - - '@types/pg@8.15.5': - resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==} - - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/react-dom@19.2.2': - resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==} - peerDependencies: - '@types/react': ^19.2.0 - - '@types/react-syntax-highlighter@15.5.13': - resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==} - - '@types/react@19.2.2': - resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} - - '@types/resolve@1.20.2': - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/semver@7.7.1': - resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} - - '@types/send@0.17.5': - resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} - - '@types/send@1.2.0': - resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==} - - '@types/serve-static@1.15.9': - resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==} - - '@types/stack-utils@2.0.3': - resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - - '@types/tedious@4.0.14': - resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} - - '@types/through@0.0.33': - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - - '@types/trusted-types@2.0.7': - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/use-sync-external-store@0.0.6': - resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} - - '@types/uuid@10.0.0': - resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} - - '@types/validator@13.15.3': - resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.33': - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - - '@typescript-eslint/eslint-plugin@8.46.1': - resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.46.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.46.1': - resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.46.1': - resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.46.1': - resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.46.1': - resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.46.1': - resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.46.1': - resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.46.1': - resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.46.1': - resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.46.1': - resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} - cpu: [x64] - os: [win32] - - '@upstash/redis@1.35.6': - resolution: {integrity: sha512-aSEIGJgJ7XUfTYvhQcQbq835re7e/BXjs8Janq6Pvr6LlmTZnyqwT97RziZLO/8AVUL037RLXqqiQC6kCt+5pA==} - - '@urql/core@5.2.0': - resolution: {integrity: sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==} - - '@vercel/oidc@3.0.2': - resolution: {integrity: sha512-JekxQ0RApo4gS4un/iMGsIL1/k4KUBe3HmnGcDvzHuFBdQdudEJgTqcsJC7y6Ul4Yw5CeykgvQbX2XeEJd0+DA==} - engines: {node: '>= 20'} - - '@webcontainer/env@1.1.1': - resolution: {integrity: sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng==} - - '@whatwg-node/disposablestack@0.0.6': - resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/events@0.1.2': - resolution: {integrity: sha512-ApcWxkrs1WmEMS2CaLLFUEem/49erT3sxIVjpzU5f6zmVcnijtDSrhoK2zVobOIikZJdH63jdAXOrvjf6eOUNQ==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/fetch@0.10.11': - resolution: {integrity: sha512-eR8SYtf9Nem1Tnl0IWrY33qJ5wCtIWlt3Fs3c6V4aAaTFLtkEQErXu3SSZg/XCHrj9hXSJ8/8t+CdMk5Qec/ZA==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/node-fetch@0.8.1': - resolution: {integrity: sha512-cQmQEo7IsI0EPX9VrwygXVzrVlX43Jb7/DBZSmpnC7xH4xkyOnn/HykHpTaQk7TUs7zh59A5uTGqx3p2Ouzffw==} - engines: {node: '>=18.0.0'} - - '@whatwg-node/promise-helpers@1.3.2': - resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} - engines: {node: '>=16.0.0'} - - '@whatwg-node/server@0.10.13': - resolution: {integrity: sha512-Otmxo+0mp8az3B48pLI1I4msNOXPIoP7TLm6h5wOEQmynqHt8oP9nR6NJUeJk6iI5OtFpQtkbJFwfGkmplvc3Q==} - engines: {node: '>=18.0.0'} - - abort-controller-x@0.4.3: - resolution: {integrity: sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==} - - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - accepts@2.0.0: - resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} - engines: {node: '>= 0.6'} - - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} - - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - - ai@4.3.19: - resolution: {integrity: sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q==} - engines: {node: '>=18'} - peerDependencies: - react: ^18 || ^19 || ^19.0.0-rc - zod: ^3.23.8 - peerDependenciesMeta: - react: - optional: true - - ai@5.0.60: - resolution: {integrity: sha512-80U/3kmdBW6g+JkLXpz/P2EwkyEaWlPlYtuLUpx/JYK9F7WZh9NnkYoh1KvUi1Sbpo0NyurBTvX0a2AG9mmbDA==} - engines: {node: '>=18'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} - - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-mutex@0.5.0: - resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - axe-core@4.11.0: - resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==} - engines: {node: '>=4'} - - axios@1.12.2: - resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - babel-jest@29.7.0: - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - - babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - - babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - - babel-preset-jest@29.6.3: - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - baseline-browser-mapping@2.8.16: - resolution: {integrity: sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==} - hasBin: true - - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - bl@5.1.0: - resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} - - body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - body-parser@2.2.0: - resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} - engines: {node: '>=18'} - - bowser@2.12.1: - resolution: {integrity: sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==} - - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.26.3: - resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - - 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@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - - builtins@5.1.0: - resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} - - bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} - - bundle-require@5.1.0: - resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.18' - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - caniuse-lite@1.0.30001750: - resolution: {integrity: sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==} - - case-anything@2.1.13: - resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} - engines: {node: '>=12.13'} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.2.0: - resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} - - chevrotain-allstar@0.3.1: - resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==} - peerDependencies: - chevrotain: ^11.0.0 - - chevrotain@11.0.3: - resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - citty@0.1.6: - resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - class-transformer@0.5.1: - resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} - - class-validator@0.14.2: - resolution: {integrity: sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==} - - class-variance-authority@0.7.1: - resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} - - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} - engines: {node: '>=0.10.0'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@12.1.0: - resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} - engines: {node: '>=18'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - - commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - - compare-versions@6.1.1: - resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concurrently@9.2.1: - resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} - engines: {node: '>=18'} - hasBin: true - - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - - consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} - - console-table-printer@2.14.6: - resolution: {integrity: sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-disposition@1.0.0: - resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie-signature@1.2.2: - resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} - engines: {node: '>=6.6.0'} - - cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} - - cose-base@2.2.0: - resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} - - create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - - crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} - - cross-fetch@3.2.0: - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - - cross-inspect@1.0.1: - resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} - engines: {node: '>=16.0.0'} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - - cytoscape-cose-bilkent@4.1.0: - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape-fcose@2.2.0: - resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} - peerDependencies: - cytoscape: ^3.2.0 - - cytoscape@3.33.1: - resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==} - engines: {node: '>=0.10'} - - d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} - - d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} - - d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} - - d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} - - d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} - - d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} - - d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} - - d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} - - d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} - - d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} - - d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} - hasBin: true - - d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} - - d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} - - d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} - - d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} - - d3-geo@3.1.1: - resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} - engines: {node: '>=12'} - - d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} - - d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} - - d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} - - d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} - - d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} - - d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} - - d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} - - d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} - - d3-scale-chromatic@3.1.0: - resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} - engines: {node: '>=12'} - - d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} - - d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} - - d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} - - d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} - - d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} - - d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} - - d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} - - d3-transition@3.0.1: - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} - peerDependencies: - d3-selection: 2 - 3 - - d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} - - d3@7.9.0: - resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} - engines: {node: '>=12'} - - dagre-d3-es@7.0.13: - resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==} - - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - date-fns@3.6.0: - resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==} - - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} - - dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - - dayjs@1.11.18: - resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - - decode-named-character-reference@1.2.0: - resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} - - dedent@1.7.0: - resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} - engines: {node: '>=18'} - - default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} - engines: {node: '>=18'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - 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'} - - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - - delaunator@5.0.1: - resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - - detect-libc@2.0.2: - resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} - engines: {node: '>=8'} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - diff-match-patch@1.0.5: - resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - - diff@7.0.0: - resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} - engines: {node: '>=0.3.1'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - dompurify@3.1.7: - resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==} - - dompurify@3.3.0: - resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dprint-node@1.0.8: - resolution: {integrity: sha512-iVKnUtYfGrYcW1ZAlfR/F59cUVL8QIhWoBJoSjkkdua/dkWIgjZfiLMeTjiB06X0ZLkQ0M2C1VbUj/CxkIf1zg==} - - dset@3.1.4: - resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} - engines: {node: '>=4'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - electrodb@3.4.7: - resolution: {integrity: sha512-kO7JmeMPkVHKX1nBFENRWzKHhivYmK7Kjd2KThEZCwnEzTgscovyg/z9h7GNfRtXR6kKWHjCgUrrhDzecrxM0A==} - - electron-to-chromium@1.5.235: - resolution: {integrity: sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ==} - - embla-carousel-react@8.6.0: - resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} - peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - - embla-carousel-reactive-utils@8.6.0: - resolution: {integrity: sha512-fMVUDUEx0/uIEDM0Mz3dHznDhfX+znCCDCeIophYb1QGVM7YThSWX+wz11zlYwWFOr74b4QLGg0hrGPJeG2s4A==} - peerDependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: - resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} - - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - empathic@2.0.0: - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} - engines: {node: '>=14'} - - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - - enhanced-resolve@5.18.3: - resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} - engines: {node: '>=10.13.0'} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - esast-util-from-estree@2.0.0: - resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} - - esast-util-from-js@2.0.1: - resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - - esbuild@0.25.10: - resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} - engines: {node: '>=18'} - hasBin: true - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - eslint-config-next@15.2.1: - resolution: {integrity: sha512-mhsprz7l0no8X+PdDnVHF4dZKu9YBJp2Rf6ztWbXBLJ4h6gxmW//owbbGJMBVUU+PibGJDAqZhW4pt8SC8HSow==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.10.1: - resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.32.0: - resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.37.0: - resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} - - estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-util-scope@1.0.0: - resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} - - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - eventsource-parser@3.0.6: - resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} - engines: {node: '>=18.0.0'} - - eventsource@3.0.7: - resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} - engines: {node: '>=18.0.0'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - - execa@9.6.0: - resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} - engines: {node: ^18.19.0 || >=20.5.0} - - exit-hook@4.0.0: - resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} - engines: {node: '>=18'} - - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - expr-eval@2.0.2: - resolution: {integrity: sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==} - - express-rate-limit@7.5.1: - resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} - engines: {node: '>= 16'} - peerDependencies: - express: '>= 4.11' - - express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} - - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - - exsolve@1.0.7: - resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-copy@3.0.2: - resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-patch@3.1.1: - resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - - fast-text-encoding@1.0.6: - resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} - - fast-xml-parser@5.2.5: - resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} - hasBin: true - - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - - 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 - - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} - - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} - - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} - - finalhandler@2.1.0: - resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} - engines: {node: '>= 0.8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - find-workspaces@0.3.1: - resolution: {integrity: sha512-UDkGILGJSA1LN5Aa7McxCid4sqW3/e+UYsVwyxki3dDT0F8+ym0rAfnCkEfkL0rO7M+8/mvkim4t/s3IPHmg+w==} - - fix-dts-default-cjs-exports@1.0.1: - resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data-encoder@1.7.2: - resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - formdata-node@4.4.1: - resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} - engines: {node: '>= 12.20'} - - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - - forwarded-parse@2.1.2: - resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fresh@2.0.0: - resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} - engines: {node: '>= 0.8'} - - fs-extra@11.3.2: - resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} - engines: {node: '>=14.14'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gaxios@5.1.3: - resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} - engines: {node: '>=12'} - - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - - gcp-metadata@5.3.0: - resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} - engines: {node: '>=12'} - - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-port@7.1.0: - resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} - engines: {node: '>=16'} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.12.0: - resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} - - giget@2.0.0: - resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} - hasBin: true - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - google-auth-library@8.9.0: - resolution: {integrity: sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==} - engines: {node: '>=12'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - - google-p12-pem@4.0.1: - resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} - engines: {node: '>=12.0.0'} - deprecated: Package is no longer maintained - hasBin: true - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - graphql-query-complexity@0.12.0: - resolution: {integrity: sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw==} - peerDependencies: - graphql: ^14.6.0 || ^15.0.0 || ^16.0.0 - - graphql-request@6.1.0: - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} - peerDependencies: - graphql: 14 - 16 - - graphql-scalars@1.24.2: - resolution: {integrity: sha512-FoZ11yxIauEnH0E5rCUkhDXHVn/A6BBfovJdimRZCQlFCl+h7aVvarKmI15zG4VtQunmCDdqdtNs6ixThy3uAg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - - graphql-yoga@5.16.0: - resolution: {integrity: sha512-/R2dJea7WgvNlXRU4F8iFwWd95Qn1mN+R+yC8XBs1wKjUzr0Pvv8cGYtt6UUcVHw5CiDEtu7iQY5oOe3sDAWCQ==} - engines: {node: '>=18.0.0'} - peerDependencies: - graphql: ^15.2.0 || ^16.0.0 - - graphql@16.11.0: - resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - - groq-sdk@0.5.0: - resolution: {integrity: sha512-RVmhW7qZ+XZoy5fIuSdx/LGQJONpL8MHgZEW7dFwTdgkzStub2XQx6OKv28CHogijdwH41J+Npj/z2jBPu3vmw==} - - gtoken@6.1.2: - resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==} - engines: {node: '>=12.0.0'} - - hachure-fill@0.5.2: - resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hast-util-from-dom@5.0.1: - resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} - - hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} - - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} - - hast-util-to-estree@3.1.3: - resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} - - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} - - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - - hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - help-me@5.0.0: - resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} - - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - - highlightjs-vue@1.0.0: - resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - - hono-openapi@0.4.8: - resolution: {integrity: sha512-LYr5xdtD49M7hEAduV1PftOMzuT8ZNvkyWfh1DThkLsIr4RkvDb12UxgIiFbwrJB6FLtFXLoOZL9x4IeDk2+VA==} - peerDependencies: - '@hono/arktype-validator': ^2.0.0 - '@hono/effect-validator': ^1.2.0 - '@hono/typebox-validator': ^0.2.0 || ^0.3.0 - '@hono/valibot-validator': ^0.5.1 - '@hono/zod-validator': ^0.4.1 - '@sinclair/typebox': ^0.34.9 - '@valibot/to-json-schema': ^1.0.0-beta.3 - arktype: ^2.0.0 - effect: ^3.11.3 - hono: ^4.6.13 - openapi-types: ^12.1.3 - valibot: ^1.0.0-beta.9 - zod: ^3.23.8 - zod-openapi: ^4.0.0 - peerDependenciesMeta: - '@hono/arktype-validator': - optional: true - '@hono/effect-validator': - optional: true - '@hono/typebox-validator': - optional: true - '@hono/valibot-validator': - optional: true - '@hono/zod-validator': - optional: true - '@sinclair/typebox': - optional: true - '@valibot/to-json-schema': - optional: true - arktype: - optional: true - effect: - optional: true - hono: - optional: true - valibot: - optional: true - zod: - optional: true - zod-openapi: - optional: true - - hono@4.10.3: - resolution: {integrity: sha512-2LOYWUbnhdxdL8MNbNg9XZig6k+cZXm5IjHn2Aviv7honhBMOHb+jxrKIeJRZJRmn+htUCKhaicxwXuUDlchRA==} - engines: {node: '>=16.9.0'} - - hono@4.9.12: - resolution: {integrity: sha512-SrTC0YxqPwnN7yKa8gg/giLyQ2pILCKoideIHbYbFQlWZjYt68D2A4Ae1hehO/aDQ6RmTcpqOV/O2yBtMzx/VQ==} - engines: {node: '>=16.9.0'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - html-url-attributes@3.0.1: - resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - - human-signals@8.0.1: - resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} - engines: {node: '>=18.18.0'} - - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - ibm-cloud-sdk-core@5.4.3: - resolution: {integrity: sha512-D0lvClcoCp/HXyaFlCbOT4aTYgGyeIb4ncxZpxRuiuw7Eo79C6c49W53+8WJRD9nxzT5vrIdaky3NBcTdBtaEg==} - engines: {node: '>=18'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-in-the-middle@1.15.0: - resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} - - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - - inline-style-parser@0.2.4: - resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - - inquirer@12.10.0: - resolution: {integrity: sha512-K/epfEnDBZj2Q3NMDcgXWZye3nhSPeoJnOh8lcKWrldw54UEZfS4EmAMsAsmVbl7qKi+vjAsy39Sz4fbgRMewg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} - - internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} - - ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - 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'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - 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@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - - is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} - - is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} - - is2@2.0.9: - resolution: {integrity: sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==} - engines: {node: '>=v0.10.0'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - - istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - - istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} - - istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - - istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - - istanbul-reports@3.2.0: - resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} - engines: {node: '>=8'} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - - jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@29.7.0: - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - - jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} - hasBin: true - - jose@5.10.0: - resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} - - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - - js-base64@3.7.8: - resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} - - js-tiktoken@1.0.21: - resolution: {integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-to-zod@2.6.1: - resolution: {integrity: sha512-uiHmWH21h9FjKJkRBntfVGTLpYlCZ1n98D0izIlByqQLqpmkQpNTBtfbdP04Na6+43lgsvrShFh2uWLkQDKJuQ==} - hasBin: true - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-walker@2.0.0: - resolution: {integrity: sha512-nXN2cMky0Iw7Af28w061hmxaPDaML5/bQD9nwm1lOoIKEGjHcRGxqWe4MfrkYThYAPjSUhmsp4bJNoLAyVn9Xw==} - engines: {node: '>=10'} - - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsondiffpatch@0.6.0: - resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - jsonschema@1.2.7: - resolution: {integrity: sha512-3dFMg9hmI9LdHag/BRIhMefCfbq1hicvYMy8YhZQorAdzOzWz7NjniSpn39yjpzUAMIWtGyyZuH2KNBloH7ZLw==} - - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} - - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - - katex@0.16.25: - resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - khroma@2.1.0: - resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - - langchain@0.3.36: - resolution: {integrity: sha512-PqC19KChFF0QlTtYDFgfEbIg+SCnCXox29G8tY62QWfj9bOW7ew2kgWmPw5qoHLOTKOdQPvXET20/1Pdq8vAtQ==} - engines: {node: '>=18'} - peerDependencies: - '@langchain/anthropic': '*' - '@langchain/aws': '*' - '@langchain/cerebras': '*' - '@langchain/cohere': '*' - '@langchain/core': '>=0.3.58 <0.4.0' - '@langchain/deepseek': '*' - '@langchain/google-genai': '*' - '@langchain/google-vertexai': '*' - '@langchain/google-vertexai-web': '*' - '@langchain/groq': '*' - '@langchain/mistralai': '*' - '@langchain/ollama': '*' - '@langchain/xai': '*' - axios: '*' - cheerio: '*' - handlebars: ^4.7.8 - peggy: ^3.0.2 - typeorm: '*' - peerDependenciesMeta: - '@langchain/anthropic': - optional: true - '@langchain/aws': - optional: true - '@langchain/cerebras': - optional: true - '@langchain/cohere': - optional: true - '@langchain/deepseek': - optional: true - '@langchain/google-genai': - optional: true - '@langchain/google-vertexai': - optional: true - '@langchain/google-vertexai-web': - optional: true - '@langchain/groq': - optional: true - '@langchain/mistralai': - optional: true - '@langchain/ollama': - optional: true - '@langchain/xai': - optional: true - axios: - optional: true - cheerio: - optional: true - handlebars: - optional: true - peggy: - optional: true - typeorm: - optional: true - - langium@3.3.1: - resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} - engines: {node: '>=16.0.0'} - - langsmith@0.3.74: - resolution: {integrity: sha512-ZuW3Qawz8w88XcuCRH91yTp6lsdGuwzRqZ5J0Hf5q/AjMz7DwcSv0MkE6V5W+8hFMI850QZN2Wlxwm3R9lHlZg==} - peerDependencies: - '@opentelemetry/api': '*' - '@opentelemetry/exporter-trace-otlp-proto': '*' - '@opentelemetry/sdk-trace-base': '*' - openai: '*' - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@opentelemetry/exporter-trace-otlp-proto': - optional: true - '@opentelemetry/sdk-trace-base': - optional: true - openai: - optional: true - - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - - layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} - - layout-base@2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - libphonenumber-js@1.12.24: - resolution: {integrity: sha512-l5IlyL9AONj4voSd7q9xkuQOL4u8Ty44puTic7J88CmdXkxfGsRfoVLXHCxppwehgpb/Chdb80FFehHqjN3ItQ==} - - libsql@0.5.22: - resolution: {integrity: sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==} - cpu: [x64, arm64, wasm32, arm] - os: [darwin, linux, win32] - - lightningcss-darwin-arm64@1.30.1: - resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.30.1: - resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.30.1: - resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.30.1: - resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.30.1: - resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.30.1: - resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.30.1: - resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.30.1: - resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.30.1: - resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.30.1: - resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.30.1: - resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} - engines: {node: '>= 12.0.0'} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - - lit-element@4.2.1: - resolution: {integrity: sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==} - - lit-html@3.3.1: - resolution: {integrity: sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==} - - lit@3.3.1: - resolution: {integrity: sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - local-pkg@1.1.2: - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} - engines: {node: '>=14'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.get@4.4.2: - 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.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==} - - log-symbols@5.1.0: - resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} - engines: {node: '>=12'} - - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lowlight@1.20.0: - resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lucide-react@0.477.0: - resolution: {integrity: sha512-yCf7aYxerFZAbd8jHJxjwe1j7jEMPptjnaOqdYeirFnEy85cNR3/L+o0I875CYFYya+eEVzZSbNuRk8BZPDpVw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - lucide-react@0.525.0: - resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - lucide-react@0.542.0: - resolution: {integrity: sha512-w3hD8/SQB7+lzU2r4VdFyzzOzKnUjTZIF/MQJGSSvni7Llewni4vuViRppfRAa2guOsY5k4jZyxw/i9DQHv+dw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - lucide@0.525.0: - resolution: {integrity: sha512-sfehWlaE/7NVkcEQ4T9JD3eID8RNMIGJBBUq9wF3UFiJIrcMKRbU3g1KGfDk4svcW7yw8BtDLXaXo02scDtUYQ==} - - magic-string@0.30.19: - resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} - - markdown-it-ins@4.0.0: - resolution: {integrity: sha512-sWbjK2DprrkINE4oYDhHdCijGT+MIDhEupjSHLXe5UXeVr5qmVxs/nTUVtgi0Oh/qtF+QKV0tNWDhQBEPxiMew==} - - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - - marked@14.0.0: - resolution: {integrity: sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==} - engines: {node: '>= 18'} - hasBin: true - - marked@16.4.1: - resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} - engines: {node: '>= 20'} - hasBin: true - - mastra@0.15.1: - resolution: {integrity: sha512-8C+2/ANWRrDN82gBvWpvcsi0tuntgZvXu2QdPGuqLAoap/vinzMVQXMXDgLtvlQ8shW1E7x6Vwsr0UzoNPKrAg==} - hasBin: true - peerDependencies: - '@mastra/core': '>=0.20.1-0 <0.21.0-0' - zod: ^3.25.0 || ^4.0.0 - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - - mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} - - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - - mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} - - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - media-typer@1.1.0: - resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} - engines: {node: '>= 0.8'} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge-descriptors@2.0.0: - resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} - engines: {node: '>=18'} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - mermaid@11.12.1: - resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - - micromark-extension-mdx-expression@3.0.1: - resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} - - micromark-extension-mdx-jsx@3.0.2: - resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} - - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} - - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - - micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-mdx-expression@2.0.3: - resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} - - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-events-to-acorn@2.0.3: - resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} - - micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime-types@3.0.1: - resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} - - mlly@1.8.0: - resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} - - mnemonist@0.38.3: - resolution: {integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==} - - module-details-from-path@1.0.4: - resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - - monaco-editor@0.54.0: - resolution: {integrity: sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==} - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - napi-postinstall@0.3.4: - resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - next-themes@0.4.6: - resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} - peerDependencies: - react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - - next@15.2.1: - resolution: {integrity: sha512-zxbsdQv3OqWXybK5tMkPCBKyhIz63RstJ+NvlfkaLMc/m5MwXgz2e92k+hSKcyBpyADhMk2C31RIiaDjUZae7g==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - - nice-grpc-client-middleware-retry@3.1.12: - resolution: {integrity: sha512-CHKIeHznAePOsT2dLeGwoOFaybQz6LvkIsFfN8SLcyGyTR7AB6vZMaECJjx+QPL8O2qVgaVE167PdeOmQrPuag==} - - nice-grpc-common@2.0.2: - resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==} - - nice-grpc@2.1.13: - resolution: {integrity: sha512-IkXNok2NFyYh0WKp1aJFwFV3Ue2frBkJ16ojrmgX3Tc9n0g7r0VU+ur3H/leDHPPGsEeVozdMynGxYT30k3D/Q==} - - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - deprecated: Use your platform's native DOMException instead - - node-fetch-native@1.6.7: - resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.23: - resolution: {integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} - - nypm@0.6.2: - resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} - engines: {node: ^14.16.0 || >=16.10.0} - hasBin: true - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - - obliterator@1.6.1: - resolution: {integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==} - - on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - oniguruma-parser@0.12.1: - resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} - - oniguruma-to-es@4.3.3: - resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} - - open@10.2.0: - resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} - engines: {node: '>=18'} - - openai@4.104.0: - resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - - openai@5.12.2: - resolution: {integrity: sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==} - hasBin: true - peerDependencies: - ws: ^8.18.0 - zod: ^3.23.8 - peerDependenciesMeta: - ws: - optional: true - zod: - optional: true - - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - ora@6.3.1: - resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - orderedmap@2.1.1: - resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - - p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - - package-manager-detector@1.5.0: - resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - partial-json@0.1.7: - resolution: {integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==} - - path-data-parser@0.1.0: - resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - - pathe@2.0.3: - resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - - peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} - - pg-cloudflare@1.2.7: - resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} - - pg-connection-string@2.9.1: - resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} - - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-pool@3.10.1: - resolution: {integrity: sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==} - peerDependencies: - pg: '>=8.0' - - pg-protocol@1.10.3: - resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} - - pg-types@2.2.0: - resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} - engines: {node: '>=4'} - - pg@8.16.3: - resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==} - 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@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - - pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - - pino-pretty@11.3.0: - resolution: {integrity: sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==} - hasBin: true - - pino-pretty@13.1.2: - resolution: {integrity: sha512-3cN0tCakkT4f3zo9RXDIhy6GTvtYD6bK4CRBLN9j3E/ePqN1tugAXD5rGVfoChW6s0hiek+eyYlLNqc/BG7vBQ==} - hasBin: true - - pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - - pino@9.13.1: - resolution: {integrity: sha512-Szuj+ViDTjKPQYiKumGmEn3frdl+ZPSdosHyt9SnUevFosOkMY2b7ipxlEctNKPmMD/VibeBI+ZcZCJK+4DPuw==} - hasBin: true - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - - pkce-challenge@5.0.0: - resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} - engines: {node: '>=16.20.0'} - - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - - playwright-core@1.56.0: - resolution: {integrity: sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.56.0: - resolution: {integrity: sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==} - engines: {node: '>=18'} - hasBin: true - - points-on-curve@0.2.0: - resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} - - points-on-path@0.2.1: - resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - postcss-selector-parser@6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} - engines: {node: ^10 || ^12 || >=14} - - postgres-array@2.0.0: - resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} - engines: {node: '>=4'} - - postgres-bytea@1.0.0: - resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} - engines: {node: '>=0.10.0'} - - postgres-date@1.0.7: - resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} - engines: {node: '>=0.10.0'} - - postgres-interval@1.2.0: - resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} - engines: {node: '>=0.10.0'} - - postgres@3.4.7: - resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} - engines: {node: '>=12'} - - posthog-node@4.18.0: - resolution: {integrity: sha512-XROs1h+DNatgKh/AlIlCtDxWzwrKdYDb2mOs58n4yN8BkGN9ewqeQwG5ApS4/IzwCb7HPttUkOVulkYatd2PIw==} - engines: {node: '>=15.0.0'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - pretty-ms@9.3.0: - resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} - engines: {node: '>=18'} - - prismjs@1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - process-warning@5.0.0: - resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - - promise-limit@2.7.0: - resolution: {integrity: sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - - prosemirror-changeset@2.3.1: - resolution: {integrity: sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==} - - prosemirror-collab@1.3.1: - resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} - - prosemirror-commands@1.7.1: - resolution: {integrity: sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==} - - prosemirror-dropcursor@1.8.2: - resolution: {integrity: sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==} - - prosemirror-gapcursor@1.3.2: - resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} - - prosemirror-history@1.4.1: - resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} - - prosemirror-inputrules@1.5.0: - resolution: {integrity: sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==} - - prosemirror-keymap@1.2.3: - resolution: {integrity: sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==} - - prosemirror-markdown@1.13.2: - resolution: {integrity: sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==} - - prosemirror-menu@1.2.5: - resolution: {integrity: sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==} - - prosemirror-model@1.25.3: - resolution: {integrity: sha512-dY2HdaNXlARknJbrManZ1WyUtos+AP97AmvqdOQtWtrrC5g4mohVX5DTi9rXNFSk09eczLq9GuNTtq3EfMeMGA==} - - prosemirror-schema-basic@1.2.4: - resolution: {integrity: sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==} - - prosemirror-schema-list@1.5.1: - resolution: {integrity: sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==} - - prosemirror-state@1.4.3: - resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} - - prosemirror-tables@1.8.1: - resolution: {integrity: sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==} - - prosemirror-trailing-node@3.0.0: - resolution: {integrity: sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==} - peerDependencies: - prosemirror-model: ^1.22.1 - prosemirror-state: ^1.4.2 - prosemirror-view: ^1.33.8 - - prosemirror-transform@1.10.4: - resolution: {integrity: sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==} - - prosemirror-view@1.41.3: - resolution: {integrity: sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==} - - protobufjs@7.5.4: - resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} - engines: {node: '>=12.0.0'} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@6.1.0: - resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - - qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - - radash@12.1.1: - resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==} - engines: {node: '>=14.18.0'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - - raw-body@3.0.1: - resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} - engines: {node: '>= 0.10'} - - react-dom@19.2.0: - resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} - peerDependencies: - react: ^19.2.0 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - - react-markdown@10.1.0: - resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} - peerDependencies: - '@types/react': '>=18' - react: '>=18' - - react-markdown@8.0.7: - resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - - react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - react-syntax-highlighter@15.6.6: - resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} - peerDependencies: - react: '>= 0.14.0' - - react@19.2.0: - resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} - engines: {node: '>=0.10.0'} - - readable-stream@3.6.2: - 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} - - readable-web-to-node-stream@3.0.4: - resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} - engines: {node: '>=8'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - - recma-build-jsx@1.0.0: - resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - - recma-jsx@1.0.1: - resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - recma-parse@1.0.0: - resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} - - recma-stringify@1.0.0: - resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - - redis@5.8.3: - resolution: {integrity: sha512-MfSrfV6+tEfTw8c4W0yFp6XWX8Il4laGU7Bx4kvW4uiYM1AuZ3KGqEGt1LdQHeD1nEyLpIWetZ/SpY3kkbgrYw==} - engines: {node: '>= 18'} - - reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} - - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.0.1: - resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - rehype-harden@1.1.5: - resolution: {integrity: sha512-JrtBj5BVd/5vf3H3/blyJatXJbzQfRT9pJBmjafbTaPouQCAKxHwRyCc7dle9BXQKxv4z1OzZylz/tNamoiG3A==} - - rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - - rehype-recma@1.0.0: - resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - - remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - - remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - - remark-mdx@3.1.1: - resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} - - remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} - - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve.exports@2.0.3: - resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} - engines: {node: '>=10'} - - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - retry-axios@2.6.0: - resolution: {integrity: sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==} - engines: {node: '>=10.7.0'} - peerDependencies: - axios: '*' - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - - rollup-plugin-esbuild@6.2.1: - resolution: {integrity: sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==} - engines: {node: '>=14.18.0'} - peerDependencies: - esbuild: '>=0.18.0' - rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 - - rollup-plugin-node-externals@8.1.1: - resolution: {integrity: sha512-MEWJmXMGjo5E7o9hgAmma6XLCdU9gTVRcaaCubugTJdoJD3A91qxtxiukT9k2PeUdogtCaNehV3pvJUWrRNtwg==} - engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'} - peerDependencies: - rollup: ^4.0.0 - - rollup@4.50.2: - resolution: {integrity: sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.52.4: - resolution: {integrity: sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - rope-sequence@1.3.4: - resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - - roughjs@4.6.6: - resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} - - router@2.2.0: - 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@4.0.6: - resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scheduler@0.27.0: - resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} - - secure-json-parse@2.7.0: - resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - - secure-json-parse@4.1.0: - resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - - send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} - - send@1.2.0: - resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} - engines: {node: '>= 18'} - - serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} - - serve-static@2.2.0: - resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} - engines: {node: '>= 18'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - - shiki@3.14.0: - resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - sift@17.1.3: - resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - - simple-wcswidth@1.1.2: - resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slow-redact@0.3.2: - resolution: {integrity: sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==} - - sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - deprecated: The work that was done in this beta branch won't be included in future versions - - space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - state-local@1.0.7: - resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - stdin-discarder@0.1.0: - resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - - streamdown@1.4.0: - resolution: {integrity: sha512-ylhDSQ4HpK5/nAH9v7OgIIdGJxlJB2HoYrYkJNGrO8lMpnWuKUcrz/A8xAMwA6eILA27469vIavcOTjmxctrKg==} - peerDependencies: - react: ^18.0.0 || ^19.0.0 - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} - engines: {node: '>=12'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - strip-json-comments@5.0.3: - resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} - engines: {node: '>=14.16'} - - strnum@2.1.1: - resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} - - strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} - - style-to-js@1.1.18: - resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} - - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - - style-to-object@1.0.11: - resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} - - styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - stylis@4.3.6: - resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - swr@2.3.6: - resolution: {integrity: sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - - tailwind-merge@3.3.1: - resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} - - tailwindcss-animate@1.0.7: - resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} - peerDependencies: - tailwindcss: '>=3.0.0 || insiders' - - tailwindcss@4.1.14: - resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==} - - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - - tar@7.5.1: - resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} - engines: {node: '>=18'} - - tcp-port-used@1.0.2: - resolution: {integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} - - throttleit@2.1.0: - resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} - engines: {node: '>=18'} - - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - - tinyexec@1.0.1: - resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - tippy.js@6.3.7: - resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} - - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - - ts-deepmerge@7.0.3: - resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} - engines: {node: '>=14.13.1'} - - ts-error@1.0.6: - resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - ts-jest@29.4.5: - resolution: {integrity: sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 || ^30.0.0 - '@jest/types': ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 - esbuild: '*' - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/transform': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - jest-util: - optional: true - - ts-poet@6.12.0: - resolution: {integrity: sha512-xo+iRNMWqyvXpFTaOAvLPA5QAWO6TZrSUs5s4Odaya3epqofBu/fMLHEWl8jPmjhA0s9sgj9sNvF1BmaQlmQkA==} - - ts-proto-descriptors@2.0.0: - resolution: {integrity: sha512-wHcTH3xIv11jxgkX5OyCSFfw27agpInAd6yh89hKG6zqIXnjW9SYqSER2CVQxdPj4czeOhGagNvZBEbJPy7qkw==} - - ts-proto@2.7.7: - resolution: {integrity: sha512-/OfN9/Yriji2bbpOysZ/Jzc96isOKz+eBTJEcKaIZ0PR6x1TNgVm4Lz0zfbo+J0jwFO7fJjJyssefBPQ0o1V9A==} - hasBin: true - - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - tsup@8.5.0: - resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - - tsx@4.20.6: - resolution: {integrity: sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==} - engines: {node: '>=18.0.0'} - hasBin: true - - turbo-darwin-64@2.5.8: - resolution: {integrity: sha512-Dh5bCACiHO8rUXZLpKw+m3FiHtAp2CkanSyJre+SInEvEr5kIxjGvCK/8MFX8SFRjQuhjtvpIvYYZJB4AGCxNQ==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.5.8: - resolution: {integrity: sha512-f1H/tQC9px7+hmXn6Kx/w8Jd/FneIUnvLlcI/7RGHunxfOkKJKvsoiNzySkoHQ8uq1pJnhJ0xNGTlYM48ZaJOQ==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.5.8: - resolution: {integrity: sha512-hMyvc7w7yadBlZBGl/bnR6O+dJTx3XkTeyTTH4zEjERO6ChEs0SrN8jTFj1lueNXKIHh1SnALmy6VctKMGnWfw==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.5.8: - resolution: {integrity: sha512-LQELGa7bAqV2f+3rTMRPnj5G/OHAe2U+0N9BwsZvfMvHSUbsQ3bBMWdSQaYNicok7wOZcHjz2TkESn1hYK6xIQ==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.5.8: - resolution: {integrity: sha512-3YdcaW34TrN1AWwqgYL9gUqmZsMT4T7g8Y5Azz+uwwEJW+4sgcJkIi9pYFyU4ZBSjBvkfuPZkGgfStir5BBDJQ==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.5.8: - resolution: {integrity: sha512-eFC5XzLmgXJfnAK3UMTmVECCwuBcORrWdewoiXBnUm934DY6QN8YowC/srhNnROMpaKaqNeRpoB5FxCww3eteQ==} - cpu: [arm64] - os: [win32] - - turbo@2.5.8: - resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==} - hasBin: true - - tw-animate-css@1.4.0: - resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - - type-graphql@2.0.0-rc.1: - resolution: {integrity: sha512-HCu4j3jR0tZvAAoO7DMBT3MRmah0DFRe5APymm9lXUghXA0sbhiMf6SLRafRYfk0R0KiUQYRduuGP3ap1RnF1Q==} - engines: {node: '>= 18.12.0'} - peerDependencies: - class-validator: '>=0.14.0' - graphql: ^16.8.1 - graphql-scalars: ^1.22.4 - peerDependenciesMeta: - class-validator: - optional: true - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-paths@1.5.1: - resolution: {integrity: sha512-lYErSLCON2MSplVV5V/LBgD4UNjMgY3guATdFCZY2q1Nr6OZEu4q6zX/rYMsG1TaWqqQSszg6C9EU7AGWMDrIw==} - peerDependencies: - typescript: ^4.7.2 || ^5 - - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} - engines: {node: '>=14.17'} - hasBin: true - - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - ufo@1.6.1: - resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - uncrypto@0.1.3: - resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - - unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - - unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - unplugin-utils@0.2.5: - resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==} - engines: {node: '>=18.12.0'} - - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - - untruncate-json@0.0.1: - resolution: {integrity: sha512-4W9enDK4X1y1s2S/Rz7ysw6kDuMS3VmRjMFg7GZrNO+98OSe+x5Lh7PKYoVjy3lW/1wmhs6HW0lusnQRHgMarA==} - - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - urlpattern-polyfill@10.1.0: - resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} - - urql@4.2.2: - resolution: {integrity: sha512-3GgqNa6iF7bC4hY/ImJKN4REQILcSU9VKcKL8gfELZM8mM5BnLH1BsCc8kBdnVGD1LIFOs4W3O2idNHhON1r0w==} - peerDependencies: - '@urql/core': ^5.0.0 - react: '>= 16.8.0' - - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - - use-stick-to-bottom@1.1.1: - resolution: {integrity: sha512-JkDp0b0tSmv7HQOOpL1hT7t7QaoUBXkq045WWWOFDTlLGRzgIIyW7vyzOIJzY7L2XVIG7j1yUxeDj2LHm9Vwng==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - use-sync-external-store@1.6.0: - resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - - uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true - - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - - validator@13.15.15: - resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} - engines: {node: '>= 0.10'} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - - vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - vscode-jsonrpc@8.2.0: - resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} - engines: {node: '>=14.0.0'} - - vscode-languageserver-protocol@3.17.5: - resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} - - vscode-languageserver-textdocument@1.0.12: - resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==} - - vscode-languageserver-types@3.17.5: - resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} - - vscode-languageserver@9.0.1: - resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} - hasBin: true - - vscode-uri@3.0.8: - resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - - w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - - wait-port@1.1.0: - resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} - engines: {node: '>=10'} - hasBin: true - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - weaviate-client@3.9.0: - resolution: {integrity: sha512-7qwg7YONAaT4zWnohLrFdzky+rZegVe76J+Tky/+7tuyvjFpdKgSrdqI/wPDh8aji0ZGZrL4DdGwGfFnZ+uV4w==} - engines: {node: '>=18.0.0'} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - web-streams-polyfill@4.0.0-beta.3: - resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} - engines: {node: '>= 14'} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wonka@6.3.5: - resolution: {integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==} - - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - wsl-utils@0.1.0: - resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} - engines: {node: '>=18'} - - xstate@5.23.0: - resolution: {integrity: sha512-jo126xWXkU6ySQ91n51+H2xcgnMuZcCQpQoD3FQ79d32a6RQvryRh8rrDHnH4WDdN/yg5xNjlIRol9ispMvzeg==} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - xxhash-wasm@1.1.0: - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} - - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yocto-spinner@0.2.3: - resolution: {integrity: sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==} - engines: {node: '>=18.19'} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - - yoctocolors@2.1.2: - resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} - engines: {node: '>=18'} - - zod-from-json-schema@0.0.5: - resolution: {integrity: sha512-zYEoo86M1qpA1Pq6329oSyHLS785z/mTwfr9V1Xf/ZLhuuBGaMlDGu/pDVGVUe4H4oa1EFgWZT53DP0U3oT9CQ==} - - zod-from-json-schema@0.5.0: - resolution: {integrity: sha512-W1v1YIoimOJfvuorGGp1QroizLL3jEGELJtgrHiVg/ytxVZdh/BTTVyPypGB7YK30LHrCkkebbjuyHIjBGCEzw==} - - zod-to-json-schema@3.24.6: - resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} - peerDependencies: - zod: ^3.24.1 - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zod@4.1.12: - resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@0no-co/graphql.web@1.2.0(graphql@16.11.0)': - optionalDependencies: - graphql: 16.11.0 - - '@a2a-js/sdk@0.2.5': - dependencies: - '@types/cors': 2.8.19 - '@types/express': 4.17.23 - body-parser: 2.2.0 - cors: 2.8.5 - express: 4.21.2 - uuid: 11.1.0 - transitivePeerDependencies: - - supports-color - - '@ag-ui/client@0.0.35': - dependencies: - '@ag-ui/core': 0.0.35 - '@ag-ui/encoder': 0.0.35 - '@ag-ui/proto': 0.0.35 - '@types/uuid': 10.0.0 - fast-json-patch: 3.1.1 - rxjs: 7.8.1 - untruncate-json: 0.0.1 - uuid: 11.1.0 - zod: 3.25.76 - - '@ag-ui/client@0.0.40-alpha.10': - dependencies: - '@ag-ui/core': 0.0.40-alpha.10 - '@ag-ui/encoder': 0.0.40-alpha.10 - '@ag-ui/proto': 0.0.40-alpha.10 - '@types/uuid': 10.0.0 - fast-json-patch: 3.1.1 - rxjs: 7.8.1 - untruncate-json: 0.0.1 - uuid: 11.1.0 - zod: 3.25.76 - - '@ag-ui/core@0.0.35': - dependencies: - rxjs: 7.8.1 - zod: 3.25.76 - - '@ag-ui/core@0.0.37': - dependencies: - rxjs: 7.8.1 - zod: 3.25.76 - - '@ag-ui/core@0.0.40-alpha.10': - dependencies: - rxjs: 7.8.1 - zod: 3.25.76 - - '@ag-ui/core@0.0.40-alpha.11': - dependencies: - rxjs: 7.8.1 - zod: 3.25.76 - - '@ag-ui/encoder@0.0.35': - dependencies: - '@ag-ui/core': 0.0.35 - '@ag-ui/proto': 0.0.35 - - '@ag-ui/encoder@0.0.40-alpha.10': - dependencies: - '@ag-ui/core': 0.0.40-alpha.10 - '@ag-ui/proto': 0.0.40-alpha.10 - - '@ag-ui/encoder@0.0.40-alpha.11': - dependencies: - '@ag-ui/core': 0.0.40-alpha.11 - '@ag-ui/proto': 0.0.40-alpha.11 - - '@ag-ui/langgraph@0.0.19-alpha.1(@ag-ui/client@sdks+typescript+packages+client)(@ag-ui/core@sdks+typescript+packages+core)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@ag-ui/client': link:sdks/typescript/packages/client - '@ag-ui/core': link:sdks/typescript/packages/core - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/langgraph-sdk': 0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - partial-json: 0.1.7 - rxjs: 7.8.1 - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - react - - react-dom - - '@ag-ui/proto@0.0.35': - dependencies: - '@ag-ui/core': 0.0.35 - '@bufbuild/protobuf': 2.9.0 - - '@ag-ui/proto@0.0.40-alpha.10': - dependencies: - '@ag-ui/core': 0.0.40-alpha.10 - '@bufbuild/protobuf': 2.9.0 - '@protobuf-ts/protoc': 2.11.1 - - '@ag-ui/proto@0.0.40-alpha.11': - dependencies: - '@ag-ui/core': 0.0.40-alpha.11 - '@bufbuild/protobuf': 2.9.0 - '@protobuf-ts/protoc': 2.11.1 - - '@ai-sdk/anthropic@2.0.23(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 - - '@ai-sdk/gateway@1.0.33(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - '@vercel/oidc': 3.0.2 - zod: 3.25.76 - - '@ai-sdk/google@2.0.17(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 - - '@ai-sdk/openai-compatible@1.0.19(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 - - '@ai-sdk/openai@1.3.22(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - zod: 3.25.76 - - '@ai-sdk/openai@2.0.42(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 - - '@ai-sdk/openai@2.0.52(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.12(zod@3.25.76) - zod: 3.25.76 - - '@ai-sdk/provider-utils@2.2.8(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - nanoid: 3.3.11 - secure-json-parse: 2.7.0 - zod: 3.25.76 - - '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 - - '@ai-sdk/provider-utils@3.0.12(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 - - '@ai-sdk/provider@1.1.3': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/provider@2.0.0': - dependencies: - json-schema: 0.4.0 - - '@ai-sdk/react@1.2.12(react@19.2.0)(zod@3.25.76)': - dependencies: - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - react: 19.2.0 - swr: 2.3.6(react@19.2.0) - throttleit: 2.1.0 - optionalDependencies: - zod: 3.25.76 - - '@ai-sdk/ui-utils@1.2.11(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - - '@ai-sdk/xai@2.0.23(zod@3.25.76)': - dependencies: - '@ai-sdk/openai-compatible': 1.0.19(zod@3.25.76) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - zod: 3.25.76 - - '@alloc/quick-lru@5.2.0': {} - - '@antfu/install-pkg@1.1.0': - dependencies: - package-manager-detector: 1.5.0 - tinyexec: 1.0.1 - - '@antfu/utils@9.3.0': {} - - '@anthropic-ai/sdk@0.27.3': - dependencies: - '@types/node': 18.19.130 - '@types/node-fetch': 2.6.13 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - '@anthropic-ai/sdk@0.57.0': {} - - '@apidevtools/json-schema-ref-parser@11.9.3': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 - - '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)': - dependencies: - '@types/json-schema': 7.0.15 - js-yaml: 4.1.0 - - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.910.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-locate-window': 3.893.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-js@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.910.0 - tslib: 2.8.1 - - '@aws-crypto/supports-web-crypto@5.2.0': - dependencies: - tslib: 2.8.1 - - '@aws-crypto/util@5.2.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/client-bedrock-agent-runtime@3.910.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.910.0 - '@smithy/config-resolver': 4.3.2 - '@smithy/core': 3.16.1 - '@smithy/eventstream-serde-browser': 4.2.2 - '@smithy/eventstream-serde-config-resolver': 4.3.2 - '@smithy/eventstream-serde-node': 4.2.2 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/hash-node': 4.2.2 - '@smithy/invalid-dependency': 4.2.2 - '@smithy/middleware-content-length': 4.2.2 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-retry': 4.4.3 - '@smithy/middleware-serde': 4.2.2 - '@smithy/middleware-stack': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/node-http-handler': 4.4.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.2 - '@smithy/util-defaults-mode-node': 4.2.3 - '@smithy/util-endpoints': 3.2.2 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-bedrock-runtime@3.910.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@aws-sdk/eventstream-handler-node': 3.910.0 - '@aws-sdk/middleware-eventstream': 3.910.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/middleware-websocket': 3.910.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/token-providers': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.910.0 - '@smithy/config-resolver': 4.3.2 - '@smithy/core': 3.16.1 - '@smithy/eventstream-serde-browser': 4.2.2 - '@smithy/eventstream-serde-config-resolver': 4.3.2 - '@smithy/eventstream-serde-node': 4.2.2 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/hash-node': 4.2.2 - '@smithy/invalid-dependency': 4.2.2 - '@smithy/middleware-content-length': 4.2.2 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-retry': 4.4.3 - '@smithy/middleware-serde': 4.2.2 - '@smithy/middleware-stack': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/node-http-handler': 4.4.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.2 - '@smithy/util-defaults-mode-node': 4.2.3 - '@smithy/util-endpoints': 3.2.2 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/util-stream': 4.5.2 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-dynamodb@3.910.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@aws-sdk/middleware-endpoint-discovery': 3.910.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.910.0 - '@smithy/config-resolver': 4.3.2 - '@smithy/core': 3.16.1 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/hash-node': 4.2.2 - '@smithy/invalid-dependency': 4.2.2 - '@smithy/middleware-content-length': 4.2.2 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-retry': 4.4.3 - '@smithy/middleware-serde': 4.2.2 - '@smithy/middleware-stack': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/node-http-handler': 4.4.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.2 - '@smithy/util-defaults-mode-node': 4.2.3 - '@smithy/util-endpoints': 3.2.2 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/util-utf8': 4.2.0 - '@smithy/util-waiter': 4.2.2 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-kendra@3.910.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.910.0 - '@smithy/config-resolver': 4.3.2 - '@smithy/core': 3.16.1 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/hash-node': 4.2.2 - '@smithy/invalid-dependency': 4.2.2 - '@smithy/middleware-content-length': 4.2.2 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-retry': 4.4.3 - '@smithy/middleware-serde': 4.2.2 - '@smithy/middleware-stack': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/node-http-handler': 4.4.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.2 - '@smithy/util-defaults-mode-node': 4.2.3 - '@smithy/util-endpoints': 3.2.2 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.910.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.910.0 - '@smithy/config-resolver': 4.3.2 - '@smithy/core': 3.16.1 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/hash-node': 4.2.2 - '@smithy/invalid-dependency': 4.2.2 - '@smithy/middleware-content-length': 4.2.2 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-retry': 4.4.3 - '@smithy/middleware-serde': 4.2.2 - '@smithy/middleware-stack': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/node-http-handler': 4.4.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.2 - '@smithy/util-defaults-mode-node': 4.2.3 - '@smithy/util-endpoints': 3.2.2 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@aws-sdk/xml-builder': 3.910.0 - '@smithy/core': 3.16.1 - '@smithy/node-config-provider': 4.3.2 - '@smithy/property-provider': 4.2.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/signature-v4': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/node-http-handler': 4.4.1 - '@smithy/property-provider': 4.2.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/util-stream': 4.5.2 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/credential-provider-env': 3.910.0 - '@aws-sdk/credential-provider-http': 3.910.0 - '@aws-sdk/credential-provider-process': 3.910.0 - '@aws-sdk/credential-provider-sso': 3.910.0 - '@aws-sdk/credential-provider-web-identity': 3.910.0 - '@aws-sdk/nested-clients': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/credential-provider-imds': 4.2.2 - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.910.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.910.0 - '@aws-sdk/credential-provider-http': 3.910.0 - '@aws-sdk/credential-provider-ini': 3.910.0 - '@aws-sdk/credential-provider-process': 3.910.0 - '@aws-sdk/credential-provider-sso': 3.910.0 - '@aws-sdk/credential-provider-web-identity': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/credential-provider-imds': 4.2.2 - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.910.0': - dependencies: - '@aws-sdk/client-sso': 3.910.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/token-providers': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-web-identity@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/nested-clients': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/endpoint-cache@3.893.0': - dependencies: - mnemonist: 0.38.3 - tslib: 2.8.1 - - '@aws-sdk/eventstream-handler-node@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/eventstream-codec': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/lib-dynamodb@3.910.0(@aws-sdk/client-dynamodb@3.910.0)': - dependencies: - '@aws-sdk/client-dynamodb': 3.910.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/util-dynamodb': 3.910.0(@aws-sdk/client-dynamodb@3.910.0) - '@smithy/core': 3.16.1 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-endpoint-discovery@3.910.0': - dependencies: - '@aws-sdk/endpoint-cache': 3.893.0 - '@aws-sdk/types': 3.910.0 - '@smithy/node-config-provider': 4.3.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-eventstream@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-host-header@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-logger@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-recursion-detection@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@aws/lambda-invoke-store': 0.0.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-user-agent@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@smithy/core': 3.16.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-websocket@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-format-url': 3.910.0 - '@smithy/eventstream-codec': 4.2.2 - '@smithy/eventstream-serde-browser': 4.2.2 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/protocol-http': 5.3.2 - '@smithy/signature-v4': 5.3.2 - '@smithy/types': 4.7.1 - '@smithy/util-hex-encoding': 4.2.0 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.910.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.910.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.910.0 - '@smithy/config-resolver': 4.3.2 - '@smithy/core': 3.16.1 - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/hash-node': 4.2.2 - '@smithy/invalid-dependency': 4.2.2 - '@smithy/middleware-content-length': 4.2.2 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-retry': 4.4.3 - '@smithy/middleware-serde': 4.2.2 - '@smithy/middleware-stack': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/node-http-handler': 4.4.1 - '@smithy/protocol-http': 5.3.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.2 - '@smithy/util-defaults-mode-node': 4.2.3 - '@smithy/util-endpoints': 3.2.2 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/region-config-resolver@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/node-config-provider': 4.3.2 - '@smithy/types': 4.7.1 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.2 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.910.0': - dependencies: - '@aws-sdk/core': 3.910.0 - '@aws-sdk/nested-clients': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.910.0': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/util-dynamodb@3.910.0(@aws-sdk/client-dynamodb@3.910.0)': - dependencies: - '@aws-sdk/client-dynamodb': 3.910.0 - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-endpoints': 3.2.2 - tslib: 2.8.1 - - '@aws-sdk/util-format-url@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/querystring-builder': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.893.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.910.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/types': 4.7.1 - bowser: 2.12.1 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.910.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@smithy/node-config-provider': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.910.0': - dependencies: - '@smithy/types': 4.7.1 - fast-xml-parser: 5.2.5 - tslib: 2.8.1 - - '@aws/lambda-invoke-store@0.0.1': {} - - '@babel/code-frame@7.27.1': - dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.28.4': {} - - '@babel/core@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.28.3': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.28.4 - - '@babel/helper-compilation-targets@7.27.2': - dependencies: - '@babel/compat-data': 7.28.4 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.3 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-member-expression-to-functions@7.27.1': - dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.27.1': - dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.27.1': - dependencies: - '@babel/types': 7.28.4 - - '@babel/helper-plugin-utils@7.27.1': {} - - '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-member-expression-to-functions': 7.27.1 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.27.1': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helpers@7.28.4': - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.28.4 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - - '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4) - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) - transitivePeerDependencies: - - supports-color - - '@babel/runtime@7.28.4': {} - - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - - '@babel/traverse@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.28.4': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@bcoe/v8-coverage@0.2.3': {} - - '@braintree/sanitize-url@7.1.1': {} - - '@browserbasehq/sdk@2.6.0': - dependencies: - '@types/node': 18.19.130 - '@types/node-fetch': 2.6.13 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - '@browserbasehq/stagehand@1.14.0(@playwright/test@1.56.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(zod@3.25.76)': - dependencies: - '@anthropic-ai/sdk': 0.27.3 - '@browserbasehq/sdk': 2.6.0 - '@playwright/test': 1.56.0 - deepmerge: 4.3.1 - dotenv: 16.6.1 - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - ws: 8.18.3 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - - '@bufbuild/protobuf@2.9.0': {} - - '@cfworker/json-schema@4.1.1': {} - - '@chevrotain/cst-dts-gen@11.0.3': - dependencies: - '@chevrotain/gast': 11.0.3 - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 - - '@chevrotain/gast@11.0.3': - dependencies: - '@chevrotain/types': 11.0.3 - lodash-es: 4.17.21 - - '@chevrotain/regexp-to-ast@11.0.3': {} - - '@chevrotain/types@11.0.3': {} - - '@chevrotain/utils@11.0.3': {} - - '@clack/core@0.5.0': - dependencies: - picocolors: 1.1.1 - sisteransi: 1.0.5 - - '@clack/prompts@0.11.0': - dependencies: - '@clack/core': 0.5.0 - picocolors: 1.1.1 - sisteransi: 1.0.5 - - '@copilotkit/react-core@1.10.6(@types/react@19.2.2)(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.11.0)(react@19.2.0) - '@copilotkit/shared': 1.10.6 - '@scarf/scarf': 1.4.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-markdown: 8.0.7(@types/react@19.2.2)(react@19.2.0) - untruncate-json: 0.0.1 - transitivePeerDependencies: - - '@types/react' - - encoding - - graphql - - supports-color - - '@copilotkit/react-ui@1.10.6(@types/react@19.2.2)(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@copilotkit/react-core': 1.10.6(@types/react@19.2.2)(graphql@16.11.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@copilotkit/runtime-client-gql': 1.10.6(graphql@16.11.0)(react@19.2.0) - '@copilotkit/shared': 1.10.6 - '@headlessui/react': 2.2.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-markdown: 10.1.0(@types/react@19.2.2)(react@19.2.0) - react-syntax-highlighter: 15.6.6(react@19.2.0) - rehype-raw: 7.0.0 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - transitivePeerDependencies: - - '@types/react' - - encoding - - graphql - - react-dom - - supports-color - - '@copilotkit/runtime-client-gql@1.10.6(graphql@16.11.0)(react@19.2.0)': - dependencies: - '@copilotkit/shared': 1.10.6 - '@urql/core': 5.2.0(graphql@16.11.0) - react: 19.2.0 - untruncate-json: 0.0.1 - urql: 4.2.2(@urql/core@5.2.0(graphql@16.11.0))(react@19.2.0) - transitivePeerDependencies: - - encoding - - graphql - - '@copilotkit/runtime@1.10.6(iqshwn2xropb3vpfei3flnb2ay)': - dependencies: - '@ag-ui/client': link:sdks/typescript/packages/client - '@ag-ui/core': link:sdks/typescript/packages/core - '@ag-ui/encoder': link:sdks/typescript/packages/encoder - '@ag-ui/langgraph': link:integrations/langgraph/typescript - '@ag-ui/proto': link:sdks/typescript/packages/proto - '@anthropic-ai/sdk': 0.57.0 - '@copilotkit/shared': 1.10.6 - '@graphql-yoga/plugin-defer-stream': 3.16.0(graphql-yoga@5.16.0(graphql@16.11.0))(graphql@16.11.0) - '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) - '@langchain/community': 0.3.57(37emb7xvj5c4vxjobtfi323cve) - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) - '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react@19.2.0) - '@langchain/openai': 0.4.9(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) - '@scarf/scarf': 1.4.0 - class-transformer: 0.5.1 - class-validator: 0.14.2 - express: 4.21.2 - graphql: 16.11.0 - graphql-scalars: 1.24.2(graphql@16.11.0) - graphql-yoga: 5.16.0(graphql@16.11.0) - groq-sdk: 0.5.0 - langchain: 0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3) - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - partial-json: 0.1.7 - pino: 9.13.1 - pino-pretty: 11.3.0 - reflect-metadata: 0.2.2 - rxjs: 7.8.1 - type-graphql: 2.0.0-rc.1(class-validator@0.14.2)(graphql-scalars@1.24.2(graphql@16.11.0))(graphql@16.11.0) - zod: 3.25.76 - transitivePeerDependencies: - - '@arcjet/redact' - - '@aws-crypto/sha256-js' - - '@aws-sdk/client-bedrock-agent-runtime' - - '@aws-sdk/client-bedrock-runtime' - - '@aws-sdk/client-dynamodb' - - '@aws-sdk/client-kendra' - - '@aws-sdk/client-lambda' - - '@aws-sdk/client-s3' - - '@aws-sdk/client-sagemaker-runtime' - - '@aws-sdk/client-sfn' - - '@aws-sdk/credential-provider-node' - - '@aws-sdk/dsql-signer' - - '@azure/search-documents' - - '@azure/storage-blob' - - '@browserbasehq/sdk' - - '@browserbasehq/stagehand' - - '@clickhouse/client' - - '@cloudflare/ai' - - '@datastax/astra-db-ts' - - '@elastic/elasticsearch' - - '@getmetal/metal-sdk' - - '@getzep/zep-cloud' - - '@getzep/zep-js' - - '@gomomento/sdk' - - '@gomomento/sdk-core' - - '@google-ai/generativelanguage' - - '@google-cloud/storage' - - '@gradientai/nodejs-sdk' - - '@huggingface/inference' - - '@huggingface/transformers' - - '@ibm-cloud/watsonx-ai' - - '@lancedb/lancedb' - - '@langchain/anthropic' - - '@langchain/cerebras' - - '@langchain/cohere' - - '@langchain/deepseek' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/google-vertexai-web' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - '@langchain/xai' - - '@layerup/layerup-security' - - '@libsql/client' - - '@mendable/firecrawl-js' - - '@mlc-ai/web-llm' - - '@mozilla/readability' - - '@neondatabase/serverless' - - '@notionhq/client' - - '@opensearch-project/opensearch' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - '@pinecone-database/pinecone' - - '@planetscale/database' - - '@premai/prem-sdk' - - '@qdrant/js-client-rest' - - '@raycast/api' - - '@rockset/client' - - '@smithy/eventstream-codec' - - '@smithy/protocol-http' - - '@smithy/signature-v4' - - '@smithy/util-utf8' - - '@spider-cloud/spider-client' - - '@supabase/supabase-js' - - '@tensorflow-models/universal-sentence-encoder' - - '@tensorflow/tfjs-converter' - - '@tensorflow/tfjs-core' - - '@upstash/ratelimit' - - '@upstash/redis' - - '@upstash/vector' - - '@vercel/kv' - - '@vercel/postgres' - - '@writerai/writer-sdk' - - '@xata.io/client' - - '@zilliz/milvus2-sdk-node' - - apify-client - - assemblyai - - aws-crt - - axios - - azion - - better-sqlite3 - - cassandra-driver - - cborg - - cheerio - - chromadb - - closevector-common - - closevector-node - - closevector-web - - cohere-ai - - convex - - crypto-js - - d3-dsv - - discord.js - - duck-duck-scrape - - encoding - - epub2 - - fast-xml-parser - - firebase-admin - - google-auth-library - - googleapis - - handlebars - - hnswlib-node - - html-to-text - - ibm-cloud-sdk-core - - ignore - - interface-datastore - - ioredis - - it-all - - jsdom - - jsonwebtoken - - llmonitor - - lodash - - lunary - - mammoth - - mariadb - - mem0ai - - mongodb - - mysql2 - - neo4j-driver - - notion-to-md - - officeparser - - pdf-parse - - peggy - - pg - - pg-copy-streams - - pickleparser - - playwright - - portkey-ai - - puppeteer - - pyodide - - react - - redis - - replicate - - sonix-speech-recognition - - srt-parser-2 - - supports-color - - typeorm - - typesense - - usearch - - voy-search - - weaviate-client - - web-auth-library - - word-extractor - - ws - - youtubei.js - - '@copilotkit/runtime@1.10.6(jkrvcwfv2zltibfgwihn5nuqn4)': - dependencies: - '@ag-ui/client': link:sdks/typescript/packages/client - '@ag-ui/core': link:sdks/typescript/packages/core - '@ag-ui/encoder': 0.0.40-alpha.11 - '@ag-ui/langgraph': 0.0.19-alpha.1(@ag-ui/client@sdks+typescript+packages+client)(@ag-ui/core@sdks+typescript+packages+core)(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@ag-ui/proto': 0.0.40-alpha.11 - '@anthropic-ai/sdk': 0.57.0 - '@copilotkit/shared': 1.10.6 - '@graphql-yoga/plugin-defer-stream': 3.16.0(graphql-yoga@5.16.0(graphql@16.11.0))(graphql@16.11.0) - '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) - '@langchain/community': 0.3.57(37emb7xvj5c4vxjobtfi323cve) - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) - '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react@19.2.0) - '@langchain/openai': 0.4.9(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) - '@scarf/scarf': 1.4.0 - class-transformer: 0.5.1 - class-validator: 0.14.2 - express: 4.21.2 - graphql: 16.11.0 - graphql-scalars: 1.24.2(graphql@16.11.0) - graphql-yoga: 5.16.0(graphql@16.11.0) - groq-sdk: 0.5.0 - langchain: 0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3) - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - partial-json: 0.1.7 - pino: 9.13.1 - pino-pretty: 11.3.0 - reflect-metadata: 0.2.2 - rxjs: 7.8.1 - type-graphql: 2.0.0-rc.1(class-validator@0.14.2)(graphql-scalars@1.24.2(graphql@16.11.0))(graphql@16.11.0) - zod: 3.25.76 - transitivePeerDependencies: - - '@arcjet/redact' - - '@aws-crypto/sha256-js' - - '@aws-sdk/client-bedrock-agent-runtime' - - '@aws-sdk/client-bedrock-runtime' - - '@aws-sdk/client-dynamodb' - - '@aws-sdk/client-kendra' - - '@aws-sdk/client-lambda' - - '@aws-sdk/client-s3' - - '@aws-sdk/client-sagemaker-runtime' - - '@aws-sdk/client-sfn' - - '@aws-sdk/credential-provider-node' - - '@aws-sdk/dsql-signer' - - '@azure/search-documents' - - '@azure/storage-blob' - - '@browserbasehq/sdk' - - '@browserbasehq/stagehand' - - '@clickhouse/client' - - '@cloudflare/ai' - - '@datastax/astra-db-ts' - - '@elastic/elasticsearch' - - '@getmetal/metal-sdk' - - '@getzep/zep-cloud' - - '@getzep/zep-js' - - '@gomomento/sdk' - - '@gomomento/sdk-core' - - '@google-ai/generativelanguage' - - '@google-cloud/storage' - - '@gradientai/nodejs-sdk' - - '@huggingface/inference' - - '@huggingface/transformers' - - '@ibm-cloud/watsonx-ai' - - '@lancedb/lancedb' - - '@langchain/anthropic' - - '@langchain/cerebras' - - '@langchain/cohere' - - '@langchain/deepseek' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/google-vertexai-web' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - '@langchain/xai' - - '@layerup/layerup-security' - - '@libsql/client' - - '@mendable/firecrawl-js' - - '@mlc-ai/web-llm' - - '@mozilla/readability' - - '@neondatabase/serverless' - - '@notionhq/client' - - '@opensearch-project/opensearch' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - '@pinecone-database/pinecone' - - '@planetscale/database' - - '@premai/prem-sdk' - - '@qdrant/js-client-rest' - - '@raycast/api' - - '@rockset/client' - - '@smithy/eventstream-codec' - - '@smithy/protocol-http' - - '@smithy/signature-v4' - - '@smithy/util-utf8' - - '@spider-cloud/spider-client' - - '@supabase/supabase-js' - - '@tensorflow-models/universal-sentence-encoder' - - '@tensorflow/tfjs-converter' - - '@tensorflow/tfjs-core' - - '@upstash/ratelimit' - - '@upstash/redis' - - '@upstash/vector' - - '@vercel/kv' - - '@vercel/postgres' - - '@writerai/writer-sdk' - - '@xata.io/client' - - '@zilliz/milvus2-sdk-node' - - apify-client - - assemblyai - - aws-crt - - axios - - azion - - better-sqlite3 - - cassandra-driver - - cborg - - cheerio - - chromadb - - closevector-common - - closevector-node - - closevector-web - - cohere-ai - - convex - - crypto-js - - d3-dsv - - discord.js - - duck-duck-scrape - - encoding - - epub2 - - fast-xml-parser - - firebase-admin - - google-auth-library - - googleapis - - handlebars - - hnswlib-node - - html-to-text - - ibm-cloud-sdk-core - - ignore - - interface-datastore - - ioredis - - it-all - - jsdom - - jsonwebtoken - - llmonitor - - lodash - - lunary - - mammoth - - mariadb - - mem0ai - - mongodb - - mysql2 - - neo4j-driver - - notion-to-md - - officeparser - - pdf-parse - - peggy - - pg - - pg-copy-streams - - pickleparser - - playwright - - portkey-ai - - puppeteer - - pyodide - - react - - redis - - replicate - - sonix-speech-recognition - - srt-parser-2 - - supports-color - - typeorm - - typesense - - usearch - - voy-search - - weaviate-client - - web-auth-library - - word-extractor - - ws - - youtubei.js - - '@copilotkit/shared@1.10.6': - dependencies: - '@ag-ui/core': 0.0.37 - '@segment/analytics-node': 2.3.0 - chalk: 4.1.2 - graphql: 16.11.0 - uuid: 10.0.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - encoding - - '@copilotkitnext/agent@0.0.19-alpha.0': - dependencies: - '@ag-ui/client': 0.0.40-alpha.10 - '@ai-sdk/anthropic': 2.0.23(zod@3.25.76) - '@ai-sdk/google': 2.0.17(zod@3.25.76) - '@ai-sdk/openai': 2.0.52(zod@3.25.76) - '@modelcontextprotocol/sdk': 1.20.0 - ai: 5.0.60(zod@3.25.76) - rxjs: 7.8.1 - zod: 3.25.76 - transitivePeerDependencies: - - supports-color - - '@copilotkitnext/core@0.0.19-alpha.0': - dependencies: - '@ag-ui/client': 0.0.40-alpha.10 - '@copilotkitnext/shared': 0.0.19-alpha.0 - rxjs: 7.8.1 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - - '@copilotkitnext/react@0.0.19-alpha.0(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@ag-ui/client': 0.0.40-alpha.10 - '@ag-ui/core': 0.0.40-alpha.10 - '@copilotkitnext/core': 0.0.19-alpha.0 - '@copilotkitnext/shared': 0.0.19-alpha.0 - '@copilotkitnext/web-inspector': 0.0.19-alpha.0 - '@lit-labs/react': 2.1.3(@types/react@19.2.2) - '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - class-variance-authority: 0.7.1 - clsx: 2.1.1 - katex: 0.16.25 - lucide-react: 0.525.0(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - streamdown: 1.4.0(@types/react@19.2.2)(react@19.2.0) - tailwind-merge: 3.3.1 - ts-deepmerge: 7.0.3 - tw-animate-css: 1.4.0 - use-stick-to-bottom: 1.1.1(react@19.2.0) - zod: 3.25.76 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - supports-color - - '@copilotkitnext/runtime@0.0.19-alpha.0(openai@4.104.0(ws@8.18.3)(zod@3.25.76))': - dependencies: - '@ag-ui/client': 0.0.40-alpha.10 - '@ag-ui/core': 0.0.40-alpha.10 - '@ag-ui/encoder': 0.0.40-alpha.10 - '@copilotkitnext/shared': 0.0.19-alpha.0 - hono: 4.10.3 - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - rxjs: 7.8.1 - - '@copilotkitnext/shared@0.0.19-alpha.0': - dependencies: - '@ag-ui/client': 0.0.40-alpha.10 - partial-json: 0.1.7 - uuid: 11.1.0 - - '@copilotkitnext/web-inspector@0.0.19-alpha.0': - dependencies: - '@ag-ui/client': 0.0.40-alpha.10 - '@copilotkitnext/core': 0.0.19-alpha.0 - lit: 3.3.1 - lucide: 0.525.0 - - '@emnapi/core@1.5.0': - dependencies: - '@emnapi/wasi-threads': 1.1.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.5.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.1.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@envelop/core@5.3.2': - dependencies: - '@envelop/instrumentation': 1.0.0 - '@envelop/types': 5.2.1 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@envelop/instrumentation@1.0.0': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@envelop/types@5.2.1': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@esbuild/aix-ppc64@0.25.10': - optional: true - - '@esbuild/android-arm64@0.25.10': - optional: true - - '@esbuild/android-arm@0.25.10': - optional: true - - '@esbuild/android-x64@0.25.10': - optional: true - - '@esbuild/darwin-arm64@0.25.10': - optional: true - - '@esbuild/darwin-x64@0.25.10': - optional: true - - '@esbuild/freebsd-arm64@0.25.10': - optional: true - - '@esbuild/freebsd-x64@0.25.10': - optional: true - - '@esbuild/linux-arm64@0.25.10': - optional: true - - '@esbuild/linux-arm@0.25.10': - optional: true - - '@esbuild/linux-ia32@0.25.10': - optional: true - - '@esbuild/linux-loong64@0.25.10': - optional: true - - '@esbuild/linux-mips64el@0.25.10': - optional: true - - '@esbuild/linux-ppc64@0.25.10': - optional: true - - '@esbuild/linux-riscv64@0.25.10': - optional: true - - '@esbuild/linux-s390x@0.25.10': - optional: true - - '@esbuild/linux-x64@0.25.10': - optional: true - - '@esbuild/netbsd-arm64@0.25.10': - optional: true - - '@esbuild/netbsd-x64@0.25.10': - optional: true - - '@esbuild/openbsd-arm64@0.25.10': - optional: true - - '@esbuild/openbsd-x64@0.25.10': - optional: true - - '@esbuild/openharmony-arm64@0.25.10': - optional: true - - '@esbuild/sunos-x64@0.25.10': - optional: true - - '@esbuild/win32-arm64@0.25.10': - optional: true - - '@esbuild/win32-ia32@0.25.10': - optional: true - - '@esbuild/win32-x64@0.25.10': - optional: true - - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': - dependencies: - eslint: 9.37.0(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/config-array@0.21.0': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.3 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.0': - dependencies: - '@eslint/core': 0.16.0 - - '@eslint/core@0.16.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.3 - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.37.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.4.0': - dependencies: - '@eslint/core': 0.16.0 - levn: 0.4.1 - - '@expo/devcert@1.2.0': - dependencies: - '@expo/sudo-prompt': 9.3.2 - debug: 3.2.7 - glob: 10.4.5 - transitivePeerDependencies: - - supports-color - - '@expo/sudo-prompt@9.3.2': {} - - '@fastify/busboy@3.2.0': {} - - '@floating-ui/core@1.7.3': - dependencies: - '@floating-ui/utils': 0.2.10 - - '@floating-ui/dom@1.7.4': - dependencies: - '@floating-ui/core': 1.7.3 - '@floating-ui/utils': 0.2.10 - - '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@floating-ui/dom': 1.7.4 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@floating-ui/react@0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@floating-ui/utils': 0.2.10 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - tabbable: 6.2.0 - - '@floating-ui/utils@0.2.10': {} - - '@graphql-tools/executor@1.4.9(graphql@16.11.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.11.0 - tslib: 2.8.1 - - '@graphql-tools/merge@9.1.1(graphql@16.11.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 - tslib: 2.8.1 - - '@graphql-tools/schema@10.0.25(graphql@16.11.0)': - dependencies: - '@graphql-tools/merge': 9.1.1(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 - tslib: 2.8.1 - - '@graphql-tools/utils@10.9.1(graphql@16.11.0)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - '@whatwg-node/promise-helpers': 1.3.2 - cross-inspect: 1.0.1 - dset: 3.1.4 - graphql: 16.11.0 - tslib: 2.8.1 - - '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': - dependencies: - graphql: 16.11.0 - - '@graphql-yoga/logger@2.0.1': - dependencies: - tslib: 2.8.1 - - '@graphql-yoga/plugin-defer-stream@3.16.0(graphql-yoga@5.16.0(graphql@16.11.0))(graphql@16.11.0)': - dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - graphql: 16.11.0 - graphql-yoga: 5.16.0(graphql@16.11.0) - - '@graphql-yoga/subscription@5.0.5': - dependencies: - '@graphql-yoga/typed-event-target': 3.0.2 - '@repeaterjs/repeater': 3.0.6 - '@whatwg-node/events': 0.1.2 - tslib: 2.8.1 - - '@graphql-yoga/typed-event-target@3.0.2': - dependencies: - '@repeaterjs/repeater': 3.0.6 - tslib: 2.8.1 - - '@grpc/grpc-js@1.14.0': - dependencies: - '@grpc/proto-loader': 0.8.0 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.8.0': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.5.4 - yargs: 17.7.2 - - '@headlessui/react@2.2.9(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@floating-ui/react': 0.26.28(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-aria/focus': 3.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-aria/interactions': 3.25.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/react-virtual': 3.13.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - use-sync-external-store: 1.6.0(react@19.2.0) - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.7': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.4.3 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@ibm-cloud/watsonx-ai@1.7.0': - dependencies: - '@types/node': 18.19.130 - extend: 3.0.2 - form-data: 4.0.4 - ibm-cloud-sdk-core: 5.4.3 - transitivePeerDependencies: - - supports-color - - '@iconify/types@2.0.0': {} - - '@iconify/utils@3.0.2': - dependencies: - '@antfu/install-pkg': 1.1.0 - '@antfu/utils': 9.3.0 - '@iconify/types': 2.0.0 - debug: 4.4.3 - globals: 15.15.0 - kolorist: 1.8.0 - local-pkg: 1.1.2 - mlly: 1.8.0 - transitivePeerDependencies: - - supports-color - - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.5.0 - optional: true - - '@img/sharp-win32-ia32@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.33.5': - optional: true - - '@inquirer/ansi@1.0.1': {} - - '@inquirer/checkbox@4.3.0(@types/node@20.19.21)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.21) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/confirm@5.1.19(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/core@10.3.0(@types/node@20.19.21)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.21) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/editor@4.2.21(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/external-editor': 1.0.2(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/expand@4.0.21(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/external-editor@1.0.2(@types/node@20.19.21)': - dependencies: - chardet: 2.1.0 - iconv-lite: 0.7.0 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/figures@1.0.14': {} - - '@inquirer/input@4.2.5(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/number@3.0.21(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/password@4.0.21(@types/node@20.19.21)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/prompts@7.9.0(@types/node@20.19.21)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@20.19.21) - '@inquirer/confirm': 5.1.19(@types/node@20.19.21) - '@inquirer/editor': 4.2.21(@types/node@20.19.21) - '@inquirer/expand': 4.0.21(@types/node@20.19.21) - '@inquirer/input': 4.2.5(@types/node@20.19.21) - '@inquirer/number': 3.0.21(@types/node@20.19.21) - '@inquirer/password': 4.0.21(@types/node@20.19.21) - '@inquirer/rawlist': 4.1.9(@types/node@20.19.21) - '@inquirer/search': 3.2.0(@types/node@20.19.21) - '@inquirer/select': 4.4.0(@types/node@20.19.21) - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/rawlist@4.1.9(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/search@3.2.0(@types/node@20.19.21)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.21) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/select@4.4.0(@types/node@20.19.21)': - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@20.19.21) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.21 - - '@inquirer/type@3.0.9(@types/node@20.19.21)': - optionalDependencies: - '@types/node': 20.19.21 - - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.2 - - '@isaacs/ttlcache@1.4.1': {} - - '@istanbuljs/load-nyc-config@1.1.0': - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - - '@istanbuljs/schema@0.1.3': {} - - '@jest/console@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.21) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - - '@jest/environment@29.7.0': - dependencies: - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.21 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 20.19.21 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.2.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - jest-worker: 29.7.0 - slash: 3.0.0 - string-length: 4.0.2 - strip-ansi: 6.0.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - supports-color - - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - - '@jest/source-map@29.6.3': - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@29.7.0': - dependencies: - '@jest/test-result': 29.7.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - slash: 3.0.0 - - '@jest/transform@29.7.0': - dependencies: - '@babel/core': 7.28.4 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 - pirates: 4.0.7 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/types@29.6.3': - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.21 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@js-sdsl/ordered-map@4.4.2': {} - - '@jsdevtools/ono@7.1.3': {} - - '@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))': - dependencies: - '@aws-sdk/client-bedrock-agent-runtime': 3.910.0 - '@aws-sdk/client-bedrock-runtime': 3.910.0 - '@aws-sdk/client-kendra': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - transitivePeerDependencies: - - aws-crt - - '@langchain/community@0.3.57(37emb7xvj5c4vxjobtfi323cve)': - dependencies: - '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.56.0)(deepmerge@4.3.1)(dotenv@16.6.1)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(zod@3.25.76) - '@ibm-cloud/watsonx-ai': 1.7.0 - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/openai': 0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) - '@langchain/weaviate': 0.2.3(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) - binary-extensions: 2.3.0 - expr-eval: 2.0.2 - flat: 5.0.2 - ibm-cloud-sdk-core: 5.4.3 - js-yaml: 4.1.0 - langchain: 0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3) - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - uuid: 10.0.0 - zod: 3.25.76 - optionalDependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-bedrock-agent-runtime': 3.910.0 - '@aws-sdk/client-bedrock-runtime': 3.910.0 - '@aws-sdk/client-dynamodb': 3.910.0 - '@aws-sdk/client-kendra': 3.910.0 - '@aws-sdk/credential-provider-node': 3.910.0 - '@browserbasehq/sdk': 2.6.0 - '@smithy/util-utf8': 2.3.0 - '@upstash/redis': 1.35.6 - fast-xml-parser: 5.2.5 - google-auth-library: 8.9.0 - ignore: 5.3.2 - jsonwebtoken: 9.0.2 - pg: 8.16.3 - playwright: 1.56.0 - redis: 5.8.3 - weaviate-client: 3.9.0 - ws: 8.18.3 - transitivePeerDependencies: - - '@langchain/anthropic' - - '@langchain/aws' - - '@langchain/cerebras' - - '@langchain/cohere' - - '@langchain/deepseek' - - '@langchain/google-genai' - - '@langchain/google-vertexai' - - '@langchain/google-vertexai-web' - - '@langchain/groq' - - '@langchain/mistralai' - - '@langchain/ollama' - - '@langchain/xai' - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - axios - - encoding - - handlebars - - peggy - - '@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))': - dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.21 - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - '@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76))': - dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.21 - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - '@langchain/google-common@0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - uuid: 10.0.0 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - zod - - '@langchain/google-gauth@0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/google-common': 0.1.8(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(zod@3.25.76) - google-auth-library: 8.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - zod - - '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react@19.2.0)': - dependencies: - '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 - optionalDependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - react: 19.2.0 - - '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 - optionalDependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@langchain/langgraph-sdk@0.1.10(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@types/json-schema': 7.0.15 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 9.0.1 - optionalDependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@langchain/openai@0.4.9(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - js-tiktoken: 1.0.21 - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - encoding - - ws - - '@langchain/openai@0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3)': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - js-tiktoken: 1.0.21 - openai: 5.12.2(ws@8.18.3)(zod@3.25.76) - zod: 3.25.76 - transitivePeerDependencies: - - ws - - '@langchain/textsplitters@0.1.0(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - js-tiktoken: 1.0.21 - - '@langchain/weaviate@0.2.3(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))': - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - uuid: 10.0.0 - weaviate-client: 3.9.0 - transitivePeerDependencies: - - encoding - - '@libsql/client@0.15.15': - dependencies: - '@libsql/core': 0.15.15 - '@libsql/hrana-client': 0.7.0 - js-base64: 3.7.8 - libsql: 0.5.22 - promise-limit: 2.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@libsql/core@0.15.15': - dependencies: - js-base64: 3.7.8 - - '@libsql/darwin-arm64@0.5.22': - optional: true - - '@libsql/darwin-x64@0.5.22': - optional: true - - '@libsql/hrana-client@0.7.0': - dependencies: - '@libsql/isomorphic-fetch': 0.3.1 - '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.7.8 - node-fetch: 3.3.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@libsql/isomorphic-fetch@0.3.1': {} - - '@libsql/isomorphic-ws@0.1.5': - dependencies: - '@types/ws': 8.18.1 - ws: 8.18.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@libsql/linux-arm-gnueabihf@0.5.22': - optional: true - - '@libsql/linux-arm-musleabihf@0.5.22': - optional: true - - '@libsql/linux-arm64-gnu@0.5.22': - optional: true - - '@libsql/linux-arm64-musl@0.5.22': - optional: true - - '@libsql/linux-x64-gnu@0.5.22': - optional: true - - '@libsql/linux-x64-musl@0.5.22': - optional: true - - '@libsql/win32-x64-msvc@0.5.22': - optional: true - - '@lit-labs/react@2.1.3(@types/react@19.2.2)': - dependencies: - '@lit/react': 1.0.8(@types/react@19.2.2) - transitivePeerDependencies: - - '@types/react' - - '@lit-labs/ssr-dom-shim@1.4.0': {} - - '@lit/react@1.0.8(@types/react@19.2.2)': - dependencies: - '@types/react': 19.2.2 - - '@lit/reactive-element@2.1.1': - dependencies: - '@lit-labs/ssr-dom-shim': 1.4.0 - - '@lukeed/csprng@1.1.0': {} - - '@lukeed/uuid@2.0.1': - dependencies: - '@lukeed/csprng': 1.1.0 - - '@mastra/client-js@0.10.18(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)': - dependencies: - '@ag-ui/client': 0.0.35 - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@lukeed/uuid': 2.0.1 - '@mastra/core': 0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - json-schema: 0.4.0 - rxjs: 7.8.1 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@hono/arktype-validator' - - '@hono/effect-validator' - - '@hono/typebox-validator' - - '@hono/valibot-validator' - - '@hono/zod-validator' - - '@sinclair/typebox' - - '@valibot/to-json-schema' - - arktype - - effect - - encoding - - openapi-types - - react - - supports-color - - valibot - - zod-openapi - - '@mastra/client-js@0.15.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)': - dependencies: - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@lukeed/uuid': 2.0.1 - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - json-schema: 0.4.0 - rxjs: 7.8.1 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@hono/arktype-validator' - - '@hono/effect-validator' - - '@hono/typebox-validator' - - '@hono/valibot-validator' - - '@hono/zod-validator' - - '@sinclair/typebox' - - '@valibot/to-json-schema' - - arktype - - effect - - encoding - - openapi-types - - react - - supports-color - - valibot - - zod-openapi - - '@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@mastra/schema-compat': 0.10.5(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76) - '@opentelemetry/api': 1.9.0 - '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)) - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.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/sdk-node': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@sindresorhus/slugify': 2.2.1 - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - date-fns: 3.6.0 - dotenv: 16.6.1 - hono: 4.9.12 - hono-openapi: 0.4.8(hono@4.9.12)(openapi-types@12.1.3)(zod@3.25.76) - json-schema: 0.4.0 - json-schema-to-zod: 2.6.1 - pino: 9.13.1 - pino-pretty: 13.1.2 - radash: 12.1.1 - sift: 17.1.3 - xstate: 5.23.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@hono/arktype-validator' - - '@hono/effect-validator' - - '@hono/typebox-validator' - - '@hono/valibot-validator' - - '@hono/zod-validator' - - '@sinclair/typebox' - - '@valibot/to-json-schema' - - arktype - - effect - - encoding - - openapi-types - - react - - supports-color - - valibot - - zod-openapi - - '@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)': - dependencies: - '@a2a-js/sdk': 0.2.5 - '@ai-sdk/anthropic-v5': '@ai-sdk/anthropic@2.0.23(zod@3.25.76)' - '@ai-sdk/google-v5': '@ai-sdk/google@2.0.17(zod@3.25.76)' - '@ai-sdk/openai-compatible-v5': '@ai-sdk/openai-compatible@1.0.19(zod@3.25.76)' - '@ai-sdk/openai-v5': '@ai-sdk/openai@2.0.42(zod@3.25.76)' - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.10(zod@3.25.76)' - '@ai-sdk/provider-v5': '@ai-sdk/provider@2.0.0' - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@ai-sdk/xai-v5': '@ai-sdk/xai@2.0.23(zod@3.25.76)' - '@isaacs/ttlcache': 1.4.1 - '@mastra/schema-compat': 0.11.4(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76) - '@openrouter/ai-sdk-provider-v5': '@openrouter/ai-sdk-provider@1.2.0(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76)' - '@opentelemetry/api': 1.9.0 - '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)) - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.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/sdk-node': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@sindresorhus/slugify': 2.2.1 - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - ai-v5: ai@5.0.60(zod@3.25.76) - date-fns: 3.6.0 - dotenv: 16.6.1 - hono: 4.10.3 - hono-openapi: 0.4.8(hono@4.10.3)(openapi-types@12.1.3)(zod@3.25.76) - js-tiktoken: 1.0.21 - json-schema: 0.4.0 - json-schema-to-zod: 2.6.1 - p-map: 7.0.3 - pino: 9.13.1 - pino-pretty: 13.1.2 - radash: 12.1.1 - sift: 17.1.3 - xstate: 5.23.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@hono/arktype-validator' - - '@hono/effect-validator' - - '@hono/typebox-validator' - - '@hono/valibot-validator' - - '@hono/zod-validator' - - '@sinclair/typebox' - - '@valibot/to-json-schema' - - arktype - - effect - - encoding - - openapi-types - - react - - supports-color - - valibot - - zod-openapi - - '@mastra/deployer@0.20.2(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(typescript@5.9.3)(zod@3.25.76)': - dependencies: - '@babel/core': 7.28.4 - '@babel/helper-module-imports': 7.27.1 - '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/server': 0.20.2(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(zod@3.25.76) - '@neon-rs/load': 0.1.82 - '@optimize-lodash/rollup-plugin': 5.0.2(rollup@4.50.2) - '@rollup/plugin-alias': 5.1.1(rollup@4.50.2) - '@rollup/plugin-commonjs': 28.0.7(rollup@4.50.2) - '@rollup/plugin-esm-shim': 0.1.8(rollup@4.50.2) - '@rollup/plugin-json': 6.1.0(rollup@4.50.2) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.50.2) - '@rollup/plugin-virtual': 3.0.2(rollup@4.50.2) - '@sindresorhus/slugify': 2.2.1 - builtins: 5.1.0 - detect-libc: 2.1.2 - dotenv: 16.6.1 - empathic: 2.0.0 - esbuild: 0.25.10 - find-workspaces: 0.3.1 - fs-extra: 11.3.2 - hono: 4.9.12 - local-pkg: 1.1.2 - resolve-from: 5.0.0 - resolve.exports: 2.0.3 - rollup: 4.50.2 - rollup-plugin-esbuild: 6.2.1(esbuild@0.25.10)(rollup@4.50.2) - rollup-plugin-node-externals: 8.1.1(rollup@4.50.2) - tinyglobby: 0.2.15 - typescript-paths: 1.5.1(typescript@5.9.3) - zod: 3.25.76 - transitivePeerDependencies: - - supports-color - - typescript - - '@mastra/dynamodb@0.15.6(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))': - dependencies: - '@aws-sdk/client-dynamodb': 3.910.0 - '@aws-sdk/lib-dynamodb': 3.910.0(@aws-sdk/client-dynamodb@3.910.0) - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - electrodb: 3.4.7(@aws-sdk/client-dynamodb@3.910.0) - transitivePeerDependencies: - - aws-crt - - '@mastra/libsql@0.12.0(@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))': - dependencies: - '@libsql/client': 0.15.15 - '@mastra/core': 0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@mastra/libsql@0.15.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))': - dependencies: - '@libsql/client': 0.15.15 - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - '@mastra/loggers@0.10.15(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))': - dependencies: - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - pino: 9.13.1 - pino-pretty: 13.1.2 - - '@mastra/loggers@0.10.5(@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))': - dependencies: - '@mastra/core': 0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - pino: 9.13.1 - pino-pretty: 13.1.2 - - '@mastra/mcp@0.13.4(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76)': - dependencies: - '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15) - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@modelcontextprotocol/sdk': 1.20.0 - date-fns: 4.1.0 - exit-hook: 4.0.0 - fast-deep-equal: 3.1.3 - uuid: 11.1.0 - zod: 3.25.76 - zod-from-json-schema: 0.5.0 - zod-from-json-schema-v3: zod-from-json-schema@0.0.5 - transitivePeerDependencies: - - '@types/json-schema' - - supports-color - - '@mastra/memory@0.12.0(@mastra/core@0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(react@19.2.0)': - dependencies: - '@mastra/core': 0.12.1(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@upstash/redis': 1.35.6 - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - async-mutex: 0.5.0 - js-tiktoken: 1.0.21 - json-schema: 0.4.0 - pg: 8.16.3 - pg-pool: 3.10.1(pg@8.16.3) - postgres: 3.4.7 - redis: 5.8.3 - xxhash-wasm: 1.1.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - pg-native - - react - - '@mastra/memory@0.15.6(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(react@19.2.0)(zod@3.25.76)': - dependencies: - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/schema-compat': 0.11.4(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76) - '@upstash/redis': 1.35.6 - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - ai-v5: ai@5.0.60(zod@3.25.76) - async-mutex: 0.5.0 - js-tiktoken: 1.0.21 - json-schema: 0.4.0 - pg: 8.16.3 - pg-pool: 3.10.1(pg@8.16.3) - postgres: 3.4.7 - redis: 5.8.3 - xxhash-wasm: 1.1.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - pg-native - - react - - '@mastra/schema-compat@0.10.5(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76)': - dependencies: - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - json-schema: 0.4.0 - zod: 3.25.76 - zod-from-json-schema: 0.0.5 - zod-to-json-schema: 3.24.6(zod@3.25.76) - - '@mastra/schema-compat@0.11.4(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76)': - dependencies: - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - json-schema: 0.4.0 - zod: 3.25.76 - zod-from-json-schema: 0.5.0 - zod-from-json-schema-v3: zod-from-json-schema@0.0.5 - zod-to-json-schema: 3.24.6(zod@3.25.76) - - '@mastra/server@0.20.2(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(zod@3.25.76)': - dependencies: - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - zod: 3.25.76 - - '@mdx-js/loader@3.1.1': - dependencies: - '@mdx-js/mdx': 3.1.1 - source-map: 0.7.6 - transitivePeerDependencies: - - supports-color - - '@mdx-js/mdx@3.1.1': - dependencies: - '@types/estree': 1.0.8 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.15.0 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-util-scope: 1.0.0 - estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 - markdown-extensions: 2.0.0 - recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.15.0) - recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - source-map: 0.7.6 - unified: 11.0.5 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.2.2 - react: 19.2.0 - - '@mermaid-js/parser@0.6.3': - dependencies: - langium: 3.3.1 - - '@modelcontextprotocol/sdk@1.20.0': - dependencies: - ajv: 6.12.6 - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - eventsource-parser: 3.0.6 - express: 5.1.0 - express-rate-limit: 7.5.1(express@5.1.0) - pkce-challenge: 5.0.0 - raw-body: 3.0.1 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - supports-color - - '@monaco-editor/loader@1.6.1': - dependencies: - state-local: 1.0.7 - - '@monaco-editor/react@4.7.0(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@monaco-editor/loader': 1.6.1 - monaco-editor: 0.54.0 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 - '@tybys/wasm-util': 0.10.1 - optional: true - - '@neon-rs/load@0.0.4': {} - - '@neon-rs/load@0.1.82': {} - - '@next/env@15.2.1': {} - - '@next/eslint-plugin-next@15.2.1': - dependencies: - fast-glob: 3.3.1 - - '@next/mdx@15.5.5(@mdx-js/loader@3.1.1)(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))': - dependencies: - source-map: 0.7.6 - optionalDependencies: - '@mdx-js/loader': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) - - '@next/swc-darwin-arm64@15.2.1': - optional: true - - '@next/swc-darwin-x64@15.2.1': - optional: true - - '@next/swc-linux-arm64-gnu@15.2.1': - optional: true - - '@next/swc-linux-arm64-musl@15.2.1': - optional: true - - '@next/swc-linux-x64-gnu@15.2.1': - optional: true - - '@next/swc-linux-x64-musl@15.2.1': - optional: true - - '@next/swc-win32-arm64-msvc@15.2.1': - optional: true - - '@next/swc-win32-x64-msvc@15.2.1': - optional: true - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 - - '@nolyfill/is-core-module@1.0.39': {} - - '@openrouter/ai-sdk-provider@1.2.0(ai@4.3.19(react@19.2.0)(zod@3.25.76))(zod@3.25.76)': - dependencies: - ai: 4.3.19(react@19.2.0)(zod@3.25.76) - zod: 3.25.76 - - '@opentelemetry/api-logs@0.203.0': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api@1.9.0': {} - - '@opentelemetry/auto-instrumentations-node@0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@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/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-amqplib': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-aws-lambda': 0.54.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-aws-sdk': 0.58.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-bunyan': 0.49.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-cassandra-driver': 0.49.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-connect': 0.47.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-cucumber': 0.19.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-dataloader': 0.21.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-dns': 0.47.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-express': 0.52.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fastify': 0.48.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fs': 0.23.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-generic-pool': 0.47.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-graphql': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-hapi': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-ioredis': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-kafkajs': 0.13.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-knex': 0.48.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-koa': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-lru-memoizer': 0.48.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-memcached': 0.47.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongodb': 0.56.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongoose': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql': 0.49.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql2': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-nestjs-core': 0.49.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-net': 0.47.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-oracledb': 0.29.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-pg': 0.56.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-pino': 0.50.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-redis': 0.52.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-restify': 0.49.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-router': 0.48.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-runtime-node': 0.17.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-socket.io': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-tedious': 0.22.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-undici': 0.14.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-winston': 0.48.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-alibaba-cloud': 0.31.9(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-aws': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-azure': 0.10.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-container': 0.7.9(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-gcp': 0.37.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - encoding - - supports-color - - '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.37.0 - - '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.37.0 - - '@opentelemetry/exporter-logs-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@grpc/grpc-js': 1.14.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-logs-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-logs-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-metrics-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@grpc/grpc-js': 1.14.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-metrics-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-metrics-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-prometheus@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-trace-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@grpc/grpc-js': 1.14.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-zipkin@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - - '@opentelemetry/instrumentation-amqplib@0.50.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-aws-lambda@0.54.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@types/aws-lambda': 8.10.152 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-aws-sdk@0.58.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-bunyan@0.49.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@types/bunyan': 1.8.11 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-cassandra-driver@0.49.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-connect@0.47.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@types/connect': 3.4.38 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-cucumber@0.19.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-dataloader@0.21.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-dns@0.47.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-express@0.52.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-fastify@0.48.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-fs@0.23.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-generic-pool@0.47.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-graphql@0.51.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-grpc@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-hapi@0.50.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-http@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - forwarded-parse: 2.1.2 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-ioredis@0.51.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/redis-common': 0.38.2 - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-kafkajs@0.13.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-knex@0.48.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-koa@0.51.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-lru-memoizer@0.48.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-memcached@0.47.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@types/memcached': 2.2.10 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-mongodb@0.56.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-mongoose@0.50.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-mysql2@0.50.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-mysql@0.49.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@types/mysql': 2.15.27 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-nestjs-core@0.49.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-net@0.47.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-oracledb@0.29.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@types/oracledb': 6.5.2 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-pg@0.56.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) - '@types/pg': 8.15.5 - '@types/pg-pool': 2.0.6 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-pino@0.50.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-redis@0.52.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/redis-common': 0.38.2 - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-restify@0.49.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-router@0.48.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-runtime-node@0.17.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-socket.io@0.50.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-tedious@0.22.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@types/tedious': 4.0.14 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-undici@0.14.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-winston@0.48.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - import-in-the-middle: 1.15.0 - require-in-the-middle: 7.5.2 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/otlp-exporter-base@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/otlp-grpc-exporter-base@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@grpc/grpc-js': 1.14.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/otlp-transformer@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.4 - - '@opentelemetry/propagator-b3@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/propagator-jaeger@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/redis-common@0.38.2': {} - - '@opentelemetry/resource-detector-alibaba-cloud@0.31.9(@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/resource-detector-aws@2.6.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.37.0 - - '@opentelemetry/resource-detector-azure@0.10.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.37.0 - - '@opentelemetry/resource-detector-container@0.7.9(@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/resource-detector-gcp@0.37.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.37.0 - gcp-metadata: 6.1.1 - transitivePeerDependencies: - - encoding - - supports-color - - '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.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.37.0 - - '@opentelemetry/sdk-logs@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - - '@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-node@0.203.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.203.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.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.37.0 - - '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-trace-node@2.1.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/semantic-conventions@1.37.0': {} - - '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - - '@optimize-lodash/rollup-plugin@5.0.2(rollup@4.50.2)': - dependencies: - '@optimize-lodash/transform': 3.0.6 - '@rollup/pluginutils': 5.3.0(rollup@4.50.2) - rollup: 4.50.2 - - '@optimize-lodash/transform@3.0.6': - dependencies: - estree-walker: 2.0.2 - magic-string: 0.30.19 - - '@phosphor-icons/react@2.1.10(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@playwright/test@1.56.0': - dependencies: - playwright: 1.56.0 - - '@popperjs/core@2.11.8': {} - - '@protobuf-ts/protoc@2.11.1': {} - - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.4': {} - - '@protobufjs/eventemitter@1.1.0': {} - - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - aria-hidden: 1.2.6 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/rect': 1.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.2.0)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0) - react: 19.2.0 - optionalDependencies: - '@types/react': 19.2.2 - - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - '@types/react-dom': 19.2.2(@types/react@19.2.2) - - '@radix-ui/rect@1.1.1': {} - - '@react-aria/focus@3.21.2(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-aria/interactions': 3.25.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-aria/utils': 3.31.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-types/shared': 3.32.1(react@19.2.0) - '@swc/helpers': 0.5.17 - clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@react-aria/interactions@3.25.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.0) - '@react-aria/utils': 3.31.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@react-stately/flags': 3.1.2 - '@react-types/shared': 3.32.1(react@19.2.0) - '@swc/helpers': 0.5.17 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@react-aria/ssr@3.9.10(react@19.2.0)': - dependencies: - '@swc/helpers': 0.5.17 - react: 19.2.0 - - '@react-aria/utils@3.31.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@react-aria/ssr': 3.9.10(react@19.2.0) - '@react-stately/flags': 3.1.2 - '@react-stately/utils': 3.10.8(react@19.2.0) - '@react-types/shared': 3.32.1(react@19.2.0) - '@swc/helpers': 0.5.17 - clsx: 2.1.1 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@react-stately/flags@3.1.2': - dependencies: - '@swc/helpers': 0.5.17 - - '@react-stately/utils@3.10.8(react@19.2.0)': - dependencies: - '@swc/helpers': 0.5.17 - react: 19.2.0 - - '@react-types/shared@3.32.1(react@19.2.0)': - dependencies: - react: 19.2.0 - - '@redis/bloom@5.8.3(@redis/client@5.8.3)': - dependencies: - '@redis/client': 5.8.3 - - '@redis/client@5.8.3': - dependencies: - cluster-key-slot: 1.1.2 - - '@redis/json@5.8.3(@redis/client@5.8.3)': - dependencies: - '@redis/client': 5.8.3 - - '@redis/search@5.8.3(@redis/client@5.8.3)': - dependencies: - '@redis/client': 5.8.3 - - '@redis/time-series@5.8.3(@redis/client@5.8.3)': - dependencies: - '@redis/client': 5.8.3 - - '@remirror/core-constants@3.0.0': {} - - '@repeaterjs/repeater@3.0.6': {} - - '@rollup/plugin-alias@5.1.1(rollup@4.50.2)': - optionalDependencies: - rollup: 4.50.2 - - '@rollup/plugin-commonjs@28.0.7(rollup@4.50.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.2) - commondir: 1.0.1 - estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.3) - is-reference: 1.2.1 - magic-string: 0.30.19 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.50.2 - - '@rollup/plugin-esm-shim@0.1.8(rollup@4.50.2)': - dependencies: - magic-string: 0.30.19 - mlly: 1.8.0 - optionalDependencies: - rollup: 4.50.2 - - '@rollup/plugin-json@6.1.0(rollup@4.50.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.2) - optionalDependencies: - rollup: 4.50.2 - - '@rollup/plugin-node-resolve@16.0.3(rollup@4.50.2)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.50.2) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - optionalDependencies: - rollup: 4.50.2 - - '@rollup/plugin-virtual@3.0.2(rollup@4.50.2)': - optionalDependencies: - rollup: 4.50.2 - - '@rollup/pluginutils@5.3.0(rollup@4.50.2)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.50.2 - - '@rollup/rollup-android-arm-eabi@4.50.2': - optional: true - - '@rollup/rollup-android-arm-eabi@4.52.4': - optional: true - - '@rollup/rollup-android-arm64@4.50.2': - optional: true - - '@rollup/rollup-android-arm64@4.52.4': - optional: true - - '@rollup/rollup-darwin-arm64@4.50.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.52.4': - optional: true - - '@rollup/rollup-darwin-x64@4.50.2': - optional: true - - '@rollup/rollup-darwin-x64@4.52.4': - optional: true - - '@rollup/rollup-freebsd-arm64@4.50.2': - optional: true - - '@rollup/rollup-freebsd-arm64@4.52.4': - optional: true - - '@rollup/rollup-freebsd-x64@4.50.2': - optional: true - - '@rollup/rollup-freebsd-x64@4.52.4': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.50.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.52.4': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.50.2': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.52.4': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.50.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.52.4': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.50.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.52.4': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.50.2': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.52.4': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.50.2': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.52.4': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.50.2': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.52.4': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.50.2': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.52.4': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.50.2': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.52.4': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.50.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.52.4': - optional: true - - '@rollup/rollup-linux-x64-musl@4.50.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.52.4': - optional: true - - '@rollup/rollup-openharmony-arm64@4.50.2': - optional: true - - '@rollup/rollup-openharmony-arm64@4.52.4': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.50.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.52.4': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.50.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.52.4': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.52.4': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.50.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.52.4': - optional: true - - '@rtsao/scc@1.1.0': {} - - '@rushstack/eslint-patch@1.14.0': {} - - '@scarf/scarf@1.4.0': {} - - '@sec-ant/readable-stream@0.4.1': {} - - '@segment/analytics-core@1.8.2': - dependencies: - '@lukeed/uuid': 2.0.1 - '@segment/analytics-generic-utils': 1.2.0 - dset: 3.1.4 - tslib: 2.8.1 - - '@segment/analytics-generic-utils@1.2.0': - dependencies: - tslib: 2.8.1 - - '@segment/analytics-node@2.3.0': - dependencies: - '@lukeed/uuid': 2.0.1 - '@segment/analytics-core': 1.8.2 - '@segment/analytics-generic-utils': 1.2.0 - buffer: 6.0.3 - jose: 5.10.0 - node-fetch: 2.7.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@shadcn/ui@0.0.4': - dependencies: - chalk: 5.2.0 - commander: 10.0.1 - execa: 7.2.0 - fs-extra: 11.3.2 - node-fetch: 3.3.2 - ora: 6.3.1 - prompts: 2.4.2 - zod: 3.25.76 - - '@shikijs/core@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 - - '@shikijs/engine-oniguruma@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - - '@shikijs/themes@3.14.0': - dependencies: - '@shikijs/types': 3.14.0 - - '@shikijs/types@3.14.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@sinclair/typebox@0.27.8': {} - - '@sindresorhus/merge-streams@4.0.0': {} - - '@sindresorhus/slugify@2.2.1': - dependencies: - '@sindresorhus/transliterate': 1.6.0 - escape-string-regexp: 5.0.0 - - '@sindresorhus/transliterate@1.6.0': - dependencies: - escape-string-regexp: 5.0.0 - - '@sinonjs/commons@3.0.1': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.1 - - '@smithy/abort-controller@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/config-resolver@4.3.2': - dependencies: - '@smithy/node-config-provider': 4.3.2 - '@smithy/types': 4.7.1 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.2 - tslib: 2.8.1 - - '@smithy/core@3.16.1': - dependencies: - '@smithy/middleware-serde': 4.2.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-stream': 4.5.2 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.2.2': - dependencies: - '@smithy/node-config-provider': 4.3.2 - '@smithy/property-provider': 4.2.2 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.2.2': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.7.1 - '@smithy/util-hex-encoding': 4.2.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.2.2': - dependencies: - '@smithy/eventstream-serde-universal': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.3.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.2.2': - dependencies: - '@smithy/eventstream-serde-universal': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.2.2': - dependencies: - '@smithy/eventstream-codec': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.3.3': - dependencies: - '@smithy/protocol-http': 5.3.2 - '@smithy/querystring-builder': 4.2.2 - '@smithy/types': 4.7.1 - '@smithy/util-base64': 4.3.0 - tslib: 2.8.1 - - '@smithy/hash-node@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.2.2': - dependencies: - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.3.3': - dependencies: - '@smithy/core': 3.16.1 - '@smithy/middleware-serde': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - '@smithy/url-parser': 4.2.2 - '@smithy/util-middleware': 4.2.2 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.4.3': - dependencies: - '@smithy/node-config-provider': 4.3.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/service-error-classification': 4.2.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-retry': 4.2.2 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - - '@smithy/middleware-serde@4.2.2': - dependencies: - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.3.2': - dependencies: - '@smithy/property-provider': 4.2.2 - '@smithy/shared-ini-file-loader': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.4.1': - dependencies: - '@smithy/abort-controller': 4.2.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/querystring-builder': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/property-provider@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/protocol-http@5.3.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - '@smithy/util-uri-escape': 4.2.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - - '@smithy/shared-ini-file-loader@4.3.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/signature-v4@5.3.2': - dependencies: - '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.2 - '@smithy/util-uri-escape': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@smithy/smithy-client@4.8.1': - dependencies: - '@smithy/core': 3.16.1 - '@smithy/middleware-endpoint': 4.3.3 - '@smithy/middleware-stack': 4.2.2 - '@smithy/protocol-http': 5.3.2 - '@smithy/types': 4.7.1 - '@smithy/util-stream': 4.5.2 - tslib: 2.8.1 - - '@smithy/types@4.7.1': - dependencies: - tslib: 2.8.1 - - '@smithy/url-parser@4.2.2': - dependencies: - '@smithy/querystring-parser': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/util-base64@4.3.0': - dependencies: - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-body-length-browser@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-body-length-node@4.2.1': - dependencies: - tslib: 2.8.1 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-buffer-from@4.2.0': - dependencies: - '@smithy/is-array-buffer': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-config-provider@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-defaults-mode-browser@4.3.2': - dependencies: - '@smithy/property-provider': 4.2.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/util-defaults-mode-node@4.2.3': - dependencies: - '@smithy/config-resolver': 4.3.2 - '@smithy/credential-provider-imds': 4.2.2 - '@smithy/node-config-provider': 4.3.2 - '@smithy/property-provider': 4.2.2 - '@smithy/smithy-client': 4.8.1 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/util-endpoints@3.2.2': - dependencies: - '@smithy/node-config-provider': 4.3.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-middleware@4.2.2': - dependencies: - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/util-retry@4.2.2': - dependencies: - '@smithy/service-error-classification': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/util-stream@4.5.2': - dependencies: - '@smithy/fetch-http-handler': 5.3.3 - '@smithy/node-http-handler': 4.4.1 - '@smithy/types': 4.7.1 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-uri-escape@4.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-utf8@2.3.0': - dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-utf8@4.2.0': - dependencies: - '@smithy/util-buffer-from': 4.2.0 - tslib: 2.8.1 - - '@smithy/util-waiter@4.2.2': - dependencies: - '@smithy/abort-controller': 4.2.2 - '@smithy/types': 4.7.1 - tslib: 2.8.1 - - '@smithy/uuid@1.1.0': - dependencies: - tslib: 2.8.1 - - '@standard-schema/spec@1.0.0': {} - - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.15': - dependencies: - tslib: 2.8.1 - - '@swc/helpers@0.5.17': - dependencies: - tslib: 2.8.1 - - '@tailwindcss/node@4.1.14': - dependencies: - '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.18.3 - jiti: 2.6.1 - lightningcss: 1.30.1 - magic-string: 0.30.19 - source-map-js: 1.2.1 - tailwindcss: 4.1.14 - - '@tailwindcss/oxide-android-arm64@4.1.14': - optional: true - - '@tailwindcss/oxide-darwin-arm64@4.1.14': - optional: true - - '@tailwindcss/oxide-darwin-x64@4.1.14': - optional: true - - '@tailwindcss/oxide-freebsd-x64@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-arm64-gnu@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-arm64-musl@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-x64-gnu@4.1.14': - optional: true - - '@tailwindcss/oxide-linux-x64-musl@4.1.14': - optional: true - - '@tailwindcss/oxide-wasm32-wasi@4.1.14': - optional: true - - '@tailwindcss/oxide-win32-arm64-msvc@4.1.14': - optional: true - - '@tailwindcss/oxide-win32-x64-msvc@4.1.14': - optional: true - - '@tailwindcss/oxide@4.1.14': - dependencies: - detect-libc: 2.1.2 - tar: 7.5.1 - optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.14 - '@tailwindcss/oxide-darwin-arm64': 4.1.14 - '@tailwindcss/oxide-darwin-x64': 4.1.14 - '@tailwindcss/oxide-freebsd-x64': 4.1.14 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.14 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.14 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.14 - '@tailwindcss/oxide-linux-x64-musl': 4.1.14 - '@tailwindcss/oxide-wasm32-wasi': 4.1.14 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.14 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.14 - - '@tailwindcss/postcss@4.1.14': - dependencies: - '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.14 - '@tailwindcss/oxide': 4.1.14 - postcss: 8.5.6 - tailwindcss: 4.1.14 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.1.14)': - dependencies: - postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.14 - - '@tanstack/react-virtual@3.13.12(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@tanstack/virtual-core': 3.13.12 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - '@tanstack/virtual-core@3.13.12': {} - - '@tiptap/core@2.26.3(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-blockquote@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-bold@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-bubble-menu@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - tippy.js: 6.3.7 - - '@tiptap/extension-bullet-list@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-code-block@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-code@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-color@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/extension-text-style@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/extension-text-style': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - - '@tiptap/extension-document@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-dropcursor@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-floating-menu@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - tippy.js: 6.3.7 - - '@tiptap/extension-gapcursor@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-hard-break@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-heading@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-history@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-horizontal-rule@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-italic@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-list-item@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-ordered-list@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-paragraph@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-placeholder@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - - '@tiptap/extension-strike@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-text-style@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/extension-text@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - - '@tiptap/pm@2.26.3': - dependencies: - prosemirror-changeset: 2.3.1 - prosemirror-collab: 1.3.1 - prosemirror-commands: 1.7.1 - prosemirror-dropcursor: 1.8.2 - prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.4.1 - prosemirror-inputrules: 1.5.0 - prosemirror-keymap: 1.2.3 - prosemirror-markdown: 1.13.2 - prosemirror-menu: 1.2.5 - prosemirror-model: 1.25.3 - prosemirror-schema-basic: 1.2.4 - prosemirror-schema-list: 1.5.1 - prosemirror-state: 1.4.3 - prosemirror-tables: 1.8.1 - prosemirror-trailing-node: 3.0.0(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3) - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 - - '@tiptap/react@2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/extension-bubble-menu': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-floating-menu': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/pm': 2.26.3 - '@types/use-sync-external-store': 0.0.6 - fast-deep-equal: 3.1.3 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - use-sync-external-store: 1.6.0(react@19.2.0) - - '@tiptap/starter-kit@2.26.3': - dependencies: - '@tiptap/core': 2.26.3(@tiptap/pm@2.26.3) - '@tiptap/extension-blockquote': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-bold': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-bullet-list': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-code': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-code-block': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-document': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-dropcursor': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-gapcursor': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-hard-break': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-heading': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-history': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-horizontal-rule': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3) - '@tiptap/extension-italic': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-list-item': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-ordered-list': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-paragraph': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-strike': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-text': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/extension-text-style': 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3)) - '@tiptap/pm': 2.26.3 - - '@tokenizer/token@0.3.0': {} - - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@types/aws-lambda@8.10.152': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - '@types/babel__generator': 7.27.0 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.28.0 - - '@types/babel__generator@7.27.0': - dependencies: - '@babel/types': 7.28.4 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - - '@types/babel__traverse@7.28.0': - dependencies: - '@babel/types': 7.28.4 - - '@types/body-parser@1.19.6': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.19.21 - - '@types/bunyan@1.8.11': - dependencies: - '@types/node': 20.19.21 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 20.19.21 - - '@types/cors@2.8.19': - dependencies: - '@types/node': 20.19.21 - - '@types/d3-array@3.2.2': {} - - '@types/d3-axis@3.0.6': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-brush@3.0.6': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-chord@3.0.6': {} - - '@types/d3-color@3.1.3': {} - - '@types/d3-contour@3.0.6': - dependencies: - '@types/d3-array': 3.2.2 - '@types/geojson': 7946.0.16 - - '@types/d3-delaunay@6.0.4': {} - - '@types/d3-dispatch@3.0.7': {} - - '@types/d3-drag@3.0.7': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-dsv@3.0.7': {} - - '@types/d3-ease@3.0.2': {} - - '@types/d3-fetch@3.0.7': - dependencies: - '@types/d3-dsv': 3.0.7 - - '@types/d3-force@3.0.10': {} - - '@types/d3-format@3.0.4': {} - - '@types/d3-geo@3.1.0': - dependencies: - '@types/geojson': 7946.0.16 - - '@types/d3-hierarchy@3.1.7': {} - - '@types/d3-interpolate@3.0.4': - dependencies: - '@types/d3-color': 3.1.3 - - '@types/d3-path@3.1.1': {} - - '@types/d3-polygon@3.0.2': {} - - '@types/d3-quadtree@3.0.6': {} - - '@types/d3-random@3.0.3': {} - - '@types/d3-scale-chromatic@3.1.0': {} - - '@types/d3-scale@4.0.9': - dependencies: - '@types/d3-time': 3.0.4 - - '@types/d3-selection@3.0.11': {} - - '@types/d3-shape@3.1.7': - dependencies: - '@types/d3-path': 3.1.1 - - '@types/d3-time-format@4.0.3': {} - - '@types/d3-time@3.0.4': {} - - '@types/d3-timer@3.0.2': {} - - '@types/d3-transition@3.0.9': - dependencies: - '@types/d3-selection': 3.0.11 - - '@types/d3-zoom@3.0.8': - dependencies: - '@types/d3-interpolate': 3.0.4 - '@types/d3-selection': 3.0.11 - - '@types/d3@7.4.3': - dependencies: - '@types/d3-array': 3.2.2 - '@types/d3-axis': 3.0.6 - '@types/d3-brush': 3.0.6 - '@types/d3-chord': 3.0.6 - '@types/d3-color': 3.1.3 - '@types/d3-contour': 3.0.6 - '@types/d3-delaunay': 6.0.4 - '@types/d3-dispatch': 3.0.7 - '@types/d3-drag': 3.0.7 - '@types/d3-dsv': 3.0.7 - '@types/d3-ease': 3.0.2 - '@types/d3-fetch': 3.0.7 - '@types/d3-force': 3.0.10 - '@types/d3-format': 3.0.4 - '@types/d3-geo': 3.1.0 - '@types/d3-hierarchy': 3.1.7 - '@types/d3-interpolate': 3.0.4 - '@types/d3-path': 3.1.1 - '@types/d3-polygon': 3.0.2 - '@types/d3-quadtree': 3.0.6 - '@types/d3-random': 3.0.3 - '@types/d3-scale': 4.0.9 - '@types/d3-scale-chromatic': 3.1.0 - '@types/d3-selection': 3.0.11 - '@types/d3-shape': 3.1.7 - '@types/d3-time': 3.0.4 - '@types/d3-time-format': 4.0.3 - '@types/d3-timer': 3.0.2 - '@types/d3-transition': 3.0.9 - '@types/d3-zoom': 3.0.8 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/diff-match-patch@1.0.36': {} - - '@types/diff@7.0.2': {} - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.8 - - '@types/estree@1.0.8': {} - - '@types/express-serve-static-core@4.19.7': - dependencies: - '@types/node': 20.19.21 - '@types/qs': 6.14.0 - '@types/range-parser': 1.2.7 - '@types/send': 1.2.0 - - '@types/express@4.17.23': - dependencies: - '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.7 - '@types/qs': 6.14.0 - '@types/serve-static': 1.15.9 - - '@types/geojson@7946.0.16': {} - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 20.19.21 - - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.11 - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/http-errors@2.0.5': {} - - '@types/inquirer@9.0.9': - dependencies: - '@types/through': 0.0.33 - rxjs: 7.8.1 - - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - - '@types/jest@29.5.14': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/katex@0.16.7': {} - - '@types/linkify-it@5.0.0': {} - - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - - '@types/mdast@3.0.15': - dependencies: - '@types/unist': 2.0.11 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdurl@2.0.0': {} - - '@types/mdx@2.0.13': {} - - '@types/memcached@2.2.10': - dependencies: - '@types/node': 20.19.21 - - '@types/mime@1.3.5': {} - - '@types/ms@2.1.0': {} - - '@types/mysql@2.15.27': - dependencies: - '@types/node': 20.19.21 - - '@types/node-fetch@2.6.13': - dependencies: - '@types/node': 20.19.21 - form-data: 4.0.4 - - '@types/node@18.19.130': - dependencies: - undici-types: 5.26.5 - - '@types/node@20.19.21': - dependencies: - undici-types: 6.21.0 - - '@types/node@22.18.10': - dependencies: - undici-types: 6.21.0 - - '@types/oracledb@6.5.2': - dependencies: - '@types/node': 20.19.21 - - '@types/pg-pool@2.0.6': - dependencies: - '@types/pg': 8.15.5 - - '@types/pg@8.15.5': - dependencies: - '@types/node': 20.19.21 - pg-protocol: 1.10.3 - pg-types: 2.2.0 - - '@types/prop-types@15.7.15': {} - - '@types/qs@6.14.0': {} - - '@types/range-parser@1.2.7': {} - - '@types/react-dom@19.2.2(@types/react@19.2.2)': - dependencies: - '@types/react': 19.2.2 - - '@types/react-syntax-highlighter@15.5.13': - dependencies: - '@types/react': 19.2.2 - - '@types/react@19.2.2': - dependencies: - csstype: 3.1.3 - - '@types/resolve@1.20.2': {} - - '@types/retry@0.12.0': {} - - '@types/semver@7.7.1': {} - - '@types/send@0.17.5': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.19.21 - - '@types/send@1.2.0': - dependencies: - '@types/node': 20.19.21 - - '@types/serve-static@1.15.9': - dependencies: - '@types/http-errors': 2.0.5 - '@types/node': 20.19.21 - '@types/send': 0.17.5 - - '@types/stack-utils@2.0.3': {} - - '@types/tedious@4.0.14': - dependencies: - '@types/node': 20.19.21 - - '@types/through@0.0.33': - dependencies: - '@types/node': 20.19.21 - - '@types/tough-cookie@4.0.5': {} - - '@types/trusted-types@2.0.7': {} - - '@types/unist@2.0.11': {} - - '@types/unist@3.0.3': {} - - '@types/use-sync-external-store@0.0.6': {} - - '@types/uuid@10.0.0': {} - - '@types/validator@13.15.3': {} - - '@types/ws@8.18.1': - dependencies: - '@types/node': 20.19.21 - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 - eslint: 9.37.0(jiti@2.6.1) - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 - debug: 4.4.3 - eslint: 9.37.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - debug: 4.4.3 - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.46.1': - dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 - - '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.37.0(jiti@2.6.1) - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.46.1': {} - - '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 - debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.46.1': - dependencies: - '@typescript-eslint/types': 8.46.1 - eslint-visitor-keys: 4.2.1 - - '@ungap/structured-clone@1.3.0': {} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true - - '@upstash/redis@1.35.6': - dependencies: - uncrypto: 0.1.3 - - '@urql/core@5.2.0(graphql@16.11.0)': - dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.11.0) - wonka: 6.3.5 - transitivePeerDependencies: - - graphql - - '@vercel/oidc@3.0.2': {} - - '@webcontainer/env@1.1.1': {} - - '@whatwg-node/disposablestack@0.0.6': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@whatwg-node/events@0.1.2': - dependencies: - tslib: 2.8.1 - - '@whatwg-node/fetch@0.10.11': - dependencies: - '@whatwg-node/node-fetch': 0.8.1 - urlpattern-polyfill: 10.1.0 - - '@whatwg-node/node-fetch@0.8.1': - dependencies: - '@fastify/busboy': 3.2.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - '@whatwg-node/promise-helpers@1.3.2': - dependencies: - tslib: 2.8.1 - - '@whatwg-node/server@0.10.13': - dependencies: - '@envelop/instrumentation': 1.0.0 - '@whatwg-node/disposablestack': 0.0.6 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 - - abort-controller-x@0.4.3: {} - - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - - accepts@2.0.0: - dependencies: - mime-types: 3.0.1 - negotiator: 1.0.0 - - acorn-import-attributes@1.9.5(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - - acorn@8.15.0: {} - - agent-base@6.0.2: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - agent-base@7.1.4: {} - - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 - - ai@4.3.19(react@19.2.0)(zod@3.25.76): - dependencies: - '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@3.25.76) - '@ai-sdk/react': 1.2.12(react@19.2.0)(zod@3.25.76) - '@ai-sdk/ui-utils': 1.2.11(zod@3.25.76) - '@opentelemetry/api': 1.9.0 - jsondiffpatch: 0.6.0 - zod: 3.25.76 - optionalDependencies: - react: 19.2.0 - - ai@5.0.60(zod@3.25.76): - dependencies: - '@ai-sdk/gateway': 1.0.33(zod@3.25.76) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.10(zod@3.25.76) - '@opentelemetry/api': 1.9.0 - zod: 3.25.76 - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - ansi-styles@5.2.0: {} - - ansi-styles@6.2.3: {} - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - aria-hidden@1.2.6: - dependencies: - tslib: 2.8.1 - - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-flatten@1.1.1: {} - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - arrify@2.0.1: {} - - ast-types-flow@0.0.8: {} - - astring@1.9.0: {} - - async-function@1.0.0: {} - - async-mutex@0.5.0: - dependencies: - tslib: 2.8.1 - - asynckit@0.4.0: {} - - atomic-sleep@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - axe-core@4.11.0: {} - - axios@1.12.2(debug@4.4.3): - dependencies: - follow-redirects: 1.15.11(debug@4.4.3) - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - axobject-query@4.1.0: {} - - babel-jest@29.7.0(@babel/core@7.28.4): - dependencies: - '@babel/core': 7.28.4 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.28.4) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.28.0 - - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4): - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) - - babel-preset-jest@29.6.3(@babel/core@7.28.4): - dependencies: - '@babel/core': 7.28.4 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - baseline-browser-mapping@2.8.16: {} - - bignumber.js@9.3.1: {} - - binary-extensions@2.3.0: {} - - bl@5.1.0: - dependencies: - buffer: 6.0.3 - inherits: 2.0.4 - readable-stream: 3.6.2 - - body-parser@1.20.3: - 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.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.13.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - body-parser@2.2.0: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 4.4.3 - http-errors: 2.0.0 - iconv-lite: 0.6.3 - on-finished: 2.4.1 - qs: 6.14.0 - raw-body: 3.0.1 - type-is: 2.0.1 - transitivePeerDependencies: - - supports-color - - bowser@2.12.1: {} - - brace-expansion@1.1.12: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - brace-expansion@2.0.2: - dependencies: - balanced-match: 1.0.2 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - browserslist@4.26.3: - dependencies: - baseline-browser-mapping: 2.8.16 - caniuse-lite: 1.0.30001750 - electron-to-chromium: 1.5.235 - node-releases: 2.0.23 - update-browserslist-db: 1.1.3(browserslist@4.26.3) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-equal-constant-time@1.0.1: {} - - buffer-from@1.1.2: {} - - buffer@6.0.3: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builtins@5.1.0: - dependencies: - semver: 7.7.3 - - bundle-name@4.1.0: - dependencies: - run-applescript: 7.1.0 - - bundle-require@5.1.0(esbuild@0.25.10): - dependencies: - esbuild: 0.25.10 - load-tsconfig: 0.2.5 - - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - - bytes@3.1.2: {} - - cac@6.7.14: {} - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001750: {} - - case-anything@2.1.13: {} - - ccount@2.0.1: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chalk@5.2.0: {} - - chalk@5.6.2: {} - - char-regex@1.0.2: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@1.1.4: {} - - character-entities-legacy@3.0.0: {} - - character-entities@1.2.4: {} - - character-entities@2.0.2: {} - - character-reference-invalid@1.1.4: {} - - character-reference-invalid@2.0.1: {} - - chardet@2.1.0: {} - - chevrotain-allstar@0.3.1(chevrotain@11.0.3): - dependencies: - chevrotain: 11.0.3 - lodash-es: 4.17.21 - - chevrotain@11.0.3: - dependencies: - '@chevrotain/cst-dts-gen': 11.0.3 - '@chevrotain/gast': 11.0.3 - '@chevrotain/regexp-to-ast': 11.0.3 - '@chevrotain/types': 11.0.3 - '@chevrotain/utils': 11.0.3 - lodash-es: 4.17.21 - - chokidar@4.0.3: - dependencies: - readdirp: 4.1.2 - - chownr@3.0.0: {} - - ci-info@3.9.0: {} - - citty@0.1.6: - dependencies: - consola: 3.4.2 - - cjs-module-lexer@1.4.3: {} - - class-transformer@0.5.1: {} - - class-validator@0.14.2: - dependencies: - '@types/validator': 13.15.3 - libphonenumber-js: 1.12.24 - validator: 13.15.15 - - class-variance-authority@0.7.1: - dependencies: - clsx: 2.1.1 - - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - - cli-spinners@2.9.2: {} - - cli-width@4.1.0: {} - - client-only@0.0.1: {} - - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - - clone@1.0.4: {} - - clone@2.1.2: {} - - clsx@2.1.1: {} - - cluster-key-slot@1.1.2: {} - - co@4.6.0: {} - - collapse-white-space@2.1.0: {} - - collect-v8-coverage@1.0.2: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 - optional: true - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - - colorette@2.0.20: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - comma-separated-tokens@1.0.8: {} - - comma-separated-tokens@2.0.3: {} - - commander@10.0.1: {} - - commander@12.1.0: {} - - commander@4.1.1: {} - - commander@7.2.0: {} - - commander@8.3.0: {} - - commander@9.5.0: {} - - commondir@1.0.1: {} - - compare-versions@6.1.1: {} - - concat-map@0.0.1: {} - - concurrently@9.2.1: - dependencies: - chalk: 4.1.2 - rxjs: 7.8.2 - shell-quote: 1.8.3 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - - confbox@0.1.8: {} - - confbox@0.2.2: {} - - consola@3.4.2: {} - - console-table-printer@2.14.6: - dependencies: - simple-wcswidth: 1.1.2 - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-disposition@1.0.0: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-source-map@2.0.0: {} - - cookie-signature@1.0.6: {} - - cookie-signature@1.2.2: {} - - cookie@0.7.1: {} - - cookie@0.7.2: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - cose-base@1.0.3: - dependencies: - layout-base: 1.0.2 - - cose-base@2.2.0: - dependencies: - layout-base: 2.0.1 - - create-jest@29.7.0(@types/node@20.19.21): - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.19.21) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - crelt@1.0.6: {} - - cross-fetch@3.2.0: - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - cross-inspect@1.0.1: - dependencies: - tslib: 2.8.1 - - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssesc@3.0.0: {} - - csstype@3.1.3: {} - - cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): - dependencies: - cose-base: 1.0.3 - cytoscape: 3.33.1 - - cytoscape-fcose@2.2.0(cytoscape@3.33.1): - dependencies: - cose-base: 2.2.0 - cytoscape: 3.33.1 - - cytoscape@3.33.1: {} - - d3-array@2.12.1: - dependencies: - internmap: 1.0.1 - - d3-array@3.2.4: - dependencies: - internmap: 2.0.3 - - d3-axis@3.0.0: {} - - d3-brush@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3-chord@3.0.1: - dependencies: - d3-path: 3.1.0 - - d3-color@3.1.0: {} - - d3-contour@4.0.2: - dependencies: - d3-array: 3.2.4 - - d3-delaunay@6.0.4: - dependencies: - delaunator: 5.0.1 - - d3-dispatch@3.0.1: {} - - d3-drag@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-selection: 3.0.0 - - d3-dsv@3.0.1: - dependencies: - commander: 7.2.0 - iconv-lite: 0.6.3 - rw: 1.3.3 - - d3-ease@3.0.1: {} - - d3-fetch@3.0.1: - dependencies: - d3-dsv: 3.0.1 - - d3-force@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-quadtree: 3.0.1 - d3-timer: 3.0.1 - - d3-format@3.1.0: {} - - d3-geo@3.1.1: - dependencies: - d3-array: 3.2.4 - - d3-hierarchy@3.1.2: {} - - d3-interpolate@3.0.1: - dependencies: - d3-color: 3.1.0 - - d3-path@1.0.9: {} - - d3-path@3.1.0: {} - - d3-polygon@3.0.1: {} - - d3-quadtree@3.0.1: {} - - d3-random@3.0.1: {} - - d3-sankey@0.12.3: - dependencies: - d3-array: 2.12.1 - d3-shape: 1.3.7 - - d3-scale-chromatic@3.1.0: - dependencies: - d3-color: 3.1.0 - d3-interpolate: 3.0.1 - - d3-scale@4.0.2: - dependencies: - d3-array: 3.2.4 - d3-format: 3.1.0 - d3-interpolate: 3.0.1 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - - d3-selection@3.0.0: {} - - d3-shape@1.3.7: - dependencies: - d3-path: 1.0.9 - - d3-shape@3.2.0: - dependencies: - d3-path: 3.1.0 - - d3-time-format@4.1.0: - dependencies: - d3-time: 3.1.0 - - d3-time@3.1.0: - dependencies: - d3-array: 3.2.4 - - d3-timer@3.0.1: {} - - d3-transition@3.0.1(d3-selection@3.0.0): - dependencies: - d3-color: 3.1.0 - d3-dispatch: 3.0.1 - d3-ease: 3.0.1 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-timer: 3.0.1 - - d3-zoom@3.0.0: - dependencies: - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-interpolate: 3.0.1 - d3-selection: 3.0.0 - d3-transition: 3.0.1(d3-selection@3.0.0) - - d3@7.9.0: - dependencies: - d3-array: 3.2.4 - d3-axis: 3.0.0 - d3-brush: 3.0.0 - d3-chord: 3.0.1 - d3-color: 3.1.0 - d3-contour: 4.0.2 - d3-delaunay: 6.0.4 - d3-dispatch: 3.0.1 - d3-drag: 3.0.0 - d3-dsv: 3.0.1 - d3-ease: 3.0.1 - d3-fetch: 3.0.1 - d3-force: 3.0.0 - d3-format: 3.1.0 - d3-geo: 3.1.1 - d3-hierarchy: 3.1.2 - d3-interpolate: 3.0.1 - d3-path: 3.1.0 - d3-polygon: 3.0.1 - d3-quadtree: 3.0.1 - d3-random: 3.0.1 - d3-scale: 4.0.2 - d3-scale-chromatic: 3.1.0 - d3-selection: 3.0.0 - d3-shape: 3.2.0 - d3-time: 3.1.0 - d3-time-format: 4.1.0 - d3-timer: 3.0.1 - d3-transition: 3.0.1(d3-selection@3.0.0) - d3-zoom: 3.0.0 - - dagre-d3-es@7.0.13: - dependencies: - d3: 7.9.0 - lodash-es: 4.17.21 - - damerau-levenshtein@1.0.8: {} - - data-uri-to-buffer@4.0.1: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - date-fns@3.6.0: {} - - date-fns@4.1.0: {} - - dateformat@4.6.3: {} - - dayjs@1.11.18: {} - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.1: - dependencies: - ms: 2.1.2 - - debug@4.4.3: - dependencies: - ms: 2.1.3 - - decamelize@1.2.0: {} - - decode-named-character-reference@1.2.0: - dependencies: - character-entities: 2.0.2 - - dedent@1.7.0: {} - - deep-is@0.1.4: {} - - deepmerge@4.3.1: {} - - default-browser-id@5.0.0: {} - - default-browser@5.2.1: - dependencies: - bundle-name: 4.1.0 - default-browser-id: 5.0.0 - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - - defu@6.1.4: {} - - delaunator@5.0.1: - dependencies: - robust-predicates: 3.0.2 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - dequal@2.0.3: {} - - destroy@1.2.0: {} - - detect-libc@1.0.3: {} - - detect-libc@2.0.2: {} - - detect-libc@2.1.2: {} - - detect-newline@3.1.0: {} - - detect-node-es@1.1.0: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - diff-match-patch@1.0.5: {} - - diff-sequences@29.6.3: {} - - diff@5.2.0: {} - - diff@7.0.0: {} - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - dompurify@3.1.7: {} - - dompurify@3.3.0: - optionalDependencies: - '@types/trusted-types': 2.0.7 - - dotenv@16.6.1: {} - - dprint-node@1.0.8: - dependencies: - detect-libc: 1.0.3 - - dset@3.1.4: {} - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - eastasianwidth@0.2.0: {} - - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - - ee-first@1.1.1: {} - - electrodb@3.4.7(@aws-sdk/client-dynamodb@3.910.0): - dependencies: - '@aws-sdk/lib-dynamodb': 3.910.0(@aws-sdk/client-dynamodb@3.910.0) - '@aws-sdk/util-dynamodb': 3.910.0(@aws-sdk/client-dynamodb@3.910.0) - jsonschema: 1.2.7 - transitivePeerDependencies: - - '@aws-sdk/client-dynamodb' - - electron-to-chromium@1.5.235: {} - - embla-carousel-react@8.6.0(react@19.2.0): - dependencies: - embla-carousel: 8.6.0 - embla-carousel-reactive-utils: 8.6.0(embla-carousel@8.6.0) - react: 19.2.0 - - embla-carousel-reactive-utils@8.6.0(embla-carousel@8.6.0): - dependencies: - embla-carousel: 8.6.0 - - embla-carousel@8.6.0: {} - - emittery@0.13.1: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - empathic@2.0.0: {} - - encodeurl@1.0.2: {} - - encodeurl@2.0.0: {} - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - enhanced-resolve@5.18.3: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - - entities@4.5.0: {} - - entities@6.0.1: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - - es-module-lexer@1.7.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - esast-util-from-estree@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - unist-util-position-from-estree: 2.0.0 - - esast-util-from-js@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - acorn: 8.15.0 - esast-util-from-estree: 2.0.0 - vfile-message: 4.0.3 - - esbuild@0.25.10: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.10 - '@esbuild/android-arm': 0.25.10 - '@esbuild/android-arm64': 0.25.10 - '@esbuild/android-x64': 0.25.10 - '@esbuild/darwin-arm64': 0.25.10 - '@esbuild/darwin-x64': 0.25.10 - '@esbuild/freebsd-arm64': 0.25.10 - '@esbuild/freebsd-x64': 0.25.10 - '@esbuild/linux-arm': 0.25.10 - '@esbuild/linux-arm64': 0.25.10 - '@esbuild/linux-ia32': 0.25.10 - '@esbuild/linux-loong64': 0.25.10 - '@esbuild/linux-mips64el': 0.25.10 - '@esbuild/linux-ppc64': 0.25.10 - '@esbuild/linux-riscv64': 0.25.10 - '@esbuild/linux-s390x': 0.25.10 - '@esbuild/linux-x64': 0.25.10 - '@esbuild/netbsd-arm64': 0.25.10 - '@esbuild/netbsd-x64': 0.25.10 - '@esbuild/openbsd-arm64': 0.25.10 - '@esbuild/openbsd-x64': 0.25.10 - '@esbuild/openharmony-arm64': 0.25.10 - '@esbuild/sunos-x64': 0.25.10 - '@esbuild/win32-arm64': 0.25.10 - '@esbuild/win32-ia32': 0.25.10 - '@esbuild/win32-x64': 0.25.10 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.0.0: {} - - escape-string-regexp@5.0.0: {} - - eslint-config-next@15.2.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@next/eslint-plugin-next': 15.2.1 - '@rushstack/eslint-patch': 1.14.0 - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.37.0(jiti@2.6.1)) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.3 - eslint: 9.37.0(jiti@2.6.1) - get-tsconfig: 4.12.0 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.15 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.37.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)))(eslint@9.37.0(jiti@2.6.1)) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsx-a11y@6.10.2(eslint@9.37.0(jiti@2.6.1)): - dependencies: - aria-query: 5.3.2 - array-includes: 3.1.9 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.11.0 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 9.37.0(jiti@2.6.1) - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 - - eslint-plugin-react-hooks@5.2.0(eslint@9.37.0(jiti@2.6.1)): - dependencies: - eslint: 9.37.0(jiti@2.6.1) - - eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.37.0(jiti@2.6.1) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@9.37.0(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.4.0 - '@eslint/core': 0.16.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.37.0 - '@eslint/plugin-kit': 0.4.0 - '@humanfs/node': 0.16.7 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - - esprima@4.0.1: {} - - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - estree-util-attach-comments@3.0.0: - dependencies: - '@types/estree': 1.0.8 - - estree-util-build-jsx@3.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-walker: 3.0.3 - - estree-util-is-identifier-name@3.0.0: {} - - estree-util-scope@1.0.0: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - - estree-util-to-js@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - astring: 1.9.0 - source-map: 0.7.6 - - estree-util-visit@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.3 - - estree-walker@2.0.2: {} - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.8 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - event-target-shim@5.0.1: {} - - eventemitter3@4.0.7: {} - - events@3.3.0: {} - - eventsource-parser@3.0.6: {} - - eventsource@3.0.7: - dependencies: - eventsource-parser: 3.0.6 - - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@7.2.0: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - - execa@9.6.0: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.6 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.1 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.3.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.2 - - exit-hook@4.0.0: {} - - exit@0.1.2: {} - - expect@29.7.0: - dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - expr-eval@2.0.2: {} - - express-rate-limit@7.5.1(express@5.1.0): - dependencies: - express: 5.1.0 - - express@4.21.2: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - 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.0 - 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.13.0 - 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.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - express@5.1.0: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.0 - content-disposition: 1.0.0 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.0 - fresh: 2.0.0 - http-errors: 2.0.0 - merge-descriptors: 2.0.0 - mime-types: 3.0.1 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.0 - serve-static: 2.2.0 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - exsolve@1.0.7: {} - - extend@3.0.2: {} - - fast-copy@3.0.2: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.1: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-json-patch@3.1.1: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fast-safe-stringify@2.1.1: {} - - fast-text-encoding@1.0.6: {} - - fast-xml-parser@5.2.5: - dependencies: - strnum: 2.1.1 - - fastq@1.19.1: - dependencies: - reusify: 1.1.0 - - fault@1.0.4: - dependencies: - format: 0.2.2 - - fb-watchman@2.0.2: - dependencies: - bser: 2.1.1 - - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.3.3 - - figures@6.1.0: - dependencies: - is-unicode-supported: 2.1.0 - - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-type@16.5.4: - dependencies: - readable-web-to-node-stream: 3.0.4 - strtok3: 6.3.0 - token-types: 4.2.1 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.3.1: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - finalhandler@2.1.0: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - find-workspaces@0.3.1: - dependencies: - fast-glob: 3.3.3 - pkg-types: 1.3.1 - yaml: 2.8.1 - - fix-dts-default-cjs-exports@1.0.1: - dependencies: - magic-string: 0.30.19 - mlly: 1.8.0 - rollup: 4.52.4 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - - flat@5.0.2: {} - - flatted@3.3.3: {} - - follow-redirects@1.15.11(debug@4.4.3): - optionalDependencies: - debug: 4.4.3 - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data-encoder@1.7.2: {} - - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - - format@0.2.2: {} - - formdata-node@4.4.1: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - - forwarded-parse@2.1.2: {} - - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - fresh@2.0.0: {} - - fs-extra@11.3.2: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.0 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.2: - optional: true - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gaxios@5.1.3: - dependencies: - extend: 3.0.2 - https-proxy-agent: 5.0.1 - is-stream: 2.0.1 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - supports-color - - gaxios@6.7.1: - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@5.3.0: - dependencies: - gaxios: 5.1.3 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@6.1.1: - dependencies: - gaxios: 6.7.1 - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - generator-function@2.0.1: {} - - gensync@1.0.0-beta.2: {} - - get-caller-file@2.0.5: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-nonce@1.0.1: {} - - get-package-type@0.1.0: {} - - get-port@7.1.0: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stream@6.0.1: {} - - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.12.0: - dependencies: - resolve-pkg-maps: 1.0.0 - - giget@2.0.0: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - defu: 6.1.4 - node-fetch-native: 1.6.7 - nypm: 0.6.2 - pathe: 2.0.3 - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@10.4.5: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@14.0.0: {} - - globals@15.15.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - google-auth-library@8.9.0: - dependencies: - arrify: 2.0.1 - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - fast-text-encoding: 1.0.6 - gaxios: 5.1.3 - gcp-metadata: 5.3.0 - gtoken: 6.1.2 - jws: 4.0.0 - lru-cache: 6.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - google-logging-utils@0.0.2: {} - - google-p12-pem@4.0.1: - dependencies: - node-forge: 1.3.1 - - gopd@1.2.0: {} - - graceful-fs@4.2.11: {} - - graphemer@1.4.0: {} - - graphql-query-complexity@0.12.0(graphql@16.11.0): - dependencies: - graphql: 16.11.0 - lodash.get: 4.4.2 - - graphql-request@6.1.0(graphql@16.11.0): - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) - cross-fetch: 3.2.0 - graphql: 16.11.0 - transitivePeerDependencies: - - encoding - - graphql-scalars@1.24.2(graphql@16.11.0): - dependencies: - graphql: 16.11.0 - tslib: 2.8.1 - - graphql-yoga@5.16.0(graphql@16.11.0): - dependencies: - '@envelop/core': 5.3.2 - '@envelop/instrumentation': 1.0.0 - '@graphql-tools/executor': 1.4.9(graphql@16.11.0) - '@graphql-tools/schema': 10.0.25(graphql@16.11.0) - '@graphql-tools/utils': 10.9.1(graphql@16.11.0) - '@graphql-yoga/logger': 2.0.1 - '@graphql-yoga/subscription': 5.0.5 - '@whatwg-node/fetch': 0.10.11 - '@whatwg-node/promise-helpers': 1.3.2 - '@whatwg-node/server': 0.10.13 - dset: 3.1.4 - graphql: 16.11.0 - lru-cache: 10.4.3 - tslib: 2.8.1 - - graphql@16.11.0: {} - - groq-sdk@0.5.0: - dependencies: - '@types/node': 18.19.130 - '@types/node-fetch': 2.6.13 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - web-streams-polyfill: 3.3.3 - transitivePeerDependencies: - - encoding - - gtoken@6.1.2: - dependencies: - gaxios: 5.1.3 - google-p12-pem: 4.0.1 - jws: 4.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - hachure-fill@0.5.2: {} - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-bigints@1.1.0: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hast-util-from-dom@5.0.1: - dependencies: - '@types/hast': 3.0.4 - hastscript: 9.0.1 - web-namespaces: 2.0.1 - - hast-util-from-html-isomorphic@2.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-dom: 5.0.1 - hast-util-from-html: 2.0.3 - unist-util-remove-position: 5.0.0 - - hast-util-from-html@2.0.3: - dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.3.0 - vfile: 6.0.3 - vfile-message: 4.0.3 - - hast-util-from-parse5@8.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.1.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-parse-selector@2.2.5: {} - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-raw@9.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 - hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - parse5: 7.3.0 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-estree@3.1.3: - dependencies: - '@types/estree': 1.0.8 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.18 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-to-jsx-runtime@2.3.6: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.18 - unist-util-position: 5.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - hast-util-to-parse5@8.0.0: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - web-namespaces: 2.0.1 - zwitch: 2.0.4 - - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - - hast-util-whitespace@2.0.1: {} - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@6.0.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.1.0 - space-separated-tokens: 2.0.2 - - help-me@5.0.0: {} - - highlight.js@10.7.3: {} - - highlightjs-vue@1.0.0: {} - - hono-openapi@0.4.8(hono@4.10.3)(openapi-types@12.1.3)(zod@3.25.76): - dependencies: - json-schema-walker: 2.0.0 - openapi-types: 12.1.3 - optionalDependencies: - hono: 4.10.3 - zod: 3.25.76 - - hono-openapi@0.4.8(hono@4.9.12)(openapi-types@12.1.3)(zod@3.25.76): - dependencies: - json-schema-walker: 2.0.0 - openapi-types: 12.1.3 - optionalDependencies: - hono: 4.9.12 - zod: 3.25.76 - - hono@4.10.3: {} - - hono@4.9.12: {} - - html-escaper@2.0.2: {} - - html-url-attributes@3.0.1: {} - - html-void-elements@3.0.0: {} - - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - human-signals@2.1.0: {} - - human-signals@4.3.1: {} - - human-signals@8.0.1: {} - - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - ibm-cloud-sdk-core@5.4.3: - dependencies: - '@types/debug': 4.1.12 - '@types/node': 18.19.130 - '@types/tough-cookie': 4.0.5 - axios: 1.12.2(debug@4.4.3) - camelcase: 6.3.0 - debug: 4.4.3 - dotenv: 16.6.1 - extend: 3.0.2 - file-type: 16.5.4 - form-data: 4.0.4 - isstream: 0.1.2 - jsonwebtoken: 9.0.2 - mime-types: 2.1.35 - retry-axios: 2.6.0(axios@1.12.2(debug@4.4.3)) - tough-cookie: 4.1.4 - transitivePeerDependencies: - - supports-color - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.7.0: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@5.3.2: {} - - ignore@7.0.5: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - import-in-the-middle@1.15.0: - dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) - cjs-module-lexer: 1.4.3 - module-details-from-path: 1.0.4 - - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - inline-style-parser@0.1.1: {} - - inline-style-parser@0.2.4: {} - - inquirer@12.10.0(@types/node@20.19.21): - dependencies: - '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@20.19.21) - '@inquirer/prompts': 7.9.0(@types/node@20.19.21) - '@inquirer/type': 3.0.9(@types/node@20.19.21) - mute-stream: 2.0.0 - run-async: 4.0.6 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 20.19.21 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - internmap@1.0.1: {} - - internmap@2.0.3: {} - - ip-regex@4.3.0: {} - - ipaddr.js@1.9.1: {} - - is-alphabetical@1.0.4: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-arrayish@0.3.4: - optional: true - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-buffer@2.0.5: {} - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.3 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-decimal@1.0.4: {} - - is-decimal@2.0.1: {} - - is-docker@3.0.0: {} - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-fullwidth-code-point@3.0.0: {} - - is-generator-fn@2.1.0: {} - - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-hexadecimal@1.0.4: {} - - is-hexadecimal@2.0.1: {} - - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@2.0.0: {} - - is-map@2.0.3: {} - - is-module@1.0.0: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-number@7.0.0: {} - - is-plain-obj@4.1.0: {} - - is-promise@4.0.0: {} - - is-reference@1.2.1: - dependencies: - '@types/estree': 1.0.8 - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-stream@2.0.1: {} - - is-stream@3.0.0: {} - - is-stream@4.0.1: {} - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-unicode-supported@1.3.0: {} - - is-unicode-supported@2.1.0: {} - - is-url@1.2.4: {} - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-wsl@3.1.0: - dependencies: - is-inside-container: 1.0.0 - - is2@2.0.9: - dependencies: - deep-is: 0.1.4 - ip-regex: 4.3.0 - is-url: 1.2.4 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - isstream@0.1.2: {} - - istanbul-lib-coverage@3.2.2: {} - - istanbul-lib-instrument@5.2.1: - dependencies: - '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - istanbul-lib-instrument@6.0.3: - dependencies: - '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.3 - transitivePeerDependencies: - - supports-color - - istanbul-lib-report@3.0.1: - dependencies: - istanbul-lib-coverage: 3.2.2 - make-dir: 4.0.0 - supports-color: 7.2.0 - - istanbul-lib-source-maps@4.0.1: - dependencies: - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - - istanbul-reports@3.2.0: - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - - jest-changed-files@29.7.0: - dependencies: - execa: 5.1.1 - jest-util: 29.7.0 - p-limit: 3.1.0 - - jest-circus@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.7.0 - is-generator-fn: 2.1.0 - jest-each: 29.7.0 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - p-limit: 3.1.0 - pretty-format: 29.7.0 - pure-rand: 6.1.0 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@29.7.0(@types/node@20.19.21): - dependencies: - '@jest/core': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.21) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.21) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jest-config@29.7.0(@types/node@20.19.21): - dependencies: - '@babel/core': 7.28.4 - '@jest/test-sequencer': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.21 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@29.7.0: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-docblock@29.7.0: - dependencies: - detect-newline: 3.1.0 - - jest-each@29.7.0: - dependencies: - '@jest/types': 29.6.3 - chalk: 4.1.2 - jest-get-type: 29.6.3 - jest-util: 29.7.0 - pretty-format: 29.7.0 - - jest-environment-node@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - jest-get-type@29.6.3: {} - - jest-haste-map@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.21 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@29.7.0: - dependencies: - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-matcher-utils@29.7.0: - dependencies: - chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 - - jest-message-util@29.7.0: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - stack-utils: 2.0.6 - - jest-mock@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - jest-util: 29.7.0 - - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - optionalDependencies: - jest-resolve: 29.7.0 - - jest-regex-util@29.6.3: {} - - jest-resolve-dependencies@29.7.0: - dependencies: - jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - jest-resolve@29.7.0: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - 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.exports: 2.0.3 - slash: 3.0.0 - - jest-runner@29.7.0: - dependencies: - '@jest/console': 29.7.0 - '@jest/environment': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - chalk: 4.1.2 - emittery: 0.13.1 - graceful-fs: 4.2.11 - jest-docblock: 29.7.0 - jest-environment-node: 29.7.0 - jest-haste-map: 29.7.0 - jest-leak-detector: 29.7.0 - jest-message-util: 29.7.0 - jest-resolve: 29.7.0 - jest-runtime: 29.7.0 - jest-util: 29.7.0 - jest-watcher: 29.7.0 - jest-worker: 29.7.0 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@29.7.0: - dependencies: - '@jest/environment': 29.7.0 - '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 - '@jest/source-map': 29.6.3 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - chalk: 4.1.2 - cjs-module-lexer: 1.4.3 - collect-v8-coverage: 1.0.2 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - - jest-snapshot@29.7.0: - dependencies: - '@babel/core': 7.28.4 - '@babel/generator': 7.28.3 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) - '@babel/types': 7.28.4 - '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) - chalk: 4.1.2 - expect: 29.7.0 - graceful-fs: 4.2.11 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - natural-compare: 1.4.0 - pretty-format: 29.7.0 - semver: 7.7.3 - transitivePeerDependencies: - - supports-color - - jest-util@29.7.0: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - - jest-validate@29.7.0: - dependencies: - '@jest/types': 29.6.3 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-watcher@29.7.0: - dependencies: - '@jest/test-result': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.19.21 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 29.7.0 - string-length: 4.0.2 - - jest-worker@29.7.0: - dependencies: - '@types/node': 20.19.21 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@29.7.0(@types/node@20.19.21): - dependencies: - '@jest/core': 29.7.0 - '@jest/types': 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.21) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - jiti@2.6.1: {} - - jose@5.10.0: {} - - joycon@3.1.1: {} - - js-base64@3.7.8: {} - - js-tiktoken@1.0.21: - dependencies: - base64-js: 1.5.1 - - js-tokens@4.0.0: {} - - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - jsesc@3.1.0: {} - - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.3.1 - - json-buffer@3.0.1: {} - - json-parse-even-better-errors@2.3.1: {} - - json-schema-to-zod@2.6.1: {} - - json-schema-traverse@0.4.1: {} - - json-schema-walker@2.0.0: - dependencies: - '@apidevtools/json-schema-ref-parser': 11.9.3 - clone: 2.1.2 - - json-schema@0.4.0: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - json5@2.2.3: {} - - jsondiffpatch@0.6.0: - dependencies: - '@types/diff-match-patch': 1.0.36 - chalk: 5.6.2 - diff-match-patch: 1.0.5 - - jsonfile@6.2.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - - jsonpointer@5.0.1: {} - - jsonschema@1.2.7: {} - - jsonwebtoken@9.0.2: - dependencies: - jws: 3.2.2 - 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.7.3 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - jwa@1.4.2: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@3.2.2: - dependencies: - jwa: 1.4.2 - safe-buffer: 5.2.1 - - jws@4.0.0: - dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 - - katex@0.16.25: - dependencies: - commander: 8.3.0 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - khroma@2.1.0: {} - - kleur@3.0.3: {} - - kleur@4.1.5: {} - - kolorist@1.8.0: {} - - langchain@0.3.36(@langchain/aws@0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))))(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(axios@1.12.2)(handlebars@4.7.8)(openai@4.104.0(ws@8.18.3)(zod@3.25.76))(ws@8.18.3): - dependencies: - '@langchain/core': 0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - '@langchain/openai': 0.6.16(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)))(ws@8.18.3) - '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) - js-tiktoken: 1.0.21 - js-yaml: 4.1.0 - jsonpointer: 5.0.1 - langsmith: 0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)) - openapi-types: 12.1.3 - p-retry: 4.6.2 - uuid: 10.0.0 - yaml: 2.8.1 - zod: 3.25.76 - optionalDependencies: - '@langchain/aws': 0.1.15(@langchain/core@0.3.78(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76))) - axios: 1.12.2(debug@4.4.3) - handlebars: 4.7.8 - transitivePeerDependencies: - - '@opentelemetry/api' - - '@opentelemetry/exporter-trace-otlp-proto' - - '@opentelemetry/sdk-trace-base' - - openai - - ws - - langium@3.3.1: - dependencies: - chevrotain: 11.0.3 - chevrotain-allstar: 0.3.1(chevrotain@11.0.3) - vscode-languageserver: 9.0.1 - vscode-languageserver-textdocument: 1.0.12 - vscode-uri: 3.0.8 - - langsmith@0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@4.104.0(ws@8.18.3)(zod@3.25.76)): - dependencies: - '@types/uuid': 10.0.0 - chalk: 4.1.2 - console-table-printer: 2.14.6 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.7.3 - uuid: 10.0.0 - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - openai: 4.104.0(ws@8.18.3)(zod@3.25.76) - - langsmith@0.3.74(@opentelemetry/api@1.9.0)(@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(openai@5.12.2(zod@3.25.76)): - dependencies: - '@types/uuid': 10.0.0 - chalk: 4.1.2 - console-table-printer: 2.14.6 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.7.3 - uuid: 10.0.0 - optionalDependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - openai: 5.12.2(ws@8.18.3)(zod@3.25.76) - - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 - - layout-base@1.0.2: {} - - layout-base@2.0.1: {} - - leven@3.1.0: {} - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - libphonenumber-js@1.12.24: {} - - libsql@0.5.22: - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - optionalDependencies: - '@libsql/darwin-arm64': 0.5.22 - '@libsql/darwin-x64': 0.5.22 - '@libsql/linux-arm-gnueabihf': 0.5.22 - '@libsql/linux-arm-musleabihf': 0.5.22 - '@libsql/linux-arm64-gnu': 0.5.22 - '@libsql/linux-arm64-musl': 0.5.22 - '@libsql/linux-x64-gnu': 0.5.22 - '@libsql/linux-x64-musl': 0.5.22 - '@libsql/win32-x64-msvc': 0.5.22 - - lightningcss-darwin-arm64@1.30.1: - optional: true - - lightningcss-darwin-x64@1.30.1: - optional: true - - lightningcss-freebsd-x64@1.30.1: - optional: true - - lightningcss-linux-arm-gnueabihf@1.30.1: - optional: true - - lightningcss-linux-arm64-gnu@1.30.1: - optional: true - - lightningcss-linux-arm64-musl@1.30.1: - optional: true - - lightningcss-linux-x64-gnu@1.30.1: - optional: true - - lightningcss-linux-x64-musl@1.30.1: - optional: true - - lightningcss-win32-arm64-msvc@1.30.1: - optional: true - - lightningcss-win32-x64-msvc@1.30.1: - optional: true - - lightningcss@1.30.1: - dependencies: - detect-libc: 2.1.2 - optionalDependencies: - lightningcss-darwin-arm64: 1.30.1 - lightningcss-darwin-x64: 1.30.1 - lightningcss-freebsd-x64: 1.30.1 - lightningcss-linux-arm-gnueabihf: 1.30.1 - lightningcss-linux-arm64-gnu: 1.30.1 - lightningcss-linux-arm64-musl: 1.30.1 - lightningcss-linux-x64-gnu: 1.30.1 - lightningcss-linux-x64-musl: 1.30.1 - lightningcss-win32-arm64-msvc: 1.30.1 - lightningcss-win32-x64-msvc: 1.30.1 - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - - lit-element@4.2.1: - dependencies: - '@lit-labs/ssr-dom-shim': 1.4.0 - '@lit/reactive-element': 2.1.1 - lit-html: 3.3.1 - - lit-html@3.3.1: - dependencies: - '@types/trusted-types': 2.0.7 - - lit@3.3.1: - dependencies: - '@lit/reactive-element': 2.1.1 - lit-element: 4.2.1 - lit-html: 3.3.1 - - load-tsconfig@0.2.5: {} - - local-pkg@1.1.2: - dependencies: - mlly: 1.8.0 - pkg-types: 2.3.0 - quansync: 0.2.11 - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash-es@4.17.21: {} - - lodash.camelcase@4.3.0: {} - - lodash.get@4.4.2: {} - - 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.memoize@4.1.2: {} - - lodash.merge@4.6.2: {} - - lodash.once@4.1.1: {} - - lodash.sortby@4.7.0: {} - - log-symbols@5.1.0: - dependencies: - chalk: 5.2.0 - is-unicode-supported: 1.3.0 - - long@5.3.2: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lowlight@1.20.0: - dependencies: - fault: 1.0.4 - highlight.js: 10.7.3 - - lru-cache@10.4.3: {} - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lucide-react@0.477.0(react@19.2.0): - dependencies: - react: 19.2.0 - - lucide-react@0.525.0(react@19.2.0): - dependencies: - react: 19.2.0 - - lucide-react@0.542.0(react@19.2.0): - dependencies: - react: 19.2.0 - - lucide@0.525.0: {} - - magic-string@0.30.19: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - make-dir@4.0.0: - dependencies: - semver: 7.7.3 - - make-error@1.3.6: {} - - makeerror@1.0.12: - dependencies: - tmpl: 1.0.5 - - markdown-extensions@2.0.0: {} - - markdown-it-ins@4.0.0: {} - - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - - markdown-table@3.0.4: {} - - marked@14.0.0: {} - - marked@16.4.1: {} - - mastra@0.15.1(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(@opentelemetry/api@1.9.0)(@types/json-schema@7.0.15)(typescript@5.9.3)(zod@3.25.76): - dependencies: - '@clack/prompts': 0.11.0 - '@expo/devcert': 1.2.0 - '@mastra/core': 0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76) - '@mastra/deployer': 0.20.2(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(typescript@5.9.3)(zod@3.25.76) - '@mastra/loggers': 0.10.15(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76)) - '@mastra/mcp': 0.13.4(@mastra/core@0.20.2(openapi-types@12.1.3)(react@19.2.0)(zod@3.25.76))(@types/json-schema@7.0.15)(zod@3.25.76) - '@opentelemetry/auto-instrumentations-node': 0.62.2(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)) - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@webcontainer/env': 1.1.1 - commander: 12.1.0 - dotenv: 16.6.1 - execa: 9.6.0 - fs-extra: 11.3.2 - get-port: 7.1.0 - open: 10.2.0 - picocolors: 1.1.1 - posthog-node: 4.18.0 - prettier: 3.6.2 - shell-quote: 1.8.3 - strip-json-comments: 5.0.3 - tcp-port-used: 1.0.2 - yocto-spinner: 0.2.3 - zod: 3.25.76 - zod-to-json-schema: 3.24.6(zod@3.25.76) - transitivePeerDependencies: - - '@opentelemetry/api' - - '@types/json-schema' - - debug - - encoding - - supports-color - - typescript - - math-intrinsics@1.1.0: {} - - mdast-util-definitions@5.1.2: - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.11 - unist-util-visit: 4.1.2 - - mdast-util-find-and-replace@3.0.2: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - mdast-util-from-markdown@1.3.1: - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.11 - decode-named-character-reference: 1.2.0 - mdast-util-to-string: 3.2.0 - micromark: 3.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-decode-string: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - unist-util-stringify-position: 3.0.3 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-autolink-literal@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.1 - - mdast-util-gfm-footnote@2.1.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-table@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-task-list-item@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.1.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-math@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - unist-util-remove-position: 5.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 - - mdast-util-to-hast@12.3.0: - dependencies: - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-definitions: 5.1.2 - micromark-util-sanitize-uri: 1.2.0 - trim-lines: 3.0.1 - unist-util-generated: 2.0.1 - unist-util-position: 4.0.4 - unist-util-visit: 4.1.2 - - mdast-util-to-hast@13.2.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@3.2.0: - dependencies: - '@types/mdast': 3.0.15 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdurl@2.0.0: {} - - media-typer@0.3.0: {} - - media-typer@1.1.0: {} - - merge-descriptors@1.0.3: {} - - merge-descriptors@2.0.0: {} - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - mermaid@11.12.1: - dependencies: - '@braintree/sanitize-url': 7.1.1 - '@iconify/utils': 3.0.2 - '@mermaid-js/parser': 0.6.3 - '@types/d3': 7.4.3 - cytoscape: 3.33.1 - cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1) - cytoscape-fcose: 2.2.0(cytoscape@3.33.1) - d3: 7.9.0 - d3-sankey: 0.12.3 - dagre-d3-es: 7.0.13 - dayjs: 1.11.18 - dompurify: 3.3.0 - katex: 0.16.25 - khroma: 2.1.0 - lodash-es: 4.17.21 - marked: 16.4.1 - roughjs: 4.6.6 - stylis: 4.3.6 - ts-dedent: 2.2.0 - uuid: 11.1.0 - transitivePeerDependencies: - - supports-color - - methods@1.1.2: {} - - micromark-core-commonmark@1.1.0: - dependencies: - decode-named-character-reference: 1.2.0 - micromark-factory-destination: 1.1.0 - micromark-factory-label: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-factory-title: 1.1.0 - micromark-factory-whitespace: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-classify-character: 1.1.0 - micromark-util-html-tag-name: 1.2.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-autolink-literal@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-footnote@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-strikethrough@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-table@2.1.1: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-tagfilter@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-gfm-task-list-item@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm@3.0.0: - dependencies: - micromark-extension-gfm-autolink-literal: 2.1.0 - micromark-extension-gfm-footnote: 2.1.0 - micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 - micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-math@3.1.0: - dependencies: - '@types/katex': 0.16.7 - devlop: 1.1.0 - katex: 0.16.25 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-expression@3.0.1: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-jsx@3.0.2: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-extension-mdx-md@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-mdxjs-esm@3.0.0: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-extension-mdxjs@3.0.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.2 - micromark-extension-mdx-md: 2.0.0 - micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-mdx-expression@2.0.3: - dependencies: - '@types/estree': 1.0.8 - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-factory-space@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-types: 1.1.0 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@1.1.0: - dependencies: - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@1.2.0: - dependencies: - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@1.1.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-types: 1.1.0 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@1.1.0: - dependencies: - decode-named-character-reference: 1.2.0 - micromark-util-character: 1.2.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-symbol: 1.1.0 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.2.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@1.1.0: {} - - micromark-util-encode@2.0.1: {} - - micromark-util-events-to-acorn@2.0.3: - dependencies: - '@types/estree': 1.0.8 - '@types/unist': 3.0.3 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-util-html-tag-name@1.2.0: {} - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@1.1.0: - dependencies: - micromark-util-symbol: 1.1.0 - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@1.1.0: - dependencies: - micromark-util-types: 1.1.0 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@1.2.0: - dependencies: - micromark-util-character: 1.2.0 - micromark-util-encode: 1.1.0 - micromark-util-symbol: 1.1.0 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@1.1.0: - dependencies: - micromark-util-chunked: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@1.1.0: {} - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@1.1.0: {} - - micromark-util-types@2.0.2: {} - - micromark@3.2.0: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.3 - decode-named-character-reference: 1.2.0 - micromark-core-commonmark: 1.1.0 - micromark-factory-space: 1.1.0 - micromark-util-character: 1.2.0 - micromark-util-chunked: 1.1.0 - micromark-util-combine-extensions: 1.1.0 - micromark-util-decode-numeric-character-reference: 1.1.0 - micromark-util-encode: 1.1.0 - micromark-util-normalize-identifier: 1.1.0 - micromark-util-resolve-all: 1.1.0 - micromark-util-sanitize-uri: 1.2.0 - micromark-util-subtokenize: 1.1.0 - micromark-util-symbol: 1.1.0 - micromark-util-types: 1.1.0 - uvu: 0.5.6 - transitivePeerDependencies: - - supports-color - - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-db@1.54.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime-types@3.0.1: - dependencies: - mime-db: 1.54.0 - - mime@1.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-fn@4.0.0: {} - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.12 - - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.2 - - minimist@1.2.8: {} - - minipass@7.1.2: {} - - minizlib@3.1.0: - dependencies: - minipass: 7.1.2 - - mlly@1.8.0: - dependencies: - acorn: 8.15.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.1 - - mnemonist@0.38.3: - dependencies: - obliterator: 1.6.1 - - module-details-from-path@1.0.4: {} - - monaco-editor@0.54.0: - dependencies: - dompurify: 3.1.7 - marked: 14.0.0 - - mri@1.2.0: {} - - ms@2.0.0: {} - - ms@2.1.2: {} - - ms@2.1.3: {} - - mustache@4.2.0: {} - - mute-stream@2.0.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.11: {} - - napi-postinstall@0.3.4: {} - - natural-compare@1.4.0: {} - - negotiator@0.6.3: {} - - negotiator@1.0.0: {} - - neo-async@2.6.2: {} - - next-themes@0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): - dependencies: - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - - next@15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.56.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): - dependencies: - '@next/env': 15.2.1 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001750 - postcss: 8.4.31 - react: 19.2.0 - react-dom: 19.2.0(react@19.2.0) - styled-jsx: 5.1.6(react@19.2.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.1 - '@next/swc-darwin-x64': 15.2.1 - '@next/swc-linux-arm64-gnu': 15.2.1 - '@next/swc-linux-arm64-musl': 15.2.1 - '@next/swc-linux-x64-gnu': 15.2.1 - '@next/swc-linux-x64-musl': 15.2.1 - '@next/swc-win32-arm64-msvc': 15.2.1 - '@next/swc-win32-x64-msvc': 15.2.1 - '@opentelemetry/api': 1.9.0 - '@playwright/test': 1.56.0 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - nice-grpc-client-middleware-retry@3.1.12: - dependencies: - abort-controller-x: 0.4.3 - nice-grpc-common: 2.0.2 - - nice-grpc-common@2.0.2: - dependencies: - ts-error: 1.0.6 - - nice-grpc@2.1.13: - dependencies: - '@grpc/grpc-js': 1.14.0 - abort-controller-x: 0.4.3 - nice-grpc-common: 2.0.2 - - node-domexception@1.0.0: {} - - node-fetch-native@1.6.7: {} - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - - node-forge@1.3.1: {} - - node-int64@0.4.0: {} - - node-releases@2.0.23: {} - - normalize-path@3.0.0: {} - - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - - npm-run-path@6.0.0: - dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 - - nypm@0.6.2: - dependencies: - citty: 0.1.6 - consola: 3.4.2 - pathe: 2.0.3 - pkg-types: 2.3.0 - tinyexec: 1.0.1 - - object-assign@4.1.1: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - obliterator@1.6.1: {} - - on-exit-leak-free@2.1.2: {} - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - oniguruma-parser@0.12.1: {} - - oniguruma-to-es@4.3.3: - dependencies: - oniguruma-parser: 0.12.1 - regex: 6.0.1 - regex-recursion: 6.0.2 - - open@10.2.0: - dependencies: - default-browser: 5.2.1 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - wsl-utils: 0.1.0 - - openai@4.104.0(ws@8.18.3)(zod@3.25.76): - dependencies: - '@types/node': 18.19.130 - '@types/node-fetch': 2.6.13 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - optionalDependencies: - ws: 8.18.3 - zod: 3.25.76 - transitivePeerDependencies: - - encoding - - openai@5.12.2(ws@8.18.3)(zod@3.25.76): - optionalDependencies: - ws: 8.18.3 - zod: 3.25.76 - - openapi-types@12.1.3: {} - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - ora@6.3.1: - dependencies: - chalk: 5.2.0 - cli-cursor: 4.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 1.3.0 - log-symbols: 5.1.0 - stdin-discarder: 0.1.0 - strip-ansi: 7.1.2 - wcwidth: 1.0.1 - - orderedmap@2.1.1: {} - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-finally@1.0.0: {} - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - p-map@7.0.3: {} - - p-queue@6.6.2: - dependencies: - eventemitter3: 4.0.7 - p-timeout: 3.2.0 - - p-retry@4.6.2: - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - - p-timeout@3.2.0: - dependencies: - p-finally: 1.0.0 - - p-try@2.2.0: {} - - package-json-from-dist@1.0.1: {} - - package-manager-detector@1.5.0: {} - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.2.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-ms@4.0.0: {} - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: {} - - partial-json@0.1.7: {} - - path-data-parser@0.1.0: {} - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-key@4.0.0: {} - - path-parse@1.0.7: {} - - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-to-regexp@0.1.12: {} - - path-to-regexp@8.3.0: {} - - pathe@2.0.3: {} - - peek-readable@4.1.0: {} - - pg-cloudflare@1.2.7: - optional: true - - pg-connection-string@2.9.1: {} - - pg-int8@1.0.1: {} - - pg-pool@3.10.1(pg@8.16.3): - dependencies: - pg: 8.16.3 - - pg-protocol@1.10.3: {} - - pg-types@2.2.0: - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.0 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - - pg@8.16.3: - dependencies: - pg-connection-string: 2.9.1 - pg-pool: 3.10.1(pg@8.16.3) - pg-protocol: 1.10.3 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.2.7 - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.3: {} - - pino-abstract-transport@2.0.0: - dependencies: - split2: 4.2.0 - - pino-pretty@11.3.0: - dependencies: - colorette: 2.0.20 - dateformat: 4.6.3 - fast-copy: 3.0.2 - fast-safe-stringify: 2.1.1 - help-me: 5.0.0 - joycon: 3.1.1 - minimist: 1.2.8 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pump: 3.0.3 - readable-stream: 4.7.0 - secure-json-parse: 2.7.0 - sonic-boom: 4.2.0 - strip-json-comments: 3.1.1 - - pino-pretty@13.1.2: - dependencies: - colorette: 2.0.20 - dateformat: 4.6.3 - fast-copy: 3.0.2 - fast-safe-stringify: 2.1.1 - help-me: 5.0.0 - joycon: 3.1.1 - minimist: 1.2.8 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pump: 3.0.3 - secure-json-parse: 4.1.0 - sonic-boom: 4.2.0 - strip-json-comments: 5.0.3 - - pino-std-serializers@7.0.0: {} - - pino@9.13.1: - dependencies: - atomic-sleep: 1.0.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 2.0.0 - pino-std-serializers: 7.0.0 - process-warning: 5.0.0 - quick-format-unescaped: 4.0.4 - real-require: 0.2.0 - safe-stable-stringify: 2.5.0 - slow-redact: 0.3.2 - sonic-boom: 4.2.0 - thread-stream: 3.1.0 - - pirates@4.0.7: {} - - pkce-challenge@5.0.0: {} - - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.8.0 - pathe: 2.0.3 - - pkg-types@2.3.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.7 - pathe: 2.0.3 - - playwright-core@1.56.0: {} - - playwright@1.56.0: - dependencies: - playwright-core: 1.56.0 - optionalDependencies: - fsevents: 2.3.2 - - points-on-curve@0.2.0: {} - - points-on-path@0.2.1: - dependencies: - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - - possible-typed-array-names@1.1.0: {} - - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.6.1 - postcss: 8.5.6 - tsx: 4.20.6 - yaml: 2.8.1 - - postcss-selector-parser@6.0.10: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss@8.4.31: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postcss@8.5.6: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - postgres-array@2.0.0: {} - - postgres-bytea@1.0.0: {} - - postgres-date@1.0.7: {} - - postgres-interval@1.2.0: - dependencies: - xtend: 4.0.2 - - postgres@3.4.7: {} - - posthog-node@4.18.0: - dependencies: - axios: 1.12.2(debug@4.4.3) - transitivePeerDependencies: - - debug - - prelude-ls@1.2.1: {} - - prettier@3.6.2: {} - - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - - pretty-ms@9.3.0: - dependencies: - parse-ms: 4.0.0 - - prismjs@1.27.0: {} - - prismjs@1.30.0: {} - - process-warning@5.0.0: {} - - process@0.11.10: {} - - promise-limit@2.7.0: {} - - prompts@2.4.2: - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - property-information@5.6.0: - dependencies: - xtend: 4.0.2 - - property-information@6.5.0: {} - - property-information@7.1.0: {} - - prosemirror-changeset@2.3.1: - dependencies: - prosemirror-transform: 1.10.4 - - prosemirror-collab@1.3.1: - dependencies: - prosemirror-state: 1.4.3 - - prosemirror-commands@1.7.1: - dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - - prosemirror-dropcursor@1.8.2: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 - - prosemirror-gapcursor@1.3.2: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-view: 1.41.3 - - prosemirror-history@1.4.1: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 - rope-sequence: 1.3.4 - - prosemirror-inputrules@1.5.0: - dependencies: - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - - prosemirror-keymap@1.2.3: - dependencies: - prosemirror-state: 1.4.3 - w3c-keyname: 2.2.8 - - prosemirror-markdown@1.13.2: - dependencies: - '@types/markdown-it': 14.1.2 - markdown-it: 14.1.0 - prosemirror-model: 1.25.3 - - prosemirror-menu@1.2.5: - dependencies: - crelt: 1.0.6 - prosemirror-commands: 1.7.1 - prosemirror-history: 1.4.1 - prosemirror-state: 1.4.3 - - prosemirror-model@1.25.3: - dependencies: - orderedmap: 2.1.1 - - prosemirror-schema-basic@1.2.4: - dependencies: - prosemirror-model: 1.25.3 - - prosemirror-schema-list@1.5.1: - dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - - prosemirror-state@1.4.3: - dependencies: - prosemirror-model: 1.25.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 - - prosemirror-tables@1.8.1: - dependencies: - prosemirror-keymap: 1.2.3 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - prosemirror-view: 1.41.3 - - prosemirror-trailing-node@3.0.0(prosemirror-model@1.25.3)(prosemirror-state@1.4.3)(prosemirror-view@1.41.3): - dependencies: - '@remirror/core-constants': 3.0.0 - escape-string-regexp: 4.0.0 - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-view: 1.41.3 - - prosemirror-transform@1.10.4: - dependencies: - prosemirror-model: 1.25.3 - - prosemirror-view@1.41.3: - dependencies: - prosemirror-model: 1.25.3 - prosemirror-state: 1.4.3 - prosemirror-transform: 1.10.4 - - protobufjs@7.5.4: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 20.19.21 - long: 5.3.2 - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-from-env@1.1.0: {} - - psl@1.15.0: - dependencies: - punycode: 2.3.1 - - pump@3.0.3: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - punycode.js@2.3.1: {} - - punycode@2.3.1: {} - - pure-rand@6.1.0: {} - - qs@6.13.0: - dependencies: - side-channel: 1.1.0 - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - - quansync@0.2.11: {} - - querystringify@2.2.0: {} - - queue-microtask@1.2.3: {} - - quick-format-unescaped@4.0.4: {} - - radash@12.1.1: {} - - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - raw-body@3.0.1: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.7.0 - unpipe: 1.0.0 - - react-dom@19.2.0(react@19.2.0): - dependencies: - react: 19.2.0 - scheduler: 0.27.0 - - react-is@16.13.1: {} - - react-is@18.3.1: {} - - react-markdown@10.1.0(@types/react@19.2.2)(react@19.2.0): - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/react': 19.2.2 - devlop: 1.1.0 - hast-util-to-jsx-runtime: 2.3.6 - html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 - react: 19.2.0 - remark-parse: 11.0.0 - remark-rehype: 11.1.2 - unified: 11.0.5 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - react-markdown@8.0.7(@types/react@19.2.2)(react@19.2.0): - dependencies: - '@types/hast': 2.3.10 - '@types/prop-types': 15.7.15 - '@types/react': 19.2.2 - '@types/unist': 2.0.11 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 2.0.1 - prop-types: 15.8.1 - property-information: 6.5.0 - react: 19.2.0 - react-is: 18.3.1 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - space-separated-tokens: 2.0.2 - style-to-object: 0.4.4 - unified: 10.1.2 - unist-util-visit: 4.1.2 - vfile: 5.3.7 - transitivePeerDependencies: - - supports-color - - react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0): - dependencies: - react: 19.2.0 - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 - - react-remove-scroll@2.7.1(@types/react@19.2.2)(react@19.2.0): - dependencies: - react: 19.2.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.2)(react@19.2.0) - react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.2.0) - use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.2.0) - optionalDependencies: - '@types/react': 19.2.2 - - react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.2.0): - dependencies: - get-nonce: 1.0.1 - react: 19.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 - - react-syntax-highlighter@15.6.6(react@19.2.0): - dependencies: - '@babel/runtime': 7.28.4 - highlight.js: 10.7.3 - highlightjs-vue: 1.0.0 - lowlight: 1.20.0 - prismjs: 1.30.0 - react: 19.2.0 - refractor: 3.6.0 - - react@19.2.0: {} - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - 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 - - readable-web-to-node-stream@3.0.4: - dependencies: - readable-stream: 4.7.0 - - readdirp@4.1.2: {} - - real-require@0.2.0: {} - - recma-build-jsx@1.0.0: - dependencies: - '@types/estree': 1.0.8 - estree-util-build-jsx: 3.0.1 - vfile: 6.0.3 - - recma-jsx@1.0.1(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - estree-util-to-js: 2.0.0 - recma-parse: 1.0.0 - recma-stringify: 1.0.0 - unified: 11.0.5 - - recma-parse@1.0.0: - dependencies: - '@types/estree': 1.0.8 - esast-util-from-js: 2.0.1 - unified: 11.0.5 - vfile: 6.0.3 - - recma-stringify@1.0.0: - dependencies: - '@types/estree': 1.0.8 - estree-util-to-js: 2.0.0 - unified: 11.0.5 - vfile: 6.0.3 - - redis@5.8.3: - dependencies: - '@redis/bloom': 5.8.3(@redis/client@5.8.3) - '@redis/client': 5.8.3 - '@redis/json': 5.8.3(@redis/client@5.8.3) - '@redis/search': 5.8.3(@redis/client@5.8.3) - '@redis/time-series': 5.8.3(@redis/client@5.8.3) - - reflect-metadata@0.2.2: {} - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - refractor@3.6.0: - dependencies: - hastscript: 6.0.0 - parse-entities: 2.0.0 - prismjs: 1.27.0 - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.0.1: - dependencies: - regex-utilities: 2.3.0 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - rehype-harden@1.1.5: {} - - rehype-katex@7.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/katex': 0.16.7 - hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.2 - katex: 0.16.25 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - - rehype-raw@7.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 - vfile: 6.0.3 - - rehype-recma@1.0.0: - dependencies: - '@types/estree': 1.0.8 - '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.3 - transitivePeerDependencies: - - supports-color - - remark-gfm@4.0.1: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 - micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-math@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-math: 3.0.0 - micromark-extension-math: 3.1.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-mdx@3.1.1: - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - - remark-parse@10.0.2: - dependencies: - '@types/mdast': 3.0.15 - mdast-util-from-markdown: 1.3.1 - unified: 10.1.2 - transitivePeerDependencies: - - supports-color - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@10.1.0: - dependencies: - '@types/hast': 2.3.10 - '@types/mdast': 3.0.15 - mdast-util-to-hast: 12.3.0 - unified: 10.1.2 - - remark-rehype@11.1.2: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 - unified: 11.0.5 - vfile: 6.0.3 - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 - unified: 11.0.5 - - require-directory@2.1.1: {} - - require-in-the-middle@7.5.2: - dependencies: - debug: 4.4.3 - module-details-from-path: 1.0.4 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - requires-port@1.0.0: {} - - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - - resolve-from@4.0.0: {} - - resolve-from@5.0.0: {} - - resolve-pkg-maps@1.0.0: {} - - resolve.exports@2.0.3: {} - - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retry-axios@2.6.0(axios@1.12.2(debug@4.4.3)): - dependencies: - axios: 1.12.2(debug@4.4.3) - - retry@0.13.1: {} - - reusify@1.1.0: {} - - robust-predicates@3.0.2: {} - - rollup-plugin-esbuild@6.2.1(esbuild@0.25.10)(rollup@4.50.2): - dependencies: - debug: 4.4.3 - es-module-lexer: 1.7.0 - esbuild: 0.25.10 - get-tsconfig: 4.12.0 - rollup: 4.50.2 - unplugin-utils: 0.2.5 - transitivePeerDependencies: - - supports-color - - rollup-plugin-node-externals@8.1.1(rollup@4.50.2): - dependencies: - rollup: 4.50.2 - - rollup@4.50.2: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.50.2 - '@rollup/rollup-android-arm64': 4.50.2 - '@rollup/rollup-darwin-arm64': 4.50.2 - '@rollup/rollup-darwin-x64': 4.50.2 - '@rollup/rollup-freebsd-arm64': 4.50.2 - '@rollup/rollup-freebsd-x64': 4.50.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.50.2 - '@rollup/rollup-linux-arm-musleabihf': 4.50.2 - '@rollup/rollup-linux-arm64-gnu': 4.50.2 - '@rollup/rollup-linux-arm64-musl': 4.50.2 - '@rollup/rollup-linux-loong64-gnu': 4.50.2 - '@rollup/rollup-linux-ppc64-gnu': 4.50.2 - '@rollup/rollup-linux-riscv64-gnu': 4.50.2 - '@rollup/rollup-linux-riscv64-musl': 4.50.2 - '@rollup/rollup-linux-s390x-gnu': 4.50.2 - '@rollup/rollup-linux-x64-gnu': 4.50.2 - '@rollup/rollup-linux-x64-musl': 4.50.2 - '@rollup/rollup-openharmony-arm64': 4.50.2 - '@rollup/rollup-win32-arm64-msvc': 4.50.2 - '@rollup/rollup-win32-ia32-msvc': 4.50.2 - '@rollup/rollup-win32-x64-msvc': 4.50.2 - fsevents: 2.3.3 - - rollup@4.52.4: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.4 - '@rollup/rollup-android-arm64': 4.52.4 - '@rollup/rollup-darwin-arm64': 4.52.4 - '@rollup/rollup-darwin-x64': 4.52.4 - '@rollup/rollup-freebsd-arm64': 4.52.4 - '@rollup/rollup-freebsd-x64': 4.52.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.4 - '@rollup/rollup-linux-arm-musleabihf': 4.52.4 - '@rollup/rollup-linux-arm64-gnu': 4.52.4 - '@rollup/rollup-linux-arm64-musl': 4.52.4 - '@rollup/rollup-linux-loong64-gnu': 4.52.4 - '@rollup/rollup-linux-ppc64-gnu': 4.52.4 - '@rollup/rollup-linux-riscv64-gnu': 4.52.4 - '@rollup/rollup-linux-riscv64-musl': 4.52.4 - '@rollup/rollup-linux-s390x-gnu': 4.52.4 - '@rollup/rollup-linux-x64-gnu': 4.52.4 - '@rollup/rollup-linux-x64-musl': 4.52.4 - '@rollup/rollup-openharmony-arm64': 4.52.4 - '@rollup/rollup-win32-arm64-msvc': 4.52.4 - '@rollup/rollup-win32-ia32-msvc': 4.52.4 - '@rollup/rollup-win32-x64-gnu': 4.52.4 - '@rollup/rollup-win32-x64-msvc': 4.52.4 - fsevents: 2.3.3 - - rope-sequence@1.3.4: {} - - roughjs@4.6.6: - dependencies: - hachure-fill: 0.5.2 - path-data-parser: 0.1.0 - points-on-curve: 0.2.0 - points-on-path: 0.2.1 - - router@2.2.0: - dependencies: - debug: 4.4.3 - depd: 2.0.0 - is-promise: 4.0.0 - parseurl: 1.3.3 - path-to-regexp: 8.3.0 - transitivePeerDependencies: - - supports-color - - run-applescript@7.1.0: {} - - run-async@4.0.6: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rw@1.3.3: {} - - rxjs@7.8.1: - dependencies: - tslib: 2.8.1 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - sade@1.8.1: - dependencies: - mri: 1.2.0 - - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@2.5.0: {} - - safer-buffer@2.1.2: {} - - scheduler@0.27.0: {} - - secure-json-parse@2.7.0: {} - - secure-json-parse@4.1.0: {} - - semver@6.3.1: {} - - semver@7.7.3: {} - - send@0.19.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - - send@1.2.0: - dependencies: - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 2.0.0 - http-errors: 2.0.0 - mime-types: 3.0.1 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - serve-static@1.16.2: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.0 - transitivePeerDependencies: - - supports-color - - serve-static@2.2.0: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 1.2.0 - transitivePeerDependencies: - - supports-color - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - setprototypeof@1.2.0: {} - - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - semver: 7.7.3 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - optional: true - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shell-quote@1.8.3: {} - - shiki@3.14.0: - dependencies: - '@shikijs/core': 3.14.0 - '@shikijs/engine-javascript': 3.14.0 - '@shikijs/engine-oniguruma': 3.14.0 - '@shikijs/langs': 3.14.0 - '@shikijs/themes': 3.14.0 - '@shikijs/types': 3.14.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - sift@17.1.3: {} - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - optional: true - - simple-wcswidth@1.1.2: {} - - sisteransi@1.0.5: {} - - slash@3.0.0: {} - - slow-redact@0.3.2: {} - - sonic-boom@4.2.0: - dependencies: - atomic-sleep: 1.0.0 - - source-map-js@1.2.1: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - - source-map@0.6.1: {} - - source-map@0.7.6: {} - - source-map@0.8.0-beta.0: - dependencies: - whatwg-url: 7.1.0 - - space-separated-tokens@1.1.5: {} - - space-separated-tokens@2.0.2: {} - - split2@4.2.0: {} - - sprintf-js@1.0.3: {} - - stable-hash@0.0.5: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - state-local@1.0.7: {} - - statuses@2.0.1: {} - - statuses@2.0.2: {} - - stdin-discarder@0.1.0: - dependencies: - bl: 5.1.0 - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - streamdown@1.4.0(@types/react@19.2.2)(react@19.2.0): - dependencies: - clsx: 2.1.1 - katex: 0.16.25 - lucide-react: 0.542.0(react@19.2.0) - marked: 16.4.1 - mermaid: 11.12.1 - react: 19.2.0 - react-markdown: 10.1.0(@types/react@19.2.2)(react@19.2.0) - rehype-harden: 1.1.5 - rehype-katex: 7.0.1 - rehype-raw: 7.0.0 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - shiki: 3.14.0 - tailwind-merge: 3.3.1 - transitivePeerDependencies: - - '@types/react' - - supports-color - - streamsearch@1.1.0: {} - - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.2 - - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.1.2: - dependencies: - ansi-regex: 6.2.2 - - strip-bom@3.0.0: {} - - strip-bom@4.0.0: {} - - strip-final-newline@2.0.0: {} - - strip-final-newline@3.0.0: {} - - strip-final-newline@4.0.0: {} - - strip-json-comments@3.1.1: {} - - strip-json-comments@5.0.3: {} - - strnum@2.1.1: {} - - strtok3@6.3.0: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 4.1.0 - - style-to-js@1.1.18: - dependencies: - style-to-object: 1.0.11 - - style-to-object@0.4.4: - dependencies: - inline-style-parser: 0.1.1 - - style-to-object@1.0.11: - dependencies: - inline-style-parser: 0.2.4 - - styled-jsx@5.1.6(react@19.2.0): - dependencies: - client-only: 0.0.1 - react: 19.2.0 - - stylis@4.3.6: {} - - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - swr@2.3.6(react@19.2.0): - dependencies: - dequal: 2.0.3 - react: 19.2.0 - use-sync-external-store: 1.6.0(react@19.2.0) - - tabbable@6.2.0: {} - - tailwind-merge@3.3.1: {} - - tailwindcss-animate@1.0.7(tailwindcss@4.1.14): - dependencies: - tailwindcss: 4.1.14 - - tailwindcss@4.1.14: {} - - tapable@2.3.0: {} - - tar@7.5.1: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.2 - minizlib: 3.1.0 - yallist: 5.0.0 - - tcp-port-used@1.0.2: - dependencies: - debug: 4.3.1 - is2: 2.0.9 - transitivePeerDependencies: - - supports-color - - test-exclude@6.0.0: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - thread-stream@3.1.0: - dependencies: - real-require: 0.2.0 - - throttleit@2.1.0: {} - - tinyexec@0.3.2: {} - - tinyexec@1.0.1: {} - - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - - tippy.js@6.3.7: - dependencies: - '@popperjs/core': 2.11.8 - - tmpl@1.0.5: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - token-types@4.2.1: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - - tough-cookie@4.1.4: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 - - tr46@0.0.3: {} - - tr46@1.0.1: - dependencies: - punycode: 2.3.1 - - tree-kill@1.2.2: {} - - trim-lines@3.0.1: {} - - trough@2.2.0: {} - - ts-api-utils@2.1.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-dedent@2.2.0: {} - - ts-deepmerge@7.0.3: {} - - ts-error@1.0.6: {} - - ts-interface-checker@0.1.13: {} - - ts-jest@29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(esbuild@0.25.10)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.21))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@20.19.21) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.4 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - esbuild: 0.25.10 - jest-util: 29.7.0 - - ts-jest@29.4.5(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0)(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@20.19.21) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.28.4 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.4) - jest-util: 29.7.0 - - ts-poet@6.12.0: - dependencies: - dprint-node: 1.0.8 - - ts-proto-descriptors@2.0.0: - dependencies: - '@bufbuild/protobuf': 2.9.0 - - ts-proto@2.7.7: - dependencies: - '@bufbuild/protobuf': 2.9.0 - case-anything: 2.1.13 - ts-poet: 6.12.0 - ts-proto-descriptors: 2.0.0 - - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@2.8.1: {} - - tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(typescript@5.9.3)(yaml@2.8.1): - dependencies: - bundle-require: 5.1.0(esbuild@0.25.10) - cac: 6.7.14 - chokidar: 4.0.3 - consola: 3.4.2 - debug: 4.4.3 - esbuild: 0.25.10 - fix-dts-default-cjs-exports: 1.0.1 - joycon: 3.1.1 - picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.20.6)(yaml@2.8.1) - resolve-from: 5.0.0 - rollup: 4.52.4 - source-map: 0.8.0-beta.0 - sucrase: 3.35.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tree-kill: 1.2.2 - optionalDependencies: - postcss: 8.5.6 - typescript: 5.9.3 - transitivePeerDependencies: - - jiti - - supports-color - - tsx - - yaml - - tsx@4.20.6: - dependencies: - esbuild: 0.25.10 - get-tsconfig: 4.12.0 - optionalDependencies: - fsevents: 2.3.3 - - turbo-darwin-64@2.5.8: - optional: true - - turbo-darwin-arm64@2.5.8: - optional: true - - turbo-linux-64@2.5.8: - optional: true - - turbo-linux-arm64@2.5.8: - optional: true - - turbo-windows-64@2.5.8: - optional: true - - turbo-windows-arm64@2.5.8: - optional: true - - turbo@2.5.8: - optionalDependencies: - turbo-darwin-64: 2.5.8 - turbo-darwin-arm64: 2.5.8 - turbo-linux-64: 2.5.8 - turbo-linux-arm64: 2.5.8 - turbo-windows-64: 2.5.8 - turbo-windows-arm64: 2.5.8 - - tw-animate-css@1.4.0: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-detect@4.0.8: {} - - type-fest@0.21.3: {} - - type-fest@4.41.0: {} - - type-graphql@2.0.0-rc.1(class-validator@0.14.2)(graphql-scalars@1.24.2(graphql@16.11.0))(graphql@16.11.0): - dependencies: - '@graphql-yoga/subscription': 5.0.5 - '@types/node': 20.19.21 - '@types/semver': 7.7.1 - graphql: 16.11.0 - graphql-query-complexity: 0.12.0(graphql@16.11.0) - graphql-scalars: 1.24.2(graphql@16.11.0) - semver: 7.7.3 - tslib: 2.8.1 - optionalDependencies: - class-validator: 0.14.2 - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - type-is@2.0.1: - dependencies: - content-type: 1.0.5 - media-typer: 1.1.0 - mime-types: 3.0.1 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-paths@1.5.1(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - typescript@5.8.2: {} - - typescript@5.9.3: {} - - uc.micro@2.1.0: {} - - ufo@1.6.1: {} - - uglify-js@3.19.3: - optional: true - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - uncrypto@0.1.3: {} - - undici-types@5.26.5: {} - - undici-types@6.21.0: {} - - unicorn-magic@0.3.0: {} - - unified@10.1.2: - dependencies: - '@types/unist': 2.0.11 - bail: 2.0.2 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 5.3.7 - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-generated@2.0.1: {} - - unist-util-is@5.2.1: - dependencies: - '@types/unist': 2.0.11 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position-from-estree@2.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@4.0.4: - dependencies: - '@types/unist': 2.0.11 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - - unist-util-stringify-position@3.0.3: - dependencies: - '@types/unist': 2.0.11 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@5.1.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@4.1.2: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - universalify@0.2.0: {} - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - unplugin-utils@0.2.5: - dependencies: - pathe: 2.0.3 - picomatch: 4.0.3 - - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - - untruncate-json@0.0.1: {} - - update-browserslist-db@1.1.3(browserslist@4.26.3): - dependencies: - browserslist: 4.26.3 - escalade: 3.2.0 - picocolors: 1.1.1 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - urlpattern-polyfill@10.1.0: {} - - urql@4.2.2(@urql/core@5.2.0(graphql@16.11.0))(react@19.2.0): - dependencies: - '@urql/core': 5.2.0(graphql@16.11.0) - react: 19.2.0 - wonka: 6.3.5 - - use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.2.0): - dependencies: - react: 19.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 - - use-sidecar@1.1.3(@types/react@19.2.2)(react@19.2.0): - dependencies: - detect-node-es: 1.1.0 - react: 19.2.0 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.2 - - use-stick-to-bottom@1.1.1(react@19.2.0): - dependencies: - react: 19.2.0 - - use-sync-external-store@1.6.0(react@19.2.0): - dependencies: - react: 19.2.0 - - util-deprecate@1.0.2: {} - - utils-merge@1.0.1: {} - - uuid@10.0.0: {} - - uuid@11.1.0: {} - - uuid@9.0.1: {} - - uvu@0.5.6: - dependencies: - dequal: 2.0.3 - diff: 5.2.0 - kleur: 4.1.5 - sade: 1.8.1 - - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - - validator@13.15.15: {} - - vary@1.1.2: {} - - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - - vfile-message@3.1.4: - dependencies: - '@types/unist': 2.0.11 - unist-util-stringify-position: 3.0.3 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@5.3.7: - dependencies: - '@types/unist': 2.0.11 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - vscode-jsonrpc@8.2.0: {} - - vscode-languageserver-protocol@3.17.5: - dependencies: - vscode-jsonrpc: 8.2.0 - vscode-languageserver-types: 3.17.5 - - vscode-languageserver-textdocument@1.0.12: {} - - vscode-languageserver-types@3.17.5: {} - - vscode-languageserver@9.0.1: - dependencies: - vscode-languageserver-protocol: 3.17.5 - - vscode-uri@3.0.8: {} - - w3c-keyname@2.2.8: {} - - wait-port@1.1.0: - dependencies: - chalk: 4.1.2 - commander: 9.5.0 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - walker@1.0.8: - dependencies: - makeerror: 1.0.12 - - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - weaviate-client@3.9.0: - dependencies: - abort-controller-x: 0.4.3 - graphql: 16.11.0 - graphql-request: 6.1.0(graphql@16.11.0) - long: 5.3.2 - nice-grpc: 2.1.13 - nice-grpc-client-middleware-retry: 3.1.12 - nice-grpc-common: 2.0.2 - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - web-namespaces@2.0.1: {} - - web-streams-polyfill@3.3.3: {} - - web-streams-polyfill@4.0.0-beta.3: {} - - webidl-conversions@3.0.1: {} - - webidl-conversions@4.0.2: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - whatwg-url@7.1.0: - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wonka@6.3.5: {} - - word-wrap@1.2.5: {} - - wordwrap@1.0.0: {} - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.1.2 - - wrappy@1.0.2: {} - - write-file-atomic@4.0.2: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 3.0.7 - - ws@8.18.3: {} - - wsl-utils@0.1.0: - dependencies: - is-wsl: 3.1.0 - - xstate@5.23.0: {} - - xtend@4.0.2: {} - - xxhash-wasm@1.1.0: {} - - y18n@5.0.8: {} - - yallist@3.1.1: {} - - yallist@4.0.0: {} - - yallist@5.0.0: {} - - yaml@2.8.1: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yocto-queue@0.1.0: {} - - yocto-spinner@0.2.3: - dependencies: - yoctocolors: 2.1.2 - - yoctocolors-cjs@2.1.3: {} - - yoctocolors@2.1.2: {} - - zod-from-json-schema@0.0.5: - dependencies: - zod: 3.25.76 - - zod-from-json-schema@0.5.0: - dependencies: - zod: 4.1.12 - - zod-to-json-schema@3.24.6(zod@3.25.76): - dependencies: - zod: 3.25.76 - - zod@3.25.76: {} - - zod@4.1.12: {} - - zwitch@2.0.4: {} From 05a3ec1ad47a3907fabfad90a2c54c3d50c67bcf Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Sat, 8 Nov 2025 21:44:40 +0800 Subject: [PATCH 13/18] feature: finish claude agent sdk ts middleware --- .gitignore | 3 + .../claude-agent-sdk/IMPLEMENTATION_PLAN.md | 317 ---- .../claude-agent-sdk/python/CONFIGURATION.md | 275 ---- .../python/IMPLEMENTATION_STATUS.md | 328 ---- .../claude-agent-sdk/python/README.md | 6 +- .../claude-agent-sdk/python/TEST_SUMMARY.md | 270 ---- .../claude-agent-sdk/python/USAGE_GUIDE.md | 369 ----- .../python/examples/server/fastapi_server.py | 2 +- .../python/examples/test_client.py | 75 +- .../typescript/IMPLEMENTATION_SUMMARY.md | 239 --- .../claude-agent-sdk/typescript/README.md | 209 ++- .../typescript/__mocks__/@ag-ui/client.ts | 92 ++ .../typescript/__mocks__/@ag-ui/core.ts | 21 + .../@anthropic-ai/claude-agent-sdk.ts | 41 + .../typescript/__tests__/setup.ts | 7 + .../typescript/dist/index.d.mts | 679 ++++++++ .../typescript/dist/index.d.ts | 679 ++++++++ .../claude-agent-sdk/typescript/dist/index.js | 1395 +++++++++++++++++ .../typescript/dist/index.js.map | 1 + .../typescript/dist/index.mjs | 1340 ++++++++++++++++ .../typescript/dist/index.mjs.map | 1 + .../typescript/examples/.gitignore | 31 + .../typescript/examples/README.md | 32 +- .../typescript/examples/copilotkit/README.md | 108 +- .../typescript/examples/direct-api-example.ts | 87 + .../typescript/examples/env.example | 23 + .../typescript/examples/package.json | 14 +- .../typescript/examples/pure-sdk-example.ts | 154 ++ .../examples/pure-sdk-with-tools.ts | 164 ++ .../typescript/examples/simple-test-server.js | 158 ++ .../typescript/examples/src/server.ts | 118 +- .../typescript/examples/test-client.sh | 160 ++ .../typescript/examples/tsconfig.json | 19 + .../typescript/jest.config.js | 15 +- .../claude-agent-sdk/typescript/src/agent.ts | 232 ++- .../typescript/src/event-translator.ts | 84 +- .../typescript/src/tool-adapter.ts | 31 +- .../claude-agent-sdk/typescript/src/types.ts | 33 +- pnpm-workspace.yaml | 1 + 39 files changed, 5645 insertions(+), 2168 deletions(-) delete mode 100644 integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md delete mode 100644 integrations/claude-agent-sdk/python/CONFIGURATION.md delete mode 100644 integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md delete mode 100644 integrations/claude-agent-sdk/python/TEST_SUMMARY.md delete mode 100644 integrations/claude-agent-sdk/python/USAGE_GUIDE.md delete mode 100644 integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md create mode 100644 integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/client.ts create mode 100644 integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/core.ts create mode 100644 integrations/claude-agent-sdk/typescript/__mocks__/@anthropic-ai/claude-agent-sdk.ts create mode 100644 integrations/claude-agent-sdk/typescript/__tests__/setup.ts create mode 100644 integrations/claude-agent-sdk/typescript/dist/index.d.mts create mode 100644 integrations/claude-agent-sdk/typescript/dist/index.d.ts create mode 100644 integrations/claude-agent-sdk/typescript/dist/index.js create mode 100644 integrations/claude-agent-sdk/typescript/dist/index.js.map create mode 100644 integrations/claude-agent-sdk/typescript/dist/index.mjs create mode 100644 integrations/claude-agent-sdk/typescript/dist/index.mjs.map create mode 100644 integrations/claude-agent-sdk/typescript/examples/.gitignore create mode 100644 integrations/claude-agent-sdk/typescript/examples/direct-api-example.ts create mode 100644 integrations/claude-agent-sdk/typescript/examples/env.example create mode 100644 integrations/claude-agent-sdk/typescript/examples/pure-sdk-example.ts create mode 100644 integrations/claude-agent-sdk/typescript/examples/pure-sdk-with-tools.ts create mode 100644 integrations/claude-agent-sdk/typescript/examples/simple-test-server.js create mode 100644 integrations/claude-agent-sdk/typescript/examples/test-client.sh create mode 100644 integrations/claude-agent-sdk/typescript/examples/tsconfig.json diff --git a/.gitignore b/.gitignore index e80391eaa..b8882a2b4 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ node_modules .pnpm-store **/.poetry-cache +integrations/claude-agent-sdk/typescript/.env.local +**/pnpm-lock.yaml +pnpm-lock.yaml diff --git a/integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md b/integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md deleted file mode 100644 index fc0de1b24..000000000 --- a/integrations/claude-agent-sdk/IMPLEMENTATION_PLAN.md +++ /dev/null @@ -1,317 +0,0 @@ -# Claude Agent SDK é›†ęˆå®žēŽ°č®”åˆ’ - -## 概述 - -ęœ¬ę–‡ę”£ęčæ°äŗ† Claude Agent SDK äøŽ AG-UI Protocol é›†ęˆēš„å®žēŽ°č®”åˆ’ć€‚čÆ„é›†ęˆå°† Claude Agent SDK ēš„ę‰§č”ŒęØ”åž‹č½¬ę¢äøŗ AG-UI ę ‡å‡†äŗ‹ä»¶ęµļ¼Œę”ÆęŒå·„å…·č°ƒē”Øć€ä¼ščÆē®”ē†å’Œęµå¼å“åŗ”ć€‚ - -## é”¹ē›®ēŠ¶ę€ - -āœ… **已完成**: -- é”¹ē›®ē›®å½•ē»“ęž„åˆ›å»ŗ -- ę øåæƒē»„ä»¶å®žēŽ°ļ¼ˆClaudeAgent, EventTranslator, SessionManager, ToolAdapter) -- FastAPI ē«Æē‚¹é›†ęˆ -- ē¤ŗä¾‹ä»£ē å’Œę–‡ę”£ -- **ęµ‹čÆ•ę”†ęž¶ę­å»ŗ**(pytest.ini, conftest.py) -- **å•å…ƒęµ‹čÆ•å®žēŽ°**(72 个测试用例) -- **é›†ęˆęµ‹čÆ•å®žēŽ°**(8 äøŖé›†ęˆęµ‹čÆ•ē”Øä¾‹ļ¼‰ -- **ęµ‹čÆ•ę‰§č”ŒéŖŒčÆ**(72/72 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… -- **ēœŸå®ž API ęµ‹čÆ•ę”ÆęŒ**ļ¼ˆę”ÆęŒ ANTHROPIC_AUTH_TOKEN/BASE_URL) -- **ę‰€ęœ‰ęµ‹čÆ•äæ®å¤å®Œęˆ**(72/72 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… - -āœ… **å·²äæ®å¤**: -- āœ… SessionManager ē¼ŗå¤±č¾…åŠ©ę–¹ę³•ļ¼ˆå·²å…ØéƒØę·»åŠ ļ¼‰ -- āœ… EventTranslator Mock åÆ¹č±”ē±»åž‹ę£€ęŸ„ļ¼ˆå·²äæ®å¤ļ¼‰ -- āœ… é›†ęˆęµ‹čÆ• Mock ē­–ē•„ä¼˜åŒ–ļ¼ˆå·²äæ®å¤ļ¼‰ -- āœ… ClaudeAgent ē¼ŗå¤±ę–¹ę³•ļ¼ˆå·²ę·»åŠ ļ¼‰ -- āœ… ę¶ˆęÆå¤„ē†é€»č¾‘ä¼˜åŒ–ļ¼ˆå·²äæ®å¤ļ¼‰ - -āœ… **å·²ę ¹ę®å®žé™… API č°ƒę•“**: -- Claude SDK å®¢ęˆ·ē«Æåˆå§‹åŒ–ļ¼ˆ`claude_agent.py::_get_claude_client()`) -- Claude SDK č°ƒē”Øę–¹ę³•ļ¼ˆ`claude_agent.py::_call_claude_sdk()`) -- å·„å…·ę ¼å¼č½¬ę¢ļ¼ˆ`tool_adapter.py`)- ęµ‹čÆ•å…ØéƒØé€ščæ‡ -- äŗ‹ä»¶č½¬ę¢é€»č¾‘ļ¼ˆ`event_translator.py`)- ę øåæƒåŠŸčƒ½é€ščæ‡ - -## é”¹ē›®ē»“ęž„ - -``` -integrations/claude-agent-sdk/ -ā”œā”€ā”€ python/ -│ ā”œā”€ā”€ src/ -│ │ └── ag_ui_claude/ -│ │ ā”œā”€ā”€ __init__.py -│ │ ā”œā”€ā”€ claude_agent.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“ SDK č°ƒē”Øļ¼‰ -│ │ ā”œā”€ā”€ event_translator.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“å“åŗ”ę ¼å¼ļ¼‰ -│ │ ā”œā”€ā”€ session_manager.py āœ… 已完成 -│ │ ā”œā”€ā”€ tool_adapter.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“å·„å…·ę ¼å¼ļ¼‰ -│ │ ā”œā”€ā”€ endpoint.py āœ… 已完成 -│ │ ā”œā”€ā”€ execution_state.py āœ… 已完成 -│ │ └── utils/ -│ │ ā”œā”€ā”€ __init__.py -│ │ └── converters.py āœ… å·²å®Œęˆļ¼ˆéœ€č°ƒę•“ę¶ˆęÆę ¼å¼ļ¼‰ -│ ā”œā”€ā”€ examples/ -│ │ ā”œā”€ā”€ pyproject.toml -│ │ ā”œā”€ā”€ README.md -│ │ └── server/ -│ │ └── fastapi_server.py āœ… 已完成 -│ ā”œā”€ā”€ tests/ āœ… 已完成(72 个测试用例) -│ │ ā”œā”€ā”€ __init__.py -│ │ ā”œā”€ā”€ conftest.py āœ… ęµ‹čÆ•č¾…åŠ©ęØ”å— -│ │ ā”œā”€ā”€ test_claude_agent.py āœ… 17 äøŖē”Øä¾‹ļ¼Œ17 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_event_translator.py āœ… 14 äøŖē”Øä¾‹ļ¼Œ14 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_session_manager.py āœ… 16 äøŖē”Øä¾‹ļ¼Œ16 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_tool_adapter.py āœ… 9 äøŖē”Øä¾‹ļ¼Œ9 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_endpoint.py āœ… 6 äøŖē”Øä¾‹ļ¼Œ6 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_integration_basic.py āœ… 3 äøŖē”Øä¾‹ļ¼Œ3 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_integration_tools.py āœ… 2 äøŖē”Øä¾‹ļ¼Œ2 é€ščæ‡ āœ… -│ │ ā”œā”€ā”€ test_integration_sessions.py āœ… 3 äøŖē”Øä¾‹ļ¼Œ3 é€ščæ‡ āœ… -│ │ └── test_real_api.py āœ… 2 äøŖē”Øä¾‹ļ¼Œ2 é€ščæ‡ āœ…ļ¼ˆę”ÆęŒ AUTH_TOKEN/BASE_URL) -│ ā”œā”€ā”€ pytest.ini āœ… pytest é…ē½® -│ ā”œā”€ā”€ pyproject.toml āœ… 已完成 -│ ā”œā”€ā”€ README.md āœ… 已完成 -│ ā”œā”€ā”€ ARCHITECTURE.md āœ… 已完成 -│ ā”œā”€ā”€ CONFIGURATION.md āœ… 已完成 -│ └── IMPLEMENTATION_STATUS.md āœ… 已曓新 -└── IMPLEMENTATION_PLAN.md āœ… ęœ¬ę–‡ę”£ -``` - -## å…³é”®å®žēŽ°č¦ē‚¹ - -### 1. ClaudeAgent 主类 - -**ä½ē½®**: `src/ag_ui_claude/claude_agent.py` - -**已完成功能**: -- āœ… åˆå§‹åŒ–é…ē½® -- āœ… `run()` ę–¹ę³•å®žēŽ° -- āœ… ę¶ˆęÆč·Æē”±å’Œå¤„ē† -- āœ… ä¼ščÆē®”ē†é›†ęˆ -- āœ… åŽå°ę‰§č”Œå’Œäŗ‹ä»¶é˜Ÿåˆ—ē®”ē† -- āœ… 错误处理 -- āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š17/17(100%ļ¼‰āœ… - -### 2. EventTranslator - -**ä½ē½®**: `src/ag_ui_claude/event_translator.py` - -**已完成功能**: -- āœ… åŸŗē”€äŗ‹ä»¶č½¬ę¢ę”†ęž¶ -- āœ… ęµå¼ę–‡ęœ¬å¤„ē†é€»č¾‘ -- āœ… å·„å…·č°ƒē”Øč½¬ę¢ę”†ęž¶ -- āœ… ēŠ¶ę€č½¬ę¢ę”ÆęŒ -- āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š14/14(100%ļ¼‰āœ… - -### 3. SessionManager - -**ä½ē½®**: `src/ag_ui_claude/session_manager.py` - -**ēŠ¶ę€**: āœ… 已完成 - -**功能**: -- ä¼ščÆē”Ÿå‘½å‘ØęœŸē®”ē† āœ… -- ę¶ˆęÆåŽ»é‡č·ŸčøŖ āœ… -- ēŠ¶ę€ē®”ē† āœ…ļ¼ˆå®Œę•“åŠŸčƒ½ļ¼‰ -- č‡ŖåŠØęø…ē†ęœŗåˆ¶ āœ… -- č¾…åŠ©ę–¹ę³• āœ…ļ¼ˆå…ØéƒØę·»åŠ ļ¼‰ -- ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š16/16(100%ļ¼‰āœ… - -### 4. ToolAdapter - -**ä½ē½®**: `src/ag_ui_claude/tool_adapter.py` - -**已完成功能**: -- āœ… AG-UI Tool 到 Claude SDK ę ¼å¼č½¬ę¢ę”†ęž¶ -- āœ… å·„å…·č°ƒē”Øęå–ę–¹ę³• -- āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š9/9(100%ļ¼‰āœ… - -**ēŠ¶ę€**: āœ… å·²å®Œęˆļ¼Œęµ‹čÆ•å…ØéƒØé€ščæ‡ - -### 5. Converters - -**ä½ē½®**: `src/ag_ui_claude/utils/converters.py` - -**已完成功能**: -- āœ… AG-UI 消息到 Claude ę ¼å¼č½¬ę¢ę”†ęž¶ -- āœ… Claude 消息到 AG-UI ę ¼å¼č½¬ę¢ę”†ęž¶ -- āœ… ēŠ¶ę€č½¬ę¢ę”ÆęŒ - -**éœ€č¦č°ƒę•“**: -- āš ļø `convert_ag_ui_messages_to_claude()`: ę ¹ę®å®žé™…ę¶ˆęÆę ¼å¼č°ƒę•“ -- āš ļø `convert_claude_message_to_ag_ui()`: ę ¹ę®å®žé™…å“åŗ”ę ¼å¼č°ƒę•“ - -## äø‹äø€ę­„č”ŒåŠØ - -### āœ… 1. 甮认 Claude Agent SDK API - 已完成 - -å‚č€ƒę–‡ę”£: https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient - -已甮认: -- āœ… SDK 包名: `claude-agent-sdk` -- āœ… å®¢ęˆ·ē«Æåˆå§‹åŒ–: `ClaudeSDKClient(options=ClaudeAgentOptions())` ꈖ `query()` 函数 -- āœ… ä¼ščÆē®”ē†: `ClaudeSDKClient` ē”ØäŗŽęŒä¹…ä¼ščÆļ¼Œ`query()` ē”ØäŗŽę— ēŠ¶ę€ęØ”å¼ -- āœ… ę¶ˆęÆę ¼å¼: `Message` ē±»åž‹ļ¼ˆ`AssistantMessage`, `UserMessage`, `SystemMessage`, `ResultMessage`) -- āœ… å†…å®¹å—ę ¼å¼: `ContentBlock` ē±»åž‹ļ¼ˆ`TextBlock`, `ToolUseBlock`, `ToolResultBlock`, `ThinkingBlock`) -- āœ… å·„å…·å®šä¹‰ę ¼å¼: `SdkMcpTool` 和 `create_sdk_mcp_server()` -- āœ… ęµå¼å“åŗ”: `client.receive_response()` ꈖ `query()` čæ”å›ž `AsyncIterator[Message]` -- āœ… å·„å…·č°ƒē”Øę ¼å¼: `ToolUseBlock` (id, name, input) -- āœ… å·„å…·ē»“ęžœę ¼å¼: `ToolResultBlock` (tool_use_id, content, is_error) - -### āœ… 2. č°ƒę•“å®žēŽ°ä»£ē  - 已完成 - -已曓新仄下文件: - -1. **claude_agent.py**: āœ… - - āœ… å®žēŽ° `_get_claude_client()` ę–¹ę³•ļ¼ˆę”ÆęŒęŒä¹…ä¼ščÆå’Œę— ēŠ¶ę€ęØ”å¼ļ¼‰ - - āœ… å®žēŽ° `_call_claude_sdk()` ę–¹ę³•ļ¼ˆå¤„ē†äø¤ē§ęØ”å¼ļ¼‰ - - āœ… å®žēŽ° `_extract_user_prompt()` ę–¹ę³•ļ¼ˆęå–ē”Øęˆ·ęē¤ŗļ¼‰ - - āœ… å®žēŽ° `_prepare_request_options()` ę–¹ę³•ļ¼ˆåŠØę€å·„å…·é…ē½®ļ¼‰ - - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š11/17(65%) - -2. **event_translator.py**: āœ… - - āœ… å®žēŽ° `translate_claude_message()` ę–¹ę³•ļ¼ˆå¤„ē† Message ē±»åž‹ļ¼‰ - - āœ… å®žēŽ° `_translate_assistant_message()` ę–¹ę³•ļ¼ˆå¤„ē†å†…å®¹å—ļ¼‰ - - āœ… å®žēŽ° `_translate_text_block()` ę–¹ę³•ļ¼ˆęµå¼ę–‡ęœ¬å¤„ē†ļ¼‰ - - āœ… å®žēŽ° `_translate_tool_use_block()` ę–¹ę³•ļ¼ˆå·„å…·č°ƒē”Øč½¬ę¢ļ¼‰ - - āœ… å®žēŽ° `_translate_tool_result_block()` ę–¹ę³•ļ¼ˆå·„å…·ē»“ęžœč½¬ę¢ļ¼‰ - - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š8/14(57%ļ¼‰ļ¼Œéœ€č¦äæ®å¤ Mock ē±»åž‹ę£€ęŸ„ - -3. **tool_adapter.py**: āœ… - - āœ… ę›“ę–°å·„å…·ę ¼å¼č½¬ę¢ļ¼ˆAG-UI Tool → SdkMcpTool) - - āœ… å®žēŽ° `create_mcp_server_for_tools()` 方法 - - āœ… ę›“ę–°å·„å…·č°ƒē”Øęå–ę–¹ę³•ļ¼ˆåŸŗäŗŽ ToolUseBlock) - - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š9/9(100%) - -4. **session_manager.py**: āœ… - - āœ… åŸŗē”€ä¼ščÆē®”ē†åŠŸčƒ½å®Œę•“ - - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š8/16(50%ļ¼‰ļ¼Œéœ€č¦ę·»åŠ č¾…åŠ©ę–¹ę³• - -5. **utils/converters.py**: āœ… - - āœ… å·²å®žēŽ°åŸŗē”€ę¶ˆęÆč½¬ę¢ę”†ęž¶ - -### āœ… 3. å®žēŽ°ęµ‹čÆ• - 已完成 - -āœ… å·²åˆ›å»ŗęµ‹čÆ•ę–‡ä»¶: -- `tests/test_claude_agent.py`: Agent ę‰§č”ŒęµēØ‹ęµ‹čÆ•ļ¼ˆ17 äøŖē”Øä¾‹ļ¼Œ17/17 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_event_translator.py`: äŗ‹ä»¶č½¬ę¢ęµ‹čÆ•ļ¼ˆ14 äøŖē”Øä¾‹ļ¼Œ14/14 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_session_manager.py`: ä¼ščÆē®”ē†ęµ‹čÆ•ļ¼ˆ16 äøŖē”Øä¾‹ļ¼Œ16/16 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_tool_adapter.py`: å·„å…·é€‚é…ęµ‹čÆ•ļ¼ˆ9 äøŖē”Øä¾‹ļ¼Œ9/9 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_endpoint.py`: FastAPI ē«Æē‚¹ęµ‹čÆ•ļ¼ˆ6 äøŖē”Øä¾‹ļ¼Œ6/6 é€ščæ‡ āœ…ļ¼‰ - -### āœ… 4. é›†ęˆęµ‹čÆ• - 已完成 - -āœ… å·²åˆ›å»ŗé›†ęˆęµ‹čÆ•ę–‡ä»¶: -- `tests/test_integration_basic.py`: åŸŗęœ¬åÆ¹čÆęµēØ‹ęµ‹čÆ•ļ¼ˆ3 äøŖē”Øä¾‹ļ¼Œ3/3 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_integration_tools.py`: å·„å…·č°ƒē”Øęµ‹čÆ•ļ¼ˆ2 äøŖē”Øä¾‹ļ¼Œ2/2 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_integration_sessions.py`: ä¼ščÆē®”ē†ęµ‹čÆ•ļ¼ˆ3 äøŖē”Øä¾‹ļ¼Œ3/3 é€ščæ‡ āœ…ļ¼‰ -- `tests/test_real_api.py`: ēœŸå®ž API ęµ‹čÆ•ļ¼ˆ2 äøŖē”Øä¾‹ļ¼Œ2/2 é€ščæ‡ āœ…ļ¼‰ - - āœ… ę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL` 认证 - - āœ… ę”ÆęŒ `ANTHROPIC_API_KEY` ä½œäøŗåŽå¤‡č®¤čÆę–¹å¼ - -### āœ… 5. ęµ‹čÆ•äæ®å¤å’Œä¼˜åŒ– - 已完成 - -å·²äæ®å¤ēš„é—®é¢˜: -1. **SessionManager č¾…åŠ©ę–¹ę³•**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… ę·»åŠ äŗ† `get_state_value()`, `set_state_value()`, `remove_state_keys()` - - āœ… ę·»åŠ äŗ† `get_session_count()`, `get_user_session_count()` - - āœ… ę·»åŠ äŗ† `clear_session_state()` 方法 - -2. **EventTranslator Mock ē±»åž‹ę£€ęŸ„**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… 将 `isinstance()` 改为 `hasattr()` ę£€ęŸ„ - - āœ… äæ®å¤äŗ† Mock åÆ¹č±”ēš„ē±»åž‹ęØ”ę‹Ÿ - - āœ… ę”¹čæ›äŗ†å†…å®¹å—ē±»åž‹čÆ†åˆ«é€»č¾‘ - -3. **é›†ęˆęµ‹čÆ• Mock ē­–ē•„**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… ę”¹čæ›äŗ†å¼‚ę­„ē”Ÿęˆå™Øēš„ Mock - - āœ… äæ®å¤äŗ† Mock åÆ¹č±”ēš„ē±»åž‹ę£€ęŸ„ - - āœ… ē§»é™¤äŗ†ę‰€ęœ‰ `__class__` čµ‹å€¼é—®é¢˜ - -4. **ClaudeAgent 缺失方法**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… ę·»åŠ äŗ† `_is_tool_result_submission()` 方法 - -5. **ę¶ˆęÆå¤„ē†é€»č¾‘**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… äæ®å¤äŗ†ę¶ˆęÆåŽ»é‡é€»č¾‘ - - āœ… äæ®å¤äŗ†å®¢ęˆ·ē«Æé‡ē”Øé€»č¾‘ - -## 锹目进度时闓线 - -### 阶ꮵ 1: ę øåæƒå®žēŽ° āœ… (已完成) -- āœ… é”¹ē›®ē»“ęž„åˆ›å»ŗ -- āœ… ę øåæƒē»„ä»¶å®žēŽ° -- āœ… FastAPI 集ꈐ -- āœ… 文攣编写 - -### 阶ꮵ 2: API 适配 āœ… (已完成) -- āœ… Claude SDK API 研究 -- āœ… å®žēŽ°ä»£ē č°ƒę•“ -- āœ… å·„å…·ę ¼å¼č½¬ę¢ -- āœ… äŗ‹ä»¶č½¬ę¢é€»č¾‘ - -### 阶ꮵ 3: ęµ‹čÆ•å®žę–½ āœ… (已完成) -- āœ… ęµ‹čÆ•ę”†ęž¶ę­å»ŗ -- āœ… å•å…ƒęµ‹čÆ•ē¼–å†™ļ¼ˆ72 个用例) -- āœ… é›†ęˆęµ‹čÆ•ē¼–å†™ļ¼ˆ8 个用例) -- āœ… ęµ‹čÆ•ę‰§č”ŒéŖŒčÆļ¼ˆ47/72 é€ščæ‡ļ¼Œ65%) - -### 阶ꮵ 4: ęµ‹čÆ•äæ®å¤ āœ… (已完成) -- āœ… SessionManager č¾…åŠ©ę–¹ę³•ę·»åŠ  -- āœ… EventTranslator Mock äæ®å¤ -- āœ… é›†ęˆęµ‹čÆ•ä¼˜åŒ– -- āœ… ClaudeAgent ē¼ŗå¤±ę–¹ę³•ę·»åŠ  -- āœ… ę¶ˆęÆå¤„ē†é€»č¾‘ä¼˜åŒ– - -### 阶ꮵ 5: ä¼˜åŒ–å’Œå‘åøƒ ā³ (待开始) -- ā³ é”™čÆÆå¤„ē†å®Œå–„ -- ā³ ę€§čƒ½ä¼˜åŒ– -- ā³ ę–‡ę”£å®Œå–„ -- ā³ å‘åøƒå‡†å¤‡ - -## å‚č€ƒå®žēŽ° - -ęœ¬é”¹ē›®å‚č€ƒäŗ†ä»„äø‹å®žēŽ°: -- **ADK Middleware**: `integrations/adk-middleware/python/` -- **LangGraph Integration**: `integrations/langgraph/python/` - -## 文攣 - -- [README.md](./python/README.md): åæ«é€Ÿå¼€å§‹ęŒ‡å— -- [ARCHITECTURE.md](./python/ARCHITECTURE.md): ęž¶ęž„č®¾č®”ę–‡ę”£ -- [CONFIGURATION.md](./python/CONFIGURATION.md): é…ē½®é€‰é”¹ę–‡ę”£ -- [USAGE_GUIDE.md](./python/USAGE_GUIDE.md): čÆ¦ē»†ä½æē”ØęŒ‡å—ļ¼ˆå¦‚ä½•åÆåŠØå’Œęµ‹čÆ• agent) - -## ę³Øę„äŗ‹é”¹ - -1. **API 兼容性**: 实际 Claude Agent SDK API åÆčƒ½äøŽęØ”ęæå®žēŽ°äøåŒļ¼Œéœ€č¦ę ¹ę®ę–‡ę”£č°ƒę•“ -2. **错误处理**: ē”®äæę‰€ęœ‰é”™čÆÆč·Æå¾„éƒ½ęœ‰é€‚å½“ēš„å¤„ē†å’Œé”™čÆÆäŗ‹ä»¶ē”Ÿęˆ -3. **ę€§čƒ½ä¼˜åŒ–**: ę³Øę„å¹¶å‘é™åˆ¶ć€ä¼ščÆęø…ē†ē­‰ę€§čƒ½ē›øå…³é…ē½® -4. **向后兼容**: å¦‚ęžœ SDK API å˜ę›“ļ¼Œéœ€č¦č€ƒč™‘ē‰ˆęœ¬é€‚é… - -## 总结 - -āœ… **ę øåæƒå®žēŽ°å·²å®Œęˆ**: ę ¹ę® [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient) å®Œęˆäŗ†ę‰€ęœ‰ę øåæƒåŠŸčƒ½ēš„å®žēŽ°ļ¼š - -1. āœ… SDK 集ꈐ: `ClaudeSDKClient` 和 `query()` å‡½ę•°ę”ÆęŒ -2. āœ… ę¶ˆęÆå¤„ē†: å®Œę•“ēš„ Message ē±»åž‹å’Œ ContentBlock 处理 -3. āœ… å·„å…·ę”ÆęŒ: MCP ęœåŠ”å™Øåˆ›å»ŗå’Œå·„å…·ę³Øå†Œļ¼ˆęµ‹čÆ• 100% é€ščæ‡ļ¼‰ -4. āœ… äŗ‹ä»¶č½¬ę¢: AG-UI åč®®äŗ‹ä»¶č½¬ę¢ļ¼ˆę øåæƒåŠŸčƒ½é€ščæ‡ļ¼‰ -5. āœ… ä¼ščÆē®”ē†: ęŒä¹…ä¼ščÆå’Œę— ēŠ¶ę€ęØ”å¼ę”ÆęŒļ¼ˆåŸŗē”€åŠŸčƒ½é€ščæ‡ļ¼‰ -6. āœ… ęµ‹čÆ•ę”†ęž¶: å®Œę•“ēš„ęµ‹čÆ•å„—ä»¶ļ¼ˆ72 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼Œ65% é€ščæ‡ēŽ‡ļ¼‰ - -### å½“å‰ēŠ¶ę€ - -- **ä»£ē å®žēŽ°**: āœ… 完成 -- **ęµ‹čÆ•ę”†ęž¶**: āœ… 完成 -- **å•å…ƒęµ‹čÆ•**: āœ… 完成(72/72 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… -- **é›†ęˆęµ‹čÆ•**: āœ… 完成(8/8 é€ščæ‡ļ¼Œ100%ļ¼‰āœ… -- **ä»£ē č“Øé‡**: āœ… ä¼˜ē§€ļ¼ˆę‰€ęœ‰ęµ‹čÆ•é€ščæ‡ļ¼‰ - -### äø‹äø€ę­„ä¼˜å…ˆäŗ‹é”¹ - -1. āœ… ~~添加 SessionManager ē¼ŗå¤±ēš„č¾…åŠ©ę–¹ę³•~~ - 已完成 -2. āœ… ~~äæ®å¤ EventTranslator ēš„ Mock ē±»åž‹ę£€ęŸ„~~ - 已完成 -3. āœ… ~~ä¼˜åŒ–é›†ęˆęµ‹čÆ•ēš„ Mock ē­–ē•„~~ - 已完成 -4. āœ… ~~čæč”Œå®Œę•“ęµ‹čÆ•å„—ä»¶éŖŒčÆäæ®å¤~~ - 已完成(72/72 é€ščæ‡ļ¼‰ -5. ā³ ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē†åœŗę™Æ -6. ā³ ę€§čƒ½ä¼˜åŒ–å’Œčµ„ęŗä½æē”Øä¼˜åŒ– -7. ā³ ę·»åŠ ę›“å¤šé›†ęˆęµ‹čÆ•åœŗę™Æ - -å®žēŽ°å·²åŸŗäŗŽå®žé™…ēš„ Claude Agent SDK APIļ¼Œę‰€ęœ‰ę øåæƒåŠŸčƒ½å·²éŖŒčÆåÆē”Øļ¼Œę‰€ęœ‰ęµ‹čÆ•å·²é€ščæ‡ć€‚é”¹ē›®å·²å‡†å¤‡å„½čæ›č”Œę€§čƒ½ä¼˜åŒ–å’Œčæ›äø€ę­„ēš„åŠŸčƒ½ę‰©å±•ć€‚ - diff --git a/integrations/claude-agent-sdk/python/CONFIGURATION.md b/integrations/claude-agent-sdk/python/CONFIGURATION.md deleted file mode 100644 index 4b0aa7dc8..000000000 --- a/integrations/claude-agent-sdk/python/CONFIGURATION.md +++ /dev/null @@ -1,275 +0,0 @@ -# Configuration Guide - -This document describes configuration options for the Claude Agent SDK integration. - -## ClaudeAgent Configuration - -### Basic Configuration - -```python -from ag_ui_claude import ClaudeAgent -from claude_agent_sdk import ClaudeAgentOptions - -# Simple configuration -agent = ClaudeAgent( - app_name="my_app", - use_persistent_sessions=True # Use ClaudeSDKClient -) - -# With ClaudeAgentOptions -agent = ClaudeAgent( - app_name="my_app", - use_persistent_sessions=True, - claude_options=ClaudeAgentOptions( - system_prompt="You are a helpful assistant", - permission_mode='acceptEdits', - cwd="/path/to/workspace" - ) -) -``` - -**Note**: The `api_key` parameter is optional. Claude Agent SDK uses `ANTHROPIC_API_KEY` environment variable by default. - -### Session Mode - -**Persistent Sessions** (Recommended for multi-turn conversations): -```python -agent = ClaudeAgent( - api_key="your-api-key", - use_persistent_sessions=True, # Use ClaudeSDKClient - app_name="my_app" -) -``` - -**Stateless Mode** (For simple queries): -```python -agent = ClaudeAgent( - api_key="your-api-key", - use_persistent_sessions=False, # Use query() method - app_name="my_app" -) -``` - -### Dynamic App/User Identification - -```python -def extract_app_name(input: RunAgentInput) -> str: - return input.context.get("app_name", "default") - -def extract_user_id(input: RunAgentInput) -> str: - return input.forwarded_props.get("user_id", "anonymous") - -agent = ClaudeAgent( - api_key="your-api-key", - app_name_extractor=extract_app_name, - user_id_extractor=extract_user_id -) -``` - -### Timeout Configuration - -```python -agent = ClaudeAgent( - api_key="your-api-key", - execution_timeout_seconds=600, # 10 minutes (default) - tool_timeout_seconds=300, # 5 minutes (default) - session_timeout_seconds=1200, # 20 minutes (default) - cleanup_interval_seconds=300 # 5 minutes (default) -) -``` - -### Concurrency Limits - -```python -agent = ClaudeAgent( - api_key="your-api-key", - max_concurrent_executions=10 # Default: 10 -) -``` - -### Additional Claude SDK Options - -```python -from claude_agent_sdk import ClaudeAgentOptions - -# Configure via ClaudeAgentOptions -options = ClaudeAgentOptions( - system_prompt="You are an expert Python developer", - permission_mode='acceptEdits', - allowed_tools=["Read", "Write", "Bash"], - cwd="/home/user/project", - # ... other options -) - -agent = ClaudeAgent( - app_name="my_app", - claude_options=options -) -``` - -See the [Claude Agent SDK documentation](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudeagentoptions) for all available options. - -## FastAPI Endpoint Configuration - -### Basic Setup - -```python -from fastapi import FastAPI -from ag_ui_claude import ClaudeAgent, add_claude_fastapi_endpoint - -app = FastAPI() -agent = ClaudeAgent(api_key="your-api-key") -add_claude_fastapi_endpoint(app, agent, path="/chat") -``` - -### Custom Path - -```python -add_claude_fastapi_endpoint(app, agent, path="/api/v1/claude") -``` - -### Standalone App - -```python -from ag_ui_claude import ClaudeAgent, create_claude_app - -agent = ClaudeAgent(api_key="your-api-key") -app = create_claude_app(agent, path="/chat") -``` - -## Environment Variables - -### Required Variables - -Claude Agent SDK supports multiple authentication methods: - -**Option 1: Using AUTH_TOKEN and BASE_URL (recommended)** -- `ANTHROPIC_AUTH_TOKEN`: Authentication token for Claude API -- `ANTHROPIC_BASE_URL`: Base URL for Claude API (e.g., `https://api.anthropic.com`) - -**Option 2: Using API Key (fallback)** -- `ANTHROPIC_API_KEY`: Claude API key - -**Important**: Claude Agent SDK requires at least one authentication method to be set. The SDK will use `ANTHROPIC_AUTH_TOKEN` if available, otherwise fall back to `ANTHROPIC_API_KEY`. - -### Optional Variables - -- `LOG_ROOT_LEVEL`: Root logging level (e.g., "DEBUG", "INFO") -- `LOG_CLAUDE_AGENT`: ClaudeAgent logger level -- `LOG_EVENT_TRANSLATOR`: EventTranslator logger level - -### Configuration via .env.local File - -For development and testing, you can use a `.env.local` file to configure environment variables: - -1. Copy the example file: - ```bash - cp .env.local.example .env.local - ``` - -2. Edit `.env.local` and add your configuration: - ```bash - # Option 1: Using AUTH_TOKEN and BASE_URL - ANTHROPIC_AUTH_TOKEN=your-auth-token-here - ANTHROPIC_BASE_URL=https://api.anthropic.com - - # Option 2: Using API Key - # ANTHROPIC_API_KEY=your-api-key-here - - LOG_ROOT_LEVEL=DEBUG - ``` - -3. The `.env.local` file is automatically loaded: - - **In tests**: Automatically loaded by `conftest.py` using `python-dotenv` - - **In application code**: You can manually load it: - ```python - from dotenv import load_dotenv - load_dotenv('.env.local') - ``` - -**Note**: `.env.local` is gitignored and should not be committed. Always use `.env.local.example` as a template. - -### Alternative: Direct Environment Variable - -You can also set environment variables directly: - -```bash -# Linux/macOS - Option 1: AUTH_TOKEN and BASE_URL -export ANTHROPIC_AUTH_TOKEN=your-auth-token-here -export ANTHROPIC_BASE_URL=https://api.anthropic.com - -# Linux/macOS - Option 2: API Key -export ANTHROPIC_API_KEY=your-api-key-here - -# Windows (PowerShell) - Option 1: AUTH_TOKEN and BASE_URL -$env:ANTHROPIC_AUTH_TOKEN="your-auth-token-here" -$env:ANTHROPIC_BASE_URL="https://api.anthropic.com" - -# Windows (PowerShell) - Option 2: API Key -$env:ANTHROPIC_API_KEY="your-api-key-here" - -# Windows (CMD) - Option 1: AUTH_TOKEN and BASE_URL -set ANTHROPIC_AUTH_TOKEN=your-auth-token-here -set ANTHROPIC_BASE_URL=https://api.anthropic.com - -# Windows (CMD) - Option 2: API Key -set ANTHROPIC_API_KEY=your-api-key-here -``` - -## Session Management - -### Session Cleanup - -Sessions are automatically cleaned up after `session_timeout_seconds` of inactivity. Sessions with pending tool calls are preserved. - -### Custom Session Manager - -```python -from ag_ui_claude import SessionManager - -# Get singleton instance -session_manager = SessionManager.get_instance( - session_timeout_seconds=1800, # 30 minutes - cleanup_interval_seconds=600, # 10 minutes - max_sessions_per_user=5, # Limit sessions per user - auto_cleanup=True -) -``` - -## Error Handling - -Errors are automatically converted to `RunErrorEvent` and streamed to the client. Error codes include: - -- `EXECUTION_ERROR`: General execution error -- `EXECUTION_TIMEOUT`: Execution exceeded timeout -- `NO_TOOL_RESULTS`: Tool result submission without results -- `ENCODING_ERROR`: Event encoding failure -- `AGENT_ERROR`: Agent execution failure -- `BACKGROUND_EXECUTION_ERROR`: Background task error - -## Best Practices - -1. **Use persistent sessions** for multi-turn conversations -2. **Set appropriate timeouts** based on your use case -3. **Monitor concurrent executions** to avoid resource exhaustion -4. **Handle errors gracefully** in your client code -5. **Use environment variables** for sensitive configuration - -## Troubleshooting - -### API Key Issues -- Ensure `ANTHROPIC_API_KEY` is set or provided in code -- Verify API key is valid and has sufficient quota - -### Timeout Issues -- Increase `execution_timeout_seconds` for long-running operations -- Check network connectivity and Claude API status - -### Session Issues -- Sessions are automatically cleaned up after timeout -- Use session keys consistently for same conversation - -### Tool Issues -- Ensure tool definitions match Claude SDK format -- Check tool call/result message format - diff --git a/integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md b/integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md deleted file mode 100644 index 1563bbd49..000000000 --- a/integrations/claude-agent-sdk/python/IMPLEMENTATION_STATUS.md +++ /dev/null @@ -1,328 +0,0 @@ -# Claude Agent SDK é›†ęˆå®žēŽ°ēŠ¶ę€ - -**ęœ€åŽę›“ę–°**: 2025-01-XX -**ęµ‹čÆ•ēŠ¶ę€**: 72 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼Œ72 é€ščæ‡ļ¼ˆ100%ļ¼‰āœ… - -## å®žēŽ°å®Œęˆåŗ¦ - -### āœ… å·²å®Œęˆēš„ę øåæƒåŠŸčƒ½ - -1. **SDK 集ꈐ** - - āœ… `ClaudeSDKClient` é›†ęˆļ¼ˆęŒä¹…ä¼ščÆęØ”å¼ļ¼‰ - - āœ… `query()` å‡½ę•°ę”ÆęŒļ¼ˆę— ēŠ¶ę€ęØ”å¼ļ¼‰ - - āœ… `ClaudeAgentOptions` é…ē½®ę”ÆęŒ - -2. **ę¶ˆęÆå¤„ē†** - - āœ… `AssistantMessage` 处理 - - āœ… `TextBlock` ęµå¼ę–‡ęœ¬č½¬ę¢ - - āœ… `ToolUseBlock` å·„å…·č°ƒē”Øč½¬ę¢ - - āœ… `ToolResultBlock` å·„å…·ē»“ęžœč½¬ę¢ - - āœ… `ResultMessage` å®Œęˆäæ”å·å¤„ē† - -3. **å·„å…·ę”ÆęŒ** - - āœ… AG-UI Tool → `SdkMcpTool` č½¬ę¢ - - āœ… MCP ęœåŠ”å™Øåˆ›å»ŗ (`create_sdk_mcp_server`) - - āœ… å·„å…·åŠØę€ę³Øå†Œåˆ° `ClaudeAgentOptions` - - āœ… å·„å…·é€‚é…å™Øęµ‹čÆ•ļ¼š**9/9 é€ščæ‡** - -4. **ä¼ščÆē®”ē†** - - āœ… ęŒä¹…ä¼ščÆē®”ē†ļ¼ˆ`ClaudeSDKClient` å®žä¾‹ē®”ē†ļ¼‰ - - āœ… ę— ēŠ¶ę€ęØ”å¼ę”ÆęŒ - - āœ… ä¼ščÆęø…ē†å’Œč¶…ę—¶ē®”ē† - - āœ… å®Œę•“ēš„č¾…åŠ©ę–¹ę³•ļ¼ˆget_state_value, set_state_value 等) - -5. **äŗ‹ä»¶č½¬ę¢** - - āœ… å®Œę•“ēš„ AG-UI äŗ‹ä»¶č½¬ę¢ę”†ęž¶ - - āœ… ęµå¼ę–‡ęœ¬ę¶ˆęÆå¤„ē† - - āœ… å·„å…·č°ƒē”Øäŗ‹ä»¶ē”Ÿęˆ - - āœ… Mock åÆ¹č±”ē±»åž‹ę£€ęŸ„å·²äæ®å¤ - - āœ… ęµ‹čÆ•é€ščæ‡ēŽ‡ļ¼š14/14(100%ļ¼‰āœ… - -6. **ęµ‹čÆ•ę”†ęž¶** - - āœ… pytest é…ē½®å®Œęˆ - - āœ… ęµ‹čÆ•č¾…åŠ©ęØ”å—å®Œęˆ - - āœ… 72 äøŖęµ‹čÆ•ē”Øä¾‹ē¼–å†™å®Œęˆ - - āœ… 72 äøŖęµ‹čÆ•é€ščæ‡ļ¼ˆ100%ļ¼‰āœ… - -## åŸŗäŗŽå®žé™… API ēš„č°ƒę•“ - -ę ¹ę® [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient)ļ¼Œå·²å®Œęˆēš„č°ƒę•“ļ¼š - -### 1. SDK åÆ¼å…„å’Œåˆå§‹åŒ– - -```python -from claude_agent_sdk import ( - ClaudeSDKClient, - ClaudeAgentOptions, - query as claude_query, - Message, - AssistantMessage, - TextBlock, - ToolUseBlock, - ToolResultBlock, - SdkMcpTool, - create_sdk_mcp_server, -) -``` - -### 2. å®¢ęˆ·ē«Æåˆ›å»ŗ - -```python -# ęŒä¹…ä¼ščÆęØ”å¼ -client = ClaudeSDKClient(options=claude_options) - -# ę— ēŠ¶ę€ęØ”å¼ -async for message in claude_query(prompt=prompt, options=options): - yield message -``` - -### 3. ę¶ˆęÆęµå¤„ē† - -```python -# ęŒä¹…ä¼ščÆ -await client.query(prompt) -async for message in client.receive_response(): - # å¤„ē†ę¶ˆęÆ - pass - -# ę— ēŠ¶ę€ęØ”å¼ -async for message in claude_query(prompt=prompt, options=options): - # å¤„ē†ę¶ˆęÆ - pass -``` - -### 4. å·„å…·é›†ęˆ - -```python -# åˆ›å»ŗ MCP ęœåŠ”å™Ø -mcp_server = create_sdk_mcp_server( - name="ag_ui_tools", - version="1.0.0", - tools=[sdk_mcp_tools] -) - -# é…ē½®åˆ°é€‰é”¹ -options = ClaudeAgentOptions( - mcp_servers={"ag_ui_tools": mcp_server}, - allowed_tools=["mcp__ag_ui_tools__tool_name"] -) -``` - -### 5. ę¶ˆęÆē±»åž‹å¤„ē† - -- `AssistantMessage`: 包含 `content` åˆ—č”Øļ¼ˆ`TextBlock`, `ToolUseBlock`, `ToolResultBlock`) -- `TextBlock`: ęµå¼ę–‡ęœ¬å— -- `ToolUseBlock`: å·„å…·č°ƒē”Øļ¼ˆ`id`, `name`, `input`) -- `ToolResultBlock`: å·„å…·ē»“ęžœļ¼ˆ`tool_use_id`, `content`, `is_error`) -- `ResultMessage`: å®Œęˆäæ”å·ļ¼ˆ`subtype`: 'success' ꈖ 'error') - -## å¾…éŖŒčÆå’Œä¼˜åŒ–ēš„éƒØåˆ† - -### 1. å·„å…·ę‰§č”ŒęµēØ‹ - -**å½“å‰å®žēŽ°**: -- ę‰€ęœ‰å®¢ęˆ·ē«Æå·„å…·éƒ½ę ‡č®°äøŗé•æčæč”Œå·„å…· -- å·„å…·ē»“ęžœé€ščæ‡ `ToolMessage` čæ”å›ž - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- ē”®č®¤å·„å…·ę‰§č”Œēš„å®žé™…ęµēØ‹ -- éŖŒčÆå·„å…·ē»“ęžœēš„ę¶ˆęÆę ¼å¼ - -### 2. ęŒä¹…ä¼ščÆēš„ę¶ˆęÆåŽ†å² - -**å½“å‰å®žēŽ°**: -- ä½æē”Øęœ€ę–°ēš„ē”Øęˆ·ę¶ˆęÆä½œäøŗ prompt -- ä¾čµ– Claude SDK ē»“ęŠ¤ä¼ščÆåŽ†å² - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- 验证 Claude SDK ę˜Æå¦č‡ŖåŠØē»“ęŠ¤åŽ†å² -- ę˜Æå¦éœ€č¦ę‰‹åŠØä¼ é€’åŽ†å²ę¶ˆęÆ - -### 3. 错误处理 - -**å½“å‰å®žēŽ°**: -- åŸŗęœ¬ēš„é”™čÆÆę•čŽ·å’Œč½¬ę¢ - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- å¤„ē†ē‰¹å®šēš„ SDK é”™čÆÆē±»åž‹ļ¼ˆ`CLINotFoundError`, `ProcessError`, `CLIJSONDecodeError`) -- é”™čÆÆę¶ˆęÆēš„čÆ¦ē»†ēØ‹åŗ¦ - -### 4. ęµå¼ę–‡ęœ¬ę£€ęµ‹ - -**å½“å‰å®žēŽ°**: -- ęÆäøŖ `TextBlock` ä½œäøŗęµå¼å—å¤„ē† -- `ResultMessage` ä½œäøŗå®Œęˆäæ”å· - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- éŖŒčÆę˜Æå¦ę‰€ęœ‰ `TextBlock` éƒ½éœ€č¦ęµå¼å¤„ē† -- ē”®č®¤å®Œęˆäæ”å·ēš„å‡†ē”®ę—¶ęœŗ - -## 测试建议 - -1. **åŸŗęœ¬åÆ¹čÆęµ‹čÆ•** - - å•č½®åÆ¹čÆ - - å¤šč½®åÆ¹čÆļ¼ˆęŒä¹…ä¼ščÆļ¼‰ - - ę— ēŠ¶ę€ęØ”å¼ - -2. **å·„å…·č°ƒē”Øęµ‹čÆ•** - - å®¢ęˆ·ē«Æå·„å…·č°ƒē”Ø - - å·„å…·ē»“ęžœå¤„ē† - - å¤šäøŖå·„å…·č°ƒē”Ø - -3. **ęµå¼å“åŗ”ęµ‹čÆ•** - - ę–‡ęœ¬ęµå¼č¾“å‡ŗ - - å·„å…·č°ƒē”Øäø­ę–­ę–‡ęœ¬ęµ - - å®Œęˆäæ”å·å¤„ē† - -4. **错误处理测试** - - SDK ęœŖå®‰č£…é”™čÆÆ - - API 密钄错误 - - ē½‘ē»œé”™čÆÆ - - å·„å…·ę‰§č”Œé”™čÆÆ - -5. **ä¼ščÆē®”ē†ęµ‹čÆ•** - - ä¼ščÆåˆ›å»ŗå’Œé‡ē”Ø - - ä¼ščÆč¶…ę—¶ęø…ē† - - å¹¶å‘ä¼ščÆå¤„ē† - -## å‚č€ƒčµ„ęŗ - -- [Claude Agent SDK Python 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient) -- [AG-UI Protocol 文攣](https://docs.ag-ui.com/) -- ADK Middleware å®žēŽ°å‚č€ƒ: `integrations/adk-middleware/python/` - -## ęµ‹čÆ•å®žę–½ēŠ¶ę€ - -### āœ… ęµ‹čÆ•ę”†ęž¶ę­å»ŗå®Œęˆ - -1. **pytest.ini** - pytest é…ē½®ę–‡ä»¶å·²åˆ›å»ŗ -2. **conftest.py** - ęµ‹čÆ•č¾…åŠ©ęØ”å—å’Œ fixtures å·²åˆ›å»ŗ - - SessionManager é‡ē½® fixture - - Mock Claude SDK client fixtures - - 示例 RunAgentInput 和 Tool fixtures - -### āœ… å•å…ƒęµ‹čÆ•å®žēŽ°å®Œęˆ - -1. **test_claude_agent.py** - 17 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ17/17) - -2. **test_event_translator.py** - 14 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ14/14) - -3. **test_session_manager.py** - 16 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ16/16) - -4. **test_tool_adapter.py** - 9 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ9/9) - -5. **test_endpoint.py** - 6 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ6/6) - -### āœ… é›†ęˆęµ‹čÆ•å®žēŽ°å®Œęˆ - -1. **test_integration_basic.py** - 3 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ3/3) - -2. **test_integration_tools.py** - 2 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ2/2) - -3. **test_integration_sessions.py** - 3 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ3/3) - -4. **test_real_api.py** - 2 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼ˆåÆé€‰ļ¼‰ - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ2/2) - - āœ… ę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL` 认证 - - āœ… ę”ÆęŒ `ANTHROPIC_API_KEY` ä½œäøŗåŽå¤‡č®¤čÆę–¹å¼ - -### ęµ‹čÆ•ę‰§č”Œē»“ęžœ - -- **总测试数**: 72 -- **é€ščæ‡**: 72 (100%) āœ… -- **失蓄**: 0 (0%) -- **跳过**: 0 (0%) - -**ę³Øę„**: ēœŸå®ž API ęµ‹čÆ•ļ¼ˆtest_real_api.pyļ¼‰ēŽ°åœØę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL`ļ¼Œę— éœ€å¼ŗåˆ¶ä½æē”Ø `ANTHROPIC_API_KEY`怂 - -### āœ… å·²äæ®å¤ēš„é—®é¢˜ - -1. **SessionManager 缺失方法**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… ę·»åŠ äŗ† `get_state_value()` - čŽ·å–ēŠ¶ę€å€¼ - - āœ… ę·»åŠ äŗ† `set_state_value()` - č®¾ē½®ēŠ¶ę€å€¼ - - āœ… ę·»åŠ äŗ† `remove_state_keys()` - ē§»é™¤ēŠ¶ę€é”® - - āœ… ę·»åŠ äŗ† `get_session_count()` - čŽ·å–ä¼ščÆę•°é‡ - - āœ… ę·»åŠ äŗ† `get_user_session_count()` - čŽ·å–ē”Øęˆ·ä¼ščÆę•°é‡ - - āœ… ę·»åŠ äŗ† `clear_session_state()` - ęø…é™¤ä¼ščÆēŠ¶ę€ - -2. **EventTranslator ē±»åž‹ę£€ęŸ„**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… 将 `isinstance()` 改为 `hasattr()` ę£€ęŸ„ļ¼Œę”ÆęŒ Mock 对豔 - - āœ… ę”¹čæ›äŗ†å†…å®¹å—ē±»åž‹čÆ†åˆ«é€»č¾‘ - -3. **é›†ęˆęµ‹čÆ• Mock ē­–ē•„**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… äæ®å¤äŗ† Mock åÆ¹č±”ēš„ē±»åž‹ęØ”ę‹Ÿ - - āœ… äæ®å¤äŗ†å¼‚ę­„ē”Ÿęˆå™Øēš„ Mock - - āœ… ē§»é™¤äŗ†ę‰€ęœ‰ `__class__` čµ‹å€¼é—®é¢˜ - -4. **ClaudeAgent 缺失方法**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… ę·»åŠ äŗ† `_is_tool_result_submission()` 方法 - -5. **ę¶ˆęÆå¤„ē†é€»č¾‘**ļ¼ˆå·²äæ®å¤ļ¼‰ - - āœ… äæ®å¤äŗ†ę¶ˆęÆåŽ»é‡é€»č¾‘ļ¼Œē”®äæę‰€ęœ‰ę¶ˆęÆéƒ½č¢«ę­£ē”®ę ‡č®°äøŗå·²å¤„ē† - - āœ… äæ®å¤äŗ†å®¢ęˆ·ē«Æé‡ē”Øé€»č¾‘ļ¼Œē”®äæęŒä¹…ä¼ščÆę­£ē”®é‡ē”Øå®¢ęˆ·ē«Æ - -## 下一歄 - -1. āœ… ~~čæč”Œå®žé™…ęµ‹čÆ•éŖŒčÆå®žēŽ°~~ - å·²å®Œęˆęµ‹čÆ•ę”†ęž¶ę­å»ŗå’Œęµ‹čÆ•ę‰§č”Œ -2. āœ… ~~ę ¹ę®ęµ‹čÆ•ē»“ęžœå¾®č°ƒå®žēŽ°ē»†čŠ‚~~ - 已完成 - - āœ… 添加 SessionManager ē¼ŗå¤±ę–¹ę³•ļ¼ˆget_state_value, set_state_value, remove_state_keys 等) - - āœ… äæ®å¤ EventTranslator ē±»åž‹ę£€ęŸ„ļ¼ˆå°† isinstance 改为 hasattr ęˆ–ę”¹čæ› Mock) - - āœ… ę”¹čæ›é›†ęˆęµ‹čÆ• Mock ē­–ē•„ļ¼ˆäæ®å¤å¼‚ę­„ē”Ÿęˆå™Ø Mock) - - āœ… 添加 ClaudeAgent ē¼ŗå¤±ę–¹ę³•ļ¼ˆ_is_tool_result_submission) - - āœ… äæ®å¤ę¶ˆęÆå¤„ē†é€»č¾‘ļ¼ˆę¶ˆęÆåŽ»é‡å’Œå®¢ęˆ·ē«Æé‡ē”Øļ¼‰ -3. ā³ ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē†åœŗę™Æ -4. ā³ ä¼˜åŒ–ę€§čƒ½å’Œčµ„ęŗä½æē”Ø -5. ā³ å®Œå–„ę–‡ę”£å’Œē¤ŗä¾‹ - -## ęµ‹čÆ•ę‰§č”ŒčÆ¦ęƒ… - -### ęµ‹čÆ•ēŽÆå¢ƒ - -- **č™šę‹ŸēŽÆå¢ƒ**: UV (.venv) -- **Python ē‰ˆęœ¬**: 3.12.4 -- **pytest ē‰ˆęœ¬**: 8.4.2 -- **ęµ‹čÆ•ę”†ęž¶**: pytest + pytest-asyncio - -### 测试命令 - -```bash -cd integrations/claude-agent-sdk/python -uv venv -source .venv/bin/activate -uv pip install -e ".[dev]" -pytest tests/ -v -``` - -### ęµ‹čÆ•ē»“ęžœčÆ¦ęƒ… - -#### ę‰€ęœ‰ęØ”å—å®Œå…Øé€ščæ‡ļ¼ˆ100%) - -- **test_claude_agent.py**: 17/17 āœ… -- **test_event_translator.py**: 14/14 āœ… -- **test_session_manager.py**: 16/16 āœ… -- **test_tool_adapter.py**: 9/9 āœ… -- **test_endpoint.py**: 6/6 āœ… -- **test_integration_basic.py**: 3/3 āœ… -- **test_integration_tools.py**: 2/2 āœ… -- **test_integration_sessions.py**: 3/3 āœ… -- **test_real_api.py**: 2/2 āœ…ļ¼ˆéœ€č¦č®¤čÆå‡­ę®ļ¼‰ - -### äæ®å¤ä¼˜å…ˆēŗ§ - -**ę‰€ęœ‰é—®é¢˜å·²äæ®å¤** āœ…: -1. āœ… SessionManager č¾…åŠ©ę–¹ę³•ļ¼ˆå…ØéƒØę·»åŠ ļ¼Œ16/16 é€ščæ‡ļ¼‰ -2. āœ… EventTranslator Mock ē±»åž‹ę£€ęŸ„ļ¼ˆå·²äæ®å¤ļ¼Œ14/14 é€ščæ‡ļ¼‰ -3. āœ… é›†ęˆęµ‹čÆ• Mock ē­–ē•„ļ¼ˆå·²äæ®å¤ļ¼Œ8/8 é€ščæ‡ļ¼‰ -4. āœ… ēœŸå®ž API 测试已曓新 - ę”ÆęŒ `ANTHROPIC_AUTH_TOKEN` 和 `ANTHROPIC_BASE_URL`(2/2 é€ščæ‡ļ¼‰ -5. āœ… ClaudeAgent ē¼ŗå¤±ę–¹ę³•ļ¼ˆå·²ę·»åŠ ļ¼Œ17/17 é€ščæ‡ļ¼‰ -6. āœ… ę¶ˆęÆå¤„ē†é€»č¾‘ä¼˜åŒ–ļ¼ˆå·²äæ®å¤ļ¼‰ - -**ę‰€ęœ‰ęµ‹čÆ•å·²é€ščæ‡** āœ… (72/72, 100%) diff --git a/integrations/claude-agent-sdk/python/README.md b/integrations/claude-agent-sdk/python/README.md index 60e2eb18a..38f38e0cf 100644 --- a/integrations/claude-agent-sdk/python/README.md +++ b/integrations/claude-agent-sdk/python/README.md @@ -1,6 +1,6 @@ # Claude Agent SDK Middleware for AG-UI Protocol -This Python middleware enables [Anthropic Claude Agent SDK](https://docs.claude.com/zh-CN/api/agent-sdk/python) agents to be used with the AG-UI Protocol, providing a bridge between the two frameworks. +This Python middleware enables [Anthropic Claude Agent SDK](https://docs.claude.com/api/agent-sdk/python) agents to be used with the AG-UI Protocol, providing a bridge between the two frameworks. ## Prerequisites @@ -334,7 +334,7 @@ AG-UI tools are automatically converted to Claude SDK `SdkMcpTool` format and ex - `cwd`: Working directory for file operations - `max_tokens`: Maximum tokens for responses - `temperature`: Temperature for response generation -- And more - see [Claude Agent SDK documentation](https://docs.claude.com/zh-CN/api/agent-sdk/python) +- And more - see [Claude Agent SDK documentation](https://docs.claude.com/api/agent-sdk/python) See [CONFIGURATION.md](./CONFIGURATION.md) for detailed configuration options. @@ -350,7 +350,7 @@ See [CONFIGURATION.md](./CONFIGURATION.md) for detailed configuration options. ## Implementation Status -āœ… **Core Implementation Complete**: The integration has been updated based on the [Claude Agent SDK documentation](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient). +āœ… **Core Implementation Complete**: The integration has been updated based on the [Claude Agent SDK documentation](https://docs.claude.com/api/agent-sdk/python#claudesdkclient). Key features implemented: - āœ… `ClaudeSDKClient` integration for persistent sessions diff --git a/integrations/claude-agent-sdk/python/TEST_SUMMARY.md b/integrations/claude-agent-sdk/python/TEST_SUMMARY.md deleted file mode 100644 index 2f65b7829..000000000 --- a/integrations/claude-agent-sdk/python/TEST_SUMMARY.md +++ /dev/null @@ -1,270 +0,0 @@ -# Claude Agent SDK é›†ęˆå®žēŽ°ēŠ¶ę€ - -## å®žēŽ°å®Œęˆåŗ¦ - -### āœ… å·²å®Œęˆēš„ę øåæƒåŠŸčƒ½ - -1. **SDK 集ꈐ** - - āœ… `ClaudeSDKClient` é›†ęˆļ¼ˆęŒä¹…ä¼ščÆęØ”å¼ļ¼‰ - - āœ… `query()` å‡½ę•°ę”ÆęŒļ¼ˆę— ēŠ¶ę€ęØ”å¼ļ¼‰ - - āœ… `ClaudeAgentOptions` é…ē½®ę”ÆęŒ - -2. **ę¶ˆęÆå¤„ē†** - - āœ… `AssistantMessage` 处理 - - āœ… `TextBlock` ęµå¼ę–‡ęœ¬č½¬ę¢ - - āœ… `ToolUseBlock` å·„å…·č°ƒē”Øč½¬ę¢ - - āœ… `ToolResultBlock` å·„å…·ē»“ęžœč½¬ę¢ - - āœ… `ResultMessage` å®Œęˆäæ”å·å¤„ē† - -3. **å·„å…·ę”ÆęŒ** - - āœ… AG-UI Tool → `SdkMcpTool` č½¬ę¢ - - āœ… MCP ęœåŠ”å™Øåˆ›å»ŗ (`create_sdk_mcp_server`) - - āœ… å·„å…·åŠØę€ę³Øå†Œåˆ° `ClaudeAgentOptions` - - āœ… å·„å…·é€‚é…å™Øęµ‹čÆ•ļ¼š**9/9 é€ščæ‡** - -4. **ä¼ščÆē®”ē†** - - āœ… ęŒä¹…ä¼ščÆē®”ē†ļ¼ˆ`ClaudeSDKClient` å®žä¾‹ē®”ē†ļ¼‰ - - āœ… ę— ēŠ¶ę€ęØ”å¼ę”ÆęŒ - - āœ… ä¼ščÆęø…ē†å’Œč¶…ę—¶ē®”ē† - - āš ļø éœ€č¦ę·»åŠ č¾…åŠ©ę–¹ę³•ļ¼ˆget_state_value, set_state_value 等) - -5. **äŗ‹ä»¶č½¬ę¢** - - āœ… å®Œę•“ēš„ AG-UI äŗ‹ä»¶č½¬ę¢ę”†ęž¶ - - āœ… ęµå¼ę–‡ęœ¬ę¶ˆęÆå¤„ē† - - āœ… å·„å…·č°ƒē”Øäŗ‹ä»¶ē”Ÿęˆ - - āš ļø éœ€č¦äæ®å¤ Mock åÆ¹č±”ē±»åž‹ę£€ęŸ„ - -6. **ęµ‹čÆ•ę”†ęž¶** - - āœ… pytest é…ē½®å®Œęˆ - - āœ… ęµ‹čÆ•č¾…åŠ©ęØ”å—å®Œęˆ - - āœ… 72 äøŖęµ‹čÆ•ē”Øä¾‹ē¼–å†™å®Œęˆ - - āœ… 47 äøŖęµ‹čÆ•é€ščæ‡ļ¼ˆ65%) - -## åŸŗäŗŽå®žé™… API ēš„č°ƒę•“ - -ę ¹ę® [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient)ļ¼Œå·²å®Œęˆēš„č°ƒę•“ļ¼š - -### 1. SDK åÆ¼å…„å’Œåˆå§‹åŒ– - -```python -from claude_agent_sdk import ( - ClaudeSDKClient, - ClaudeAgentOptions, - query as claude_query, - Message, - AssistantMessage, - TextBlock, - ToolUseBlock, - ToolResultBlock, - SdkMcpTool, - create_sdk_mcp_server, -) -``` - -### 2. å®¢ęˆ·ē«Æåˆ›å»ŗ - -```python -# ęŒä¹…ä¼ščÆęØ”å¼ -client = ClaudeSDKClient(options=claude_options) - -# ę— ēŠ¶ę€ęØ”å¼ -async for message in claude_query(prompt=prompt, options=options): - yield message -``` - -### 3. ę¶ˆęÆęµå¤„ē† - -```python -# ęŒä¹…ä¼ščÆ -await client.query(prompt) -async for message in client.receive_response(): - # å¤„ē†ę¶ˆęÆ - pass - -# ę— ēŠ¶ę€ęØ”å¼ -async for message in claude_query(prompt=prompt, options=options): - # å¤„ē†ę¶ˆęÆ - pass -``` - -### 4. å·„å…·é›†ęˆ - -```python -# åˆ›å»ŗ MCP ęœåŠ”å™Ø -mcp_server = create_sdk_mcp_server( - name="ag_ui_tools", - version="1.0.0", - tools=[sdk_mcp_tools] -) - -# é…ē½®åˆ°é€‰é”¹ -options = ClaudeAgentOptions( - mcp_servers={"ag_ui_tools": mcp_server}, - allowed_tools=["mcp__ag_ui_tools__tool_name"] -) -``` - -### 5. ę¶ˆęÆē±»åž‹å¤„ē† - -- `AssistantMessage`: 包含 `content` åˆ—č”Øļ¼ˆ`TextBlock`, `ToolUseBlock`, `ToolResultBlock`) -- `TextBlock`: ęµå¼ę–‡ęœ¬å— -- `ToolUseBlock`: å·„å…·č°ƒē”Øļ¼ˆ`id`, `name`, `input`) -- `ToolResultBlock`: å·„å…·ē»“ęžœļ¼ˆ`tool_use_id`, `content`, `is_error`) -- `ResultMessage`: å®Œęˆäæ”å·ļ¼ˆ`subtype`: 'success' ꈖ 'error') - -## å¾…éŖŒčÆå’Œä¼˜åŒ–ēš„éƒØåˆ† - -### 1. å·„å…·ę‰§č”ŒęµēØ‹ - -**å½“å‰å®žēŽ°**: -- ę‰€ęœ‰å®¢ęˆ·ē«Æå·„å…·éƒ½ę ‡č®°äøŗé•æčæč”Œå·„å…· -- å·„å…·ē»“ęžœé€ščæ‡ `ToolMessage` čæ”å›ž - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- ē”®č®¤å·„å…·ę‰§č”Œēš„å®žé™…ęµēØ‹ -- éŖŒčÆå·„å…·ē»“ęžœēš„ę¶ˆęÆę ¼å¼ - -### 2. ęŒä¹…ä¼ščÆēš„ę¶ˆęÆåŽ†å² - -**å½“å‰å®žēŽ°**: -- ä½æē”Øęœ€ę–°ēš„ē”Øęˆ·ę¶ˆęÆä½œäøŗ prompt -- ä¾čµ– Claude SDK ē»“ęŠ¤ä¼ščÆåŽ†å² - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- 验证 Claude SDK ę˜Æå¦č‡ŖåŠØē»“ęŠ¤åŽ†å² -- ę˜Æå¦éœ€č¦ę‰‹åŠØä¼ é€’åŽ†å²ę¶ˆęÆ - -### 3. 错误处理 - -**å½“å‰å®žēŽ°**: -- åŸŗęœ¬ēš„é”™čÆÆę•čŽ·å’Œč½¬ę¢ - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- å¤„ē†ē‰¹å®šēš„ SDK é”™čÆÆē±»åž‹ļ¼ˆ`CLINotFoundError`, `ProcessError`, `CLIJSONDecodeError`) -- é”™čÆÆę¶ˆęÆēš„čÆ¦ē»†ēØ‹åŗ¦ - -### 4. ęµå¼ę–‡ęœ¬ę£€ęµ‹ - -**å½“å‰å®žēŽ°**: -- ęÆäøŖ `TextBlock` ä½œäøŗęµå¼å—å¤„ē† -- `ResultMessage` ä½œäøŗå®Œęˆäæ”å· - -**åÆčƒ½éœ€č¦č°ƒę•“**: -- éŖŒčÆę˜Æå¦ę‰€ęœ‰ `TextBlock` éƒ½éœ€č¦ęµå¼å¤„ē† -- ē”®č®¤å®Œęˆäæ”å·ēš„å‡†ē”®ę—¶ęœŗ - -## 测试建议 - -1. **åŸŗęœ¬åÆ¹čÆęµ‹čÆ•** - - å•č½®åÆ¹čÆ - - å¤šč½®åÆ¹čÆļ¼ˆęŒä¹…ä¼ščÆļ¼‰ - - ę— ēŠ¶ę€ęØ”å¼ - -2. **å·„å…·č°ƒē”Øęµ‹čÆ•** - - å®¢ęˆ·ē«Æå·„å…·č°ƒē”Ø - - å·„å…·ē»“ęžœå¤„ē† - - å¤šäøŖå·„å…·č°ƒē”Ø - -3. **ęµå¼å“åŗ”ęµ‹čÆ•** - - ę–‡ęœ¬ęµå¼č¾“å‡ŗ - - å·„å…·č°ƒē”Øäø­ę–­ę–‡ęœ¬ęµ - - å®Œęˆäæ”å·å¤„ē† - -4. **错误处理测试** - - SDK ęœŖå®‰č£…é”™čÆÆ - - API 密钄错误 - - ē½‘ē»œé”™čÆÆ - - å·„å…·ę‰§č”Œé”™čÆÆ - -5. **ä¼ščÆē®”ē†ęµ‹čÆ•** - - ä¼ščÆåˆ›å»ŗå’Œé‡ē”Ø - - ä¼ščÆč¶…ę—¶ęø…ē† - - å¹¶å‘ä¼ščÆå¤„ē† - -## å‚č€ƒčµ„ęŗ - -- [Claude Agent SDK Python 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python#claudesdkclient) -- [AG-UI Protocol 文攣](https://docs.ag-ui.com/) -- ADK Middleware å®žēŽ°å‚č€ƒ: `integrations/adk-middleware/python/` - -## ęµ‹čÆ•å®žę–½ēŠ¶ę€ - -### āœ… ęµ‹čÆ•ę”†ęž¶ę­å»ŗå®Œęˆ - -1. **pytest.ini** - pytest é…ē½®ę–‡ä»¶å·²åˆ›å»ŗ -2. **conftest.py** - ęµ‹čÆ•č¾…åŠ©ęØ”å—å’Œ fixtures å·²åˆ›å»ŗ - - SessionManager é‡ē½® fixture - - Mock Claude SDK client fixtures - - 示例 RunAgentInput 和 Tool fixtures - -### āœ… å•å…ƒęµ‹čÆ•å®žēŽ°å®Œęˆ - -1. **test_claude_agent.py** - 17 个测试用例 - - āœ… 11 äøŖé€ščæ‡ļ¼šåˆå§‹åŒ–ć€é…ē½®ć€ę¶ˆęÆęå–ć€å®¢ęˆ·ē«Æåˆ›å»ŗ - - āš ļø 6 äøŖå¤±č“„ļ¼šéœ€č¦äæ®å¤ Mock ē­–ē•„å’Œē±»åž‹ę£€ęŸ„ - -2. **test_event_translator.py** - 14 个测试用例 - - āœ… 8 äøŖé€ščæ‡ļ¼šåˆå§‹åŒ–ć€ę–‡ęœ¬å—č½¬ę¢ć€å·„å…·č°ƒē”Øč½¬ę¢ - - āš ļø 6 个失蓄:Mock åÆ¹č±”ēš„ isinstance ę£€ęŸ„é—®é¢˜ - -3. **test_session_manager.py** - 16 个测试用例 - - āœ… 8 äøŖé€ščæ‡ļ¼šä¼ščÆåˆ›å»ŗć€ēŠ¶ę€ę›“ę–°ć€ę¶ˆęÆčæ½čøŖ - - āš ļø 8 äøŖå¤±č“„ļ¼šē¼ŗå°‘č¾…åŠ©ę–¹ę³•ļ¼ˆget_state_value, set_state_value 等) - -4. **test_tool_adapter.py** - 9 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ9/9) - -5. **test_endpoint.py** - 6 个测试用例 - - āœ… å…ØéƒØé€ščæ‡ļ¼ˆ6/6) - -### āœ… é›†ęˆęµ‹čÆ•å®žēŽ°å®Œęˆ - -1. **test_integration_basic.py** - 3 个测试用例 - - āš ļø éœ€č¦äæ®å¤ Mock ē­–ē•„ - -2. **test_integration_tools.py** - 2 个测试用例 - - āš ļø éœ€č¦äæ®å¤ Mock ē­–ē•„ - -3. **test_integration_sessions.py** - 3 个测试用例 - - āœ… 1 äøŖé€ščæ‡ - - āš ļø 2 äøŖéœ€č¦äæ®å¤ - -4. **test_real_api.py** - 2 äøŖęµ‹čÆ•ē”Øä¾‹ļ¼ˆåÆé€‰ļ¼‰ - - āœ… ę­£ē”®č·³čæ‡ļ¼ˆéœ€č¦ ANTHROPIC_API_KEY) - -### ęµ‹čÆ•ę‰§č”Œē»“ęžœ - -- **总测试数**: 72 -- **é€ščæ‡**: 47 (65%) -- **失蓄**: 23 (32%) -- **跳过**: 2 (3%) - -### éœ€č¦äæ®å¤ēš„é—®é¢˜ - -1. **SessionManager 缺失方法**(8 个测试失蓄) - - `get_state_value()` - čŽ·å–ēŠ¶ę€å€¼ - - `set_state_value()` - č®¾ē½®ēŠ¶ę€å€¼ - - `remove_state_keys()` - ē§»é™¤ēŠ¶ę€é”® - - `get_session_count()` - čŽ·å–ä¼ščÆę•°é‡ - - `get_user_session_count()` - čŽ·å–ē”Øęˆ·ä¼ščÆę•°é‡ - - `clear_session_state()` - ęø…é™¤ä¼ščÆēŠ¶ę€ - -2. **EventTranslator ē±»åž‹ę£€ęŸ„**(8 个测试失蓄) - - Mock 对豔无法使用 `isinstance()` ę£€ęŸ„ - - éœ€č¦ä½æē”Ø `hasattr()` ęˆ–ę”¹čæ› Mock ē­–ē•„ - -3. **é›†ęˆęµ‹čÆ• Mock ē­–ē•„**(6 个测试失蓄) - - éœ€č¦ę”¹čæ› Mock åÆ¹č±”ēš„ē±»åž‹ęØ”ę‹Ÿ - - äæ®å¤å¼‚ę­„ē”Ÿęˆå™Øēš„ Mock - -## 下一歄 - -1. āœ… ~~čæč”Œå®žé™…ęµ‹čÆ•éŖŒčÆå®žēŽ°~~ - å·²å®Œęˆęµ‹čÆ•ę”†ęž¶ę­å»ŗå’Œęµ‹čÆ•ę‰§č”Œ -2. šŸ”„ ę ¹ę®ęµ‹čÆ•ē»“ęžœå¾®č°ƒå®žēŽ°ē»†čŠ‚ - čæ›č”Œäø­ - - 添加 SessionManager 缺失方法 - - äæ®å¤ EventTranslator ē±»åž‹ę£€ęŸ„ - - ę”¹čæ›é›†ęˆęµ‹čÆ• Mock ē­–ē•„ -3. ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē† -4. ä¼˜åŒ–ę€§čƒ½å’Œčµ„ęŗä½æē”Ø -5. å®Œå–„ę–‡ę”£å’Œē¤ŗä¾‹ - diff --git a/integrations/claude-agent-sdk/python/USAGE_GUIDE.md b/integrations/claude-agent-sdk/python/USAGE_GUIDE.md deleted file mode 100644 index 9c1bf992c..000000000 --- a/integrations/claude-agent-sdk/python/USAGE_GUIDE.md +++ /dev/null @@ -1,369 +0,0 @@ -# Claude Agent SDK é›†ęˆä½æē”ØęŒ‡å— - -ęœ¬ęŒ‡å—å°†åø®åŠ©ę‚Øåæ«é€ŸåÆåŠØå’Œęµ‹čÆ• Claude Agent SDK äøŽ AG-UI Protocol ēš„é›†ęˆć€‚ - -## å‰ē½®č¦ę±‚ - -1. **Python 3.9 ęˆ–ę›“é«˜ē‰ˆęœ¬** -2. **Anthropic API Key** - 从 [Anthropic Console](https://console.anthropic.com/) čŽ·å– -3. **Git** - ē”ØäŗŽå…‹éš†ä»“åŗ“ļ¼ˆå¦‚ęžœå°šęœŖå…‹éš†ļ¼‰ - -## åæ«é€Ÿå¼€å§‹ - -### 1. å®‰č£…ä¾čµ– - -```bash -# čæ›å…„é›†ęˆē›®å½• -cd integrations/claude-agent-sdk/python - -# åˆ›å»ŗč™šę‹ŸēŽÆå¢ƒļ¼ˆęŽØčļ¼‰ -python -m venv venv -source venv/bin/activate # Windows: venv\Scripts\activate - -# å®‰č£…åŒ… -pip install . -``` - -ęˆ–č€…ä½æē”Ø `uv`: - -```bash -uv pip install . -``` - -### 2. é…ē½® API Key - -设置 Anthropic API Key ēŽÆå¢ƒå˜é‡ļ¼š - -```bash -# Option 1: 使用 AUTH_TOKEN 和 BASE_URLļ¼ˆęŽØčļ¼‰ -export ANTHROPIC_AUTH_TOKEN=your-auth-token-here -export ANTHROPIC_BASE_URL=https://api.anthropic.com - -# Option 2: 使用 API Keyļ¼ˆåŽå¤‡ę–¹å¼ļ¼‰ -export ANTHROPIC_API_KEY=your-api-key-here -``` - -### 3. åÆåŠØęœåŠ”å™Ø - -#### ę–¹å¼ 1: ē›“ęŽ„čæč”Œē¤ŗä¾‹ęœåŠ”å™Ø - -```bash -cd examples/server -python fastapi_server.py -``` - -#### ę–¹å¼ 2: 使用 uvicorn - -```bash -# ä»Žé”¹ē›®ę ¹ē›®å½• -uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8000 - -# ęˆ–č€…ä»Ž python 目录 -cd integrations/claude-agent-sdk/python -uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8000 -``` - -ęœåŠ”å™ØåÆåŠØåŽļ¼Œę‚Øåŗ”čÆ„ēœ‹åˆ°ļ¼š - -``` -INFO: Started server process [xxxxx] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) -``` - -### 4. éŖŒčÆęœåŠ”å™Øčæč”Œ - -ęœåŠ”å™Øå°†åœØä»„äø‹ē«Æē‚¹ęä¾› AG-UI åč®®ę”ÆęŒļ¼š - -- **AG-UI 端点**: `http://localhost:8000/chat` -- **API 文攣**: `http://localhost:8000/docs` (FastAPI č‡ŖåŠØē”Ÿęˆēš„ę–‡ę”£) - -## 测试方法 - -### 方法 1: 使用 curl ęµ‹čÆ•ļ¼ˆåŸŗē”€ęµ‹čÆ•ļ¼‰ - -```bash -curl -X POST http://localhost:8000/chat \ - -H "Content-Type: application/json" \ - -d '{ - "threadId": "test-thread-1", - "runId": "test-run-1", - "messages": [ - { - "id": "msg-1", - "role": "user", - "content": "Hello! Can you introduce yourself?" - } - ], - "tools": [], - "context": [], - "state": {}, - "forwardedProps": {} - }' -``` - -### 方法 2: ä½æē”Øęä¾›ēš„ęµ‹čÆ•č„šęœ¬ļ¼ˆęŽØčļ¼‰ - -é”¹ē›®åŒ…å«äø€äøŖē®€å•ēš„ęµ‹čÆ•č„šęœ¬ļ¼ŒåÆä»„ē›“ęŽ„ä½æē”Øļ¼š - -```bash -# å®‰č£…ä¾čµ–ļ¼ˆå¦‚ęžœéœ€č¦ļ¼‰ -pip install aiohttp - -# åŸŗęœ¬ęµ‹čÆ• -python examples/test_client.py - -# äŗ¤äŗ’å¼ęØ”å¼ļ¼ˆęŽØčļ¼‰ -python examples/test_client.py --interactive - -# č‡Ŗå®šä¹‰ęœåŠ”å™Øåœ°å€ -python examples/test_client.py --server http://localhost:8001/chat -``` - -äŗ¤äŗ’å¼ęØ”å¼å…č®øę‚Øļ¼š -- č¾“å…„ę¶ˆęÆäøŽ agent åÆ¹čÆ -- å®žę—¶ęŸ„ēœ‹ęµå¼å“åŗ” -- 输兄 `quit` ꈖ `exit` 退出 - -### 方法 3: 使用 AG-UI TypeScript 客户端 - -å¦‚ęžœę‚Øęœ‰ Node.js ēŽÆå¢ƒļ¼ŒåÆä»„ä½æē”Ø AG-UI TypeScript 客户端: - -```bash -# å®‰č£…ä¾čµ– -cd apps/client-cli-example -pnpm install - -# 修改 agent.ts ęŒ‡å‘ę‚Øēš„ęœåŠ”å™Ø -# ē„¶åŽčæč”Œå®¢ęˆ·ē«Æ -pnpm start -``` - -### 方法 4: ä½æē”Øé›†ęˆęµ‹čÆ•ļ¼ˆå¼€å‘ęµ‹čÆ•ļ¼‰ - -é”¹ē›®åŒ…å«å®Œę•“ēš„ęµ‹čÆ•å„—ä»¶ļ¼ŒåÆä»„ē›“ęŽ„čæč”Œļ¼š - -```bash -# 从 python ē›®å½•čæč”Œę‰€ęœ‰ęµ‹čÆ• -cd integrations/claude-agent-sdk/python -pytest - -# čæč”Œē‰¹å®šęµ‹čÆ•ę–‡ä»¶ -pytest tests/test_integration_basic.py - -# čæč”ŒēœŸå®ž API ęµ‹čÆ•ļ¼ˆéœ€č¦é…ē½® API Key) -pytest tests/test_real_api.py -m integration -``` - -## 使用巄具 - -### 定义巄具 - -AG-UI å·„å…·ä¼šč‡ŖåŠØč½¬ę¢äøŗ Claude SDK ę ¼å¼ć€‚ē¤ŗä¾‹ļ¼š - -```python -from ag_ui.core import Tool -from ag_ui_claude import ClaudeAgent, add_claude_fastapi_endpoint -from fastapi import FastAPI - -# å®šä¹‰äø€äøŖå¤©ę°”å·„å…· -weather_tool = Tool( - name="get_current_weather", - description="Get the current weather in a given location", - parameters={ - "type": "object", - "properties": { - "location": { - "type": "string", - "description": "The city and state" - }, - "unit": { - "type": "string", - "enum": ["celsius", "fahrenheit"] - } - }, - "required": ["location"] - } -) - -# åˆ›å»ŗ agent å¹¶ę·»åŠ å·„å…· -agent = ClaudeAgent( - use_persistent_sessions=True, - app_name="weather_app" -) - -app = FastAPI() -add_claude_fastapi_endpoint( - app, - agent, - path="/chat", - tools=[weather_tool] # å·„å…·ä¼šč‡ŖåŠØč½¬ę¢ -) -``` - -### å®¢ęˆ·ē«Æå·„å…· vs ęœåŠ”å™Øå·„å…· - -- **å®¢ęˆ·ē«Æå·„å…·**: ē”±å®¢ęˆ·ē«Æę‰§č”Œēš„å·„å…·ļ¼Œé€ščæ‡ `ToolCall` äŗ‹ä»¶å‘é€ē»™å®¢ęˆ·ē«Æ -- **ęœåŠ”å™Øå·„å…·**: åœØęœåŠ”å™Øē«Æę‰§č”Œēš„å·„å…·ļ¼ŒåÆä»„ē›“ęŽ„åœØ Claude SDK äø­ę³Øå†Œ - -## é…ē½®é€‰é”¹ - -### åŸŗęœ¬é…ē½® - -```python -from ag_ui_claude import ClaudeAgent -from claude_agent_sdk import ClaudeAgentOptions - -agent = ClaudeAgent( - # ä½æē”ØęŒä¹…ä¼ščÆļ¼ˆęŽØčē”ØäŗŽå¤šč½®åÆ¹čÆļ¼‰ - use_persistent_sessions=True, - - # åŗ”ē”Øåē§° - app_name="my_app", - - # åÆé€‰ēš„ Claude SDK é…ē½® - claude_options=ClaudeAgentOptions( - system_prompt="You are a helpful assistant", - permission_mode='acceptEdits', - max_tokens=4096, - temperature=0.7 - ), - - # ę‰§č”Œč¶…ę—¶ļ¼ˆē§’ļ¼‰ - execution_timeout_seconds=600, - - # ęœ€å¤§å¹¶å‘ę‰§č”Œę•° - max_concurrent_executions=10, - - # ä¼ščÆč¶…ę—¶ļ¼ˆē§’ļ¼‰ - session_timeout_seconds=1200, - - # ęø…ē†é—“éš”ļ¼ˆē§’ļ¼‰ - cleanup_interval_seconds=300 -) -``` - -### ę— ēŠ¶ę€ęØ”å¼ - -åÆ¹äŗŽē®€å•ēš„å•ę¬”ęŸ„čÆ¢ļ¼ŒåÆä»„ä½æē”Øę— ēŠ¶ę€ęØ”å¼ļ¼š - -```python -agent = ClaudeAgent( - use_persistent_sessions=False, # 使用 query() 函数 - app_name="stateless_app" -) -``` - -čÆ¦ē»†é…ē½®é€‰é”¹čÆ·å‚č€ƒ [CONFIGURATION.md](./CONFIGURATION.md)怂 - -## ē›“ęŽ„ä½æē”Ø ClaudeAgentļ¼ˆäøé€ščæ‡ FastAPI) - -ę‚Øä¹ŸåÆä»„ē›“ęŽ„ä½æē”Ø `ClaudeAgent` ē±»ļ¼Œę— éœ€åÆåŠØęœåŠ”å™Øļ¼š - -```python -import asyncio -from ag_ui_claude import ClaudeAgent -from ag_ui.core import RunAgentInput, UserMessage -from claude_agent_sdk import ClaudeAgentOptions - -async def main(): - # åˆ›å»ŗ agent - agent = ClaudeAgent( - use_persistent_sessions=True, - app_name="demo_app", - user_id="demo_user", - claude_options=ClaudeAgentOptions( - system_prompt="You are a helpful assistant." - ) - ) - - # åˆ›å»ŗč¾“å…„ - input_data = RunAgentInput( - thread_id="thread_001", - run_id="run_001", - messages=[ - UserMessage(id="1", role="user", content="Hello!") - ], - context=[], - state={}, - tools=[], - forwarded_props={} - ) - - # čæč”Œå¹¶å¤„ē†äŗ‹ä»¶ - async for event in agent.run(input_data): - print(f"Event: {event.type}") - if hasattr(event, 'delta'): - print(f"Content: {event.delta}") - -if __name__ == "__main__": - asyncio.run(main()) -``` - -## ꕅ障ꎒ除 - -### 1. API Key 错误 - -å¦‚ęžœé‡åˆ°č®¤čÆé”™čÆÆļ¼š - -```bash -# ē”®äæč®¾ē½®äŗ†ę­£ē”®ēš„ēŽÆå¢ƒå˜é‡ -echo $ANTHROPIC_API_KEY # ꈖ -echo $ANTHROPIC_AUTH_TOKEN - -# å¦‚ęžœęœŖč®¾ē½®ļ¼ŒčÆ·č®¾ē½®ļ¼š -export ANTHROPIC_API_KEY=your-api-key-here -``` - -### 2. ē«Æå£č¢«å ē”Ø - -å¦‚ęžœ 8000 ē«Æå£č¢«å ē”Øļ¼š - -```bash -# ä½æē”Øå…¶ä»–ē«Æå£ -uvicorn examples.server.fastapi_server:app --host 0.0.0.0 --port 8001 -``` - -### 3. 导兄错误 - -å¦‚ęžœé‡åˆ°åÆ¼å…„é”™čÆÆļ¼š - -```bash -# ē”®äæå·²å®‰č£…åŒ… -pip install -e . - -# ę£€ęŸ„ Python ē‰ˆęœ¬ -python --version # åŗ”čÆ„ę˜Æ 3.9+ -``` - -### 4. čæžęŽ„č¶…ę—¶ - -å¦‚ęžœé‡åˆ°čæžęŽ„č¶…ę—¶ļ¼š - -- ę£€ęŸ„ē½‘ē»œčæžęŽ„ -- 甮认 Anthropic API ē«Æē‚¹åÆč®æé—® -- ę£€ęŸ„é˜²ē«å¢™č®¾ē½® -- å¢žåŠ č¶…ę—¶ę—¶é—“é…ē½® - -## 下一歄 - -- šŸ“– é˜…čÆ» [ARCHITECTURE.md](./ARCHITECTURE.md) äŗ†č§£ęž¶ęž„č®¾č®” -- āš™ļø ęŸ„ēœ‹ [CONFIGURATION.md](./CONFIGURATION.md) äŗ†č§£čÆ¦ē»†é…ē½®é€‰é”¹ -- 🧪 čæč”Œęµ‹čÆ•å„—ä»¶éŖŒčÆåŠŸčƒ½ -- šŸ”§ ęŸ„ēœ‹ [README.md](./README.md) äŗ†č§£ę›“å¤šē¤ŗä¾‹ - -## å‚č€ƒčµ„ęŗ - -- [AG-UI Protocol 文攣](https://ag-ui-protocol.github.io/ag-ui/) -- [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python) -- [FastAPI 文攣](https://fastapi.tiangolo.com/) - -## čŽ·å–åø®åŠ© - -å¦‚ęžœé‡åˆ°é—®é¢˜ļ¼š - -1. ęŸ„ēœ‹ [IMPLEMENTATION_PLAN.md](../IMPLEMENTATION_PLAN.md) äŗ†č§£å®žēŽ°ēŠ¶ę€ -2. ę£€ęŸ„ęµ‹čÆ•ē”Øä¾‹äŗ†č§£ę­£ē”®ē”Øę³• -3. ęŸ„ēœ‹ GitHub Issues ęˆ–åˆ›å»ŗę–° Issue - diff --git a/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py b/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py index 9db541feb..8c022a1cf 100644 --- a/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py +++ b/integrations/claude-agent-sdk/python/examples/server/fastapi_server.py @@ -53,7 +53,7 @@ # Example 1: Using persistent sessions (ClaudeSDKClient) - RECOMMENDED # Supports multi-turn conversations, interrupts, hooks, custom tools, etc. -# See: https://docs.claude.com/zh-CN/api/agent-sdk/python#在-query-和-claudesdkclient-之闓选择 +# See: https://docs.claude.com/api/agent-sdk/python#choosing-between-query-and-claudesdkclient agent = ClaudeAgent( use_persistent_sessions=True, # Use ClaudeSDKClient for full features app_name="example_app", diff --git a/integrations/claude-agent-sdk/python/examples/test_client.py b/integrations/claude-agent-sdk/python/examples/test_client.py index 9fa1b0e45..9940b8648 100644 --- a/integrations/claude-agent-sdk/python/examples/test_client.py +++ b/integrations/claude-agent-sdk/python/examples/test_client.py @@ -7,10 +7,10 @@ import sys import os -# ę£€ęŸ„ēŽÆå¢ƒå˜é‡ +# Check environment variables if not os.getenv("ANTHROPIC_API_KEY") and not os.getenv("ANTHROPIC_AUTH_TOKEN"): - print("āŒ 错误: 请设置 ANTHROPIC_API_KEY ꈖ ANTHROPIC_AUTH_TOKEN ēŽÆå¢ƒå˜é‡") - print("\n示例:") + print("āŒ Error: Please set ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN environment variable") + print("\nExample:") print(" export ANTHROPIC_API_KEY=your-api-key-here") sys.exit(1) @@ -18,8 +18,8 @@ async def test_basic_conversation(): - """ęµ‹čÆ•åŸŗęœ¬åÆ¹čÆåŠŸčƒ½""" - print(f"šŸ“” čæžęŽ„åˆ°ęœåŠ”å™Ø: {SERVER_URL}") + """Test basic conversation functionality""" + print(f"šŸ“” Connecting to server: {SERVER_URL}") print("=" * 60) url = SERVER_URL @@ -44,39 +44,39 @@ async def test_basic_conversation(): async with aiohttp.ClientSession() as session: async with session.post(url, json=payload) as response: if response.status != 200: - print(f"āŒ 错误: HTTP {response.status}") + print(f"āŒ Error: HTTP {response.status}") text = await response.text() - print(f"å“åŗ”: {text}") + print(f"Response: {text}") return - print("āœ… čæžęŽ„ęˆåŠŸ! ē­‰å¾…å“åŗ”...\n") + print("āœ… Connection successful! Waiting for response...\n") print("šŸ¤– Assistant: ", end="", flush=True) - # čÆ»å– SSE 굁 + # Read SSE stream buffer = "" async for chunk in response.content.iter_chunked(1024): if chunk: buffer += chunk.decode('utf-8') lines = buffer.split('\n') - buffer = lines[-1] # äæē•™äøå®Œę•“ēš„č”Œ + buffer = lines[-1] # Keep incomplete line for line in lines[:-1]: line = line.strip() if line.startswith('data: '): - data = line[6:] # 移除 'data: ' å‰ē¼€ + data = line[6:] # Remove 'data: ' prefix try: event = json.loads(data) event_type = event.get('type', 'unknown') - # å¤„ē†ę–‡ęœ¬å†…å®¹ + # Handle text content if 'delta' in event: print(event['delta'], end="", flush=True) elif event_type == 'TEXT_MESSAGE_END': print("\n") elif event_type == 'RUN_FINISHED': - print("\nāœ… åÆ¹čÆå®Œęˆ!") + print("\nāœ… Conversation completed!") elif event_type == 'RUN_ERROR': - print(f"\nāŒ 错误: {event.get('error', 'Unknown error')}") + print(f"\nāŒ Error: {event.get('error', 'Unknown error')}") except json.JSONDecodeError: pass @@ -84,20 +84,20 @@ async def test_basic_conversation(): print("\n" + "=" * 60) except aiohttp.ClientConnectorError: - print(f"āŒ 错误: ę— ę³•čæžęŽ„åˆ°ęœåŠ”å™Ø {SERVER_URL}") - print("\nčÆ·ē”®äæ:") - print(" 1. ęœåŠ”å™Øę­£åœØčæč”Œ (python examples/server/fastapi_server.py)") - print(" 2. ęœåŠ”å™Øåœ°å€ę­£ē”®") - print(" 3. é˜²ē«å¢™å…č®øčæžęŽ„") + print(f"āŒ Error: Cannot connect to server {SERVER_URL}") + print("\nPlease ensure:") + print(" 1. Server is running (python examples/server/fastapi_server.py)") + print(" 2. Server address is correct") + print(" 3. Firewall allows connection") except Exception as e: - print(f"āŒ 错误: {type(e).__name__}: {e}") + print(f"āŒ Error: {type(e).__name__}: {e}") async def test_interactive_mode(): - """äŗ¤äŗ’å¼ęµ‹čÆ•ęØ”å¼""" - print(f"šŸ“” čæžęŽ„åˆ°ęœåŠ”å™Ø: {SERVER_URL}") + """Interactive test mode""" + print(f"šŸ“” Connecting to server: {SERVER_URL}") print("=" * 60) - print("šŸ’” ęē¤ŗ: č¾“å…„ę¶ˆęÆå¹¶ęŒ‰ Enterļ¼Œč¾“å…„ 'quit' 退出") + print("šŸ’” Tip: Enter a message and press Enter, type 'quit' to exit") print("=" * 60) thread_id = f"interactive-{os.getpid()}" @@ -111,7 +111,7 @@ async def test_interactive_mode(): continue if user_input.lower() in ['quit', 'exit', 'q']: - print("\nšŸ‘‹ å†č§!") + print("\nšŸ‘‹ Goodbye!") break run_counter += 1 @@ -136,7 +136,7 @@ async def test_interactive_mode(): async with aiohttp.ClientSession() as session: async with session.post(url, json=payload) as response: if response.status != 200: - print(f"āŒ 错误: HTTP {response.status}") + print(f"āŒ Error: HTTP {response.status}") continue print("šŸ¤– Assistant: ", end="", flush=True) @@ -157,35 +157,35 @@ async def test_interactive_mode(): if 'delta' in event: print(event['delta'], end="", flush=True) elif event.get('type') == 'RUN_ERROR': - print(f"\nāŒ 错误: {event.get('error', 'Unknown error')}") + print(f"\nāŒ Error: {event.get('error', 'Unknown error')}") break except json.JSONDecodeError: pass - print() # ę¢č”Œ + print() # New line except KeyboardInterrupt: - print("\n\nšŸ‘‹ å†č§!") + print("\n\nšŸ‘‹ Goodbye!") except Exception as e: - print(f"\nāŒ 错误: {type(e).__name__}: {e}") + print(f"\nāŒ Error: {type(e).__name__}: {e}") def main(): - """主函数""" + """Main function""" import argparse parser = argparse.ArgumentParser( - description="测试 Claude Agent SDK 集ꈐ", + description="Test Claude Agent SDK integration", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" -示例: - # åŸŗęœ¬ęµ‹čÆ• +Examples: + # Basic test python test_client.py - # äŗ¤äŗ’å¼ęØ”å¼ + # Interactive mode python test_client.py --interactive - # č‡Ŗå®šä¹‰ęœåŠ”å™Øåœ°å€ + # Custom server address python test_client.py --server http://localhost:8001/chat """ ) @@ -193,13 +193,13 @@ def main(): parser.add_argument( '-i', '--interactive', action='store_true', - help='åÆē”Øäŗ¤äŗ’å¼ęØ”å¼' + help='Enable interactive mode' ) parser.add_argument( '-s', '--server', default=SERVER_URL, - help=f'ęœåŠ”å™Øåœ°å€ (默认: {SERVER_URL})' + help=f'Server address (default: {SERVER_URL})' ) args = parser.parse_args() @@ -215,4 +215,3 @@ def main(): if __name__ == "__main__": main() - diff --git a/integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md b/integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md deleted file mode 100644 index a5b6e6c3e..000000000 --- a/integrations/claude-agent-sdk/typescript/IMPLEMENTATION_SUMMARY.md +++ /dev/null @@ -1,239 +0,0 @@ -# Claude Agent SDK TypeScript å®žēŽ°ę€»ē»“ - -## é”¹ē›®ēŠ¶ę€ - -āœ… **å…ØéƒØå®Œęˆ** - ꉀ꜉ 13 äøŖ todo é”¹ē›®å·²å®Œęˆ - -## å®žēŽ°å†…å®¹ - -### 1. é”¹ē›®ē»“ęž„ āœ… - -åˆ›å»ŗäŗ†å®Œę•“ēš„é”¹ē›®ē»“ęž„ļ¼š -- `src/` - 源代码目录 - - `agent.ts` - äø» Agent ē±» - - `event-translator.ts` - äŗ‹ä»¶č½¬ę¢å™Ø - - `session-manager.ts` - ä¼ščÆē®”ē†å™Ø - - `tool-adapter.ts` - å·„å…·é€‚é…å™Ø - - `execution-state.ts` - ę‰§č”ŒēŠ¶ę€ē®”ē† - - `types.ts` - TypeScript ē±»åž‹å®šä¹‰ - - `utils/converters.ts` - ę¶ˆęÆę ¼å¼č½¬ę¢å·„å…· - - `index.ts` - 主导出文件 -- `__tests__/` - 测试目录 - - å•å…ƒęµ‹čÆ•ļ¼ˆ4 äøŖę–‡ä»¶ļ¼Œēŗ¦ 50+ 个测试用例) - - é›†ęˆęµ‹čÆ•ļ¼ˆ3 äøŖę–‡ä»¶ļ¼Œēŗ¦ 10+ 个测试用例) -- `examples/` - 示例代码 - - Express ęœåŠ”å™Øē¤ŗä¾‹ -- é…ē½®ę–‡ä»¶ - - `package.json` - - `tsconfig.json` - - `tsup.config.ts` - - `jest.config.js` - -### 2. ę øåæƒē»„ä»¶ āœ… - -#### ClaudeAgent (`agent.ts`) -- 继承自 `AbstractAgent` -- å®žēŽ° `run()` ę–¹ę³•čæ”å›ž Observable -- ę”ÆęŒęŒä¹…ä¼ščÆęØ”å¼ļ¼ˆä½æē”Ø `ClaudeSDKClient`) -- ę”ÆęŒę— ēŠ¶ę€ęØ”å¼ļ¼ˆä½æē”Ø `query()` 函数) -- åŠØę€åÆ¼å…„ Claude SDK -- å®Œę•“ēš„é”™čÆÆå¤„ē†å’Œčµ„ęŗęø…ē† - -#### EventTranslator (`event-translator.ts`) -- č½¬ę¢ Claude SDK 消息为 AG-UI äŗ‹ä»¶ -- ę”ÆęŒę‰€ęœ‰å†…å®¹å—ē±»åž‹ļ¼š - - `TextBlock` → ę–‡ęœ¬ę¶ˆęÆäŗ‹ä»¶ - - `ToolUseBlock` → å·„å…·č°ƒē”Øäŗ‹ä»¶ - - `ToolResultBlock` → å·„å…·ē»“ęžœäŗ‹ä»¶ - - `ResultMessage` → 完成/错误事件 -- č‡ŖåŠØē”Ÿęˆå”Æäø€ę¶ˆęÆ ID - -#### SessionManager (`session-manager.ts`) -- å•ä¾‹ęØ”å¼å®žēŽ° -- ä¼ščÆē”Ÿå‘½å‘ØęœŸē®”ē† -- ę¶ˆęÆåŽ»é‡č·ŸčøŖ -- ēŠ¶ę€ē®”ē†ļ¼ˆget/set/remove) -- č‡ŖåŠØęø…ē†čæ‡ęœŸä¼ščÆ -- ę”ÆęŒē”Øęˆ·éš”ē¦» - -#### ToolAdapter (`tool-adapter.ts`) -- AG-UI Tool → Claude SDK MCP Tool č½¬ę¢ -- JSON Schema → Zod Schema č½¬ę¢ -- ę”ÆęŒę‰€ęœ‰åŸŗęœ¬ē±»åž‹ļ¼ˆstring, number, boolean, array, object) -- å·„å…·åē§°ę ¼å¼åŒ–ļ¼ˆMCP å‰ē¼€ļ¼‰ -- å®¢ęˆ·ē«Æå·„å…·å’ŒåŽē«Æå·„å…·ę”ÆęŒ - -#### ExecutionState (`execution-state.ts`) -- ę‰§č”ŒēŠ¶ę€č·ŸčøŖ -- äŗ‹ä»¶ę”¶é›†å’Œē®”ē† -- ę‰§č”Œē»Ÿč®” -- äø­ę­¢äæ”å·ę”ÆęŒ - -### 3. 测试覆盖 āœ… - -#### å•å…ƒęµ‹čÆ•ļ¼ˆēŗ¦ 50+ 个测试用例) - -**tool-adapter.test.ts** - 15 个测试 -- å·„å…·č½¬ę¢ęµ‹čÆ• -- JSON Schema č½¬ę¢ęµ‹čÆ• -- MCP ęœåŠ”å™Øåˆ›å»ŗęµ‹čÆ• -- å·„å…·åē§°ę ¼å¼åŒ–ęµ‹čÆ• -- å·„å…·ęå–ęµ‹čÆ• - -**session-manager.test.ts** - 18 个测试 -- å•ä¾‹ęØ”å¼ęµ‹čÆ• -- ä¼ščÆ CRUD 测试 -- ę¶ˆęÆč·ŸčøŖęµ‹čÆ• -- ēŠ¶ę€ē®”ē†ęµ‹čÆ• -- ä¼ščÆęø…ē†ęµ‹čÆ• - -**event-translator.test.ts** - 14 个测试 -- å„ē§ę¶ˆęÆē±»åž‹č½¬ę¢ęµ‹čÆ• -- ę–‡ęœ¬å—č½¬ę¢ęµ‹čÆ• -- å·„å…·č°ƒē”Øč½¬ę¢ęµ‹čÆ• -- å·„å…·ē»“ęžœč½¬ę¢ęµ‹čÆ• -- 消息 ID ē”Ÿęˆęµ‹čÆ• - -**agent.test.ts** - 12 个测试 -- Agent åˆå§‹åŒ–ęµ‹čÆ• -- ę‰§č”ŒęµēØ‹ęµ‹čÆ• -- äŗ‹ä»¶å‘å°„ęµ‹čÆ• -- å·„å…·é›†ęˆęµ‹čÆ• -- ä¼ščÆē®”ē†ęµ‹čÆ• -- ēŠ¶ę€ęØ”å¼ęµ‹čÆ• -- ę‰§č”Œäø­ę­¢ęµ‹čÆ• - -#### é›†ęˆęµ‹čÆ•ļ¼ˆēŗ¦ 10+ 个测试用例) - -**basic.test.ts** - 3 个测试 -- ē®€å•åÆ¹čÆęµ‹čÆ• -- å¤šč½®åÆ¹čÆęµ‹čÆ• -- 错误处理测试 - -**tools.test.ts** - 3 个测试 -- å·„å…·č°ƒē”Øęµ‹čÆ• -- å·„å…·ē»“ęžœęµ‹čÆ• -- å®¢ęˆ·ē«Æå·„å…·ęµ‹čÆ• - -**sessions.test.ts** - 3 个测试 -- ęŒä¹…ä¼ščÆęµ‹čÆ• -- ę— ēŠ¶ę€ęØ”å¼ęµ‹čÆ• -- ä¼ščÆéš”ē¦»ęµ‹čÆ• - -### 4. 示例代码 āœ… - -#### Express ęœåŠ”å™Øē¤ŗä¾‹ -- å®Œę•“ēš„ SSE ęµå¼å“åŗ”å®žēŽ° -- å·„å…·é›†ęˆē¤ŗä¾‹ļ¼ˆcalculator, weather) -- 错误处理 -- 优雅关闭 -- å„åŗ·ę£€ęŸ„ē«Æē‚¹ - -### 5. 文攣 āœ… - -#### README.md -- ē‰¹ę€§åˆ—č”Ø -- å®‰č£…ęŒ‡å— -- åæ«é€Ÿå¼€å§‹ -- API 文攣 -- äŗ‹ä»¶ē±»åž‹čÆ“ę˜Ž -- å·„å…·ę”ÆęŒčÆ“ę˜Ž -- ä¼ščÆē®”ē†čÆ“ę˜Ž -- ęµ‹čÆ•ęŒ‡å— -- ęž¶ęž„å›¾ - -#### Examples README -- č®¾ē½®čÆ“ę˜Ž -- API 端点文攣 -- ä½æē”Øē¤ŗä¾‹ļ¼ˆcurl) -- åŠŸčƒ½čÆ“ę˜Ž - -## å…³é”®å®žēŽ°ē‰¹ē‚¹ - -### 1. åŸŗäŗŽ Python ē‰ˆęœ¬ -- å®Œå…Øå‚č€ƒ Python å®žēŽ°ēš„ęž¶ęž„ -- äæęŒē›øåŒēš„ē»„ä»¶åˆ’åˆ† -- ē›øåŒēš„äŗ‹ä»¶č½¬ę¢é€»č¾‘ - -### 2. TypeScript 优势 -- å®Œę•“ēš„ē±»åž‹å®šä¹‰ -- é™ę€ē±»åž‹ę£€ęŸ„ -- IDE č‡ŖåŠØč”„å…Øę”ÆęŒ - -### 3. RxJS Observable -- 使用 Observable 替代 AsyncIterator -- ę›“å„½ēš„äŗ‹ä»¶ęµęŽ§åˆ¶ -- äøŽēŽ°ęœ‰ TypeScript é›†ęˆäæęŒäø€č‡“ - -### 4. åŠØę€ SDK 导兄 -- ä½æē”ØåŠØę€ import éæå…ē”¬ä¾čµ– -- ę›“å„½ēš„é”™čÆÆęē¤ŗ -- ę”ÆęŒ SDK åÆé€‰å®‰č£… - -### 5. å®Œę•“ēš„ęµ‹čÆ•č¦†ē›– -- 60+ 个测试用例 -- Mock Claude SDK -- å•å…ƒęµ‹čÆ• + é›†ęˆęµ‹čÆ• - -## äøŽ Python ē‰ˆęœ¬ēš„äø»č¦å·®å¼‚ - -| 特性 | Python | TypeScript | -|------|--------|------------| -| 异歄处理 | AsyncIterator | Observable | -| ē±»åž‹ē³»ē»Ÿ | Pydantic | Zod | -| Schema 验证 | Pydantic | Zod | -| ä¼ščÆē®”ē† | dict | Map | -| 事件流 | async for | subscribe | -| ęµ‹čÆ•ę”†ęž¶ | pytest | jest | - -## 下一歄建议 - -### åÆé€‰ä¼˜åŒ– -1. ę·»åŠ ę›“å¤šé”™čÆÆå¤„ē†åœŗę™Æ -2. ę€§čƒ½ä¼˜åŒ–å’Œčµ„ęŗä½æē”Øē›‘ęŽ§ -3. ę·»åŠ ę—„åæ—ē³»ē»Ÿ -4. 添加 metrics ꔶ集 -5. ę”ÆęŒę›“å¤š Claude SDK 特性 - -### ēœŸå®žęµ‹čÆ• -1. ä½æē”ØēœŸå®žēš„ Claude API 测试 -2. åŽ‹åŠ›ęµ‹čÆ• -3. å¹¶å‘ęµ‹čÆ• -4. é•æę—¶é—“čæč”Œęµ‹čÆ• - -## ę–‡ä»¶ē»Ÿč®” - -- **源代码文件**: 9 个(约 2000+ č”Œļ¼‰ -- **测试文件**: 7 个(约 1500+ č”Œļ¼‰ -- **é…ē½®ę–‡ä»¶**: 4 äøŖ -- **文攣文件**: 3 äøŖ -- **示例文件**: 2 äøŖ - -**ꀻ讔**: 25 个文件 - -## 结论 - -āœ… **TypeScript ē‰ˆęœ¬å®žēŽ°å®Œęˆ** - -ę‰€ęœ‰ę øåæƒåŠŸčƒ½éƒ½å·²å®žēŽ°å¹¶ē»čæ‡ęµ‹čÆ•ļ¼š -- āœ… å®Œę•“ēš„ AG-UI Protocol ę”ÆęŒ -- āœ… Claude SDK 集ꈐ -- āœ… ä¼ščÆē®”ē† -- āœ… å·„å…·ę”ÆęŒ -- āœ… äŗ‹ä»¶č½¬ę¢ -- āœ… 测试覆盖 -- āœ… 示例代码 -- āœ… å®Œę•“ę–‡ę”£ - -čÆ„å®žēŽ°å·²å‡†å¤‡å„½čæ›č”Œļ¼š -- 代码宔柄 -- ēœŸå®ž API 测试 -- ę€§čƒ½ä¼˜åŒ– -- ē”Ÿäŗ§éƒØē½² - -## å‚č€ƒ - -- Python å®žēŽ°: `../python/` -- Claude Agent SDK 文攣: https://docs.claude.com/zh-CN/api/agent-sdk/typescript -- AG-UI Protocol: https://docs.ag-ui.com/ - diff --git a/integrations/claude-agent-sdk/typescript/README.md b/integrations/claude-agent-sdk/typescript/README.md index 5d95ece20..cbe780889 100644 --- a/integrations/claude-agent-sdk/typescript/README.md +++ b/integrations/claude-agent-sdk/typescript/README.md @@ -1,45 +1,45 @@ # @ag-ui/claude -Claude Agent SDK äøŽ AG-UI Protocol ēš„é›†ęˆļ¼Œč®© Claude ä»£ē†čƒ½å¤Ÿę— ē¼å·„ä½œåœØ AG-UI 应用中。 +Integration of Claude Agent SDK with AG-UI Protocol, enabling Claude agents to work seamlessly in AG-UI applications. -## 特性 +## Features -- āœ… **å®Œę•“ēš„ AG-UI Protocol ę”ÆęŒ** - å®žēŽ°ę‰€ęœ‰ę ‡å‡†äŗ‹ä»¶ē±»åž‹ -- āœ… **ęŒä¹…ä¼ščÆē®”ē†** - ę”ÆęŒå¤šč½®åÆ¹čÆå’Œä¼ščÆēŠ¶ę€ē»“ęŠ¤ -- āœ… **å·„å…·é›†ęˆ** - ę”ÆęŒå®¢ęˆ·ē«Æå’ŒåŽē«Æå·„å…· -- āœ… **ęµå¼å“åŗ”** - å®žę—¶ęµå¼ä¼ č¾“ AI å“åŗ” -- āœ… **ę— ēŠ¶ę€ęØ”å¼** - åÆé€‰ēš„ę— ēŠ¶ę€ę‰§č”ŒęØ”å¼ -- āœ… **TypeScript ę”ÆęŒ** - å®Œę•“ēš„ē±»åž‹å®šä¹‰ -- āœ… **åÆč§‚åÆŸåÆ¹č±” API** - åŸŗäŗŽ RxJS Observable ēš„äŗ‹ä»¶ęµ -- āœ… **č‡ŖåŠØä¼ščÆęø…ē†** - č‡ŖåŠØęø…ē†čæ‡ęœŸä¼ščÆ +- āœ… **Full AG-UI Protocol Support** - Implements all standard event types +- āœ… **Persistent Session Management** - Supports multi-turn conversations and session state maintenance +- āœ… **Tool Integration** - Supports both client-side and backend tools +- āœ… **Streaming Responses** - Real-time streaming of AI responses +- āœ… **Stateless Mode** - Optional stateless execution mode +- āœ… **TypeScript Support** - Complete type definitions +- āœ… **Observable API** - RxJS Observable-based event streams +- āœ… **Automatic Session Cleanup** - Automatically cleans up expired sessions -## 安装 +## Installation ```bash npm install @ag-ui/claude @ag-ui/client @ag-ui/core ``` -čæ˜éœ€č¦å®‰č£… Claude Agent SDK: +You also need to install Claude Agent SDK: ```bash npm install @anthropic-ai/claude-agent-sdk ``` -## åæ«é€Ÿå¼€å§‹ +## Quick Start -### åŸŗē”€ē”Øę³• +### Basic Usage ```typescript import { ClaudeAgent } from '@ag-ui/claude'; import type { RunAgentInput } from '@ag-ui/client'; -// 初始化 agent +// Initialize agent const agent = new ClaudeAgent({ apiKey: process.env.ANTHROPIC_API_KEY, enablePersistentSessions: true, }); -// 准备输兄 +// Prepare input const input: RunAgentInput = { agentId: 'my_agent', threadId: 'thread_123', @@ -49,7 +49,7 @@ const input: RunAgentInput = { context: {}, }; -// 运蔌 agent å¹¶č®¢é˜…äŗ‹ä»¶ +// Run agent and subscribe to events agent.run(input).subscribe({ next: (event) => { console.log('Event:', event); @@ -63,7 +63,7 @@ agent.run(input).subscribe({ }); ``` -### 使用巄具 +### Using Tools ```typescript import { ClaudeAgent } from '@ag-ui/claude'; @@ -92,7 +92,7 @@ const input: RunAgentInput = { required: ['operation', 'a', 'b'], }, handler: async ({ operation, a, b }) => { - // åŽē«Æå·„å…·å®žēŽ° + // Backend tool implementation if (operation === 'add') return a + b; // ... }, @@ -110,7 +110,7 @@ agent.run(input).subscribe({ }); ``` -### Express ęœåŠ”å™Øē¤ŗä¾‹ +### Express Server Example ```typescript import express from 'express'; @@ -146,104 +146,104 @@ app.post('/api/run-agent', async (req, res) => { app.listen(3000); ``` -## API 文攣 +## API Documentation ### ClaudeAgent -äø»č¦ēš„ agent ē±»ļ¼Œē»§ę‰æč‡Ŗ `AbstractAgent`怂 +Main agent class that extends `AbstractAgent`. -#### ęž„é€ å‡½ę•° +#### Constructor ```typescript constructor(config: ClaudeAgentConfig) ``` -**é…ē½®é€‰é”¹ļ¼š** +**Configuration Options:** -- `apiKey?: string` - Anthropic API åÆ†é’„ļ¼ˆé»˜č®¤ä»Ž `ANTHROPIC_API_KEY` ēŽÆå¢ƒå˜é‡čÆ»å–ļ¼‰ -- `baseUrl?: string` - API åŸŗē”€ URLļ¼ˆé»˜č®¤ä»Ž `ANTHROPIC_BASE_URL` ēŽÆå¢ƒå˜é‡čÆ»å–ļ¼‰ -- `enablePersistentSessions?: boolean` - ę˜Æå¦åÆē”ØęŒä¹…ä¼ščÆļ¼ˆé»˜č®¤ļ¼š`true`) -- `sessionTimeout?: number` - ä¼ščÆč¶…ę—¶ę—¶é—“ļ¼ˆęÆ«ē§’ļ¼Œé»˜č®¤ļ¼š30 åˆ†é’Ÿļ¼‰ -- `permissionMode?: 'ask' | 'auto' | 'none'` - ęƒé™ęØ”å¼ļ¼ˆé»˜č®¤ļ¼š`'ask'`) +- `apiKey?: string` - Anthropic API key (defaults to `ANTHROPIC_API_KEY` environment variable) +- `baseUrl?: string` - API base URL (defaults to `ANTHROPIC_BASE_URL` environment variable) +- `enablePersistentSessions?: boolean` - Whether to enable persistent sessions (default: `true`) +- `sessionTimeout?: number` - Session timeout in milliseconds (default: 30 minutes) +- `permissionMode?: 'ask' | 'auto' | 'none'` - Permission mode (default: `'ask'`) -#### 方法 +#### Methods ##### `run(input: RunAgentInput): Observable` -运蔌 agent å¹¶čæ”å›žäŗ‹ä»¶ęµēš„ Observable怂 +Runs the agent and returns an Observable of event streams. -**å‚ę•°ļ¼š** +**Parameters:** - `input.agentId: string` - Agent ID -- `input.threadId?: string` - ä¼ščÆ IDļ¼ˆē”ØäŗŽęŒä¹…ä¼ščÆļ¼‰ -- `input.messages: Message[]` - ę¶ˆęÆåŽ†å² -- `input.context?: { tools?: Tool[] }` - äøŠäø‹ę–‡ļ¼ˆåŒ…ę‹¬å·„å…·å®šä¹‰ļ¼‰ +- `input.threadId?: string` - Session ID (for persistent sessions) +- `input.messages: Message[]` - Message history +- `input.context?: { tools?: Tool[] }` - Context (including tool definitions) -**čæ”å›žļ¼š** Observableļ¼Œå‘å‡ŗ AG-UI Protocol äŗ‹ä»¶ +**Returns:** Observable that emits AG-UI Protocol events ##### `abortExecution(runId: string): void` -äø­ę­¢ę­£åœØčæč”Œēš„ę‰§č”Œć€‚ +Aborts a running execution. ##### `cleanup(): Promise` -ęø…ē†ę‰€ęœ‰ä¼ščÆå’Œčµ„ęŗć€‚ +Cleans up all sessions and resources. ### SessionManager -ä¼ščÆē®”ē†å™Øļ¼Œé‡‡ē”Øå•ä¾‹ęØ”å¼ć€‚ +Session manager using singleton pattern. -#### 方法 +#### Methods -- `getInstance(sessionTimeout?: number): SessionManager` - čŽ·å–å•ä¾‹å®žä¾‹ -- `getSession(sessionId: string, userId?: string): Session` - čŽ·å–ęˆ–åˆ›å»ŗä¼ščÆ -- `hasSession(sessionId: string): boolean` - ę£€ęŸ„ä¼ščÆę˜Æå¦å­˜åœØ -- `deleteSession(sessionId: string): boolean` - åˆ é™¤ä¼ščÆ -- `trackMessage(sessionId: string, messageId: string): void` - ę ‡č®°ę¶ˆęÆå·²å¤„ē† -- `getUnseenMessages(sessionId: string, messages: Message[]): Message[]` - čŽ·å–ęœŖå¤„ē†ēš„ę¶ˆęÆ -- `getStateValue(sessionId: string, key: string): any` - čŽ·å–ä¼ščÆēŠ¶ę€å€¼ -- `setStateValue(sessionId: string, key: string, value: any): void` - č®¾ē½®ä¼ščÆēŠ¶ę€å€¼ +- `getInstance(sessionTimeout?: number): SessionManager` - Get singleton instance +- `getSession(sessionId: string, userId?: string): Session` - Get or create session +- `hasSession(sessionId: string): boolean` - Check if session exists +- `deleteSession(sessionId: string): boolean` - Delete session +- `trackMessage(sessionId: string, messageId: string): void` - Mark message as processed +- `getUnseenMessages(sessionId: string, messages: Message[]): Message[]` - Get unprocessed messages +- `getStateValue(sessionId: string, key: string): any` - Get session state value +- `setStateValue(sessionId: string, key: string, value: any): void` - Set session state value ### EventTranslator -äŗ‹ä»¶č½¬ę¢å™Øļ¼Œå°† Claude SDK ę¶ˆęÆč½¬ę¢äøŗ AG-UI 事件。 +Event translator that converts Claude SDK messages to AG-UI events. -#### 方法 +#### Methods -- `translateMessage(message: SDKMessage): ProcessedEvents[]` - č½¬ę¢å•äøŖę¶ˆęÆ +- `translateMessage(message: SDKMessage): ProcessedEvents[]` - Translate a single message ### ToolAdapter -å·„å…·é€‚é…å™Øļ¼Œå¤„ē†å·„å…·ę ¼å¼č½¬ę¢ć€‚ +Tool adapter that handles tool format conversion. -#### é™ę€ę–¹ę³• +#### Static Methods -- `convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[]` - č½¬ę¢å·„å…·åˆ° SDK ę ¼å¼ -- `createMcpServerForTools(tools: Tool[]): McpSdkServerConfigWithInstance` - åˆ›å»ŗ MCP ęœåŠ”å™Ø -- `formatToolNameForSdk(toolName: string, serverName?: string): string` - ę ¼å¼åŒ–å·„å…·åē§° -- `parseToolNameFromSdk(sdkToolName: string): string` - č§£ęžå·„å…·åē§° +- `convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[]` - Convert tools to SDK format +- `createMcpServerForTools(tools: Tool[]): McpSdkServerConfigWithInstance` - Create MCP server +- `formatToolNameForSdk(toolName: string, serverName?: string): string` - Format tool name +- `parseToolNameFromSdk(sdkToolName: string): string` - Parse tool name -## äŗ‹ä»¶ē±»åž‹ +## Event Types -agent å‘å‡ŗä»„äø‹ AG-UI Protocol äŗ‹ä»¶ļ¼š +The agent emits the following AG-UI Protocol events: -- `RunStartedEvent` - ę‰§č”Œå¼€å§‹ -- `RunFinishedEvent` - ę‰§č”Œå®Œęˆ -- `RunErrorEvent` - ę‰§č”Œé”™čÆÆ -- `StepStartedEvent` - 歄骤开始 -- `StepFinishedEvent` - 歄骤完成 -- `TextMessageStartEvent` - ę–‡ęœ¬ę¶ˆęÆå¼€å§‹ -- `TextMessageContentEvent` - ę–‡ęœ¬ę¶ˆęÆå†…å®¹ļ¼ˆęµå¼ļ¼‰ -- `TextMessageEndEvent` - ę–‡ęœ¬ę¶ˆęÆē»“ęŸ -- `ToolCallStartEvent` - å·„å…·č°ƒē”Øå¼€å§‹ -- `ToolCallArgsEvent` - å·„å…·å‚ę•° -- `ToolCallEndEvent` - å·„å…·č°ƒē”Øē»“ęŸ -- `ToolCallResultEvent` - å·„å…·ę‰§č”Œē»“ęžœ +- `RunStartedEvent` - Execution started +- `RunFinishedEvent` - Execution completed +- `RunErrorEvent` - Execution error +- `StepStartedEvent` - Step started +- `StepFinishedEvent` - Step completed +- `TextMessageStartEvent` - Text message started +- `TextMessageContentEvent` - Text message content (streaming) +- `TextMessageEndEvent` - Text message ended +- `ToolCallStartEvent` - Tool call started +- `ToolCallArgsEvent` - Tool arguments +- `ToolCallEndEvent` - Tool call ended +- `ToolCallResultEvent` - Tool execution result -## å·„å…·ę”ÆęŒ +## Tool Support -### åŽē«Æå·„å…· +### Backend Tools -åŽē«Æå·„å…·åœØęœåŠ”å™Øē«Æę‰§č”Œļ¼š +Backend tools are executed on the server side: ```typescript { @@ -251,15 +251,15 @@ agent å‘å‡ŗä»„äø‹ AG-UI Protocol äŗ‹ä»¶ļ¼š description: 'Performs calculations', parameters: { /* JSON Schema */ }, handler: async (args) => { - // 巄具逻辑 + // Tool logic return result; } } ``` -### å®¢ęˆ·ē«Æå·„å…· +### Client Tools -å®¢ęˆ·ē«Æå·„å…·åœØå‰ē«Æę‰§č”Œļ¼Œč®¾ē½® `client: true`: +Client tools are executed on the frontend. Set `client: true`: ```typescript { @@ -270,23 +270,23 @@ agent å‘å‡ŗä»„äø‹ AG-UI Protocol äŗ‹ä»¶ļ¼š } ``` -## ä¼ščÆē®”ē† +## Session Management -### ęŒä¹…ä¼ščÆęØ”å¼ +### Persistent Session Mode -åÆē”ØęŒä¹…ä¼ščÆåŽļ¼Œagent ä¼šäøŗęÆäøŖ `threadId` ē»“ęŠ¤ē‹¬ē«‹ēš„ä¼ščÆļ¼š +When persistent sessions are enabled, the agent maintains independent sessions for each `threadId`: ```typescript const agent = new ClaudeAgent({ apiKey: 'your_key', enablePersistentSessions: true, - sessionTimeout: 30 * 60 * 1000, // 30 分钟 + sessionTimeout: 30 * 60 * 1000, // 30 minutes }); ``` -### ę— ēŠ¶ę€ęØ”å¼ +### Stateless Mode -ē¦ē”ØęŒä¹…ä¼ščÆåŽļ¼ŒęÆę¬”č°ƒē”Øéƒ½ę˜Æē‹¬ē«‹ēš„ļ¼š +When persistent sessions are disabled, each call is independent: ```typescript const agent = new ClaudeAgent({ @@ -295,31 +295,31 @@ const agent = new ClaudeAgent({ }); ``` -## 测试 +## Testing -čæč”Œå•å…ƒęµ‹čÆ•ļ¼š +Run unit tests: ```bash npm test ``` -čæč”Œē‰¹å®šęµ‹čÆ•ļ¼š +Run specific tests: ```bash npm test -- agent.test.ts ``` -## 示例 +## Examples -ęŸ„ēœ‹ `examples/` ē›®å½•čŽ·å–å®Œę•“ēš„ē¤ŗä¾‹ļ¼š +See the `examples/` directory for complete examples: -- **Express Server** - å®Œę•“ēš„ Express.js ęœåŠ”å™Øē¤ŗä¾‹ -- **å·„å…·é›†ęˆ** - åŽē«Æå’Œå®¢ęˆ·ē«Æå·„å…·ē¤ŗä¾‹ -- **ä¼ščÆē®”ē†** - å¤šč½®åÆ¹čÆē¤ŗä¾‹ +- **Express Server** - Complete Express.js server example +- **Tool Integration** - Backend and client tool examples +- **Session Management** - Multi-turn conversation examples -## ęž¶ęž„ +## Architecture -é›†ęˆęž¶ęž„åŸŗäŗŽ Python ē‰ˆęœ¬ļ¼š +The integration architecture is based on the Python version: ``` AG-UI Protocol Claude Middleware Claude Agent SDK @@ -331,21 +331,20 @@ RunAgentInput ──────> ClaudeAgent.run() ──────> SDK Clie BaseEvent[] <──────── translate events <──────── Response[] ``` -äø»č¦ē»„ä»¶ļ¼š +Key Components: -- **ClaudeAgent**: äø»åč°ƒå™Øļ¼Œē®”ē†ę‰§č”ŒęµēØ‹ -- **EventTranslator**: äŗ‹ä»¶č½¬ę¢ļ¼ˆClaude SDK → AG-UI) -- **SessionManager**: ä¼ščÆē”Ÿå‘½å‘ØęœŸē®”ē† -- **ToolAdapter**: å·„å…·ę ¼å¼č½¬ę¢ -- **ExecutionState**: ę‰§č”ŒēŠ¶ę€č·ŸčøŖ +- **ClaudeAgent**: Main coordinator, manages execution flow +- **EventTranslator**: Event translation (Claude SDK → AG-UI) +- **SessionManager**: Session lifecycle management +- **ToolAdapter**: Tool format conversion +- **ExecutionState**: Execution state tracking -## å‚č€ƒ +## References -- [Python å®žēŽ°](../python/) - Python SDK å®žēŽ°å‚č€ƒ -- [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/typescript) -- [AG-UI Protocol 文攣](https://docs.ag-ui.com/) +- [Python Implementation](../python/) - Python SDK implementation reference +- [Claude Agent SDK Documentation](https://docs.claude.com/api/agent-sdk/typescript) +- [AG-UI Protocol Documentation](https://docs.ag-ui.com/) -## č®øåÆčÆ +## License Apache-2.0 - diff --git a/integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/client.ts b/integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/client.ts new file mode 100644 index 000000000..f6f32866a --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/client.ts @@ -0,0 +1,92 @@ +/** + * Mock for @ag-ui/client + */ + +export class AbstractAgent { + run() {} + cleanup() {} +} + +export class TextMessageStartEvent { + type = 'text_message_start'; + constructor(public messageId: string) {} +} + +export class TextMessageContentEvent { + type = 'text_message_content'; + constructor(public text: string) {} +} + +export class TextMessageEndEvent { + type = 'text_message_end'; + constructor(public messageId: string) {} +} + +export class ToolCallStartEvent { + type = 'tool_call_start'; + constructor(public toolCallId: string, public toolName: string) {} +} + +export class ToolCallArgsEvent { + type = 'tool_call_args'; + constructor(public args: any) {} +} + +export class ToolCallEndEvent { + type = 'tool_call_end'; + constructor(public toolCallId: string) {} +} + +export class ToolCallResultEvent { + type = 'tool_call_result'; + constructor(public result: any) {} +} + +export class RunStartedEvent { + type = 'run_started'; + constructor(public runId: string) {} +} + +export class RunFinishedEvent { + type = 'run_finished'; +} + +export class RunErrorEvent { + type = 'run_error'; + constructor(public error: Error) {} +} + +export interface RunAgentInput { + agentId: string; + threadId?: string; + messages: Message[]; + context: any; +} + +export interface Message { + id: string; + role: string; + content: string | any[]; +} + +export interface Tool { + name: string; + description: string; + parameters?: any; + handler?: (...args: any[]) => any; + client?: boolean; +} + +export enum EventType { + RUN_STARTED = 'run_started', + RUN_FINISHED = 'run_finished', + RUN_ERROR = 'run_error', + TEXT_MESSAGE_START = 'text_message_start', + TEXT_MESSAGE_CONTENT = 'text_message_content', + TEXT_MESSAGE_END = 'text_message_end', + TOOL_CALL_START = 'tool_call_start', + TOOL_CALL_ARGS = 'tool_call_args', + TOOL_CALL_END = 'tool_call_end', + TOOL_CALL_RESULT = 'tool_call_result', +} + diff --git a/integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/core.ts b/integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/core.ts new file mode 100644 index 000000000..8143fc2a9 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__mocks__/@ag-ui/core.ts @@ -0,0 +1,21 @@ +/** + * Mock for @ag-ui/core + */ + +export class BaseEvent { + type: string = ''; +} + +export enum EventType { + RUN_STARTED = 'run_started', + RUN_FINISHED = 'run_finished', + RUN_ERROR = 'run_error', + TEXT_MESSAGE_START = 'text_message_start', + TEXT_MESSAGE_CONTENT = 'text_message_content', + TEXT_MESSAGE_END = 'text_message_end', + TOOL_CALL_START = 'tool_call_start', + TOOL_CALL_ARGS = 'tool_call_args', + TOOL_CALL_END = 'tool_call_end', + TOOL_CALL_RESULT = 'tool_call_result', +} + diff --git a/integrations/claude-agent-sdk/typescript/__mocks__/@anthropic-ai/claude-agent-sdk.ts b/integrations/claude-agent-sdk/typescript/__mocks__/@anthropic-ai/claude-agent-sdk.ts new file mode 100644 index 000000000..9d779dfda --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__mocks__/@anthropic-ai/claude-agent-sdk.ts @@ -0,0 +1,41 @@ +/** + * Mock for @anthropic-ai/claude-agent-sdk + */ + +export const ClaudeSDKClient = jest.fn().mockImplementation(() => ({ + query: jest.fn().mockResolvedValue(undefined), + receiveResponse: jest.fn().mockReturnValue({ + async *[Symbol.asyncIterator]() { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Hello from mock' }], + }; + yield { + type: 'result', + subtype: 'success', + }; + }, + }), + close: jest.fn().mockResolvedValue(undefined), +})); + +export const query = jest.fn().mockImplementation(async function* () { + yield { + type: 'assistant', + content: [{ type: 'text', text: 'Hello from mock query' }], + }; + yield { + type: 'result', + subtype: 'success', + }; +}); + +export const createSdkMcpServer = jest.fn().mockResolvedValue({ + name: 'mock-server', + version: '1.0.0', +}); + +export class SdkMcpTool { + constructor(public config: any) {} +} + diff --git a/integrations/claude-agent-sdk/typescript/__tests__/setup.ts b/integrations/claude-agent-sdk/typescript/__tests__/setup.ts new file mode 100644 index 000000000..c1353d90f --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/__tests__/setup.ts @@ -0,0 +1,7 @@ +/** + * Jest setup file + */ + +// Setup any global test configurations here +jest.setTimeout(10000); // 10 second timeout for async tests + diff --git a/integrations/claude-agent-sdk/typescript/dist/index.d.mts b/integrations/claude-agent-sdk/typescript/dist/index.d.mts new file mode 100644 index 000000000..c15863b58 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/dist/index.d.mts @@ -0,0 +1,679 @@ +import { Observable } from 'rxjs'; +import { AgentConfig, TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, RunStartedEvent, RunFinishedEvent, RunErrorEvent, StepStartedEvent, StepFinishedEvent, Message, AbstractAgent, RunAgentInput, Tool } from '@ag-ui/client'; + +/** + * Type definitions for Claude Agent SDK integration with AG-UI Protocol + */ + +interface ClaudeSDKClient { + query(prompt: string): Promise; + receiveResponse(): AsyncIterableIterator; + close(): Promise; +} +interface Options { + apiKey?: string; + baseUrl?: string; + mcpServers?: Record; + allowedTools?: string[]; + permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none'; + stderr?: (data: string) => void; + verbose?: boolean; + [key: string]: any; +} +interface Query { + next(): Promise>; + [Symbol.asyncIterator](): AsyncIterableIterator; +} +type SDKMessage = SDKAssistantMessage | SDKUserMessage | SDKSystemMessage | SDKResultMessage | SDKPartialAssistantMessage | SDKCompactBoundaryMessage | SDKPermissionDenial; +interface SDKAssistantMessage { + type: 'assistant'; + message: { + id?: string; + content: ContentBlock[]; + [key: string]: any; + }; + parent_tool_use_id?: string | null; + uuid?: string; + session_id?: string; +} +interface SDKUserMessage { + type: 'user'; + content: string; + id?: string; +} +interface SDKSystemMessage { + type: 'system'; + content: string; +} +interface SDKResultMessage { + type: 'result'; + subtype: 'success' | 'error'; + error?: { + type: string; + message: string; + }; +} +interface SDKPartialAssistantMessage { + type: 'partial_assistant'; + content: ContentBlock[]; +} +interface SDKCompactBoundaryMessage { + type: 'compact_boundary'; +} +interface SDKPermissionDenial { + type: 'permission_denial'; + tool: string; + reason: string; +} +type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ThinkingBlock; +interface TextBlock { + type: 'text'; + text: string; +} +interface ToolUseBlock { + type: 'tool_use'; + id: string; + name: string; + input: Record; +} +interface ToolResultBlock { + type: 'tool_result'; + tool_use_id: string; + content: string | Array<{ + type: string; + [key: string]: any; + }>; + is_error?: boolean; +} +interface ThinkingBlock { + type: 'thinking'; + thinking: string; +} +interface SdkMcpToolDefinition { + name: string; + description: string; + inputSchema: Schema; + handler: (args: any, extra?: any) => Promise; +} +interface CallToolResult { + content: Array<{ + type: 'text' | 'image' | 'resource'; + text?: string; + data?: string; + mimeType?: string; + [key: string]: any; + }>; + isError?: boolean; +} +interface McpSdkServerConfigWithInstance { + name: string; + version?: string; + tools?: Array>; +} +type ProcessedEvents = TextMessageStartEvent | TextMessageContentEvent | TextMessageEndEvent | ToolCallStartEvent | ToolCallArgsEvent | ToolCallEndEvent | ToolCallResultEvent | RunStartedEvent | RunFinishedEvent | RunErrorEvent | StepStartedEvent | StepFinishedEvent; +interface Session { + id: string; + userId?: string; + client?: ClaudeSDKClient; + processedMessageIds: Set; + state: Record; + createdAt: number; + lastAccessedAt: number; +} +interface ClaudeAgentConfig extends AgentConfig { + apiKey?: string; + baseUrl?: string; + sessionTimeout?: number; + enablePersistentSessions?: boolean; + permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none'; + mcpServers?: Record; + stderr?: (data: string) => void; + verbose?: boolean; +} +interface ExecutionState$1 { + id: string; + sessionId: string; + isRunning: boolean; + startTime: number; + events: ProcessedEvents[]; + error?: Error; +} +declare function isAssistantMessage(message: SDKMessage): message is SDKAssistantMessage; +declare function isResultMessage(message: SDKMessage): message is SDKResultMessage; +declare function isTextBlock(block: ContentBlock): block is TextBlock; +declare function isToolUseBlock(block: ContentBlock): block is ToolUseBlock; +declare function isToolResultBlock(block: ContentBlock): block is ToolResultBlock; +declare function isThinkingBlock(block: ContentBlock): block is ThinkingBlock; +declare function hasContentProperty(message: SDKMessage): message is SDKAssistantMessage | SDKPartialAssistantMessage; +interface ToolExecutionContext { + toolName: string; + toolCallId: string; + isClientTool: boolean; + isLongRunning: boolean; +} +interface ConvertedMessage { + role: 'user' | 'assistant' | 'system'; + content: string | Array<{ + type: string; + [key: string]: any; + }>; +} + +/** + * Session manager: Manages agent sessions and state + */ + +/** + * SessionManager handles session lifecycle, message tracking, and state management + * Implements singleton pattern for centralized session control + */ +declare class SessionManager { + private static instance; + private sessions; + private cleanupInterval; + private sessionTimeout; + private constructor(); + /** + * Get the singleton instance + */ + static getInstance(sessionTimeout?: number): SessionManager; + /** + * Reset the singleton instance (useful for testing) + */ + static resetInstance(): void; + /** + * Get or create a session + */ + getSession(sessionId: string, userId?: string): Session; + /** + * Check if a session exists + */ + hasSession(sessionId: string): boolean; + /** + * Delete a session + */ + deleteSession(sessionId: string): boolean; + /** + * Track a processed message + */ + trackMessage(sessionId: string, messageId: string): void; + /** + * Check if a message has been processed + */ + isMessageProcessed(sessionId: string, messageId: string): boolean; + /** + * Get unseen messages (messages not yet processed) + */ + getUnseenMessages(sessionId: string, messages: Message[]): Message[]; + /** + * Mark messages as processed + */ + markMessagesAsProcessed(sessionId: string, messages: Message[]): void; + /** + * Get state value from session + */ + getStateValue(sessionId: string, key: string): any; + /** + * Set state value in session + */ + setStateValue(sessionId: string, key: string, value: any): void; + /** + * Remove state keys from session + */ + removeStateKeys(sessionId: string, keys: string[]): void; + /** + * Clear all state for a session + */ + clearSessionState(sessionId: string): void; + /** + * Set Claude SDK client for a session + */ + setClient(sessionId: string, client: ClaudeSDKClient): void; + /** + * Get Claude SDK client for a session + */ + getClient(sessionId: string): ClaudeSDKClient | undefined; + /** + * Get total number of sessions + */ + getSessionCount(): number; + /** + * Get number of sessions for a specific user + */ + getUserSessionCount(userId: string): number; + /** + * Get all session IDs + */ + getAllSessionIds(): string[]; + /** + * Get all sessions for a specific user + */ + getUserSessions(userId: string): Session[]; + /** + * Clean up stale sessions + */ + private cleanupStaleSessions; + /** + * Start the cleanup interval + */ + private startCleanupInterval; + /** + * Stop the cleanup interval + */ + private stopCleanupInterval; + /** + * Clear all sessions (useful for testing) + */ + clearAllSessions(): void; +} + +/** + * Execution state: Tracks background Claude executions + */ + +/** + * ExecutionState manages the state of a Claude SDK execution + */ +declare class ExecutionState { + readonly id: string; + readonly sessionId: string; + private _isRunning; + private _startTime; + private _endTime?; + private _events; + private _error?; + private _abortController; + constructor(id: string, sessionId: string); + /** + * Check if execution is running + */ + get isRunning(): boolean; + /** + * Get start time + */ + get startTime(): number; + /** + * Get end time + */ + get endTime(): number | undefined; + /** + * Get duration in milliseconds + */ + get duration(): number; + /** + * Get all collected events + */ + get events(): ProcessedEvents[]; + /** + * Get error if any + */ + get error(): Error | undefined; + /** + * Get abort signal + */ + get signal(): AbortSignal; + /** + * Add an event to the execution state + */ + addEvent(event: ProcessedEvents): void; + /** + * Add multiple events + */ + addEvents(events: ProcessedEvents[]): void; + /** + * Mark execution as completed + */ + complete(): void; + /** + * Mark execution as failed + */ + fail(error: Error): void; + /** + * Abort the execution + */ + abort(): void; + /** + * Get execution statistics + */ + getStats(): { + duration: number; + eventCount: number; + isRunning: boolean; + hasError: boolean; + }; + /** + * Clear events (useful for memory management) + */ + clearEvents(): void; + /** + * Get the last N events + */ + getLastEvents(count: number): ProcessedEvents[]; + /** + * Check if execution has been aborted + */ + isAborted(): boolean; +} +/** + * ExecutionStateManager manages multiple execution states + */ +declare class ExecutionStateManager { + private executions; + private readonly maxExecutions; + constructor(maxExecutions?: number); + /** + * Create a new execution state + */ + createExecution(id: string, sessionId: string): ExecutionState; + /** + * Get an execution state by ID + */ + getExecution(id: string): ExecutionState | undefined; + /** + * Check if an execution exists + */ + hasExecution(id: string): boolean; + /** + * Delete an execution state + */ + deleteExecution(id: string): boolean; + /** + * Get all executions for a session + */ + getSessionExecutions(sessionId: string): ExecutionState[]; + /** + * Get running executions + */ + getRunningExecutions(): ExecutionState[]; + /** + * Get completed executions + */ + getCompletedExecutions(): ExecutionState[]; + /** + * Abort all running executions for a session + */ + abortSessionExecutions(sessionId: string): void; + /** + * Clean up old completed executions + */ + private cleanupOldExecutions; + /** + * Clear all executions + */ + clearAll(): void; + /** + * Get total execution count + */ + getExecutionCount(): number; + /** + * Get execution statistics + */ + getStats(): { + total: number; + running: number; + completed: number; + failed: number; + }; +} + +/** + * Claude Agent: Main agent class that integrates Claude SDK with AG-UI Protocol + */ + +/** + * ClaudeAgent integrates Claude Agent SDK with AG-UI Protocol + */ +declare class ClaudeAgent extends AbstractAgent { + private sessionManager; + private executionStateManager; + private apiKey?; + private baseUrl?; + private sessionTimeout; + private enablePersistentSessions; + private permissionMode; + private stderr?; + private verbose?; + constructor(config: ClaudeAgentConfig); + /** + * Map legacy permission modes to new SDK values for backward compatibility + */ + private mapPermissionMode; + /** + * Run the agent with the given input + */ + run(input: RunAgentInput): Observable; + /** + * Execute the agent asynchronously + */ + private executeAgent; + /** + * Prepare Claude SDK options + * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + * But baseUrl needs to be explicitly passed for third-party APIs + */ + private prepareClaudeOptions; + /** + * Call Claude SDK + * Note: Currently only stateless mode is supported via query() function + */ + private callClaudeSDK; + /** + * Call Claude SDK in persistent session mode + * Note: The current SDK only supports stateless mode via query() function + * This method falls back to stateless mode + */ + private callClaudeSDKPersistent; + /** + * Call Claude SDK in stateless mode + */ + private callClaudeSDKStateless; + /** + * Dynamically import Claude SDK + */ + private importClaudeSDK; + /** + * Abort a running execution + */ + abortExecution(runId: string): void; + /** + * Get execution state + */ + getExecutionState(runId: string): ExecutionState | undefined; + /** + * Get session manager (for testing) + */ + getSessionManager(): SessionManager; + /** + * Get execution state manager (for testing) + */ + getExecutionStateManager(): ExecutionStateManager; + /** + * Cleanup resources + */ + cleanup(): Promise; +} + +/** + * Event translator: Converts Claude SDK messages to AG-UI events + */ + +/** + * EventTranslator converts Claude SDK messages to AG-UI protocol events + * + * NOTE: This translator only handles SDK message translation. + * Run lifecycle events (RUN_STARTED, RUN_FINISHED, etc.) and step events + * are handled by ClaudeAgent. + */ +declare class EventTranslator { + private messageIdCounter; + private currentMessageId; + private runId; + private threadId; + constructor(runId: string, threadId: string); + /** + * Translate a Claude SDK message to AG-UI events + * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent + */ + translateMessage(message: SDKMessage): ProcessedEvents[]; + /** + * Translate an AssistantMessage with content blocks + */ + private translateAssistantMessage; + /** + * Translate a TextBlock to text message events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + private translateTextBlock; + /** + * Translate a ToolUseBlock to tool call events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + private translateToolUseBlock; + /** + * Translate a ToolResultBlock to tool call result event + */ + private translateToolResultBlock; + /** + * Generate a unique message ID + */ + private generateMessageId; + /** + * Reset the translator state for a new execution + */ + reset(): void; + /** + * Get current message ID + */ + getCurrentMessageId(): string | null; + /** + * Set current message ID + */ + setCurrentMessageId(messageId: string | null): void; +} + +/** + * Tool adapter: Converts AG-UI tools to Claude SDK format + */ + +/** + * ToolAdapter handles conversion of AG-UI tools to Claude SDK format + */ +declare class ToolAdapter { + /** + * Convert AG-UI tools to Claude SDK MCP tool definitions + */ + static convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[]; + /** + * Convert a single AG-UI tool to Claude SDK format + */ + private static convertSingleTool; + /** + * Convert JSON Schema to Zod schema + */ + private static convertJsonSchemaToZod; + /** + * Convert a single JSON Schema type to Zod type + */ + private static convertJsonSchemaTypeToZod; + /** + * Create an MCP server configuration for AG-UI tools + */ + static createMcpServerForTools(tools: Tool[]): Promise; + /** + * Extract tool calls from Claude SDK response + */ + static extractToolCalls(message: any): Array<{ + id: string; + name: string; + input: Record; + }>; + /** + * Check if a tool is a long-running client tool + */ + static isClientTool(toolName: string, tools: Tool[]): boolean; + /** + * Check if a tool is marked as long-running + */ + static isLongRunningTool(toolName: string, tools: Tool[]): boolean; + /** + * Format tool names for Claude SDK (with MCP server prefix) + */ + static formatToolNameForSdk(toolName: string, serverName?: string): string; + /** + * Parse tool name from SDK format (remove MCP server prefix) + */ + static parseToolNameFromSdk(sdkToolName: string): string; + /** + * Get allowed tools list for SDK options + */ + static getAllowedToolsList(tools: Tool[], serverName?: string): string[]; +} + +/** + * Message format converters + */ + +/** + * Convert AG-UI messages to a format suitable for Claude SDK + */ +declare function convertAgUiMessagesToPrompt(messages: Message[]): string; +/** + * Extract text content from a message + */ +declare function extractMessageContent(message: Message): string; +/** + * Convert AG-UI message to Claude message format + */ +declare function convertAgUiMessageToClaude(message: Message): ConvertedMessage; +/** + * Convert multiple AG-UI messages to Claude format + */ +declare function convertAgUiMessagesToClaude(messages: Message[]): ConvertedMessage[]; +/** + * Check if messages contain tool results + */ +declare function hasToolResults(messages: Message[]): boolean; +/** + * Extract tool results from messages + */ +declare function extractToolResults(messages: Message[]): Array<{ + toolCallId: string; + result: string; +}>; +/** + * Generate a unique run ID + */ +declare function generateRunId(): string; +/** + * Generate a unique message ID + */ +declare function generateMessageId(prefix?: string): string; +/** + * Safely parse JSON string + */ +declare function safeJsonParse(json: string, defaultValue?: any): any; +/** + * Safely stringify JSON + */ +declare function safeJsonStringify(obj: any, defaultValue?: string): string; +/** + * Check if a message is a tool result submission + */ +declare function isToolResultSubmission(messages: Message[]): boolean; +/** + * Format error message for display + */ +declare function formatErrorMessage(error: any): string; +/** + * Truncate text to a maximum length + */ +declare function truncateText(text: string, maxLength?: number): string; +/** + * Merge consecutive text blocks + */ +declare function mergeTextBlocks(blocks: Array<{ + type: string; + text?: string; +}>): string; + +export { type CallToolResult, ClaudeAgent, type ClaudeAgentConfig, type ClaudeSDKClient, type ContentBlock, type ConvertedMessage, EventTranslator, ExecutionState, ExecutionStateManager, type ExecutionState$1 as ExecutionStateType, type McpSdkServerConfigWithInstance, type Options, type ProcessedEvents, type Query, type SDKAssistantMessage, type SDKCompactBoundaryMessage, type SDKMessage, type SDKPartialAssistantMessage, type SDKPermissionDenial, type SDKResultMessage, type SDKSystemMessage, type SDKUserMessage, type SdkMcpToolDefinition, type Session, SessionManager, type TextBlock, type ThinkingBlock, ToolAdapter, type ToolExecutionContext, type ToolResultBlock, type ToolUseBlock, convertAgUiMessageToClaude, convertAgUiMessagesToClaude, convertAgUiMessagesToPrompt, extractMessageContent, extractToolResults, formatErrorMessage, generateMessageId, generateRunId, hasContentProperty, hasToolResults, isAssistantMessage, isResultMessage, isTextBlock, isThinkingBlock, isToolResultBlock, isToolResultSubmission, isToolUseBlock, mergeTextBlocks, safeJsonParse, safeJsonStringify, truncateText }; diff --git a/integrations/claude-agent-sdk/typescript/dist/index.d.ts b/integrations/claude-agent-sdk/typescript/dist/index.d.ts new file mode 100644 index 000000000..c15863b58 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/dist/index.d.ts @@ -0,0 +1,679 @@ +import { Observable } from 'rxjs'; +import { AgentConfig, TextMessageStartEvent, TextMessageContentEvent, TextMessageEndEvent, ToolCallStartEvent, ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, RunStartedEvent, RunFinishedEvent, RunErrorEvent, StepStartedEvent, StepFinishedEvent, Message, AbstractAgent, RunAgentInput, Tool } from '@ag-ui/client'; + +/** + * Type definitions for Claude Agent SDK integration with AG-UI Protocol + */ + +interface ClaudeSDKClient { + query(prompt: string): Promise; + receiveResponse(): AsyncIterableIterator; + close(): Promise; +} +interface Options { + apiKey?: string; + baseUrl?: string; + mcpServers?: Record; + allowedTools?: string[]; + permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none'; + stderr?: (data: string) => void; + verbose?: boolean; + [key: string]: any; +} +interface Query { + next(): Promise>; + [Symbol.asyncIterator](): AsyncIterableIterator; +} +type SDKMessage = SDKAssistantMessage | SDKUserMessage | SDKSystemMessage | SDKResultMessage | SDKPartialAssistantMessage | SDKCompactBoundaryMessage | SDKPermissionDenial; +interface SDKAssistantMessage { + type: 'assistant'; + message: { + id?: string; + content: ContentBlock[]; + [key: string]: any; + }; + parent_tool_use_id?: string | null; + uuid?: string; + session_id?: string; +} +interface SDKUserMessage { + type: 'user'; + content: string; + id?: string; +} +interface SDKSystemMessage { + type: 'system'; + content: string; +} +interface SDKResultMessage { + type: 'result'; + subtype: 'success' | 'error'; + error?: { + type: string; + message: string; + }; +} +interface SDKPartialAssistantMessage { + type: 'partial_assistant'; + content: ContentBlock[]; +} +interface SDKCompactBoundaryMessage { + type: 'compact_boundary'; +} +interface SDKPermissionDenial { + type: 'permission_denial'; + tool: string; + reason: string; +} +type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ThinkingBlock; +interface TextBlock { + type: 'text'; + text: string; +} +interface ToolUseBlock { + type: 'tool_use'; + id: string; + name: string; + input: Record; +} +interface ToolResultBlock { + type: 'tool_result'; + tool_use_id: string; + content: string | Array<{ + type: string; + [key: string]: any; + }>; + is_error?: boolean; +} +interface ThinkingBlock { + type: 'thinking'; + thinking: string; +} +interface SdkMcpToolDefinition { + name: string; + description: string; + inputSchema: Schema; + handler: (args: any, extra?: any) => Promise; +} +interface CallToolResult { + content: Array<{ + type: 'text' | 'image' | 'resource'; + text?: string; + data?: string; + mimeType?: string; + [key: string]: any; + }>; + isError?: boolean; +} +interface McpSdkServerConfigWithInstance { + name: string; + version?: string; + tools?: Array>; +} +type ProcessedEvents = TextMessageStartEvent | TextMessageContentEvent | TextMessageEndEvent | ToolCallStartEvent | ToolCallArgsEvent | ToolCallEndEvent | ToolCallResultEvent | RunStartedEvent | RunFinishedEvent | RunErrorEvent | StepStartedEvent | StepFinishedEvent; +interface Session { + id: string; + userId?: string; + client?: ClaudeSDKClient; + processedMessageIds: Set; + state: Record; + createdAt: number; + lastAccessedAt: number; +} +interface ClaudeAgentConfig extends AgentConfig { + apiKey?: string; + baseUrl?: string; + sessionTimeout?: number; + enablePersistentSessions?: boolean; + permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none'; + mcpServers?: Record; + stderr?: (data: string) => void; + verbose?: boolean; +} +interface ExecutionState$1 { + id: string; + sessionId: string; + isRunning: boolean; + startTime: number; + events: ProcessedEvents[]; + error?: Error; +} +declare function isAssistantMessage(message: SDKMessage): message is SDKAssistantMessage; +declare function isResultMessage(message: SDKMessage): message is SDKResultMessage; +declare function isTextBlock(block: ContentBlock): block is TextBlock; +declare function isToolUseBlock(block: ContentBlock): block is ToolUseBlock; +declare function isToolResultBlock(block: ContentBlock): block is ToolResultBlock; +declare function isThinkingBlock(block: ContentBlock): block is ThinkingBlock; +declare function hasContentProperty(message: SDKMessage): message is SDKAssistantMessage | SDKPartialAssistantMessage; +interface ToolExecutionContext { + toolName: string; + toolCallId: string; + isClientTool: boolean; + isLongRunning: boolean; +} +interface ConvertedMessage { + role: 'user' | 'assistant' | 'system'; + content: string | Array<{ + type: string; + [key: string]: any; + }>; +} + +/** + * Session manager: Manages agent sessions and state + */ + +/** + * SessionManager handles session lifecycle, message tracking, and state management + * Implements singleton pattern for centralized session control + */ +declare class SessionManager { + private static instance; + private sessions; + private cleanupInterval; + private sessionTimeout; + private constructor(); + /** + * Get the singleton instance + */ + static getInstance(sessionTimeout?: number): SessionManager; + /** + * Reset the singleton instance (useful for testing) + */ + static resetInstance(): void; + /** + * Get or create a session + */ + getSession(sessionId: string, userId?: string): Session; + /** + * Check if a session exists + */ + hasSession(sessionId: string): boolean; + /** + * Delete a session + */ + deleteSession(sessionId: string): boolean; + /** + * Track a processed message + */ + trackMessage(sessionId: string, messageId: string): void; + /** + * Check if a message has been processed + */ + isMessageProcessed(sessionId: string, messageId: string): boolean; + /** + * Get unseen messages (messages not yet processed) + */ + getUnseenMessages(sessionId: string, messages: Message[]): Message[]; + /** + * Mark messages as processed + */ + markMessagesAsProcessed(sessionId: string, messages: Message[]): void; + /** + * Get state value from session + */ + getStateValue(sessionId: string, key: string): any; + /** + * Set state value in session + */ + setStateValue(sessionId: string, key: string, value: any): void; + /** + * Remove state keys from session + */ + removeStateKeys(sessionId: string, keys: string[]): void; + /** + * Clear all state for a session + */ + clearSessionState(sessionId: string): void; + /** + * Set Claude SDK client for a session + */ + setClient(sessionId: string, client: ClaudeSDKClient): void; + /** + * Get Claude SDK client for a session + */ + getClient(sessionId: string): ClaudeSDKClient | undefined; + /** + * Get total number of sessions + */ + getSessionCount(): number; + /** + * Get number of sessions for a specific user + */ + getUserSessionCount(userId: string): number; + /** + * Get all session IDs + */ + getAllSessionIds(): string[]; + /** + * Get all sessions for a specific user + */ + getUserSessions(userId: string): Session[]; + /** + * Clean up stale sessions + */ + private cleanupStaleSessions; + /** + * Start the cleanup interval + */ + private startCleanupInterval; + /** + * Stop the cleanup interval + */ + private stopCleanupInterval; + /** + * Clear all sessions (useful for testing) + */ + clearAllSessions(): void; +} + +/** + * Execution state: Tracks background Claude executions + */ + +/** + * ExecutionState manages the state of a Claude SDK execution + */ +declare class ExecutionState { + readonly id: string; + readonly sessionId: string; + private _isRunning; + private _startTime; + private _endTime?; + private _events; + private _error?; + private _abortController; + constructor(id: string, sessionId: string); + /** + * Check if execution is running + */ + get isRunning(): boolean; + /** + * Get start time + */ + get startTime(): number; + /** + * Get end time + */ + get endTime(): number | undefined; + /** + * Get duration in milliseconds + */ + get duration(): number; + /** + * Get all collected events + */ + get events(): ProcessedEvents[]; + /** + * Get error if any + */ + get error(): Error | undefined; + /** + * Get abort signal + */ + get signal(): AbortSignal; + /** + * Add an event to the execution state + */ + addEvent(event: ProcessedEvents): void; + /** + * Add multiple events + */ + addEvents(events: ProcessedEvents[]): void; + /** + * Mark execution as completed + */ + complete(): void; + /** + * Mark execution as failed + */ + fail(error: Error): void; + /** + * Abort the execution + */ + abort(): void; + /** + * Get execution statistics + */ + getStats(): { + duration: number; + eventCount: number; + isRunning: boolean; + hasError: boolean; + }; + /** + * Clear events (useful for memory management) + */ + clearEvents(): void; + /** + * Get the last N events + */ + getLastEvents(count: number): ProcessedEvents[]; + /** + * Check if execution has been aborted + */ + isAborted(): boolean; +} +/** + * ExecutionStateManager manages multiple execution states + */ +declare class ExecutionStateManager { + private executions; + private readonly maxExecutions; + constructor(maxExecutions?: number); + /** + * Create a new execution state + */ + createExecution(id: string, sessionId: string): ExecutionState; + /** + * Get an execution state by ID + */ + getExecution(id: string): ExecutionState | undefined; + /** + * Check if an execution exists + */ + hasExecution(id: string): boolean; + /** + * Delete an execution state + */ + deleteExecution(id: string): boolean; + /** + * Get all executions for a session + */ + getSessionExecutions(sessionId: string): ExecutionState[]; + /** + * Get running executions + */ + getRunningExecutions(): ExecutionState[]; + /** + * Get completed executions + */ + getCompletedExecutions(): ExecutionState[]; + /** + * Abort all running executions for a session + */ + abortSessionExecutions(sessionId: string): void; + /** + * Clean up old completed executions + */ + private cleanupOldExecutions; + /** + * Clear all executions + */ + clearAll(): void; + /** + * Get total execution count + */ + getExecutionCount(): number; + /** + * Get execution statistics + */ + getStats(): { + total: number; + running: number; + completed: number; + failed: number; + }; +} + +/** + * Claude Agent: Main agent class that integrates Claude SDK with AG-UI Protocol + */ + +/** + * ClaudeAgent integrates Claude Agent SDK with AG-UI Protocol + */ +declare class ClaudeAgent extends AbstractAgent { + private sessionManager; + private executionStateManager; + private apiKey?; + private baseUrl?; + private sessionTimeout; + private enablePersistentSessions; + private permissionMode; + private stderr?; + private verbose?; + constructor(config: ClaudeAgentConfig); + /** + * Map legacy permission modes to new SDK values for backward compatibility + */ + private mapPermissionMode; + /** + * Run the agent with the given input + */ + run(input: RunAgentInput): Observable; + /** + * Execute the agent asynchronously + */ + private executeAgent; + /** + * Prepare Claude SDK options + * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + * But baseUrl needs to be explicitly passed for third-party APIs + */ + private prepareClaudeOptions; + /** + * Call Claude SDK + * Note: Currently only stateless mode is supported via query() function + */ + private callClaudeSDK; + /** + * Call Claude SDK in persistent session mode + * Note: The current SDK only supports stateless mode via query() function + * This method falls back to stateless mode + */ + private callClaudeSDKPersistent; + /** + * Call Claude SDK in stateless mode + */ + private callClaudeSDKStateless; + /** + * Dynamically import Claude SDK + */ + private importClaudeSDK; + /** + * Abort a running execution + */ + abortExecution(runId: string): void; + /** + * Get execution state + */ + getExecutionState(runId: string): ExecutionState | undefined; + /** + * Get session manager (for testing) + */ + getSessionManager(): SessionManager; + /** + * Get execution state manager (for testing) + */ + getExecutionStateManager(): ExecutionStateManager; + /** + * Cleanup resources + */ + cleanup(): Promise; +} + +/** + * Event translator: Converts Claude SDK messages to AG-UI events + */ + +/** + * EventTranslator converts Claude SDK messages to AG-UI protocol events + * + * NOTE: This translator only handles SDK message translation. + * Run lifecycle events (RUN_STARTED, RUN_FINISHED, etc.) and step events + * are handled by ClaudeAgent. + */ +declare class EventTranslator { + private messageIdCounter; + private currentMessageId; + private runId; + private threadId; + constructor(runId: string, threadId: string); + /** + * Translate a Claude SDK message to AG-UI events + * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent + */ + translateMessage(message: SDKMessage): ProcessedEvents[]; + /** + * Translate an AssistantMessage with content blocks + */ + private translateAssistantMessage; + /** + * Translate a TextBlock to text message events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + private translateTextBlock; + /** + * Translate a ToolUseBlock to tool call events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + private translateToolUseBlock; + /** + * Translate a ToolResultBlock to tool call result event + */ + private translateToolResultBlock; + /** + * Generate a unique message ID + */ + private generateMessageId; + /** + * Reset the translator state for a new execution + */ + reset(): void; + /** + * Get current message ID + */ + getCurrentMessageId(): string | null; + /** + * Set current message ID + */ + setCurrentMessageId(messageId: string | null): void; +} + +/** + * Tool adapter: Converts AG-UI tools to Claude SDK format + */ + +/** + * ToolAdapter handles conversion of AG-UI tools to Claude SDK format + */ +declare class ToolAdapter { + /** + * Convert AG-UI tools to Claude SDK MCP tool definitions + */ + static convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[]; + /** + * Convert a single AG-UI tool to Claude SDK format + */ + private static convertSingleTool; + /** + * Convert JSON Schema to Zod schema + */ + private static convertJsonSchemaToZod; + /** + * Convert a single JSON Schema type to Zod type + */ + private static convertJsonSchemaTypeToZod; + /** + * Create an MCP server configuration for AG-UI tools + */ + static createMcpServerForTools(tools: Tool[]): Promise; + /** + * Extract tool calls from Claude SDK response + */ + static extractToolCalls(message: any): Array<{ + id: string; + name: string; + input: Record; + }>; + /** + * Check if a tool is a long-running client tool + */ + static isClientTool(toolName: string, tools: Tool[]): boolean; + /** + * Check if a tool is marked as long-running + */ + static isLongRunningTool(toolName: string, tools: Tool[]): boolean; + /** + * Format tool names for Claude SDK (with MCP server prefix) + */ + static formatToolNameForSdk(toolName: string, serverName?: string): string; + /** + * Parse tool name from SDK format (remove MCP server prefix) + */ + static parseToolNameFromSdk(sdkToolName: string): string; + /** + * Get allowed tools list for SDK options + */ + static getAllowedToolsList(tools: Tool[], serverName?: string): string[]; +} + +/** + * Message format converters + */ + +/** + * Convert AG-UI messages to a format suitable for Claude SDK + */ +declare function convertAgUiMessagesToPrompt(messages: Message[]): string; +/** + * Extract text content from a message + */ +declare function extractMessageContent(message: Message): string; +/** + * Convert AG-UI message to Claude message format + */ +declare function convertAgUiMessageToClaude(message: Message): ConvertedMessage; +/** + * Convert multiple AG-UI messages to Claude format + */ +declare function convertAgUiMessagesToClaude(messages: Message[]): ConvertedMessage[]; +/** + * Check if messages contain tool results + */ +declare function hasToolResults(messages: Message[]): boolean; +/** + * Extract tool results from messages + */ +declare function extractToolResults(messages: Message[]): Array<{ + toolCallId: string; + result: string; +}>; +/** + * Generate a unique run ID + */ +declare function generateRunId(): string; +/** + * Generate a unique message ID + */ +declare function generateMessageId(prefix?: string): string; +/** + * Safely parse JSON string + */ +declare function safeJsonParse(json: string, defaultValue?: any): any; +/** + * Safely stringify JSON + */ +declare function safeJsonStringify(obj: any, defaultValue?: string): string; +/** + * Check if a message is a tool result submission + */ +declare function isToolResultSubmission(messages: Message[]): boolean; +/** + * Format error message for display + */ +declare function formatErrorMessage(error: any): string; +/** + * Truncate text to a maximum length + */ +declare function truncateText(text: string, maxLength?: number): string; +/** + * Merge consecutive text blocks + */ +declare function mergeTextBlocks(blocks: Array<{ + type: string; + text?: string; +}>): string; + +export { type CallToolResult, ClaudeAgent, type ClaudeAgentConfig, type ClaudeSDKClient, type ContentBlock, type ConvertedMessage, EventTranslator, ExecutionState, ExecutionStateManager, type ExecutionState$1 as ExecutionStateType, type McpSdkServerConfigWithInstance, type Options, type ProcessedEvents, type Query, type SDKAssistantMessage, type SDKCompactBoundaryMessage, type SDKMessage, type SDKPartialAssistantMessage, type SDKPermissionDenial, type SDKResultMessage, type SDKSystemMessage, type SDKUserMessage, type SdkMcpToolDefinition, type Session, SessionManager, type TextBlock, type ThinkingBlock, ToolAdapter, type ToolExecutionContext, type ToolResultBlock, type ToolUseBlock, convertAgUiMessageToClaude, convertAgUiMessagesToClaude, convertAgUiMessagesToPrompt, extractMessageContent, extractToolResults, formatErrorMessage, generateMessageId, generateRunId, hasContentProperty, hasToolResults, isAssistantMessage, isResultMessage, isTextBlock, isThinkingBlock, isToolResultBlock, isToolResultSubmission, isToolUseBlock, mergeTextBlocks, safeJsonParse, safeJsonStringify, truncateText }; diff --git a/integrations/claude-agent-sdk/typescript/dist/index.js b/integrations/claude-agent-sdk/typescript/dist/index.js new file mode 100644 index 000000000..aa142749c --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/dist/index.js @@ -0,0 +1,1395 @@ +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __defProps = Object.defineProperties; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropDescs = Object.getOwnPropertyDescriptors; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getOwnPropSymbols = Object.getOwnPropertySymbols; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __propIsEnum = Object.prototype.propertyIsEnumerable; +var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + } + return a; +}; +var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it); + +// src/index.ts +var src_exports = {}; +__export(src_exports, { + ClaudeAgent: () => ClaudeAgent, + EventTranslator: () => EventTranslator, + ExecutionState: () => ExecutionState, + ExecutionStateManager: () => ExecutionStateManager, + SessionManager: () => SessionManager, + ToolAdapter: () => ToolAdapter, + convertAgUiMessageToClaude: () => convertAgUiMessageToClaude, + convertAgUiMessagesToClaude: () => convertAgUiMessagesToClaude, + convertAgUiMessagesToPrompt: () => convertAgUiMessagesToPrompt, + extractMessageContent: () => extractMessageContent, + extractToolResults: () => extractToolResults, + formatErrorMessage: () => formatErrorMessage, + generateMessageId: () => generateMessageId, + generateRunId: () => generateRunId, + hasContentProperty: () => hasContentProperty, + hasToolResults: () => hasToolResults, + isAssistantMessage: () => isAssistantMessage, + isResultMessage: () => isResultMessage, + isTextBlock: () => isTextBlock, + isThinkingBlock: () => isThinkingBlock, + isToolResultBlock: () => isToolResultBlock, + isToolResultSubmission: () => isToolResultSubmission, + isToolUseBlock: () => isToolUseBlock, + mergeTextBlocks: () => mergeTextBlocks, + safeJsonParse: () => safeJsonParse, + safeJsonStringify: () => safeJsonStringify, + truncateText: () => truncateText +}); +module.exports = __toCommonJS(src_exports); + +// src/agent.ts +var import_rxjs = require("rxjs"); +var import_client2 = require("@ag-ui/client"); + +// src/session-manager.ts +var DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1e3; +var CLEANUP_INTERVAL = 5 * 60 * 1e3; +var _SessionManager = class _SessionManager { + constructor(sessionTimeout = DEFAULT_SESSION_TIMEOUT) { + this.sessions = /* @__PURE__ */ new Map(); + this.cleanupInterval = null; + this.sessionTimeout = sessionTimeout; + this.startCleanupInterval(); + } + /** + * Get the singleton instance + */ + static getInstance(sessionTimeout) { + if (!_SessionManager.instance) { + _SessionManager.instance = new _SessionManager(sessionTimeout); + } + return _SessionManager.instance; + } + /** + * Reset the singleton instance (useful for testing) + */ + static resetInstance() { + if (_SessionManager.instance) { + _SessionManager.instance.stopCleanupInterval(); + _SessionManager.instance = null; + } + } + /** + * Get or create a session + */ + getSession(sessionId, userId) { + let session = this.sessions.get(sessionId); + if (!session) { + session = { + id: sessionId, + userId, + processedMessageIds: /* @__PURE__ */ new Set(), + state: {}, + createdAt: Date.now(), + lastAccessedAt: Date.now() + }; + this.sessions.set(sessionId, session); + } else { + session.lastAccessedAt = Date.now(); + } + return session; + } + /** + * Check if a session exists + */ + hasSession(sessionId) { + return this.sessions.has(sessionId); + } + /** + * Delete a session + */ + deleteSession(sessionId) { + const session = this.sessions.get(sessionId); + if (session == null ? void 0 : session.client) { + session.client.close().catch((error) => { + console.error(`Error closing Claude SDK client for session ${sessionId}:`, error); + }); + } + return this.sessions.delete(sessionId); + } + /** + * Track a processed message + */ + trackMessage(sessionId, messageId) { + const session = this.sessions.get(sessionId); + if (session) { + session.processedMessageIds.add(messageId); + session.lastAccessedAt = Date.now(); + } + } + /** + * Check if a message has been processed + */ + isMessageProcessed(sessionId, messageId) { + const session = this.sessions.get(sessionId); + return session ? session.processedMessageIds.has(messageId) : false; + } + /** + * Get unseen messages (messages not yet processed) + */ + getUnseenMessages(sessionId, messages) { + const session = this.sessions.get(sessionId); + if (!session) { + return messages; + } + return messages.filter((msg) => { + const msgId = msg.id || `${msg.role}_${msg.content}`; + return !session.processedMessageIds.has(msgId); + }); + } + /** + * Mark messages as processed + */ + markMessagesAsProcessed(sessionId, messages) { + const session = this.sessions.get(sessionId); + if (session) { + for (const msg of messages) { + const msgId = msg.id || `${msg.role}_${msg.content}`; + session.processedMessageIds.add(msgId); + } + session.lastAccessedAt = Date.now(); + } + } + /** + * Get state value from session + */ + getStateValue(sessionId, key) { + const session = this.sessions.get(sessionId); + return session == null ? void 0 : session.state[key]; + } + /** + * Set state value in session + */ + setStateValue(sessionId, key, value) { + const session = this.sessions.get(sessionId); + if (session) { + session.state[key] = value; + session.lastAccessedAt = Date.now(); + } + } + /** + * Remove state keys from session + */ + removeStateKeys(sessionId, keys) { + const session = this.sessions.get(sessionId); + if (session) { + for (const key of keys) { + delete session.state[key]; + } + session.lastAccessedAt = Date.now(); + } + } + /** + * Clear all state for a session + */ + clearSessionState(sessionId) { + const session = this.sessions.get(sessionId); + if (session) { + session.state = {}; + session.lastAccessedAt = Date.now(); + } + } + /** + * Set Claude SDK client for a session + */ + setClient(sessionId, client) { + const session = this.sessions.get(sessionId); + if (session) { + session.client = client; + session.lastAccessedAt = Date.now(); + } + } + /** + * Get Claude SDK client for a session + */ + getClient(sessionId) { + const session = this.sessions.get(sessionId); + return session == null ? void 0 : session.client; + } + /** + * Get total number of sessions + */ + getSessionCount() { + return this.sessions.size; + } + /** + * Get number of sessions for a specific user + */ + getUserSessionCount(userId) { + let count = 0; + for (const session of this.sessions.values()) { + if (session.userId === userId) { + count++; + } + } + return count; + } + /** + * Get all session IDs + */ + getAllSessionIds() { + return Array.from(this.sessions.keys()); + } + /** + * Get all sessions for a specific user + */ + getUserSessions(userId) { + const userSessions = []; + for (const session of this.sessions.values()) { + if (session.userId === userId) { + userSessions.push(session); + } + } + return userSessions; + } + /** + * Clean up stale sessions + */ + cleanupStaleSessions() { + const now = Date.now(); + const sessionsToDelete = []; + for (const [sessionId, session] of this.sessions.entries()) { + if (now - session.lastAccessedAt > this.sessionTimeout) { + sessionsToDelete.push(sessionId); + } + } + for (const sessionId of sessionsToDelete) { + this.deleteSession(sessionId); + } + if (sessionsToDelete.length > 0) { + console.log(`Cleaned up ${sessionsToDelete.length} stale sessions`); + } + } + /** + * Start the cleanup interval + */ + startCleanupInterval() { + if (!this.cleanupInterval) { + this.cleanupInterval = setInterval(() => { + this.cleanupStaleSessions(); + }, CLEANUP_INTERVAL); + if (typeof this.cleanupInterval.unref === "function") { + this.cleanupInterval.unref(); + } + } + } + /** + * Stop the cleanup interval + */ + stopCleanupInterval() { + if (this.cleanupInterval) { + clearInterval(this.cleanupInterval); + this.cleanupInterval = null; + } + } + /** + * Clear all sessions (useful for testing) + */ + clearAllSessions() { + for (const sessionId of this.sessions.keys()) { + this.deleteSession(sessionId); + } + this.sessions.clear(); + } +}; +_SessionManager.instance = null; +var SessionManager = _SessionManager; + +// src/event-translator.ts +var import_client = require("@ag-ui/client"); + +// src/types.ts +function isAssistantMessage(message) { + return message.type === "assistant"; +} +function isResultMessage(message) { + return message.type === "result"; +} +function isTextBlock(block) { + return block.type === "text"; +} +function isToolUseBlock(block) { + return block.type === "tool_use"; +} +function isToolResultBlock(block) { + return block.type === "tool_result"; +} +function isThinkingBlock(block) { + return block.type === "thinking"; +} +function hasContentProperty(message) { + if (message.type === "assistant") { + return "message" in message && message.message !== null && typeof message.message === "object" && "content" in message.message && Array.isArray(message.message.content); + } + return "content" in message && Array.isArray(message.content); +} + +// src/event-translator.ts +var EventTranslator = class { + constructor(runId, threadId) { + this.messageIdCounter = 0; + this.currentMessageId = null; + this.runId = runId; + this.threadId = threadId; + } + /** + * Translate a Claude SDK message to AG-UI events + * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent + */ + translateMessage(message) { + const events = []; + if (hasContentProperty(message)) { + events.push(...this.translateAssistantMessage(message)); + } + return events; + } + /** + * Translate an AssistantMessage with content blocks + */ + translateAssistantMessage(message) { + var _a; + const events = []; + const content = ((_a = message.message) == null ? void 0 : _a.content) || []; + for (const block of content) { + if (isTextBlock(block)) { + events.push(...this.translateTextBlock(block)); + } else if (isToolUseBlock(block)) { + events.push(...this.translateToolUseBlock(block)); + } else if (isToolResultBlock(block)) { + events.push(...this.translateToolResultBlock(block)); + } + } + return events; + } + /** + * Translate a TextBlock to text message events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + translateTextBlock(block) { + const events = []; + const messageId = this.generateMessageId(); + events.push({ + type: import_client.EventType.TEXT_MESSAGE_START, + messageId, + role: "assistant" + }); + const text = block.text; + if (text.length > 0) { + events.push({ + type: import_client.EventType.TEXT_MESSAGE_CONTENT, + messageId, + delta: text + }); + } + events.push({ + type: import_client.EventType.TEXT_MESSAGE_END, + messageId + }); + return events; + } + /** + * Translate a ToolUseBlock to tool call events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + translateToolUseBlock(block) { + const events = []; + const toolCallId = block.id; + events.push({ + type: import_client.EventType.TOOL_CALL_START, + toolCallId, + toolCallName: block.name + }); + const argsJson = JSON.stringify(block.input); + if (argsJson.length > 0) { + events.push({ + type: import_client.EventType.TOOL_CALL_ARGS, + toolCallId, + delta: argsJson + }); + } + events.push({ + type: import_client.EventType.TOOL_CALL_END, + toolCallId + }); + return events; + } + /** + * Translate a ToolResultBlock to tool call result event + */ + translateToolResultBlock(block) { + const events = []; + let resultContent; + if (typeof block.content === "string") { + resultContent = block.content; + } else if (Array.isArray(block.content)) { + resultContent = block.content.map((item) => { + if (item.type === "text") { + return item.text || ""; + } + return JSON.stringify(item); + }).join("\n"); + } else { + resultContent = JSON.stringify(block.content); + } + const messageId = this.generateMessageId(); + events.push(__spreadValues({ + type: import_client.EventType.TOOL_CALL_RESULT, + toolCallId: block.tool_use_id, + messageId, + content: resultContent + }, block.is_error && { role: "tool" })); + return events; + } + /** + * Generate a unique message ID + */ + generateMessageId() { + this.messageIdCounter++; + return `msg_${this.runId}_${this.messageIdCounter}`; + } + /** + * Reset the translator state for a new execution + */ + reset() { + this.messageIdCounter = 0; + this.currentMessageId = null; + } + /** + * Get current message ID + */ + getCurrentMessageId() { + return this.currentMessageId; + } + /** + * Set current message ID + */ + setCurrentMessageId(messageId) { + this.currentMessageId = messageId; + } +}; + +// src/tool-adapter.ts +var import_zod = require("zod"); +var ToolAdapter = class { + /** + * Convert AG-UI tools to Claude SDK MCP tool definitions + */ + static convertAgUiToolsToSdk(tools) { + return tools.map((tool) => this.convertSingleTool(tool)); + } + /** + * Convert a single AG-UI tool to Claude SDK format + */ + static convertSingleTool(tool) { + const zodSchema = this.convertJsonSchemaToZod(tool.parameters || {}); + return { + name: tool.name, + description: tool.description || "", + inputSchema: zodSchema, + handler: async (args) => { + if (tool.client) { + return { + content: [ + { + type: "text", + text: JSON.stringify({ + toolName: tool.name, + args, + isClientTool: true, + isLongRunning: true + }) + } + ] + }; + } + if (tool.handler) { + try { + const result = await tool.handler(args); + return { + content: [ + { + type: "text", + text: typeof result === "string" ? result : JSON.stringify(result) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: "text", + text: error.message || "Tool execution failed" + } + ], + isError: true + }; + } + } + return { + content: [ + { + type: "text", + text: "Tool executed (no handler)" + } + ] + }; + } + }; + } + /** + * Convert JSON Schema to Zod schema + */ + static convertJsonSchemaToZod(jsonSchema) { + if (!jsonSchema || typeof jsonSchema !== "object") { + return import_zod.z.object({}); + } + const properties = jsonSchema.properties || {}; + const required = jsonSchema.required || []; + const zodShape = {}; + for (const [key, prop] of Object.entries(properties)) { + const propSchema = prop; + let zodType = this.convertJsonSchemaTypeToZod(propSchema); + if (!required.includes(key)) { + zodType = zodType.optional(); + } + zodShape[key] = zodType; + } + return import_zod.z.object(zodShape); + } + /** + * Convert a single JSON Schema type to Zod type + */ + static convertJsonSchemaTypeToZod(schema) { + const type = schema.type; + switch (type) { + case "string": + if (schema.enum) { + return import_zod.z.enum(schema.enum); + } + return import_zod.z.string(); + case "number": + case "integer": + let numType = type === "integer" ? import_zod.z.number().int() : import_zod.z.number(); + if (schema.minimum !== void 0) { + numType = numType.min(schema.minimum); + } + if (schema.maximum !== void 0) { + numType = numType.max(schema.maximum); + } + return numType; + case "boolean": + return import_zod.z.boolean(); + case "array": + if (schema.items) { + const itemType = this.convertJsonSchemaTypeToZod(schema.items); + return import_zod.z.array(itemType); + } + return import_zod.z.array(import_zod.z.any()); + case "object": + if (schema.properties) { + return this.convertJsonSchemaToZod(schema); + } + return import_zod.z.record(import_zod.z.any()); + case "null": + return import_zod.z.null(); + default: + return import_zod.z.any(); + } + } + /** + * Create an MCP server configuration for AG-UI tools + */ + static async createMcpServerForTools(tools) { + const sdkTools = this.convertAgUiToolsToSdk(tools); + const { createSdkMcpServer } = await import("@anthropic-ai/claude-agent-sdk"); + return createSdkMcpServer({ + name: "ag_ui_tools", + version: "1.0.0", + tools: sdkTools + // Cast to any to avoid type incompatibility + }); + } + /** + * Extract tool calls from Claude SDK response + */ + static extractToolCalls(message) { + if (!message.content || !Array.isArray(message.content)) { + return []; + } + return message.content.filter((block) => block.type === "tool_use").map((block) => ({ + id: block.id, + name: block.name, + input: block.input + })); + } + /** + * Check if a tool is a long-running client tool + */ + static isClientTool(toolName, tools) { + const tool = tools.find((t) => t.name === toolName); + return (tool == null ? void 0 : tool.client) === true; + } + /** + * Check if a tool is marked as long-running + */ + static isLongRunningTool(toolName, tools) { + const tool = tools.find((t) => t.name === toolName); + return (tool == null ? void 0 : tool.client) === true || (tool == null ? void 0 : tool.longRunning) === true; + } + /** + * Format tool names for Claude SDK (with MCP server prefix) + */ + static formatToolNameForSdk(toolName, serverName = "ag_ui_tools") { + return `mcp__${serverName}__${toolName}`; + } + /** + * Parse tool name from SDK format (remove MCP server prefix) + */ + static parseToolNameFromSdk(sdkToolName) { + const parts = sdkToolName.split("__"); + if (parts.length >= 3 && parts[0] === "mcp") { + return parts.slice(2).join("__"); + } + return sdkToolName; + } + /** + * Get allowed tools list for SDK options + */ + static getAllowedToolsList(tools, serverName = "ag_ui_tools") { + return tools.map((tool) => this.formatToolNameForSdk(tool.name, serverName)); + } +}; + +// src/execution-state.ts +var ExecutionState = class { + constructor(id, sessionId) { + this.id = id; + this.sessionId = sessionId; + this._isRunning = true; + this._startTime = Date.now(); + this._events = []; + this._abortController = new AbortController(); + } + /** + * Check if execution is running + */ + get isRunning() { + return this._isRunning; + } + /** + * Get start time + */ + get startTime() { + return this._startTime; + } + /** + * Get end time + */ + get endTime() { + return this._endTime; + } + /** + * Get duration in milliseconds + */ + get duration() { + const end = this._endTime || Date.now(); + return end - this._startTime; + } + /** + * Get all collected events + */ + get events() { + return [...this._events]; + } + /** + * Get error if any + */ + get error() { + return this._error; + } + /** + * Get abort signal + */ + get signal() { + return this._abortController.signal; + } + /** + * Add an event to the execution state + */ + addEvent(event) { + this._events.push(event); + } + /** + * Add multiple events + */ + addEvents(events) { + this._events.push(...events); + } + /** + * Mark execution as completed + */ + complete() { + if (this._isRunning) { + this._isRunning = false; + this._endTime = Date.now(); + } + } + /** + * Mark execution as failed + */ + fail(error) { + if (this._isRunning) { + this._isRunning = false; + this._endTime = Date.now(); + this._error = error; + } + } + /** + * Abort the execution + */ + abort() { + if (this._isRunning) { + this._abortController.abort(); + this._isRunning = false; + this._endTime = Date.now(); + } + } + /** + * Get execution statistics + */ + getStats() { + return { + duration: this.duration, + eventCount: this._events.length, + isRunning: this._isRunning, + hasError: !!this._error + }; + } + /** + * Clear events (useful for memory management) + */ + clearEvents() { + this._events = []; + } + /** + * Get the last N events + */ + getLastEvents(count) { + return this._events.slice(-count); + } + /** + * Check if execution has been aborted + */ + isAborted() { + return this._abortController.signal.aborted; + } +}; +var ExecutionStateManager = class { + constructor(maxExecutions = 100) { + this.executions = /* @__PURE__ */ new Map(); + this.maxExecutions = maxExecutions; + } + /** + * Create a new execution state + */ + createExecution(id, sessionId) { + const execution = new ExecutionState(id, sessionId); + this.executions.set(id, execution); + if (this.executions.size > this.maxExecutions) { + this.cleanupOldExecutions(); + } + return execution; + } + /** + * Get an execution state by ID + */ + getExecution(id) { + return this.executions.get(id); + } + /** + * Check if an execution exists + */ + hasExecution(id) { + return this.executions.has(id); + } + /** + * Delete an execution state + */ + deleteExecution(id) { + return this.executions.delete(id); + } + /** + * Get all executions for a session + */ + getSessionExecutions(sessionId) { + const executions = []; + for (const execution of this.executions.values()) { + if (execution.sessionId === sessionId) { + executions.push(execution); + } + } + return executions; + } + /** + * Get running executions + */ + getRunningExecutions() { + const running = []; + for (const execution of this.executions.values()) { + if (execution.isRunning) { + running.push(execution); + } + } + return running; + } + /** + * Get completed executions + */ + getCompletedExecutions() { + const completed = []; + for (const execution of this.executions.values()) { + if (!execution.isRunning) { + completed.push(execution); + } + } + return completed; + } + /** + * Abort all running executions for a session + */ + abortSessionExecutions(sessionId) { + const sessionExecutions = this.getSessionExecutions(sessionId); + for (const execution of sessionExecutions) { + if (execution.isRunning) { + execution.abort(); + } + } + } + /** + * Clean up old completed executions + */ + cleanupOldExecutions() { + const completed = this.getCompletedExecutions(); + completed.sort((a, b) => { + const aTime = a.endTime || a.startTime; + const bTime = b.endTime || b.startTime; + return aTime - bTime; + }); + const toRemove = Math.max(0, this.executions.size - this.maxExecutions); + for (let i = 0; i < toRemove && i < completed.length; i++) { + this.executions.delete(completed[i].id); + } + } + /** + * Clear all executions + */ + clearAll() { + this.executions.clear(); + } + /** + * Get total execution count + */ + getExecutionCount() { + return this.executions.size; + } + /** + * Get execution statistics + */ + getStats() { + let running = 0; + let completed = 0; + let failed = 0; + for (const execution of this.executions.values()) { + if (execution.isRunning) { + running++; + } else if (execution.error) { + failed++; + } else { + completed++; + } + } + return { + total: this.executions.size, + running, + completed, + failed + }; + } +}; + +// src/utils/converters.ts +function convertAgUiMessagesToPrompt(messages) { + for (let i = messages.length - 1; i >= 0; i--) { + const msg = messages[i]; + if (msg.role === "user") { + return extractMessageContent(msg); + } + } + return "Hello"; +} +function extractMessageContent(message) { + if (typeof message.content === "string") { + return message.content; + } + if (Array.isArray(message.content)) { + return message.content.map((block) => { + if (typeof block === "string") { + return block; + } + if (block.type === "text") { + return block.text || ""; + } + return ""; + }).filter(Boolean).join("\n"); + } + return String(message.content); +} +function convertAgUiMessageToClaude(message) { + const role = message.role; + const content = extractMessageContent(message); + return { + role, + content + }; +} +function convertAgUiMessagesToClaude(messages) { + return messages.map(convertAgUiMessageToClaude); +} +function hasToolResults(messages) { + return messages.some((msg) => { + if (typeof msg.content === "string") { + return false; + } + if (Array.isArray(msg.content)) { + return msg.content.some((block) => { + return typeof block === "object" && block.type === "tool_result"; + }); + } + return false; + }); +} +function extractToolResults(messages) { + const results = []; + for (const msg of messages) { + if (typeof msg.content === "string") { + continue; + } + if (Array.isArray(msg.content)) { + for (const block of msg.content) { + if (typeof block === "object" && block.type === "tool_result") { + results.push({ + toolCallId: block.toolCallId || block.tool_use_id || "", + result: block.result || block.content || "" + }); + } + } + } + } + return results; +} +function generateRunId() { + return `run_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; +} +function generateMessageId(prefix = "msg") { + return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; +} +function safeJsonParse(json, defaultValue = null) { + try { + return JSON.parse(json); + } catch (e) { + return defaultValue; + } +} +function safeJsonStringify(obj, defaultValue = "{}") { + try { + return JSON.stringify(obj); + } catch (e) { + return defaultValue; + } +} +function isToolResultSubmission(messages) { + if (messages.length === 0) { + return false; + } + const lastMessage = messages[messages.length - 1]; + return hasToolResults([lastMessage]); +} +function formatErrorMessage(error) { + if (error instanceof Error) { + return error.message; + } + if (typeof error === "string") { + return error; + } + return "An unknown error occurred"; +} +function truncateText(text, maxLength = 1e3) { + if (text.length <= maxLength) { + return text; + } + return text.slice(0, maxLength) + "..."; +} +function mergeTextBlocks(blocks) { + return blocks.filter((block) => block.type === "text" && block.text).map((block) => block.text).join(""); +} + +// src/agent.ts +var ClaudeAgent = class extends import_client2.AbstractAgent { + constructor(config) { + super(config); + this.apiKey = config.apiKey; + this.baseUrl = config.baseUrl; + this.sessionTimeout = config.sessionTimeout || 30 * 60 * 1e3; + this.enablePersistentSessions = config.enablePersistentSessions !== false; + this.permissionMode = this.mapPermissionMode(config.permissionMode || "bypassPermissions"); + this.stderr = config.stderr; + this.verbose = config.verbose; + this.sessionManager = SessionManager.getInstance(this.sessionTimeout); + this.executionStateManager = new ExecutionStateManager(); + } + /** + * Map legacy permission modes to new SDK values for backward compatibility + */ + mapPermissionMode(mode) { + const modeMap = { + "ask": "default", + "auto": "bypassPermissions", + "none": "bypassPermissions", + "default": "default", + "acceptEdits": "acceptEdits", + "bypassPermissions": "bypassPermissions", + "plan": "plan" + }; + return modeMap[mode || "bypassPermissions"] || "bypassPermissions"; + } + /** + * Run the agent with the given input + */ + run(input) { + return new import_rxjs.Observable((subscriber) => { + this.executeAgent(input, subscriber).catch((error) => { + subscriber.error(error); + }); + }); + } + /** + * Execute the agent asynchronously + */ + async executeAgent(input, subscriber) { + const runId = generateRunId(); + const sessionId = input.threadId || `session_${Date.now()}`; + const execution = this.executionStateManager.createExecution(runId, sessionId); + try { + const runStartedEvent = { + type: import_client2.EventType.RUN_STARTED, + threadId: sessionId, + runId + }; + subscriber.next(runStartedEvent); + execution.addEvent(runStartedEvent); + const session = this.sessionManager.getSession(sessionId, "default"); + const unseenMessages = this.sessionManager.getUnseenMessages( + sessionId, + input.messages || [] + ); + const isToolResult = isToolResultSubmission(input.messages || []); + const tools = input.tools || []; + const options = await this.prepareClaudeOptions(tools); + const prompt = convertAgUiMessagesToPrompt(unseenMessages); + const stepStartedEvent = { + type: import_client2.EventType.STEP_STARTED, + stepName: `step_${runId}_1` + }; + subscriber.next(stepStartedEvent); + execution.addEvent(stepStartedEvent); + await this.callClaudeSDK( + prompt, + options, + session, + runId, + sessionId, + subscriber, + execution + ); + this.sessionManager.markMessagesAsProcessed(sessionId, unseenMessages); + const stepFinishedEvent = { + type: import_client2.EventType.STEP_FINISHED, + stepName: `step_${runId}_1` + }; + subscriber.next(stepFinishedEvent); + execution.addEvent(stepFinishedEvent); + const runFinishedEvent = { + type: import_client2.EventType.RUN_FINISHED, + threadId: sessionId, + runId + }; + subscriber.next(runFinishedEvent); + execution.addEvent(runFinishedEvent); + execution.complete(); + subscriber.complete(); + } catch (error) { + const runErrorEvent = { + type: import_client2.EventType.RUN_ERROR, + message: formatErrorMessage(error) + }; + subscriber.next(runErrorEvent); + execution.addEvent(runErrorEvent); + execution.fail(error); + subscriber.complete(); + } + } + /** + * Prepare Claude SDK options + * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + * But baseUrl needs to be explicitly passed for third-party APIs + */ + async prepareClaudeOptions(tools) { + const baseUrl = this.baseUrl || process.env.ANTHROPIC_BASE_URL; + const apiKey = this.apiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY; + console.log("[Claude Agent] Preparing SDK options:", { + hasApiKey: !!apiKey, + hasBaseUrl: !!baseUrl, + baseUrl: baseUrl || "not set", + permissionMode: this.permissionMode, + hasStderr: !!this.stderr, + verbose: this.verbose + }); + const options = __spreadProps(__spreadValues(__spreadValues({ + permissionMode: this.permissionMode + }, this.stderr && { stderr: this.stderr }), this.verbose !== void 0 && { verbose: this.verbose }), { + env: process.env + }); + if (this.stderr) { + console.log("[Claude Agent] \u2713 stderr callback is configured for error logging"); + } else { + console.warn("[Claude Agent] \u26A0\uFE0F stderr callback not configured - CLI errors may not be visible"); + } + if (tools && tools.length > 0) { + const mcpServer = await ToolAdapter.createMcpServerForTools(tools); + options.mcpServers = { + ag_ui_tools: mcpServer + }; + options.allowedTools = ToolAdapter.getAllowedToolsList(tools); + } + return options; + } + /** + * Call Claude SDK + * Note: Currently only stateless mode is supported via query() function + */ + async callClaudeSDK(prompt, options, session, runId, sessionId, subscriber, execution) { + const eventTranslator = new EventTranslator(runId, sessionId); + await this.callClaudeSDKStateless( + prompt, + options, + eventTranslator, + subscriber, + execution + ); + } + /** + * Call Claude SDK in persistent session mode + * Note: The current SDK only supports stateless mode via query() function + * This method falls back to stateless mode + */ + async callClaudeSDKPersistent(prompt, options, session, eventTranslator, subscriber, execution) { + await this.callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution); + } + /** + * Call Claude SDK in stateless mode + */ + async callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution) { + try { + console.log("[Claude Agent] Environment check:"); + console.log(" ANTHROPIC_API_KEY:", process.env.ANTHROPIC_API_KEY ? "SET" : "NOT SET"); + console.log(" ANTHROPIC_AUTH_TOKEN:", process.env.ANTHROPIC_AUTH_TOKEN ? "SET" : "NOT SET"); + console.log(" ANTHROPIC_BASE_URL:", process.env.ANTHROPIC_BASE_URL || "NOT SET (using default)"); + console.log("[Claude Agent] Options passed to SDK:", { + hasApiKey: !!options.apiKey, + hasBaseUrl: !!options.baseUrl, + permissionMode: options.permissionMode, + hasMcpServers: !!options.mcpServers + }); + const { query } = await this.importClaudeSDK(); + console.log("[Claude Agent] Calling SDK query()..."); + const queryResult = query({ prompt, options }); + try { + for (var iter = __forAwait(queryResult), more, temp, error; more = !(temp = await iter.next()).done; more = false) { + const message = temp.value; + console.log("[Claude Agent] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"); + console.log("[Claude Agent] Received message type:", (message == null ? void 0 : message.type) || "unknown"); + console.log("[Claude Agent] Full message:", JSON.stringify(message, null, 2)); + if (execution.isAborted()) { + console.log("[Claude Agent] Execution aborted by user"); + break; + } + const events = eventTranslator.translateMessage(message); + console.log("[Claude Agent] Translated events count:", events.length); + for (const event of events) { + console.log("[Claude Agent] Sending event:", JSON.stringify(event, null, 2)); + subscriber.next(event); + execution.addEvent(event); + } + console.log("[Claude Agent] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"); + } + } catch (temp) { + error = [temp]; + } finally { + try { + more && (temp = iter.return) && await temp.call(iter); + } finally { + if (error) + throw error[0]; + } + } + console.log("[Claude Agent] Query completed successfully"); + } catch (error2) { + console.error("[Claude Agent] ERROR Details:"); + console.error(" Message:", error2.message); + console.error(" Stack:", error2.stack); + console.error(" Error object:", JSON.stringify(error2, Object.getOwnPropertyNames(error2), 2)); + if (error2.message && error2.message.includes("exited with code")) { + throw new Error( + `Claude Code process failed. Please ensure: +1. Claude CLI is installed and accessible (run: claude --version) +2. ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set correctly in environment variables +3. You have proper permissions to run Claude Code +4. If using ANTHROPIC_BASE_URL, ensure it supports Claude Code protocol + +Original error: ${error2.message} +Error stack: ${error2.stack || "No stack trace"}` + ); + } + if (error2.message && (error2.message.includes("API key") || error2.message.includes("auth"))) { + throw new Error( + `API key error: ${error2.message} +Please ensure ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set in environment variables.` + ); + } + throw error2; + } + } + /** + * Dynamically import Claude SDK + */ + async importClaudeSDK() { + try { + return await import("@anthropic-ai/claude-agent-sdk"); + } catch (error) { + throw new Error( + "Claude Agent SDK not found. Please install it: npm install @anthropic-ai/claude-agent-sdk" + ); + } + } + /** + * Abort a running execution + */ + abortExecution(runId) { + const execution = this.executionStateManager.getExecution(runId); + if (execution) { + execution.abort(); + } + } + /** + * Get execution state + */ + getExecutionState(runId) { + return this.executionStateManager.getExecution(runId); + } + /** + * Get session manager (for testing) + */ + getSessionManager() { + return this.sessionManager; + } + /** + * Get execution state manager (for testing) + */ + getExecutionStateManager() { + return this.executionStateManager; + } + /** + * Cleanup resources + */ + async cleanup() { + const runningExecutions = this.executionStateManager.getRunningExecutions(); + for (const execution of runningExecutions) { + execution.abort(); + } + this.sessionManager.clearAllSessions(); + this.executionStateManager.clearAll(); + } +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ClaudeAgent, + EventTranslator, + ExecutionState, + ExecutionStateManager, + SessionManager, + ToolAdapter, + convertAgUiMessageToClaude, + convertAgUiMessagesToClaude, + convertAgUiMessagesToPrompt, + extractMessageContent, + extractToolResults, + formatErrorMessage, + generateMessageId, + generateRunId, + hasContentProperty, + hasToolResults, + isAssistantMessage, + isResultMessage, + isTextBlock, + isThinkingBlock, + isToolResultBlock, + isToolResultSubmission, + isToolUseBlock, + mergeTextBlocks, + safeJsonParse, + safeJsonStringify, + truncateText +}); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/integrations/claude-agent-sdk/typescript/dist/index.js.map b/integrations/claude-agent-sdk/typescript/dist/index.js.map new file mode 100644 index 000000000..2523a4b13 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/index.ts","../src/agent.ts","../src/session-manager.ts","../src/event-translator.ts","../src/types.ts","../src/tool-adapter.ts","../src/execution-state.ts","../src/utils/converters.ts"],"sourcesContent":["/**\n * Claude Agent SDK integration with AG-UI Protocol\n * \n * This package provides a bridge between Claude Agent SDK and the AG-UI Protocol,\n * enabling Claude agents to work seamlessly with AG-UI applications.\n * \n * @example\n * ```typescript\n * import { ClaudeAgent } from '@ag-ui/claude';\n * \n * const agent = new ClaudeAgent({\n * apiKey: process.env.ANTHROPIC_API_KEY,\n * enablePersistentSessions: true\n * });\n * \n * agent.run(input).subscribe({\n * next: (event) => console.log(event),\n * error: (error) => console.error(error),\n * complete: () => console.log('Done')\n * });\n * ```\n */\n\n// Main agent class\nexport { ClaudeAgent } from './agent';\n\n// Session management\nexport { SessionManager } from './session-manager';\n\n// Event translation\nexport { EventTranslator } from './event-translator';\n\n// Tool adaptation\nexport { ToolAdapter } from './tool-adapter';\n\n// Execution state management\nexport { ExecutionState, ExecutionStateManager } from './execution-state';\n\n// Utility functions\nexport {\n convertAgUiMessagesToPrompt,\n convertAgUiMessageToClaude,\n convertAgUiMessagesToClaude,\n extractMessageContent,\n hasToolResults,\n extractToolResults,\n generateRunId,\n generateMessageId,\n safeJsonParse,\n safeJsonStringify,\n isToolResultSubmission,\n formatErrorMessage,\n truncateText,\n mergeTextBlocks,\n} from './utils/converters';\n\n// Type exports\nexport type {\n ClaudeAgentConfig,\n ProcessedEvents,\n Session,\n ClaudeSDKClient,\n Options,\n Query,\n SDKMessage,\n SDKAssistantMessage,\n SDKUserMessage,\n SDKSystemMessage,\n SDKResultMessage,\n SDKPartialAssistantMessage,\n SDKCompactBoundaryMessage,\n SDKPermissionDenial,\n ContentBlock,\n TextBlock,\n ToolUseBlock,\n ToolResultBlock,\n ThinkingBlock,\n SdkMcpToolDefinition,\n CallToolResult,\n McpSdkServerConfigWithInstance,\n ExecutionState as ExecutionStateType,\n ToolExecutionContext,\n ConvertedMessage,\n} from './types';\n\n// Re-export type guards\nexport {\n isAssistantMessage,\n isResultMessage,\n isTextBlock,\n isToolUseBlock,\n isToolResultBlock,\n isThinkingBlock,\n hasContentProperty,\n} from './types';\n\n","/**\n * Claude Agent: Main agent class that integrates Claude SDK with AG-UI Protocol\n */\n\nimport { Observable, Subscriber } from 'rxjs';\nimport {\n AbstractAgent,\n RunAgentInput,\n EventType,\n RunStartedEvent,\n RunFinishedEvent,\n RunErrorEvent,\n StepStartedEvent,\n StepFinishedEvent,\n} from '@ag-ui/client';\nimport type {\n ClaudeAgentConfig,\n ProcessedEvents,\n ClaudeSDKClient,\n Options,\n SDKMessage,\n} from './types';\nimport { SessionManager } from './session-manager';\nimport { EventTranslator } from './event-translator';\nimport { ToolAdapter } from './tool-adapter';\nimport { ExecutionState, ExecutionStateManager } from './execution-state';\nimport {\n generateRunId,\n convertAgUiMessagesToPrompt,\n isToolResultSubmission,\n formatErrorMessage,\n} from './utils/converters';\n\n/**\n * ClaudeAgent integrates Claude Agent SDK with AG-UI Protocol\n */\nexport class ClaudeAgent extends AbstractAgent {\n private sessionManager: SessionManager;\n private executionStateManager: ExecutionStateManager;\n private apiKey?: string;\n private baseUrl?: string;\n private sessionTimeout: number;\n private enablePersistentSessions: boolean;\n private permissionMode: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';\n private stderr?: (data: string) => void;\n private verbose?: boolean;\n\n constructor(config: ClaudeAgentConfig) {\n super(config);\n // SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment\n // Only set these if explicitly provided in config (optional)\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl;\n this.sessionTimeout = config.sessionTimeout || 30 * 60 * 1000; // 30 minutes\n this.enablePersistentSessions = config.enablePersistentSessions !== false;\n // Map legacy permission modes to new SDK values for backward compatibility\n this.permissionMode = this.mapPermissionMode(config.permissionMode || 'bypassPermissions');\n this.stderr = config.stderr;\n this.verbose = config.verbose;\n this.sessionManager = SessionManager.getInstance(this.sessionTimeout);\n this.executionStateManager = new ExecutionStateManager();\n }\n\n /**\n * Map legacy permission modes to new SDK values for backward compatibility\n */\n private mapPermissionMode(mode?: string): 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' {\n const modeMap: Record = {\n 'ask': 'default',\n 'auto': 'bypassPermissions',\n 'none': 'bypassPermissions',\n 'default': 'default',\n 'acceptEdits': 'acceptEdits',\n 'bypassPermissions': 'bypassPermissions',\n 'plan': 'plan',\n };\n return modeMap[mode || 'bypassPermissions'] || 'bypassPermissions';\n }\n\n /**\n * Run the agent with the given input\n */\n run(input: RunAgentInput): Observable {\n return new Observable((subscriber) => {\n this.executeAgent(input, subscriber).catch((error) => {\n subscriber.error(error);\n });\n });\n }\n\n /**\n * Execute the agent asynchronously\n */\n private async executeAgent(\n input: RunAgentInput,\n subscriber: Subscriber\n ): Promise {\n const runId = generateRunId();\n const sessionId = input.threadId || `session_${Date.now()}`;\n\n // Create execution state\n const execution = this.executionStateManager.createExecution(runId, sessionId);\n\n try {\n // Emit run started event\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n threadId: sessionId,\n runId,\n };\n subscriber.next(runStartedEvent);\n execution.addEvent(runStartedEvent);\n\n // Get or create session\n const session = this.sessionManager.getSession(sessionId, 'default');\n\n // Get unseen messages\n const unseenMessages = this.sessionManager.getUnseenMessages(\n sessionId,\n input.messages || []\n );\n\n // Check if this is a tool result submission\n const isToolResult = isToolResultSubmission(input.messages || []);\n\n // Prepare tools\n const tools = input.tools || [];\n \n // Prepare options for Claude SDK\n const options = await this.prepareClaudeOptions(tools);\n\n // Extract prompt from messages\n const prompt = convertAgUiMessagesToPrompt(unseenMessages);\n\n // Emit step started event\n const stepStartedEvent: StepStartedEvent = {\n type: EventType.STEP_STARTED,\n stepName: `step_${runId}_1`,\n };\n subscriber.next(stepStartedEvent);\n execution.addEvent(stepStartedEvent);\n\n // Call Claude SDK\n await this.callClaudeSDK(\n prompt,\n options,\n session,\n runId,\n sessionId,\n subscriber,\n execution\n );\n\n // Mark messages as processed\n this.sessionManager.markMessagesAsProcessed(sessionId, unseenMessages);\n\n // Emit step finished event\n const stepFinishedEvent: StepFinishedEvent = {\n type: EventType.STEP_FINISHED,\n stepName: `step_${runId}_1`,\n };\n subscriber.next(stepFinishedEvent);\n execution.addEvent(stepFinishedEvent);\n\n // Emit run finished event\n const runFinishedEvent: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: sessionId,\n runId,\n };\n subscriber.next(runFinishedEvent);\n execution.addEvent(runFinishedEvent);\n\n // Complete execution\n execution.complete();\n subscriber.complete();\n } catch (error: any) {\n // Emit run error event\n const runErrorEvent: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: formatErrorMessage(error),\n };\n subscriber.next(runErrorEvent);\n execution.addEvent(runErrorEvent);\n\n // Mark execution as failed\n execution.fail(error);\n\n // Complete the observable\n subscriber.complete();\n }\n }\n\n /**\n * Prepare Claude SDK options\n * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment\n * But baseUrl needs to be explicitly passed for third-party APIs\n */\n private async prepareClaudeOptions(tools: any[]): Promise {\n // Get baseUrl from config or environment\n const baseUrl = this.baseUrl || process.env.ANTHROPIC_BASE_URL;\n const apiKey = this.apiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY;\n \n // Debug logging\n console.log('[Claude Agent] Preparing SDK options:', {\n hasApiKey: !!apiKey,\n hasBaseUrl: !!baseUrl,\n baseUrl: baseUrl || 'not set',\n permissionMode: this.permissionMode,\n hasStderr: !!this.stderr,\n verbose: this.verbose,\n });\n \n const options: Options = {\n permissionMode: this.permissionMode,\n // Add stderr callback for debugging - CRITICAL for error logging\n ...(this.stderr && { stderr: this.stderr }),\n // Add verbose flag for detailed logging\n ...(this.verbose !== undefined && { verbose: this.verbose }),\n env: process.env\n };\n \n // Verify stderr callback is set\n if (this.stderr) {\n console.log('[Claude Agent] āœ“ stderr callback is configured for error logging');\n } else {\n console.warn('[Claude Agent] āš ļø stderr callback not configured - CLI errors may not be visible');\n }\n\n // Add tools if provided\n if (tools && tools.length > 0) {\n const mcpServer = await ToolAdapter.createMcpServerForTools(tools);\n options.mcpServers = {\n ag_ui_tools: mcpServer,\n };\n\n // Set allowed tools\n options.allowedTools = ToolAdapter.getAllowedToolsList(tools);\n }\n\n return options;\n }\n\n /**\n * Call Claude SDK\n * Note: Currently only stateless mode is supported via query() function\n */\n private async callClaudeSDK(\n prompt: string,\n options: Options,\n session: any,\n runId: string,\n sessionId: string,\n subscriber: Subscriber,\n execution: ExecutionState\n ): Promise {\n const eventTranslator = new EventTranslator(runId, sessionId);\n\n // The current @anthropic-ai/claude-agent-sdk only supports stateless mode\n // via the query() function. We use stateless mode for both cases.\n await this.callClaudeSDKStateless(\n prompt,\n options,\n eventTranslator,\n subscriber,\n execution\n );\n }\n\n /**\n * Call Claude SDK in persistent session mode\n * Note: The current SDK only supports stateless mode via query() function\n * This method falls back to stateless mode\n */\n private async callClaudeSDKPersistent(\n prompt: string,\n options: Options,\n session: any,\n eventTranslator: EventTranslator,\n subscriber: Subscriber,\n execution: ExecutionState\n ): Promise {\n // The current @anthropic-ai/claude-agent-sdk only supports stateless mode\n // via the query() function. For persistent sessions, we use query() \n // but maintain session state in our SessionManager\n await this.callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution);\n }\n\n /**\n * Call Claude SDK in stateless mode\n */\n private async callClaudeSDKStateless(\n prompt: string,\n options: Options,\n eventTranslator: EventTranslator,\n subscriber: Subscriber,\n execution: ExecutionState\n ): Promise {\n try {\n // Log environment variables for debugging\n console.log('[Claude Agent] Environment check:');\n console.log(' ANTHROPIC_API_KEY:', process.env.ANTHROPIC_API_KEY ? 'SET' : 'NOT SET');\n console.log(' ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN ? 'SET' : 'NOT SET');\n console.log(' ANTHROPIC_BASE_URL:', process.env.ANTHROPIC_BASE_URL || 'NOT SET (using default)');\n console.log('[Claude Agent] Options passed to SDK:', {\n hasApiKey: !!options.apiKey,\n hasBaseUrl: !!options.baseUrl,\n permissionMode: options.permissionMode,\n hasMcpServers: !!options.mcpServers,\n });\n\n // Import Claude SDK dynamically\n const { query } = await this.importClaudeSDK();\n\n console.log('[Claude Agent] Calling SDK query()...');\n\n // Call query function\n // SDK will automatically read API key from environment variables (ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN)\n // if not provided in options.apiKey\n const queryResult = query({ prompt, options });\n\n // Process responses\n for await (const message of queryResult) {\n console.log('[Claude Agent] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n console.log('[Claude Agent] Received message type:', message?.type || 'unknown');\n console.log('[Claude Agent] Full message:', JSON.stringify(message, null, 2));\n \n if (execution.isAborted()) {\n console.log('[Claude Agent] Execution aborted by user');\n break;\n }\n\n const events = eventTranslator.translateMessage(message);\n console.log('[Claude Agent] Translated events count:', events.length);\n for (const event of events) {\n console.log('[Claude Agent] Sending event:', JSON.stringify(event, null, 2));\n subscriber.next(event);\n execution.addEvent(event);\n }\n console.log('[Claude Agent] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n }\n \n console.log('[Claude Agent] Query completed successfully');\n } catch (error: any) {\n // Log detailed error information\n console.error('[Claude Agent] ERROR Details:');\n console.error(' Message:', error.message);\n console.error(' Stack:', error.stack);\n console.error(' Error object:', JSON.stringify(error, Object.getOwnPropertyNames(error), 2));\n \n // Handle Claude Code process errors\n if (error.message && error.message.includes('exited with code')) {\n throw new Error(\n `Claude Code process failed. Please ensure:\\n` +\n `1. Claude CLI is installed and accessible (run: claude --version)\\n` +\n `2. ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set correctly in environment variables\\n` +\n `3. You have proper permissions to run Claude Code\\n` +\n `4. If using ANTHROPIC_BASE_URL, ensure it supports Claude Code protocol\\n` +\n `\\nOriginal error: ${error.message}\\n` +\n `Error stack: ${error.stack || 'No stack trace'}`\n );\n }\n // Handle API key errors from SDK\n if (error.message && (error.message.includes('API key') || error.message.includes('auth'))) {\n throw new Error(\n `API key error: ${error.message}\\n` +\n `Please ensure ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set in environment variables.`\n );\n }\n throw error;\n }\n }\n\n /**\n * Dynamically import Claude SDK\n */\n private async importClaudeSDK(): Promise {\n try {\n return await import('@anthropic-ai/claude-agent-sdk');\n } catch (error) {\n throw new Error(\n 'Claude Agent SDK not found. Please install it: npm install @anthropic-ai/claude-agent-sdk'\n );\n }\n }\n\n /**\n * Abort a running execution\n */\n abortExecution(runId: string): void {\n const execution = this.executionStateManager.getExecution(runId);\n if (execution) {\n execution.abort();\n }\n }\n\n /**\n * Get execution state\n */\n getExecutionState(runId: string): ExecutionState | undefined {\n return this.executionStateManager.getExecution(runId);\n }\n\n /**\n * Get session manager (for testing)\n */\n getSessionManager(): SessionManager {\n return this.sessionManager;\n }\n\n /**\n * Get execution state manager (for testing)\n */\n getExecutionStateManager(): ExecutionStateManager {\n return this.executionStateManager;\n }\n\n /**\n * Cleanup resources\n */\n async cleanup(): Promise {\n // Abort all running executions\n const runningExecutions = this.executionStateManager.getRunningExecutions();\n for (const execution of runningExecutions) {\n execution.abort();\n }\n\n // Clear all sessions\n this.sessionManager.clearAllSessions();\n\n // Clear all executions\n this.executionStateManager.clearAll();\n }\n}\n\n","/**\n * Session manager: Manages agent sessions and state\n */\n\nimport type { Message } from '@ag-ui/client';\nimport type { Session, ClaudeSDKClient } from './types';\n\nconst DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes\nconst CLEANUP_INTERVAL = 5 * 60 * 1000; // 5 minutes\n\n/**\n * SessionManager handles session lifecycle, message tracking, and state management\n * Implements singleton pattern for centralized session control\n */\nexport class SessionManager {\n private static instance: SessionManager | null = null;\n private sessions: Map = new Map();\n private cleanupInterval: ReturnType | null = null;\n private sessionTimeout: number;\n\n private constructor(sessionTimeout: number = DEFAULT_SESSION_TIMEOUT) {\n this.sessionTimeout = sessionTimeout;\n this.startCleanupInterval();\n }\n\n /**\n * Get the singleton instance\n */\n static getInstance(sessionTimeout?: number): SessionManager {\n if (!SessionManager.instance) {\n SessionManager.instance = new SessionManager(sessionTimeout);\n }\n return SessionManager.instance;\n }\n\n /**\n * Reset the singleton instance (useful for testing)\n */\n static resetInstance(): void {\n if (SessionManager.instance) {\n SessionManager.instance.stopCleanupInterval();\n SessionManager.instance = null;\n }\n }\n\n /**\n * Get or create a session\n */\n getSession(sessionId: string, userId?: string): Session {\n let session = this.sessions.get(sessionId);\n\n if (!session) {\n session = {\n id: sessionId,\n userId,\n processedMessageIds: new Set(),\n state: {},\n createdAt: Date.now(),\n lastAccessedAt: Date.now(),\n };\n this.sessions.set(sessionId, session);\n } else {\n // Update last accessed time\n session.lastAccessedAt = Date.now();\n }\n\n return session;\n }\n\n /**\n * Check if a session exists\n */\n hasSession(sessionId: string): boolean {\n return this.sessions.has(sessionId);\n }\n\n /**\n * Delete a session\n */\n deleteSession(sessionId: string): boolean {\n const session = this.sessions.get(sessionId);\n if (session?.client) {\n // Close the Claude SDK client if it exists\n session.client.close().catch((error) => {\n console.error(`Error closing Claude SDK client for session ${sessionId}:`, error);\n });\n }\n return this.sessions.delete(sessionId);\n }\n\n /**\n * Track a processed message\n */\n trackMessage(sessionId: string, messageId: string): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.processedMessageIds.add(messageId);\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Check if a message has been processed\n */\n isMessageProcessed(sessionId: string, messageId: string): boolean {\n const session = this.sessions.get(sessionId);\n return session ? session.processedMessageIds.has(messageId) : false;\n }\n\n /**\n * Get unseen messages (messages not yet processed)\n */\n getUnseenMessages(sessionId: string, messages: Message[]): Message[] {\n const session = this.sessions.get(sessionId);\n if (!session) {\n return messages;\n }\n\n return messages.filter((msg) => {\n const msgId = msg.id || `${msg.role}_${msg.content}`;\n return !session.processedMessageIds.has(msgId);\n });\n }\n\n /**\n * Mark messages as processed\n */\n markMessagesAsProcessed(sessionId: string, messages: Message[]): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n for (const msg of messages) {\n const msgId = msg.id || `${msg.role}_${msg.content}`;\n session.processedMessageIds.add(msgId);\n }\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Get state value from session\n */\n getStateValue(sessionId: string, key: string): any {\n const session = this.sessions.get(sessionId);\n return session?.state[key];\n }\n\n /**\n * Set state value in session\n */\n setStateValue(sessionId: string, key: string, value: any): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.state[key] = value;\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Remove state keys from session\n */\n removeStateKeys(sessionId: string, keys: string[]): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n for (const key of keys) {\n delete session.state[key];\n }\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Clear all state for a session\n */\n clearSessionState(sessionId: string): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.state = {};\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Set Claude SDK client for a session\n */\n setClient(sessionId: string, client: ClaudeSDKClient): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.client = client;\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Get Claude SDK client for a session\n */\n getClient(sessionId: string): ClaudeSDKClient | undefined {\n const session = this.sessions.get(sessionId);\n return session?.client;\n }\n\n /**\n * Get total number of sessions\n */\n getSessionCount(): number {\n return this.sessions.size;\n }\n\n /**\n * Get number of sessions for a specific user\n */\n getUserSessionCount(userId: string): number {\n let count = 0;\n for (const session of this.sessions.values()) {\n if (session.userId === userId) {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Get all session IDs\n */\n getAllSessionIds(): string[] {\n return Array.from(this.sessions.keys());\n }\n\n /**\n * Get all sessions for a specific user\n */\n getUserSessions(userId: string): Session[] {\n const userSessions: Session[] = [];\n for (const session of this.sessions.values()) {\n if (session.userId === userId) {\n userSessions.push(session);\n }\n }\n return userSessions;\n }\n\n /**\n * Clean up stale sessions\n */\n private cleanupStaleSessions(): void {\n const now = Date.now();\n const sessionsToDelete: string[] = [];\n\n for (const [sessionId, session] of this.sessions.entries()) {\n if (now - session.lastAccessedAt > this.sessionTimeout) {\n sessionsToDelete.push(sessionId);\n }\n }\n\n for (const sessionId of sessionsToDelete) {\n this.deleteSession(sessionId);\n }\n\n if (sessionsToDelete.length > 0) {\n console.log(`Cleaned up ${sessionsToDelete.length} stale sessions`);\n }\n }\n\n /**\n * Start the cleanup interval\n */\n private startCleanupInterval(): void {\n if (!this.cleanupInterval) {\n this.cleanupInterval = setInterval(() => {\n this.cleanupStaleSessions();\n }, CLEANUP_INTERVAL);\n\n // Don't keep the process alive just for this interval\n if (typeof (this.cleanupInterval as any).unref === 'function') {\n (this.cleanupInterval as any).unref();\n }\n }\n }\n\n /**\n * Stop the cleanup interval\n */\n private stopCleanupInterval(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n }\n\n /**\n * Clear all sessions (useful for testing)\n */\n clearAllSessions(): void {\n for (const sessionId of this.sessions.keys()) {\n this.deleteSession(sessionId);\n }\n this.sessions.clear();\n }\n}\n\n","/**\n * Event translator: Converts Claude SDK messages to AG-UI events\n */\n\nimport {\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n EventType,\n} from '@ag-ui/client';\nimport type {\n SDKMessage,\n SDKAssistantMessage,\n ContentBlock,\n TextBlock,\n ToolUseBlock,\n ToolResultBlock,\n ProcessedEvents,\n} from './types';\nimport {\n hasContentProperty,\n isTextBlock,\n isToolUseBlock,\n isToolResultBlock,\n} from './types';\n\n/**\n * EventTranslator converts Claude SDK messages to AG-UI protocol events\n * \n * NOTE: This translator only handles SDK message translation.\n * Run lifecycle events (RUN_STARTED, RUN_FINISHED, etc.) and step events\n * are handled by ClaudeAgent.\n */\nexport class EventTranslator {\n private messageIdCounter = 0;\n private currentMessageId: string | null = null;\n private runId: string;\n private threadId: string;\n\n constructor(runId: string, threadId: string) {\n this.runId = runId;\n this.threadId = threadId;\n }\n\n /**\n * Translate a Claude SDK message to AG-UI events\n * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent\n */\n translateMessage(message: SDKMessage): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n\n if (hasContentProperty(message)) {\n events.push(...this.translateAssistantMessage(message as SDKAssistantMessage));\n }\n // Note: ResultMessage (success/error) is ignored here\n // Run completion is handled by ClaudeAgent, not EventTranslator\n\n return events;\n }\n\n /**\n * Translate an AssistantMessage with content blocks\n */\n private translateAssistantMessage(message: SDKAssistantMessage): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n\n // Content is in message.message.content for SDKAssistantMessage\n const content = message.message?.content || [];\n \n for (const block of content) {\n if (isTextBlock(block)) {\n events.push(...this.translateTextBlock(block));\n } else if (isToolUseBlock(block)) {\n events.push(...this.translateToolUseBlock(block));\n } else if (isToolResultBlock(block)) {\n events.push(...this.translateToolResultBlock(block));\n }\n }\n\n return events;\n }\n\n /**\n * Translate a TextBlock to text message events\n * NOTE: Step events are handled by ClaudeAgent, not here\n */\n private translateTextBlock(block: TextBlock): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n const messageId = this.generateMessageId();\n\n // Start event\n events.push({\n type: EventType.TEXT_MESSAGE_START,\n messageId,\n role: 'assistant',\n });\n\n // Content event - split text into delta chunks\n const text = block.text;\n if (text.length > 0) {\n events.push({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId,\n delta: text,\n });\n }\n\n // End event\n events.push({\n type: EventType.TEXT_MESSAGE_END,\n messageId,\n });\n\n return events;\n }\n\n /**\n * Translate a ToolUseBlock to tool call events\n * NOTE: Step events are handled by ClaudeAgent, not here\n */\n private translateToolUseBlock(block: ToolUseBlock): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n const toolCallId = block.id;\n\n // Start event\n events.push({\n type: EventType.TOOL_CALL_START,\n toolCallId,\n toolCallName: block.name,\n });\n\n // Args event - send args as JSON string\n const argsJson = JSON.stringify(block.input);\n if (argsJson.length > 0) {\n events.push({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId,\n delta: argsJson,\n });\n }\n\n // End event\n events.push({\n type: EventType.TOOL_CALL_END,\n toolCallId,\n });\n\n return events;\n }\n\n /**\n * Translate a ToolResultBlock to tool call result event\n */\n private translateToolResultBlock(block: ToolResultBlock): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n\n // Extract content as string\n let resultContent: string;\n if (typeof block.content === 'string') {\n resultContent = block.content;\n } else if (Array.isArray(block.content)) {\n // Handle array of content blocks\n resultContent = block.content\n .map((item) => {\n if (item.type === 'text') {\n return item.text || '';\n }\n return JSON.stringify(item);\n })\n .join('\\n');\n } else {\n resultContent = JSON.stringify(block.content);\n }\n\n const messageId = this.generateMessageId();\n events.push({\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: block.tool_use_id,\n messageId,\n content: resultContent,\n ...(block.is_error && { role: 'tool' as const }),\n });\n\n return events;\n }\n\n /**\n * Generate a unique message ID\n */\n private generateMessageId(): string {\n this.messageIdCounter++;\n return `msg_${this.runId}_${this.messageIdCounter}`;\n }\n\n /**\n * Reset the translator state for a new execution\n */\n reset(): void {\n this.messageIdCounter = 0;\n this.currentMessageId = null;\n }\n\n /**\n * Get current message ID\n */\n getCurrentMessageId(): string | null {\n return this.currentMessageId;\n }\n\n /**\n * Set current message ID\n */\n setCurrentMessageId(messageId: string | null): void {\n this.currentMessageId = messageId;\n }\n}\n\n","/**\n * Type definitions for Claude Agent SDK integration with AG-UI Protocol\n */\n\nimport type {\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n RunStartedEvent,\n RunFinishedEvent,\n RunErrorEvent,\n StepStartedEvent,\n StepFinishedEvent,\n AgentConfig,\n Tool,\n Message,\n} from '@ag-ui/client';\n\n// Re-export Claude SDK types (will be imported from the actual SDK)\n// These are placeholder interfaces based on the SDK documentation\nexport interface ClaudeSDKClient {\n query(prompt: string): Promise;\n receiveResponse(): AsyncIterableIterator;\n close(): Promise;\n}\n\nexport interface Options {\n apiKey?: string;\n baseUrl?: string;\n mcpServers?: Record;\n allowedTools?: string[];\n // Valid permission modes from Agent SDK: 'default', 'acceptEdits', 'bypassPermissions', 'plan'\n // Legacy values 'ask', 'auto', 'none' are also supported for backward compatibility\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none';\n stderr?: (data: string) => void;\n verbose?: boolean;\n [key: string]: any;\n}\n\nexport interface Query {\n next(): Promise>;\n [Symbol.asyncIterator](): AsyncIterableIterator;\n}\n\n// SDK Message types based on documentation\nexport type SDKMessage =\n | SDKAssistantMessage\n | SDKUserMessage\n | SDKSystemMessage\n | SDKResultMessage\n | SDKPartialAssistantMessage\n | SDKCompactBoundaryMessage\n | SDKPermissionDenial;\n\nexport interface SDKAssistantMessage {\n type: 'assistant';\n message: {\n id?: string;\n content: ContentBlock[];\n [key: string]: any;\n };\n parent_tool_use_id?: string | null;\n uuid?: string;\n session_id?: string;\n}\n\nexport interface SDKUserMessage {\n type: 'user';\n content: string;\n id?: string;\n}\n\nexport interface SDKSystemMessage {\n type: 'system';\n content: string;\n}\n\nexport interface SDKResultMessage {\n type: 'result';\n subtype: 'success' | 'error';\n error?: {\n type: string;\n message: string;\n };\n}\n\nexport interface SDKPartialAssistantMessage {\n type: 'partial_assistant';\n content: ContentBlock[];\n}\n\nexport interface SDKCompactBoundaryMessage {\n type: 'compact_boundary';\n}\n\nexport interface SDKPermissionDenial {\n type: 'permission_denial';\n tool: string;\n reason: string;\n}\n\n// Content block types\nexport type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ThinkingBlock;\n\nexport interface TextBlock {\n type: 'text';\n text: string;\n}\n\nexport interface ToolUseBlock {\n type: 'tool_use';\n id: string;\n name: string;\n input: Record;\n}\n\nexport interface ToolResultBlock {\n type: 'tool_result';\n tool_use_id: string;\n content: string | Array<{ type: string; [key: string]: any }>;\n is_error?: boolean;\n}\n\nexport interface ThinkingBlock {\n type: 'thinking';\n thinking: string;\n}\n\n// Tool definition types\nexport interface SdkMcpToolDefinition {\n name: string;\n description: string;\n inputSchema: Schema;\n handler: (args: any, extra?: any) => Promise;\n}\n\nexport interface CallToolResult {\n content: Array<{\n type: 'text' | 'image' | 'resource';\n text?: string;\n data?: string;\n mimeType?: string;\n [key: string]: any;\n }>;\n isError?: boolean;\n}\n\nexport interface McpSdkServerConfigWithInstance {\n name: string;\n version?: string;\n tools?: Array>;\n}\n\n// AG-UI Integration types\nexport type ProcessedEvents =\n | TextMessageStartEvent\n | TextMessageContentEvent\n | TextMessageEndEvent\n | ToolCallStartEvent\n | ToolCallArgsEvent\n | ToolCallEndEvent\n | ToolCallResultEvent\n | RunStartedEvent\n | RunFinishedEvent\n | RunErrorEvent\n | StepStartedEvent\n | StepFinishedEvent;\n\n// Session management types\nexport interface Session {\n id: string;\n userId?: string;\n client?: ClaudeSDKClient;\n processedMessageIds: Set;\n state: Record;\n createdAt: number;\n lastAccessedAt: number;\n}\n\n// Agent configuration\nexport interface ClaudeAgentConfig extends AgentConfig {\n apiKey?: string;\n baseUrl?: string;\n sessionTimeout?: number;\n enablePersistentSessions?: boolean;\n // Valid permission modes from Agent SDK: 'default', 'acceptEdits', 'bypassPermissions', 'plan'\n // Legacy values 'ask', 'auto', 'none' are mapped internally for backward compatibility\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none';\n mcpServers?: Record;\n stderr?: (data: string) => void;\n verbose?: boolean;\n}\n\n// Execution state types\nexport interface ExecutionState {\n id: string;\n sessionId: string;\n isRunning: boolean;\n startTime: number;\n events: ProcessedEvents[];\n error?: Error;\n}\n\n// Helper type guards\nexport function isAssistantMessage(message: SDKMessage): message is SDKAssistantMessage {\n return message.type === 'assistant';\n}\n\nexport function isResultMessage(message: SDKMessage): message is SDKResultMessage {\n return message.type === 'result';\n}\n\nexport function isTextBlock(block: ContentBlock): block is TextBlock {\n return block.type === 'text';\n}\n\nexport function isToolUseBlock(block: ContentBlock): block is ToolUseBlock {\n return block.type === 'tool_use';\n}\n\nexport function isToolResultBlock(block: ContentBlock): block is ToolResultBlock {\n return block.type === 'tool_result';\n}\n\nexport function isThinkingBlock(block: ContentBlock): block is ThinkingBlock {\n return block.type === 'thinking';\n}\n\nexport function hasContentProperty(message: SDKMessage): message is SDKAssistantMessage | SDKPartialAssistantMessage {\n // For SDKAssistantMessage, content is in message.content\n if (message.type === 'assistant') {\n return 'message' in message && \n message.message !== null &&\n typeof message.message === 'object' &&\n 'content' in message.message && \n Array.isArray((message.message as any).content);\n }\n // For SDKPartialAssistantMessage, content might be at top level\n return 'content' in message && Array.isArray((message as any).content);\n}\n\n// Tool execution types\nexport interface ToolExecutionContext {\n toolName: string;\n toolCallId: string;\n isClientTool: boolean;\n isLongRunning: boolean;\n}\n\n// Message conversion types\nexport interface ConvertedMessage {\n role: 'user' | 'assistant' | 'system';\n content: string | Array<{ type: string; [key: string]: any }>;\n}\n\n","/**\n * Tool adapter: Converts AG-UI tools to Claude SDK format\n */\n\nimport { z } from 'zod';\nimport type { Tool } from '@ag-ui/client';\nimport type {\n SdkMcpToolDefinition,\n McpSdkServerConfigWithInstance,\n CallToolResult,\n} from './types';\n\n// Extended Tool type that includes runtime properties\ntype ExtendedTool = Tool & {\n client?: boolean;\n handler?: (args: any) => any | Promise;\n longRunning?: boolean;\n};\n\n/**\n * ToolAdapter handles conversion of AG-UI tools to Claude SDK format\n */\nexport class ToolAdapter {\n /**\n * Convert AG-UI tools to Claude SDK MCP tool definitions\n */\n static convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[] {\n return tools.map((tool) => this.convertSingleTool(tool as ExtendedTool));\n }\n\n /**\n * Convert a single AG-UI tool to Claude SDK format\n */\n private static convertSingleTool(tool: ExtendedTool): SdkMcpToolDefinition {\n const zodSchema = this.convertJsonSchemaToZod(tool.parameters || {});\n\n return {\n name: tool.name,\n description: tool.description || '',\n inputSchema: zodSchema,\n handler: async (args: any) => {\n // For client tools, we mark them as long-running\n // The actual execution will be handled by the client\n if (tool.client) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n toolName: tool.name,\n args,\n isClientTool: true,\n isLongRunning: true,\n }),\n },\n ],\n };\n }\n\n // For backend tools, if there's a handler, execute it\n if (tool.handler) {\n try {\n const result = await tool.handler(args);\n return {\n content: [\n {\n type: 'text',\n text: typeof result === 'string' ? result : JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n return {\n content: [\n {\n type: 'text',\n text: error.message || 'Tool execution failed',\n },\n ],\n isError: true,\n };\n }\n }\n\n // Default response for tools without handlers\n return {\n content: [\n {\n type: 'text',\n text: 'Tool executed (no handler)',\n },\n ],\n };\n },\n };\n }\n\n /**\n * Convert JSON Schema to Zod schema\n */\n private static convertJsonSchemaToZod(jsonSchema: any): z.ZodTypeAny {\n if (!jsonSchema || typeof jsonSchema !== 'object') {\n return z.object({});\n }\n\n const properties = jsonSchema.properties || {};\n const required = jsonSchema.required || [];\n\n const zodShape: Record = {};\n\n for (const [key, prop] of Object.entries(properties)) {\n const propSchema = prop as any;\n let zodType = this.convertJsonSchemaTypeToZod(propSchema);\n\n // Make optional if not in required array\n if (!required.includes(key)) {\n zodType = zodType.optional();\n }\n\n zodShape[key] = zodType;\n }\n\n return z.object(zodShape);\n }\n\n /**\n * Convert a single JSON Schema type to Zod type\n */\n private static convertJsonSchemaTypeToZod(schema: any): z.ZodTypeAny {\n const type = schema.type;\n\n switch (type) {\n case 'string':\n if (schema.enum) {\n return z.enum(schema.enum as [string, ...string[]]);\n }\n return z.string();\n\n case 'number':\n case 'integer':\n let numType = type === 'integer' ? z.number().int() : z.number();\n if (schema.minimum !== undefined) {\n numType = numType.min(schema.minimum);\n }\n if (schema.maximum !== undefined) {\n numType = numType.max(schema.maximum);\n }\n return numType;\n\n case 'boolean':\n return z.boolean();\n\n case 'array':\n if (schema.items) {\n const itemType = this.convertJsonSchemaTypeToZod(schema.items);\n return z.array(itemType);\n }\n return z.array(z.any());\n\n case 'object':\n if (schema.properties) {\n return this.convertJsonSchemaToZod(schema);\n }\n return z.record(z.any());\n\n case 'null':\n return z.null();\n\n default:\n // For any other type or if type is not specified\n return z.any();\n }\n }\n\n /**\n * Create an MCP server configuration for AG-UI tools\n */\n static async createMcpServerForTools(tools: Tool[]): Promise {\n const sdkTools = this.convertAgUiToolsToSdk(tools as ExtendedTool[]);\n\n // Import createSdkMcpServer from Claude Agent SDK\n const { createSdkMcpServer } = await import('@anthropic-ai/claude-agent-sdk');\n \n // Use the official SDK function to create a properly formatted MCP server\n return createSdkMcpServer({\n name: 'ag_ui_tools',\n version: '1.0.0',\n tools: sdkTools as any, // Cast to any to avoid type incompatibility\n });\n }\n\n /**\n * Extract tool calls from Claude SDK response\n */\n static extractToolCalls(message: any): Array<{\n id: string;\n name: string;\n input: Record;\n }> {\n if (!message.content || !Array.isArray(message.content)) {\n return [];\n }\n\n return message.content\n .filter((block: any) => block.type === 'tool_use')\n .map((block: any) => ({\n id: block.id,\n name: block.name,\n input: block.input,\n }));\n }\n\n /**\n * Check if a tool is a long-running client tool\n */\n static isClientTool(toolName: string, tools: Tool[]): boolean {\n const tool = tools.find((t) => t.name === toolName) as ExtendedTool | undefined;\n return tool?.client === true;\n }\n\n /**\n * Check if a tool is marked as long-running\n */\n static isLongRunningTool(toolName: string, tools: Tool[]): boolean {\n const tool = tools.find((t) => t.name === toolName) as ExtendedTool | undefined;\n return tool?.client === true || tool?.longRunning === true;\n }\n\n /**\n * Format tool names for Claude SDK (with MCP server prefix)\n */\n static formatToolNameForSdk(toolName: string, serverName: string = 'ag_ui_tools'): string {\n return `mcp__${serverName}__${toolName}`;\n }\n\n /**\n * Parse tool name from SDK format (remove MCP server prefix)\n */\n static parseToolNameFromSdk(sdkToolName: string): string {\n const parts = sdkToolName.split('__');\n if (parts.length >= 3 && parts[0] === 'mcp') {\n return parts.slice(2).join('__');\n }\n return sdkToolName;\n }\n\n /**\n * Get allowed tools list for SDK options\n */\n static getAllowedToolsList(tools: Tool[], serverName: string = 'ag_ui_tools'): string[] {\n return tools.map((tool) => this.formatToolNameForSdk(tool.name, serverName));\n }\n}\n\n","/**\n * Execution state: Tracks background Claude executions\n */\n\nimport type { ProcessedEvents } from './types';\n\n/**\n * ExecutionState manages the state of a Claude SDK execution\n */\nexport class ExecutionState {\n readonly id: string;\n readonly sessionId: string;\n private _isRunning: boolean;\n private _startTime: number;\n private _endTime?: number;\n private _events: ProcessedEvents[];\n private _error?: Error;\n private _abortController: AbortController;\n\n constructor(id: string, sessionId: string) {\n this.id = id;\n this.sessionId = sessionId;\n this._isRunning = true;\n this._startTime = Date.now();\n this._events = [];\n this._abortController = new AbortController();\n }\n\n /**\n * Check if execution is running\n */\n get isRunning(): boolean {\n return this._isRunning;\n }\n\n /**\n * Get start time\n */\n get startTime(): number {\n return this._startTime;\n }\n\n /**\n * Get end time\n */\n get endTime(): number | undefined {\n return this._endTime;\n }\n\n /**\n * Get duration in milliseconds\n */\n get duration(): number {\n const end = this._endTime || Date.now();\n return end - this._startTime;\n }\n\n /**\n * Get all collected events\n */\n get events(): ProcessedEvents[] {\n return [...this._events];\n }\n\n /**\n * Get error if any\n */\n get error(): Error | undefined {\n return this._error;\n }\n\n /**\n * Get abort signal\n */\n get signal(): AbortSignal {\n return this._abortController.signal;\n }\n\n /**\n * Add an event to the execution state\n */\n addEvent(event: ProcessedEvents): void {\n this._events.push(event);\n }\n\n /**\n * Add multiple events\n */\n addEvents(events: ProcessedEvents[]): void {\n this._events.push(...events);\n }\n\n /**\n * Mark execution as completed\n */\n complete(): void {\n if (this._isRunning) {\n this._isRunning = false;\n this._endTime = Date.now();\n }\n }\n\n /**\n * Mark execution as failed\n */\n fail(error: Error): void {\n if (this._isRunning) {\n this._isRunning = false;\n this._endTime = Date.now();\n this._error = error;\n }\n }\n\n /**\n * Abort the execution\n */\n abort(): void {\n if (this._isRunning) {\n this._abortController.abort();\n this._isRunning = false;\n this._endTime = Date.now();\n }\n }\n\n /**\n * Get execution statistics\n */\n getStats(): {\n duration: number;\n eventCount: number;\n isRunning: boolean;\n hasError: boolean;\n } {\n return {\n duration: this.duration,\n eventCount: this._events.length,\n isRunning: this._isRunning,\n hasError: !!this._error,\n };\n }\n\n /**\n * Clear events (useful for memory management)\n */\n clearEvents(): void {\n this._events = [];\n }\n\n /**\n * Get the last N events\n */\n getLastEvents(count: number): ProcessedEvents[] {\n return this._events.slice(-count);\n }\n\n /**\n * Check if execution has been aborted\n */\n isAborted(): boolean {\n return this._abortController.signal.aborted;\n }\n}\n\n/**\n * ExecutionStateManager manages multiple execution states\n */\nexport class ExecutionStateManager {\n private executions: Map = new Map();\n private readonly maxExecutions: number;\n\n constructor(maxExecutions: number = 100) {\n this.maxExecutions = maxExecutions;\n }\n\n /**\n * Create a new execution state\n */\n createExecution(id: string, sessionId: string): ExecutionState {\n const execution = new ExecutionState(id, sessionId);\n this.executions.set(id, execution);\n\n // Clean up old executions if we exceed the limit\n if (this.executions.size > this.maxExecutions) {\n this.cleanupOldExecutions();\n }\n\n return execution;\n }\n\n /**\n * Get an execution state by ID\n */\n getExecution(id: string): ExecutionState | undefined {\n return this.executions.get(id);\n }\n\n /**\n * Check if an execution exists\n */\n hasExecution(id: string): boolean {\n return this.executions.has(id);\n }\n\n /**\n * Delete an execution state\n */\n deleteExecution(id: string): boolean {\n return this.executions.delete(id);\n }\n\n /**\n * Get all executions for a session\n */\n getSessionExecutions(sessionId: string): ExecutionState[] {\n const executions: ExecutionState[] = [];\n for (const execution of this.executions.values()) {\n if (execution.sessionId === sessionId) {\n executions.push(execution);\n }\n }\n return executions;\n }\n\n /**\n * Get running executions\n */\n getRunningExecutions(): ExecutionState[] {\n const running: ExecutionState[] = [];\n for (const execution of this.executions.values()) {\n if (execution.isRunning) {\n running.push(execution);\n }\n }\n return running;\n }\n\n /**\n * Get completed executions\n */\n getCompletedExecutions(): ExecutionState[] {\n const completed: ExecutionState[] = [];\n for (const execution of this.executions.values()) {\n if (!execution.isRunning) {\n completed.push(execution);\n }\n }\n return completed;\n }\n\n /**\n * Abort all running executions for a session\n */\n abortSessionExecutions(sessionId: string): void {\n const sessionExecutions = this.getSessionExecutions(sessionId);\n for (const execution of sessionExecutions) {\n if (execution.isRunning) {\n execution.abort();\n }\n }\n }\n\n /**\n * Clean up old completed executions\n */\n private cleanupOldExecutions(): void {\n const completed = this.getCompletedExecutions();\n \n // Sort by end time (oldest first)\n completed.sort((a, b) => {\n const aTime = a.endTime || a.startTime;\n const bTime = b.endTime || b.startTime;\n return aTime - bTime;\n });\n\n // Remove the oldest executions\n const toRemove = Math.max(0, this.executions.size - this.maxExecutions);\n for (let i = 0; i < toRemove && i < completed.length; i++) {\n this.executions.delete(completed[i].id);\n }\n }\n\n /**\n * Clear all executions\n */\n clearAll(): void {\n this.executions.clear();\n }\n\n /**\n * Get total execution count\n */\n getExecutionCount(): number {\n return this.executions.size;\n }\n\n /**\n * Get execution statistics\n */\n getStats(): {\n total: number;\n running: number;\n completed: number;\n failed: number;\n } {\n let running = 0;\n let completed = 0;\n let failed = 0;\n\n for (const execution of this.executions.values()) {\n if (execution.isRunning) {\n running++;\n } else if (execution.error) {\n failed++;\n } else {\n completed++;\n }\n }\n\n return {\n total: this.executions.size,\n running,\n completed,\n failed,\n };\n }\n}\n\n","/**\n * Message format converters\n */\n\nimport type { Message } from '@ag-ui/client';\nimport type { ConvertedMessage } from '../types';\n\n/**\n * Convert AG-UI messages to a format suitable for Claude SDK\n */\nexport function convertAgUiMessagesToPrompt(messages: Message[]): string {\n // For Claude SDK, we typically extract the last user message as the prompt\n // The SDK maintains conversation history internally (in persistent mode)\n \n // Find the last user message\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === 'user') {\n return extractMessageContent(msg);\n }\n }\n\n // If no user message found, return a default prompt\n return 'Hello';\n}\n\n/**\n * Extract text content from a message\n */\nexport function extractMessageContent(message: Message): string {\n if (typeof message.content === 'string') {\n return message.content;\n }\n\n if (Array.isArray(message.content)) {\n return message.content\n .map((block: any) => {\n if (typeof block === 'string') {\n return block;\n }\n if (block.type === 'text') {\n return block.text || '';\n }\n // For other types (image, file, etc.), we might need special handling\n return '';\n })\n .filter(Boolean)\n .join('\\n');\n }\n\n return String(message.content);\n}\n\n/**\n * Convert AG-UI message to Claude message format\n */\nexport function convertAgUiMessageToClaude(message: Message): ConvertedMessage {\n const role = message.role as 'user' | 'assistant' | 'system';\n const content = extractMessageContent(message);\n\n return {\n role,\n content,\n };\n}\n\n/**\n * Convert multiple AG-UI messages to Claude format\n */\nexport function convertAgUiMessagesToClaude(messages: Message[]): ConvertedMessage[] {\n return messages.map(convertAgUiMessageToClaude);\n}\n\n/**\n * Check if messages contain tool results\n */\nexport function hasToolResults(messages: Message[]): boolean {\n return messages.some((msg) => {\n if (typeof msg.content === 'string') {\n return false;\n }\n if (Array.isArray(msg.content)) {\n return msg.content.some((block: any) => {\n return typeof block === 'object' && block.type === 'tool_result';\n });\n }\n return false;\n });\n}\n\n/**\n * Extract tool results from messages\n */\nexport function extractToolResults(messages: Message[]): Array<{\n toolCallId: string;\n result: string;\n}> {\n const results: Array<{ toolCallId: string; result: string }> = [];\n\n for (const msg of messages) {\n if (typeof msg.content === 'string') {\n continue;\n }\n\n if (Array.isArray(msg.content)) {\n for (const block of msg.content as any[]) {\n if (typeof block === 'object' && block.type === 'tool_result') {\n results.push({\n toolCallId: (block as any).toolCallId || (block as any).tool_use_id || '',\n result: (block as any).result || (block as any).content || '',\n });\n }\n }\n }\n }\n\n return results;\n}\n\n/**\n * Generate a unique run ID\n */\nexport function generateRunId(): string {\n return `run_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Generate a unique message ID\n */\nexport function generateMessageId(prefix: string = 'msg'): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Safely parse JSON string\n */\nexport function safeJsonParse(json: string, defaultValue: any = null): any {\n try {\n return JSON.parse(json);\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Safely stringify JSON\n */\nexport function safeJsonStringify(obj: any, defaultValue: string = '{}'): string {\n try {\n return JSON.stringify(obj);\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Check if a message is a tool result submission\n */\nexport function isToolResultSubmission(messages: Message[]): boolean {\n // Check if the last message contains tool results\n if (messages.length === 0) {\n return false;\n }\n\n const lastMessage = messages[messages.length - 1];\n return hasToolResults([lastMessage]);\n}\n\n/**\n * Format error message for display\n */\nexport function formatErrorMessage(error: any): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n return 'An unknown error occurred';\n}\n\n/**\n * Truncate text to a maximum length\n */\nexport function truncateText(text: string, maxLength: number = 1000): string {\n if (text.length <= maxLength) {\n return text;\n }\n return text.slice(0, maxLength) + '...';\n}\n\n/**\n * Merge consecutive text blocks\n */\nexport function mergeTextBlocks(blocks: Array<{ type: string; text?: string }>): string {\n return blocks\n .filter((block: any) => block.type === 'text' && block.text)\n .map((block: any) => block.text)\n .join('');\n}\n\n"],"mappings":"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","names":["import_client","error"]} \ No newline at end of file diff --git a/integrations/claude-agent-sdk/typescript/dist/index.mjs b/integrations/claude-agent-sdk/typescript/dist/index.mjs new file mode 100644 index 000000000..80fd5f74f --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/dist/index.mjs @@ -0,0 +1,1340 @@ +var __defProp = Object.defineProperty; +var __defProps = Object.defineProperties; +var __getOwnPropDescs = Object.getOwnPropertyDescriptors; +var __getOwnPropSymbols = Object.getOwnPropertySymbols; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __propIsEnum = Object.prototype.propertyIsEnumerable; +var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name); +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + } + return a; +}; +var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); +var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it); + +// src/agent.ts +import { Observable } from "rxjs"; +import { + AbstractAgent, + EventType as EventType2 +} from "@ag-ui/client"; + +// src/session-manager.ts +var DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1e3; +var CLEANUP_INTERVAL = 5 * 60 * 1e3; +var _SessionManager = class _SessionManager { + constructor(sessionTimeout = DEFAULT_SESSION_TIMEOUT) { + this.sessions = /* @__PURE__ */ new Map(); + this.cleanupInterval = null; + this.sessionTimeout = sessionTimeout; + this.startCleanupInterval(); + } + /** + * Get the singleton instance + */ + static getInstance(sessionTimeout) { + if (!_SessionManager.instance) { + _SessionManager.instance = new _SessionManager(sessionTimeout); + } + return _SessionManager.instance; + } + /** + * Reset the singleton instance (useful for testing) + */ + static resetInstance() { + if (_SessionManager.instance) { + _SessionManager.instance.stopCleanupInterval(); + _SessionManager.instance = null; + } + } + /** + * Get or create a session + */ + getSession(sessionId, userId) { + let session = this.sessions.get(sessionId); + if (!session) { + session = { + id: sessionId, + userId, + processedMessageIds: /* @__PURE__ */ new Set(), + state: {}, + createdAt: Date.now(), + lastAccessedAt: Date.now() + }; + this.sessions.set(sessionId, session); + } else { + session.lastAccessedAt = Date.now(); + } + return session; + } + /** + * Check if a session exists + */ + hasSession(sessionId) { + return this.sessions.has(sessionId); + } + /** + * Delete a session + */ + deleteSession(sessionId) { + const session = this.sessions.get(sessionId); + if (session == null ? void 0 : session.client) { + session.client.close().catch((error) => { + console.error(`Error closing Claude SDK client for session ${sessionId}:`, error); + }); + } + return this.sessions.delete(sessionId); + } + /** + * Track a processed message + */ + trackMessage(sessionId, messageId) { + const session = this.sessions.get(sessionId); + if (session) { + session.processedMessageIds.add(messageId); + session.lastAccessedAt = Date.now(); + } + } + /** + * Check if a message has been processed + */ + isMessageProcessed(sessionId, messageId) { + const session = this.sessions.get(sessionId); + return session ? session.processedMessageIds.has(messageId) : false; + } + /** + * Get unseen messages (messages not yet processed) + */ + getUnseenMessages(sessionId, messages) { + const session = this.sessions.get(sessionId); + if (!session) { + return messages; + } + return messages.filter((msg) => { + const msgId = msg.id || `${msg.role}_${msg.content}`; + return !session.processedMessageIds.has(msgId); + }); + } + /** + * Mark messages as processed + */ + markMessagesAsProcessed(sessionId, messages) { + const session = this.sessions.get(sessionId); + if (session) { + for (const msg of messages) { + const msgId = msg.id || `${msg.role}_${msg.content}`; + session.processedMessageIds.add(msgId); + } + session.lastAccessedAt = Date.now(); + } + } + /** + * Get state value from session + */ + getStateValue(sessionId, key) { + const session = this.sessions.get(sessionId); + return session == null ? void 0 : session.state[key]; + } + /** + * Set state value in session + */ + setStateValue(sessionId, key, value) { + const session = this.sessions.get(sessionId); + if (session) { + session.state[key] = value; + session.lastAccessedAt = Date.now(); + } + } + /** + * Remove state keys from session + */ + removeStateKeys(sessionId, keys) { + const session = this.sessions.get(sessionId); + if (session) { + for (const key of keys) { + delete session.state[key]; + } + session.lastAccessedAt = Date.now(); + } + } + /** + * Clear all state for a session + */ + clearSessionState(sessionId) { + const session = this.sessions.get(sessionId); + if (session) { + session.state = {}; + session.lastAccessedAt = Date.now(); + } + } + /** + * Set Claude SDK client for a session + */ + setClient(sessionId, client) { + const session = this.sessions.get(sessionId); + if (session) { + session.client = client; + session.lastAccessedAt = Date.now(); + } + } + /** + * Get Claude SDK client for a session + */ + getClient(sessionId) { + const session = this.sessions.get(sessionId); + return session == null ? void 0 : session.client; + } + /** + * Get total number of sessions + */ + getSessionCount() { + return this.sessions.size; + } + /** + * Get number of sessions for a specific user + */ + getUserSessionCount(userId) { + let count = 0; + for (const session of this.sessions.values()) { + if (session.userId === userId) { + count++; + } + } + return count; + } + /** + * Get all session IDs + */ + getAllSessionIds() { + return Array.from(this.sessions.keys()); + } + /** + * Get all sessions for a specific user + */ + getUserSessions(userId) { + const userSessions = []; + for (const session of this.sessions.values()) { + if (session.userId === userId) { + userSessions.push(session); + } + } + return userSessions; + } + /** + * Clean up stale sessions + */ + cleanupStaleSessions() { + const now = Date.now(); + const sessionsToDelete = []; + for (const [sessionId, session] of this.sessions.entries()) { + if (now - session.lastAccessedAt > this.sessionTimeout) { + sessionsToDelete.push(sessionId); + } + } + for (const sessionId of sessionsToDelete) { + this.deleteSession(sessionId); + } + if (sessionsToDelete.length > 0) { + console.log(`Cleaned up ${sessionsToDelete.length} stale sessions`); + } + } + /** + * Start the cleanup interval + */ + startCleanupInterval() { + if (!this.cleanupInterval) { + this.cleanupInterval = setInterval(() => { + this.cleanupStaleSessions(); + }, CLEANUP_INTERVAL); + if (typeof this.cleanupInterval.unref === "function") { + this.cleanupInterval.unref(); + } + } + } + /** + * Stop the cleanup interval + */ + stopCleanupInterval() { + if (this.cleanupInterval) { + clearInterval(this.cleanupInterval); + this.cleanupInterval = null; + } + } + /** + * Clear all sessions (useful for testing) + */ + clearAllSessions() { + for (const sessionId of this.sessions.keys()) { + this.deleteSession(sessionId); + } + this.sessions.clear(); + } +}; +_SessionManager.instance = null; +var SessionManager = _SessionManager; + +// src/event-translator.ts +import { + EventType +} from "@ag-ui/client"; + +// src/types.ts +function isAssistantMessage(message) { + return message.type === "assistant"; +} +function isResultMessage(message) { + return message.type === "result"; +} +function isTextBlock(block) { + return block.type === "text"; +} +function isToolUseBlock(block) { + return block.type === "tool_use"; +} +function isToolResultBlock(block) { + return block.type === "tool_result"; +} +function isThinkingBlock(block) { + return block.type === "thinking"; +} +function hasContentProperty(message) { + if (message.type === "assistant") { + return "message" in message && message.message !== null && typeof message.message === "object" && "content" in message.message && Array.isArray(message.message.content); + } + return "content" in message && Array.isArray(message.content); +} + +// src/event-translator.ts +var EventTranslator = class { + constructor(runId, threadId) { + this.messageIdCounter = 0; + this.currentMessageId = null; + this.runId = runId; + this.threadId = threadId; + } + /** + * Translate a Claude SDK message to AG-UI events + * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent + */ + translateMessage(message) { + const events = []; + if (hasContentProperty(message)) { + events.push(...this.translateAssistantMessage(message)); + } + return events; + } + /** + * Translate an AssistantMessage with content blocks + */ + translateAssistantMessage(message) { + var _a; + const events = []; + const content = ((_a = message.message) == null ? void 0 : _a.content) || []; + for (const block of content) { + if (isTextBlock(block)) { + events.push(...this.translateTextBlock(block)); + } else if (isToolUseBlock(block)) { + events.push(...this.translateToolUseBlock(block)); + } else if (isToolResultBlock(block)) { + events.push(...this.translateToolResultBlock(block)); + } + } + return events; + } + /** + * Translate a TextBlock to text message events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + translateTextBlock(block) { + const events = []; + const messageId = this.generateMessageId(); + events.push({ + type: EventType.TEXT_MESSAGE_START, + messageId, + role: "assistant" + }); + const text = block.text; + if (text.length > 0) { + events.push({ + type: EventType.TEXT_MESSAGE_CONTENT, + messageId, + delta: text + }); + } + events.push({ + type: EventType.TEXT_MESSAGE_END, + messageId + }); + return events; + } + /** + * Translate a ToolUseBlock to tool call events + * NOTE: Step events are handled by ClaudeAgent, not here + */ + translateToolUseBlock(block) { + const events = []; + const toolCallId = block.id; + events.push({ + type: EventType.TOOL_CALL_START, + toolCallId, + toolCallName: block.name + }); + const argsJson = JSON.stringify(block.input); + if (argsJson.length > 0) { + events.push({ + type: EventType.TOOL_CALL_ARGS, + toolCallId, + delta: argsJson + }); + } + events.push({ + type: EventType.TOOL_CALL_END, + toolCallId + }); + return events; + } + /** + * Translate a ToolResultBlock to tool call result event + */ + translateToolResultBlock(block) { + const events = []; + let resultContent; + if (typeof block.content === "string") { + resultContent = block.content; + } else if (Array.isArray(block.content)) { + resultContent = block.content.map((item) => { + if (item.type === "text") { + return item.text || ""; + } + return JSON.stringify(item); + }).join("\n"); + } else { + resultContent = JSON.stringify(block.content); + } + const messageId = this.generateMessageId(); + events.push(__spreadValues({ + type: EventType.TOOL_CALL_RESULT, + toolCallId: block.tool_use_id, + messageId, + content: resultContent + }, block.is_error && { role: "tool" })); + return events; + } + /** + * Generate a unique message ID + */ + generateMessageId() { + this.messageIdCounter++; + return `msg_${this.runId}_${this.messageIdCounter}`; + } + /** + * Reset the translator state for a new execution + */ + reset() { + this.messageIdCounter = 0; + this.currentMessageId = null; + } + /** + * Get current message ID + */ + getCurrentMessageId() { + return this.currentMessageId; + } + /** + * Set current message ID + */ + setCurrentMessageId(messageId) { + this.currentMessageId = messageId; + } +}; + +// src/tool-adapter.ts +import { z } from "zod"; +var ToolAdapter = class { + /** + * Convert AG-UI tools to Claude SDK MCP tool definitions + */ + static convertAgUiToolsToSdk(tools) { + return tools.map((tool) => this.convertSingleTool(tool)); + } + /** + * Convert a single AG-UI tool to Claude SDK format + */ + static convertSingleTool(tool) { + const zodSchema = this.convertJsonSchemaToZod(tool.parameters || {}); + return { + name: tool.name, + description: tool.description || "", + inputSchema: zodSchema, + handler: async (args) => { + if (tool.client) { + return { + content: [ + { + type: "text", + text: JSON.stringify({ + toolName: tool.name, + args, + isClientTool: true, + isLongRunning: true + }) + } + ] + }; + } + if (tool.handler) { + try { + const result = await tool.handler(args); + return { + content: [ + { + type: "text", + text: typeof result === "string" ? result : JSON.stringify(result) + } + ] + }; + } catch (error) { + return { + content: [ + { + type: "text", + text: error.message || "Tool execution failed" + } + ], + isError: true + }; + } + } + return { + content: [ + { + type: "text", + text: "Tool executed (no handler)" + } + ] + }; + } + }; + } + /** + * Convert JSON Schema to Zod schema + */ + static convertJsonSchemaToZod(jsonSchema) { + if (!jsonSchema || typeof jsonSchema !== "object") { + return z.object({}); + } + const properties = jsonSchema.properties || {}; + const required = jsonSchema.required || []; + const zodShape = {}; + for (const [key, prop] of Object.entries(properties)) { + const propSchema = prop; + let zodType = this.convertJsonSchemaTypeToZod(propSchema); + if (!required.includes(key)) { + zodType = zodType.optional(); + } + zodShape[key] = zodType; + } + return z.object(zodShape); + } + /** + * Convert a single JSON Schema type to Zod type + */ + static convertJsonSchemaTypeToZod(schema) { + const type = schema.type; + switch (type) { + case "string": + if (schema.enum) { + return z.enum(schema.enum); + } + return z.string(); + case "number": + case "integer": + let numType = type === "integer" ? z.number().int() : z.number(); + if (schema.minimum !== void 0) { + numType = numType.min(schema.minimum); + } + if (schema.maximum !== void 0) { + numType = numType.max(schema.maximum); + } + return numType; + case "boolean": + return z.boolean(); + case "array": + if (schema.items) { + const itemType = this.convertJsonSchemaTypeToZod(schema.items); + return z.array(itemType); + } + return z.array(z.any()); + case "object": + if (schema.properties) { + return this.convertJsonSchemaToZod(schema); + } + return z.record(z.any()); + case "null": + return z.null(); + default: + return z.any(); + } + } + /** + * Create an MCP server configuration for AG-UI tools + */ + static async createMcpServerForTools(tools) { + const sdkTools = this.convertAgUiToolsToSdk(tools); + const { createSdkMcpServer } = await import("@anthropic-ai/claude-agent-sdk"); + return createSdkMcpServer({ + name: "ag_ui_tools", + version: "1.0.0", + tools: sdkTools + // Cast to any to avoid type incompatibility + }); + } + /** + * Extract tool calls from Claude SDK response + */ + static extractToolCalls(message) { + if (!message.content || !Array.isArray(message.content)) { + return []; + } + return message.content.filter((block) => block.type === "tool_use").map((block) => ({ + id: block.id, + name: block.name, + input: block.input + })); + } + /** + * Check if a tool is a long-running client tool + */ + static isClientTool(toolName, tools) { + const tool = tools.find((t) => t.name === toolName); + return (tool == null ? void 0 : tool.client) === true; + } + /** + * Check if a tool is marked as long-running + */ + static isLongRunningTool(toolName, tools) { + const tool = tools.find((t) => t.name === toolName); + return (tool == null ? void 0 : tool.client) === true || (tool == null ? void 0 : tool.longRunning) === true; + } + /** + * Format tool names for Claude SDK (with MCP server prefix) + */ + static formatToolNameForSdk(toolName, serverName = "ag_ui_tools") { + return `mcp__${serverName}__${toolName}`; + } + /** + * Parse tool name from SDK format (remove MCP server prefix) + */ + static parseToolNameFromSdk(sdkToolName) { + const parts = sdkToolName.split("__"); + if (parts.length >= 3 && parts[0] === "mcp") { + return parts.slice(2).join("__"); + } + return sdkToolName; + } + /** + * Get allowed tools list for SDK options + */ + static getAllowedToolsList(tools, serverName = "ag_ui_tools") { + return tools.map((tool) => this.formatToolNameForSdk(tool.name, serverName)); + } +}; + +// src/execution-state.ts +var ExecutionState = class { + constructor(id, sessionId) { + this.id = id; + this.sessionId = sessionId; + this._isRunning = true; + this._startTime = Date.now(); + this._events = []; + this._abortController = new AbortController(); + } + /** + * Check if execution is running + */ + get isRunning() { + return this._isRunning; + } + /** + * Get start time + */ + get startTime() { + return this._startTime; + } + /** + * Get end time + */ + get endTime() { + return this._endTime; + } + /** + * Get duration in milliseconds + */ + get duration() { + const end = this._endTime || Date.now(); + return end - this._startTime; + } + /** + * Get all collected events + */ + get events() { + return [...this._events]; + } + /** + * Get error if any + */ + get error() { + return this._error; + } + /** + * Get abort signal + */ + get signal() { + return this._abortController.signal; + } + /** + * Add an event to the execution state + */ + addEvent(event) { + this._events.push(event); + } + /** + * Add multiple events + */ + addEvents(events) { + this._events.push(...events); + } + /** + * Mark execution as completed + */ + complete() { + if (this._isRunning) { + this._isRunning = false; + this._endTime = Date.now(); + } + } + /** + * Mark execution as failed + */ + fail(error) { + if (this._isRunning) { + this._isRunning = false; + this._endTime = Date.now(); + this._error = error; + } + } + /** + * Abort the execution + */ + abort() { + if (this._isRunning) { + this._abortController.abort(); + this._isRunning = false; + this._endTime = Date.now(); + } + } + /** + * Get execution statistics + */ + getStats() { + return { + duration: this.duration, + eventCount: this._events.length, + isRunning: this._isRunning, + hasError: !!this._error + }; + } + /** + * Clear events (useful for memory management) + */ + clearEvents() { + this._events = []; + } + /** + * Get the last N events + */ + getLastEvents(count) { + return this._events.slice(-count); + } + /** + * Check if execution has been aborted + */ + isAborted() { + return this._abortController.signal.aborted; + } +}; +var ExecutionStateManager = class { + constructor(maxExecutions = 100) { + this.executions = /* @__PURE__ */ new Map(); + this.maxExecutions = maxExecutions; + } + /** + * Create a new execution state + */ + createExecution(id, sessionId) { + const execution = new ExecutionState(id, sessionId); + this.executions.set(id, execution); + if (this.executions.size > this.maxExecutions) { + this.cleanupOldExecutions(); + } + return execution; + } + /** + * Get an execution state by ID + */ + getExecution(id) { + return this.executions.get(id); + } + /** + * Check if an execution exists + */ + hasExecution(id) { + return this.executions.has(id); + } + /** + * Delete an execution state + */ + deleteExecution(id) { + return this.executions.delete(id); + } + /** + * Get all executions for a session + */ + getSessionExecutions(sessionId) { + const executions = []; + for (const execution of this.executions.values()) { + if (execution.sessionId === sessionId) { + executions.push(execution); + } + } + return executions; + } + /** + * Get running executions + */ + getRunningExecutions() { + const running = []; + for (const execution of this.executions.values()) { + if (execution.isRunning) { + running.push(execution); + } + } + return running; + } + /** + * Get completed executions + */ + getCompletedExecutions() { + const completed = []; + for (const execution of this.executions.values()) { + if (!execution.isRunning) { + completed.push(execution); + } + } + return completed; + } + /** + * Abort all running executions for a session + */ + abortSessionExecutions(sessionId) { + const sessionExecutions = this.getSessionExecutions(sessionId); + for (const execution of sessionExecutions) { + if (execution.isRunning) { + execution.abort(); + } + } + } + /** + * Clean up old completed executions + */ + cleanupOldExecutions() { + const completed = this.getCompletedExecutions(); + completed.sort((a, b) => { + const aTime = a.endTime || a.startTime; + const bTime = b.endTime || b.startTime; + return aTime - bTime; + }); + const toRemove = Math.max(0, this.executions.size - this.maxExecutions); + for (let i = 0; i < toRemove && i < completed.length; i++) { + this.executions.delete(completed[i].id); + } + } + /** + * Clear all executions + */ + clearAll() { + this.executions.clear(); + } + /** + * Get total execution count + */ + getExecutionCount() { + return this.executions.size; + } + /** + * Get execution statistics + */ + getStats() { + let running = 0; + let completed = 0; + let failed = 0; + for (const execution of this.executions.values()) { + if (execution.isRunning) { + running++; + } else if (execution.error) { + failed++; + } else { + completed++; + } + } + return { + total: this.executions.size, + running, + completed, + failed + }; + } +}; + +// src/utils/converters.ts +function convertAgUiMessagesToPrompt(messages) { + for (let i = messages.length - 1; i >= 0; i--) { + const msg = messages[i]; + if (msg.role === "user") { + return extractMessageContent(msg); + } + } + return "Hello"; +} +function extractMessageContent(message) { + if (typeof message.content === "string") { + return message.content; + } + if (Array.isArray(message.content)) { + return message.content.map((block) => { + if (typeof block === "string") { + return block; + } + if (block.type === "text") { + return block.text || ""; + } + return ""; + }).filter(Boolean).join("\n"); + } + return String(message.content); +} +function convertAgUiMessageToClaude(message) { + const role = message.role; + const content = extractMessageContent(message); + return { + role, + content + }; +} +function convertAgUiMessagesToClaude(messages) { + return messages.map(convertAgUiMessageToClaude); +} +function hasToolResults(messages) { + return messages.some((msg) => { + if (typeof msg.content === "string") { + return false; + } + if (Array.isArray(msg.content)) { + return msg.content.some((block) => { + return typeof block === "object" && block.type === "tool_result"; + }); + } + return false; + }); +} +function extractToolResults(messages) { + const results = []; + for (const msg of messages) { + if (typeof msg.content === "string") { + continue; + } + if (Array.isArray(msg.content)) { + for (const block of msg.content) { + if (typeof block === "object" && block.type === "tool_result") { + results.push({ + toolCallId: block.toolCallId || block.tool_use_id || "", + result: block.result || block.content || "" + }); + } + } + } + } + return results; +} +function generateRunId() { + return `run_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; +} +function generateMessageId(prefix = "msg") { + return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; +} +function safeJsonParse(json, defaultValue = null) { + try { + return JSON.parse(json); + } catch (e) { + return defaultValue; + } +} +function safeJsonStringify(obj, defaultValue = "{}") { + try { + return JSON.stringify(obj); + } catch (e) { + return defaultValue; + } +} +function isToolResultSubmission(messages) { + if (messages.length === 0) { + return false; + } + const lastMessage = messages[messages.length - 1]; + return hasToolResults([lastMessage]); +} +function formatErrorMessage(error) { + if (error instanceof Error) { + return error.message; + } + if (typeof error === "string") { + return error; + } + return "An unknown error occurred"; +} +function truncateText(text, maxLength = 1e3) { + if (text.length <= maxLength) { + return text; + } + return text.slice(0, maxLength) + "..."; +} +function mergeTextBlocks(blocks) { + return blocks.filter((block) => block.type === "text" && block.text).map((block) => block.text).join(""); +} + +// src/agent.ts +var ClaudeAgent = class extends AbstractAgent { + constructor(config) { + super(config); + this.apiKey = config.apiKey; + this.baseUrl = config.baseUrl; + this.sessionTimeout = config.sessionTimeout || 30 * 60 * 1e3; + this.enablePersistentSessions = config.enablePersistentSessions !== false; + this.permissionMode = this.mapPermissionMode(config.permissionMode || "bypassPermissions"); + this.stderr = config.stderr; + this.verbose = config.verbose; + this.sessionManager = SessionManager.getInstance(this.sessionTimeout); + this.executionStateManager = new ExecutionStateManager(); + } + /** + * Map legacy permission modes to new SDK values for backward compatibility + */ + mapPermissionMode(mode) { + const modeMap = { + "ask": "default", + "auto": "bypassPermissions", + "none": "bypassPermissions", + "default": "default", + "acceptEdits": "acceptEdits", + "bypassPermissions": "bypassPermissions", + "plan": "plan" + }; + return modeMap[mode || "bypassPermissions"] || "bypassPermissions"; + } + /** + * Run the agent with the given input + */ + run(input) { + return new Observable((subscriber) => { + this.executeAgent(input, subscriber).catch((error) => { + subscriber.error(error); + }); + }); + } + /** + * Execute the agent asynchronously + */ + async executeAgent(input, subscriber) { + const runId = generateRunId(); + const sessionId = input.threadId || `session_${Date.now()}`; + const execution = this.executionStateManager.createExecution(runId, sessionId); + try { + const runStartedEvent = { + type: EventType2.RUN_STARTED, + threadId: sessionId, + runId + }; + subscriber.next(runStartedEvent); + execution.addEvent(runStartedEvent); + const session = this.sessionManager.getSession(sessionId, "default"); + const unseenMessages = this.sessionManager.getUnseenMessages( + sessionId, + input.messages || [] + ); + const isToolResult = isToolResultSubmission(input.messages || []); + const tools = input.tools || []; + const options = await this.prepareClaudeOptions(tools); + const prompt = convertAgUiMessagesToPrompt(unseenMessages); + const stepStartedEvent = { + type: EventType2.STEP_STARTED, + stepName: `step_${runId}_1` + }; + subscriber.next(stepStartedEvent); + execution.addEvent(stepStartedEvent); + await this.callClaudeSDK( + prompt, + options, + session, + runId, + sessionId, + subscriber, + execution + ); + this.sessionManager.markMessagesAsProcessed(sessionId, unseenMessages); + const stepFinishedEvent = { + type: EventType2.STEP_FINISHED, + stepName: `step_${runId}_1` + }; + subscriber.next(stepFinishedEvent); + execution.addEvent(stepFinishedEvent); + const runFinishedEvent = { + type: EventType2.RUN_FINISHED, + threadId: sessionId, + runId + }; + subscriber.next(runFinishedEvent); + execution.addEvent(runFinishedEvent); + execution.complete(); + subscriber.complete(); + } catch (error) { + const runErrorEvent = { + type: EventType2.RUN_ERROR, + message: formatErrorMessage(error) + }; + subscriber.next(runErrorEvent); + execution.addEvent(runErrorEvent); + execution.fail(error); + subscriber.complete(); + } + } + /** + * Prepare Claude SDK options + * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + * But baseUrl needs to be explicitly passed for third-party APIs + */ + async prepareClaudeOptions(tools) { + const baseUrl = this.baseUrl || process.env.ANTHROPIC_BASE_URL; + const apiKey = this.apiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY; + console.log("[Claude Agent] Preparing SDK options:", { + hasApiKey: !!apiKey, + hasBaseUrl: !!baseUrl, + baseUrl: baseUrl || "not set", + permissionMode: this.permissionMode, + hasStderr: !!this.stderr, + verbose: this.verbose + }); + const options = __spreadProps(__spreadValues(__spreadValues({ + permissionMode: this.permissionMode + }, this.stderr && { stderr: this.stderr }), this.verbose !== void 0 && { verbose: this.verbose }), { + env: process.env + }); + if (this.stderr) { + console.log("[Claude Agent] \u2713 stderr callback is configured for error logging"); + } else { + console.warn("[Claude Agent] \u26A0\uFE0F stderr callback not configured - CLI errors may not be visible"); + } + if (tools && tools.length > 0) { + const mcpServer = await ToolAdapter.createMcpServerForTools(tools); + options.mcpServers = { + ag_ui_tools: mcpServer + }; + options.allowedTools = ToolAdapter.getAllowedToolsList(tools); + } + return options; + } + /** + * Call Claude SDK + * Note: Currently only stateless mode is supported via query() function + */ + async callClaudeSDK(prompt, options, session, runId, sessionId, subscriber, execution) { + const eventTranslator = new EventTranslator(runId, sessionId); + await this.callClaudeSDKStateless( + prompt, + options, + eventTranslator, + subscriber, + execution + ); + } + /** + * Call Claude SDK in persistent session mode + * Note: The current SDK only supports stateless mode via query() function + * This method falls back to stateless mode + */ + async callClaudeSDKPersistent(prompt, options, session, eventTranslator, subscriber, execution) { + await this.callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution); + } + /** + * Call Claude SDK in stateless mode + */ + async callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution) { + try { + console.log("[Claude Agent] Environment check:"); + console.log(" ANTHROPIC_API_KEY:", process.env.ANTHROPIC_API_KEY ? "SET" : "NOT SET"); + console.log(" ANTHROPIC_AUTH_TOKEN:", process.env.ANTHROPIC_AUTH_TOKEN ? "SET" : "NOT SET"); + console.log(" ANTHROPIC_BASE_URL:", process.env.ANTHROPIC_BASE_URL || "NOT SET (using default)"); + console.log("[Claude Agent] Options passed to SDK:", { + hasApiKey: !!options.apiKey, + hasBaseUrl: !!options.baseUrl, + permissionMode: options.permissionMode, + hasMcpServers: !!options.mcpServers + }); + const { query } = await this.importClaudeSDK(); + console.log("[Claude Agent] Calling SDK query()..."); + const queryResult = query({ prompt, options }); + try { + for (var iter = __forAwait(queryResult), more, temp, error; more = !(temp = await iter.next()).done; more = false) { + const message = temp.value; + console.log("[Claude Agent] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"); + console.log("[Claude Agent] Received message type:", (message == null ? void 0 : message.type) || "unknown"); + console.log("[Claude Agent] Full message:", JSON.stringify(message, null, 2)); + if (execution.isAborted()) { + console.log("[Claude Agent] Execution aborted by user"); + break; + } + const events = eventTranslator.translateMessage(message); + console.log("[Claude Agent] Translated events count:", events.length); + for (const event of events) { + console.log("[Claude Agent] Sending event:", JSON.stringify(event, null, 2)); + subscriber.next(event); + execution.addEvent(event); + } + console.log("[Claude Agent] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"); + } + } catch (temp) { + error = [temp]; + } finally { + try { + more && (temp = iter.return) && await temp.call(iter); + } finally { + if (error) + throw error[0]; + } + } + console.log("[Claude Agent] Query completed successfully"); + } catch (error2) { + console.error("[Claude Agent] ERROR Details:"); + console.error(" Message:", error2.message); + console.error(" Stack:", error2.stack); + console.error(" Error object:", JSON.stringify(error2, Object.getOwnPropertyNames(error2), 2)); + if (error2.message && error2.message.includes("exited with code")) { + throw new Error( + `Claude Code process failed. Please ensure: +1. Claude CLI is installed and accessible (run: claude --version) +2. ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set correctly in environment variables +3. You have proper permissions to run Claude Code +4. If using ANTHROPIC_BASE_URL, ensure it supports Claude Code protocol + +Original error: ${error2.message} +Error stack: ${error2.stack || "No stack trace"}` + ); + } + if (error2.message && (error2.message.includes("API key") || error2.message.includes("auth"))) { + throw new Error( + `API key error: ${error2.message} +Please ensure ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set in environment variables.` + ); + } + throw error2; + } + } + /** + * Dynamically import Claude SDK + */ + async importClaudeSDK() { + try { + return await import("@anthropic-ai/claude-agent-sdk"); + } catch (error) { + throw new Error( + "Claude Agent SDK not found. Please install it: npm install @anthropic-ai/claude-agent-sdk" + ); + } + } + /** + * Abort a running execution + */ + abortExecution(runId) { + const execution = this.executionStateManager.getExecution(runId); + if (execution) { + execution.abort(); + } + } + /** + * Get execution state + */ + getExecutionState(runId) { + return this.executionStateManager.getExecution(runId); + } + /** + * Get session manager (for testing) + */ + getSessionManager() { + return this.sessionManager; + } + /** + * Get execution state manager (for testing) + */ + getExecutionStateManager() { + return this.executionStateManager; + } + /** + * Cleanup resources + */ + async cleanup() { + const runningExecutions = this.executionStateManager.getRunningExecutions(); + for (const execution of runningExecutions) { + execution.abort(); + } + this.sessionManager.clearAllSessions(); + this.executionStateManager.clearAll(); + } +}; +export { + ClaudeAgent, + EventTranslator, + ExecutionState, + ExecutionStateManager, + SessionManager, + ToolAdapter, + convertAgUiMessageToClaude, + convertAgUiMessagesToClaude, + convertAgUiMessagesToPrompt, + extractMessageContent, + extractToolResults, + formatErrorMessage, + generateMessageId, + generateRunId, + hasContentProperty, + hasToolResults, + isAssistantMessage, + isResultMessage, + isTextBlock, + isThinkingBlock, + isToolResultBlock, + isToolResultSubmission, + isToolUseBlock, + mergeTextBlocks, + safeJsonParse, + safeJsonStringify, + truncateText +}; +//# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/integrations/claude-agent-sdk/typescript/dist/index.mjs.map b/integrations/claude-agent-sdk/typescript/dist/index.mjs.map new file mode 100644 index 000000000..6e3a243e3 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/dist/index.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["../src/agent.ts","../src/session-manager.ts","../src/event-translator.ts","../src/types.ts","../src/tool-adapter.ts","../src/execution-state.ts","../src/utils/converters.ts"],"sourcesContent":["/**\n * Claude Agent: Main agent class that integrates Claude SDK with AG-UI Protocol\n */\n\nimport { Observable, Subscriber } from 'rxjs';\nimport {\n AbstractAgent,\n RunAgentInput,\n EventType,\n RunStartedEvent,\n RunFinishedEvent,\n RunErrorEvent,\n StepStartedEvent,\n StepFinishedEvent,\n} from '@ag-ui/client';\nimport type {\n ClaudeAgentConfig,\n ProcessedEvents,\n ClaudeSDKClient,\n Options,\n SDKMessage,\n} from './types';\nimport { SessionManager } from './session-manager';\nimport { EventTranslator } from './event-translator';\nimport { ToolAdapter } from './tool-adapter';\nimport { ExecutionState, ExecutionStateManager } from './execution-state';\nimport {\n generateRunId,\n convertAgUiMessagesToPrompt,\n isToolResultSubmission,\n formatErrorMessage,\n} from './utils/converters';\n\n/**\n * ClaudeAgent integrates Claude Agent SDK with AG-UI Protocol\n */\nexport class ClaudeAgent extends AbstractAgent {\n private sessionManager: SessionManager;\n private executionStateManager: ExecutionStateManager;\n private apiKey?: string;\n private baseUrl?: string;\n private sessionTimeout: number;\n private enablePersistentSessions: boolean;\n private permissionMode: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';\n private stderr?: (data: string) => void;\n private verbose?: boolean;\n\n constructor(config: ClaudeAgentConfig) {\n super(config);\n // SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment\n // Only set these if explicitly provided in config (optional)\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl;\n this.sessionTimeout = config.sessionTimeout || 30 * 60 * 1000; // 30 minutes\n this.enablePersistentSessions = config.enablePersistentSessions !== false;\n // Map legacy permission modes to new SDK values for backward compatibility\n this.permissionMode = this.mapPermissionMode(config.permissionMode || 'bypassPermissions');\n this.stderr = config.stderr;\n this.verbose = config.verbose;\n this.sessionManager = SessionManager.getInstance(this.sessionTimeout);\n this.executionStateManager = new ExecutionStateManager();\n }\n\n /**\n * Map legacy permission modes to new SDK values for backward compatibility\n */\n private mapPermissionMode(mode?: string): 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' {\n const modeMap: Record = {\n 'ask': 'default',\n 'auto': 'bypassPermissions',\n 'none': 'bypassPermissions',\n 'default': 'default',\n 'acceptEdits': 'acceptEdits',\n 'bypassPermissions': 'bypassPermissions',\n 'plan': 'plan',\n };\n return modeMap[mode || 'bypassPermissions'] || 'bypassPermissions';\n }\n\n /**\n * Run the agent with the given input\n */\n run(input: RunAgentInput): Observable {\n return new Observable((subscriber) => {\n this.executeAgent(input, subscriber).catch((error) => {\n subscriber.error(error);\n });\n });\n }\n\n /**\n * Execute the agent asynchronously\n */\n private async executeAgent(\n input: RunAgentInput,\n subscriber: Subscriber\n ): Promise {\n const runId = generateRunId();\n const sessionId = input.threadId || `session_${Date.now()}`;\n\n // Create execution state\n const execution = this.executionStateManager.createExecution(runId, sessionId);\n\n try {\n // Emit run started event\n const runStartedEvent: RunStartedEvent = {\n type: EventType.RUN_STARTED,\n threadId: sessionId,\n runId,\n };\n subscriber.next(runStartedEvent);\n execution.addEvent(runStartedEvent);\n\n // Get or create session\n const session = this.sessionManager.getSession(sessionId, 'default');\n\n // Get unseen messages\n const unseenMessages = this.sessionManager.getUnseenMessages(\n sessionId,\n input.messages || []\n );\n\n // Check if this is a tool result submission\n const isToolResult = isToolResultSubmission(input.messages || []);\n\n // Prepare tools\n const tools = input.tools || [];\n \n // Prepare options for Claude SDK\n const options = await this.prepareClaudeOptions(tools);\n\n // Extract prompt from messages\n const prompt = convertAgUiMessagesToPrompt(unseenMessages);\n\n // Emit step started event\n const stepStartedEvent: StepStartedEvent = {\n type: EventType.STEP_STARTED,\n stepName: `step_${runId}_1`,\n };\n subscriber.next(stepStartedEvent);\n execution.addEvent(stepStartedEvent);\n\n // Call Claude SDK\n await this.callClaudeSDK(\n prompt,\n options,\n session,\n runId,\n sessionId,\n subscriber,\n execution\n );\n\n // Mark messages as processed\n this.sessionManager.markMessagesAsProcessed(sessionId, unseenMessages);\n\n // Emit step finished event\n const stepFinishedEvent: StepFinishedEvent = {\n type: EventType.STEP_FINISHED,\n stepName: `step_${runId}_1`,\n };\n subscriber.next(stepFinishedEvent);\n execution.addEvent(stepFinishedEvent);\n\n // Emit run finished event\n const runFinishedEvent: RunFinishedEvent = {\n type: EventType.RUN_FINISHED,\n threadId: sessionId,\n runId,\n };\n subscriber.next(runFinishedEvent);\n execution.addEvent(runFinishedEvent);\n\n // Complete execution\n execution.complete();\n subscriber.complete();\n } catch (error: any) {\n // Emit run error event\n const runErrorEvent: RunErrorEvent = {\n type: EventType.RUN_ERROR,\n message: formatErrorMessage(error),\n };\n subscriber.next(runErrorEvent);\n execution.addEvent(runErrorEvent);\n\n // Mark execution as failed\n execution.fail(error);\n\n // Complete the observable\n subscriber.complete();\n }\n }\n\n /**\n * Prepare Claude SDK options\n * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment\n * But baseUrl needs to be explicitly passed for third-party APIs\n */\n private async prepareClaudeOptions(tools: any[]): Promise {\n // Get baseUrl from config or environment\n const baseUrl = this.baseUrl || process.env.ANTHROPIC_BASE_URL;\n const apiKey = this.apiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY;\n \n // Debug logging\n console.log('[Claude Agent] Preparing SDK options:', {\n hasApiKey: !!apiKey,\n hasBaseUrl: !!baseUrl,\n baseUrl: baseUrl || 'not set',\n permissionMode: this.permissionMode,\n hasStderr: !!this.stderr,\n verbose: this.verbose,\n });\n \n const options: Options = {\n permissionMode: this.permissionMode,\n // Add stderr callback for debugging - CRITICAL for error logging\n ...(this.stderr && { stderr: this.stderr }),\n // Add verbose flag for detailed logging\n ...(this.verbose !== undefined && { verbose: this.verbose }),\n env: process.env\n };\n \n // Verify stderr callback is set\n if (this.stderr) {\n console.log('[Claude Agent] āœ“ stderr callback is configured for error logging');\n } else {\n console.warn('[Claude Agent] āš ļø stderr callback not configured - CLI errors may not be visible');\n }\n\n // Add tools if provided\n if (tools && tools.length > 0) {\n const mcpServer = await ToolAdapter.createMcpServerForTools(tools);\n options.mcpServers = {\n ag_ui_tools: mcpServer,\n };\n\n // Set allowed tools\n options.allowedTools = ToolAdapter.getAllowedToolsList(tools);\n }\n\n return options;\n }\n\n /**\n * Call Claude SDK\n * Note: Currently only stateless mode is supported via query() function\n */\n private async callClaudeSDK(\n prompt: string,\n options: Options,\n session: any,\n runId: string,\n sessionId: string,\n subscriber: Subscriber,\n execution: ExecutionState\n ): Promise {\n const eventTranslator = new EventTranslator(runId, sessionId);\n\n // The current @anthropic-ai/claude-agent-sdk only supports stateless mode\n // via the query() function. We use stateless mode for both cases.\n await this.callClaudeSDKStateless(\n prompt,\n options,\n eventTranslator,\n subscriber,\n execution\n );\n }\n\n /**\n * Call Claude SDK in persistent session mode\n * Note: The current SDK only supports stateless mode via query() function\n * This method falls back to stateless mode\n */\n private async callClaudeSDKPersistent(\n prompt: string,\n options: Options,\n session: any,\n eventTranslator: EventTranslator,\n subscriber: Subscriber,\n execution: ExecutionState\n ): Promise {\n // The current @anthropic-ai/claude-agent-sdk only supports stateless mode\n // via the query() function. For persistent sessions, we use query() \n // but maintain session state in our SessionManager\n await this.callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution);\n }\n\n /**\n * Call Claude SDK in stateless mode\n */\n private async callClaudeSDKStateless(\n prompt: string,\n options: Options,\n eventTranslator: EventTranslator,\n subscriber: Subscriber,\n execution: ExecutionState\n ): Promise {\n try {\n // Log environment variables for debugging\n console.log('[Claude Agent] Environment check:');\n console.log(' ANTHROPIC_API_KEY:', process.env.ANTHROPIC_API_KEY ? 'SET' : 'NOT SET');\n console.log(' ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN ? 'SET' : 'NOT SET');\n console.log(' ANTHROPIC_BASE_URL:', process.env.ANTHROPIC_BASE_URL || 'NOT SET (using default)');\n console.log('[Claude Agent] Options passed to SDK:', {\n hasApiKey: !!options.apiKey,\n hasBaseUrl: !!options.baseUrl,\n permissionMode: options.permissionMode,\n hasMcpServers: !!options.mcpServers,\n });\n\n // Import Claude SDK dynamically\n const { query } = await this.importClaudeSDK();\n\n console.log('[Claude Agent] Calling SDK query()...');\n\n // Call query function\n // SDK will automatically read API key from environment variables (ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN)\n // if not provided in options.apiKey\n const queryResult = query({ prompt, options });\n\n // Process responses\n for await (const message of queryResult) {\n console.log('[Claude Agent] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n console.log('[Claude Agent] Received message type:', message?.type || 'unknown');\n console.log('[Claude Agent] Full message:', JSON.stringify(message, null, 2));\n \n if (execution.isAborted()) {\n console.log('[Claude Agent] Execution aborted by user');\n break;\n }\n\n const events = eventTranslator.translateMessage(message);\n console.log('[Claude Agent] Translated events count:', events.length);\n for (const event of events) {\n console.log('[Claude Agent] Sending event:', JSON.stringify(event, null, 2));\n subscriber.next(event);\n execution.addEvent(event);\n }\n console.log('[Claude Agent] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n }\n \n console.log('[Claude Agent] Query completed successfully');\n } catch (error: any) {\n // Log detailed error information\n console.error('[Claude Agent] ERROR Details:');\n console.error(' Message:', error.message);\n console.error(' Stack:', error.stack);\n console.error(' Error object:', JSON.stringify(error, Object.getOwnPropertyNames(error), 2));\n \n // Handle Claude Code process errors\n if (error.message && error.message.includes('exited with code')) {\n throw new Error(\n `Claude Code process failed. Please ensure:\\n` +\n `1. Claude CLI is installed and accessible (run: claude --version)\\n` +\n `2. ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set correctly in environment variables\\n` +\n `3. You have proper permissions to run Claude Code\\n` +\n `4. If using ANTHROPIC_BASE_URL, ensure it supports Claude Code protocol\\n` +\n `\\nOriginal error: ${error.message}\\n` +\n `Error stack: ${error.stack || 'No stack trace'}`\n );\n }\n // Handle API key errors from SDK\n if (error.message && (error.message.includes('API key') || error.message.includes('auth'))) {\n throw new Error(\n `API key error: ${error.message}\\n` +\n `Please ensure ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set in environment variables.`\n );\n }\n throw error;\n }\n }\n\n /**\n * Dynamically import Claude SDK\n */\n private async importClaudeSDK(): Promise {\n try {\n return await import('@anthropic-ai/claude-agent-sdk');\n } catch (error) {\n throw new Error(\n 'Claude Agent SDK not found. Please install it: npm install @anthropic-ai/claude-agent-sdk'\n );\n }\n }\n\n /**\n * Abort a running execution\n */\n abortExecution(runId: string): void {\n const execution = this.executionStateManager.getExecution(runId);\n if (execution) {\n execution.abort();\n }\n }\n\n /**\n * Get execution state\n */\n getExecutionState(runId: string): ExecutionState | undefined {\n return this.executionStateManager.getExecution(runId);\n }\n\n /**\n * Get session manager (for testing)\n */\n getSessionManager(): SessionManager {\n return this.sessionManager;\n }\n\n /**\n * Get execution state manager (for testing)\n */\n getExecutionStateManager(): ExecutionStateManager {\n return this.executionStateManager;\n }\n\n /**\n * Cleanup resources\n */\n async cleanup(): Promise {\n // Abort all running executions\n const runningExecutions = this.executionStateManager.getRunningExecutions();\n for (const execution of runningExecutions) {\n execution.abort();\n }\n\n // Clear all sessions\n this.sessionManager.clearAllSessions();\n\n // Clear all executions\n this.executionStateManager.clearAll();\n }\n}\n\n","/**\n * Session manager: Manages agent sessions and state\n */\n\nimport type { Message } from '@ag-ui/client';\nimport type { Session, ClaudeSDKClient } from './types';\n\nconst DEFAULT_SESSION_TIMEOUT = 30 * 60 * 1000; // 30 minutes\nconst CLEANUP_INTERVAL = 5 * 60 * 1000; // 5 minutes\n\n/**\n * SessionManager handles session lifecycle, message tracking, and state management\n * Implements singleton pattern for centralized session control\n */\nexport class SessionManager {\n private static instance: SessionManager | null = null;\n private sessions: Map = new Map();\n private cleanupInterval: ReturnType | null = null;\n private sessionTimeout: number;\n\n private constructor(sessionTimeout: number = DEFAULT_SESSION_TIMEOUT) {\n this.sessionTimeout = sessionTimeout;\n this.startCleanupInterval();\n }\n\n /**\n * Get the singleton instance\n */\n static getInstance(sessionTimeout?: number): SessionManager {\n if (!SessionManager.instance) {\n SessionManager.instance = new SessionManager(sessionTimeout);\n }\n return SessionManager.instance;\n }\n\n /**\n * Reset the singleton instance (useful for testing)\n */\n static resetInstance(): void {\n if (SessionManager.instance) {\n SessionManager.instance.stopCleanupInterval();\n SessionManager.instance = null;\n }\n }\n\n /**\n * Get or create a session\n */\n getSession(sessionId: string, userId?: string): Session {\n let session = this.sessions.get(sessionId);\n\n if (!session) {\n session = {\n id: sessionId,\n userId,\n processedMessageIds: new Set(),\n state: {},\n createdAt: Date.now(),\n lastAccessedAt: Date.now(),\n };\n this.sessions.set(sessionId, session);\n } else {\n // Update last accessed time\n session.lastAccessedAt = Date.now();\n }\n\n return session;\n }\n\n /**\n * Check if a session exists\n */\n hasSession(sessionId: string): boolean {\n return this.sessions.has(sessionId);\n }\n\n /**\n * Delete a session\n */\n deleteSession(sessionId: string): boolean {\n const session = this.sessions.get(sessionId);\n if (session?.client) {\n // Close the Claude SDK client if it exists\n session.client.close().catch((error) => {\n console.error(`Error closing Claude SDK client for session ${sessionId}:`, error);\n });\n }\n return this.sessions.delete(sessionId);\n }\n\n /**\n * Track a processed message\n */\n trackMessage(sessionId: string, messageId: string): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.processedMessageIds.add(messageId);\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Check if a message has been processed\n */\n isMessageProcessed(sessionId: string, messageId: string): boolean {\n const session = this.sessions.get(sessionId);\n return session ? session.processedMessageIds.has(messageId) : false;\n }\n\n /**\n * Get unseen messages (messages not yet processed)\n */\n getUnseenMessages(sessionId: string, messages: Message[]): Message[] {\n const session = this.sessions.get(sessionId);\n if (!session) {\n return messages;\n }\n\n return messages.filter((msg) => {\n const msgId = msg.id || `${msg.role}_${msg.content}`;\n return !session.processedMessageIds.has(msgId);\n });\n }\n\n /**\n * Mark messages as processed\n */\n markMessagesAsProcessed(sessionId: string, messages: Message[]): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n for (const msg of messages) {\n const msgId = msg.id || `${msg.role}_${msg.content}`;\n session.processedMessageIds.add(msgId);\n }\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Get state value from session\n */\n getStateValue(sessionId: string, key: string): any {\n const session = this.sessions.get(sessionId);\n return session?.state[key];\n }\n\n /**\n * Set state value in session\n */\n setStateValue(sessionId: string, key: string, value: any): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.state[key] = value;\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Remove state keys from session\n */\n removeStateKeys(sessionId: string, keys: string[]): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n for (const key of keys) {\n delete session.state[key];\n }\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Clear all state for a session\n */\n clearSessionState(sessionId: string): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.state = {};\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Set Claude SDK client for a session\n */\n setClient(sessionId: string, client: ClaudeSDKClient): void {\n const session = this.sessions.get(sessionId);\n if (session) {\n session.client = client;\n session.lastAccessedAt = Date.now();\n }\n }\n\n /**\n * Get Claude SDK client for a session\n */\n getClient(sessionId: string): ClaudeSDKClient | undefined {\n const session = this.sessions.get(sessionId);\n return session?.client;\n }\n\n /**\n * Get total number of sessions\n */\n getSessionCount(): number {\n return this.sessions.size;\n }\n\n /**\n * Get number of sessions for a specific user\n */\n getUserSessionCount(userId: string): number {\n let count = 0;\n for (const session of this.sessions.values()) {\n if (session.userId === userId) {\n count++;\n }\n }\n return count;\n }\n\n /**\n * Get all session IDs\n */\n getAllSessionIds(): string[] {\n return Array.from(this.sessions.keys());\n }\n\n /**\n * Get all sessions for a specific user\n */\n getUserSessions(userId: string): Session[] {\n const userSessions: Session[] = [];\n for (const session of this.sessions.values()) {\n if (session.userId === userId) {\n userSessions.push(session);\n }\n }\n return userSessions;\n }\n\n /**\n * Clean up stale sessions\n */\n private cleanupStaleSessions(): void {\n const now = Date.now();\n const sessionsToDelete: string[] = [];\n\n for (const [sessionId, session] of this.sessions.entries()) {\n if (now - session.lastAccessedAt > this.sessionTimeout) {\n sessionsToDelete.push(sessionId);\n }\n }\n\n for (const sessionId of sessionsToDelete) {\n this.deleteSession(sessionId);\n }\n\n if (sessionsToDelete.length > 0) {\n console.log(`Cleaned up ${sessionsToDelete.length} stale sessions`);\n }\n }\n\n /**\n * Start the cleanup interval\n */\n private startCleanupInterval(): void {\n if (!this.cleanupInterval) {\n this.cleanupInterval = setInterval(() => {\n this.cleanupStaleSessions();\n }, CLEANUP_INTERVAL);\n\n // Don't keep the process alive just for this interval\n if (typeof (this.cleanupInterval as any).unref === 'function') {\n (this.cleanupInterval as any).unref();\n }\n }\n }\n\n /**\n * Stop the cleanup interval\n */\n private stopCleanupInterval(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n }\n\n /**\n * Clear all sessions (useful for testing)\n */\n clearAllSessions(): void {\n for (const sessionId of this.sessions.keys()) {\n this.deleteSession(sessionId);\n }\n this.sessions.clear();\n }\n}\n\n","/**\n * Event translator: Converts Claude SDK messages to AG-UI events\n */\n\nimport {\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n EventType,\n} from '@ag-ui/client';\nimport type {\n SDKMessage,\n SDKAssistantMessage,\n ContentBlock,\n TextBlock,\n ToolUseBlock,\n ToolResultBlock,\n ProcessedEvents,\n} from './types';\nimport {\n hasContentProperty,\n isTextBlock,\n isToolUseBlock,\n isToolResultBlock,\n} from './types';\n\n/**\n * EventTranslator converts Claude SDK messages to AG-UI protocol events\n * \n * NOTE: This translator only handles SDK message translation.\n * Run lifecycle events (RUN_STARTED, RUN_FINISHED, etc.) and step events\n * are handled by ClaudeAgent.\n */\nexport class EventTranslator {\n private messageIdCounter = 0;\n private currentMessageId: string | null = null;\n private runId: string;\n private threadId: string;\n\n constructor(runId: string, threadId: string) {\n this.runId = runId;\n this.threadId = threadId;\n }\n\n /**\n * Translate a Claude SDK message to AG-UI events\n * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent\n */\n translateMessage(message: SDKMessage): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n\n if (hasContentProperty(message)) {\n events.push(...this.translateAssistantMessage(message as SDKAssistantMessage));\n }\n // Note: ResultMessage (success/error) is ignored here\n // Run completion is handled by ClaudeAgent, not EventTranslator\n\n return events;\n }\n\n /**\n * Translate an AssistantMessage with content blocks\n */\n private translateAssistantMessage(message: SDKAssistantMessage): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n\n // Content is in message.message.content for SDKAssistantMessage\n const content = message.message?.content || [];\n \n for (const block of content) {\n if (isTextBlock(block)) {\n events.push(...this.translateTextBlock(block));\n } else if (isToolUseBlock(block)) {\n events.push(...this.translateToolUseBlock(block));\n } else if (isToolResultBlock(block)) {\n events.push(...this.translateToolResultBlock(block));\n }\n }\n\n return events;\n }\n\n /**\n * Translate a TextBlock to text message events\n * NOTE: Step events are handled by ClaudeAgent, not here\n */\n private translateTextBlock(block: TextBlock): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n const messageId = this.generateMessageId();\n\n // Start event\n events.push({\n type: EventType.TEXT_MESSAGE_START,\n messageId,\n role: 'assistant',\n });\n\n // Content event - split text into delta chunks\n const text = block.text;\n if (text.length > 0) {\n events.push({\n type: EventType.TEXT_MESSAGE_CONTENT,\n messageId,\n delta: text,\n });\n }\n\n // End event\n events.push({\n type: EventType.TEXT_MESSAGE_END,\n messageId,\n });\n\n return events;\n }\n\n /**\n * Translate a ToolUseBlock to tool call events\n * NOTE: Step events are handled by ClaudeAgent, not here\n */\n private translateToolUseBlock(block: ToolUseBlock): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n const toolCallId = block.id;\n\n // Start event\n events.push({\n type: EventType.TOOL_CALL_START,\n toolCallId,\n toolCallName: block.name,\n });\n\n // Args event - send args as JSON string\n const argsJson = JSON.stringify(block.input);\n if (argsJson.length > 0) {\n events.push({\n type: EventType.TOOL_CALL_ARGS,\n toolCallId,\n delta: argsJson,\n });\n }\n\n // End event\n events.push({\n type: EventType.TOOL_CALL_END,\n toolCallId,\n });\n\n return events;\n }\n\n /**\n * Translate a ToolResultBlock to tool call result event\n */\n private translateToolResultBlock(block: ToolResultBlock): ProcessedEvents[] {\n const events: ProcessedEvents[] = [];\n\n // Extract content as string\n let resultContent: string;\n if (typeof block.content === 'string') {\n resultContent = block.content;\n } else if (Array.isArray(block.content)) {\n // Handle array of content blocks\n resultContent = block.content\n .map((item) => {\n if (item.type === 'text') {\n return item.text || '';\n }\n return JSON.stringify(item);\n })\n .join('\\n');\n } else {\n resultContent = JSON.stringify(block.content);\n }\n\n const messageId = this.generateMessageId();\n events.push({\n type: EventType.TOOL_CALL_RESULT,\n toolCallId: block.tool_use_id,\n messageId,\n content: resultContent,\n ...(block.is_error && { role: 'tool' as const }),\n });\n\n return events;\n }\n\n /**\n * Generate a unique message ID\n */\n private generateMessageId(): string {\n this.messageIdCounter++;\n return `msg_${this.runId}_${this.messageIdCounter}`;\n }\n\n /**\n * Reset the translator state for a new execution\n */\n reset(): void {\n this.messageIdCounter = 0;\n this.currentMessageId = null;\n }\n\n /**\n * Get current message ID\n */\n getCurrentMessageId(): string | null {\n return this.currentMessageId;\n }\n\n /**\n * Set current message ID\n */\n setCurrentMessageId(messageId: string | null): void {\n this.currentMessageId = messageId;\n }\n}\n\n","/**\n * Type definitions for Claude Agent SDK integration with AG-UI Protocol\n */\n\nimport type {\n TextMessageStartEvent,\n TextMessageContentEvent,\n TextMessageEndEvent,\n ToolCallStartEvent,\n ToolCallArgsEvent,\n ToolCallEndEvent,\n ToolCallResultEvent,\n RunStartedEvent,\n RunFinishedEvent,\n RunErrorEvent,\n StepStartedEvent,\n StepFinishedEvent,\n AgentConfig,\n Tool,\n Message,\n} from '@ag-ui/client';\n\n// Re-export Claude SDK types (will be imported from the actual SDK)\n// These are placeholder interfaces based on the SDK documentation\nexport interface ClaudeSDKClient {\n query(prompt: string): Promise;\n receiveResponse(): AsyncIterableIterator;\n close(): Promise;\n}\n\nexport interface Options {\n apiKey?: string;\n baseUrl?: string;\n mcpServers?: Record;\n allowedTools?: string[];\n // Valid permission modes from Agent SDK: 'default', 'acceptEdits', 'bypassPermissions', 'plan'\n // Legacy values 'ask', 'auto', 'none' are also supported for backward compatibility\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none';\n stderr?: (data: string) => void;\n verbose?: boolean;\n [key: string]: any;\n}\n\nexport interface Query {\n next(): Promise>;\n [Symbol.asyncIterator](): AsyncIterableIterator;\n}\n\n// SDK Message types based on documentation\nexport type SDKMessage =\n | SDKAssistantMessage\n | SDKUserMessage\n | SDKSystemMessage\n | SDKResultMessage\n | SDKPartialAssistantMessage\n | SDKCompactBoundaryMessage\n | SDKPermissionDenial;\n\nexport interface SDKAssistantMessage {\n type: 'assistant';\n message: {\n id?: string;\n content: ContentBlock[];\n [key: string]: any;\n };\n parent_tool_use_id?: string | null;\n uuid?: string;\n session_id?: string;\n}\n\nexport interface SDKUserMessage {\n type: 'user';\n content: string;\n id?: string;\n}\n\nexport interface SDKSystemMessage {\n type: 'system';\n content: string;\n}\n\nexport interface SDKResultMessage {\n type: 'result';\n subtype: 'success' | 'error';\n error?: {\n type: string;\n message: string;\n };\n}\n\nexport interface SDKPartialAssistantMessage {\n type: 'partial_assistant';\n content: ContentBlock[];\n}\n\nexport interface SDKCompactBoundaryMessage {\n type: 'compact_boundary';\n}\n\nexport interface SDKPermissionDenial {\n type: 'permission_denial';\n tool: string;\n reason: string;\n}\n\n// Content block types\nexport type ContentBlock = TextBlock | ToolUseBlock | ToolResultBlock | ThinkingBlock;\n\nexport interface TextBlock {\n type: 'text';\n text: string;\n}\n\nexport interface ToolUseBlock {\n type: 'tool_use';\n id: string;\n name: string;\n input: Record;\n}\n\nexport interface ToolResultBlock {\n type: 'tool_result';\n tool_use_id: string;\n content: string | Array<{ type: string; [key: string]: any }>;\n is_error?: boolean;\n}\n\nexport interface ThinkingBlock {\n type: 'thinking';\n thinking: string;\n}\n\n// Tool definition types\nexport interface SdkMcpToolDefinition {\n name: string;\n description: string;\n inputSchema: Schema;\n handler: (args: any, extra?: any) => Promise;\n}\n\nexport interface CallToolResult {\n content: Array<{\n type: 'text' | 'image' | 'resource';\n text?: string;\n data?: string;\n mimeType?: string;\n [key: string]: any;\n }>;\n isError?: boolean;\n}\n\nexport interface McpSdkServerConfigWithInstance {\n name: string;\n version?: string;\n tools?: Array>;\n}\n\n// AG-UI Integration types\nexport type ProcessedEvents =\n | TextMessageStartEvent\n | TextMessageContentEvent\n | TextMessageEndEvent\n | ToolCallStartEvent\n | ToolCallArgsEvent\n | ToolCallEndEvent\n | ToolCallResultEvent\n | RunStartedEvent\n | RunFinishedEvent\n | RunErrorEvent\n | StepStartedEvent\n | StepFinishedEvent;\n\n// Session management types\nexport interface Session {\n id: string;\n userId?: string;\n client?: ClaudeSDKClient;\n processedMessageIds: Set;\n state: Record;\n createdAt: number;\n lastAccessedAt: number;\n}\n\n// Agent configuration\nexport interface ClaudeAgentConfig extends AgentConfig {\n apiKey?: string;\n baseUrl?: string;\n sessionTimeout?: number;\n enablePersistentSessions?: boolean;\n // Valid permission modes from Agent SDK: 'default', 'acceptEdits', 'bypassPermissions', 'plan'\n // Legacy values 'ask', 'auto', 'none' are mapped internally for backward compatibility\n permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none';\n mcpServers?: Record;\n stderr?: (data: string) => void;\n verbose?: boolean;\n}\n\n// Execution state types\nexport interface ExecutionState {\n id: string;\n sessionId: string;\n isRunning: boolean;\n startTime: number;\n events: ProcessedEvents[];\n error?: Error;\n}\n\n// Helper type guards\nexport function isAssistantMessage(message: SDKMessage): message is SDKAssistantMessage {\n return message.type === 'assistant';\n}\n\nexport function isResultMessage(message: SDKMessage): message is SDKResultMessage {\n return message.type === 'result';\n}\n\nexport function isTextBlock(block: ContentBlock): block is TextBlock {\n return block.type === 'text';\n}\n\nexport function isToolUseBlock(block: ContentBlock): block is ToolUseBlock {\n return block.type === 'tool_use';\n}\n\nexport function isToolResultBlock(block: ContentBlock): block is ToolResultBlock {\n return block.type === 'tool_result';\n}\n\nexport function isThinkingBlock(block: ContentBlock): block is ThinkingBlock {\n return block.type === 'thinking';\n}\n\nexport function hasContentProperty(message: SDKMessage): message is SDKAssistantMessage | SDKPartialAssistantMessage {\n // For SDKAssistantMessage, content is in message.content\n if (message.type === 'assistant') {\n return 'message' in message && \n message.message !== null &&\n typeof message.message === 'object' &&\n 'content' in message.message && \n Array.isArray((message.message as any).content);\n }\n // For SDKPartialAssistantMessage, content might be at top level\n return 'content' in message && Array.isArray((message as any).content);\n}\n\n// Tool execution types\nexport interface ToolExecutionContext {\n toolName: string;\n toolCallId: string;\n isClientTool: boolean;\n isLongRunning: boolean;\n}\n\n// Message conversion types\nexport interface ConvertedMessage {\n role: 'user' | 'assistant' | 'system';\n content: string | Array<{ type: string; [key: string]: any }>;\n}\n\n","/**\n * Tool adapter: Converts AG-UI tools to Claude SDK format\n */\n\nimport { z } from 'zod';\nimport type { Tool } from '@ag-ui/client';\nimport type {\n SdkMcpToolDefinition,\n McpSdkServerConfigWithInstance,\n CallToolResult,\n} from './types';\n\n// Extended Tool type that includes runtime properties\ntype ExtendedTool = Tool & {\n client?: boolean;\n handler?: (args: any) => any | Promise;\n longRunning?: boolean;\n};\n\n/**\n * ToolAdapter handles conversion of AG-UI tools to Claude SDK format\n */\nexport class ToolAdapter {\n /**\n * Convert AG-UI tools to Claude SDK MCP tool definitions\n */\n static convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[] {\n return tools.map((tool) => this.convertSingleTool(tool as ExtendedTool));\n }\n\n /**\n * Convert a single AG-UI tool to Claude SDK format\n */\n private static convertSingleTool(tool: ExtendedTool): SdkMcpToolDefinition {\n const zodSchema = this.convertJsonSchemaToZod(tool.parameters || {});\n\n return {\n name: tool.name,\n description: tool.description || '',\n inputSchema: zodSchema,\n handler: async (args: any) => {\n // For client tools, we mark them as long-running\n // The actual execution will be handled by the client\n if (tool.client) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n toolName: tool.name,\n args,\n isClientTool: true,\n isLongRunning: true,\n }),\n },\n ],\n };\n }\n\n // For backend tools, if there's a handler, execute it\n if (tool.handler) {\n try {\n const result = await tool.handler(args);\n return {\n content: [\n {\n type: 'text',\n text: typeof result === 'string' ? result : JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n return {\n content: [\n {\n type: 'text',\n text: error.message || 'Tool execution failed',\n },\n ],\n isError: true,\n };\n }\n }\n\n // Default response for tools without handlers\n return {\n content: [\n {\n type: 'text',\n text: 'Tool executed (no handler)',\n },\n ],\n };\n },\n };\n }\n\n /**\n * Convert JSON Schema to Zod schema\n */\n private static convertJsonSchemaToZod(jsonSchema: any): z.ZodTypeAny {\n if (!jsonSchema || typeof jsonSchema !== 'object') {\n return z.object({});\n }\n\n const properties = jsonSchema.properties || {};\n const required = jsonSchema.required || [];\n\n const zodShape: Record = {};\n\n for (const [key, prop] of Object.entries(properties)) {\n const propSchema = prop as any;\n let zodType = this.convertJsonSchemaTypeToZod(propSchema);\n\n // Make optional if not in required array\n if (!required.includes(key)) {\n zodType = zodType.optional();\n }\n\n zodShape[key] = zodType;\n }\n\n return z.object(zodShape);\n }\n\n /**\n * Convert a single JSON Schema type to Zod type\n */\n private static convertJsonSchemaTypeToZod(schema: any): z.ZodTypeAny {\n const type = schema.type;\n\n switch (type) {\n case 'string':\n if (schema.enum) {\n return z.enum(schema.enum as [string, ...string[]]);\n }\n return z.string();\n\n case 'number':\n case 'integer':\n let numType = type === 'integer' ? z.number().int() : z.number();\n if (schema.minimum !== undefined) {\n numType = numType.min(schema.minimum);\n }\n if (schema.maximum !== undefined) {\n numType = numType.max(schema.maximum);\n }\n return numType;\n\n case 'boolean':\n return z.boolean();\n\n case 'array':\n if (schema.items) {\n const itemType = this.convertJsonSchemaTypeToZod(schema.items);\n return z.array(itemType);\n }\n return z.array(z.any());\n\n case 'object':\n if (schema.properties) {\n return this.convertJsonSchemaToZod(schema);\n }\n return z.record(z.any());\n\n case 'null':\n return z.null();\n\n default:\n // For any other type or if type is not specified\n return z.any();\n }\n }\n\n /**\n * Create an MCP server configuration for AG-UI tools\n */\n static async createMcpServerForTools(tools: Tool[]): Promise {\n const sdkTools = this.convertAgUiToolsToSdk(tools as ExtendedTool[]);\n\n // Import createSdkMcpServer from Claude Agent SDK\n const { createSdkMcpServer } = await import('@anthropic-ai/claude-agent-sdk');\n \n // Use the official SDK function to create a properly formatted MCP server\n return createSdkMcpServer({\n name: 'ag_ui_tools',\n version: '1.0.0',\n tools: sdkTools as any, // Cast to any to avoid type incompatibility\n });\n }\n\n /**\n * Extract tool calls from Claude SDK response\n */\n static extractToolCalls(message: any): Array<{\n id: string;\n name: string;\n input: Record;\n }> {\n if (!message.content || !Array.isArray(message.content)) {\n return [];\n }\n\n return message.content\n .filter((block: any) => block.type === 'tool_use')\n .map((block: any) => ({\n id: block.id,\n name: block.name,\n input: block.input,\n }));\n }\n\n /**\n * Check if a tool is a long-running client tool\n */\n static isClientTool(toolName: string, tools: Tool[]): boolean {\n const tool = tools.find((t) => t.name === toolName) as ExtendedTool | undefined;\n return tool?.client === true;\n }\n\n /**\n * Check if a tool is marked as long-running\n */\n static isLongRunningTool(toolName: string, tools: Tool[]): boolean {\n const tool = tools.find((t) => t.name === toolName) as ExtendedTool | undefined;\n return tool?.client === true || tool?.longRunning === true;\n }\n\n /**\n * Format tool names for Claude SDK (with MCP server prefix)\n */\n static formatToolNameForSdk(toolName: string, serverName: string = 'ag_ui_tools'): string {\n return `mcp__${serverName}__${toolName}`;\n }\n\n /**\n * Parse tool name from SDK format (remove MCP server prefix)\n */\n static parseToolNameFromSdk(sdkToolName: string): string {\n const parts = sdkToolName.split('__');\n if (parts.length >= 3 && parts[0] === 'mcp') {\n return parts.slice(2).join('__');\n }\n return sdkToolName;\n }\n\n /**\n * Get allowed tools list for SDK options\n */\n static getAllowedToolsList(tools: Tool[], serverName: string = 'ag_ui_tools'): string[] {\n return tools.map((tool) => this.formatToolNameForSdk(tool.name, serverName));\n }\n}\n\n","/**\n * Execution state: Tracks background Claude executions\n */\n\nimport type { ProcessedEvents } from './types';\n\n/**\n * ExecutionState manages the state of a Claude SDK execution\n */\nexport class ExecutionState {\n readonly id: string;\n readonly sessionId: string;\n private _isRunning: boolean;\n private _startTime: number;\n private _endTime?: number;\n private _events: ProcessedEvents[];\n private _error?: Error;\n private _abortController: AbortController;\n\n constructor(id: string, sessionId: string) {\n this.id = id;\n this.sessionId = sessionId;\n this._isRunning = true;\n this._startTime = Date.now();\n this._events = [];\n this._abortController = new AbortController();\n }\n\n /**\n * Check if execution is running\n */\n get isRunning(): boolean {\n return this._isRunning;\n }\n\n /**\n * Get start time\n */\n get startTime(): number {\n return this._startTime;\n }\n\n /**\n * Get end time\n */\n get endTime(): number | undefined {\n return this._endTime;\n }\n\n /**\n * Get duration in milliseconds\n */\n get duration(): number {\n const end = this._endTime || Date.now();\n return end - this._startTime;\n }\n\n /**\n * Get all collected events\n */\n get events(): ProcessedEvents[] {\n return [...this._events];\n }\n\n /**\n * Get error if any\n */\n get error(): Error | undefined {\n return this._error;\n }\n\n /**\n * Get abort signal\n */\n get signal(): AbortSignal {\n return this._abortController.signal;\n }\n\n /**\n * Add an event to the execution state\n */\n addEvent(event: ProcessedEvents): void {\n this._events.push(event);\n }\n\n /**\n * Add multiple events\n */\n addEvents(events: ProcessedEvents[]): void {\n this._events.push(...events);\n }\n\n /**\n * Mark execution as completed\n */\n complete(): void {\n if (this._isRunning) {\n this._isRunning = false;\n this._endTime = Date.now();\n }\n }\n\n /**\n * Mark execution as failed\n */\n fail(error: Error): void {\n if (this._isRunning) {\n this._isRunning = false;\n this._endTime = Date.now();\n this._error = error;\n }\n }\n\n /**\n * Abort the execution\n */\n abort(): void {\n if (this._isRunning) {\n this._abortController.abort();\n this._isRunning = false;\n this._endTime = Date.now();\n }\n }\n\n /**\n * Get execution statistics\n */\n getStats(): {\n duration: number;\n eventCount: number;\n isRunning: boolean;\n hasError: boolean;\n } {\n return {\n duration: this.duration,\n eventCount: this._events.length,\n isRunning: this._isRunning,\n hasError: !!this._error,\n };\n }\n\n /**\n * Clear events (useful for memory management)\n */\n clearEvents(): void {\n this._events = [];\n }\n\n /**\n * Get the last N events\n */\n getLastEvents(count: number): ProcessedEvents[] {\n return this._events.slice(-count);\n }\n\n /**\n * Check if execution has been aborted\n */\n isAborted(): boolean {\n return this._abortController.signal.aborted;\n }\n}\n\n/**\n * ExecutionStateManager manages multiple execution states\n */\nexport class ExecutionStateManager {\n private executions: Map = new Map();\n private readonly maxExecutions: number;\n\n constructor(maxExecutions: number = 100) {\n this.maxExecutions = maxExecutions;\n }\n\n /**\n * Create a new execution state\n */\n createExecution(id: string, sessionId: string): ExecutionState {\n const execution = new ExecutionState(id, sessionId);\n this.executions.set(id, execution);\n\n // Clean up old executions if we exceed the limit\n if (this.executions.size > this.maxExecutions) {\n this.cleanupOldExecutions();\n }\n\n return execution;\n }\n\n /**\n * Get an execution state by ID\n */\n getExecution(id: string): ExecutionState | undefined {\n return this.executions.get(id);\n }\n\n /**\n * Check if an execution exists\n */\n hasExecution(id: string): boolean {\n return this.executions.has(id);\n }\n\n /**\n * Delete an execution state\n */\n deleteExecution(id: string): boolean {\n return this.executions.delete(id);\n }\n\n /**\n * Get all executions for a session\n */\n getSessionExecutions(sessionId: string): ExecutionState[] {\n const executions: ExecutionState[] = [];\n for (const execution of this.executions.values()) {\n if (execution.sessionId === sessionId) {\n executions.push(execution);\n }\n }\n return executions;\n }\n\n /**\n * Get running executions\n */\n getRunningExecutions(): ExecutionState[] {\n const running: ExecutionState[] = [];\n for (const execution of this.executions.values()) {\n if (execution.isRunning) {\n running.push(execution);\n }\n }\n return running;\n }\n\n /**\n * Get completed executions\n */\n getCompletedExecutions(): ExecutionState[] {\n const completed: ExecutionState[] = [];\n for (const execution of this.executions.values()) {\n if (!execution.isRunning) {\n completed.push(execution);\n }\n }\n return completed;\n }\n\n /**\n * Abort all running executions for a session\n */\n abortSessionExecutions(sessionId: string): void {\n const sessionExecutions = this.getSessionExecutions(sessionId);\n for (const execution of sessionExecutions) {\n if (execution.isRunning) {\n execution.abort();\n }\n }\n }\n\n /**\n * Clean up old completed executions\n */\n private cleanupOldExecutions(): void {\n const completed = this.getCompletedExecutions();\n \n // Sort by end time (oldest first)\n completed.sort((a, b) => {\n const aTime = a.endTime || a.startTime;\n const bTime = b.endTime || b.startTime;\n return aTime - bTime;\n });\n\n // Remove the oldest executions\n const toRemove = Math.max(0, this.executions.size - this.maxExecutions);\n for (let i = 0; i < toRemove && i < completed.length; i++) {\n this.executions.delete(completed[i].id);\n }\n }\n\n /**\n * Clear all executions\n */\n clearAll(): void {\n this.executions.clear();\n }\n\n /**\n * Get total execution count\n */\n getExecutionCount(): number {\n return this.executions.size;\n }\n\n /**\n * Get execution statistics\n */\n getStats(): {\n total: number;\n running: number;\n completed: number;\n failed: number;\n } {\n let running = 0;\n let completed = 0;\n let failed = 0;\n\n for (const execution of this.executions.values()) {\n if (execution.isRunning) {\n running++;\n } else if (execution.error) {\n failed++;\n } else {\n completed++;\n }\n }\n\n return {\n total: this.executions.size,\n running,\n completed,\n failed,\n };\n }\n}\n\n","/**\n * Message format converters\n */\n\nimport type { Message } from '@ag-ui/client';\nimport type { ConvertedMessage } from '../types';\n\n/**\n * Convert AG-UI messages to a format suitable for Claude SDK\n */\nexport function convertAgUiMessagesToPrompt(messages: Message[]): string {\n // For Claude SDK, we typically extract the last user message as the prompt\n // The SDK maintains conversation history internally (in persistent mode)\n \n // Find the last user message\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === 'user') {\n return extractMessageContent(msg);\n }\n }\n\n // If no user message found, return a default prompt\n return 'Hello';\n}\n\n/**\n * Extract text content from a message\n */\nexport function extractMessageContent(message: Message): string {\n if (typeof message.content === 'string') {\n return message.content;\n }\n\n if (Array.isArray(message.content)) {\n return message.content\n .map((block: any) => {\n if (typeof block === 'string') {\n return block;\n }\n if (block.type === 'text') {\n return block.text || '';\n }\n // For other types (image, file, etc.), we might need special handling\n return '';\n })\n .filter(Boolean)\n .join('\\n');\n }\n\n return String(message.content);\n}\n\n/**\n * Convert AG-UI message to Claude message format\n */\nexport function convertAgUiMessageToClaude(message: Message): ConvertedMessage {\n const role = message.role as 'user' | 'assistant' | 'system';\n const content = extractMessageContent(message);\n\n return {\n role,\n content,\n };\n}\n\n/**\n * Convert multiple AG-UI messages to Claude format\n */\nexport function convertAgUiMessagesToClaude(messages: Message[]): ConvertedMessage[] {\n return messages.map(convertAgUiMessageToClaude);\n}\n\n/**\n * Check if messages contain tool results\n */\nexport function hasToolResults(messages: Message[]): boolean {\n return messages.some((msg) => {\n if (typeof msg.content === 'string') {\n return false;\n }\n if (Array.isArray(msg.content)) {\n return msg.content.some((block: any) => {\n return typeof block === 'object' && block.type === 'tool_result';\n });\n }\n return false;\n });\n}\n\n/**\n * Extract tool results from messages\n */\nexport function extractToolResults(messages: Message[]): Array<{\n toolCallId: string;\n result: string;\n}> {\n const results: Array<{ toolCallId: string; result: string }> = [];\n\n for (const msg of messages) {\n if (typeof msg.content === 'string') {\n continue;\n }\n\n if (Array.isArray(msg.content)) {\n for (const block of msg.content as any[]) {\n if (typeof block === 'object' && block.type === 'tool_result') {\n results.push({\n toolCallId: (block as any).toolCallId || (block as any).tool_use_id || '',\n result: (block as any).result || (block as any).content || '',\n });\n }\n }\n }\n }\n\n return results;\n}\n\n/**\n * Generate a unique run ID\n */\nexport function generateRunId(): string {\n return `run_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Generate a unique message ID\n */\nexport function generateMessageId(prefix: string = 'msg'): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Safely parse JSON string\n */\nexport function safeJsonParse(json: string, defaultValue: any = null): any {\n try {\n return JSON.parse(json);\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Safely stringify JSON\n */\nexport function safeJsonStringify(obj: any, defaultValue: string = '{}'): string {\n try {\n return JSON.stringify(obj);\n } catch {\n return defaultValue;\n }\n}\n\n/**\n * Check if a message is a tool result submission\n */\nexport function isToolResultSubmission(messages: Message[]): boolean {\n // Check if the last message contains tool results\n if (messages.length === 0) {\n return false;\n }\n\n const lastMessage = messages[messages.length - 1];\n return hasToolResults([lastMessage]);\n}\n\n/**\n * Format error message for display\n */\nexport function formatErrorMessage(error: any): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n return 'An unknown error occurred';\n}\n\n/**\n * Truncate text to a maximum length\n */\nexport function truncateText(text: string, maxLength: number = 1000): string {\n if (text.length <= maxLength) {\n return text;\n }\n return text.slice(0, maxLength) + '...';\n}\n\n/**\n * Merge consecutive text blocks\n */\nexport function mergeTextBlocks(blocks: Array<{ type: string; text?: string }>): string {\n return blocks\n .filter((block: any) => block.type === 'text' && block.text)\n .map((block: any) => block.text)\n .join('');\n}\n\n"],"mappings":"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","names":["EventType","EventType","error"]} \ No newline at end of file diff --git a/integrations/claude-agent-sdk/typescript/examples/.gitignore b/integrations/claude-agent-sdk/typescript/examples/.gitignore new file mode 100644 index 000000000..32319dd4a --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/.gitignore @@ -0,0 +1,31 @@ +# Environment files +.env +.env.local +.env*.local + +# Dependencies +node_modules/ + +# Build output +dist/ +build/ + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* + +# OS +.DS_Store +Thumbs.db + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + diff --git a/integrations/claude-agent-sdk/typescript/examples/README.md b/integrations/claude-agent-sdk/typescript/examples/README.md index fc4345801..dfe8c8e35 100644 --- a/integrations/claude-agent-sdk/typescript/examples/README.md +++ b/integrations/claude-agent-sdk/typescript/examples/README.md @@ -4,26 +4,44 @@ This example demonstrates how to use the Claude Agent SDK with Express.js to cre ## Setup -1. Install dependencies: +### 1. Configure Environment Variables + +Copy the environment variable template file and configure it: ```bash cd examples -npm install +cp env.example .env.local +``` + +Edit the `.env.local` file and set the required environment variables: + +```bash +# Required: Claude API key +ANTHROPIC_API_KEY=your_api_key_here + +# Optional configuration +CLAUDE_CLI_PATH=/path/to/claude-agent-sdk/cli/claude # Claude CLI path +PORT=3000 # Server port +APP_NAME=claude-example # Application name +SYSTEM_PROMPT=You are a helpful assistant # System prompt +ENABLE_PERSISTENT_SESSIONS=true # Enable persistent sessions +SESSION_TIMEOUT=1800000 # Session timeout (milliseconds) +PERMISSION_MODE=ask # Permission mode: ask, auto, none ``` -2. Set your Anthropic API key: +### 2. Install Dependencies ```bash -export ANTHROPIC_API_KEY=your_api_key_here +pnpm install ``` -3. Run the server: +### 3. Run the Server ```bash -npm run dev +pnpm dev ``` -The server will start on `http://localhost:3000`. +The server will start at `http://localhost:3000`. ## API Endpoints diff --git a/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md b/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md index 00af938f9..b196ab54a 100644 --- a/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md +++ b/integrations/claude-agent-sdk/typescript/examples/copilotkit/README.md @@ -1,8 +1,8 @@ # CopilotKit + Claude Agent SDK Integration Demo -这个示例展示了如何使用 AG-UI Protocol 将 Claude Agent SDK é›†ęˆåˆ° CopilotKit 中。 +This example demonstrates how to integrate Claude Agent SDK into CopilotKit using AG-UI Protocol. -## ęž¶ęž„å›¾ +## Architecture Diagram ``` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” @@ -33,22 +33,22 @@ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ``` -## åæ«é€Ÿå¼€å§‹ +## Quick Start -### 1. 启动 Claude Agent SDK ęœåŠ”å™Ø +### 1. Start Claude Agent SDK Server -åœØäø€äøŖē»ˆē«Æäø­ļ¼š +In one terminal: ```bash cd ../../python/examples/server python fastapi_server.py ``` -ęœåŠ”å™Øå°†åœØ `http://localhost:8000/chat` čæč”Œć€‚ +The server will run at `http://localhost:8000/chat`. -### 2. å®‰č£…å¹¶åÆåŠØ CopilotKit å‰ē«Æ +### 2. Install and Start CopilotKit Frontend -åœØå¦äø€äøŖē»ˆē«Æäø­ļ¼š +In another terminal: ```bash cd integrations/claude-agent-sdk/typescript/examples/copilotkit @@ -56,21 +56,21 @@ npm install npm run dev ``` -å‰ē«Æå°†åœØ `http://localhost:3000` čæč”Œć€‚ +The frontend will run at `http://localhost:3000`. -### 3. ę‰“å¼€ęµč§ˆå™Ø +### 3. Open Browser -访问 `http://localhost:3000` ęŸ„ēœ‹ CopilotKit čŠå¤©ē•Œé¢ć€‚ +Visit `http://localhost:3000` to see the CopilotKit chat interface. -## åŠŸčƒ½ē‰¹ę€§ +## Features -- āœ… **ęŒē»­åÆ¹čÆ**: 使用 `ClaudeSDKClient` ē»“ęŠ¤åÆ¹čÆåŽ†å² -- āœ… **å·„å…·ę”ÆęŒ**: Claude åÆä»„č°ƒē”Øå‰ē«Æå·„å…· -- āœ… **ęµå¼å“åŗ”**: é€ščæ‡ Server-Sent Events å®žę—¶ęµå¼ä¼ č¾“ -- āœ… **ä¼ščÆē®”ē†**: č·Øå¤šäøŖčÆ·ę±‚ēš„ęŒä¹…ä¼ščÆ -- āœ… **å®Œę•“åŠŸčƒ½**: ę”ÆęŒäø­ę–­ć€é’©å­ć€č‡Ŗå®šä¹‰å·„å…·ļ¼ˆä½æē”Ø `ClaudeSDKClient` 时) +- āœ… **Persistent Conversations**: Uses `ClaudeSDKClient` to maintain conversation history +- āœ… **Tool Support**: Claude can call frontend tools +- āœ… **Streaming Responses**: Real-time streaming via Server-Sent Events +- āœ… **Session Management**: Persistent sessions across multiple requests +- āœ… **Full Features**: Supports interrupts, hooks, custom tools (when using `ClaudeSDKClient`) -## ē›®å½•ē»“ęž„ +## Directory Structure ``` copilotkit/ @@ -78,54 +78,54 @@ copilotkit/ │ └── app/ │ ā”œā”€ā”€ api/ │ │ └── copilotkit/ -│ │ └── route.ts # CopilotKit čæč”Œę—¶ē«Æē‚¹ -│ ā”œā”€ā”€ layout.tsx # Next.js åøƒå±€ -│ ā”œā”€ā”€ page.tsx # å‰ē«ÆčŠå¤©ē•Œé¢ -│ └── globals.css # å…Øå±€ę ·å¼ -ā”œā”€ā”€ package.json # ä¾čµ–é…ē½® -ā”œā”€ā”€ tsconfig.json # TypeScript é…ē½® -ā”œā”€ā”€ next.config.js # Next.js é…ē½® -ā”œā”€ā”€ tailwind.config.js # Tailwind CSS é…ē½® -ā”œā”€ā”€ postcss.config.js # PostCSS é…ē½® -└── README.md # 详细文攣 +│ │ └── route.ts # CopilotKit runtime endpoint +│ ā”œā”€ā”€ layout.tsx # Next.js layout +│ ā”œā”€ā”€ page.tsx # Frontend chat interface +│ └── globals.css # Global styles +ā”œā”€ā”€ package.json # Dependencies configuration +ā”œā”€ā”€ tsconfig.json # TypeScript configuration +ā”œā”€ā”€ next.config.js # Next.js configuration +ā”œā”€ā”€ tailwind.config.js # Tailwind CSS configuration +ā”œā”€ā”€ postcss.config.js # PostCSS configuration +└── README.md # Detailed documentation ``` -## å·„ä½œåŽŸē† +## How It Works -### 1. å‰ē«Æ (React + CopilotKit) +### 1. Frontend (React + CopilotKit) -`src/app/page.tsx` 使用 CopilotKit ēš„ React ē»„ä»¶ļ¼š -- `CopilotKit`: åŒ…č£…åŗ”ē”Øå¹¶čæžęŽ„åˆ°čæč”Œę—¶ -- `CopilotChat`: ęä¾›čŠå¤© UI -- `useFrontendTool`: 定义 Claude åÆä»„č°ƒē”Øēš„å‰ē«Æå·„å…· +`src/app/page.tsx` uses CopilotKit React components: +- `CopilotKit`: Wraps the app and connects to runtime +- `CopilotChat`: Provides chat UI +- `useFrontendTool`: Defines frontend tools that Claude can call -### 2. API č·Æē”± (Next.js) +### 2. API Route (Next.js) `src/app/api/copilotkit/route.ts`: -- åˆ›å»ŗęŒ‡å‘ Claude Agent SDK ęœåŠ”å™Øēš„ `HttpAgent` (ę„č‡Ŗ `@ag-ui/client`) -- å°†å…¶åŒ…č£…åœØ `CopilotRuntime` äø­ -- 暓露 CopilotKit č°ƒē”Øēš„ POST 端点 +- Creates `HttpAgent` (from `@ag-ui/client`) pointing to Claude Agent SDK server +- Wraps it in `CopilotRuntime` +- Exposes POST endpoint that CopilotKit calls -### 3. åŽē«Æ (Claude Agent SDK) +### 3. Backend (Claude Agent SDK) -Claude Agent SDK ęœåŠ”å™Ø (`../../python/examples/server/fastapi_server.py`): -- 处理 AG-UI Protocol 请求 -- å°†å®ƒä»¬č½¬ę¢äøŗ Claude Agent SDK č°ƒē”Ø -- čæ”å›ž AG-UI Protocol äŗ‹ä»¶ -- ę”ÆęŒ CORS ä»„ä¾æå‰ē«Æé›†ęˆ +Claude Agent SDK server (`../../python/examples/server/fastapi_server.py`): +- Handles AG-UI Protocol requests +- Converts them to Claude Agent SDK calls +- Returns AG-UI Protocol events +- Supports CORS for frontend integration -## ēŽÆå¢ƒå˜é‡ +## Environment Variables -- `CLAUDE_AGENT_URL`: Claude Agent SDK ęœåŠ”å™Øēš„ URL (默认: `http://localhost:8000/chat`) +- `CLAUDE_AGENT_URL`: URL of Claude Agent SDK server (default: `http://localhost:8000/chat`) -## ꕅ障ꎒ除 +## Troubleshooting -1. **čæžęŽ„é”™čÆÆ**: ē”®äæ Claude Agent SDK ęœåŠ”å™ØåœØę­£ē”®ēš„ē«Æå£čæč”Œ -2. **CORS 问题**: FastAPI ęœåŠ”å™ØåŒ…å« CORS äø­é—“ä»¶ć€‚å¦‚ęžœéœ€č¦ę·»åŠ ę›“å¤šęŗļ¼ŒčÆ·ē¼–č¾‘ `fastapi_server.py` -3. **Agent ęœŖę‰¾åˆ°**: ę£€ęŸ„å‰ē«Æēš„ agent ID (`agentic_chat`) ę˜Æå¦äøŽ API č·Æē”±äø­ēš„åŒ¹é… +1. **Connection Error**: Ensure Claude Agent SDK server is running on the correct port +2. **CORS Issues**: FastAPI server includes CORS middleware. Edit `fastapi_server.py` if you need to add more origins +3. **Agent Not Found**: Check if the agent ID (`agentic_chat`) in the frontend matches the one in the API route -## å‚č€ƒę–‡ę”£ +## References -- [CopilotKit 文攣](https://docs.copilotkit.ai/adk/quickstart?path=exiting-agent) -- [AG-UI Protocol 文攣](https://ag-ui-protocol.github.io/ag-ui/) -- [Claude Agent SDK 文攣](https://docs.claude.com/zh-CN/api/agent-sdk/python) +- [CopilotKit Documentation](https://docs.copilotkit.ai/adk/quickstart?path=exiting-agent) +- [AG-UI Protocol Documentation](https://ag-ui-protocol.github.io/ag-ui/) +- [Claude Agent SDK Documentation](https://docs.claude.com/api/agent-sdk/python) diff --git a/integrations/claude-agent-sdk/typescript/examples/direct-api-example.ts b/integrations/claude-agent-sdk/typescript/examples/direct-api-example.ts new file mode 100644 index 000000000..c170cb13e --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/direct-api-example.ts @@ -0,0 +1,87 @@ +/** + * Direct Anthropic API Example + * + * Does not use Agent SDK, directly uses @anthropic-ai/sdk + * This method is compatible with third-party API proxies (e.g., Zhipu) + * + * Environment variables (in .env.local): + * - ANTHROPIC_AUTH_TOKEN: Claude API authentication token + * - ANTHROPIC_BASE_URL: API base URL (optional) + */ + +import dotenv from 'dotenv'; +import { resolve, dirname } from 'path'; +import { fileURLToPath } from 'url'; +import Anthropic from '@anthropic-ai/sdk'; + +// Get current file directory in ESM mode +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Load .env.local environment variables +const envPath1 = resolve(__dirname, '.env.local'); +const envPath2 = resolve(process.cwd(), '.env.local'); + +dotenv.config({ path: envPath1 }); +dotenv.config({ path: envPath2 }); + +// Validate environment variables +if (!process.env.ANTHROPIC_AUTH_TOKEN && !process.env.ANTHROPIC_API_KEY) { + console.error('āŒ Error: ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY not found'); + process.exit(1); +} + +console.log('āœ… Environment variables loaded'); +console.log(' - ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN ? 'Set' : 'Not set'); +console.log(' - ANTHROPIC_BASE_URL:', process.env.ANTHROPIC_BASE_URL || 'Using default'); +console.log(''); + +async function main() { + try { + // Initialize Anthropic client + const client = new Anthropic({ + apiKey: process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY, + baseURL: process.env.ANTHROPIC_BASE_URL, + }); + + console.log('šŸš€ Starting Claude API call...\n'); + console.log('šŸ’¬ AI Response:\n'); + + // Call API (streaming response) + const stream = await client.messages.stream({ + model: 'claude-3-5-sonnet-20241022', + max_tokens: 1024, + messages: [ + { + role: 'user', + content: 'Hello! Please introduce yourself in one sentence.', + }, + ], + }); + + // Listen to streaming events + for await (const event of stream) { + if (event.type === 'content_block_delta') { + if (event.delta.type === 'text_delta') { + process.stdout.write(event.delta.text); + } + } + } + + console.log('\n\nāœ… Conversation completed'); + console.log('šŸŽ‰ Done!\n'); + + } catch (error: any) { + console.error('\nāŒ Error occurred:', error.message); + if (error.status) { + console.error('HTTP Status Code:', error.status); + } + if (error.error) { + console.error('Error details:', JSON.stringify(error.error, null, 2)); + } + process.exit(1); + } +} + +// Run main function +main(); diff --git a/integrations/claude-agent-sdk/typescript/examples/env.example b/integrations/claude-agent-sdk/typescript/examples/env.example new file mode 100644 index 000000000..a7e5a3583 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/env.example @@ -0,0 +1,23 @@ +# Claude API Key (Required) +ANTHROPIC_API_KEY=your_api_key_here + +# Claude CLI Path (Optional, will use default path if not provided) +# CLAUDE_CLI_PATH=/path/to/claude-agent-sdk/cli/claude + +# Server Port (Optional, default is 3000) +# PORT=3000 + +# Application Name (Optional) +# APP_NAME=claude-example + +# System Prompt (Optional) +# SYSTEM_PROMPT=You are a helpful assistant + +# Enable Persistent Sessions (Optional, default is true) +# ENABLE_PERSISTENT_SESSIONS=true + +# Session Timeout (milliseconds) (Optional, default is 30 minutes) +# SESSION_TIMEOUT=1800000 + +# Permission Mode (Optional, allowed values: ask, auto, none, default is ask) +# PERMISSION_MODE=ask diff --git a/integrations/claude-agent-sdk/typescript/examples/package.json b/integrations/claude-agent-sdk/typescript/examples/package.json index db2170b08..52f3608ab 100644 --- a/integrations/claude-agent-sdk/typescript/examples/package.json +++ b/integrations/claude-agent-sdk/typescript/examples/package.json @@ -4,21 +4,27 @@ "private": true, "scripts": { "dev": "tsx src/server.ts", + "simple": "tsx simple-example.ts", + "pure": "tsx pure-sdk-example.ts", + "pure-tools": "tsx pure-sdk-with-tools.ts", + "direct": "tsx direct-api-example.ts", "build": "tsc" }, "dependencies": { "@ag-ui/claude": "workspace:*", "@ag-ui/client": "workspace:*", "@ag-ui/core": "workspace:*", - "express": "^4.18.2", - "cors": "^2.8.5" + "@anthropic-ai/sdk": "^0.68.0", + "cors": "^2.8.5", + "dotenv": "^16.4.7", + "express": "^4.18.2" }, "devDependencies": { - "@types/express": "^4.17.17", "@types/cors": "^2.8.13", + "@types/dotenv": "^8.2.0", + "@types/express": "^4.17.17", "@types/node": "^20.11.19", "tsx": "^4.7.0", "typescript": "^5.3.3" } } - diff --git a/integrations/claude-agent-sdk/typescript/examples/pure-sdk-example.ts b/integrations/claude-agent-sdk/typescript/examples/pure-sdk-example.ts new file mode 100644 index 000000000..1798a4de0 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/pure-sdk-example.ts @@ -0,0 +1,154 @@ +/** + * Pure Claude Agent SDK Example + * + * Directly calls @anthropic-ai/claude-agent-sdk without ag-ui + * + * Environment variables (in .env.local): + * - ANTHROPIC_AUTH_TOKEN: Claude API authentication token + * - ANTHROPIC_BASE_URL: API base URL (optional) + */ + +import dotenv from 'dotenv'; +import { resolve, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +// Get current file directory in ESM mode +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Load .env.local environment variables (try multiple paths) +const envPath1 = resolve(__dirname, '.env.local'); +const envPath2 = resolve(process.cwd(), '.env.local'); + +console.log('Attempting to load environment variables:'); +console.log(' Path 1:', envPath1); +console.log(' Path 2:', envPath2); +console.log(' Current directory:', process.cwd()); +console.log(''); + +dotenv.config({ path: envPath1 }); +dotenv.config({ path: envPath2 }); + +// Validate environment variables +if (!process.env.ANTHROPIC_AUTH_TOKEN && !process.env.ANTHROPIC_API_KEY) { + console.error('āŒ Error: ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY not found'); + console.error('Please set ANTHROPIC_AUTH_TOKEN in .env.local file'); + console.error(''); + console.error('Current environment variables:'); + console.error(' ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN); + console.error(' ANTHROPIC_API_KEY:', process.env.ANTHROPIC_API_KEY); + process.exit(1); +} + +console.log('āœ… Environment variables loaded'); +console.log(' - ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN ? 'Set' : 'Not set'); +console.log(' - ANTHROPIC_BASE_URL:', process.env.ANTHROPIC_BASE_URL || 'Using default'); +console.log(''); + +async function main() { + try { + // Dynamically import Claude Agent SDK + const { query } = await import('@anthropic-ai/claude-agent-sdk'); + + console.log('šŸš€ Starting Claude Agent SDK call...\n'); + + // SDK configuration options + const options: any = { + // SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + // Also automatically reads ANTHROPIC_BASE_URL if set + permissionMode: 'bypassPermissions' as const, // Allowed values: acceptEdits, bypassPermissions, default, plan + verbose: true, // Enable verbose logging + + // Add stderr callback for debugging + stderr: (data: string) => { + console.error('[Claude CLI Debug]:', data); + }, + }; + + // If base URL is set, pass it explicitly (some third-party APIs may require this) + if (process.env.ANTHROPIC_BASE_URL) { + options.baseUrl = process.env.ANTHROPIC_BASE_URL; + console.log(' Using custom Base URL:', options.baseUrl); + } + + // If API Key is set, pass it explicitly + if (process.env.ANTHROPIC_AUTH_TOKEN) { + console.log(' Using AUTH_TOKEN'); + } else if (process.env.ANTHROPIC_API_KEY) { + options.apiKey = process.env.ANTHROPIC_API_KEY; + console.log(' Using API_KEY'); + } + + options.env = process.env; + + console.log(''); + + // Call SDK's query function + const result = query({ + prompt: 'Hello! Please introduce yourself in one sentence.', + options, + }); + + console.log('šŸ’¬ AI Response:\n'); + + // Iterate through response stream + for await (const message of result) { + // Handle different message types + switch (message.type) { + case 'assistant': + // Assistant message - contains text content + if (message.content) { + for (const block of message.content) { + if (block.type === 'text') { + console.log(block.text); + } else if (block.type === 'thinking') { + console.log('šŸ¤” [Thinking]:', block.thinking); + } + } + } + break; + + case 'partial_assistant': + // Streaming assistant message (partial content) + if (message.content) { + for (const block of message.content) { + if (block.type === 'text') { + process.stdout.write(block.text); + } + } + } + break; + + case 'result': + // Final result message + if (message.subtype === 'success') { + console.log('\n\nāœ… Conversation completed'); + } else if (message.subtype === 'error') { + console.error('\n\nāŒ Error:', message.error); + } + break; + + case 'compact_boundary': + // Compact boundary message (used to separate messages) + console.log('\n--- Message Boundary ---'); + break; + + default: + // Other message types + console.log('\n[Message Type]:', message.type); + } + } + + console.log('\nšŸŽ‰ Done!\n'); + + } catch (error: any) { + console.error('\nāŒ Error occurred:', error.message); + if (error.stack) { + console.error('Error stack:', error.stack); + } + process.exit(1); + } +} + +// Run main function +main(); diff --git a/integrations/claude-agent-sdk/typescript/examples/pure-sdk-with-tools.ts b/integrations/claude-agent-sdk/typescript/examples/pure-sdk-with-tools.ts new file mode 100644 index 000000000..a4b2d1c20 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/pure-sdk-with-tools.ts @@ -0,0 +1,164 @@ +/** + * Pure Claude Agent SDK Example - With Tools + * + * Demonstrates how to use tool() and createSdkMcpServer() to define and use tools + * Reference: https://docs.claude.com/docs/agent-sdk/typescript#tool + * + * Environment variables (in .env.local): + * - ANTHROPIC_AUTH_TOKEN: Claude API authentication token + */ + +import dotenv from 'dotenv'; +import { resolve, dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { z } from 'zod'; + +// Get current file directory in ESM mode +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Load .env.local environment variables (try multiple paths) +dotenv.config({ path: resolve(__dirname, '.env.local') }); +dotenv.config({ path: resolve(process.cwd(), '.env.local') }); + +// Validate environment variables +if (!process.env.ANTHROPIC_AUTH_TOKEN && !process.env.ANTHROPIC_API_KEY) { + console.error('āŒ Error: ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY not found'); + process.exit(1); +} + +console.log('āœ… Environment variables loaded\n'); + +async function main() { + try { + // Dynamically import Claude Agent SDK + const { query, tool, createSdkMcpServer } = await import('@anthropic-ai/claude-agent-sdk'); + + console.log('šŸš€ Starting Claude Agent SDK call (with tools)...\n'); + + // Create addition tool using tool() + const addTool = tool( + 'add', + 'Adds two numbers', + { + a: z.number().describe('First number'), + b: z.number().describe('Second number'), + }, + async (args) => { + const result = args.a + args.b; + console.log(`\nšŸ”§ [Tool Execution] add(${args.a}, ${args.b}) = ${result}`); + return { + content: [ + { + type: 'text', + text: `Calculation result: ${args.a} + ${args.b} = ${result}`, + }, + ], + }; + } + ); + + // Create multiplication tool using tool() + const multiplyTool = tool( + 'multiply', + 'Multiplies two numbers', + { + a: z.number().describe('First number'), + b: z.number().describe('Second number'), + }, + async (args) => { + const result = args.a * args.b; + console.log(`\nšŸ”§ [Tool Execution] multiply(${args.a}, ${args.b}) = ${result}`); + return { + content: [ + { + type: 'text', + text: `Calculation result: ${args.a} Ɨ ${args.b} = ${result}`, + }, + ], + }; + } + ); + + // Create MCP server using createSdkMcpServer() + const calculatorServer = createSdkMcpServer({ + name: 'calculator', + version: '1.0.0', + tools: [addTool, multiplyTool], + }); + + // SDK configuration options + const options: any = { + permissionMode: 'bypassPermissions' as const, + mcpServers: { + calculator: calculatorServer, // Use the created MCP server + }, + verbose: true, + + // Add stderr callback for debugging + stderr: (data: string) => { + console.error('[Claude CLI Debug]:', data); + }, + }; + + // Call SDK + const result = query({ + prompt: 'Please help me calculate: (15 + 27) Ɨ 2', + options, + }); + + console.log('šŸ’¬ AI Response:\n'); + + // Iterate through response stream + for await (const message of result) { + switch (message.type) { + case 'assistant': + // SDKAssistantMessage contains message.message.content + if (message.message?.content) { + for (const block of message.message.content) { + if (block.type === 'text') { + console.log(block.text); + } else if (block.type === 'tool_use') { + console.log(`\nšŸ”§ [Tool Call] ${block.name}`, block.input); + } + } + } + break; + + case 'stream_event': + // Streaming events + if (message.event?.type === 'content_block_delta') { + const delta = (message.event as any).delta; + if (delta?.type === 'text_delta') { + process.stdout.write(delta.text); + } + } + break; + + case 'result': + if (message.subtype === 'success') { + console.log('\n\nāœ… Conversation completed'); + } else { + // error_during_execution | error_max_turns | error_max_budget_usd + console.error('\n\nāŒ Error:', message.subtype); + if ('errors' in message && message.errors) { + console.error('Detailed errors:', message.errors); + } + } + break; + } + } + + console.log('\nšŸŽ‰ Done!\n'); + + } catch (error: any) { + console.error('\nāŒ Error occurred:', error.message); + if (error.stack) { + console.error('Error stack:', error.stack); + } + process.exit(1); + } +} + +// Run main function +main(); diff --git a/integrations/claude-agent-sdk/typescript/examples/simple-test-server.js b/integrations/claude-agent-sdk/typescript/examples/simple-test-server.js new file mode 100644 index 000000000..2c17efdb0 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/simple-test-server.js @@ -0,0 +1,158 @@ +/** + * Simplified test server - for quick testing of Claude Agent SDK TypeScript integration + * Does not depend on complex workspace dependencies + */ + +const http = require('http'); +const { ClaudeAgent } = require('../dist/index.js'); + +// Get configuration from environment variables +require('dotenv').config({ path: '.env.local' }); +require('dotenv').config({ path: '.env' }); + +const PORT = process.env.PORT || 3000; +const API_KEY = process.env.ANTHROPIC_API_KEY; + +if (!API_KEY) { + console.error('āŒ Error: ANTHROPIC_API_KEY environment variable not set'); + console.error('Please set ANTHROPIC_API_KEY in .env.local or .env file'); + process.exit(1); +} + +// Initialize Claude Agent +const agent = new ClaudeAgent({ + apiKey: API_KEY, + enablePersistentSessions: true, + sessionTimeout: 30 * 60 * 1000, // 30 minutes + permissionMode: 'ask', + claudeOptions: { + systemPrompt: process.env.SYSTEM_PROMPT || 'You are a helpful assistant', + appName: process.env.APP_NAME || 'simple-test-server', + }, +}); + +console.log('āœ“ Claude Agent initialized successfully'); + +// Create HTTP server +const server = http.createServer(async (req, res) => { + // CORS headers + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + + // Handle OPTIONS preflight request + if (req.method === 'OPTIONS') { + res.writeHead(200); + res.end(); + return; + } + + // Health check + if (req.url === '/health' && req.method === 'GET') { + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ status: 'ok', timestamp: new Date().toISOString() })); + return; + } + + // Chat endpoint + if (req.url === '/api/chat' && req.method === 'POST') { + let body = ''; + + req.on('data', chunk => { + body += chunk.toString(); + }); + + req.on('end', async () => { + try { + const input = JSON.parse(body); + + console.log('šŸ“Ø Received request:', { + agentId: input.agentId, + threadId: input.threadId, + messageCount: input.messages?.length || 0 + }); + + // Set SSE response headers + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + }); + + // Run agent and stream results + const subscription = agent.run(input).subscribe({ + next: (event) => { + // Send SSE event + const eventData = JSON.stringify(event); + res.write(`data: ${eventData}\n\n`); + + // Logging + if (event.type === 'text_message_content') { + process.stdout.write(event.text || ''); + } else if (event.type === 'run_started') { + console.log('\nšŸš€ Execution started, runId:', event.runId); + } else if (event.type === 'run_finished') { + console.log('\nāœ“ Execution completed'); + } + }, + error: (error) => { + console.error('\nāŒ Error:', error.message); + const errorEvent = JSON.stringify({ + type: 'error', + error: error.message + }); + res.write(`data: ${errorEvent}\n\n`); + res.end(); + }, + complete: () => { + res.end(); + }, + }); + + // Handle client disconnect + req.on('close', () => { + subscription.unsubscribe(); + console.log('šŸ”Œ Client disconnected'); + }); + + } catch (error) { + console.error('āŒ Request processing error:', error.message); + res.writeHead(500, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: error.message })); + } + }); + return; + } + + // 404 + res.writeHead(404, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Not Found' })); +}); + +// Start server +server.listen(PORT, () => { + console.log('\nšŸŽ‰ Simplified test server started!'); + console.log(`šŸ“ Address: http://localhost:${PORT}`); + console.log(`šŸ„ Health check: http://localhost:${PORT}/health`); + console.log(`šŸ’¬ Chat endpoint: http://localhost:${PORT}/api/chat`); + console.log('\nPress Ctrl+C to stop the server\n'); +}); + +// Graceful shutdown +process.on('SIGINT', async () => { + console.log('\n\nšŸ‘‹ Shutting down server...'); + await agent.cleanup(); + server.close(() => { + console.log('āœ“ Server closed'); + process.exit(0); + }); +}); + +process.on('SIGTERM', async () => { + console.log('\n\nšŸ‘‹ Shutting down server...'); + await agent.cleanup(); + server.close(() => { + console.log('āœ“ Server closed'); + process.exit(0); + }); +}); diff --git a/integrations/claude-agent-sdk/typescript/examples/src/server.ts b/integrations/claude-agent-sdk/typescript/examples/src/server.ts index 0b6f35253..2f0aa86ab 100644 --- a/integrations/claude-agent-sdk/typescript/examples/src/server.ts +++ b/integrations/claude-agent-sdk/typescript/examples/src/server.ts @@ -2,33 +2,122 @@ * Example Express server using Claude Agent SDK */ -import express from 'express'; +import dotenv from 'dotenv'; +import { resolve } from 'path'; +import express, { Request, Response } from 'express'; import cors from 'cors'; import { ClaudeAgent } from '@ag-ui/claude'; import type { RunAgentInput } from '@ag-ui/client'; +// Load environment variables from .env.local or .env +// Try multiple locations in order of priority +dotenv.config({ path: resolve(__dirname, '../.env.local') }); // examples/.env.local (highest priority) +dotenv.config({ path: resolve(__dirname, '../../.env.local') }); // typescript/.env.local +dotenv.config({ path: resolve(__dirname, '../.env') }); // examples/.env +dotenv.config({ path: resolve(__dirname, '../../.env') }); // typescript/.env + const app = express(); -const port = process.env.PORT || 3000; +const port = process.env.PORT || 8000; // Middleware app.use(cors()); app.use(express.json()); +// Validate and log environment variables +console.log('=== Environment Variables ==='); +console.log('ANTHROPIC_API_KEY:', process.env.ANTHROPIC_API_KEY ? 'SET (' + process.env.ANTHROPIC_API_KEY.substring(0, 10) + '...)' : 'NOT SET'); +console.log('ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN ? 'SET (' + process.env.ANTHROPIC_AUTH_TOKEN.substring(0, 10) + '...)' : 'NOT SET'); +console.log('ANTHROPIC_BASE_URL:', process.env.ANTHROPIC_BASE_URL || 'NOT SET (will use default)'); +console.log('PORT:', process.env.PORT || '8000 (default)'); +console.log('PERMISSION_MODE:', process.env.PERMISSION_MODE || 'bypassPermissions (default)'); +console.log('VERBOSE:', process.env.VERBOSE || 'false (default)'); +console.log('=============================\n'); + +// SDK will automatically read ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment +// Do NOT pass apiKey in config - let SDK handle it automatically +if (!process.env.ANTHROPIC_AUTH_TOKEN && !process.env.ANTHROPIC_API_KEY) { + console.error('āŒ ERROR: Neither ANTHROPIC_API_KEY nor ANTHROPIC_AUTH_TOKEN found in environment variables.'); + console.error('SDK will not be able to authenticate. Please set one in .env.local or .env file.'); + process.exit(1); +} + // Initialize Claude Agent +// Do NOT pass apiKey or baseUrl - SDK reads from environment variables automatically const agent = new ClaudeAgent({ - apiKey: process.env.ANTHROPIC_API_KEY, - enablePersistentSessions: true, - sessionTimeout: 30 * 60 * 1000, // 30 minutes - permissionMode: 'ask', // or 'auto' or 'none' + enablePersistentSessions: process.env.ENABLE_PERSISTENT_SESSIONS !== 'false', + sessionTimeout: process.env.SESSION_TIMEOUT + ? parseInt(process.env.SESSION_TIMEOUT) + : 30 * 60 * 1000, // 30 minutes + // Valid permission modes: 'default', 'acceptEdits', 'bypassPermissions', 'plan' + permissionMode: (process.env.PERMISSION_MODE as any) || 'bypassPermissions', + // Add stderr callback for debugging - CRITICAL for capturing CLI errors + stderr: (data: string) => { + // Log all stderr output from Claude CLI + console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); + console.error('[Claude CLI stderr]:', data); + console.error('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); + + // Also log to file if needed for debugging + if (process.env.LOG_TO_FILE === 'true') { + const fs = require('fs'); + const timestamp = new Date().toISOString(); + fs.appendFileSync('/tmp/claude-cli-stderr.log', `[${timestamp}] ${data}\n`); + } + }, + // Enable verbose logging + verbose: process.env.VERBOSE === 'true', }); +console.log('āœ“ Claude Agent initialized with stderr callback for error logging'); + // Health check endpoint -app.get('/health', (req, res) => { +app.get('/health', (req: Request, res: Response) => { res.json({ status: 'ok' }); }); +// Chat endpoint for CopilotKit compatibility +app.post('/chat', async (req: Request, res: Response) => { + try { + const input: RunAgentInput = req.body; + + // Validate input + if (!input.messages || input.messages.length === 0) { + return res.status(400).json({ error: 'Messages are required' }); + } + + // Set headers for Server-Sent Events + res.setHeader('Content-Type', 'text/event-stream'); + res.setHeader('Cache-Control', 'no-cache'); + res.setHeader('Connection', 'keep-alive'); + + // Run the agent and stream events + agent.run(input).subscribe({ + next: (event: any) => { + // Send event as SSE + res.write(`data: ${JSON.stringify(event)}\n\n`); + }, + error: (error: any) => { + console.error('Agent error:', error); + res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`); + res.end(); + }, + complete: () => { + res.end(); + }, + }); + + // Handle client disconnect + req.on('close', () => { + console.log('Client disconnected'); + }); + } catch (error: any) { + console.error('Request error:', error); + res.status(500).json({ error: error.message }); + } +}); + // Main agent endpoint -app.post('/api/run-agent', async (req, res) => { +app.post('/api/run-agent', async (req: Request, res: Response) => { try { const input: RunAgentInput = req.body; @@ -44,11 +133,11 @@ app.post('/api/run-agent', async (req, res) => { // Run the agent and stream events agent.run(input).subscribe({ - next: (event) => { + next: (event: any) => { // Send event as SSE res.write(`data: ${JSON.stringify(event)}\n\n`); }, - error: (error) => { + error: (error: any) => { console.error('Agent error:', error); res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`); res.end(); @@ -137,7 +226,7 @@ const exampleTools = [ ]; // Example endpoint with tools -app.post('/api/run-agent-with-tools', async (req, res) => { +app.post('/api/run-agent-with-tools', async (req: Request, res: Response) => { try { const input: RunAgentInput = { ...req.body, @@ -152,10 +241,10 @@ app.post('/api/run-agent-with-tools', async (req, res) => { res.setHeader('Connection', 'keep-alive'); agent.run(input).subscribe({ - next: (event) => { + next: (event: any) => { res.write(`data: ${JSON.stringify(event)}\n\n`); }, - error: (error) => { + error: (error: any) => { console.error('Agent error:', error); res.write(`data: ${JSON.stringify({ type: 'error', error: error.message })}\n\n`); res.end(); @@ -175,7 +264,7 @@ app.post('/api/run-agent-with-tools', async (req, res) => { }); // Cleanup endpoint -app.post('/api/cleanup', async (req, res) => { +app.post('/api/cleanup', async (req: Request, res: Response) => { try { await agent.cleanup(); res.json({ message: 'Cleanup successful' }); @@ -188,6 +277,7 @@ app.post('/api/cleanup', async (req, res) => { // Start server app.listen(port, () => { console.log(`Claude Agent server listening on port ${port}`); + console.log(`Chat endpoint: http://localhost:${port}/chat`); console.log(`API endpoint: http://localhost:${port}/api/run-agent`); console.log(`With tools: http://localhost:${port}/api/run-agent-with-tools`); }); diff --git a/integrations/claude-agent-sdk/typescript/examples/test-client.sh b/integrations/claude-agent-sdk/typescript/examples/test-client.sh new file mode 100644 index 000000000..9c1fa247a --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/test-client.sh @@ -0,0 +1,160 @@ +#!/bin/bash + +# Simple test client script +# For testing Claude Agent SDK TypeScript server + +BASE_URL="http://localhost:3000" + +# Color definitions +GREEN='\033[0;32m' +BLUE='\033[0;34m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo -e "${BLUE} Claude Agent SDK TypeScript - Test Client${NC}" +echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo "" + +# Test 1: Health check +echo -e "${YELLOW}[Test 1]${NC} Health check..." +HEALTH_RESPONSE=$(curl -s "$BASE_URL/health") +if echo "$HEALTH_RESPONSE" | grep -q "ok"; then + echo -e "${GREEN}āœ“${NC} Server health status OK" + echo " Response: $HEALTH_RESPONSE" +else + echo -e "${RED}āœ—${NC} Health check failed" + echo " Response: $HEALTH_RESPONSE" + exit 1 +fi +echo "" + +# Test 2: Simple conversation +echo -e "${YELLOW}[Test 2]${NC} Simple conversation test..." +echo -e "${BLUE}Sending message:${NC} 'Hello, please introduce yourself'" +echo "" + +curl -N -X POST "$BASE_URL/api/chat" \ + -H "Content-Type: application/json" \ + -d '{ + "agentId": "test_agent", + "threadId": "test_thread_1", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "Hello, please introduce yourself in one sentence" + } + ], + "context": {} + }' 2>/dev/null | while IFS= read -r line; do + if [[ $line == data:* ]]; then + # Extract JSON after data: + json_data="${line#data: }" + # Try to parse and format output + event_type=$(echo "$json_data" | grep -o '"type":"[^"]*"' | cut -d'"' -f4) + + case $event_type in + "run_started") + echo -e "\n${GREEN}ā–¶ Execution started${NC}" + ;; + "text_message_content") + text=$(echo "$json_data" | grep -o '"text":"[^"]*"' | cut -d'"' -f4 | sed 's/\\n/\n/g') + echo -n "$text" + ;; + "run_finished") + echo -e "\n${GREEN}āœ“ Execution completed${NC}" + ;; + "error") + error=$(echo "$json_data" | grep -o '"error":"[^"]*"' | cut -d'"' -f4) + echo -e "\n${RED}āœ— Error: $error${NC}" + ;; + esac + fi +done + +echo "" +echo "" + +# Test 3: Multi-turn conversation +echo -e "${YELLOW}[Test 3]${NC} Multi-turn conversation test..." +echo -e "${BLUE}Round 1:${NC} 'My name is Zhang San'" +echo "" + +curl -N -X POST "$BASE_URL/api/chat" \ + -H "Content-Type: application/json" \ + -d '{ + "agentId": "test_agent", + "threadId": "test_thread_2", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "My name is Zhang San" + } + ], + "context": {} + }' 2>/dev/null | while IFS= read -r line; do + if [[ $line == data:* ]]; then + json_data="${line#data: }" + event_type=$(echo "$json_data" | grep -o '"type":"[^"]*"' | cut -d'"' -f4) + + if [[ $event_type == "text_message_content" ]]; then + text=$(echo "$json_data" | grep -o '"text":"[^"]*"' | cut -d'"' -f4) + echo -n "$text" + elif [[ $event_type == "run_finished" ]]; then + echo "" + fi + fi +done + +echo "" +echo "" +sleep 1 + +echo -e "${BLUE}Round 2:${NC} 'Do you remember my name?'" +echo "" + +curl -N -X POST "$BASE_URL/api/chat" \ + -H "Content-Type: application/json" \ + -d '{ + "agentId": "test_agent", + "threadId": "test_thread_2", + "messages": [ + { + "id": "msg_1", + "role": "user", + "content": "My name is Zhang San" + }, + { + "id": "msg_2", + "role": "assistant", + "content": "Hello Zhang San! Nice to meet you." + }, + { + "id": "msg_3", + "role": "user", + "content": "Do you remember my name?" + } + ], + "context": {} + }' 2>/dev/null | while IFS= read -r line; do + if [[ $line == data:* ]]; then + json_data="${line#data: }" + event_type=$(echo "$json_data" | grep -o '"type":"[^"]*"' | cut -d'"' -f4) + + if [[ $event_type == "text_message_content" ]]; then + text=$(echo "$json_data" | grep -o '"text":"[^"]*"' | cut -d'"' -f4) + echo -n "$text" + elif [[ $event_type == "run_finished" ]]; then + echo "" + fi + fi +done + +echo "" +echo "" +echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" +echo -e "${GREEN}āœ“ All tests completed!${NC}" +echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}" diff --git a/integrations/claude-agent-sdk/typescript/examples/tsconfig.json b/integrations/claude-agent-sdk/typescript/examples/tsconfig.json new file mode 100644 index 000000000..ab4b79f19 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "types": ["node"] + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} + diff --git a/integrations/claude-agent-sdk/typescript/jest.config.js b/integrations/claude-agent-sdk/typescript/jest.config.js index 4030c5af7..247c74502 100644 --- a/integrations/claude-agent-sdk/typescript/jest.config.js +++ b/integrations/claude-agent-sdk/typescript/jest.config.js @@ -1,10 +1,13 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', - roots: ['/__tests__'], + roots: ['/__tests__', '/__mocks__'], testMatch: ['**/__tests__/**/*.test.ts'], + setupFilesAfterEnv: ['/__tests__/setup.ts'], moduleNameMapper: { - '^@/(.*)$': '/src/$1', + '^@ag-ui/client$': '/__mocks__/@ag-ui/client.ts', + '^@ag-ui/core$': '/__mocks__/@ag-ui/core.ts', + '^@anthropic-ai/claude-agent-sdk$': '/__mocks__/@anthropic-ai/claude-agent-sdk.ts', }, collectCoverageFrom: [ 'src/**/*.ts', @@ -13,10 +16,10 @@ module.exports = { ], coverageThreshold: { global: { - branches: 70, - functions: 70, - lines: 70, - statements: 70, + branches: 40, + functions: 40, + lines: 40, + statements: 40, }, }, }; diff --git a/integrations/claude-agent-sdk/typescript/src/agent.ts b/integrations/claude-agent-sdk/typescript/src/agent.ts index 31d7777be..753e48c72 100644 --- a/integrations/claude-agent-sdk/typescript/src/agent.ts +++ b/integrations/claude-agent-sdk/typescript/src/agent.ts @@ -41,19 +41,42 @@ export class ClaudeAgent extends AbstractAgent { private baseUrl?: string; private sessionTimeout: number; private enablePersistentSessions: boolean; - private permissionMode: 'ask' | 'auto' | 'none'; + private permissionMode: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'; + private stderr?: (data: string) => void; + private verbose?: boolean; constructor(config: ClaudeAgentConfig) { super(config); - this.apiKey = config.apiKey || process.env.ANTHROPIC_API_KEY; - this.baseUrl = config.baseUrl || process.env.ANTHROPIC_BASE_URL; + // SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + // Only set these if explicitly provided in config (optional) + this.apiKey = config.apiKey; + this.baseUrl = config.baseUrl; this.sessionTimeout = config.sessionTimeout || 30 * 60 * 1000; // 30 minutes this.enablePersistentSessions = config.enablePersistentSessions !== false; - this.permissionMode = config.permissionMode || 'ask'; + // Map legacy permission modes to new SDK values for backward compatibility + this.permissionMode = this.mapPermissionMode(config.permissionMode || 'bypassPermissions'); + this.stderr = config.stderr; + this.verbose = config.verbose; this.sessionManager = SessionManager.getInstance(this.sessionTimeout); this.executionStateManager = new ExecutionStateManager(); } + /** + * Map legacy permission modes to new SDK values for backward compatibility + */ + private mapPermissionMode(mode?: string): 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' { + const modeMap: Record = { + 'ask': 'default', + 'auto': 'bypassPermissions', + 'none': 'bypassPermissions', + 'default': 'default', + 'acceptEdits': 'acceptEdits', + 'bypassPermissions': 'bypassPermissions', + 'plan': 'plan', + }; + return modeMap[mode || 'bypassPermissions'] || 'bypassPermissions'; + } + /** * Run the agent with the given input */ @@ -82,13 +105,14 @@ export class ClaudeAgent extends AbstractAgent { // Emit run started event const runStartedEvent: RunStartedEvent = { type: EventType.RUN_STARTED, + threadId: sessionId, runId, }; subscriber.next(runStartedEvent); execution.addEvent(runStartedEvent); // Get or create session - const session = this.sessionManager.getSession(sessionId, input.agentId); + const session = this.sessionManager.getSession(sessionId, 'default'); // Get unseen messages const unseenMessages = this.sessionManager.getUnseenMessages( @@ -100,10 +124,10 @@ export class ClaudeAgent extends AbstractAgent { const isToolResult = isToolResultSubmission(input.messages || []); // Prepare tools - const tools = input.context?.tools || []; + const tools = input.tools || []; // Prepare options for Claude SDK - const options = this.prepareClaudeOptions(tools); + const options = await this.prepareClaudeOptions(tools); // Extract prompt from messages const prompt = convertAgUiMessagesToPrompt(unseenMessages); @@ -111,8 +135,7 @@ export class ClaudeAgent extends AbstractAgent { // Emit step started event const stepStartedEvent: StepStartedEvent = { type: EventType.STEP_STARTED, - runId, - stepId: `step_${runId}_1`, + stepName: `step_${runId}_1`, }; subscriber.next(stepStartedEvent); execution.addEvent(stepStartedEvent); @@ -123,6 +146,7 @@ export class ClaudeAgent extends AbstractAgent { options, session, runId, + sessionId, subscriber, execution ); @@ -133,8 +157,7 @@ export class ClaudeAgent extends AbstractAgent { // Emit step finished event const stepFinishedEvent: StepFinishedEvent = { type: EventType.STEP_FINISHED, - runId, - stepId: `step_${runId}_1`, + stepName: `step_${runId}_1`, }; subscriber.next(stepFinishedEvent); execution.addEvent(stepFinishedEvent); @@ -142,6 +165,7 @@ export class ClaudeAgent extends AbstractAgent { // Emit run finished event const runFinishedEvent: RunFinishedEvent = { type: EventType.RUN_FINISHED, + threadId: sessionId, runId, }; subscriber.next(runFinishedEvent); @@ -154,8 +178,7 @@ export class ClaudeAgent extends AbstractAgent { // Emit run error event const runErrorEvent: RunErrorEvent = { type: EventType.RUN_ERROR, - runId, - error: formatErrorMessage(error), + message: formatErrorMessage(error), }; subscriber.next(runErrorEvent); execution.addEvent(runErrorEvent); @@ -170,17 +193,43 @@ export class ClaudeAgent extends AbstractAgent { /** * Prepare Claude SDK options + * SDK automatically reads ANTHROPIC_AUTH_TOKEN or ANTHROPIC_API_KEY from environment + * But baseUrl needs to be explicitly passed for third-party APIs */ - private prepareClaudeOptions(tools: any[]): Options { + private async prepareClaudeOptions(tools: any[]): Promise { + // Get baseUrl from config or environment + const baseUrl = this.baseUrl || process.env.ANTHROPIC_BASE_URL; + const apiKey = this.apiKey || process.env.ANTHROPIC_AUTH_TOKEN || process.env.ANTHROPIC_API_KEY; + + // Debug logging + console.log('[Claude Agent] Preparing SDK options:', { + hasApiKey: !!apiKey, + hasBaseUrl: !!baseUrl, + baseUrl: baseUrl || 'not set', + permissionMode: this.permissionMode, + hasStderr: !!this.stderr, + verbose: this.verbose, + }); + const options: Options = { - apiKey: this.apiKey, - baseUrl: this.baseUrl, permissionMode: this.permissionMode, + // Add stderr callback for debugging - CRITICAL for error logging + ...(this.stderr && { stderr: this.stderr }), + // Add verbose flag for detailed logging + ...(this.verbose !== undefined && { verbose: this.verbose }), + env: process.env }; + + // Verify stderr callback is set + if (this.stderr) { + console.log('[Claude Agent] āœ“ stderr callback is configured for error logging'); + } else { + console.warn('[Claude Agent] āš ļø stderr callback not configured - CLI errors may not be visible'); + } // Add tools if provided if (tools && tools.length > 0) { - const mcpServer = ToolAdapter.createMcpServerForTools(tools); + const mcpServer = await ToolAdapter.createMcpServerForTools(tools); options.mcpServers = { ag_ui_tools: mcpServer, }; @@ -194,41 +243,34 @@ export class ClaudeAgent extends AbstractAgent { /** * Call Claude SDK + * Note: Currently only stateless mode is supported via query() function */ private async callClaudeSDK( prompt: string, options: Options, session: any, runId: string, + sessionId: string, subscriber: Subscriber, execution: ExecutionState ): Promise { - const eventTranslator = new EventTranslator(runId); - - if (this.enablePersistentSessions) { - // Persistent session mode - await this.callClaudeSDKPersistent( - prompt, - options, - session, - eventTranslator, - subscriber, - execution - ); - } else { - // Stateless mode - await this.callClaudeSDKStateless( - prompt, - options, - eventTranslator, - subscriber, - execution - ); - } + const eventTranslator = new EventTranslator(runId, sessionId); + + // The current @anthropic-ai/claude-agent-sdk only supports stateless mode + // via the query() function. We use stateless mode for both cases. + await this.callClaudeSDKStateless( + prompt, + options, + eventTranslator, + subscriber, + execution + ); } /** * Call Claude SDK in persistent session mode + * Note: The current SDK only supports stateless mode via query() function + * This method falls back to stateless mode */ private async callClaudeSDKPersistent( prompt: string, @@ -238,31 +280,10 @@ export class ClaudeAgent extends AbstractAgent { subscriber: Subscriber, execution: ExecutionState ): Promise { - // Get or create Claude SDK client - let client = this.sessionManager.getClient(session.id); - - if (!client) { - // Import Claude SDK dynamically - const { ClaudeSDKClient } = await this.importClaudeSDK(); - client = new ClaudeSDKClient(options); - this.sessionManager.setClient(session.id, client); - } - - // Send query - await client.query(prompt); - - // Receive and process responses - for await (const message of client.receiveResponse()) { - if (execution.isAborted()) { - break; - } - - const events = eventTranslator.translateMessage(message); - for (const event of events) { - subscriber.next(event); - execution.addEvent(event); - } - } + // The current @anthropic-ai/claude-agent-sdk only supports stateless mode + // via the query() function. For persistent sessions, we use query() + // but maintain session state in our SessionManager + await this.callClaudeSDKStateless(prompt, options, eventTranslator, subscriber, execution); } /** @@ -275,23 +296,78 @@ export class ClaudeAgent extends AbstractAgent { subscriber: Subscriber, execution: ExecutionState ): Promise { - // Import Claude SDK dynamically - const { query } = await this.importClaudeSDK(); - - // Call query function - const queryResult = query({ prompt, options }); + try { + // Log environment variables for debugging + console.log('[Claude Agent] Environment check:'); + console.log(' ANTHROPIC_API_KEY:', process.env.ANTHROPIC_API_KEY ? 'SET' : 'NOT SET'); + console.log(' ANTHROPIC_AUTH_TOKEN:', process.env.ANTHROPIC_AUTH_TOKEN ? 'SET' : 'NOT SET'); + console.log(' ANTHROPIC_BASE_URL:', process.env.ANTHROPIC_BASE_URL || 'NOT SET (using default)'); + console.log('[Claude Agent] Options passed to SDK:', { + hasApiKey: !!options.apiKey, + hasBaseUrl: !!options.baseUrl, + permissionMode: options.permissionMode, + hasMcpServers: !!options.mcpServers, + }); - // Process responses - for await (const message of queryResult) { - if (execution.isAborted()) { - break; + // Import Claude SDK dynamically + const { query } = await this.importClaudeSDK(); + + console.log('[Claude Agent] Calling SDK query()...'); + + // Call query function + // SDK will automatically read API key from environment variables (ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN) + // if not provided in options.apiKey + const queryResult = query({ prompt, options }); + + // Process responses + for await (const message of queryResult) { + console.log('[Claude Agent] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); + console.log('[Claude Agent] Received message type:', message?.type || 'unknown'); + console.log('[Claude Agent] Full message:', JSON.stringify(message, null, 2)); + + if (execution.isAborted()) { + console.log('[Claude Agent] Execution aborted by user'); + break; + } + + const events = eventTranslator.translateMessage(message); + console.log('[Claude Agent] Translated events count:', events.length); + for (const event of events) { + console.log('[Claude Agent] Sending event:', JSON.stringify(event, null, 2)); + subscriber.next(event); + execution.addEvent(event); + } + console.log('[Claude Agent] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'); } - - const events = eventTranslator.translateMessage(message); - for (const event of events) { - subscriber.next(event); - execution.addEvent(event); + + console.log('[Claude Agent] Query completed successfully'); + } catch (error: any) { + // Log detailed error information + console.error('[Claude Agent] ERROR Details:'); + console.error(' Message:', error.message); + console.error(' Stack:', error.stack); + console.error(' Error object:', JSON.stringify(error, Object.getOwnPropertyNames(error), 2)); + + // Handle Claude Code process errors + if (error.message && error.message.includes('exited with code')) { + throw new Error( + `Claude Code process failed. Please ensure:\n` + + `1. Claude CLI is installed and accessible (run: claude --version)\n` + + `2. ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set correctly in environment variables\n` + + `3. You have proper permissions to run Claude Code\n` + + `4. If using ANTHROPIC_BASE_URL, ensure it supports Claude Code protocol\n` + + `\nOriginal error: ${error.message}\n` + + `Error stack: ${error.stack || 'No stack trace'}` + ); + } + // Handle API key errors from SDK + if (error.message && (error.message.includes('API key') || error.message.includes('auth'))) { + throw new Error( + `API key error: ${error.message}\n` + + `Please ensure ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set in environment variables.` + ); } + throw error; } } diff --git a/integrations/claude-agent-sdk/typescript/src/event-translator.ts b/integrations/claude-agent-sdk/typescript/src/event-translator.ts index c1a2fc899..368f02f22 100644 --- a/integrations/claude-agent-sdk/typescript/src/event-translator.ts +++ b/integrations/claude-agent-sdk/typescript/src/event-translator.ts @@ -10,14 +10,11 @@ import { ToolCallArgsEvent, ToolCallEndEvent, ToolCallResultEvent, - RunFinishedEvent, - RunErrorEvent, EventType, } from '@ag-ui/client'; import type { SDKMessage, SDKAssistantMessage, - SDKResultMessage, ContentBlock, TextBlock, ToolUseBlock, @@ -25,8 +22,6 @@ import type { ProcessedEvents, } from './types'; import { - isAssistantMessage, - isResultMessage, hasContentProperty, isTextBlock, isToolUseBlock, @@ -35,27 +30,34 @@ import { /** * EventTranslator converts Claude SDK messages to AG-UI protocol events + * + * NOTE: This translator only handles SDK message translation. + * Run lifecycle events (RUN_STARTED, RUN_FINISHED, etc.) and step events + * are handled by ClaudeAgent. */ export class EventTranslator { private messageIdCounter = 0; private currentMessageId: string | null = null; private runId: string; + private threadId: string; - constructor(runId: string) { + constructor(runId: string, threadId: string) { this.runId = runId; + this.threadId = threadId; } /** * Translate a Claude SDK message to AG-UI events + * NOTE: Does not emit RUN_STARTED, RUN_FINISHED, or STEP events - those are handled by ClaudeAgent */ translateMessage(message: SDKMessage): ProcessedEvents[] { const events: ProcessedEvents[] = []; if (hasContentProperty(message)) { events.push(...this.translateAssistantMessage(message as SDKAssistantMessage)); - } else if (isResultMessage(message)) { - events.push(...this.translateResultMessage(message)); } + // Note: ResultMessage (success/error) is ignored here + // Run completion is handled by ClaudeAgent, not EventTranslator return events; } @@ -66,7 +68,10 @@ export class EventTranslator { private translateAssistantMessage(message: SDKAssistantMessage): ProcessedEvents[] { const events: ProcessedEvents[] = []; - for (const block of message.content) { + // Content is in message.message.content for SDKAssistantMessage + const content = message.message?.content || []; + + for (const block of content) { if (isTextBlock(block)) { events.push(...this.translateTextBlock(block)); } else if (isToolUseBlock(block)) { @@ -81,6 +86,7 @@ export class EventTranslator { /** * Translate a TextBlock to text message events + * NOTE: Step events are handled by ClaudeAgent, not here */ private translateTextBlock(block: TextBlock): ProcessedEvents[] { const events: ProcessedEvents[] = []; @@ -90,14 +96,18 @@ export class EventTranslator { events.push({ type: EventType.TEXT_MESSAGE_START, messageId, + role: 'assistant', }); - // Content event - events.push({ - type: EventType.TEXT_MESSAGE_CONTENT, - messageId, - content: block.text, - }); + // Content event - split text into delta chunks + const text = block.text; + if (text.length > 0) { + events.push({ + type: EventType.TEXT_MESSAGE_CONTENT, + messageId, + delta: text, + }); + } // End event events.push({ @@ -110,6 +120,7 @@ export class EventTranslator { /** * Translate a ToolUseBlock to tool call events + * NOTE: Step events are handled by ClaudeAgent, not here */ private translateToolUseBlock(block: ToolUseBlock): ProcessedEvents[] { const events: ProcessedEvents[] = []; @@ -119,15 +130,18 @@ export class EventTranslator { events.push({ type: EventType.TOOL_CALL_START, toolCallId, - toolName: block.name, + toolCallName: block.name, }); // Args event - send args as JSON string - events.push({ - type: EventType.TOOL_CALL_ARGS, - toolCallId, - args: JSON.stringify(block.input), - }); + const argsJson = JSON.stringify(block.input); + if (argsJson.length > 0) { + events.push({ + type: EventType.TOOL_CALL_ARGS, + toolCallId, + delta: argsJson, + }); + } // End event events.push({ @@ -162,38 +176,18 @@ export class EventTranslator { resultContent = JSON.stringify(block.content); } + const messageId = this.generateMessageId(); events.push({ type: EventType.TOOL_CALL_RESULT, toolCallId: block.tool_use_id, - result: resultContent, - isError: block.is_error || false, + messageId, + content: resultContent, + ...(block.is_error && { role: 'tool' as const }), }); return events; } - /** - * Translate a ResultMessage to run finished or error event - */ - private translateResultMessage(message: SDKResultMessage): ProcessedEvents[] { - const events: ProcessedEvents[] = []; - - if (message.subtype === 'success') { - events.push({ - type: EventType.RUN_FINISHED, - runId: this.runId, - }); - } else if (message.subtype === 'error') { - events.push({ - type: EventType.RUN_ERROR, - runId: this.runId, - error: message.error?.message || 'Unknown error', - }); - } - - return events; - } - /** * Generate a unique message ID */ diff --git a/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts b/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts index 2e660830c..3f24f6cb1 100644 --- a/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts +++ b/integrations/claude-agent-sdk/typescript/src/tool-adapter.ts @@ -10,6 +10,13 @@ import type { CallToolResult, } from './types'; +// Extended Tool type that includes runtime properties +type ExtendedTool = Tool & { + client?: boolean; + handler?: (args: any) => any | Promise; + longRunning?: boolean; +}; + /** * ToolAdapter handles conversion of AG-UI tools to Claude SDK format */ @@ -18,13 +25,13 @@ export class ToolAdapter { * Convert AG-UI tools to Claude SDK MCP tool definitions */ static convertAgUiToolsToSdk(tools: Tool[]): SdkMcpToolDefinition[] { - return tools.map((tool) => this.convertSingleTool(tool)); + return tools.map((tool) => this.convertSingleTool(tool as ExtendedTool)); } /** * Convert a single AG-UI tool to Claude SDK format */ - private static convertSingleTool(tool: Tool): SdkMcpToolDefinition { + private static convertSingleTool(tool: ExtendedTool): SdkMcpToolDefinition { const zodSchema = this.convertJsonSchemaToZod(tool.parameters || {}); return { @@ -168,14 +175,18 @@ export class ToolAdapter { /** * Create an MCP server configuration for AG-UI tools */ - static createMcpServerForTools(tools: Tool[]): McpSdkServerConfigWithInstance { - const sdkTools = this.convertAgUiToolsToSdk(tools); - - return { + static async createMcpServerForTools(tools: Tool[]): Promise { + const sdkTools = this.convertAgUiToolsToSdk(tools as ExtendedTool[]); + + // Import createSdkMcpServer from Claude Agent SDK + const { createSdkMcpServer } = await import('@anthropic-ai/claude-agent-sdk'); + + // Use the official SDK function to create a properly formatted MCP server + return createSdkMcpServer({ name: 'ag_ui_tools', version: '1.0.0', - tools: sdkTools, - }; + tools: sdkTools as any, // Cast to any to avoid type incompatibility + }); } /** @@ -203,7 +214,7 @@ export class ToolAdapter { * Check if a tool is a long-running client tool */ static isClientTool(toolName: string, tools: Tool[]): boolean { - const tool = tools.find((t) => t.name === toolName); + const tool = tools.find((t) => t.name === toolName) as ExtendedTool | undefined; return tool?.client === true; } @@ -211,7 +222,7 @@ export class ToolAdapter { * Check if a tool is marked as long-running */ static isLongRunningTool(toolName: string, tools: Tool[]): boolean { - const tool = tools.find((t) => t.name === toolName); + const tool = tools.find((t) => t.name === toolName) as ExtendedTool | undefined; return tool?.client === true || tool?.longRunning === true; } diff --git a/integrations/claude-agent-sdk/typescript/src/types.ts b/integrations/claude-agent-sdk/typescript/src/types.ts index 1e8c51e10..744b743c8 100644 --- a/integrations/claude-agent-sdk/typescript/src/types.ts +++ b/integrations/claude-agent-sdk/typescript/src/types.ts @@ -33,7 +33,11 @@ export interface Options { baseUrl?: string; mcpServers?: Record; allowedTools?: string[]; - permissionMode?: 'ask' | 'auto' | 'none'; + // Valid permission modes from Agent SDK: 'default', 'acceptEdits', 'bypassPermissions', 'plan' + // Legacy values 'ask', 'auto', 'none' are also supported for backward compatibility + permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none'; + stderr?: (data: string) => void; + verbose?: boolean; [key: string]: any; } @@ -54,8 +58,14 @@ export type SDKMessage = export interface SDKAssistantMessage { type: 'assistant'; - content: ContentBlock[]; - id?: string; + message: { + id?: string; + content: ContentBlock[]; + [key: string]: any; + }; + parent_tool_use_id?: string | null; + uuid?: string; + session_id?: string; } export interface SDKUserMessage { @@ -177,8 +187,12 @@ export interface ClaudeAgentConfig extends AgentConfig { baseUrl?: string; sessionTimeout?: number; enablePersistentSessions?: boolean; - permissionMode?: 'ask' | 'auto' | 'none'; + // Valid permission modes from Agent SDK: 'default', 'acceptEdits', 'bypassPermissions', 'plan' + // Legacy values 'ask', 'auto', 'none' are mapped internally for backward compatibility + permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan' | 'ask' | 'auto' | 'none'; mcpServers?: Record; + stderr?: (data: string) => void; + verbose?: boolean; } // Execution state types @@ -217,7 +231,16 @@ export function isThinkingBlock(block: ContentBlock): block is ThinkingBlock { } export function hasContentProperty(message: SDKMessage): message is SDKAssistantMessage | SDKPartialAssistantMessage { - return 'content' in message && Array.isArray(message.content); + // For SDKAssistantMessage, content is in message.content + if (message.type === 'assistant') { + return 'message' in message && + message.message !== null && + typeof message.message === 'object' && + 'content' in message.message && + Array.isArray((message.message as any).content); + } + // For SDKPartialAssistantMessage, content might be at top level + return 'content' in message && Array.isArray((message as any).content); } // Tool execution types diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 512b27006..d770b73f7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,5 +3,6 @@ packages: - "middlewares/*" - "sdks/typescript/packages/*" - "integrations/*/typescript" + - "integrations/*/typescript/examples" - "integrations/community/*/typescript" - "integrations/mastra/typescript/examples" From c98f5ddd66a86e69461af090396b471125249d7c Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Sun, 9 Nov 2025 19:08:53 +0800 Subject: [PATCH 14/18] chore: remove outdated ADK Middleware implementation documentation and update example environment files for Claude Agent SDK --- .../adk-middleware/python/IMPLEMENTATION.md | 652 ------------------ .../python/.env.local.example | 7 +- .../typescript/examples/README.md | 1 - .../typescript/examples/env.example | 3 - 4 files changed, 6 insertions(+), 657 deletions(-) delete mode 100644 integrations/adk-middleware/python/IMPLEMENTATION.md diff --git a/integrations/adk-middleware/python/IMPLEMENTATION.md b/integrations/adk-middleware/python/IMPLEMENTATION.md deleted file mode 100644 index 451c08049..000000000 --- a/integrations/adk-middleware/python/IMPLEMENTATION.md +++ /dev/null @@ -1,652 +0,0 @@ -# ADK Middleware å®žēŽ°é€»č¾‘čÆ¦č§£ - -## 目录 - -1. [ęž¶ęž„ę¦‚čæ°](#ęž¶ęž„ę¦‚čæ°) -2. [ę øåæƒē»„ä»¶](#ę øåæƒē»„ä»¶) -3. [ę‰§č”ŒęµēØ‹](#ę‰§č”ŒęµēØ‹) -4. [äŗ‹ä»¶č½¬ę¢ęœŗåˆ¶](#äŗ‹ä»¶č½¬ę¢ęœŗåˆ¶) -5. [ä¼ščÆē®”ē†](#ä¼ščÆē®”ē†) -6. [å·„å…·ę”ÆęŒ](#å·„å…·ę”ÆęŒ) -7. [ēŠ¶ę€ē®”ē†](#ēŠ¶ę€ē®”ē†) -8. [错误处理](#错误处理) - ---- - -## ęž¶ęž„ę¦‚čæ° - -ADK Middleware ę˜Æäø€äøŖåč®®é€‚é…å±‚ļ¼Œå°† Google ADK (Agent Development Kit) ēš„ę‰§č”ŒęØ”åž‹č½¬ę¢äøŗ AG-UI Protocol ēš„äŗ‹ä»¶ęµć€‚ę•“ä½“ęž¶ęž„é‡‡ē”Øäŗ‹ä»¶é©±åŠØć€å¼‚ę­„ę‰§č”Œēš„č®¾č®”ęØ”å¼ć€‚ - -### č®¾č®”åŽŸåˆ™ - -1. **åč®®ę”„ęŽ„**: 将 ADK ēš„äŗ‹ä»¶ęØ”åž‹č½¬ę¢äøŗ AG-UI ēš„ę ‡å‡†äŗ‹ä»¶ē±»åž‹ -2. **å¼‚ę­„ę‰§č”Œ**: ä½æē”ØåŽå°ä»»åŠ”ę‰§č”Œ ADK agentļ¼Œé€ščæ‡é˜Ÿåˆ—ęµå¼ä¼ č¾“äŗ‹ä»¶ -3. **ä¼ščÆéš”ē¦»**: ęÆäøŖ thread_id 对应一个 ADK sessionļ¼ŒäæęŒåÆ¹čÆčæžē»­ę€§ -4. **巄具代理**: å®¢ęˆ·ē«Æå·„å…·é€ščæ‡ä»£ē†ęØ”å¼č½¬å‘åˆ°å‰ē«Æę‰§č”Œ - -### ę•°ę®ęµ - -``` -AG-UI Client - ↓ (RunAgentInput) -ADKAgent.run() - ↓ (åŽå°ę‰§č”Œ) -ADK Runner - ↓ (ADK Events) -EventTranslator - ↓ (AG-UI Events) -Event Queue - ↓ (ęµå¼ä¼ č¾“) -AG-UI Client -``` - ---- - -## ę øåæƒē»„ä»¶ - -### 1. ADKAgent - -**ä½ē½®**: `src/ag_ui_adk/adk_agent.py` - -ADKAgent ę˜Æę•“äøŖäø­é—“ä»¶ēš„ę øåæƒå…„å£ļ¼Œč“Ÿč“£ļ¼š - -- **åˆå§‹åŒ–é…ē½®**: 箔理 ADK agentć€ęœåŠ”ć€ä¼ščÆå‚ę•° -- **ę‰§č”Œē¼–ęŽ’**: åč°ƒę–°ę‰§č”ŒåÆåŠØć€å·„å…·ē»“ęžœå¤„ē†ć€ę¶ˆęÆę‰¹å¤„ē† -- **ē”Ÿå‘½å‘ØęœŸē®”ē†**: 箔理 RUN_STARTED/FINISHED 事件、错误处理 - -#### 关键方法 - -```python -async def run(input: RunAgentInput) -> AsyncGenerator[BaseEvent, None] -``` -äø»å…„å£ę–¹ę³•ļ¼Œå¤„ē†ę¶ˆęÆåˆ†ē±»å’Œę‰§č”Œč·Æē”±ļ¼š - -1. **ę¶ˆęÆåˆ†ęž**: čÆ†åˆ«ęœŖå¤„ē†ę¶ˆęÆ (`_get_unseen_messages`) -2. **路由决策**: - - å·„å…·ē»“ęžœę¶ˆęÆ → `_handle_tool_result_submission` - - ę–°ē”Øęˆ·ę¶ˆęÆ → `_start_new_execution` - - Assistant 消息 → 标记为已处理 -3. **äŗ‹ä»¶ęµå¼č¾“å‡ŗ**: å¼‚ę­„ē”Ÿęˆ AG-UI åč®®äŗ‹ä»¶ - -#### åˆå§‹åŒ–å‚ę•° - -- `adk_agent`: Google ADK Agent 实例 -- `app_name` / `user_id`: åŗ”ē”Øå’Œē”Øęˆ·ę ‡čÆ†ļ¼ˆę”ÆęŒé™ę€ęˆ–åŠØę€ęå–ļ¼‰ -- `session_service`: ADK ä¼ščÆęœåŠ”ļ¼ˆé»˜č®¤ InMemorySessionService) -- `memory_service`: č®°åæ†ęœåŠ”ļ¼ˆåÆé€‰ļ¼Œē”ØäŗŽä¼ščÆč®°åæ†ļ¼‰ -- `run_config_factory`: č‡Ŗå®šä¹‰ RunConfig å·„åŽ‚å‡½ę•° -- `execution_timeout_seconds`: ę‰§č”Œč¶…ę—¶ļ¼ˆé»˜č®¤ 600 秒) -- `tool_timeout_seconds`: å·„å…·č°ƒē”Øč¶…ę—¶ļ¼ˆé»˜č®¤ 300 秒) - -### 2. EventTranslator - -**ä½ē½®**: `src/ag_ui_adk/event_translator.py` - -EventTranslator č“Ÿč“£å°† ADK äŗ‹ä»¶č½¬ę¢äøŗ AG-UI åč®®äŗ‹ä»¶ć€‚ - -#### č½¬ę¢ę˜ å°„ - -| ADK Event | AG-UI Event | -|-----------|-------------| -| Content with text (partial) | TEXT_MESSAGE_START, TEXT_MESSAGE_CONTENT | -| Content with text (final) | TEXT_MESSAGE_END | -| FunctionCall | TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END | -| FunctionResponse | TOOL_CALL_RESULT | -| LongRunningFunctionCall | TOOL_CALL_START, TOOL_CALL_ARGS, TOOL_CALL_END (LRO) | -| Actions.state_delta | STATE_DELTA | - -#### ęµå¼ę–‡ęœ¬å¤„ē† - -EventTranslator ē»“ęŠ¤ęµå¼ę¶ˆęÆēŠ¶ę€ļ¼š - -- `_streaming_message_id`: å½“å‰ęµå¼ę¶ˆęÆ ID -- `_is_streaming`: ę˜Æå¦ę­£åœØęµå¼ä¼ č¾“ -- `_current_stream_text`: ē“Æē§Æēš„ę–‡ęœ¬å†…å®¹ -- `_last_streamed_text`: äøŠę¬”ęµå¼ä¼ č¾“ēš„ę–‡ęœ¬ļ¼ˆē”ØäŗŽåŽ»é‡ļ¼‰ - -**åŽ»é‡ęœŗåˆ¶**: å½“ę£€ęµ‹åˆ° `is_final_response` äŗ‹ä»¶ę—¶ļ¼Œå¦‚ęžœå†…å®¹äøŽåˆšå®Œęˆēš„ęµå¼ä¼ č¾“ē›øåŒļ¼Œåˆ™č·³čæ‡ä»„éæå…é‡å¤ć€‚ - -#### é•æčæč”Œå·„å…· (LRO) 处理 - -```python -async def translate_lro_function_calls(adk_event: ADKEvent) -``` - -äø“é—Øå¤„ē†é•æčæč”Œå·„å…·č°ƒē”Øļ¼š -- 从 `adk_event.long_running_tool_ids` čÆ†åˆ« LRO å·„å…· -- ē«‹å³å‘é€ TOOL_CALL_START/ARGS/END äŗ‹ä»¶ -- 标记为 LROļ¼Œå‰ē«Æč“Ÿč“£ę‰§č”Œ - -### 3. SessionManager - -**ä½ē½®**: `src/ag_ui_adk/session_manager.py` - -SessionManager ę˜Æå•ä¾‹ęØ”å¼ļ¼Œå°č£… ADK ēš„ä¼ščÆęœåŠ”ļ¼Œę·»åŠ ē”Ÿäŗ§ēŗ§åŠŸčƒ½ć€‚ - -#### 核心功能 - -1. **ä¼ščÆē”Ÿå‘½å‘ØęœŸ**: - - `get_or_create_session()`: čŽ·å–ęˆ–åˆ›å»ŗä¼ščÆ - - ä¼ščÆé”®ę ¼å¼: `{app_name}:{session_id}` - - ē”Øęˆ·ä¼ščÆč·ŸčøŖ: `_user_sessions[user_id] -> Set[session_keys]` - -2. **超时箔理**: - - åŸŗäŗŽ `session.last_update_time` ę£€ęµ‹čæ‡ęœŸ - - åŽå°ęø…ē†ä»»åŠ”ļ¼ˆé»˜č®¤ 5 åˆ†é’Ÿé—“éš”ļ¼‰ - - äæē•™ęœ‰ pending tool calls ēš„ä¼ščÆļ¼ˆHITL åœŗę™Æļ¼‰ - -3. **ēŠ¶ę€ē®”ē†**: - - `update_session_state()`: ę›“ę–°ä¼ščÆēŠ¶ę€ļ¼ˆä½æē”Ø ADK EventActions) - - `get_state_value()` / `set_state_value()`: é”®å€¼åÆ¹ę“ä½œ - - `clear_session_state()`: ęø…ē†ēŠ¶ę€ļ¼ˆę”ÆęŒå‰ē¼€äæē•™ļ¼‰ - -4. **消息追踪**: - - `get_processed_message_ids()`: čŽ·å–å·²å¤„ē†ę¶ˆęÆ ID - - `mark_messages_processed()`: ę ‡č®°ę¶ˆęÆäøŗå·²å¤„ē† - - ē”ØäŗŽéæå…é‡å¤å¤„ē†ę¶ˆęÆ - -5. **č‡ŖåŠØč®°åæ†**: - - å¦‚ęžœé…ē½®äŗ† `memory_service`ļ¼Œåˆ é™¤ä¼ščÆå‰č‡ŖåŠØę·»åŠ åˆ°č®°åæ† - -### 4. ClientProxyToolset / ClientProxyTool - -**ä½ē½®**: `src/ag_ui_adk/client_proxy_toolset.py`, `client_proxy_tool.py` - -å®žēŽ°å®¢ęˆ·ē«Æå·„å…·ēš„ä»£ē†ęØ”å¼ć€‚ - -#### ClientProxyToolset - -- åŠØę€åˆ›å»ŗ: ęÆäøŖę‰§č”Œę ¹ę® `RunAgentInput.tools` åˆ›å»ŗ -- å·„å…·åŒ…č£…: 将 AG-UI Tool åŒ…č£…äøŗ `ClientProxyTool` -- äŗ‹ä»¶é˜Ÿåˆ—ę³Øå…„: ęÆäøŖå·„å…·å…±äŗ«åŒäø€äøŖäŗ‹ä»¶é˜Ÿåˆ— - -#### ClientProxyTool - -继承 `BaseTool`ļ¼Œå†…éƒØä½æē”Ø `LongRunningFunctionTool`: - -1. **å‚ę•°å£°ę˜Ž**: `_get_declaration()` 将 AG-UI JSON Schema č½¬ę¢äøŗ ADK `FunctionDeclaration` -2. **ę‰§č”ŒęµēØ‹**: - ```python - async def _execute_proxy_tool(args, tool_context): - # 1. 发送 TOOL_CALL_START - # 2. 发送 TOOL_CALL_ARGS - # 3. 发送 TOOL_CALL_END - # 4. čæ”å›ž None (LRO å·„å…·) - ``` -3. **ID 箔理**: ä¼˜å…ˆä½æē”Ø ADK ē”Ÿęˆēš„ `function_call_id`ļ¼Œå¦åˆ™ē”Ÿęˆ UUID - -### 5. ExecutionState - -**ä½ē½®**: `src/ag_ui_adk/execution_state.py` - -č·ŸčøŖåŽå°ę‰§č”Œēš„å…ƒę•°ę®ļ¼š - -- `task`: asyncio.Task 对豔 -- `thread_id`: 线程标识 -- `event_queue`: äŗ‹ä»¶é˜Ÿåˆ— -- `pending_tool_calls`: å¾…å¤„ē†ēš„å·„å…·č°ƒē”Ø ID(HITL åœŗę™Æļ¼‰ -- `is_complete`: ę‰§č”Œę˜Æå¦å®Œęˆ - ---- - -## ę‰§č”ŒęµēØ‹ - -### 1. ę–°ę‰§č”ŒåÆåŠØęµēØ‹ - -``` -ē”Øęˆ·čÆ·ę±‚ (RunAgentInput) - ↓ -ADKAgent.run() - ↓ -åˆ†ęžęœŖå¤„ē†ę¶ˆęÆ - ↓ -_start_new_execution() - ↓ -发送 RUN_STARTED äŗ‹ä»¶ - ↓ -_start_background_execution() - ↓ -åˆ›å»ŗ Event Queue -准备 Agent (SystemMessage + Tools) -åˆ›å»ŗ Runner - ↓ -后台任劔: _run_adk_in_background() - ↓ -ē”®äæä¼ščÆå­˜åœØ -ę›“ę–°ä¼ščÆēŠ¶ę€ (åŒę­„å‰ē«ÆēŠ¶ę€) -č½¬ę¢ę¶ˆęÆäøŗ ADK ę ¼å¼ - ↓ -runner.run_async() - ↓ -ADK Events → EventTranslator → AG-UI Events → Queue - ↓ -_stream_events() ä»Žé˜Ÿåˆ—čÆ»å–å¹¶ęµå¼č¾“å‡ŗ - ↓ -发送 RUN_FINISHED äŗ‹ä»¶ -``` - -### 2. å·„å…·ē»“ęžœęäŗ¤ęµēØ‹ - -``` -å‰ē«Æå·„å…·ę‰§č”Œå®Œęˆ - ↓ -发送 ToolMessage (role="tool") - ↓ -ADKAgent.run() - ↓ -čÆ†åˆ«äøŗå·„å…·ē»“ęžœę¶ˆęÆ - ↓ -_handle_tool_result_submission() - ↓ -_extract_tool_results() - ↓ -č½¬ę¢äøŗ ADK FunctionResponse - ↓ -_start_new_execution(tool_results=...) - ↓ -_run_adk_in_background() - ↓ -åˆ›å»ŗ Content(role='function', parts=[FunctionResponse]) - ↓ -runner.run_async(new_message=function_response) - ↓ -ADK ē»§ē»­å¤„ē†å·„å…·ē»“ęžœ -``` - -### 3. ę¶ˆęÆę‰¹å¤„ē† - -`run()` ę–¹ę³•å°†ęœŖå¤„ē†ę¶ˆęÆåˆ†ē»„å¤„ē†ļ¼š - -- **å·„å…·ę¶ˆęÆę‰¹**: čæžē»­ēš„å·„å…·ę¶ˆęÆę‰¹é‡ęäŗ¤ -- **ę™®é€šę¶ˆęÆę‰¹**: éžå·„å…·ę¶ˆęÆę‰¹é‡ęäŗ¤ -- **Assistant 消息**: ę ‡č®°äøŗå·²å¤„ē†ļ¼Œäøč§¦å‘ę‰§č”Œ - ---- - -## äŗ‹ä»¶č½¬ę¢ęœŗåˆ¶ - -### ADK äŗ‹ä»¶å±žę€§ - -ADK äŗ‹ä»¶ēš„å…³é”®å±žę€§ļ¼š - -- `partial`: ę˜Æå¦äøŗéƒØåˆ†å“åŗ”ļ¼ˆęµå¼ļ¼‰ -- `turn_complete`: å›žåˆę˜Æå¦å®Œęˆ -- `is_final_response()`: ę˜Æå¦äøŗęœ€ē»ˆå“åŗ” -- `finish_reason`: å®ŒęˆåŽŸå›  -- `long_running_tool_ids`: é•æčæč”Œå·„å…· ID åˆ—č”Ø - -### ę–‡ęœ¬ę¶ˆęÆč½¬ę¢ - -```python -async def _translate_text_content(adk_event, thread_id, run_id): - # 1. ę£€ęŸ„ is_final_response - if is_final_response: - if _is_streaming: - # å…³é—­ę“»č·ƒęµ - yield TEXT_MESSAGE_END - else: - # ę£€ęŸ„åŽ»é‡ - if not is_duplicate: - yield TEXT_MESSAGE_START - yield TEXT_MESSAGE_CONTENT - yield TEXT_MESSAGE_END - return - - # 2. ęµå¼å¤„ē† - if not _is_streaming: - yield TEXT_MESSAGE_START - _is_streaming = True - - yield TEXT_MESSAGE_CONTENT - - if should_send_end: - yield TEXT_MESSAGE_END - _is_streaming = False -``` - -### å·„å…·č°ƒē”Øč½¬ę¢ - -**ę™®é€šå·„å…·**: -``` -FunctionCall → TOOL_CALL_START → TOOL_CALL_ARGS → TOOL_CALL_END -FunctionResponse → TOOL_CALL_RESULT -``` - -**é•æčæč”Œå·„å…·**: -``` -LongRunningFunctionCall → TOOL_CALL_START → TOOL_CALL_ARGS → TOOL_CALL_END -(äøå‘é€ TOOL_CALL_RESULTļ¼Œē”±å‰ē«Æę‰§č”Œ) -``` - -### ēŠ¶ę€č½¬ę¢ - -```python -def _create_state_delta_event(state_delta, thread_id, run_id): - # č½¬ę¢äøŗ JSON Patch (RFC 6902) - patches = [ - {"op": "add", "path": f"/{key}", "value": value} - for key, value in state_delta.items() - ] - return StateDeltaEvent(delta=patches) -``` - ---- - -## ä¼ščÆē®”ē† - -### ä¼ščÆé”®ē»“ęž„ - -``` -session_key = f"{app_name}:{session_id}" -``` - -### ä¼ščÆęŸ„ę‰¾ē¼“å­˜ - -`ADKAgent._session_lookup_cache` ęä¾› O(1) ęŸ„ę‰¾ļ¼š - -```python -_cache[session_id] = {"app_name": str, "user_id": str} -``` - -### č‡ŖåŠØęø…ē†ęœŗåˆ¶ - -```python -async def _cleanup_expired_sessions(): - for session_key in tracked_sessions: - session = await get_session(...) - age = current_time - session.last_update_time - if age > timeout: - pending_calls = session.state.get("pending_tool_calls", []) - if not pending_calls: - await _delete_session(session) -``` - -**äæęŠ¤ęœŗåˆ¶**: ꜉ pending tool calls ēš„ä¼ščÆäøä¼šč¢«ęø…ē†ļ¼ˆHITL åœŗę™Æļ¼‰ć€‚ - -### ē”Øęˆ·ä¼ščÆé™åˆ¶ - -å¦‚ęžœč®¾ē½®äŗ† `max_sessions_per_user`: - -```python -if user_count >= max_sessions_per_user: - await _remove_oldest_user_session(user_id) -``` - -åŸŗäŗŽ `last_update_time` åˆ é™¤ęœ€ę—§ēš„ä¼ščÆć€‚ - ---- - -## å·„å…·ę”ÆęŒ - -### å·„å…·ē±»åž‹ - -1. **åŽē«Æå·„å…·**: ADK Agent ē›“ęŽ„ęä¾›ēš„å·„å…·ļ¼ˆåŒę­„ę‰§č”Œļ¼‰ -2. **å‰ē«Æå·„å…·**: é€ščæ‡ `ClientProxyTool` ä»£ē†ēš„å·„å…·ļ¼ˆé•æčæč”Œļ¼‰ - -### å·„å…·åˆå¹¶ē­–ē•„ - -```python -# 1. čŽ·å– Agent ēŽ°ęœ‰å·„å…· -existing_tools = adk_agent.tools - -# 2. čæ‡ę»¤å‰ē«Æå·„å…·ļ¼ˆéæå…äøŽåŽē«Æå·„å…·å†²ēŖļ¼‰ -input_tools = [ - tool for tool in input.tools - if tool.name not in existing_tool_names - and tool.name != 'transfer_to_agent' # ADK å†…éƒØå·„å…· -] - -# 3. åˆ›å»ŗä»£ē†å·„å…·é›† -proxy_toolset = ClientProxyToolset(input_tools, event_queue) - -# 4. 合并 -combined_tools = existing_tools + [proxy_toolset] -``` - -### å·„å…·ę‰§č”ŒęµēØ‹ - -**å‰ē«Æå·„å…·**: -``` -ADK Agent č°ƒē”Øå·„å…· - ↓ -ClientProxyTool.run_async() - ↓ -发送 TOOL_CALL_START/ARGS/END äŗ‹ä»¶ - ↓ -čæ”å›ž None (LRO) - ↓ -å‰ē«ÆęŽ„ę”¶äŗ‹ä»¶å¹¶ę‰§č”Œ - ↓ -å‰ē«Æå‘é€ ToolMessage - ↓ -ē»§ē»­ę‰§č”Œ -``` - -**åŽē«Æå·„å…·**: -``` -ADK Agent č°ƒē”Øå·„å…· - ↓ -ę‰§č”Œå·„å…·å‡½ę•° - ↓ -čæ”å›žē»“ęžœ - ↓ -ADK ē”Ÿęˆ FunctionResponse - ↓ -EventTranslator č½¬ę¢äøŗ TOOL_CALL_RESULT -``` - -### å·„å…·ē»“ęžœå¤„ē† - -```python -# č§£ęž JSON 内容 -try: - result = json.loads(content) -except json.JSONDecodeError: - result = { - "error": f"Invalid JSON: {str(error)}", - "error_type": "JSON_DECODE_ERROR" - } - -# åˆ›å»ŗ FunctionResponse -function_response = types.FunctionResponse( - id=tool_call_id, - name=tool_name, - response=result -) -``` - ---- - -## ēŠ¶ę€ē®”ē† - -### ēŠ¶ę€åŒę­„ę–¹å‘ - -1. **å‰ē«Æ → åŽē«Æ**: ęÆę¬”ę‰§č”Œå‰ę›“ę–°ä¼ščÆēŠ¶ę€ - ```python - await session_manager.update_session_state( - thread_id, app_name, user_id, input.state - ) - ``` - -2. **åŽē«Æ → å‰ē«Æ**: é€ščæ‡ STATE_DELTA äŗ‹ä»¶ - ```python - if adk_event.actions.state_delta: - yield StateDeltaEvent(delta=json_patch) - ``` - -3. **ęœ€ē»ˆåæ«ē…§**: ę‰§č”Œå®ŒęˆåŽå‘é€ STATE_SNAPSHOT - ```python - final_state = await session_manager.get_session_state(...) - yield StateSnapshotEvent(snapshot=final_state) - ``` - -### National JSON Patch ę ¼å¼ - -ēŠ¶ę€å˜ę›“ä½æē”Ø JSON Patch (RFC 6902): - -```json -[ - {"op": "add", "path": "/key", "value": "value"}, - {"op": "remove", "path": "/old_key"} -] -``` - -### ēŠ¶ę€ę›“ę–°å®žēŽ° - -```python -# 使用 ADK EventActions -actions = EventActions(state_delta=updates) -event = Event( - invocation_id=f"state_update_{timestamp}", - author="system", - actions=actions -) -await session_service.append_event(session, event) -``` - ---- - -## 错误处理 - -### é”™čÆÆē±»åž‹ - -1. **ę‰§č”Œč¶…ę—¶**: `execution.is_stale(timeout)` → `RUN_ERROR` (code: "EXECUTION_TIMEOUT") -2. **å·„å…·ē»“ęžœé”™čÆÆ**: JSON č§£ęžå¤±č“„ → åŒ…å«é”™čÆÆäæ”ęÆēš„ FunctionResponse -3. **编码错误**: EventEncoder 失蓄 → `RUN_ERROR` (code: "ENCODING_ERROR") -4. **åŽå°ę‰§č”Œé”™čÆÆ**: å¼‚åøøę•čŽ· → `RUN_ERROR` (code: "BACKGROUND_EXECUTION_ERROR") - -### 错误传播 - -```python -try: - async for event in agent.run(input): - yield event -except Exception as e: - yield RunErrorEvent( - type=EventType.RUN_ERROR, - message=str(e), - code="AGENT_ERROR" - ) -``` - -### ęø…ē†ęœŗåˆ¶ - -ę‰§č”Œå®ŒęˆåŽęø…ē†ļ¼š - -```python -finally: - if execution.is_complete: - has_pending = await _has_pending_tool_calls(thread_id) - if not has_pending: - del _active_executions[thread_id] -``` - -**HITL äæęŠ¤**: ꜉ pending tool calls ēš„ę‰§č”Œäøä¼šč¢«ęø…ē†ć€‚ - ---- - -## 关键设讔决策 - -### 1. ę‰€ęœ‰å®¢ęˆ·ē«Æå·„å…·éƒ½ę˜Æé•æčæč”Œå·„å…· - -**原因**: ē®€åŒ–ęž¶ęž„ļ¼Œē»Ÿäø€å¤„ē†ęµēØ‹ļ¼Œéæå…åŒę­„ē­‰å¾…ć€‚ - -### 2. åŽå°ę‰§č”Œ + äŗ‹ä»¶é˜Ÿåˆ— - -**原因**: -- ADK ēš„ę‰§č”Œę˜Æé˜»å”žēš„ļ¼Œéœ€č¦åŽå°čæč”Œ -- ęµå¼č¾“å‡ŗéœ€č¦é˜Ÿåˆ—ē¼“å†² -- ę”ÆęŒå¹¶å‘ę‰§č”Œå¤šäøŖčÆ·ę±‚ - -### 3. ä¼ščÆēŠ¶ę€åŒę­„ - -**原因**: -- å‰ē«ÆåÆčƒ½äæ®ę”¹ēŠ¶ę€ļ¼ˆå¦‚ UI ę“ä½œļ¼‰ -- åŽē«Æéœ€č¦ęœ€ę–°ēŠ¶ę€čæ›č”ŒęŽØē† -- åŒå‘åŒę­„äæčÆäø€č‡“ę€§ - -### 4. ę¶ˆęÆåŽ»é‡ - -**原因**: -- ADK åÆčƒ½åŒę—¶å‘é€ęµå¼å—å’Œęœ€ē»ˆå“åŗ” -- éæå…å‰ē«Æé‡å¤ęø²ęŸ“ -- åŸŗäŗŽ run_id 和内容匹配 - -### 5. 单例 SessionManager - -**原因**: -- å…Øå±€ä¼ščÆē®”ē† -- ē»Ÿäø€ēš„ęø…ē†ä»»åŠ” -- č·Ø Agent å®žä¾‹å…±äŗ«ēŠ¶ę€ - ---- - -## ę€§čƒ½č€ƒč™‘ - -### 并发限制 - -```python -max_concurrent_executions = 10 # 默认 -``` - -č¶…čæ‡é™åˆ¶ę—¶ęø…ē†čæ‡ęœŸę‰§č”Œļ¼Œä»ę»”åˆ™ęŠ›å‡ŗå¼‚åøøć€‚ - -### ä¼ščÆęŸ„ę‰¾ä¼˜åŒ– - -- O(1) ē¼“å­˜ęŸ„ę‰¾ (`_session_lookup_cache`) -- å›žé€€åˆ°ēŗæę€§ęœē“¢ļ¼ˆå‘åŽå…¼å®¹ļ¼‰ - -### äŗ‹ä»¶é˜Ÿåˆ—å¤§å° - -使用 `asyncio.Queue`ļ¼Œę— å¤§å°é™åˆ¶ļ¼Œä¾čµ– backpressure ęœŗåˆ¶ć€‚ - ---- - -## 扩展点 - -### č‡Ŗå®šä¹‰ RunConfig - -```python -def custom_run_config(input: RunAgentInput) -> ADKRunConfig: - return ADKRunConfig( - streaming_mode=StreamingMode.SSE, - save_input_blobs_as_artifacts=True, - # č‡Ŗå®šä¹‰é…ē½® - ) - -agent = ADKAgent( - adk_agent=my_agent, - run_config_factory=custom_run_config -) -``` - -### č‡Ŗå®šä¹‰ App/User ęå– - -```python -def extract_app_name(input: RunAgentInput) -> str: - return input.context.get("app_name", "default") - -agent = ADKAgent( - adk_agent=my_agent, - app_name_extractor=extract_app_name -) -``` - -### č‡Ŗå®šä¹‰ęœåŠ” - -```python -from google.adk.sessions import MyCustomSessionService - -agent = ADKAgent( - adk_agent=my_agent, - session_service=MyCustomSessionService(), - use_in_memory_services=False -) -``` - ---- - -## 总结 - -ADK Middleware é€ščæ‡ē²¾åæƒč®¾č®”ēš„äŗ‹ä»¶č½¬ę¢ć€ä¼ščÆē®”ē†å’Œå·„å…·ä»£ē†ęœŗåˆ¶ļ¼Œå®žēŽ°äŗ† Google ADK äøŽ AG-UI Protocol ä¹‹é—“ēš„ę— ē¼ę”„ęŽ„ć€‚ę øåæƒč®¾č®”å›“ē»•å¼‚ę­„ę‰§č”Œć€äŗ‹ä»¶é©±åŠØå’ŒēŠ¶ę€åŒę­„å±•å¼€ļ¼Œē”®äæé«˜å¹¶å‘ć€ä½Žå»¶čæŸēš„ę™ŗčƒ½ä½“äŗ¤äŗ’ä½“éŖŒć€‚ - diff --git a/integrations/claude-agent-sdk/python/.env.local.example b/integrations/claude-agent-sdk/python/.env.local.example index a3483f5e3..042974e23 100644 --- a/integrations/claude-agent-sdk/python/.env.local.example +++ b/integrations/claude-agent-sdk/python/.env.local.example @@ -3,7 +3,12 @@ # Anthropic API Key (required for real API tests) # Get your API key from: https://console.anthropic.com/ -ANTHROPIC_API_KEY=your-anthropic-api-key-here +# ANTHROPIC_API_KEY=your-anthropic-api-key-here + +# Optional +# ANTHROPIC_AUTH_TOKEN=third-party-auth-token +# ANTHROPIC_BASE_URL=third-party-base-url + # Optional: Override default Claude SDK options # CLAUDE_SYSTEM_PROMPT=You are a helpful assistant diff --git a/integrations/claude-agent-sdk/typescript/examples/README.md b/integrations/claude-agent-sdk/typescript/examples/README.md index dfe8c8e35..9a6b3b01f 100644 --- a/integrations/claude-agent-sdk/typescript/examples/README.md +++ b/integrations/claude-agent-sdk/typescript/examples/README.md @@ -20,7 +20,6 @@ Edit the `.env.local` file and set the required environment variables: ANTHROPIC_API_KEY=your_api_key_here # Optional configuration -CLAUDE_CLI_PATH=/path/to/claude-agent-sdk/cli/claude # Claude CLI path PORT=3000 # Server port APP_NAME=claude-example # Application name SYSTEM_PROMPT=You are a helpful assistant # System prompt diff --git a/integrations/claude-agent-sdk/typescript/examples/env.example b/integrations/claude-agent-sdk/typescript/examples/env.example index a7e5a3583..04aab37c7 100644 --- a/integrations/claude-agent-sdk/typescript/examples/env.example +++ b/integrations/claude-agent-sdk/typescript/examples/env.example @@ -1,9 +1,6 @@ # Claude API Key (Required) ANTHROPIC_API_KEY=your_api_key_here -# Claude CLI Path (Optional, will use default path if not provided) -# CLAUDE_CLI_PATH=/path/to/claude-agent-sdk/cli/claude - # Server Port (Optional, default is 3000) # PORT=3000 From c57eb1ed3f5f5e561c88e2e64ac729ae2ccfc205 Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Mon, 10 Nov 2025 09:28:24 +0800 Subject: [PATCH 15/18] chore: update example environment file for Claude Agent SDK by removing deprecated options and clarifying third-party service configuration --- .../claude-agent-sdk/python/.env.local.example | 11 +---------- .../claude-agent-sdk/typescript/.env.local.example | 10 ++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 integrations/claude-agent-sdk/typescript/.env.local.example diff --git a/integrations/claude-agent-sdk/python/.env.local.example b/integrations/claude-agent-sdk/python/.env.local.example index 042974e23..e925bb858 100644 --- a/integrations/claude-agent-sdk/python/.env.local.example +++ b/integrations/claude-agent-sdk/python/.env.local.example @@ -5,15 +5,6 @@ # Get your API key from: https://console.anthropic.com/ # ANTHROPIC_API_KEY=your-anthropic-api-key-here -# Optional +# Optional for third party service # ANTHROPIC_AUTH_TOKEN=third-party-auth-token # ANTHROPIC_BASE_URL=third-party-base-url - - -# Optional: Override default Claude SDK options -# CLAUDE_SYSTEM_PROMPT=You are a helpful assistant -# CLAUDE_PERMISSION_MODE=acceptEdits - -# Optional: Test configuration -# TEST_TIMEOUT_SECONDS=60 -# TEST_MAX_CONCURRENT=5 diff --git a/integrations/claude-agent-sdk/typescript/.env.local.example b/integrations/claude-agent-sdk/typescript/.env.local.example new file mode 100644 index 000000000..e925bb858 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/.env.local.example @@ -0,0 +1,10 @@ +# Claude Agent SDK Integration - Environment Variables +# Copy this file to .env.local and fill in your actual values + +# Anthropic API Key (required for real API tests) +# Get your API key from: https://console.anthropic.com/ +# ANTHROPIC_API_KEY=your-anthropic-api-key-here + +# Optional for third party service +# ANTHROPIC_AUTH_TOKEN=third-party-auth-token +# ANTHROPIC_BASE_URL=third-party-base-url From c26363f4bf4b1dacdb5f359ec103bea53c8a6431 Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Mon, 10 Nov 2025 09:56:24 +0800 Subject: [PATCH 16/18] chore: update .gitignore to include all .env.local files and remove backup example environment file for Claude Agent SDK --- .gitignore | 3 ++- .../typescript/examples/.env.local.example | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 integrations/claude-agent-sdk/typescript/examples/.env.local.example diff --git a/.gitignore b/.gitignore index b8882a2b4..8edc74efb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ node_modules .pnpm-store **/.poetry-cache -integrations/claude-agent-sdk/typescript/.env.local +**/.env.local +integrations/claude-agent-sdk/**/.env.local **/pnpm-lock.yaml pnpm-lock.yaml diff --git a/integrations/claude-agent-sdk/typescript/examples/.env.local.example b/integrations/claude-agent-sdk/typescript/examples/.env.local.example new file mode 100644 index 000000000..e925bb858 --- /dev/null +++ b/integrations/claude-agent-sdk/typescript/examples/.env.local.example @@ -0,0 +1,10 @@ +# Claude Agent SDK Integration - Environment Variables +# Copy this file to .env.local and fill in your actual values + +# Anthropic API Key (required for real API tests) +# Get your API key from: https://console.anthropic.com/ +# ANTHROPIC_API_KEY=your-anthropic-api-key-here + +# Optional for third party service +# ANTHROPIC_AUTH_TOKEN=third-party-auth-token +# ANTHROPIC_BASE_URL=third-party-base-url From 8b19f36f769c913a3f1be09fab674bc3ef203851 Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Mon, 10 Nov 2025 10:05:21 +0800 Subject: [PATCH 17/18] chore: add .gitignore to prevent future .env.local commits --- .../claude-agent-sdk/python/.gitignore | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 integrations/claude-agent-sdk/python/.gitignore diff --git a/integrations/claude-agent-sdk/python/.gitignore b/integrations/claude-agent-sdk/python/.gitignore new file mode 100644 index 000000000..32319dd4a --- /dev/null +++ b/integrations/claude-agent-sdk/python/.gitignore @@ -0,0 +1,31 @@ +# Environment files +.env +.env.local +.env*.local + +# Dependencies +node_modules/ + +# Build output +dist/ +build/ + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* + +# OS +.DS_Store +Thumbs.db + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + From a8b76ddd5e40626dcc20e9dc1b5aac07ef486f18 Mon Sep 17 00:00:00 2001 From: "xingjian.ym" Date: Mon, 10 Nov 2025 11:44:21 +0800 Subject: [PATCH 18/18] chore: restore pnpm-lock.yaml files in subdirectories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Restore apps/dojo/e2e/pnpm-lock.yaml - Restore docs/pnpm-lock.yaml - Restore integrations/langgraph/typescript/examples/pnpm-lock.yaml šŸ¤– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- apps/dojo/e2e/pnpm-lock.yaml | 1783 ++++ docs/pnpm-lock.yaml | 8029 +++++++++++++++++ .../typescript/examples/pnpm-lock.yaml | 393 + 3 files changed, 10205 insertions(+) create mode 100644 apps/dojo/e2e/pnpm-lock.yaml create mode 100644 docs/pnpm-lock.yaml create mode 100644 integrations/langgraph/typescript/examples/pnpm-lock.yaml diff --git a/apps/dojo/e2e/pnpm-lock.yaml b/apps/dojo/e2e/pnpm-lock.yaml new file mode 100644 index 000000000..25fa39ba2 --- /dev/null +++ b/apps/dojo/e2e/pnpm-lock.yaml @@ -0,0 +1,1783 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@aws-sdk/client-s3': + specifier: ^3.600.0 + version: 3.840.0 + json2md: + specifier: ^2.0.1 + version: 2.0.3 + devDependencies: + '@playwright/test': + specifier: ^1.43.1 + version: 1.52.0 + '@slack/types': + specifier: ^2.14.0 + version: 2.14.0 + '@types/node': + specifier: ^22.15.28 + version: 22.15.28 + playwright-slack-report: + specifier: ^1.1.93 + version: 1.1.93(@types/node@22.15.28)(typescript@5.8.3) + +packages: + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.840.0': + resolution: {integrity: sha512-dRuo03EqGBbl9+PTogpwY9bYmGWIjn8nB82HN5Qj20otgjUvhLOdEkkip9mroYsrvqNoKbMedWdCudIcB/YY1w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.840.0': + resolution: {integrity: sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.840.0': + resolution: {integrity: sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.840.0': + resolution: {integrity: sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.840.0': + resolution: {integrity: sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.840.0': + resolution: {integrity: sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.840.0': + resolution: {integrity: sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.840.0': + resolution: {integrity: sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.840.0': + resolution: {integrity: sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.840.0': + resolution: {integrity: sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-bucket-endpoint@3.840.0': + resolution: {integrity: sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-expect-continue@3.840.0': + resolution: {integrity: sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.840.0': + resolution: {integrity: sha512-Kg/o2G6o72sdoRH0J+avdcf668gM1bp6O4VeEXpXwUj/urQnV5qiB2q1EYT110INHUKWOLXPND3sQAqh6sTqHw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.840.0': + resolution: {integrity: sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-location-constraint@3.840.0': + resolution: {integrity: sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.840.0': + resolution: {integrity: sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.840.0': + resolution: {integrity: sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.840.0': + resolution: {integrity: sha512-rOUji7CayWN3O09zvvgLzDVQe0HiJdZkxoTS6vzOS3WbbdT7joGdVtAJHtn+x776QT3hHzbKU5gnfhel0o6gQA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-ssec@3.840.0': + resolution: {integrity: sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.840.0': + resolution: {integrity: sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.840.0': + resolution: {integrity: sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.840.0': + resolution: {integrity: sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.840.0': + resolution: {integrity: sha512-8AoVgHrkSfhvGPtwx23hIUO4MmMnux2pjnso1lrLZGqxfElM6jm2w4jTNLlNXk8uKHGyX89HaAIuT0lL6dJj9g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.840.0': + resolution: {integrity: sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.840.0': + resolution: {integrity: sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-arn-parser@3.804.0': + resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.840.0': + resolution: {integrity: sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.804.0': + resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.840.0': + resolution: {integrity: sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==} + + '@aws-sdk/util-user-agent-node@3.840.0': + resolution: {integrity: sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.821.0': + resolution: {integrity: sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==} + engines: {node: '>=18.0.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@playwright/test@1.52.0': + resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} + engines: {node: '>=18'} + hasBin: true + + '@slack/logger@4.0.0': + resolution: {integrity: sha512-Wz7QYfPAlG/DR+DfABddUZeNgoeY7d1J39OCR2jR+v7VBsB8ezulDK5szTnDDPDwLH5IWhLvXIHlCFZV7MSKgA==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@slack/types@2.14.0': + resolution: {integrity: sha512-n0EGm7ENQRxlXbgKSrQZL69grzg1gHLAVd+GlRVQJ1NSORo0FrApR7wql/gaKdu2n4TO83Sq/AmeUOqD60aXUA==} + engines: {node: '>= 12.13.0', npm: '>= 6.12.0'} + + '@slack/web-api@7.9.2': + resolution: {integrity: sha512-3HoDwV6+ZSTfV+DsbnUd82GlZY0a+DPXuHQHpxWTqgxjM3JWZyGiwR+ov3d2M16pWiMzA+l58UJ5lm1znGq0yA==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@slack/webhook@7.0.5': + resolution: {integrity: sha512-PmbZx89+SmH4zt78FUwe4If8hWX2MAIRmGXjmlF0A8PwyJb/H7CWaQYV6DDlZn1+7Zs6CEytKH0ejEE/idVSDw==} + engines: {node: '>= 18', npm: '>= 8.6.0'} + + '@smithy/abort-controller@4.0.4': + resolution: {integrity: sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader-native@4.0.0': + resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader@5.0.0': + resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.1.4': + resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.6.0': + resolution: {integrity: sha512-Pgvfb+TQ4wUNLyHzvgCP4aYZMh16y7GcfF59oirRHcgGgkH1e/s9C0nv/v3WP+Quymyr5je71HeFQCwh+44XLg==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.0.6': + resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@4.0.4': + resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.0.4': + resolution: {integrity: sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.1.2': + resolution: {integrity: sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.0.4': + resolution: {integrity: sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.0.4': + resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.0.4': + resolution: {integrity: sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-blob-browser@4.0.4': + resolution: {integrity: sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.0.4': + resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-stream-node@4.0.4': + resolution: {integrity: sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.0.4': + resolution: {integrity: sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + + '@smithy/md5-js@4.0.4': + resolution: {integrity: sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.0.4': + resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.1.13': + resolution: {integrity: sha512-xg3EHV/Q5ZdAO5b0UiIMj3RIOCobuS40pBBODguUDVdko6YK6QIzCVRrHTogVuEKglBWqWenRnZ71iZnLL3ZAQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.1.14': + resolution: {integrity: sha512-eoXaLlDGpKvdmvt+YBfRXE7HmIEtFF+DJCbTPwuLunP0YUnrydl+C4tS+vEM0+nyxXrX3PSUFqC+lP1+EHB1Tw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.0.8': + resolution: {integrity: sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.0.4': + resolution: {integrity: sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.1.3': + resolution: {integrity: sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.0.6': + resolution: {integrity: sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.0.4': + resolution: {integrity: sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.1.2': + resolution: {integrity: sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.0.4': + resolution: {integrity: sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.4': + resolution: {integrity: sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.6': + resolution: {integrity: sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.4': + resolution: {integrity: sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.1.2': + resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.4.5': + resolution: {integrity: sha512-+lynZjGuUFJaMdDYSTMnP/uPBBXXukVfrJlP+1U/Dp5SFTEI++w6NMga8DjOENxecOF71V9Z2DllaVDYRnGlkg==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.3.1': + resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.4': + resolution: {integrity: sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.21': + resolution: {integrity: sha512-wM0jhTytgXu3wzJoIqpbBAG5U6BwiubZ6QKzSbP7/VbmF1v96xlAbX2Am/mz0Zep0NLvLh84JT0tuZnk3wmYQA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.21': + resolution: {integrity: sha512-/F34zkoU0GzpUgLJydHY8Rxu9lBn8xQC/s/0M0U9lLBkYbA1htaAFjWYJzpzsbXPuri5D1H8gjp2jBum05qBrA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.6': + resolution: {integrity: sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.0.4': + resolution: {integrity: sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.6': + resolution: {integrity: sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.2.2': + resolution: {integrity: sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.0.6': + resolution: {integrity: sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==} + engines: {node: '>=18.0.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/node@22.15.28': + resolution: {integrity: sha512-I0okKVDmyKR281I0UIFV7EWAWRnR0gkuSKob5wVcByyyhr7Px/slhkQapcYX4u00ekzNWaS1gznKZnuzxwo4pw==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.9.0: + resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + indento@1.1.14: + resolution: {integrity: sha512-K4cK97v4M/ucCAbe3LUpg994folYL0WnEiCFxHXAIowKLbBb/Ahiazkz3Ao5gRar4i9pDr3imcpq4suOu0FbNw==} + + is-electron@2.2.2: + resolution: {integrity: sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + json2md@2.0.3: + resolution: {integrity: sha512-ZPzh6Djvqz8grJMxKllfCHo0p+p7BsbZ1J95KcCJgvvfdoy7myuKrrkUp80Kpy+wGauykC0dYljLqLY0kENaOw==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + playwright-core@1.52.0: + resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} + engines: {node: '>=18'} + hasBin: true + + playwright-slack-report@1.1.93: + resolution: {integrity: sha512-KuCHFyFx7rWOJ5mnpISqtWuB6S8NOOtkkcyUEwxkKTvPVjp5QndB+6fX0w8fTggqZ79x/bM0XO/QU5POOtIGZg==} + hasBin: true + + playwright@1.52.0: + resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} + engines: {node: '>=18'} + hasBin: true + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + zod@3.25.42: + resolution: {integrity: sha512-PcALTLskaucbeHc41tU/xfjfhcz8z0GdhhDcSgrCTmSazUuqnYqiXO63M0QUBVwpBlsLsNVn5qHSC5Dw3KZvaQ==} + +snapshots: + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.840.0 + tslib: 2.8.1 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.840.0 + tslib: 2.8.1 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-locate-window': 3.804.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-locate-window': 3.804.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.840.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-s3@3.840.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.840.0 + '@aws-sdk/credential-provider-node': 3.840.0 + '@aws-sdk/middleware-bucket-endpoint': 3.840.0 + '@aws-sdk/middleware-expect-continue': 3.840.0 + '@aws-sdk/middleware-flexible-checksums': 3.840.0 + '@aws-sdk/middleware-host-header': 3.840.0 + '@aws-sdk/middleware-location-constraint': 3.840.0 + '@aws-sdk/middleware-logger': 3.840.0 + '@aws-sdk/middleware-recursion-detection': 3.840.0 + '@aws-sdk/middleware-sdk-s3': 3.840.0 + '@aws-sdk/middleware-ssec': 3.840.0 + '@aws-sdk/middleware-user-agent': 3.840.0 + '@aws-sdk/region-config-resolver': 3.840.0 + '@aws-sdk/signature-v4-multi-region': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-endpoints': 3.840.0 + '@aws-sdk/util-user-agent-browser': 3.840.0 + '@aws-sdk/util-user-agent-node': 3.840.0 + '@aws-sdk/xml-builder': 3.821.0 + '@smithy/config-resolver': 4.1.4 + '@smithy/core': 3.6.0 + '@smithy/eventstream-serde-browser': 4.0.4 + '@smithy/eventstream-serde-config-resolver': 4.1.2 + '@smithy/eventstream-serde-node': 4.0.4 + '@smithy/fetch-http-handler': 5.0.4 + '@smithy/hash-blob-browser': 4.0.4 + '@smithy/hash-node': 4.0.4 + '@smithy/hash-stream-node': 4.0.4 + '@smithy/invalid-dependency': 4.0.4 + '@smithy/md5-js': 4.0.4 + '@smithy/middleware-content-length': 4.0.4 + '@smithy/middleware-endpoint': 4.1.13 + '@smithy/middleware-retry': 4.1.14 + '@smithy/middleware-serde': 4.0.8 + '@smithy/middleware-stack': 4.0.4 + '@smithy/node-config-provider': 4.1.3 + '@smithy/node-http-handler': 4.0.6 + '@smithy/protocol-http': 5.1.2 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/url-parser': 4.0.4 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.21 + '@smithy/util-defaults-mode-node': 4.0.21 + '@smithy/util-endpoints': 3.0.6 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-retry': 4.0.6 + '@smithy/util-stream': 4.2.2 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.6 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.840.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.840.0 + '@aws-sdk/middleware-host-header': 3.840.0 + '@aws-sdk/middleware-logger': 3.840.0 + '@aws-sdk/middleware-recursion-detection': 3.840.0 + '@aws-sdk/middleware-user-agent': 3.840.0 + '@aws-sdk/region-config-resolver': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-endpoints': 3.840.0 + '@aws-sdk/util-user-agent-browser': 3.840.0 + '@aws-sdk/util-user-agent-node': 3.840.0 + '@smithy/config-resolver': 4.1.4 + '@smithy/core': 3.6.0 + '@smithy/fetch-http-handler': 5.0.4 + '@smithy/hash-node': 4.0.4 + '@smithy/invalid-dependency': 4.0.4 + '@smithy/middleware-content-length': 4.0.4 + '@smithy/middleware-endpoint': 4.1.13 + '@smithy/middleware-retry': 4.1.14 + '@smithy/middleware-serde': 4.0.8 + '@smithy/middleware-stack': 4.0.4 + '@smithy/node-config-provider': 4.1.3 + '@smithy/node-http-handler': 4.0.6 + '@smithy/protocol-http': 5.1.2 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/url-parser': 4.0.4 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.21 + '@smithy/util-defaults-mode-node': 4.0.21 + '@smithy/util-endpoints': 3.0.6 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-retry': 4.0.6 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@aws-sdk/xml-builder': 3.821.0 + '@smithy/core': 3.6.0 + '@smithy/node-config-provider': 4.1.3 + '@smithy/property-provider': 4.0.4 + '@smithy/protocol-http': 5.1.2 + '@smithy/signature-v4': 5.1.2 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-utf8': 4.0.0 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/property-provider': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/fetch-http-handler': 5.0.4 + '@smithy/node-http-handler': 4.0.6 + '@smithy/property-provider': 4.0.4 + '@smithy/protocol-http': 5.1.2 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/util-stream': 4.2.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/credential-provider-env': 3.840.0 + '@aws-sdk/credential-provider-http': 3.840.0 + '@aws-sdk/credential-provider-process': 3.840.0 + '@aws-sdk/credential-provider-sso': 3.840.0 + '@aws-sdk/credential-provider-web-identity': 3.840.0 + '@aws-sdk/nested-clients': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/credential-provider-imds': 4.0.6 + '@smithy/property-provider': 4.0.4 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.840.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.840.0 + '@aws-sdk/credential-provider-http': 3.840.0 + '@aws-sdk/credential-provider-ini': 3.840.0 + '@aws-sdk/credential-provider-process': 3.840.0 + '@aws-sdk/credential-provider-sso': 3.840.0 + '@aws-sdk/credential-provider-web-identity': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/credential-provider-imds': 4.0.6 + '@smithy/property-provider': 4.0.4 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/property-provider': 4.0.4 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.840.0': + dependencies: + '@aws-sdk/client-sso': 3.840.0 + '@aws-sdk/core': 3.840.0 + '@aws-sdk/token-providers': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/property-provider': 4.0.4 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/nested-clients': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/property-provider': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-bucket-endpoint@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/node-config-provider': 4.1.3 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + '@smithy/util-config-provider': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-expect-continue@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-flexible-checksums@3.840.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/is-array-buffer': 4.0.0 + '@smithy/node-config-provider': 4.1.3 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-stream': 4.2.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-host-header@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-location-constraint@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/core': 3.6.0 + '@smithy/node-config-provider': 4.1.3 + '@smithy/protocol-http': 5.1.2 + '@smithy/signature-v4': 5.1.2 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-stream': 4.2.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-ssec@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-endpoints': 3.840.0 + '@smithy/core': 3.6.0 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.840.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.840.0 + '@aws-sdk/middleware-host-header': 3.840.0 + '@aws-sdk/middleware-logger': 3.840.0 + '@aws-sdk/middleware-recursion-detection': 3.840.0 + '@aws-sdk/middleware-user-agent': 3.840.0 + '@aws-sdk/region-config-resolver': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@aws-sdk/util-endpoints': 3.840.0 + '@aws-sdk/util-user-agent-browser': 3.840.0 + '@aws-sdk/util-user-agent-node': 3.840.0 + '@smithy/config-resolver': 4.1.4 + '@smithy/core': 3.6.0 + '@smithy/fetch-http-handler': 5.0.4 + '@smithy/hash-node': 4.0.4 + '@smithy/invalid-dependency': 4.0.4 + '@smithy/middleware-content-length': 4.0.4 + '@smithy/middleware-endpoint': 4.1.13 + '@smithy/middleware-retry': 4.1.14 + '@smithy/middleware-serde': 4.0.8 + '@smithy/middleware-stack': 4.0.4 + '@smithy/node-config-provider': 4.1.3 + '@smithy/node-http-handler': 4.0.6 + '@smithy/protocol-http': 5.1.2 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/url-parser': 4.0.4 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.21 + '@smithy/util-defaults-mode-node': 4.0.21 + '@smithy/util-endpoints': 3.0.6 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-retry': 4.0.6 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/node-config-provider': 4.1.3 + '@smithy/types': 4.3.1 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.4 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.840.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/protocol-http': 5.1.2 + '@smithy/signature-v4': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.840.0': + dependencies: + '@aws-sdk/core': 3.840.0 + '@aws-sdk/nested-clients': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/property-provider': 4.0.4 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.840.0': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/util-arn-parser@3.804.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/types': 4.3.1 + '@smithy/util-endpoints': 3.0.6 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.804.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.840.0': + dependencies: + '@aws-sdk/types': 3.840.0 + '@smithy/types': 4.3.1 + bowser: 2.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.840.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.840.0 + '@aws-sdk/types': 3.840.0 + '@smithy/node-config-provider': 4.1.3 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.821.0': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@playwright/test@1.52.0': + dependencies: + playwright: 1.52.0 + + '@slack/logger@4.0.0': + dependencies: + '@types/node': 22.15.28 + + '@slack/types@2.14.0': {} + + '@slack/web-api@7.9.2': + dependencies: + '@slack/logger': 4.0.0 + '@slack/types': 2.14.0 + '@types/node': 22.15.28 + '@types/retry': 0.12.0 + axios: 1.9.0 + eventemitter3: 5.0.1 + form-data: 4.0.2 + is-electron: 2.2.2 + is-stream: 2.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + retry: 0.13.1 + transitivePeerDependencies: + - debug + + '@slack/webhook@7.0.5': + dependencies: + '@slack/types': 2.14.0 + '@types/node': 22.15.28 + axios: 1.9.0 + transitivePeerDependencies: + - debug + + '@smithy/abort-controller@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader-native@4.0.0': + dependencies: + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader@5.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/config-resolver@4.1.4': + dependencies: + '@smithy/node-config-provider': 4.1.3 + '@smithy/types': 4.3.1 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.4 + tslib: 2.8.1 + + '@smithy/core@3.6.0': + dependencies: + '@smithy/middleware-serde': 4.0.8 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-stream': 4.2.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.0.6': + dependencies: + '@smithy/node-config-provider': 4.1.3 + '@smithy/property-provider': 4.0.4 + '@smithy/types': 4.3.1 + '@smithy/url-parser': 4.0.4 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.0.4': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.3.1 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.0.4': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.1.2': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.0.4': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.0.4': + dependencies: + '@smithy/eventstream-codec': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.4': + dependencies: + '@smithy/protocol-http': 5.1.2 + '@smithy/querystring-builder': 4.0.4 + '@smithy/types': 4.3.1 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-blob-browser@4.0.4': + dependencies: + '@smithy/chunked-blob-reader': 5.0.0 + '@smithy/chunked-blob-reader-native': 4.0.0 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/hash-node@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-stream-node@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/md5-js@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.0.4': + dependencies: + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.1.13': + dependencies: + '@smithy/core': 3.6.0 + '@smithy/middleware-serde': 4.0.8 + '@smithy/node-config-provider': 4.1.3 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + '@smithy/url-parser': 4.0.4 + '@smithy/util-middleware': 4.0.4 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.1.14': + dependencies: + '@smithy/node-config-provider': 4.1.3 + '@smithy/protocol-http': 5.1.2 + '@smithy/service-error-classification': 4.0.6 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-retry': 4.0.6 + tslib: 2.8.1 + uuid: 9.0.1 + + '@smithy/middleware-serde@4.0.8': + dependencies: + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.1.3': + dependencies: + '@smithy/property-provider': 4.0.4 + '@smithy/shared-ini-file-loader': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.0.6': + dependencies: + '@smithy/abort-controller': 4.0.4 + '@smithy/protocol-http': 5.1.2 + '@smithy/querystring-builder': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/property-provider@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/protocol-http@5.1.2': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.0.6': + dependencies: + '@smithy/types': 4.3.1 + + '@smithy/shared-ini-file-loader@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/signature-v4@5.1.2': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.4 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.4.5': + dependencies: + '@smithy/core': 3.6.0 + '@smithy/middleware-endpoint': 4.1.13 + '@smithy/middleware-stack': 4.0.4 + '@smithy/protocol-http': 5.1.2 + '@smithy/types': 4.3.1 + '@smithy/util-stream': 4.2.2 + tslib: 2.8.1 + + '@smithy/types@4.3.1': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.0.4': + dependencies: + '@smithy/querystring-parser': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.0.21': + dependencies: + '@smithy/property-provider': 4.0.4 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + bowser: 2.11.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.0.21': + dependencies: + '@smithy/config-resolver': 4.1.4 + '@smithy/credential-provider-imds': 4.0.6 + '@smithy/node-config-provider': 4.1.3 + '@smithy/property-provider': 4.0.4 + '@smithy/smithy-client': 4.4.5 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.0.6': + dependencies: + '@smithy/node-config-provider': 4.1.3 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.0.4': + dependencies: + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/util-retry@4.0.6': + dependencies: + '@smithy/service-error-classification': 4.0.6 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@smithy/util-stream@4.2.2': + dependencies: + '@smithy/fetch-http-handler': 5.0.4 + '@smithy/node-http-handler': 4.0.6 + '@smithy/types': 4.3.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-waiter@4.0.6': + dependencies: + '@smithy/abort-controller': 4.0.4 + '@smithy/types': 4.3.1 + tslib: 2.8.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/node@22.15.28': + dependencies: + undici-types: 6.21.0 + + '@types/retry@0.12.0': {} + + '@types/uuid@9.0.8': {} + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + agent-base@7.1.3: {} + + arg@4.1.3: {} + + asynckit@0.4.0: {} + + axios@1.9.0: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + bowser@2.11.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@13.1.0: {} + + create-require@1.1.1: {} + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + delayed-stream@1.0.0: {} + + diff@4.0.2: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.1.2 + + follow-redirects@1.15.9: {} + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + fsevents@2.3.2: + optional: true + + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + gopd@1.2.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + indento@1.1.14: {} + + is-electron@2.2.2: {} + + is-stream@2.0.1: {} + + json2md@2.0.3: + dependencies: + indento: 1.1.14 + + make-error@1.3.6: {} + + math-intrinsics@1.1.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + ms@2.1.3: {} + + p-finally@1.0.0: {} + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + playwright-core@1.52.0: {} + + playwright-slack-report@1.1.93(@types/node@22.15.28)(typescript@5.8.3): + dependencies: + '@slack/web-api': 7.9.2 + '@slack/webhook': 7.0.5 + commander: 13.1.0 + https-proxy-agent: 7.0.6 + ts-node: 10.9.2(@types/node@22.15.28)(typescript@5.8.3) + zod: 3.25.42 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - supports-color + - typescript + + playwright@1.52.0: + dependencies: + playwright-core: 1.52.0 + optionalDependencies: + fsevents: 2.3.2 + + proxy-from-env@1.1.0: {} + + retry@0.13.1: {} + + strnum@1.1.2: {} + + ts-node@10.9.2(@types/node@22.15.28)(typescript@5.8.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': 22.15.28 + acorn: 8.14.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@2.8.1: {} + + typescript@5.8.3: {} + + undici-types@6.21.0: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + yn@3.1.1: {} + + zod@3.25.42: {} diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 000000000..97da637d9 --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,8029 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@icons-pack/react-simple-icons': + specifier: ^11.2.0 + version: 11.2.0(react@19.1.1) + lucide-react: + specifier: ^0.446.0 + version: 0.446.0(react@19.1.1) + mintlify: + specifier: ^4.0.459 + version: 4.2.123(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) + react-icons: + specifier: ^5.3.0 + version: 5.5.0(react@19.1.1) + +packages: + + '@alcalzone/ansi-tokenize@0.2.0': + resolution: {integrity: sha512-qI/5TaaaCZE4yeSZ83lu0+xi1r88JSxUjnH4OP/iZF7+KKZ75u3ee5isd0LxX+6N8U0npL61YrpbthILHB6BnA==} + engines: {node: '>=18'} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ark/schema@0.49.0': + resolution: {integrity: sha512-GphZBLpW72iS0v4YkeUtV3YIno35Gimd7+ezbPO9GwEi9kzdUrPVjvf6aXSBAfHikaFc/9pqZOpv3pOXnC71tw==} + + '@ark/util@0.49.0': + resolution: {integrity: sha512-/BtnX7oCjNkxi2vi6y1399b+9xd1jnCrDYhZ61f0a+3X8x8DxlK52VgEEzyuC2UQMPACIfYrmHkhD3lGt2GaMA==} + + '@asyncapi/parser@3.4.0': + resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} + + '@asyncapi/specs@6.10.0': + resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@icons-pack/react-simple-icons@11.2.0': + resolution: {integrity: sha512-jCJ+1Fe0yiBQGYSfhx8QGU/9o27t8J4Hw3mxHEI9vohRltLSi5CaPzO2fCQcMNeTrAUAm4j+yaDuAutskiKRjA==} + peerDependencies: + react: ^16.13 || ^17 || ^18 || ^19 + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inquirer/ansi@1.0.0': + resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.2.4': + resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.18': + resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.2.2': + resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.20': + resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.20': + resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} + engines: {node: '>=18'} + + '@inquirer/input@4.2.4': + resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.20': + resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.20': + resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.8.6': + resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.8': + resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.1.3': + resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.3.4': + resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@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 + + '@jsep-plugin/ternary@1.1.4': + resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==} + engines: {node: '>= 10.16.0'} + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@mintlify/cli@4.0.727': + resolution: {integrity: sha512-6iplgwOC9wK1FFdSFE9NX92qhxF0TkuZADf2rVkSR/A3MQ9LzTh9iKttRWD0q66pQ8l2kwOhzwqt/tW22ZLmcA==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@mintlify/common@1.0.537': + resolution: {integrity: sha512-Mqm9OuXhaL0mVxkbPZHTIYNH8cVZdh9lsi5GHSGl8U7Vc+qHfv0CS+fempV1RAg6zRBjdSwD5rh43RMrPJSl/Q==} + + '@mintlify/link-rot@3.0.674': + resolution: {integrity: sha512-QzbMAva0GdbBBG6R+pWmHrVzNdR08ug6e6a5Tnxk1NaNr8+/YR7cehu5xdAX31aO6n+CIv8Ot5HxzsqsY2vwtA==} + engines: {node: '>=18.0.0'} + + '@mintlify/mdx@2.0.11': + resolution: {integrity: sha512-yXwuM0BNCxNaJetPrh89c5Q2lhzU2al4QrOM3zLUdrPOdjOpPmv8ewcdiXV/qIhZDpl5Ll9k47dsz33bZjVWTg==} + peerDependencies: + '@radix-ui/react-popover': ^1.1.15 + react: ^18.3.1 + react-dom: ^18.3.1 + + '@mintlify/models@0.0.229': + resolution: {integrity: sha512-1P3R6dQFNzjTbmVDCQf/vAGFGOEUdUv6sCaJAmZCNWY2mhwgvDU/Oa2YLiNmVrAqnWDH1Pkz5nq+i7gClrdXgA==} + engines: {node: '>=18.0.0'} + + '@mintlify/openapi-parser@0.0.7': + resolution: {integrity: sha512-3ecbkzPbsnkKVZJypVL0H5pCTR7a4iLv4cP7zbffzAwy+vpH70JmPxNVpPPP62yLrdZlfNcMxu5xKeT7fllgMg==} + engines: {node: '>=18'} + + '@mintlify/prebuild@1.0.661': + resolution: {integrity: sha512-hcYLxhf53RV6hecJLIEdG7ajQuTtDj3vuoueeLmhcVXEDYkvKKa36EOk9/olLUDvjqsENnK601NmdmHPd80pJA==} + + '@mintlify/previewing@4.0.710': + resolution: {integrity: sha512-3SyO58i7kmR4W+UCcP9gq/wTKsJ0Vs+pudFnfJt5Qk1QIMTXbZGjC/ojaYDbGqSt+VOmIPwbGchQzZrAp1aXbA==} + engines: {node: '>=18.0.0'} + + '@mintlify/scraping@4.0.396': + resolution: {integrity: sha512-cPavXt7yrnyGLNb5QEY8C8anPfw9Tj8TL7CVE76Ey/+l7sae9inLd2f5E3vKYfWrqyIouxGmvA+pFuenOt66aw==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@mintlify/validation@0.1.471': + resolution: {integrity: sha512-lf4zp9sJspXmDA9HH9VaJfK4ll+BaaH9XxuU2SVNuploKjRKmpHYFfN9YI42pA2bda/X32rkqDZSRI+JHdQcNg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': + resolution: {integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@puppeteer/browsers@2.3.0': + resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} + engines: {node: '>=18'} + hasBin: true + + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@shikijs/core@3.13.0': + resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + + '@shikijs/engine-javascript@3.13.0': + resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} + + '@shikijs/engine-oniguruma@3.13.0': + resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} + + '@shikijs/langs@3.13.0': + resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} + + '@shikijs/themes@3.13.0': + resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} + + '@shikijs/transformers@3.13.0': + resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} + + '@shikijs/twoslash@3.13.0': + resolution: {integrity: sha512-OmNKNoZ8Hevt4VKQHfJL+hrsrqLSnW/Nz7RMutuBqXBCIYZWk80HnF9pcXEwRmy9MN0MGRmZCW2rDDP8K7Bxkw==} + peerDependencies: + typescript: '>=5.5.0' + + '@shikijs/types@3.13.0': + resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@sindresorhus/slugify@2.2.1': + resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} + engines: {node: '>=12'} + + '@sindresorhus/transliterate@1.6.0': + resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} + engines: {node: '>=12'} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@stoplight/better-ajv-errors@1.0.3': + resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} + engines: {node: ^12.20 || >= 14.13} + peerDependencies: + ajv: '>=8' + + '@stoplight/json-ref-readers@1.2.2': + resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} + engines: {node: '>=8.3.0'} + + '@stoplight/json-ref-resolver@3.1.6': + resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} + engines: {node: '>=8.3.0'} + + '@stoplight/json@3.21.0': + resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} + engines: {node: '>=8.3.0'} + + '@stoplight/ordered-object-literal@1.0.5': + resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} + engines: {node: '>=8'} + + '@stoplight/path@1.3.2': + resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} + engines: {node: '>=8'} + + '@stoplight/spectral-core@1.20.0': + resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-formats@1.8.2': + resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-functions@1.10.1': + resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-parsers@1.0.5': + resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-ref-resolver@1.0.5': + resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/spectral-runtime@1.1.4': + resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==} + engines: {node: ^16.20 || ^18.18 || >= 20.17} + + '@stoplight/types@13.20.0': + resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@13.6.0': + resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/types@14.1.1': + resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} + engines: {node: ^12.20 || >=14.13} + + '@stoplight/yaml-ast-parser@0.0.50': + resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} + + '@stoplight/yaml@4.3.0': + resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} + engines: {node: '>=10.8'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/es-aggregate-error@1.0.6': + resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/katex@0.16.7': + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/nlcst@2.0.3': + resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + + '@types/node@24.5.2': + resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==} + + '@types/react@19.1.13': + resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} + + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/urijs@1.19.25': + resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript/vfs@1.6.1': + resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==} + peerDependencies: + typescript: '*' + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + aggregate-error@4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-errors@3.0.0: + resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} + peerDependencies: + ajv: ^8.0.1 + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-escapes@7.1.1: + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + arktype@2.1.22: + resolution: {integrity: sha512-xdzl6WcAhrdahvRRnXaNwsipCgHuNoLobRqhiP8RjnfL9Gp947abGlo68GAIyLtxbD+MLzNyH2YR4kEqioMmYQ==} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-iterate@2.0.1: + resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + auto-bind@5.0.1: + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + avsc@5.7.9: + resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} + engines: {node: '>=0.11'} + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + b4a@1.7.2: + resolution: {integrity: sha512-DyUOdz+E8R6+sruDpQNOaV0y/dBbV6X/8ZkxrDcR0Ifc3BgKlpgG0VAtfOozA0eMtJO5GGe9FsZhueLs00pTww==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.7.0: + resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} + + bare-fs@4.4.4: + resolution: {integrity: sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.2: + resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.7.0: + resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.2.2: + resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chromium-bidi@0.6.3: + resolution: {integrity: sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==} + peerDependencies: + devtools-protocol: '*' + + clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@2.1.1: + resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + detect-port@1.6.1: + resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} + engines: {node: '>= 4.0.0'} + hasBin: true + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + devtools-protocol@0.0.1312386: + resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + + dns-socket@4.2.2: + resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} + engines: {node: '>=6'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.6.4: + resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} + engines: {node: '>=10.2.0'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-aggregate-error@1.0.14: + resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es-toolkit@1.39.10: + resolution: {integrity: sha512-E0iGnTtbDhkeczB0T+mxmoVlT4YNweEKBLq7oaU4p11mecdsZpNWOglI4895Vh4usbQ+LsJiuLuI2L0Vdmfm2w==} + + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + + estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + + estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + + estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-memoize@2.5.2: + resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + + favicons@7.2.0: + resolution: {integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==} + engines: {node: '>=14.0.0'} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} + engines: {node: '>=14.14'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gcd@0.0.1: + resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} + engines: {node: '>= 14'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + got@13.0.0: + resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} + engines: {node: '>=16'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hast-util-embedded@3.0.0: + resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + + hast-util-from-dom@5.0.1: + resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + + hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + + hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + + hast-util-from-parse5@8.0.3: + resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + + hast-util-has-property@3.0.0: + resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + + hast-util-is-body-ok-link@3.0.1: + resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + + hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + + hast-util-minify-whitespace@1.0.1: + resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + + hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + + hast-util-phrasing@3.0.1: + resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + + hast-util-to-estree@3.1.3: + resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-to-mdast@10.1.2: + resolution: {integrity: sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==} + + hast-util-to-string@3.0.1: + resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + + hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@9.0.1: + resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ink-spinner@5.0.0: + resolution: {integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==} + engines: {node: '>=14.16'} + peerDependencies: + ink: '>=4.0.0' + react: '>=18.0.0' + + ink@6.3.1: + resolution: {integrity: sha512-3wGwITGrzL6rkWsi2gEKzgwdafGn4ZYd3u4oRp+sOPvfoxEHlnoB5Vnk9Uy5dMRUhDOqF3hqr4rLQ4lEzBc2sQ==} + engines: {node: '>=20'} + peerDependencies: + '@types/react': '>=19.0.0' + react: '>=19.0.0' + react-devtools-core: ^6.1.2 + peerDependenciesMeta: + '@types/react': + optional: true + react-devtools-core: + optional: true + + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + inquirer@12.9.6: + resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-in-ci@2.0.0: + resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} + engines: {node: '>=20'} + hasBin: true + + is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-online@10.0.0: + resolution: {integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==} + engines: {node: '>=14.16'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsep@1.4.0: + resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} + engines: {node: '>= 10.16.0'} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonc-parser@2.2.1: + resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsonpath-plus@10.3.0: + resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} + engines: {node: '>=18.0.0'} + hasBin: true + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + katex@0.16.22: + resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + hasBin: true + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + lcm@0.0.3: + resolution: {integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + leven@4.1.0: + resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lodash.topath@4.5.2: + resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lucide-react@0.446.0: + resolution: {integrity: sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + + markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + + mdast@3.0.0: + resolution: {integrity: sha512-xySmf8g4fPKMeC07jXGz971EkLbWAJ83s4US2Tj9lEdnZ142UP5grN73H1Xd3HzrdbU5o9GYYP/y8F9ZSwLE9g==} + deprecated: '`mdast` was renamed to `remark`' + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + + micromark-extension-mdx-expression@3.0.1: + resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + + micromark-extension-mdx-jsx@3.0.2: + resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} + + micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + + micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + + micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-mdx-expression@2.0.3: + resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-events-to-acorn@2.0.3: + resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mintlify@4.2.123: + resolution: {integrity: sha512-5489Uv0O0ryv5lY0rlHB1JszZWUd8/S+4g4UwQ1adXzKXURAz1D2ZW694hMivnAHebhlEylb9neQ6h38WdapSQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neotraverse@0.6.18: + resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} + engines: {node: '>= 10'} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + next-mdx-remote-client@1.1.2: + resolution: {integrity: sha512-LZJxBU420dTZsbWOrNYZXkahGJu8lNKxLTrQrZl4JUsKeFtp91yA78dHMTfOcp7UAud3txhM1tayyoKFq4tw7A==} + engines: {node: '>=18.18.0'} + peerDependencies: + react: '>= 18.3.0 < 19.0.0' + react-dom: '>= 18.3.0 < 19.0.0' + + nimma@0.2.3: + resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} + engines: {node: ^12.20 || >=14.13} + + nlcst-to-string@4.0.0: + resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} + engines: {node: '>=14.16'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-any@4.0.0: + resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==} + engines: {node: '>=12.20'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-some@6.0.0: + resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==} + engines: {node: '>=12.20'} + + p-timeout@5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-latin@7.0.0: + resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + patch-console@2.0.0: + resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pony-cause@1.1.1: + resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} + engines: {node: '>=12.0.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + public-ip@5.0.0: + resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==} + engines: {node: ^14.13.1 || >=16.0.0} + + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + puppeteer-core@22.15.0: + resolution: {integrity: sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==} + engines: {node: '>=18'} + + puppeteer@22.15.0: + resolution: {integrity: sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==} + engines: {node: '>=18'} + deprecated: < 24.10.2 is no longer supported + hasBin: true + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-icons@5.5.0: + resolution: {integrity: sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==} + peerDependencies: + react: '*' + + react-reconciler@0.32.0: + resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^19.1.0 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + + rehype-minify-whitespace@6.0.2: + resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==} + + rehype-parse@9.0.1: + resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + + remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + + remark-mdx-remove-esm@1.2.1: + resolution: {integrity: sha512-Vz1GKmRR9u7ij8TTf88DK8dFc/mVror9YUJekl1uP+S0sTzHxGdszJMeBbh96aIR+ZiI2QRKHu2UsV+/pWj7uQ==} + peerDependencies: + unified: ^11 + + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-smartypants@3.0.2: + resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} + engines: {node: '>=16.0.0'} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + + remark@15.0.1: + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + retext-latin@4.0.0: + resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + + retext-smartypants@6.2.0: + resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + + retext-stringify@4.0.0: + resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + + retext@9.0.0: + resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-async@4.0.6: + resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@1.1.1: + resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + serialize-error@12.0.0: + resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} + engines: {node: '>=18'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shiki@3.13.0: + resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-eval@1.0.1: + resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==} + engines: {node: '>=12'} + + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + engines: {node: '>=10.2.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + streamx@2.23.0: + resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} + + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trim-trailing-lines@2.1.0: + resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + twoslash-protocol@0.3.4: + resolution: {integrity: sha512-HHd7lzZNLUvjPzG/IE6js502gEzLC1x7HaO1up/f72d8G8ScWAs9Yfa97igelQRDl5h9tGcdFsRp+lNVre1EeQ==} + + twoslash@0.3.4: + resolution: {integrity: sha512-RtJURJlGRxrkJmTcZMjpr7jdYly1rfgpujJr1sBM9ch7SKVht/SjFk23IOAyvwT1NLCk+SJiMrvW4rIAUM2Wug==} + peerDependencies: + typescript: ^5.5.0 + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + undici-types@7.12.0: + resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-builder@4.0.0: + resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} + + unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-map@4.0.0: + resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==} + + unist-util-modify-children@4.0.0: + resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + + unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + + unist-util-remove@4.0.0: + resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-children@3.0.0: + resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + urijs@1.19.11: + resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + + urlpattern-polyfill@10.0.0: + resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + + vfile-matter@5.0.1: + resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} + + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} + + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@alcalzone/ansi-tokenize@0.2.0': + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + '@alloc/quick-lru@5.2.0': {} + + '@ark/schema@0.49.0': + dependencies: + '@ark/util': 0.49.0 + + '@ark/util@0.49.0': {} + + '@asyncapi/parser@3.4.0': + dependencies: + '@asyncapi/specs': 6.10.0 + '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 + '@stoplight/json': 3.21.0 + '@stoplight/json-ref-readers': 1.2.2 + '@stoplight/json-ref-resolver': 3.1.6 + '@stoplight/spectral-core': 1.20.0 + '@stoplight/spectral-functions': 1.10.1 + '@stoplight/spectral-parsers': 1.0.5 + '@stoplight/spectral-ref-resolver': 1.0.5 + '@stoplight/types': 13.20.0 + '@types/json-schema': 7.0.15 + '@types/urijs': 1.19.25 + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) + avsc: 5.7.9 + js-yaml: 4.1.0 + jsonpath-plus: 10.3.0 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + + '@asyncapi/specs@6.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.27.1': {} + + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/dom': 1.7.4 + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + + '@floating-ui/utils@0.2.10': {} + + '@icons-pack/react-simple-icons@11.2.0(react@19.1.1)': + dependencies: + react: 19.1.1 + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.5.0 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@inquirer/ansi@1.0.0': {} + + '@inquirer/checkbox@4.2.4(@types/node@24.5.2)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/confirm@5.1.18(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/core@10.2.2(@types/node@24.5.2)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/editor@4.2.20(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/external-editor': 1.0.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/expand@4.0.20(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/external-editor@1.0.2(@types/node@24.5.2)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/figures@1.0.13': {} + + '@inquirer/input@4.2.4(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/number@3.0.20(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/password@4.0.20(@types/node@24.5.2)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/prompts@7.8.6(@types/node@24.5.2)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@24.5.2) + '@inquirer/confirm': 5.1.18(@types/node@24.5.2) + '@inquirer/editor': 4.2.20(@types/node@24.5.2) + '@inquirer/expand': 4.0.20(@types/node@24.5.2) + '@inquirer/input': 4.2.4(@types/node@24.5.2) + '@inquirer/number': 3.0.20(@types/node@24.5.2) + '@inquirer/password': 4.0.20(@types/node@24.5.2) + '@inquirer/rawlist': 4.1.8(@types/node@24.5.2) + '@inquirer/search': 3.1.3(@types/node@24.5.2) + '@inquirer/select': 4.3.4(@types/node@24.5.2) + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/rawlist@4.1.8(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/search@3.1.3(@types/node@24.5.2)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/select@4.3.4(@types/node@24.5.2)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@24.5.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 24.5.2 + + '@inquirer/type@3.0.8(@types/node@24.5.2)': + optionalDependencies: + '@types/node': 24.5.2 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.2 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@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 + + '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)': + dependencies: + jsep: 1.4.0 + + '@leichtgewicht/ip-codec@2.0.5': {} + + '@mdx-js/mdx@3.1.1': + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdx': 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.1.13 + react: 19.1.1 + + '@mintlify/cli@4.0.727(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2)': + dependencies: + '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/link-rot': 3.0.674(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/models': 0.0.229 + '@mintlify/prebuild': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/previewing': 4.0.710(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + chalk: 5.6.2 + detect-port: 1.6.1 + fs-extra: 11.3.2 + gray-matter: 4.0.3 + ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) + inquirer: 12.9.6(@types/node@24.5.2) + js-yaml: 4.1.0 + react: 19.1.1 + semver: 7.7.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/node' + - '@types/react' + - bare-buffer + - bufferutil + - debug + - encoding + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + '@mintlify/common@1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + dependencies: + '@asyncapi/parser': 3.4.0 + '@mintlify/mdx': 2.0.11(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/models': 0.0.229 + '@mintlify/openapi-parser': 0.0.7 + '@mintlify/validation': 0.1.471 + '@sindresorhus/slugify': 2.2.1 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + estree-walker: 3.0.3 + gray-matter: 4.0.3 + hast-util-from-html: 2.0.3 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + js-yaml: 4.1.0 + lodash: 4.17.21 + mdast: 3.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.1.0 + mdast-util-mdx: 3.0.0 + mdast-util-mdx-jsx: 3.2.0 + micromark-extension-gfm: 3.0.0 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdxjs: 3.0.0 + openapi-types: 12.1.3 + postcss: 8.5.6 + remark: 15.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + remark-math: 6.0.0 + remark-mdx: 3.1.1 + remark-stringify: 11.0.0 + tailwindcss: 3.4.17 + unified: 11.0.5 + unist-builder: 4.0.0 + unist-util-map: 4.0.0 + unist-util-remove: 4.0.0 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.3 + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/react' + - debug + - encoding + - react + - react-dom + - supports-color + - ts-node + - typescript + + '@mintlify/link-rot@3.0.674(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + dependencies: + '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/prebuild': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/previewing': 4.0.710(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + fs-extra: 11.3.2 + unist-util-visit: 4.1.2 + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/react' + - bare-buffer + - bufferutil + - debug + - encoding + - react + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + '@mintlify/mdx@2.0.11(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + dependencies: + '@radix-ui/react-popover': 1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@shikijs/transformers': 3.13.0 + '@shikijs/twoslash': 3.13.0(typescript@5.9.2) + hast-util-to-string: 3.0.1 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.1.0 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-to-hast: 13.2.0 + next-mdx-remote-client: 1.1.2(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(unified@11.0.5) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + rehype-katex: 7.0.1 + remark-gfm: 4.0.1 + remark-math: 6.0.0 + remark-smartypants: 3.0.2 + shiki: 3.13.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - '@types/react' + - supports-color + - typescript + + '@mintlify/models@0.0.229': + dependencies: + axios: 1.12.2 + openapi-types: 12.1.3 + transitivePeerDependencies: + - debug + + '@mintlify/openapi-parser@0.0.7': + dependencies: + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-formats: 3.0.1(ajv@8.17.1) + jsonpointer: 5.0.1 + leven: 4.1.0 + yaml: 2.8.1 + + '@mintlify/prebuild@1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + dependencies: + '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/openapi-parser': 0.0.7 + '@mintlify/scraping': 4.0.396(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + chalk: 5.6.2 + favicons: 7.2.0 + fs-extra: 11.3.2 + gray-matter: 4.0.3 + js-yaml: 4.1.0 + mdast: 3.0.0 + openapi-types: 12.1.3 + unist-util-visit: 4.1.2 + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/react' + - bare-buffer + - bufferutil + - debug + - encoding + - react + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + '@mintlify/previewing@4.0.710(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2)': + dependencies: + '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/prebuild': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + better-opn: 3.0.2 + chalk: 5.6.2 + chokidar: 3.6.0 + express: 4.21.2 + fs-extra: 11.3.2 + got: 13.0.0 + gray-matter: 4.0.3 + ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) + ink-spinner: 5.0.0(ink@6.3.1(@types/react@19.1.13)(react@19.1.1))(react@19.1.1) + is-online: 10.0.0 + js-yaml: 4.1.0 + mdast: 3.0.0 + openapi-types: 12.1.3 + react: 19.1.1 + socket.io: 4.8.1 + tar: 6.2.1 + unist-util-visit: 4.1.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/react' + - bare-buffer + - bufferutil + - debug + - encoding + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + '@mintlify/scraping@4.0.396(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': + dependencies: + '@mintlify/common': 1.0.537(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/openapi-parser': 0.0.7 + fs-extra: 11.3.2 + hast-util-to-mdast: 10.1.2 + js-yaml: 4.1.0 + mdast-util-mdx-jsx: 3.2.0 + neotraverse: 0.6.18 + puppeteer: 22.15.0(typescript@5.9.2) + rehype-parse: 9.0.1 + remark-gfm: 4.0.1 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + yargs: 17.7.2 + zod: 3.25.76 + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/react' + - bare-buffer + - bufferutil + - debug + - encoding + - react + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + '@mintlify/validation@0.1.471': + dependencies: + '@mintlify/models': 0.0.229 + arktype: 2.1.22 + lcm: 0.0.3 + lodash: 4.17.21 + openapi-types: 12.1.3 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - debug + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': + dependencies: + fast-deep-equal: 3.1.3 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@puppeteer/browsers@2.3.0': + dependencies: + debug: 4.4.3 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.2 + tar-fs: 3.1.1 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - react-native-b4a + - supports-color + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-focus-scope@1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1) + aria-hidden: 1.2.6 + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-popper@1.2.8(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/rect': 1.1.1 + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-portal@1.1.9(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-presence@1.1.5(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-primitive@2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/rect@1.1.1': {} + + '@shikijs/core@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-oniguruma@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/themes@3.13.0': + dependencies: + '@shikijs/types': 3.13.0 + + '@shikijs/transformers@3.13.0': + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 + + '@shikijs/twoslash@3.13.0(typescript@5.9.2)': + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 + twoslash: 0.3.4(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@shikijs/types@3.13.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + + '@sindresorhus/is@5.6.0': {} + + '@sindresorhus/slugify@2.2.1': + dependencies: + '@sindresorhus/transliterate': 1.6.0 + escape-string-regexp: 5.0.0 + + '@sindresorhus/transliterate@1.6.0': + dependencies: + escape-string-regexp: 5.0.0 + + '@socket.io/component-emitter@3.1.2': {} + + '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@stoplight/json-ref-readers@1.2.2': + dependencies: + node-fetch: 2.6.7 + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + + '@stoplight/json-ref-resolver@3.1.6': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/path': 1.3.2 + '@stoplight/types': 13.20.0 + '@types/urijs': 1.19.25 + dependency-graph: 0.11.0 + fast-memoize: 2.5.2 + immer: 9.0.21 + lodash: 4.17.21 + tslib: 2.8.1 + urijs: 1.19.11 + + '@stoplight/json@3.21.0': + dependencies: + '@stoplight/ordered-object-literal': 1.0.5 + '@stoplight/path': 1.3.2 + '@stoplight/types': 13.20.0 + jsonc-parser: 2.2.1 + lodash: 4.17.21 + safe-stable-stringify: 1.1.1 + + '@stoplight/ordered-object-literal@1.0.5': {} + + '@stoplight/path@1.3.2': {} + + '@stoplight/spectral-core@1.20.0': + dependencies: + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/json': 3.21.0 + '@stoplight/path': 1.3.2 + '@stoplight/spectral-parsers': 1.0.5 + '@stoplight/spectral-ref-resolver': 1.0.5 + '@stoplight/spectral-runtime': 1.1.4 + '@stoplight/types': 13.6.0 + '@types/es-aggregate-error': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) + es-aggregate-error: 1.0.14 + jsonpath-plus: 10.3.0 + lodash: 4.17.21 + lodash.topath: 4.5.2 + minimatch: 3.1.2 + nimma: 0.2.3 + pony-cause: 1.1.1 + simple-eval: 1.0.1 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-formats@1.8.2': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/spectral-core': 1.20.0 + '@types/json-schema': 7.0.15 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-functions@1.10.1': + dependencies: + '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1) + '@stoplight/json': 3.21.0 + '@stoplight/spectral-core': 1.20.0 + '@stoplight/spectral-formats': 1.8.2 + '@stoplight/spectral-runtime': 1.1.4 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-errors: 3.0.0(ajv@8.17.1) + ajv-formats: 2.1.1(ajv@8.17.1) + lodash: 4.17.21 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-parsers@1.0.5': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/types': 14.1.1 + '@stoplight/yaml': 4.3.0 + tslib: 2.8.1 + + '@stoplight/spectral-ref-resolver@1.0.5': + dependencies: + '@stoplight/json-ref-readers': 1.2.2 + '@stoplight/json-ref-resolver': 3.1.6 + '@stoplight/spectral-runtime': 1.1.4 + dependency-graph: 0.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@stoplight/spectral-runtime@1.1.4': + dependencies: + '@stoplight/json': 3.21.0 + '@stoplight/path': 1.3.2 + '@stoplight/types': 13.20.0 + abort-controller: 3.0.0 + lodash: 4.17.21 + node-fetch: 2.7.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + '@stoplight/types@13.20.0': + dependencies: + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 + + '@stoplight/types@13.6.0': + dependencies: + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 + + '@stoplight/types@14.1.1': + dependencies: + '@types/json-schema': 7.0.15 + utility-types: 3.11.0 + + '@stoplight/yaml-ast-parser@0.0.50': {} + + '@stoplight/yaml@4.3.0': + dependencies: + '@stoplight/ordered-object-literal': 1.0.5 + '@stoplight/types': 14.1.1 + '@stoplight/yaml-ast-parser': 0.0.50 + tslib: 2.8.1 + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@tootallnate/quickjs-emscripten@0.23.0': {} + + '@types/cors@2.8.19': + dependencies: + '@types/node': 24.5.2 + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/es-aggregate-error@1.0.6': + dependencies: + '@types/node': 24.5.2 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.8 + + '@types/estree@1.0.8': {} + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/http-cache-semantics@4.0.4': {} + + '@types/json-schema@7.0.15': {} + + '@types/katex@0.16.7': {} + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdx@2.0.13': {} + + '@types/ms@2.1.0': {} + + '@types/nlcst@2.0.3': + dependencies: + '@types/unist': 3.0.3 + + '@types/node@24.5.2': + dependencies: + undici-types: 7.12.0 + + '@types/react@19.1.13': + dependencies: + csstype: 3.1.3 + + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + + '@types/urijs@1.19.25': {} + + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 24.5.2 + optional: true + + '@typescript/vfs@1.6.1(typescript@5.9.2)': + dependencies: + debug: 4.4.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@ungap/structured-clone@1.3.0': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + address@1.2.2: {} + + agent-base@7.1.4: {} + + aggregate-error@4.0.1: + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-errors@3.0.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@7.1.1: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + arktype@2.1.22: + dependencies: + '@ark/schema': 0.49.0 + '@ark/util': 0.49.0 + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-flatten@1.1.1: {} + + array-iterate@2.0.1: {} + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + astring@1.9.0: {} + + async-function@1.0.0: {} + + asynckit@0.4.0: {} + + auto-bind@5.0.1: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + avsc@5.7.9: {} + + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + b4a@1.7.2: {} + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + bare-events@2.7.0: {} + + bare-fs@4.4.4: + dependencies: + bare-events: 2.7.0 + bare-path: 3.0.0 + bare-stream: 2.7.0(bare-events@2.7.0) + bare-url: 2.2.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - react-native-b4a + optional: true + + bare-os@3.6.2: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.2 + optional: true + + bare-stream@2.7.0(bare-events@2.7.0): + dependencies: + streamx: 2.23.0 + optionalDependencies: + bare-events: 2.7.0 + transitivePeerDependencies: + - react-native-b4a + optional: true + + bare-url@2.2.2: + dependencies: + bare-path: 3.0.0 + optional: true + + base64-js@1.5.1: {} + + base64id@2.0.0: {} + + basic-ftp@5.0.5: {} + + better-opn@3.0.2: + dependencies: + open: 8.4.2 + + binary-extensions@2.3.0: {} + + body-parser@1.20.3: + 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.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-crc32@0.2.13: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bytes@3.1.2: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.1.0 + responselike: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + ccount@2.0.1: {} + + chalk@5.6.2: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chardet@2.1.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: {} + + chromium-bidi@0.6.3(devtools-protocol@0.0.1312386): + dependencies: + devtools-protocol: 0.0.1312386 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.23.8 + + clean-stack@4.2.0: + dependencies: + escape-string-regexp: 5.0.0 + + cli-boxes@3.0.0: {} + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-spinners@2.9.2: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + + collapse-white-space@2.1.0: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@4.1.1: {} + + commander@8.3.0: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-to-spaces@2.0.1: {} + + cookie-signature@1.0.6: {} + + cookie@0.7.1: {} + + cookie@0.7.2: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@9.0.0(typescript@5.9.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.2 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.3: {} + + data-uri-to-buffer@6.0.2: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + dependency-graph@0.11.0: {} + + dequal@2.0.3: {} + + destroy@1.2.0: {} + + detect-libc@2.1.1: {} + + detect-node-es@1.1.0: {} + + detect-port@1.6.1: + dependencies: + address: 1.2.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + devtools-protocol@0.0.1312386: {} + + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + dns-packet@5.6.1: + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + + dns-socket@4.2.2: + dependencies: + dns-packet: 5.6.1 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + emoji-regex@10.5.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + engine.io-parser@5.2.3: {} + + engine.io@6.6.4: + dependencies: + '@types/cors': 2.8.19 + '@types/node': 24.5.2 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.7.2 + cors: 2.8.5 + debug: 4.3.7 + engine.io-parser: 5.2.3 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + entities@6.0.1: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-aggregate-error@1.0.14: + dependencies: + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + set-function-name: 2.0.2 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es-toolkit@1.39.10: {} + + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + '@types/estree': 1.0.8 + + estree-util-build-jsx@3.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + events-universal@1.0.1: + dependencies: + bare-events: 2.7.0 + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + 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.0 + 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.13.0 + 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.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + + extend@3.0.2: {} + + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-memoize@2.5.2: {} + + fast-uri@3.1.0: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fault@2.0.1: + dependencies: + format: 0.2.2 + + favicons@7.2.0: + dependencies: + escape-html: 1.0.3 + sharp: 0.33.5 + xml2js: 0.6.2 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data-encoder@2.1.4: {} + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + format@0.2.2: {} + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gcd@0.0.1: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + + get-stream@6.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-uri@6.0.5: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + got@13.0.0: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.11: {} + + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + + has-bigints@1.1.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-embedded@3.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-is-element: 3.0.0 + + hast-util-from-dom@5.0.1: + dependencies: + '@types/hast': 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.1.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-body-ok-link@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-minify-whitespace@1.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.0 + + hast-util-parse-selector@4.0.0: + dependencies: + '@types/hast': 3.0.4 + + hast-util-phrasing@3.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + + hast-util-to-estree@3.1.3: + dependencies: + '@types/estree': 1.0.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.17 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.17 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-mdast@10.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + hast-util-phrasing: 3.0.1 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hast-util-whitespace: 3.0.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-hast: 13.2.0 + mdast-util-to-string: 4.0.0 + rehype-minify-whitespace: 6.0.2 + trim-trailing-lines: 2.1.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + + hast-util-to-string@3.0.1: + dependencies: + '@types/hast': 3.0.4 + + hast-util-to-text@4.0.2: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@9.0.1: + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + + html-void-elements@3.0.0: {} + + http-cache-semantics@4.2.0: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + immer@9.0.21: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + indent-string@5.0.0: {} + + inherits@2.0.4: {} + + ink-spinner@5.0.0(ink@6.3.1(@types/react@19.1.13)(react@19.1.1))(react@19.1.1): + dependencies: + cli-spinners: 2.9.2 + ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + + ink@6.3.1(@types/react@19.1.13)(react@19.1.1): + dependencies: + '@alcalzone/ansi-tokenize': 0.2.0 + ansi-escapes: 7.1.1 + ansi-styles: 6.2.3 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 4.0.0 + code-excerpt: 4.0.0 + es-toolkit: 1.39.10 + indent-string: 5.0.0 + is-in-ci: 2.0.0 + patch-console: 2.0.0 + react: 19.1.1 + react-reconciler: 0.32.0(react@19.1.1) + signal-exit: 3.0.7 + slice-ansi: 7.1.2 + stack-utils: 2.0.6 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + ws: 8.18.3 + yoga-layout: 3.2.1 + optionalDependencies: + '@types/react': 19.1.13 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + inline-style-parser@0.2.4: {} + + inquirer@12.9.6(@types/node@24.5.2): + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@24.5.2) + '@inquirer/prompts': 7.8.6(@types/node@24.5.2) + '@inquirer/type': 3.0.8(@types/node@24.5.2) + mute-stream: 2.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 24.5.2 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + ip-address@10.0.1: {} + + ip-regex@4.3.0: {} + + ipaddr.js@1.9.1: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.4: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-extendable@0.1.1: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.4.0 + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-in-ci@2.0.0: {} + + is-ip@3.1.0: + dependencies: + ip-regex: 4.3.0 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-online@10.0.0: + dependencies: + got: 12.6.1 + p-any: 4.0.0 + p-timeout: 5.1.0 + public-ip: 5.0.0 + + is-plain-obj@4.1.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.7: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsep@1.4.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@1.0.0: {} + + jsonc-parser@2.2.1: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpath-plus@10.3.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 + + jsonpointer@5.0.1: {} + + katex@0.16.22: + dependencies: + commander: 8.3.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kind-of@6.0.3: {} + + lcm@0.0.3: + dependencies: + gcd: 0.0.1 + + leven@3.1.0: {} + + leven@4.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lodash.topath@4.5.2: {} + + lodash@4.17.21: {} + + longest-streak@3.1.0: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lowercase-keys@3.0.0: {} + + lru-cache@10.4.3: {} + + lru-cache@7.18.3: {} + + lucide-react@0.446.0(react@19.1.1): + dependencies: + react: 19.1.1 + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-frontmatter@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + + mdast@3.0.0: {} + + media-typer@0.3.0: {} + + merge-descriptors@1.0.3: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + '@types/katex': 0.16.7 + devlop: 1.1.0 + katex: 0.16.22 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + '@types/estree': 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + '@types/estree': 1.0.8 + '@types/unist': 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mintlify@4.2.123(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2): + dependencies: + '@mintlify/cli': 4.0.727(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@24.5.2)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) + transitivePeerDependencies: + - '@radix-ui/react-popover' + - '@types/node' + - '@types/react' + - bare-buffer + - bufferutil + - debug + - encoding + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + mitt@3.0.1: {} + + mkdirp@1.0.4: {} + + ms@2.0.0: {} + + ms@2.1.3: {} + + mute-stream@2.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + negotiator@0.6.3: {} + + neotraverse@0.6.18: {} + + netmask@2.0.2: {} + + next-mdx-remote-client@1.1.2(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(unified@11.0.5): + dependencies: + '@babel/code-frame': 7.27.1 + '@mdx-js/mdx': 3.1.1 + '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + remark-mdx-remove-esm: 1.2.1(unified@11.0.5) + serialize-error: 12.0.0 + vfile: 6.0.3 + vfile-matter: 5.0.1 + transitivePeerDependencies: + - '@types/react' + - supports-color + - unified + + nimma@0.2.3: + dependencies: + '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) + '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0) + astring: 1.9.0 + jsep: 1.4.0 + optionalDependencies: + jsonpath-plus: 10.3.0 + lodash.topath: 4.5.2 + + nlcst-to-string@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + normalize-path@3.0.0: {} + + normalize-url@8.1.0: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + openapi-types@12.1.3: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-any@4.0.0: + dependencies: + p-cancelable: 3.0.0 + p-some: 6.0.0 + + p-cancelable@3.0.0: {} + + p-some@6.0.0: + dependencies: + aggregate-error: 4.0.1 + p-cancelable: 3.0.0 + + p-timeout@5.1.0: {} + + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-latin@7.0.0: + dependencies: + '@types/nlcst': 2.0.3 + '@types/unist': 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + parseurl@1.3.3: {} + + patch-console@2.0.0: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} + + pend@1.2.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pirates@4.0.7: {} + + pony-cause@1.1.1: {} + + possible-typed-array-names@1.1.0: {} + + postcss-import@15.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.1.0(postcss@8.5.6): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.6): + dependencies: + lilconfig: 3.1.3 + yaml: 2.8.1 + optionalDependencies: + postcss: 8.5.6 + + postcss-nested@6.2.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + progress@2.0.3: {} + + property-information@7.1.0: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + public-ip@5.0.0: + dependencies: + dns-socket: 4.2.2 + got: 12.6.1 + is-ip: 3.1.0 + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + puppeteer-core@22.15.0: + dependencies: + '@puppeteer/browsers': 2.3.0 + chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) + debug: 4.4.3 + devtools-protocol: 0.0.1312386 + ws: 8.18.3 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - utf-8-validate + + puppeteer@22.15.0(typescript@5.9.2): + dependencies: + '@puppeteer/browsers': 2.3.0 + cosmiconfig: 9.0.0(typescript@5.9.2) + devtools-protocol: 0.0.1312386 + puppeteer-core: 22.15.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - typescript + - utf-8-validate + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + react-dom@18.3.1(react@19.1.1): + dependencies: + loose-envify: 1.4.0 + react: 19.1.1 + scheduler: 0.23.2 + + react-icons@5.5.0(react@19.1.1): + dependencies: + react: 19.1.1 + + react-reconciler@0.32.0(react@19.1.1): + dependencies: + react: 19.1.1 + scheduler: 0.26.0 + + react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.1.1): + dependencies: + react: 19.1.1 + react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.1.1): + dependencies: + react: 19.1.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.1.1): + dependencies: + get-nonce: 1.0.1 + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + react@19.1.1: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + recma-build-jsx@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + rehype-katex@7.0.1: + dependencies: + '@types/hast': 3.0.4 + '@types/katex': 0.16.7 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.22 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.3 + + rehype-minify-whitespace@6.0.2: + dependencies: + '@types/hast': 3.0.4 + hast-util-minify-whitespace: 1.0.1 + + rehype-parse@9.0.1: + dependencies: + '@types/hast': 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.8 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + remark-frontmatter@5.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-math@6.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx-remove-esm@1.2.1(unified@11.0.5): + dependencies: + '@types/mdast': 4.0.4 + mdast-util-mdxjs-esm: 2.0.1 + unified: 11.0.5 + unist-util-remove: 4.0.0 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + '@types/mdast': 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retext-latin@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.0.0 + + retext-stringify@4.0.0: + dependencies: + '@types/nlcst': 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + '@types/nlcst': 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + reusify@1.1.0: {} + + run-async@4.0.6: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-stable-stringify@1.1.1: {} + + safer-buffer@2.1.2: {} + + sax@1.4.1: {} + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + scheduler@0.26.0: {} + + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + + semver@7.7.2: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-error@12.0.0: + dependencies: + type-fest: 4.41.0 + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + setprototypeof@1.2.0: {} + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.1.1 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@3.13.0: + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/engine-javascript': 3.13.0 + '@shikijs/engine-oniguruma': 3.13.0 + '@shikijs/langs': 3.13.0 + '@shikijs/themes': 3.13.0 + '@shikijs/types': 3.13.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-eval@1.0.1: + dependencies: + jsep: 1.4.0 + + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + smart-buffer@4.2.0: {} + + socket.io-adapter@2.5.5: + dependencies: + debug: 4.3.7 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4: + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + socket.io@4.8.1: + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7 + engine.io: 6.6.4 + socket.io-adapter: 2.5.5 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + + socks@2.8.7: + dependencies: + ip-address: 10.0.1 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true + + source-map@0.7.6: {} + + space-separated-tokens@2.0.2: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + statuses@2.0.1: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + streamx@2.23.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + transitivePeerDependencies: + - react-native-b4a + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-bom-string@1.0.0: {} + + style-to-js@1.1.17: + dependencies: + style-to-object: 1.0.9 + + style-to-object@1.0.9: + dependencies: + inline-style-parser: 0.2.4 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + supports-preserve-symlinks-flag@1.0.0: {} + + tailwindcss@3.4.17: + 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.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.1.0(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6) + postcss-nested: 6.2.0(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tar-fs@3.1.1: + dependencies: + pump: 3.0.3 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.4.4 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer + - react-native-b4a + + tar-stream@3.1.7: + dependencies: + b4a: 1.7.2 + fast-fifo: 1.3.2 + streamx: 2.23.0 + transitivePeerDependencies: + - react-native-b4a + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + text-decoder@1.2.3: + dependencies: + b4a: 1.7.2 + transitivePeerDependencies: + - react-native-b4a + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + through@2.3.8: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + trim-lines@3.0.1: {} + + trim-trailing-lines@2.1.0: {} + + trough@2.2.0: {} + + ts-interface-checker@0.1.13: {} + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + twoslash-protocol@0.3.4: {} + + twoslash@0.3.4(typescript@5.9.2): + dependencies: + '@typescript/vfs': 1.6.1(typescript@5.9.2) + twoslash-protocol: 0.3.4 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + type-fest@4.41.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript@5.9.2: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + undici-types@7.12.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-builder@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-find-after@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-is@5.2.1: + dependencies: + '@types/unist': 2.0.11 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-map@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-modify-children@4.0.0: + dependencies: + '@types/unist': 3.0.3 + array-iterate: 2.0.1 + + unist-util-position-from-estree@2.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-visit: 5.0.0 + + unist-util-remove@4.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@5.1.3: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@4.1.2: + dependencies: + '@types/unist': 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + urijs@1.19.11: {} + + urlpattern-polyfill@10.0.0: {} + + use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.1.1): + dependencies: + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + use-sidecar@1.1.3(@types/react@19.1.13)(react@19.1.1): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + util-deprecate@1.0.2: {} + + utility-types@3.11.0: {} + + utils-merge@1.0.1: {} + + vary@1.1.2: {} + + vfile-location@5.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 + + vfile-matter@5.0.1: + dependencies: + vfile: 6.0.3 + yaml: 2.8.1 + + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + + web-namespaces@2.0.1: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.1.2 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + ws@8.17.1: {} + + ws@8.18.3: {} + + xml2js@0.6.2: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yaml@2.8.1: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yoctocolors-cjs@2.1.3: {} + + yoga-layout@3.2.1: {} + + zod-to-json-schema@3.24.6(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.23.8: {} + + zod@3.25.76: {} + + zwitch@2.0.4: {} diff --git a/integrations/langgraph/typescript/examples/pnpm-lock.yaml b/integrations/langgraph/typescript/examples/pnpm-lock.yaml new file mode 100644 index 000000000..7a1da5201 --- /dev/null +++ b/integrations/langgraph/typescript/examples/pnpm-lock.yaml @@ -0,0 +1,393 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@langchain/core': + specifier: ^0.3.66 + version: 0.3.66(openai@5.10.2(zod@3.25.76)) + '@langchain/langgraph': + specifier: ^0.2.65 + version: 0.2.74(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))(zod-to-json-schema@3.24.6(zod@3.25.76)) + '@langchain/openai': + specifier: ^0.6.3 + version: 0.6.3(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))) + dotenv: + specifier: ^16.4.5 + version: 16.6.1 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + devDependencies: + '@types/node': + specifier: ^20.0.0 + version: 20.19.9 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + typescript: + specifier: ^5.0.0 + version: 5.8.3 + +packages: + + '@cfworker/json-schema@4.1.1': + resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} + + '@langchain/core@0.3.66': + resolution: {integrity: sha512-d3SgSDOlgOjdIbReIXVQl9HaQzKqO/5+E+o3kJwoKXLGP9dxi7+lMyaII7yv7G8/aUxMWLwFES9zc1jFoeJEZw==} + engines: {node: '>=18'} + + '@langchain/langgraph-checkpoint@0.0.18': + resolution: {integrity: sha512-IS7zJj36VgY+4pf8ZjsVuUWef7oTwt1y9ylvwu0aLuOn1d0fg05Om9DLm3v2GZ2Df6bhLV1kfWAM0IAl9O5rQQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.31 <0.4.0' + + '@langchain/langgraph-sdk@0.0.104': + resolution: {integrity: sha512-wUO6GMy65Y7DsWtjTJ3dA59enrZy2wN4o48AMYN7dF7u/PMXXYyBjBCKSzgVWqO6uWH2yNpyGDrcMwKuk5kQLA==} + peerDependencies: + '@langchain/core': '>=0.2.31 <0.4.0' + react: ^18 || ^19 + react-dom: ^18 || ^19 + peerDependenciesMeta: + '@langchain/core': + optional: true + react: + optional: true + react-dom: + optional: true + + '@langchain/langgraph@0.2.74': + resolution: {integrity: sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.36 <0.3.0 || >=0.3.40 < 0.4.0' + zod-to-json-schema: ^3.x + peerDependenciesMeta: + zod-to-json-schema: + optional: true + + '@langchain/openai@0.6.3': + resolution: {integrity: sha512-dSNuXDTJitDzN8D2wFNqWVELDbBRhMpJiFeiWpHjfPuq7R6wSjzNNY/Uk6x+FLpvbOs/zKNWy5+0q0p3KrCjRQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@20.19.9': + resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + console-table-printer@2.14.6: + resolution: {integrity: sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + js-tiktoken@1.0.20: + resolution: {integrity: sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==} + + langsmith@0.3.49: + resolution: {integrity: sha512-hVLpGzTDq4dFffScKuF9yIuwXqp6LJCsvxK4UjmLae+oEodfnFIQ6yVmNyhxFnm3QuRl1NY8qLFul3k+R1YnGQ==} + peerDependencies: + '@opentelemetry/api': '*' + '@opentelemetry/exporter-trace-otlp-proto': '*' + '@opentelemetry/sdk-trace-base': '*' + openai: '*' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/exporter-trace-otlp-proto': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + openai: + optional: true + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + openai@5.10.2: + resolution: {integrity: sha512-n+vi74LzHtvlKcDPn9aApgELGiu5CwhaLG40zxLTlFQdoSJCLACORIPC2uVQ3JEYAbqapM+XyRKFy2Thej7bIw==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + simple-wcswidth@1.1.2: + resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + +snapshots: + + '@cfworker/json-schema@4.1.1': {} + + '@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))': + dependencies: + '@cfworker/json-schema': 4.1.1 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.20 + langsmith: 0.3.49(openai@5.10.2(zod@3.25.76)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + + '@langchain/langgraph-checkpoint@0.0.18(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))': + dependencies: + '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) + uuid: 10.0.0 + + '@langchain/langgraph-sdk@0.0.104(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))': + dependencies: + '@types/json-schema': 7.0.15 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 9.0.1 + optionalDependencies: + '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) + + '@langchain/langgraph@0.2.74(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))(zod-to-json-schema@3.24.6(zod@3.25.76))': + dependencies: + '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) + '@langchain/langgraph-checkpoint': 0.0.18(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))) + '@langchain/langgraph-sdk': 0.0.104(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76))) + uuid: 10.0.0 + zod: 3.25.76 + optionalDependencies: + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - react + - react-dom + + '@langchain/openai@0.6.3(@langchain/core@0.3.66(openai@5.10.2(zod@3.25.76)))': + dependencies: + '@langchain/core': 0.3.66(openai@5.10.2(zod@3.25.76)) + js-tiktoken: 1.0.20 + openai: 5.10.2(zod@3.25.76) + zod: 3.25.76 + transitivePeerDependencies: + - ws + + '@types/json-schema@7.0.15': {} + + '@types/node@20.19.9': + dependencies: + undici-types: 6.21.0 + + '@types/retry@0.12.0': {} + + '@types/uuid@10.0.0': {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + base64-js@1.5.1: {} + + camelcase@6.3.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + console-table-printer@2.14.6: + dependencies: + simple-wcswidth: 1.1.2 + + decamelize@1.2.0: {} + + dotenv@16.6.1: {} + + eventemitter3@4.0.7: {} + + has-flag@4.0.0: {} + + js-tiktoken@1.0.20: + dependencies: + base64-js: 1.5.1 + + langsmith@0.3.49(openai@5.10.2(zod@3.25.76)): + dependencies: + '@types/uuid': 10.0.0 + chalk: 4.1.2 + console-table-printer: 2.14.6 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.2 + uuid: 10.0.0 + optionalDependencies: + openai: 5.10.2(zod@3.25.76) + + mustache@4.2.0: {} + + openai@5.10.2(zod@3.25.76): + optionalDependencies: + zod: 3.25.76 + + p-finally@1.0.0: {} + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + retry@0.13.1: {} + + semver@7.7.2: {} + + simple-wcswidth@1.1.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + typescript@5.8.3: {} + + undici-types@6.21.0: {} + + uuid@10.0.0: {} + + uuid@9.0.1: {} + + zod-to-json-schema@3.24.6(zod@3.25.76): + dependencies: + zod: 3.25.76 + + zod@3.25.76: {}