From 54a3d4644db8f70d26ccca42142778932edd65ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Thu, 31 Jul 2025 17:42:50 +0200
Subject: [PATCH 01/14] Implementation of Whatsapp adapter
---
.../community-whatsapp/ARCHITECTURE.md | 315 ++++++++
.../integrations/community-whatsapp/README.md | 199 +++++
.../community-whatsapp/jest.config.js | 8 +
.../community-whatsapp/package.json | 36 +
.../src/agents/enhanced-whatsapp-agent.ts | 129 +++
.../src/agents/whatsapp-agent.ts | 178 +++++
.../src/examples/ai-integration.ts | 194 +++++
.../src/examples/basic-usage.ts | 88 +++
.../src/examples/express-server.ts | 82 ++
.../community-whatsapp/src/index.ts | 12 +
.../src/providers/anthropic-provider.ts | 34 +
.../community-whatsapp/src/providers/index.ts | 2 +
.../src/providers/openai-provider.ts | 34 +
.../community-whatsapp/src/tests/ai-test.ts | 81 ++
.../src/tests/simple-test.ts | 75 ++
.../src/tests/whatsapp-agent.test.ts | 217 ++++++
.../community-whatsapp/src/types/index.ts | 180 +++++
.../community-whatsapp/src/utils/index.ts | 2 +
.../src/utils/message-converter.ts | 61 ++
.../community-whatsapp/src/utils/webhook.ts | 30 +
.../community-whatsapp/tsconfig.json | 26 +
.../community-whatsapp/tsup.config.ts | 10 +
typescript-sdk/pnpm-lock.yaml | 736 ++++++------------
23 files changed, 2233 insertions(+), 496 deletions(-)
create mode 100644 typescript-sdk/integrations/community-whatsapp/ARCHITECTURE.md
create mode 100644 typescript-sdk/integrations/community-whatsapp/README.md
create mode 100644 typescript-sdk/integrations/community-whatsapp/jest.config.js
create mode 100644 typescript-sdk/integrations/community-whatsapp/package.json
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/agents/enhanced-whatsapp-agent.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/examples/ai-integration.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/examples/basic-usage.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/examples/express-server.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/index.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/providers/anthropic-provider.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/providers/index.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/providers/openai-provider.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/tests/ai-test.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/tests/simple-test.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/tests/whatsapp-agent.test.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/types/index.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/utils/index.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/utils/message-converter.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/src/utils/webhook.ts
create mode 100644 typescript-sdk/integrations/community-whatsapp/tsconfig.json
create mode 100644 typescript-sdk/integrations/community-whatsapp/tsup.config.ts
diff --git a/typescript-sdk/integrations/community-whatsapp/ARCHITECTURE.md b/typescript-sdk/integrations/community-whatsapp/ARCHITECTURE.md
new file mode 100644
index 000000000..9926f56c8
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/ARCHITECTURE.md
@@ -0,0 +1,315 @@
+# WhatsApp Integration Architecture
+
+This document provides a comprehensive overview of the WhatsApp integration for AG-UI, explaining the architecture, components, and design decisions.
+
+## ๐๏ธ Architecture Overview
+
+The WhatsApp integration follows a modular, layered architecture designed for extensibility and maintainability:
+
+```
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โ Public API Layer โ
+โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
+โ โ WhatsAppAgent โ โEnhancedWhatsApp โ โ Utils โ โ
+โ โ โ โ Agent โ โ โ โ
+โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โ Business Logic Layer โ
+โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
+โ โ Message Handler โ โ Webhook Proc. โ โ AI Provider โ โ
+โ โ โ โ โ โ Interface โ โ
+โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+โ Data Layer โ
+โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
+โ โ WhatsApp API โ โ Message Conv. โ โ Type Defs โ โ
+โ โ Client โ โ โ โ โ โ
+โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
+โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
+```
+
+## ๐ Directory Structure
+
+```
+src/
+โโโ agents/ # Core agent implementations
+โ โโโ whatsapp-agent.ts # Basic WhatsApp agent
+โ โโโ enhanced-whatsapp-agent.ts # AI-powered agent
+โโโ providers/ # AI provider implementations
+โ โโโ openai-provider.ts # OpenAI integration
+โ โโโ anthropic-provider.ts # Anthropic integration
+โ โโโ index.ts # Provider exports
+โโโ types/ # TypeScript type definitions
+โ โโโ index.ts # All interfaces and types
+โโโ utils/ # Utility functions
+โ โโโ webhook.ts # Webhook processing utilities
+โ โโโ message-converter.ts # Message format conversion
+โ โโโ index.ts # Utility exports
+โโโ examples/ # Usage examples
+โ โโโ basic-usage.ts # Basic WhatsApp usage
+โ โโโ ai-integration.ts # AI integration examples
+โ โโโ express-server.ts # Express.js server example
+โโโ tests/ # Test files
+โ โโโ simple-test.ts # Basic functionality tests
+โ โโโ ai-test.ts # AI functionality tests
+โ โโโ whatsapp-agent.test.ts # Unit tests
+โโโ index.ts # Main exports
+```
+
+## ๐งฉ Core Components
+
+### 1. WhatsAppAgent (Base Agent)
+
+**Purpose**: Provides basic WhatsApp Business API integration without AI capabilities.
+
+**Key Features**:
+- Webhook signature verification
+- Message sending and receiving
+- Message format conversion
+- AG-UI event system integration
+
+**Core Methods**:
+```typescript
+class WhatsAppAgent extends AbstractAgent {
+ verifyWebhookSignature(body: string, signature: string): boolean
+ processWebhook(body: WhatsAppWebhookEntry): WhatsAppMessage[]
+ sendTextMessage(to: string, text: string): Promise
+ convertWhatsAppMessageToAGUI(whatsappMessage: WhatsAppMessage): Message
+ handleWebhook(body: string, signature: string): Promise
+}
+```
+
+### 2. EnhancedWhatsAppAgent (AI-Powered Agent)
+
+**Purpose**: Extends the base agent with AI capabilities for intelligent responses.
+
+**Key Features**:
+- All features from WhatsAppAgent
+- AI provider integration
+- Configurable system prompts
+- Dynamic AI parameter adjustment
+
+**Core Methods**:
+```typescript
+class EnhancedWhatsAppAgent extends WhatsAppAgent {
+ setAIProvider(provider: AIProvider | undefined): void
+ setSystemPrompt(prompt: string): void
+ setAIParameters(maxTokens: number, temperature: number): void
+ handleWebhookWithAI(body: string, signature: string): Promise
+}
+```
+
+### 3. AI Providers
+
+**Purpose**: Abstract AI service integrations for generating intelligent responses.
+
+**Available Providers**:
+- `OpenAIProvider`: Integration with OpenAI GPT models
+- `AnthropicProvider`: Integration with Anthropic Claude models
+
+**Interface**:
+```typescript
+interface AIProvider {
+ generateResponse(messages: any[], context?: any): Promise
+}
+```
+
+### 4. Utilities
+
+**Purpose**: Reusable functions for common operations.
+
+**Webhook Utilities** (`utils/webhook.ts`):
+- `verifyWebhookSignature()`: Verify WhatsApp webhook authenticity
+- `processWebhook()`: Extract messages from webhook payload
+
+**Message Conversion** (`utils/message-converter.ts`):
+- `convertWhatsAppMessageToAGUI()`: Convert WhatsApp โ AG-UI format
+- `convertAGUIMessageToWhatsApp()`: Convert AG-UI โ WhatsApp format
+
+## ๐ Data Flow
+
+### 1. Incoming Message Flow
+
+```
+WhatsApp Webhook โ verifyWebhookSignature() โ processWebhook() โ
+convertWhatsAppMessageToAGUI() โ AG-UI Message โ Agent Processing
+```
+
+### 2. Outgoing Message Flow
+
+```
+AG-UI Response โ convertAGUIMessageToWhatsApp() โ
+WhatsApp API โ Message Delivered
+```
+
+### 3. AI-Enhanced Flow
+
+```
+Incoming Message โ AI Provider โ generateResponse() โ
+Enhanced Response โ WhatsApp API โ Message Delivered
+```
+
+## ๐ก๏ธ Security Features
+
+### Webhook Signature Verification
+
+The integration implements HMAC-SHA256 signature verification to ensure webhook authenticity:
+
+```typescript
+function verifyWebhookSignature(body: string, signature: string, webhookSecret: string): boolean {
+ const expectedSignature = createHmac("sha256", webhookSecret)
+ .update(body)
+ .digest("hex");
+
+ return signature === `sha256=${expectedSignature}`;
+}
+```
+
+### Configuration Security
+
+- Access tokens are stored securely
+- Webhook secrets are used for verification
+- API credentials are validated before use
+
+## ๐ง Message Type Support
+
+The integration supports all major WhatsApp message types:
+
+| WhatsApp Type | AG-UI Conversion | Description |
+|---------------|------------------|-------------|
+| `text` | Direct content | Plain text messages |
+| `image` | `[Image]: caption` | Images with optional captions |
+| `audio` | `[Audio message]` | Voice messages |
+| `document` | `[Document: filename]` | File attachments |
+| `video` | `[Video]: caption` | Video messages |
+| `location` | `[Location: name at lat,lng]` | Location sharing |
+| `contact` | `[Contact: name]` | Contact sharing |
+
+## ๐ฏ Design Principles
+
+### 1. Separation of Concerns
+- **Agents**: Handle business logic and state management
+- **Providers**: Abstract AI service integrations
+- **Utils**: Provide reusable utility functions
+- **Types**: Define clear interfaces and contracts
+
+### 2. Extensibility
+- Easy to add new AI providers
+- Modular message type support
+- Pluggable webhook handlers
+- Configurable agent behavior
+
+### 3. Type Safety
+- Full TypeScript support
+- Strict type checking
+- Clear interface definitions
+- Runtime type validation
+
+### 4. Error Handling
+- Graceful error recovery
+- Detailed error messages
+- Fallback mechanisms
+- Logging and monitoring
+
+## ๐ Extension Points
+
+### Adding New AI Providers
+
+1. Implement the `AIProvider` interface:
+```typescript
+class CustomAIProvider implements AIProvider {
+ async generateResponse(messages: any[], context?: any): Promise {
+ // Your AI integration logic
+ }
+}
+```
+
+2. Export from providers:
+```typescript
+// src/providers/custom-provider.ts
+export class CustomAIProvider implements AIProvider { ... }
+
+// src/providers/index.ts
+export * from "./custom-provider";
+```
+
+### Adding New Message Types
+
+1. Extend the `WhatsAppMessage` interface
+2. Update the conversion utilities
+3. Add type-specific handling logic
+
+### Custom Webhook Handlers
+
+1. Extend the base agent class
+2. Override webhook processing methods
+3. Add custom business logic
+
+## ๐ Performance Considerations
+
+### Memory Management
+- Efficient message conversion
+- Minimal object allocation
+- Proper cleanup of resources
+
+### API Rate Limiting
+- Respect WhatsApp API limits
+- Implement retry logic
+- Handle rate limit errors gracefully
+
+### Caching Strategy
+- Cache AI responses when appropriate
+- Store conversation context
+- Optimize repeated operations
+
+## ๐ Testing Strategy
+
+### Unit Tests
+- Individual component testing
+- Mock external dependencies
+- Validate type safety
+
+### Integration Tests
+- End-to-end webhook testing
+- AI provider integration
+- Message flow validation
+
+### Performance Tests
+- Load testing webhook handling
+- AI response time measurement
+- Memory usage monitoring
+
+## ๐ Monitoring and Observability
+
+### Key Metrics
+- Webhook processing time
+- Message delivery success rate
+- AI response generation time
+- Error rates and types
+
+### Logging
+- Structured logging for debugging
+- Error tracking and alerting
+- Performance monitoring
+- Security event logging
+
+## ๐ฎ Future Enhancements
+
+### Planned Features
+- Media message handling
+- Message templates
+- Typing indicators
+- Message status tracking
+- Multi-language support
+
+### Potential Integrations
+- Additional AI providers
+- Analytics platforms
+- CRM integrations
+- Custom business logic hooks
+
+---
+
+This architecture provides a solid foundation for WhatsApp integration while maintaining flexibility for future enhancements and customizations.
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/README.md b/typescript-sdk/integrations/community-whatsapp/README.md
new file mode 100644
index 000000000..479023730
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/README.md
@@ -0,0 +1,199 @@
+# WhatsApp Integration for AG-UI
+
+This integration allows you to use AG-UI with WhatsApp Business API to create conversational AI agents that can interact with users through WhatsApp.
+
+## ๐ Tutorial: Getting Started with WhatsApp Business API
+
+Before using this integration, you need to set up WhatsApp Business API. Follow these steps:
+
+### Step 1: Create a Meta Developer Account
+
+1. Go to [Meta for Developers](https://developers.facebook.com/)
+2. Create a new app or use an existing one
+3. Add the **WhatsApp** product to your app
+
+### Step 2: Set Up WhatsApp Business API
+
+1. **Navigate to WhatsApp** in your Meta app dashboard
+2. **Get Started** with WhatsApp Business API
+3. **Add a Phone Number**:
+ - Click "Add phone number"
+ - Enter your business phone number
+ - Verify the number via SMS/call
+ - Note down the **Phone Number ID** (you'll need this)
+
+### Step 3: Generate Access Token
+
+1. Go to **System Users** in your Meta app
+2. Create a new system user or use existing one
+3. **Generate Access Token**:
+ - Select your system user
+ - Click "Generate Token"
+ - Choose "WhatsApp Business API" permissions
+ - Copy the **Access Token** (keep it secure!)
+
+### Step 4: Configure Webhook
+
+1. **Set up your webhook endpoint** (e.g., `https://your-domain.com/webhook`)
+2. **Configure webhook in Meta**:
+ - Go to WhatsApp โ Configuration
+ - Add your webhook URL
+ - Set **Webhook Secret** (create a strong secret)
+ - Subscribe to these fields:
+ - `messages`
+ - `message_status`
+ - `message_template_status`
+
+### Step 5: Test Your Setup
+
+Use the [WhatsApp Business API Testing Guide](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started) to verify your configuration.
+
+### ๐ Helpful Resources
+
+- [WhatsApp Business API Documentation](https://developers.facebook.com/docs/whatsapp)
+- [Webhook Setup Guide](https://developers.facebook.com/docs/whatsapp/webhook)
+- [Message Templates](https://developers.facebook.com/docs/whatsapp/message-templates)
+- [API Reference](https://developers.facebook.com/docs/whatsapp/cloud-api/reference)
+
+## ๐ Installation
+
+```bash
+npm install @ag-ui/community-whatsapp
+```
+
+## ๐ก Basic Usage
+
+```typescript
+import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+
+const agent = new WhatsAppAgent({
+ phoneNumberId: "your-phone-number-id", // From Step 2
+ accessToken: "your-access-token", // From Step 3
+ webhookSecret: "your-webhook-secret", // From Step 4
+ threadId: "conversation-id",
+});
+
+// Handle incoming webhook
+await agent.handleWebhook(webhookBody, signature);
+
+// Send a message
+await agent.sendMessageToNumber("1234567890", "Hello from AG-UI!");
+```
+
+## ๐ค Enhanced Usage with AI Integration
+
+```typescript
+import { EnhancedWhatsAppAgent, OpenAIProvider } from "@ag-ui/community-whatsapp";
+
+// Create AI provider
+const openAIProvider = new OpenAIProvider("your-openai-api-key");
+
+// Create enhanced agent
+const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ aiProvider: openAIProvider,
+ systemPrompt: "You are a helpful customer service assistant.",
+ maxTokens: 200,
+ temperature: 0.7,
+});
+
+// Handle webhook with AI responses
+await agent.handleWebhookWithAI(webhookBody, signature);
+```
+
+## โ๏ธ Configuration
+
+### Basic Configuration
+- `phoneNumberId`: Your WhatsApp Business API phone number ID (from Step 2)
+- `accessToken`: Your WhatsApp Business API access token (from Step 3)
+- `webhookSecret`: Secret for verifying webhook requests (from Step 4)
+- `apiVersion`: WhatsApp API version (default: "v18.0")
+
+### Enhanced Configuration
+- `aiProvider`: AI service provider (OpenAI, Anthropic, etc.)
+- `systemPrompt`: System prompt for AI responses
+- `maxTokens`: Maximum tokens for AI responses
+- `temperature`: AI response creativity (0.0-1.0)
+
+## โจ Features
+
+### Core Features
+- โ
Send and receive WhatsApp messages
+- โ
Handle media messages (images, audio, documents)
+- โ
Webhook verification with HMAC-SHA256
+- โ
Message status tracking
+- โ
Typing indicators
+- โ
Message templates
+
+### AI Integration Features
+- โ
OpenAI GPT integration
+- โ
Anthropic Claude integration
+- โ
Custom AI provider support
+- โ
Dynamic AI provider switching
+- โ
Configurable system prompts
+- โ
Adjustable AI parameters
+
+## ๐ Examples
+
+### Express.js Server
+```typescript
+import { createExpressServer } from "@ag-ui/community-whatsapp";
+
+const app = createExpressServer();
+app.listen(3000, () => {
+ console.log("WhatsApp server running on port 3000");
+});
+```
+
+### Environment-based Configuration
+```typescript
+import { createAgentFromEnv } from "@ag-ui/community-whatsapp";
+
+const agent = createAgentFromEnv();
+```
+
+## ๐ค AI Providers
+
+### OpenAI
+```typescript
+import { OpenAIProvider } from "@ag-ui/community-whatsapp";
+
+const openAIProvider = new OpenAIProvider("your-api-key", "gpt-4");
+```
+
+### Anthropic Claude
+```typescript
+import { AnthropicProvider } from "@ag-ui/community-whatsapp";
+
+const anthropicProvider = new AnthropicProvider("your-api-key", "claude-3-sonnet-20240229");
+```
+
+## ๐ง Quick Test
+
+Test your setup with our simple test:
+
+```bash
+npx tsx src/tests/simple-test.ts
+```
+
+## ๐ Documentation
+
+- [Architecture Documentation](./ARCHITECTURE.md) - Detailed technical overview
+- [API Reference](https://developers.facebook.com/docs/whatsapp/cloud-api/reference)
+- [Webhook Guide](https://developers.facebook.com/docs/whatsapp/webhook)
+
+## ๐ค Contributing
+
+This is a community integration. Contributions are welcome!
+
+1. Fork the repository
+2. Create a feature branch
+3. Make your changes
+4. Add tests
+5. Submit a pull request
+
+## ๐ License
+
+MIT
diff --git a/typescript-sdk/integrations/community-whatsapp/jest.config.js b/typescript-sdk/integrations/community-whatsapp/jest.config.js
new file mode 100644
index 000000000..b83ca8420
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/jest.config.js
@@ -0,0 +1,8 @@
+module.exports = {
+ preset: "ts-jest",
+ testEnvironment: "node",
+ testMatch: ["**/__tests__/**/*.test.ts"],
+ moduleNameMapping: {
+ "^@/(.*)$": "/src/$1",
+ },
+};
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/package.json b/typescript-sdk/integrations/community-whatsapp/package.json
new file mode 100644
index 000000000..5d6aea4b1
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@ag-ui/community-whatsapp",
+ "author": "Community Contributor",
+ "version": "0.0.1",
+ "description": "WhatsApp integration for AG-UI",
+ "main": "./dist/index.js",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "sideEffects": false,
+ "files": [
+ "dist/**"
+ ],
+ "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": {
+ "@ag-ui/client": "workspace:*"
+ },
+ "peerDependencies": {
+ "rxjs": "7.8.1"
+ },
+ "devDependencies": {
+ "@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"
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/agents/enhanced-whatsapp-agent.ts b/typescript-sdk/integrations/community-whatsapp/src/agents/enhanced-whatsapp-agent.ts
new file mode 100644
index 000000000..ec6124111
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/agents/enhanced-whatsapp-agent.ts
@@ -0,0 +1,129 @@
+import { WhatsAppAgent } from "./whatsapp-agent";
+import { WhatsAppAgentConfig, AIProvider } from "../types";
+
+export interface EnhancedWhatsAppAgentConfig extends WhatsAppAgentConfig {
+ aiProvider?: AIProvider;
+ systemPrompt?: string;
+ maxTokens?: number;
+ temperature?: number;
+}
+
+export class EnhancedWhatsAppAgent extends WhatsAppAgent {
+ private aiProvider?: AIProvider;
+ private systemPrompt: string;
+ private maxTokens: number;
+ private temperature: number;
+
+ constructor(config: EnhancedWhatsAppAgentConfig) {
+ super(config);
+ this.aiProvider = config.aiProvider;
+ this.systemPrompt = config.systemPrompt || "You are a helpful WhatsApp assistant. Respond naturally and concisely.";
+ this.maxTokens = config.maxTokens || 150;
+ this.temperature = config.temperature || 0.7;
+ }
+
+ /**
+ * Generate AI response using the configured AI provider
+ */
+ private async generateAIResponse(messages: any[]): Promise {
+ if (!this.aiProvider) {
+ // Fallback to simple echo response
+ const lastMessage = messages[messages.length - 1];
+ return `I received your message: "${lastMessage.content}". This is a demo response.`;
+ }
+
+ try {
+ const response = await this.aiProvider.generateResponse(messages, {
+ systemPrompt: this.systemPrompt,
+ maxTokens: this.maxTokens,
+ temperature: this.temperature,
+ });
+
+ return response;
+ } catch (error) {
+ console.error("Error generating AI response:", error);
+ return "I'm sorry, I'm having trouble processing your request right now. Please try again later.";
+ }
+ }
+
+ /**
+ * Override the run method to use AI for generating responses
+ */
+ protected async runWithAI(input: any): Promise {
+ // Convert messages to AI format
+ const aiMessages = input.messages.map((msg: any) => ({
+ role: msg.role,
+ content: msg.content,
+ }));
+
+ // Add system message
+ aiMessages.unshift({
+ role: "system",
+ content: this.systemPrompt,
+ });
+
+ // Generate AI response
+ const aiResponse = await this.generateAIResponse(aiMessages);
+
+ return {
+ messages: [
+ {
+ role: "assistant",
+ content: aiResponse,
+ },
+ ],
+ };
+ }
+
+ /**
+ * Enhanced webhook handler with AI integration
+ */
+ async handleWebhookWithAI(body: string, signature: string): Promise {
+ // Verify webhook signature
+ if (!this.verifyWebhookSignature(body, signature)) {
+ throw new Error("Invalid webhook signature");
+ }
+
+ const webhookData = JSON.parse(body);
+ const messages = this.processWebhook(webhookData);
+
+ // Process each message
+ for (const whatsappMessage of messages) {
+ const aguiMessage = this.convertWhatsAppMessageToAGUI(whatsappMessage);
+ this.addMessage(aguiMessage);
+
+ // Generate AI response
+ const aiResult = await this.runWithAI({
+ messages: (this as any).messages,
+ });
+
+ // Send the AI-generated response back to WhatsApp
+ if (aiResult.messages && aiResult.messages.length > 0) {
+ const responseMessage = aiResult.messages[0];
+ await this.sendTextMessage(whatsappMessage.from, responseMessage.content);
+ }
+ }
+ }
+
+ /**
+ * Set AI provider
+ */
+ setAIProvider(provider: AIProvider | undefined): void {
+ this.aiProvider = provider;
+ }
+
+ /**
+ * Update system prompt
+ */
+ setSystemPrompt(prompt: string): void {
+ this.systemPrompt = prompt;
+ }
+
+ /**
+ * Update AI parameters
+ */
+ setAIParameters(maxTokens: number, temperature: number): void {
+ this.maxTokens = maxTokens;
+ this.temperature = temperature;
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts b/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
new file mode 100644
index 000000000..af66dc855
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
@@ -0,0 +1,178 @@
+import { AbstractAgent, BaseEvent, EventType, Message, RunAgentInput, TextMessageChunkEvent, RunStartedEvent, RunFinishedEvent } from "@ag-ui/client";
+import { Observable } from "rxjs";
+import { WhatsAppAgentConfig, WhatsAppMessage, WhatsAppSendMessageRequest, WhatsAppSendMessageResponse, WhatsAppWebhookEntry } from "../types";
+import { verifyWebhookSignature, processWebhook, convertWhatsAppMessageToAGUI, convertAGUIMessageToWhatsApp } from "../utils";
+
+export class WhatsAppAgent extends AbstractAgent {
+ public phoneNumberId: string;
+ private accessToken: string;
+ private webhookSecret: string;
+ private apiVersion: string;
+ private baseUrl: string;
+
+ constructor(config: WhatsAppAgentConfig) {
+ super(config);
+ this.phoneNumberId = config.phoneNumberId;
+ this.accessToken = config.accessToken;
+ this.webhookSecret = config.webhookSecret;
+ this.apiVersion = config.apiVersion || "v18.0";
+ this.baseUrl = config.baseUrl || `https://graph.facebook.com/${this.apiVersion}`;
+ }
+
+ /**
+ * Verify webhook signature from WhatsApp
+ */
+ verifyWebhookSignature(body: string, signature: string): boolean {
+ return verifyWebhookSignature(body, signature, this.webhookSecret);
+ }
+
+ /**
+ * Process incoming webhook from WhatsApp
+ */
+ processWebhook(body: WhatsAppWebhookEntry): WhatsAppMessage[] {
+ return processWebhook(body);
+ }
+
+ /**
+ * Send a message to WhatsApp
+ */
+ async sendMessage(to: string, message: WhatsAppSendMessageRequest): Promise {
+ const url = `${this.baseUrl}/${this.phoneNumberId}/messages`;
+
+ const response = await fetch(url, {
+ method: "POST",
+ headers: {
+ "Authorization": `Bearer ${this.accessToken}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ ...message,
+ messaging_product: "whatsapp",
+ recipient_type: "individual",
+ to,
+ }),
+ });
+
+ if (!response.ok) {
+ const error = await response.json();
+ throw new Error(`WhatsApp API error: ${error.error?.message || response.statusText}`);
+ }
+
+ return response.json();
+ }
+
+ /**
+ * Send a text message
+ */
+ async sendTextMessage(to: string, text: string): Promise {
+ return this.sendMessage(to, {
+ messaging_product: "whatsapp",
+ recipient_type: "individual",
+ to,
+ type: "text",
+ text: {
+ body: text,
+ },
+ });
+ }
+
+ /**
+ * Convert WhatsApp message to AG-UI message format
+ */
+ public convertWhatsAppMessageToAGUI(whatsappMessage: WhatsAppMessage): Message {
+ return convertWhatsAppMessageToAGUI(whatsappMessage);
+ }
+
+ /**
+ * Convert AG-UI message to WhatsApp message format
+ */
+ private convertAGUIMessageToWhatsApp(message: Message): WhatsAppSendMessageRequest {
+ return convertAGUIMessageToWhatsApp(message);
+ }
+
+ /**
+ * Main run method that processes messages and generates responses
+ */
+ protected run(input: RunAgentInput): Observable {
+ return new Observable((subscriber) => {
+ const run = async () => {
+ try {
+ // Emit run started event
+ const runStartedEvent: RunStartedEvent = {
+ type: EventType.RUN_STARTED,
+ threadId: input.threadId,
+ runId: input.runId,
+ };
+ subscriber.next(runStartedEvent);
+
+ // Process incoming messages
+ for (const message of input.messages) {
+ if (message.role === "user") {
+ // For now, we'll simulate a response
+ // In a real implementation, you would integrate with an AI service
+ const responseText = `Received: ${message.content}`;
+
+ // Emit text chunks
+ const textChunkEvent: TextMessageChunkEvent = {
+ type: EventType.TEXT_MESSAGE_CHUNK,
+ role: "assistant",
+ messageId: message.id,
+ delta: responseText,
+ };
+ subscriber.next(textChunkEvent);
+ }
+ }
+
+ // Emit run finished event
+ const runFinishedEvent: RunFinishedEvent = {
+ type: EventType.RUN_FINISHED,
+ threadId: input.threadId,
+ runId: input.runId,
+ };
+ subscriber.next(runFinishedEvent);
+
+ subscriber.complete();
+ } catch (error) {
+ subscriber.error(error);
+ }
+ };
+
+ run();
+ });
+ }
+
+ /**
+ * Handle incoming webhook and process messages
+ */
+ async handleWebhook(body: string, signature: string): Promise {
+ // Verify webhook signature
+ if (!this.verifyWebhookSignature(body, signature)) {
+ throw new Error("Invalid webhook signature");
+ }
+
+ const webhookData: WhatsAppWebhookEntry = JSON.parse(body);
+ const messages = this.processWebhook(webhookData);
+
+ // Process each message
+ for (const whatsappMessage of messages) {
+ const aguiMessage = this.convertWhatsAppMessageToAGUI(whatsappMessage);
+ this.addMessage(aguiMessage);
+
+ // Run the agent to generate a response
+ const result = await this.runAgent();
+
+ // Send the response back to WhatsApp
+ if (result.newMessages.length > 0) {
+ const responseMessage = result.newMessages[0];
+ await this.sendTextMessage(whatsappMessage.from, responseMessage.content || "");
+ }
+ }
+ }
+
+ /**
+ * Send a message to a specific WhatsApp number
+ */
+ async sendMessageToNumber(phoneNumber: string, content: string): Promise {
+ return this.sendTextMessage(phoneNumber, content);
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/examples/ai-integration.ts b/typescript-sdk/integrations/community-whatsapp/src/examples/ai-integration.ts
new file mode 100644
index 000000000..a7297aaf1
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/examples/ai-integration.ts
@@ -0,0 +1,194 @@
+import { EnhancedWhatsAppAgent } from "../agents/enhanced-whatsapp-agent";
+import { OpenAIProvider, AnthropicProvider } from "../providers";
+
+// Example: Using WhatsApp agent with OpenAI
+export async function openAIExample() {
+ // Create OpenAI provider
+ const openAIProvider = new OpenAIProvider("your-openai-api-key", "gpt-4");
+
+ // Create enhanced WhatsApp agent
+ const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ threadId: "whatsapp-ai-conversation",
+ aiProvider: openAIProvider,
+ systemPrompt: "You are a helpful customer service assistant for a tech company. Be friendly, professional, and concise.",
+ maxTokens: 200,
+ temperature: 0.7,
+ });
+
+ // Example webhook handler
+ const webhookHandler = async (req: any, res: any) => {
+ try {
+ const signature = req.headers["x-hub-signature-256"];
+ const body = JSON.stringify(req.body);
+
+ await agent.handleWebhookWithAI(body, signature);
+
+ res.status(200).json({ status: "ok" });
+ } catch (error) {
+ console.error("Webhook error:", error);
+ res.status(400).json({ error: "Invalid webhook" });
+ }
+ };
+
+ return { agent, webhookHandler };
+}
+
+// Example: Using WhatsApp agent with Anthropic Claude
+export async function anthropicExample() {
+ // Create Anthropic provider
+ const anthropicProvider = new AnthropicProvider("your-anthropic-api-key", "claude-3-sonnet-20240229");
+
+ // Create enhanced WhatsApp agent
+ const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ threadId: "whatsapp-claude-conversation",
+ aiProvider: anthropicProvider,
+ systemPrompt: "You are Claude, an AI assistant helping users via WhatsApp. Be helpful, accurate, and conversational.",
+ maxTokens: 300,
+ temperature: 0.8,
+ });
+
+ return agent;
+}
+
+// Example: Dynamic AI provider switching
+export async function dynamicAIExample() {
+ const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ threadId: "whatsapp-dynamic-conversation",
+ });
+
+ // Switch between AI providers based on user preference or availability
+ const switchToOpenAI = () => {
+ const openAIProvider = new OpenAIProvider("your-openai-api-key");
+ agent.setAIProvider(openAIProvider);
+ agent.setSystemPrompt("You are an OpenAI-powered assistant.");
+ };
+
+ const switchToClaude = () => {
+ const anthropicProvider = new AnthropicProvider("your-anthropic-api-key");
+ agent.setAIProvider(anthropicProvider);
+ agent.setSystemPrompt("You are Claude, an AI assistant.");
+ };
+
+ const disableAI = () => {
+ agent.setAIProvider(undefined);
+ };
+
+ return { agent, switchToOpenAI, switchToClaude, disableAI };
+}
+
+// Example: Express.js server with WhatsApp integration
+export function createExpressServer() {
+ const express = require("express");
+ const app = express();
+
+ // Create agent
+ const openAIProvider = new OpenAIProvider("your-openai-api-key");
+ const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ threadId: "whatsapp-express-conversation",
+ aiProvider: openAIProvider,
+ });
+
+ // Middleware
+ app.use(express.json());
+
+ // Webhook endpoint
+ app.post("/webhook", async (req: any, res: any) => {
+ try {
+ const signature = req.headers["x-hub-signature-256"];
+ const body = JSON.stringify(req.body);
+
+ await agent.handleWebhookWithAI(body, signature);
+
+ res.status(200).json({ status: "ok" });
+ } catch (error) {
+ console.error("Webhook error:", error);
+ res.status(400).json({ error: "Invalid webhook" });
+ }
+ });
+
+ // Health check endpoint
+ app.get("/health", (req: any, res: any) => {
+ res.json({ status: "healthy", agent: "Express WhatsApp Assistant" });
+ });
+
+ // Send message endpoint
+ app.post("/send", async (req: any, res: any) => {
+ try {
+ const { phoneNumber, message } = req.body;
+
+ if (!phoneNumber || !message) {
+ return res.status(400).json({ error: "phoneNumber and message are required" });
+ }
+
+ const response = await agent.sendMessageToNumber(phoneNumber, message);
+ res.json(response);
+ } catch (error) {
+ console.error("Send message error:", error);
+ res.status(500).json({ error: "Failed to send message" });
+ }
+ });
+
+ // Update AI settings endpoint
+ app.post("/ai-settings", (req: any, res: any) => {
+ try {
+ const { systemPrompt, maxTokens, temperature } = req.body;
+
+ if (systemPrompt) {
+ agent.setSystemPrompt(systemPrompt);
+ }
+
+ if (maxTokens && temperature) {
+ agent.setAIParameters(maxTokens, temperature);
+ }
+
+ res.json({ status: "settings updated" });
+ } catch (error) {
+ console.error("Settings update error:", error);
+ res.status(500).json({ error: "Failed to update settings" });
+ }
+ });
+
+ return app;
+}
+
+// Example: Environment-based configuration
+export function createAgentFromEnv() {
+ const config = {
+ phoneNumberId: process.env.WHATSAPP_PHONE_NUMBER_ID!,
+ accessToken: process.env.WHATSAPP_ACCESS_TOKEN!,
+ webhookSecret: process.env.WHATSAPP_WEBHOOK_SECRET!,
+ threadId: process.env.THREAD_ID || "whatsapp-env-conversation",
+ };
+
+ // Add AI provider based on environment
+ if (process.env.OPENAI_API_KEY) {
+ const openAIProvider = new OpenAIProvider(process.env.OPENAI_API_KEY);
+ return new EnhancedWhatsAppAgent({
+ ...config,
+ aiProvider: openAIProvider,
+ systemPrompt: process.env.SYSTEM_PROMPT || "You are a helpful assistant.",
+ });
+ } else if (process.env.ANTHROPIC_API_KEY) {
+ const anthropicProvider = new AnthropicProvider(process.env.ANTHROPIC_API_KEY);
+ return new EnhancedWhatsAppAgent({
+ ...config,
+ aiProvider: anthropicProvider,
+ systemPrompt: process.env.SYSTEM_PROMPT || "You are Claude, an AI assistant.",
+ });
+ } else {
+ // No AI provider configured
+ return new EnhancedWhatsAppAgent(config);
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/examples/basic-usage.ts b/typescript-sdk/integrations/community-whatsapp/src/examples/basic-usage.ts
new file mode 100644
index 000000000..f9983e26a
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/examples/basic-usage.ts
@@ -0,0 +1,88 @@
+import { WhatsAppAgent } from "../agents/whatsapp-agent";
+
+// Example usage of the WhatsApp agent
+export async function exampleUsage() {
+ // Create a WhatsApp agent instance
+ const agent = new WhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ threadId: "whatsapp-conversation-1",
+ });
+
+ // Example: Handle incoming webhook
+ const webhookBody = `{
+ "object": "whatsapp_business_account",
+ "entry": [
+ {
+ "id": "123456789",
+ "changes": [
+ {
+ "value": {
+ "messaging_product": "whatsapp",
+ "metadata": {
+ "display_phone_number": "+1234567890",
+ "phone_number_id": "your-phone-number-id"
+ },
+ "contacts": [
+ {
+ "profile": {
+ "name": "John Doe"
+ },
+ "wa_id": "1234567890"
+ }
+ ],
+ "messages": [
+ {
+ "from": "1234567890",
+ "id": "wamid.123456789",
+ "timestamp": "1234567890",
+ "type": "text",
+ "text": {
+ "body": "Hello, how are you?"
+ }
+ }
+ ]
+ },
+ "field": "messages"
+ }
+ ]
+ }
+ ]
+ }`;
+
+ const signature = "sha256=your-signature-here";
+
+ try {
+ // Handle the webhook
+ await agent.handleWebhook(webhookBody, signature);
+ console.log("Webhook processed successfully");
+ } catch (error) {
+ console.error("Error processing webhook:", error);
+ }
+
+ // Example: Send a message directly
+ try {
+ const response = await agent.sendMessageToNumber("1234567890", "Hello from AG-UI!");
+ console.log("Message sent:", response);
+ } catch (error) {
+ console.error("Error sending message:", error);
+ }
+}
+
+// Example Express.js webhook handler
+export function createWebhookHandler(agent: WhatsAppAgent) {
+ return async (req: any, res: any) => {
+ try {
+ const signature = req.headers["x-hub-signature-256"];
+ const body = JSON.stringify(req.body);
+
+ await agent.handleWebhook(body, signature);
+
+ res.status(200).json({ status: "ok" });
+ } catch (error) {
+ console.error("Webhook error:", error);
+ res.status(400).json({ error: "Invalid webhook" });
+ }
+ };
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/examples/express-server.ts b/typescript-sdk/integrations/community-whatsapp/src/examples/express-server.ts
new file mode 100644
index 000000000..2d37bbade
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/examples/express-server.ts
@@ -0,0 +1,82 @@
+import { EnhancedWhatsAppAgent } from "../agents/enhanced-whatsapp-agent";
+import { OpenAIProvider } from "../providers";
+
+/**
+ * Example Express.js server with WhatsApp integration
+ */
+export function createExpressServer() {
+ const express = require("express");
+ const app = express();
+
+ // Create agent
+ const openAIProvider = new OpenAIProvider("your-openai-api-key");
+ const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "your-phone-number-id",
+ accessToken: "your-access-token",
+ webhookSecret: "your-webhook-secret",
+ threadId: "whatsapp-express-conversation",
+ aiProvider: openAIProvider,
+ });
+
+ // Middleware
+ app.use(express.json());
+
+ // Webhook endpoint
+ app.post("/webhook", async (req: any, res: any) => {
+ try {
+ const signature = req.headers["x-hub-signature-256"];
+ const body = JSON.stringify(req.body);
+
+ await agent.handleWebhookWithAI(body, signature);
+
+ res.status(200).json({ status: "ok" });
+ } catch (error) {
+ console.error("Webhook error:", error);
+ res.status(400).json({ error: "Invalid webhook" });
+ }
+ });
+
+ // Health check endpoint
+ app.get("/health", (req: any, res: any) => {
+ res.json({ status: "healthy", agent: "Express WhatsApp Assistant" });
+ });
+
+ // Send message endpoint
+ app.post("/send", async (req: any, res: any) => {
+ try {
+ const { phoneNumber, message } = req.body;
+
+ if (!phoneNumber || !message) {
+ return res.status(400).json({ error: "phoneNumber and message are required" });
+ }
+
+ const response = await agent.sendMessageToNumber(phoneNumber, message);
+ res.json(response);
+ } catch (error) {
+ console.error("Send message error:", error);
+ res.status(500).json({ error: "Failed to send message" });
+ }
+ });
+
+ // Update AI settings endpoint
+ app.post("/ai-settings", (req: any, res: any) => {
+ try {
+ const { systemPrompt, maxTokens, temperature } = req.body;
+
+ if (systemPrompt) {
+ agent.setSystemPrompt(systemPrompt);
+ }
+
+ if (maxTokens && temperature) {
+ agent.setAIParameters(maxTokens, temperature);
+ }
+
+ res.json({ status: "settings updated" });
+ } catch (error) {
+ console.error("Settings update error:", error);
+ res.status(500).json({ error: "Failed to update settings" });
+ }
+ });
+
+ return app;
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/index.ts b/typescript-sdk/integrations/community-whatsapp/src/index.ts
new file mode 100644
index 000000000..67a00a904
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/index.ts
@@ -0,0 +1,12 @@
+// Core agents
+export * from "./agents/whatsapp-agent";
+export * from "./agents/enhanced-whatsapp-agent";
+
+// AI providers
+export * from "./providers";
+
+// Types
+export * from "./types";
+
+// Utilities
+export * from "./utils";
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/providers/anthropic-provider.ts b/typescript-sdk/integrations/community-whatsapp/src/providers/anthropic-provider.ts
new file mode 100644
index 000000000..0674ad0dd
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/providers/anthropic-provider.ts
@@ -0,0 +1,34 @@
+import { AIProvider } from "../types";
+
+export class AnthropicProvider implements AIProvider {
+ private apiKey: string;
+ private model: string;
+
+ constructor(apiKey: string, model: string = "claude-3-sonnet-20240229") {
+ this.apiKey = apiKey;
+ this.model = model;
+ }
+
+ async generateResponse(messages: any[], context?: any): Promise {
+ const response = await fetch("https://api.anthropic.com/v1/messages", {
+ method: "POST",
+ headers: {
+ "Authorization": `Bearer ${this.apiKey}`,
+ "Content-Type": "application/json",
+ "anthropic-version": "2023-06-01",
+ },
+ body: JSON.stringify({
+ model: this.model,
+ max_tokens: context?.maxTokens || 150,
+ messages,
+ }),
+ });
+
+ if (!response.ok) {
+ throw new Error(`Anthropic API error: ${response.statusText}`);
+ }
+
+ const data = await response.json();
+ return data.content[0].text;
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/providers/index.ts b/typescript-sdk/integrations/community-whatsapp/src/providers/index.ts
new file mode 100644
index 000000000..9406add47
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/providers/index.ts
@@ -0,0 +1,2 @@
+export * from "./openai-provider";
+export * from "./anthropic-provider";
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/providers/openai-provider.ts b/typescript-sdk/integrations/community-whatsapp/src/providers/openai-provider.ts
new file mode 100644
index 000000000..8a111b78a
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/providers/openai-provider.ts
@@ -0,0 +1,34 @@
+import { AIProvider } from "../types";
+
+export class OpenAIProvider implements AIProvider {
+ private apiKey: string;
+ private model: string;
+
+ constructor(apiKey: string, model: string = "gpt-3.5-turbo") {
+ this.apiKey = apiKey;
+ this.model = model;
+ }
+
+ async generateResponse(messages: any[], context?: any): Promise {
+ const response = await fetch("https://api.openai.com/v1/chat/completions", {
+ method: "POST",
+ headers: {
+ "Authorization": `Bearer ${this.apiKey}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ model: this.model,
+ messages,
+ max_tokens: context?.maxTokens || 150,
+ temperature: context?.temperature || 0.7,
+ }),
+ });
+
+ if (!response.ok) {
+ throw new Error(`OpenAI API error: ${response.statusText}`);
+ }
+
+ const data = await response.json();
+ return data.choices[0].message.content;
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/tests/ai-test.ts b/typescript-sdk/integrations/community-whatsapp/src/tests/ai-test.ts
new file mode 100644
index 000000000..6575a1747
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/tests/ai-test.ts
@@ -0,0 +1,81 @@
+import { EnhancedWhatsAppAgent } from "../agents/enhanced-whatsapp-agent";
+
+// Test the enhanced WhatsApp agent with AI
+export async function aiTest() {
+ console.log("๐ค Creating Enhanced WhatsApp Agent with AI...");
+
+ // Create an enhanced agent (without real AI provider for demo)
+ const agent = new EnhancedWhatsAppAgent({
+ phoneNumberId: "test-phone-id",
+ accessToken: "test-access-token",
+ webhookSecret: "test-webhook-secret",
+ threadId: "ai-conversation",
+ systemPrompt: "You are a helpful WhatsApp assistant. Be friendly and concise.",
+ maxTokens: 150,
+ temperature: 0.7,
+ });
+
+ console.log("โ
Enhanced agent created successfully!");
+ console.log("๐ง System prompt:", agent.setSystemPrompt);
+ console.log("๐ Max tokens:", 150);
+ console.log("๐ก๏ธ Temperature:", 0.7);
+
+ // Test AI response generation (will use fallback since no AI provider)
+ console.log("\n๐ค Testing AI response generation...");
+
+ const testMessages = [
+ { role: "user", content: "Hello, how are you?" }
+ ];
+
+ // This will use the fallback response since no AI provider is configured
+ const response = await (agent as any).generateAIResponse(testMessages);
+ console.log("โ
AI response generated:");
+ console.log(" Response:", response);
+
+ // Test webhook handling with AI
+ console.log("\n๐จ Testing webhook handling with AI...");
+
+ const testWebhook = {
+ object: "whatsapp_business_account",
+ entry: [{
+ id: "123456789",
+ changes: [{
+ value: {
+ messaging_product: "whatsapp",
+ metadata: {
+ display_phone_number: "+1234567890",
+ phone_number_id: "test-phone-id"
+ },
+ messages: [{
+ id: "test-message-id",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "text" as const,
+ text: {
+ body: "Hello from WhatsApp!"
+ }
+ }]
+ },
+ field: "messages"
+ }]
+ }]
+ };
+
+ const webhookBody = JSON.stringify(testWebhook);
+ const signature = "sha256=test-signature";
+
+ try {
+ await agent.handleWebhookWithAI(webhookBody, signature);
+ console.log("โ
Webhook handled with AI successfully!");
+ } catch (error) {
+ console.log("โ ๏ธ Webhook handling failed (expected due to fake signature):", (error as Error).message);
+ }
+
+ console.log("\n๐ AI test completed successfully!");
+ return agent;
+}
+
+// Run the test if this file is executed directly
+if (require.main === module) {
+ aiTest().catch(console.error);
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/tests/simple-test.ts b/typescript-sdk/integrations/community-whatsapp/src/tests/simple-test.ts
new file mode 100644
index 000000000..7d5d1fae8
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/tests/simple-test.ts
@@ -0,0 +1,75 @@
+import { WhatsAppAgent } from "../agents/whatsapp-agent";
+
+// Simple test to understand the WhatsApp agent
+export async function simpleTest() {
+ console.log("๐ค Creating WhatsApp Agent...");
+
+ // Create a basic WhatsApp agent
+ const agent = new WhatsAppAgent({
+ phoneNumberId: "test-phone-id",
+ accessToken: "test-access-token",
+ webhookSecret: "test-webhook-secret",
+ threadId: "test-conversation",
+ });
+
+ console.log("โ
Agent created successfully!");
+ console.log("๐ฑ Phone Number ID:", agent.phoneNumberId);
+ console.log("๐งต Thread ID:", agent.threadId);
+
+ // Test webhook signature verification
+ console.log("\n๐ Testing webhook signature verification...");
+ const testBody = '{"test": "data"}';
+ const testSignature = "sha256=1234567890abcdef";
+
+ const isValid = agent.verifyWebhookSignature(testBody, testSignature);
+ console.log("โ
Signature verification test completed (result:", isValid, ")");
+
+ // Test message conversion
+ console.log("\n๐ Testing message conversion...");
+ const whatsappMessage = {
+ id: "test-message-id",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "text" as const,
+ text: {
+ body: "Hello from WhatsApp!"
+ }
+ };
+
+ const aguiMessage = agent.convertWhatsAppMessageToAGUI(whatsappMessage);
+ console.log("โ
WhatsApp message converted to AG-UI format:");
+ console.log(" ID:", aguiMessage.id);
+ console.log(" Role:", aguiMessage.role);
+ console.log(" Content:", aguiMessage.content);
+
+ // Test webhook processing
+ console.log("\n๐จ Testing webhook processing...");
+ const testWebhook = {
+ object: "whatsapp_business_account",
+ entry: [{
+ id: "123456789",
+ changes: [{
+ value: {
+ messaging_product: "whatsapp",
+ metadata: {
+ display_phone_number: "+1234567890",
+ phone_number_id: "test-phone-id"
+ },
+ messages: [whatsappMessage]
+ },
+ field: "messages"
+ }]
+ }]
+ };
+
+ const messages = agent.processWebhook(testWebhook);
+ console.log("โ
Webhook processed, found", messages.length, "message(s)");
+
+ console.log("\n๐ All tests completed successfully!");
+ return agent;
+}
+
+// Run the test if this file is executed directly
+if (require.main === module) {
+ simpleTest().catch(console.error);
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/tests/whatsapp-agent.test.ts b/typescript-sdk/integrations/community-whatsapp/src/tests/whatsapp-agent.test.ts
new file mode 100644
index 000000000..f560f15f7
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/tests/whatsapp-agent.test.ts
@@ -0,0 +1,217 @@
+import { WhatsAppAgent } from "../agents/whatsapp-agent";
+import { WhatsAppMessage } from "../types";
+
+describe("WhatsAppAgent", () => {
+ let agent: WhatsAppAgent;
+
+ beforeEach(() => {
+ agent = new WhatsAppAgent({
+ phoneNumberId: "test-phone-number-id",
+ accessToken: "test-access-token",
+ webhookSecret: "test-webhook-secret",
+ description: "Test WhatsApp Agent",
+ threadId: "test-thread-id",
+ });
+ });
+
+ describe("constructor", () => {
+ it("should create a WhatsApp agent with correct configuration", () => {
+ expect(agent).toBeInstanceOf(WhatsAppAgent);
+ expect(agent.description).toBe("Test WhatsApp Agent");
+ expect(agent.threadId).toBe("test-thread-id");
+ });
+
+ it("should use default API version when not provided", () => {
+ const agentWithDefaults = new WhatsAppAgent({
+ phoneNumberId: "test-phone-number-id",
+ accessToken: "test-access-token",
+ webhookSecret: "test-webhook-secret",
+ });
+
+ expect(agentWithDefaults).toBeInstanceOf(WhatsAppAgent);
+ });
+ });
+
+ describe("verifyWebhookSignature", () => {
+ it("should verify valid webhook signature", () => {
+ const body = '{"test": "data"}';
+ const signature = "sha256=1234567890abcdef";
+
+ // Mock the crypto module
+ const mockCreateHmac = jest.fn().mockReturnValue({
+ update: jest.fn().mockReturnThis(),
+ digest: jest.fn().mockReturnValue("1234567890abcdef"),
+ });
+
+ jest.doMock("crypto", () => ({
+ createHmac: mockCreateHmac,
+ }));
+
+ const result = agent.verifyWebhookSignature(body, signature);
+ expect(result).toBe(true);
+ });
+
+ it("should reject invalid webhook signature", () => {
+ const body = '{"test": "data"}';
+ const signature = "sha256=invalid-signature";
+
+ const mockCreateHmac = jest.fn().mockReturnValue({
+ update: jest.fn().mockReturnThis(),
+ digest: jest.fn().mockReturnValue("1234567890abcdef"),
+ });
+
+ jest.doMock("crypto", () => ({
+ createHmac: mockCreateHmac,
+ }));
+
+ const result = agent.verifyWebhookSignature(body, signature);
+ expect(result).toBe(false);
+ });
+ });
+
+ describe("convertWhatsAppMessageToAGUI", () => {
+ it("should convert text message correctly", () => {
+ const whatsappMessage: WhatsAppMessage = {
+ id: "test-message-id",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "text",
+ text: {
+ body: "Hello, world!",
+ },
+ };
+
+ const result = (agent as any).convertWhatsAppMessageToAGUI(whatsappMessage);
+
+ expect(result).toEqual({
+ id: "test-message-id",
+ role: "user",
+ content: "Hello, world!",
+ timestamp: expect.any(String),
+ });
+ });
+
+ it("should convert image message correctly", () => {
+ const whatsappMessage: WhatsAppMessage = {
+ id: "test-message-id",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "image",
+ image: {
+ id: "image-id",
+ mime_type: "image/jpeg",
+ sha256: "abc123",
+ caption: "Beautiful sunset",
+ },
+ };
+
+ const result = (agent as any).convertWhatsAppMessageToAGUI(whatsappMessage);
+
+ expect(result).toEqual({
+ id: "test-message-id",
+ role: "user",
+ content: "[Image]: Beautiful sunset",
+ timestamp: expect.any(String),
+ });
+ });
+
+ it("should convert audio message correctly", () => {
+ const whatsappMessage: WhatsAppMessage = {
+ id: "test-message-id",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "audio",
+ audio: {
+ id: "audio-id",
+ mime_type: "audio/ogg",
+ sha256: "def456",
+ },
+ };
+
+ const result = (agent as any).convertWhatsAppMessageToAGUI(whatsappMessage);
+
+ expect(result).toEqual({
+ id: "test-message-id",
+ role: "user",
+ content: "[Audio message]",
+ timestamp: expect.any(String),
+ });
+ });
+ });
+
+ describe("processWebhook", () => {
+ it("should extract messages from webhook data", () => {
+ const webhookData = {
+ object: "whatsapp_business_account",
+ entry: [
+ {
+ id: "123456789",
+ changes: [
+ {
+ value: {
+ messaging_product: "whatsapp",
+ metadata: {
+ display_phone_number: "+1234567890",
+ phone_number_id: "test-phone-number-id",
+ },
+ messages: [
+ {
+ id: "wamid.123456789",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "text",
+ text: {
+ body: "Hello!",
+ },
+ },
+ ],
+ },
+ field: "messages",
+ },
+ ],
+ },
+ ],
+ };
+
+ const messages = agent.processWebhook(webhookData);
+
+ expect(messages).toHaveLength(1);
+ expect(messages[0]).toEqual({
+ id: "wamid.123456789",
+ from: "1234567890",
+ timestamp: "1234567890",
+ type: "text",
+ text: {
+ body: "Hello!",
+ },
+ });
+ });
+
+ it("should handle webhook with no messages", () => {
+ const webhookData = {
+ object: "whatsapp_business_account",
+ entry: [
+ {
+ id: "123456789",
+ changes: [
+ {
+ value: {
+ messaging_product: "whatsapp",
+ metadata: {
+ display_phone_number: "+1234567890",
+ phone_number_id: "test-phone-number-id",
+ },
+ },
+ field: "messages",
+ },
+ ],
+ },
+ ],
+ };
+
+ const messages = agent.processWebhook(webhookData);
+
+ expect(messages).toHaveLength(0);
+ });
+ });
+});
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/types/index.ts b/typescript-sdk/integrations/community-whatsapp/src/types/index.ts
new file mode 100644
index 000000000..ff3b6defc
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/types/index.ts
@@ -0,0 +1,180 @@
+import { AgentConfig } from "@ag-ui/client";
+
+export interface AIProvider {
+ generateResponse(messages: any[], context?: any): Promise;
+}
+
+export interface WhatsAppAgentConfig extends AgentConfig {
+ phoneNumberId: string;
+ accessToken: string;
+ webhookSecret: string;
+ apiVersion?: string;
+ baseUrl?: string;
+}
+
+export interface WhatsAppMessage {
+ id: string;
+ from: string;
+ timestamp: string;
+ type: "text" | "image" | "audio" | "document" | "video" | "location" | "contact";
+ text?: {
+ body: string;
+ };
+ image?: {
+ id: string;
+ mime_type: string;
+ sha256: string;
+ caption?: string;
+ };
+ audio?: {
+ id: string;
+ mime_type: string;
+ sha256: string;
+ };
+ document?: {
+ id: string;
+ filename: string;
+ mime_type: string;
+ sha256: string;
+ };
+ video?: {
+ id: string;
+ mime_type: string;
+ sha256: string;
+ caption?: string;
+ };
+ location?: {
+ latitude: number;
+ longitude: number;
+ name?: string;
+ address?: string;
+ };
+ contacts?: Array<{
+ name: {
+ formatted_name: string;
+ first_name?: string;
+ last_name?: string;
+ };
+ phones: Array<{
+ phone: string;
+ type?: string;
+ }>;
+ }>;
+}
+
+export interface WhatsAppWebhookEntry {
+ object: string;
+ entry: Array<{
+ id: string;
+ changes: Array<{
+ value: {
+ messaging_product: string;
+ metadata: {
+ display_phone_number: string;
+ phone_number_id: string;
+ };
+ contacts?: Array<{
+ profile: {
+ name: string;
+ };
+ wa_id: string;
+ }>;
+ messages?: WhatsAppMessage[];
+ statuses?: Array<{
+ id: string;
+ status: "sent" | "delivered" | "read" | "failed";
+ timestamp: string;
+ recipient_id: string;
+ }>;
+ };
+ field: string;
+ }>;
+ }>;
+}
+
+export interface WhatsAppSendMessageRequest {
+ messaging_product: string;
+ recipient_type: string;
+ to: string;
+ type: "text" | "image" | "audio" | "document" | "video" | "location" | "contact" | "template";
+ text?: {
+ body: string;
+ preview_url?: boolean;
+ };
+ image?: {
+ id?: string;
+ link?: string;
+ caption?: string;
+ };
+ audio?: {
+ id?: string;
+ link?: string;
+ };
+ document?: {
+ id?: string;
+ link?: string;
+ caption?: string;
+ filename?: string;
+ };
+ video?: {
+ id?: string;
+ link?: string;
+ caption?: string;
+ };
+ location?: {
+ latitude: number;
+ longitude: number;
+ name?: string;
+ address?: string;
+ };
+ contacts?: Array<{
+ name: {
+ formatted_name: string;
+ first_name?: string;
+ last_name?: string;
+ };
+ phones: Array<{
+ phone: string;
+ type?: string;
+ }>;
+ }>;
+ template?: {
+ name: string;
+ language: {
+ code: string;
+ };
+ components?: Array<{
+ type: string;
+ parameters?: Array<{
+ type: string;
+ text?: string;
+ image?: {
+ link: string;
+ };
+ }>;
+ }>;
+ };
+}
+
+export interface WhatsAppSendMessageResponse {
+ messaging_product: string;
+ contacts: Array<{
+ input: string;
+ wa_id: string;
+ }>;
+ messages: Array<{
+ id: string;
+ }>;
+}
+
+export interface WhatsAppError {
+ error: {
+ message: string;
+ type: string;
+ code: number;
+ error_data?: {
+ details: string;
+ };
+ fbtrace_id: string;
+ };
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/utils/index.ts b/typescript-sdk/integrations/community-whatsapp/src/utils/index.ts
new file mode 100644
index 000000000..de6fbfd60
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/utils/index.ts
@@ -0,0 +1,2 @@
+export * from "./webhook";
+export * from "./message-converter";
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/utils/message-converter.ts b/typescript-sdk/integrations/community-whatsapp/src/utils/message-converter.ts
new file mode 100644
index 000000000..59694d9cd
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/utils/message-converter.ts
@@ -0,0 +1,61 @@
+import { Message } from "@ag-ui/client";
+import { WhatsAppMessage, WhatsAppSendMessageRequest } from "../types";
+
+/**
+ * Convert WhatsApp message to AG-UI message format
+ */
+export function convertWhatsAppMessageToAGUI(whatsappMessage: WhatsAppMessage): Message {
+ let content = "";
+
+ switch (whatsappMessage.type) {
+ case "text":
+ content = whatsappMessage.text?.body || "";
+ break;
+ case "image":
+ content = `[Image]${whatsappMessage.image?.caption ? `: ${whatsappMessage.image.caption}` : ""}`;
+ break;
+ case "audio":
+ content = "[Audio message]";
+ break;
+ case "document":
+ content = `[Document: ${whatsappMessage.document?.filename || "Unknown file"}]`;
+ break;
+ case "video":
+ content = `[Video]${whatsappMessage.video?.caption ? `: ${whatsappMessage.video.caption}` : ""}`;
+ break;
+ case "location":
+ const location = whatsappMessage.location;
+ content = `[Location: ${location?.name || "Unknown location"} at ${location?.latitude}, ${location?.longitude}]`;
+ break;
+ case "contact":
+ const contacts = whatsappMessage.contacts;
+ if (contacts && contacts.length > 0) {
+ const contact = contacts[0];
+ content = `[Contact: ${contact.name.formatted_name}]`;
+ }
+ break;
+ default:
+ content = `[${whatsappMessage.type} message]`;
+ }
+
+ return {
+ id: whatsappMessage.id,
+ role: "user",
+ content,
+ };
+}
+
+/**
+ * Convert AG-UI message to WhatsApp message format
+ */
+export function convertAGUIMessageToWhatsApp(message: Message): WhatsAppSendMessageRequest {
+ return {
+ messaging_product: "whatsapp",
+ recipient_type: "individual",
+ to: "", // This will be set by the caller
+ type: "text",
+ text: {
+ body: message.content || "",
+ },
+ };
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/src/utils/webhook.ts b/typescript-sdk/integrations/community-whatsapp/src/utils/webhook.ts
new file mode 100644
index 000000000..6ed2b35e2
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/src/utils/webhook.ts
@@ -0,0 +1,30 @@
+import { createHmac } from "crypto";
+import { WhatsAppWebhookEntry, WhatsAppMessage } from "../types";
+
+/**
+ * Verify webhook signature from WhatsApp
+ */
+export function verifyWebhookSignature(body: string, signature: string, webhookSecret: string): boolean {
+ const expectedSignature = createHmac("sha256", webhookSecret)
+ .update(body)
+ .digest("hex");
+
+ return signature === `sha256=${expectedSignature}`;
+}
+
+/**
+ * Process incoming webhook from WhatsApp
+ */
+export function processWebhook(body: WhatsAppWebhookEntry): WhatsAppMessage[] {
+ const messages: WhatsAppMessage[] = [];
+
+ for (const entry of body.entry) {
+ for (const change of entry.changes) {
+ if (change.value.messages) {
+ messages.push(...change.value.messages);
+ }
+ }
+ }
+
+ return messages;
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/tsconfig.json b/typescript-sdk/integrations/community-whatsapp/tsconfig.json
new file mode 100644
index 000000000..4d77c0bc5
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "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,
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"]
+}
\ No newline at end of file
diff --git a/typescript-sdk/integrations/community-whatsapp/tsup.config.ts b/typescript-sdk/integrations/community-whatsapp/tsup.config.ts
new file mode 100644
index 000000000..e24c0244b
--- /dev/null
+++ b/typescript-sdk/integrations/community-whatsapp/tsup.config.ts
@@ -0,0 +1,10 @@
+import { defineConfig } from "tsup";
+
+export default defineConfig({
+ entry: ["src/index.ts"],
+ format: ["cjs", "esm"],
+ dts: true,
+ splitting: false,
+ sourcemap: true,
+ clean: true,
+});
\ No newline at end of file
diff --git a/typescript-sdk/pnpm-lock.yaml b/typescript-sdk/pnpm-lock.yaml
index 4e2d348c1..83a64af0c 100644
--- a/typescript-sdk/pnpm-lock.yaml
+++ b/typescript-sdk/pnpm-lock.yaml
@@ -119,7 +119,7 @@ importers:
version: 1.9.2(@types/react@19.1.5)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@copilotkit/runtime':
specifier: 1.9.2
- version: 1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)
+ version: 1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)
'@copilotkit/runtime-client-gql':
specifier: 1.9.2
version: 1.9.2(graphql@16.11.0)(react@19.1.0)
@@ -146,10 +146,10 @@ importers:
version: 0.11.5(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))(react@19.1.0)
'@mdx-js/loader':
specifier: ^3.1.0
- version: 3.1.0(acorn@8.14.1)(webpack@5.99.9)
+ version: 3.1.0(acorn@8.15.0)(webpack@5.99.9)
'@mdx-js/mdx':
specifier: ^3.1.0
- version: 3.1.0(acorn@8.14.1)
+ version: 3.1.0(acorn@8.15.0)
'@mdx-js/react':
specifier: ^3.1.0
version: 3.1.0(@types/react@19.1.5)(react@19.1.0)
@@ -158,7 +158,7 @@ importers:
version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@next/mdx':
specifier: ^15.2.3
- version: 15.3.2(@mdx-js/loader@3.1.0(acorn@8.14.1)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))
+ version: 15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))
'@radix-ui/react-dropdown-menu':
specifier: ^2.1.6
version: 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -307,7 +307,35 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ tsup:
+ specifier: ^8.0.2
+ version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
+ typescript:
+ specifier: ^5.3.3
+ version: 5.8.2
+
+ integrations/community-whatsapp:
+ dependencies:
+ '@ag-ui/client':
+ specifier: workspace:*
+ version: link:../../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.4
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@types/node@20.19.4)
+ ts-jest:
+ specifier: ^29.1.2
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.5)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -335,7 +363,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -350,10 +378,10 @@ importers:
version: link:../../packages/client
'@langchain/core':
specifier: ^0.3.38
- version: 0.3.56(openai@4.104.0(zod@3.25.71))
+ version: 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
'@langchain/langgraph-sdk':
specifier: ^0.0.78
- version: 0.0.78(@langchain/core@0.3.56(openai@4.104.0(zod@3.25.71)))(react@19.1.0)
+ version: 0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
partial-json:
specifier: ^0.1.7
version: 0.1.7
@@ -372,7 +400,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -400,7 +428,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -418,7 +446,7 @@ importers:
version: 1.2.11(zod@3.25.67)
'@copilotkit/runtime':
specifier: ^1.8.13
- version: 1.8.13(@ag-ui/client@packages+client)(@ag-ui/core@0.0.35)(@ag-ui/encoder@0.0.35)(@ag-ui/proto@0.0.35)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)
+ version: 1.8.13(@ag-ui/client@packages+client)(@ag-ui/core@0.0.35)(@ag-ui/encoder@0.0.35)(@ag-ui/proto@0.0.35)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)
'@mastra/client-js':
specifier: ^0.10.9
version: 0.10.9(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
@@ -443,7 +471,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -471,7 +499,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -499,7 +527,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -527,7 +555,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -555,7 +583,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -589,7 +617,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -623,7 +651,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -672,7 +700,7 @@ importers:
version: 29.7.0(@types/node@20.17.50)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -694,10 +722,10 @@ importers:
version: 29.5.14
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@20.17.50)
+ version: 29.7.0(@types/node@20.19.4)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -719,10 +747,10 @@ importers:
version: 29.5.14
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@20.17.50)
+ version: 29.7.0(@types/node@20.19.4)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -750,10 +778,10 @@ importers:
version: 29.5.14
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@20.17.50)
+ version: 29.7.0(@types/node@20.19.4)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2)
ts-proto:
specifier: ^2.7.0
version: 2.7.0
@@ -1208,18 +1236,10 @@ packages:
resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.27.1':
- resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/core@7.28.0':
resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.27.1':
- resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==}
- engines: {node: '>=6.9.0'}
-
'@babel/generator@7.28.0':
resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
engines: {node: '>=6.9.0'}
@@ -1236,12 +1256,6 @@ packages:
resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.27.1':
- resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
'@babel/helper-module-transforms@7.27.3':
resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==}
engines: {node: '>=6.9.0'}
@@ -1264,19 +1278,10 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.27.1':
- resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/helpers@7.27.6':
resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.27.2':
- resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
'@babel/parser@7.28.0':
resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
engines: {node: '>=6.0.0'}
@@ -1381,18 +1386,10 @@ packages:
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.27.1':
- resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==}
- engines: {node: '>=6.9.0'}
-
'@babel/traverse@7.28.0':
resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.27.1':
- resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==}
- engines: {node: '>=6.9.0'}
-
'@babel/types@7.28.0':
resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==}
engines: {node: '>=6.9.0'}
@@ -4940,11 +4937,6 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.14.1:
- resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -5175,11 +5167,6 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.24.5:
- resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
browserslist@4.25.1:
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -5682,9 +5669,6 @@ packages:
electrodb@3.4.3:
resolution: {integrity: sha512-4KpIF56mg+edhV+T6yzOiDEN7LnyWLX9iRp6+D6lYldX8j6VNBb8i5QK71k3V0hoCqKdl70i69ph7NBdPCkFwQ==}
- electron-to-chromium@1.5.155:
- resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==}
-
electron-to-chromium@1.5.179:
resolution: {integrity: sha512-UWKi/EbBopgfFsc5k61wFpV7WrnnSlSzW/e2XcBmS6qKYTivZlLtoll5/rdqRTxGglGHkmkW0j0pFNJG10EUIQ==}
@@ -6281,10 +6265,6 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
- globals@11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
-
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -10779,26 +10759,6 @@ snapshots:
'@babel/compat-data@7.27.2': {}
- '@babel/core@7.27.1':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.27.1
- '@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1)
- '@babel/helpers': 7.27.1
- '@babel/parser': 7.27.2
- '@babel/template': 7.27.2
- '@babel/traverse': 7.27.1
- '@babel/types': 7.27.1
- convert-source-map: 2.0.0
- debug: 4.4.1
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
'@babel/core@7.28.0':
dependencies:
'@ampproject/remapping': 2.3.0
@@ -10818,15 +10778,6 @@ snapshots:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- optional: true
-
- '@babel/generator@7.27.1':
- dependencies:
- '@babel/parser': 7.27.2
- '@babel/types': 7.27.1
- '@jridgewell/gen-mapping': 0.3.8
- '@jridgewell/trace-mapping': 0.3.25
- jsesc: 3.1.0
'@babel/generator@7.28.0':
dependencies:
@@ -10835,32 +10786,21 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.12
'@jridgewell/trace-mapping': 0.3.29
jsesc: 3.1.0
- optional: true
'@babel/helper-compilation-targets@7.27.2':
dependencies:
'@babel/compat-data': 7.27.2
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.24.5
+ browserslist: 4.25.1
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-globals@7.28.0':
- optional: true
+ '@babel/helper-globals@7.28.0': {}
'@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.27.1
- '@babel/types': 7.27.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.27.1
+ '@babel/traverse': 7.28.0
+ '@babel/types': 7.28.0
transitivePeerDependencies:
- supports-color
@@ -10872,7 +10812,6 @@ snapshots:
'@babel/traverse': 7.28.0
transitivePeerDependencies:
- supports-color
- optional: true
'@babel/helper-plugin-utils@7.27.1': {}
@@ -10882,199 +10821,98 @@ snapshots:
'@babel/helper-validator-option@7.27.1': {}
- '@babel/helpers@7.27.1':
- dependencies:
- '@babel/template': 7.27.2
- '@babel/types': 7.27.1
-
'@babel/helpers@7.27.6':
dependencies:
'@babel/template': 7.27.2
'@babel/types': 7.28.0
- optional: true
-
- '@babel/parser@7.27.2':
- dependencies:
- '@babel/types': 7.27.1
'@babel/parser@7.28.0':
dependencies:
'@babel/types': 7.28.0
- optional: true
-
- '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)':
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
-
- '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
+ '@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
-
- '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.1)':
- dependencies:
- '@babel/core': 7.27.1
- '@babel/helper-plugin-utils': 7.27.1
'@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.0)':
dependencies:
'@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- optional: true
- '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)':
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)':
dependencies:
- '@babel/core': 7.27.1
+ '@babel/core': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
'@babel/runtime@7.27.1': {}
@@ -11082,20 +10920,8 @@ snapshots:
'@babel/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/parser': 7.27.2
- '@babel/types': 7.27.1
-
- '@babel/traverse@7.27.1':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/generator': 7.27.1
- '@babel/parser': 7.27.2
- '@babel/template': 7.27.2
- '@babel/types': 7.27.1
- debug: 4.4.1
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
+ '@babel/parser': 7.28.0
+ '@babel/types': 7.28.0
'@babel/traverse@7.28.0':
dependencies:
@@ -11108,18 +10934,11 @@ snapshots:
debug: 4.4.1
transitivePeerDependencies:
- supports-color
- optional: true
-
- '@babel/types@7.27.1':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
'@babel/types@7.28.0':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1
- optional: true
'@bcoe/v8-coverage@0.2.3': {}
@@ -11223,7 +11042,7 @@ snapshots:
- encoding
- graphql
- '@copilotkit/runtime@1.8.13(@ag-ui/client@packages+client)(@ag-ui/core@0.0.35)(@ag-ui/encoder@0.0.35)(@ag-ui/proto@0.0.35)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)':
+ '@copilotkit/runtime@1.8.13(@ag-ui/client@packages+client)(@ag-ui/core@0.0.35)(@ag-ui/encoder@0.0.35)(@ag-ui/proto@0.0.35)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)':
dependencies:
'@ag-ui/client': link:packages/client
'@ag-ui/core': 0.0.35
@@ -11232,7 +11051,7 @@ snapshots:
'@anthropic-ai/sdk': 0.27.3
'@copilotkit/shared': 1.8.13
'@graphql-yoga/plugin-defer-stream': 3.13.4(graphql-yoga@5.13.4(graphql@16.11.0))(graphql@16.11.0)
- '@langchain/community': 0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)
+ '@langchain/community': 0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
'@langchain/google-gauth': 0.1.8(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)
'@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
@@ -11400,7 +11219,7 @@ snapshots:
- ws
- youtubei.js
- '@copilotkit/runtime@1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)':
+ '@copilotkit/runtime@1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)':
dependencies:
'@ag-ui/client': 0.0.33
'@ag-ui/core': 0.0.33
@@ -11410,12 +11229,12 @@ snapshots:
'@anthropic-ai/sdk': 0.27.3
'@copilotkit/shared': 1.9.2
'@graphql-yoga/plugin-defer-stream': 3.13.4(graphql-yoga@5.13.4(graphql@16.11.0))(graphql@16.11.0)
- '@langchain/aws': 0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))
- '@langchain/community': 0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)
- '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
- '@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
+ '@langchain/aws': 0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))
+ '@langchain/community': 0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)
+ '@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
+ '@langchain/google-gauth': 0.1.8(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)
+ '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
+ '@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
class-transformer: 0.5.1
class-validator: 0.14.2
express: 4.21.2
@@ -12267,7 +12086,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.29
'@types/node': 20.19.4
chalk: 4.1.2
collect-v8-coverage: 1.0.2
@@ -12295,7 +12114,7 @@ snapshots:
'@jest/source-map@29.6.3':
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.29
callsites: 3.1.0
graceful-fs: 4.2.11
@@ -12315,9 +12134,9 @@ snapshots:
'@jest/transform@29.7.0':
dependencies:
- '@babel/core': 7.27.1
+ '@babel/core': 7.28.0
'@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.29
babel-plugin-istanbul: 6.1.1
chalk: 4.1.2
convert-source-map: 2.0.0
@@ -12346,13 +12165,12 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.4
'@jridgewell/trace-mapping': 0.3.29
- optional: true
'@jridgewell/gen-mapping@0.3.8':
dependencies:
'@jridgewell/set-array': 1.2.1
- '@jridgewell/sourcemap-codec': 1.5.0
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/sourcemap-codec': 1.5.4
+ '@jridgewell/trace-mapping': 0.3.29
'@jridgewell/resolve-uri@3.1.2': {}
@@ -12366,19 +12184,17 @@ snapshots:
'@jridgewell/sourcemap-codec@1.5.0': {}
- '@jridgewell/sourcemap-codec@1.5.4':
- optional: true
+ '@jridgewell/sourcemap-codec@1.5.4': {}
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/sourcemap-codec': 1.5.4
'@jridgewell/trace-mapping@0.3.29':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4
- optional: true
'@js-sdsl/ordered-map@4.4.2': {}
@@ -12393,19 +12209,8 @@ snapshots:
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
transitivePeerDependencies:
- aws-crt
- optional: true
-
- '@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))':
- dependencies:
- '@aws-sdk/client-bedrock-agent-runtime': 3.844.0
- '@aws-sdk/client-bedrock-runtime': 3.844.0
- '@aws-sdk/client-kendra': 3.844.0
- '@aws-sdk/credential-provider-node': 3.844.0
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- transitivePeerDependencies:
- - aws-crt
- '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
+ '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
dependencies:
'@browserbasehq/stagehand': 2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67)
'@ibm-cloud/watsonx-ai': 1.6.8
@@ -12430,12 +12235,16 @@ snapshots:
'@aws-sdk/client-kendra': 3.844.0
'@aws-sdk/credential-provider-node': 3.844.0
'@browserbasehq/sdk': 2.6.0
- '@smithy/util-utf8': 2.3.0
+ '@libsql/client': 0.15.9
+ '@smithy/eventstream-codec': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/util-utf8': 4.0.0
'@upstash/redis': 1.35.1
cohere-ai: 7.17.1
fast-xml-parser: 5.2.5
google-auth-library: 10.1.0
- ignore: 5.3.2
+ ignore: 7.0.4
jsonwebtoken: 9.0.2
lodash: 4.17.21
pg: 8.16.3
@@ -12460,19 +12269,19 @@ snapshots:
- handlebars
- peggy
- '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@smithy/util-utf8@2.3.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@5.3.2)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
+ '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
dependencies:
'@browserbasehq/stagehand': 2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67)
'@ibm-cloud/watsonx-ai': 1.6.8
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- '@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
+ '@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
+ '@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
binary-extensions: 2.3.0
expr-eval: 2.0.2
flat: 5.0.2
ibm-cloud-sdk-core: 5.4.0
js-yaml: 4.1.0
langchain: 0.3.26(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(axios@1.10.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(ws@8.18.3)
- langsmith: 0.3.29(openai@4.104.0(zod@3.25.71))
+ langsmith: 0.3.29(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
openai: 4.104.0(ws@8.18.3)(zod@3.25.71)
uuid: 10.0.0
zod: 3.25.71
@@ -12485,12 +12294,16 @@ snapshots:
'@aws-sdk/client-kendra': 3.844.0
'@aws-sdk/credential-provider-node': 3.844.0
'@browserbasehq/sdk': 2.6.0
- '@smithy/util-utf8': 2.3.0
+ '@libsql/client': 0.15.9
+ '@smithy/eventstream-codec': 4.0.4
+ '@smithy/protocol-http': 5.1.2
+ '@smithy/signature-v4': 5.1.2
+ '@smithy/util-utf8': 4.0.0
'@upstash/redis': 1.35.1
cohere-ai: 7.17.1
fast-xml-parser: 5.2.5
google-auth-library: 10.1.0
- ignore: 5.3.2
+ ignore: 7.0.4
jsonwebtoken: 9.0.2
lodash: 4.17.21
pg: 8.16.3
@@ -12539,24 +12352,7 @@ snapshots:
camelcase: 6.3.0
decamelize: 1.2.0
js-tiktoken: 1.0.20
- langsmith: 0.3.29(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
- mustache: 4.2.0
- p-queue: 6.6.2
- p-retry: 4.6.2
- uuid: 10.0.0
- zod: 3.25.71
- zod-to-json-schema: 3.24.5(zod@3.25.71)
- transitivePeerDependencies:
- - openai
-
- '@langchain/core@0.3.56(openai@4.104.0(zod@3.25.71))':
- 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.29(openai@4.104.0(zod@3.25.71))
+ langsmith: 0.3.29(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
mustache: 4.2.0
p-queue: 6.6.2
p-retry: 4.6.2
@@ -12574,14 +12370,6 @@ snapshots:
transitivePeerDependencies:
- zod
- '@langchain/google-common@0.1.8(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)':
- dependencies:
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- uuid: 10.0.0
- zod-to-json-schema: 3.24.6(zod@3.25.71)
- transitivePeerDependencies:
- - zod
-
'@langchain/google-gauth@0.1.8(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)':
dependencies:
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
@@ -12592,16 +12380,6 @@ snapshots:
- supports-color
- zod
- '@langchain/google-gauth@0.1.8(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)':
- dependencies:
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- '@langchain/google-common': 0.1.8(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)
- google-auth-library: 8.9.0
- transitivePeerDependencies:
- - encoding
- - supports-color
- - zod
-
'@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)':
dependencies:
'@types/json-schema': 7.0.15
@@ -12612,16 +12390,6 @@ snapshots:
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
react: 19.1.0
- '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.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.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- react: 19.1.0
-
'@langchain/langgraph-sdk@0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)':
dependencies:
'@types/json-schema': 7.0.15
@@ -12632,16 +12400,6 @@ snapshots:
'@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
react: 19.1.0
- '@langchain/langgraph-sdk@0.0.78(@langchain/core@0.3.56(openai@4.104.0(zod@3.25.71)))(react@19.1.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.56(openai@4.104.0(zod@3.25.71))
- react: 19.1.0
-
'@langchain/openai@0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)':
dependencies:
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
@@ -12653,27 +12411,11 @@ snapshots:
- encoding
- ws
- '@langchain/openai@0.4.9(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)':
- dependencies:
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- js-tiktoken: 1.0.20
- openai: 4.104.0(ws@8.18.3)(zod@3.25.71)
- zod: 3.25.71
- zod-to-json-schema: 3.24.6(zod@3.25.71)
- transitivePeerDependencies:
- - encoding
- - ws
-
'@langchain/textsplitters@0.1.0(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))':
dependencies:
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
js-tiktoken: 1.0.20
- '@langchain/textsplitters@0.1.0(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))':
- dependencies:
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- js-tiktoken: 1.0.20
-
'@libsql/client@0.15.9':
dependencies:
'@libsql/core': 0.15.9
@@ -13050,9 +12792,9 @@ snapshots:
zod-from-json-schema: 0.0.5
zod-to-json-schema: 3.24.6(zod@3.25.67)
- '@mdx-js/loader@3.1.0(acorn@8.14.1)(webpack@5.99.9)':
+ '@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9)':
dependencies:
- '@mdx-js/mdx': 3.1.0(acorn@8.14.1)
+ '@mdx-js/mdx': 3.1.0(acorn@8.15.0)
source-map: 0.7.4
optionalDependencies:
webpack: 5.99.9
@@ -13060,7 +12802,7 @@ snapshots:
- acorn
- supports-color
- '@mdx-js/mdx@3.1.0(acorn@8.14.1)':
+ '@mdx-js/mdx@3.1.0(acorn@8.15.0)':
dependencies:
'@types/estree': 1.0.7
'@types/estree-jsx': 1.0.5
@@ -13074,7 +12816,7 @@ snapshots:
hast-util-to-jsx-runtime: 2.3.6
markdown-extensions: 2.0.0
recma-build-jsx: 1.0.0
- recma-jsx: 1.0.0(acorn@8.14.1)
+ recma-jsx: 1.0.0(acorn@8.15.0)
recma-stringify: 1.0.0
rehype-recma: 1.0.0
remark-mdx: 3.1.0
@@ -13122,11 +12864,11 @@ snapshots:
dependencies:
fast-glob: 3.3.1
- '@next/mdx@15.3.2(@mdx-js/loader@3.1.0(acorn@8.14.1)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))':
+ '@next/mdx@15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))':
dependencies:
source-map: 0.7.4
optionalDependencies:
- '@mdx-js/loader': 3.1.0(acorn@8.14.1)(webpack@5.99.9)
+ '@mdx-js/loader': 3.1.0(acorn@8.15.0)(webpack@5.99.9)
'@mdx-js/react': 3.1.0(@types/react@19.1.5)(react@19.1.0)
'@next/swc-darwin-arm64@15.2.1':
@@ -15090,24 +14832,24 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.27.2
- '@babel/types': 7.27.1
+ '@babel/parser': 7.28.0
+ '@babel/types': 7.28.0
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.7
'@types/babel__generator@7.27.0':
dependencies:
- '@babel/types': 7.27.1
+ '@babel/types': 7.28.0
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.27.2
- '@babel/types': 7.27.1
+ '@babel/parser': 7.28.0
+ '@babel/types': 7.28.0
'@types/babel__traverse@7.20.7':
dependencies:
- '@babel/types': 7.27.1
+ '@babel/types': 7.28.0
'@types/bunyan@1.8.11':
dependencies:
@@ -15139,12 +14881,11 @@ snapshots:
'@types/estree-jsx@1.0.5':
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/estree@1.0.7': {}
- '@types/estree@1.0.8':
- optional: true
+ '@types/estree@1.0.8': {}
'@types/graceful-fs@4.1.9':
dependencies:
@@ -15580,18 +15321,15 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
- acorn-import-attributes@1.9.5(acorn@8.14.1):
+ acorn-import-attributes@1.9.5(acorn@8.15.0):
dependencies:
- acorn: 8.14.1
+ acorn: 8.15.0
- acorn-jsx@5.3.2(acorn@8.14.1):
+ acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
- acorn: 8.14.1
-
- acorn@8.14.1: {}
+ acorn: 8.15.0
- acorn@8.15.0:
- optional: true
+ acorn@8.15.0: {}
agent-base@6.0.2:
dependencies:
@@ -15803,19 +15541,6 @@ snapshots:
axobject-query@4.1.0: {}
- babel-jest@29.7.0(@babel/core@7.27.1):
- dependencies:
- '@babel/core': 7.27.1
- '@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.27.1)
- chalk: 4.1.2
- graceful-fs: 4.2.11
- slash: 3.0.0
- transitivePeerDependencies:
- - supports-color
-
babel-jest@29.7.0(@babel/core@7.28.0):
dependencies:
'@babel/core': 7.28.0
@@ -15828,7 +15553,6 @@ snapshots:
slash: 3.0.0
transitivePeerDependencies:
- supports-color
- optional: true
babel-plugin-istanbul@6.1.1:
dependencies:
@@ -15843,29 +15567,10 @@ snapshots:
babel-plugin-jest-hoist@29.6.3:
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.27.1
+ '@babel/types': 7.28.0
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.7
- babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.1):
- dependencies:
- '@babel/core': 7.27.1
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.1)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.1)
- '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.1)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.1)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.1)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.1)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.1)
-
babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.0):
dependencies:
'@babel/core': 7.28.0
@@ -15884,20 +15589,12 @@ snapshots:
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.0)
'@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.0)
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.0)
- optional: true
-
- babel-preset-jest@29.6.3(@babel/core@7.27.1):
- dependencies:
- '@babel/core': 7.27.1
- babel-plugin-jest-hoist: 29.6.3
- babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1)
babel-preset-jest@29.6.3(@babel/core@7.28.0):
dependencies:
'@babel/core': 7.28.0
babel-plugin-jest-hoist: 29.6.3
babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0)
- optional: true
bail@2.0.2: {}
@@ -15947,20 +15644,12 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.24.5:
- dependencies:
- caniuse-lite: 1.0.30001718
- electron-to-chromium: 1.5.155
- node-releases: 2.0.19
- update-browserslist-db: 1.1.3(browserslist@4.24.5)
-
browserslist@4.25.1:
dependencies:
caniuse-lite: 1.0.30001726
electron-to-chromium: 1.5.179
node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.25.1)
- optional: true
bs-logger@0.2.6:
dependencies:
@@ -16021,8 +15710,7 @@ snapshots:
caniuse-lite@1.0.30001718: {}
- caniuse-lite@1.0.30001726:
- optional: true
+ caniuse-lite@1.0.30001726: {}
case-anything@2.1.13: {}
@@ -16216,6 +15904,21 @@ snapshots:
- supports-color
- ts-node
+ create-jest@29.7.0(@types/node@20.19.4):
+ 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.4)
+ jest-util: 29.7.0
+ prompts: 2.4.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
crelt@1.0.6: {}
cross-inspect@1.0.1:
@@ -16381,10 +16084,7 @@ snapshots:
transitivePeerDependencies:
- '@aws-sdk/client-dynamodb'
- electron-to-chromium@1.5.155: {}
-
- electron-to-chromium@1.5.179:
- optional: true
+ electron-to-chromium@1.5.179: {}
emittery@0.13.1: {}
@@ -16530,7 +16230,7 @@ snapshots:
esast-util-from-js@2.0.1:
dependencies:
'@types/estree-jsx': 1.0.5
- acorn: 8.14.1
+ acorn: 8.15.0
esast-util-from-estree: 2.0.0
vfile-message: 4.0.2
@@ -16787,8 +16487,8 @@ snapshots:
espree@10.3.0:
dependencies:
- acorn: 8.14.1
- acorn-jsx: 5.3.2(acorn@8.14.1)
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.0
esprima@4.0.1: {}
@@ -16808,7 +16508,7 @@ snapshots:
estree-util-attach-comments@3.0.0:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
estree-util-build-jsx@3.0.1:
dependencies:
@@ -16821,7 +16521,7 @@ snapshots:
estree-util-scope@1.0.0:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
devlop: 1.1.0
estree-util-to-js@2.0.0:
@@ -16837,7 +16537,7 @@ snapshots:
estree-walker@3.0.3:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
esutils@2.0.3: {}
@@ -17273,8 +16973,6 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
- globals@11.12.0: {}
-
globals@14.0.0: {}
globalthis@1.0.4:
@@ -17461,7 +17159,7 @@ snapshots:
hast-util-to-estree@3.1.3:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
comma-separated-tokens: 2.0.3
@@ -17482,7 +17180,7 @@ snapshots:
hast-util-to-jsx-runtime@2.3.6:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/hast': 3.0.4
'@types/unist': 3.0.3
comma-separated-tokens: 2.0.3
@@ -17631,8 +17329,8 @@ snapshots:
import-in-the-middle@1.14.0:
dependencies:
- acorn: 8.14.1
- acorn-import-attributes: 1.9.5(acorn@8.14.1)
+ 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
@@ -17846,8 +17544,8 @@ snapshots:
istanbul-lib-instrument@5.2.1:
dependencies:
- '@babel/core': 7.27.1
- '@babel/parser': 7.27.2
+ '@babel/core': 7.28.0
+ '@babel/parser': 7.28.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
@@ -17856,8 +17554,8 @@ snapshots:
istanbul-lib-instrument@6.0.3:
dependencies:
- '@babel/core': 7.27.1
- '@babel/parser': 7.27.2
+ '@babel/core': 7.28.0
+ '@babel/parser': 7.28.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
semver: 7.7.2
@@ -17956,12 +17654,31 @@ snapshots:
- supports-color
- ts-node
+ jest-cli@29.7.0(@types/node@20.19.4):
+ 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.4)
+ exit: 0.1.2
+ import-local: 3.2.0
+ jest-config: 29.7.0(@types/node@20.19.4)
+ 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.17.50):
dependencies:
- '@babel/core': 7.27.1
+ '@babel/core': 7.28.0
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.27.1)
+ babel-jest: 29.7.0(@babel/core@7.28.0)
chalk: 4.1.2
ci-info: 3.9.0
deepmerge: 4.3.1
@@ -17988,10 +17705,10 @@ snapshots:
jest-config@29.7.0(@types/node@20.19.4):
dependencies:
- '@babel/core': 7.27.1
+ '@babel/core': 7.28.0
'@jest/test-sequencer': 29.7.0
'@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.27.1)
+ babel-jest: 29.7.0(@babel/core@7.28.0)
chalk: 4.1.2
ci-info: 3.9.0
deepmerge: 4.3.1
@@ -18172,15 +17889,15 @@ snapshots:
jest-snapshot@29.7.0:
dependencies:
- '@babel/core': 7.27.1
- '@babel/generator': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1)
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1)
- '@babel/types': 7.27.1
+ '@babel/core': 7.28.0
+ '@babel/generator': 7.28.0
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0)
+ '@babel/types': 7.28.0
'@jest/expect-utils': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1)
+ babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0)
chalk: 4.1.2
expect: 29.7.0
graceful-fs: 4.2.11
@@ -18250,6 +17967,18 @@ snapshots:
- supports-color
- ts-node
+ jest@29.7.0(@types/node@20.19.4):
+ 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.4)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - supports-color
+ - ts-node
+
jiti@2.4.2: {}
jose@5.10.0: {}
@@ -18402,13 +18131,13 @@ snapshots:
langchain@0.3.26(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(axios@1.10.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(ws@8.18.3):
dependencies:
- '@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- '@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
- '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))
+ '@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
+ '@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
+ '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))
js-tiktoken: 1.0.20
js-yaml: 4.1.0
jsonpointer: 5.0.1
- langsmith: 0.3.29(openai@4.104.0(zod@3.25.71))
+ langsmith: 0.3.29(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
openapi-types: 12.1.3
p-retry: 4.6.2
uuid: 10.0.0
@@ -18416,7 +18145,7 @@ snapshots:
zod: 3.25.71
zod-to-json-schema: 3.24.6(zod@3.25.71)
optionalDependencies:
- '@langchain/aws': 0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))
+ '@langchain/aws': 0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))
axios: 1.10.0(debug@4.4.1)
transitivePeerDependencies:
- encoding
@@ -18435,7 +18164,7 @@ snapshots:
optionalDependencies:
openai: 4.100.0(ws@8.18.3)(zod@3.25.67)
- langsmith@0.3.29(openai@4.104.0(zod@3.25.71)):
+ langsmith@0.3.29(openai@4.104.0(ws@8.18.3)(zod@3.25.71)):
dependencies:
'@types/uuid': 10.0.0
chalk: 4.1.2
@@ -18576,7 +18305,7 @@ snapshots:
log-symbols@5.1.0:
dependencies:
- chalk: 5.2.0
+ chalk: 5.4.1
is-unicode-supported: 1.3.0
long@5.3.2: {}
@@ -18970,7 +18699,7 @@ snapshots:
micromark-extension-mdx-expression@3.0.1:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
devlop: 1.1.0
micromark-factory-mdx-expression: 2.0.3
micromark-factory-space: 2.0.1
@@ -18981,7 +18710,7 @@ snapshots:
micromark-extension-mdx-jsx@3.0.2:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
devlop: 1.1.0
estree-util-is-identifier-name: 3.0.0
micromark-factory-mdx-expression: 2.0.3
@@ -18998,7 +18727,7 @@ snapshots:
micromark-extension-mdxjs-esm@3.0.0:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
micromark-util-character: 2.1.1
@@ -19010,8 +18739,8 @@ snapshots:
micromark-extension-mdxjs@3.0.0:
dependencies:
- acorn: 8.14.1
- acorn-jsx: 5.3.2(acorn@8.14.1)
+ 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
@@ -19047,7 +18776,7 @@ snapshots:
micromark-factory-mdx-expression@2.0.3:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
@@ -19163,7 +18892,7 @@ snapshots:
micromark-util-events-to-acorn@2.0.3:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/unist': 3.0.3
devlop: 1.1.0
estree-util-visit: 2.0.0
@@ -19310,7 +19039,7 @@ snapshots:
mlly@1.7.4:
dependencies:
- acorn: 8.14.1
+ acorn: 8.15.0
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.6.1
@@ -20161,13 +19890,13 @@ snapshots:
recma-build-jsx@1.0.0:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
estree-util-build-jsx: 3.0.1
vfile: 6.0.3
- recma-jsx@1.0.0(acorn@8.14.1):
+ recma-jsx@1.0.0(acorn@8.15.0):
dependencies:
- acorn-jsx: 5.3.2(acorn@8.14.1)
+ 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
@@ -20177,14 +19906,14 @@ snapshots:
recma-parse@1.0.0:
dependencies:
- '@types/estree': 1.0.7
+ '@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.7
+ '@types/estree': 1.0.8
estree-util-to-js: 2.0.0
unified: 11.0.5
vfile: 6.0.3
@@ -20242,7 +19971,7 @@ snapshots:
rehype-recma@1.0.0:
dependencies:
- '@types/estree': 1.0.7
+ '@types/estree': 1.0.8
'@types/hast': 3.0.4
hast-util-to-estree: 3.1.3
transitivePeerDependencies:
@@ -20763,7 +20492,7 @@ snapshots:
sucrase@3.35.0:
dependencies:
- '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/gen-mapping': 0.3.12
commander: 4.1.1
glob: 10.4.5
lines-and-columns: 1.2.4
@@ -20909,7 +20638,7 @@ snapshots:
ts-interface-checker@0.1.13: {}
- ts-jest@29.3.4(@babel/core@7.27.1)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.1))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2):
+ ts-jest@29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
@@ -20924,18 +20653,39 @@ snapshots:
typescript: 5.8.2
yargs-parser: 21.1.1
optionalDependencies:
- '@babel/core': 7.27.1
+ '@babel/core': 7.28.0
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.28.0)
+ esbuild: 0.25.4
+
+ ts-jest@29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2):
+ dependencies:
+ bs-logger: 0.2.6
+ ejs: 3.1.10
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.7.0(@types/node@20.19.4)
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.7.2
+ type-fest: 4.41.0
+ typescript: 5.8.2
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.28.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.27.1)
+ babel-jest: 29.7.0(@babel/core@7.28.0)
esbuild: 0.25.4
- ts-jest@29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest@29.7.0(@types/node@20.17.50))(typescript@5.8.2):
+ ts-jest@29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.5)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@20.17.50)
+ jest: 29.7.0(@types/node@20.19.4)
jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
@@ -20949,6 +20699,7 @@ snapshots:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.28.0)
+ esbuild: 0.25.5
ts-poet@6.11.0:
dependencies:
@@ -21227,18 +20978,11 @@ snapshots:
untruncate-json@0.0.1: {}
- update-browserslist-db@1.1.3(browserslist@4.24.5):
- dependencies:
- browserslist: 4.24.5
- escalade: 3.2.0
- picocolors: 1.1.1
-
update-browserslist-db@1.1.3(browserslist@4.25.1):
dependencies:
browserslist: 4.25.1
escalade: 3.2.0
picocolors: 1.1.1
- optional: true
uri-js@4.4.1:
dependencies:
@@ -21297,7 +21041,7 @@ snapshots:
v8-to-istanbul@9.3.0:
dependencies:
- '@jridgewell/trace-mapping': 0.3.25
+ '@jridgewell/trace-mapping': 0.3.29
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
From 5b0ee0d42e3e8a5bc64ad79206b05ad803e728c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 06:16:23 +0200
Subject: [PATCH 02/14] Add whatsapp-client-demo
---
.../apps/client-whatsapp-example/.gitignore | 44 +
.../apps/client-whatsapp-example/README.md | 190 +++
.../apps/client-whatsapp-example/package.json | 28 +
.../src/app/api/send-message/route.ts | 78 ++
.../src/app/api/webhook/route.ts | 64 +
.../src/app/config/page.tsx | 329 +++++
.../src/app/globals.css | 21 +
.../src/app/layout.tsx | 34 +
.../client-whatsapp-example/src/app/page.tsx | 365 ++++++
.../client-whatsapp-example/src/lib/config.ts | 92 ++
.../client-whatsapp-example/tsconfig.json | 27 +
typescript-sdk/pnpm-lock.yaml | 1083 ++++++++++++++++-
12 files changed, 2314 insertions(+), 41 deletions(-)
create mode 100644 typescript-sdk/apps/client-whatsapp-example/.gitignore
create mode 100644 typescript-sdk/apps/client-whatsapp-example/README.md
create mode 100644 typescript-sdk/apps/client-whatsapp-example/package.json
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/config/page.tsx
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/globals.css
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/lib/config.ts
create mode 100644 typescript-sdk/apps/client-whatsapp-example/tsconfig.json
diff --git a/typescript-sdk/apps/client-whatsapp-example/.gitignore b/typescript-sdk/apps/client-whatsapp-example/.gitignore
new file mode 100644
index 000000000..2a5eb5b3f
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/.gitignore
@@ -0,0 +1,44 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/versions
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# env files (can opt-in for committing if needed)
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
+
+# demo config file
+.config.json
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/README.md b/typescript-sdk/apps/client-whatsapp-example/README.md
new file mode 100644
index 000000000..67badf260
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/README.md
@@ -0,0 +1,190 @@
+# AG-UI WhatsApp Example
+
+A Next.js demonstration application showcasing AG-UI's WhatsApp Business API integration. This example shows how to build a web application that can send WhatsApp messages and receive webhooks.
+
+## Features
+
+- **WhatsApp Business API Integration**: Send messages using the WhatsApp Business API
+- **Web-based Configuration**: Secure configuration interface for WhatsApp credentials
+- **Debug Tools**: Built-in debugging tools to test API credentials
+- **Webhook Support**: Receive and process incoming WhatsApp messages
+- **Modern UI**: Clean, responsive interface built with Next.js and Tailwind CSS
+
+## Tech Stack
+
+- **Framework**: Next.js 15 (App Router)
+- **Styling**: Tailwind CSS
+- **WhatsApp Integration**: AG-UI Community WhatsApp Package
+- **Language**: TypeScript
+- **Deployment**: Vercel-ready
+
+## Prerequisites
+
+- Node.js 18+
+- WhatsApp Business API account
+- Meta Developer Console access
+
+## Quick Start
+
+1. **Install dependencies**:
+ ```bash
+ pnpm install
+ ```
+
+2. **Run the development server**:
+ ```bash
+ pnpm dev
+ ```
+
+3. **Open your browser**:
+ Navigate to [http://localhost:3000](http://localhost:3000)
+
+## WhatsApp Business API Setup
+
+### 1. Create WhatsApp Business API App
+
+1. Go to [Meta Developer Console](https://developers.facebook.com/)
+2. Create a new app or use an existing one
+3. Add the **WhatsApp Business API** product
+4. Configure your phone number
+
+### 2. Get Your Credentials
+
+You'll need these values from your Meta Developer Console:
+
+- **Phone Number ID**: Found in WhatsApp Business API โ Phone Numbers
+- **Access Token**: Generated from System Users โ Generate Token
+- **Webhook Secret**: Create a strong secret for webhook verification
+- **Verify Token**: Any string for webhook verification challenges
+
+### 3. Configure the App
+
+1. Open the app in your browser
+2. Click **"Configure"** in the top right
+3. Enter your WhatsApp Business API credentials
+4. Save the configuration
+
+### 4. Test the Integration
+
+1. **Debug Credentials**: Click "Debug Credentials" to test your setup
+2. **Send Messages**: Use the form to send test messages
+3. **Check Webhooks**: Configure your webhook URL in Meta Developer Console
+
+## Project Structure
+
+```
+client-whatsapp-example/
+โโโ src/
+โ โโโ app/
+โ โ โโโ api/
+โ โ โ โโโ config/ # Configuration management
+โ โ โ โโโ debug/ # Debug API endpoint
+โ โ โ โโโ send-message/ # Send WhatsApp messages
+โ โ โ โโโ webhook/ # Receive webhooks
+โ โ โโโ config/ # Configuration page
+โ โ โโโ page.tsx # Main application page
+โ โโโ lib/
+โ โโโ config.ts # Configuration utilities
+โโโ public/ # Static assets
+โโโ README.md # This file
+```
+
+## API Endpoints
+
+### Configuration Management
+- `GET /api/config` - Get current configuration status
+- `POST /api/config` - Save new configuration
+
+### WhatsApp Integration
+- `POST /api/send-message` - Send WhatsApp message
+- `GET/POST /api/webhook` - Handle WhatsApp webhooks
+
+### Debug Tools
+- `GET /api/debug` - Test WhatsApp API credentials
+
+## Environment Variables
+
+Create a `.env.local` file with your WhatsApp credentials:
+
+```env
+# WhatsApp Business API Configuration
+WHATSAPP_PHONE_NUMBER_ID=your_phone_number_id_here
+WHATSAPP_ACCESS_TOKEN=your_access_token_here
+WHATSAPP_WEBHOOK_SECRET=your_webhook_secret_here
+WHATSAPP_VERIFY_TOKEN=your_verify_token_here
+```
+
+## Deployment
+
+### Vercel Deployment
+
+1. **Push to GitHub**:
+ ```bash
+ git add .
+ git commit -m "Add WhatsApp example app"
+ git push origin main
+ ```
+
+2. **Deploy to Vercel**:
+ - Connect your GitHub repository to Vercel
+ - Add environment variables in Vercel dashboard
+ - Deploy automatically
+
+### Environment Variables in Production
+
+Set these in your Vercel dashboard:
+- `WHATSAPP_PHONE_NUMBER_ID`
+- `WHATSAPP_ACCESS_TOKEN`
+- `WHATSAPP_WEBHOOK_SECRET`
+- `WHATSAPP_VERIFY_TOKEN`
+
+## Security Notes
+
+- **Demo Configuration**: This example uses file-based storage for demo purposes
+- **Production**: Use secure environment variables or a database
+- **Webhook Security**: Always verify webhook signatures in production
+- **Access Tokens**: Keep your access tokens secure and rotate regularly
+
+## Troubleshooting
+
+### Common Issues
+
+1. **"Phone Number ID does not exist"**
+ - Verify your Phone Number ID in Meta Developer Console
+ - Check that your access token has the right permissions
+
+2. **"Missing permissions"**
+ - Ensure your access token has `whatsapp_business_messaging` permission
+ - Check that you're using the correct Phone Number ID
+
+3. **"Webhook verification failed"**
+ - Verify your webhook secret matches in both places
+ - Check that your webhook URL is accessible
+
+### Debug Tools
+
+Use the built-in debug tools to:
+- Test your WhatsApp API credentials
+- Verify your Phone Number ID
+- Check API permissions
+- Validate webhook configuration
+
+## Contributing
+
+This is part of the AG-UI project. To contribute:
+
+1. Fork the AG-UI repository
+2. Create a feature branch
+3. Make your changes
+4. Submit a pull request
+
+## License
+
+This example is part of the AG-UI project and follows the same license terms.
+
+## Related Links
+
+- [AG-UI Documentation](https://docs.ag-ui.com)
+- [WhatsApp Business API Documentation](https://developers.facebook.com/docs/whatsapp)
+- [Meta Developer Console](https://developers.facebook.com/)
+- [Next.js Documentation](https://nextjs.org/docs)
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/package.json b/typescript-sdk/apps/client-whatsapp-example/package.json
new file mode 100644
index 000000000..70e4acf34
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@ag-ui/client-whatsapp-example",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@ag-ui/community-whatsapp": "workspace:../../integrations/community-whatsapp",
+ "next": "15.4.5",
+ "react": "^18",
+ "react-dom": "^18"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "autoprefixer": "^10.0.1",
+ "eslint": "^8",
+ "eslint-config-next": "15.4.5",
+ "postcss": "^8",
+ "tailwindcss": "^3.3.0",
+ "typescript": "^5"
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
new file mode 100644
index 000000000..a8b400d88
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
@@ -0,0 +1,78 @@
+import { NextRequest, NextResponse } from "next/server";
+// import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+import { getConfig } from "@/lib/config";
+
+export async function POST(request: NextRequest) {
+ try {
+ console.log("Send message API called");
+ const config = getConfig();
+ console.log("Config retrieved:", config ? "exists" : "null");
+
+ if (!config) {
+ console.log("No configuration found, returning error");
+ return NextResponse.json(
+ { error: "WhatsApp configuration not found. Please configure your settings first." },
+ { status: 500 }
+ );
+ }
+
+ console.log("Creating WhatsApp agent with config");
+ console.log("Phone Number ID:", config.phoneNumberId);
+ console.log("Has Access Token:", !!config.accessToken);
+ console.log("Has Webhook Secret:", !!config.webhookSecret);
+
+ // const agent = new WhatsAppAgent({
+ // phoneNumberId: config.phoneNumberId,
+ // accessToken: config.accessToken,
+ // webhookSecret: config.webhookSecret,
+ // });
+
+ const { phoneNumber, message } = await request.json();
+ console.log("Sending message to:", phoneNumber);
+ console.log("Message content:", message);
+
+ if (!phoneNumber || !message) {
+ return NextResponse.json(
+ { error: "phoneNumber and message are required" },
+ { status: 400 }
+ );
+ }
+
+ console.log("Calling sendMessageToNumber");
+ try {
+ // const response = await agent.sendMessageToNumber(phoneNumber, message);
+ // console.log("Message sent successfully:", response.messages[0].id);
+
+ // Temporary mock response for testing
+ const response = {
+ messages: [{ id: "mock-message-id" }]
+ };
+
+ return NextResponse.json({
+ success: true,
+ messageId: response.messages[0].id,
+ response,
+ });
+ } catch (sendError) {
+ console.error("Detailed send error:", {
+ error: sendError,
+ message: sendError instanceof Error ? sendError.message : 'Unknown error',
+ stack: sendError instanceof Error ? sendError.stack : undefined
+ });
+
+ return NextResponse.json(
+ {
+ error: "WhatsApp integration not available in this example",
+ details: sendError instanceof Error ? sendError.message : 'Unknown error'
+ },
+ { status: 500 }
+ );
+ }
+ } catch (error) {
+ console.error("Send message error:", error);
+ return NextResponse.json(
+ { error: "Failed to send message" },
+ { status: 500 }
+ );
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
new file mode 100644
index 000000000..c6c0e30c7
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
@@ -0,0 +1,64 @@
+import { NextRequest, NextResponse } from "next/server";
+// import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+import { getConfig } from "@/lib/config";
+
+export async function GET(request: NextRequest) {
+ const { searchParams } = new URL(request.url);
+ const mode = searchParams.get("hub.mode");
+ const token = searchParams.get("hub.verify_token");
+ const challenge = searchParams.get("hub.challenge");
+
+ console.log("Webhook verification request:", { mode, token, challenge });
+
+ const config = getConfig();
+ if (!config) {
+ console.log("No configuration found for webhook verification");
+ return NextResponse.json({ error: "Configuration not found" }, { status: 500 });
+ }
+
+ if (mode === "subscribe" && token === config.verifyToken) {
+ console.log("Webhook verified successfully");
+ return new NextResponse(challenge, { status: 200 });
+ }
+
+ console.log("Webhook verification failed");
+ return NextResponse.json({ error: "Forbidden" }, { status: 403 });
+}
+
+export async function POST(request: NextRequest) {
+ try {
+ console.log("Webhook POST received");
+ const config = getConfig();
+
+ if (!config) {
+ console.log("No configuration found for webhook processing");
+ return NextResponse.json({ error: "Configuration not found" }, { status: 500 });
+ }
+
+ // const agent = new WhatsAppAgent({
+ // phoneNumberId: config.phoneNumberId,
+ // accessToken: config.accessToken,
+ // webhookSecret: config.webhookSecret,
+ // });
+
+ const body = await request.text();
+ console.log("Webhook body:", body);
+
+ // Verify webhook signature
+ // const signature = request.headers.get("x-hub-signature-256");
+ // if (!signature || !agent.verifyWebhookSignature(body, signature)) {
+ // console.log("Webhook signature verification failed");
+ // return NextResponse.json({ error: "Invalid signature" }, { status: 401 });
+ // }
+
+ // Process webhook
+ // const webhookData = JSON.parse(body);
+ // const processedMessages = await agent.processWebhook(webhookData);
+
+ console.log("Webhook processed successfully (mock)");
+ return NextResponse.json({ success: true });
+ } catch (error) {
+ console.error("Webhook processing error:", error);
+ return NextResponse.json({ error: "Webhook processing failed" }, { status: 500 });
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/config/page.tsx b/typescript-sdk/apps/client-whatsapp-example/src/app/config/page.tsx
new file mode 100644
index 000000000..826b85acf
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/config/page.tsx
@@ -0,0 +1,329 @@
+"use client";
+
+import { useState, useEffect } from "react";
+import { useRouter } from "next/navigation";
+
+interface ConfigForm {
+ phoneNumberId: string;
+ accessToken: string;
+ webhookSecret: string;
+ verifyToken: string;
+}
+
+export default function ConfigPage() {
+ const router = useRouter();
+ const [form, setForm] = useState({
+ phoneNumberId: "",
+ accessToken: "",
+ webhookSecret: "",
+ verifyToken: "",
+ });
+ const [isLoading, setIsLoading] = useState(false);
+ const [message, setMessage] = useState<{ type: "success" | "error"; text: string } | null>(null);
+ const [showSecrets, setShowSecrets] = useState(false);
+
+ useEffect(() => {
+ // Load existing config from API
+ fetch("/api/config")
+ .then(res => res.json())
+ .then(data => {
+ if (!data.error && data.phoneNumberId) {
+ setForm({
+ phoneNumberId: data.phoneNumberId,
+ accessToken: "", // Don't load sensitive data
+ webhookSecret: "", // Don't load sensitive data
+ verifyToken: "", // Don't load sensitive data
+ });
+ }
+ })
+ .catch(() => {
+ // Config not found, start with empty form
+ });
+ }, []);
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ setIsLoading(true);
+ setMessage(null);
+
+ try {
+ const response = await fetch("/api/config", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(form),
+ });
+
+ const data = await response.json();
+
+ if (!response.ok) {
+ throw new Error(data.error || "Failed to save configuration");
+ }
+
+ setMessage({
+ type: "success",
+ text: "Configuration saved successfully! Redirecting to main page..."
+ });
+
+ // Redirect back to main page after a short delay
+ setTimeout(() => {
+ router.push("/");
+ }, 2000);
+ } catch (error) {
+ setMessage({
+ type: "error",
+ text: error instanceof Error ? error.message : "Failed to save configuration. Please try again."
+ });
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ const handleInputChange = (field: keyof ConfigForm, value: string) => {
+ setForm(prev => ({
+ ...prev,
+ [field]: value
+ }));
+ };
+
+ const generateRandomToken = () => {
+ const token = Math.random().toString(36).substring(2, 15) +
+ Math.random().toString(36).substring(2, 15);
+ handleInputChange("verifyToken", token);
+ };
+
+ const generateRandomSecret = () => {
+ const secret = Math.random().toString(36).substring(2, 15) +
+ Math.random().toString(36).substring(2, 15) +
+ Math.random().toString(36).substring(2, 15);
+ handleInputChange("webhookSecret", secret);
+ };
+
+ return (
+
+
+ {/* Header */}
+
+
+ WhatsApp Configuration
+
+
+ Configure your WhatsApp Business API settings securely
+
+
+
+
+ {/* Security Notice */}
+
+
+
+
+
+ Security Notice
+
+
+
+ This is a demo application. In production, these secrets should be stored securely
+ on your server using environment variables or a secure configuration service.
+
+
+
+
+
+
+ {/* Configuration Form */}
+
+
+ {/* Help Section */}
+
+
How to Get These Values
+
+
+
Phone Number ID
+
Found in your WhatsApp Business API dashboard under Phone Numbers
+
+
+
Access Token
+
Generate from Meta Developer Console โ System Users โ Generate Token
+
+
+
Webhook Secret
+
Create a strong secret for verifying webhook signatures
+
+
+
Verify Token
+
Any string you choose for webhook verification challenges
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css b/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css
new file mode 100644
index 000000000..80dc0f894
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css
@@ -0,0 +1,21 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+:root {
+ --background: #ffffff;
+ --foreground: #171717;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --background: #0a0a0a;
+ --foreground: #ededed;
+ }
+}
+
+body {
+ background: var(--background);
+ color: var(--foreground);
+ font-family: Arial, Helvetica, sans-serif;
+}
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx b/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx
new file mode 100644
index 000000000..f7fa87eb8
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx
@@ -0,0 +1,34 @@
+import type { Metadata } from "next";
+import { Geist, Geist_Mono } from "next/font/google";
+import "./globals.css";
+
+const geistSans = Geist({
+ variable: "--font-geist-sans",
+ subsets: ["latin"],
+});
+
+const geistMono = Geist_Mono({
+ variable: "--font-geist-mono",
+ subsets: ["latin"],
+});
+
+export const metadata: Metadata = {
+ title: "Create Next App",
+ description: "Generated by create next app",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
+ {children}
+
+
+ );
+}
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx b/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
new file mode 100644
index 000000000..21e616381
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
@@ -0,0 +1,365 @@
+"use client";
+
+import { useState, useEffect } from "react";
+import Link from "next/link";
+
+interface SendMessageResult {
+ success: boolean;
+ messageId: string;
+ response: {
+ messaging_product: string;
+ contacts: Array<{
+ input: string;
+ wa_id: string;
+ }>;
+ messages: Array<{
+ id: string;
+ }>;
+ };
+}
+
+interface ConfigStatus {
+ phoneNumberId: string;
+ hasAccessToken: boolean;
+ hasWebhookSecret: boolean;
+ hasVerifyToken: boolean;
+}
+
+interface DebugResult {
+ success?: boolean;
+ error?: string;
+ message?: string;
+ phoneNumberInfo?: Record;
+ status?: number;
+ response?: Record;
+}
+
+export default function Home() {
+ const [phoneNumber, setPhoneNumber] = useState("");
+ const [message, setMessage] = useState("");
+ const [isLoading, setIsLoading] = useState(false);
+ const [result, setResult] = useState(null);
+ const [error, setError] = useState(null);
+ const [configStatus, setConfigStatus] = useState(null);
+ const [debugResult, setDebugResult] = useState(null);
+ const [isDebugLoading, setIsDebugLoading] = useState(false);
+
+ useEffect(() => {
+ // Check configuration status
+ fetch("/api/config")
+ .then(res => res.json())
+ .then(data => {
+ if (data.error) {
+ setConfigStatus(null);
+ } else {
+ setConfigStatus(data);
+ }
+ })
+ .catch(() => {
+ setConfigStatus(null);
+ });
+ }, []);
+
+ const handleSendMessage = async (e: React.FormEvent) => {
+ e.preventDefault();
+ setIsLoading(true);
+ setError(null);
+ setResult(null);
+
+ try {
+ const response = await fetch("/api/send-message", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({ phoneNumber, message }),
+ });
+
+ const data = await response.json();
+
+ if (!response.ok) {
+ throw new Error(data.error || "Failed to send message");
+ }
+
+ setResult(data);
+ } catch (err) {
+ setError(err instanceof Error ? err.message : "An error occurred");
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ const handleDebugCredentials = async () => {
+ setIsDebugLoading(true);
+ setDebugResult(null);
+
+ try {
+ const response = await fetch("/api/debug");
+ const data = await response.json();
+ setDebugResult(data);
+ } catch (err) {
+ setDebugResult({
+ error: err instanceof Error ? err.message : "Debug failed"
+ });
+ } finally {
+ setIsDebugLoading(false);
+ }
+ };
+
+ const isConfigured = configStatus &&
+ configStatus.phoneNumberId &&
+ configStatus.hasAccessToken &&
+ configStatus.hasWebhookSecret &&
+ configStatus.hasVerifyToken;
+
+ return (
+
+
+ {/* Header */}
+
+
+ AG-UI WhatsApp Demo
+
+
+ A lean demonstration of AG-UI WhatsApp integration. Send messages and
+ receive webhooks through the WhatsApp Business API.
+
+
+
+ {/* Main Content */}
+
+ {/* Configuration Status */}
+
+
+
+ Configuration Status
+
+
+
+ {isDebugLoading ? "Testing..." : "Debug Credentials"}
+
+
+ Configure
+
+
+
+
+ {configStatus ? (
+
+
+
+
+ Phone Number ID: {configStatus.phoneNumberId ? "Configured" : "Not configured"}
+
+
+
+
+
+ Access Token: {configStatus.hasAccessToken ? "Configured" : "Not configured"}
+
+
+
+
+
+ Webhook Secret: {configStatus.hasWebhookSecret ? "Configured" : "Not configured"}
+
+
+
+
+
+ Verify Token: {configStatus.hasVerifyToken ? "Configured" : "Not configured"}
+
+
+
+ ) : (
+
+
No configuration found
+
+ Set Up Configuration
+
+
+ )}
+
+
+ {/* Debug Results */}
+ {debugResult && (
+
+
+ Debug Results
+
+ {debugResult.success ? (
+
+
โ
{debugResult.message || 'Credentials are valid'}
+ {debugResult.phoneNumberInfo && (
+
+ Phone Number Details
+
+ {JSON.stringify(debugResult.phoneNumberInfo, null, 2)}
+
+
+ )}
+
+ ) : (
+
+
โ {debugResult.error}
+ {debugResult.status && (
+
Status: {debugResult.status}
+ )}
+ {debugResult.response && (
+
+ Error Details
+
+ {JSON.stringify(debugResult.response, null, 2)}
+
+
+ )}
+
+ )}
+
+ )}
+
+ {/* Send Message Form */}
+
+
+ Send WhatsApp Message
+
+
+ {!isConfigured ? (
+
+
+
+ Please configure your WhatsApp Business API settings first.
+
+
+ Configure Now
+
+
+ ) : (
+
+ )}
+
+
+ {/* Results */}
+ {error && (
+
+ )}
+
+ {result && (
+
+
Success!
+
+
Message ID: {result.messageId}
+
+ View Full Response
+
+ {JSON.stringify(result.response, null, 2)}
+
+
+
+
+ )}
+
+ {/* Webhook Info */}
+
+
+ Webhook Endpoint
+
+
+ Configure your WhatsApp Business API webhook to point to:
+
+
+
+ {typeof window !== "undefined" ? `${window.location.origin}/api/webhook` : "/api/webhook"}
+
+
+
+
Verify Token: Set this in your WhatsApp app configuration
+
Webhook Secret: Use this to verify incoming webhooks
+
+
+
+
+ {/* Footer */}
+
+
+
+ );
+}
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/lib/config.ts b/typescript-sdk/apps/client-whatsapp-example/src/lib/config.ts
new file mode 100644
index 000000000..988823705
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/lib/config.ts
@@ -0,0 +1,92 @@
+import { writeFileSync, readFileSync, existsSync } from 'fs';
+import { join } from 'path';
+
+interface ConfigData {
+ phoneNumberId: string;
+ accessToken: string;
+ webhookSecret: string;
+ verifyToken: string;
+}
+
+// File path for storing config (in production, use a proper database)
+const CONFIG_FILE = join(process.cwd(), '.config.json');
+
+// In-memory cache
+let configCache: ConfigData | null = null;
+
+function loadConfigFromFile(): ConfigData | null {
+ try {
+ if (existsSync(CONFIG_FILE)) {
+ const data = readFileSync(CONFIG_FILE, 'utf8');
+ const config = JSON.parse(data) as ConfigData;
+ console.log("Config loaded from file");
+ return config;
+ }
+ } catch (error) {
+ console.error("Error loading config from file:", error);
+ }
+ return null;
+}
+
+function saveConfigToFile(config: ConfigData): void {
+ try {
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
+ console.log("Config saved to file");
+ } catch (error) {
+ console.error("Error saving config to file:", error);
+ }
+}
+
+export function getConfig(): ConfigData | null {
+ // First try cache
+ if (configCache) {
+ console.log("Config found in cache");
+ return configCache;
+ }
+
+ // Try loading from file
+ const fileConfig = loadConfigFromFile();
+ if (fileConfig) {
+ configCache = fileConfig;
+ return fileConfig;
+ }
+
+ // Fallback to environment variables
+ const envConfig = {
+ phoneNumberId: process.env.WHATSAPP_PHONE_NUMBER_ID,
+ accessToken: process.env.WHATSAPP_ACCESS_TOKEN,
+ webhookSecret: process.env.WHATSAPP_WEBHOOK_SECRET,
+ verifyToken: process.env.WHATSAPP_VERIFY_TOKEN,
+ };
+
+ if (envConfig.phoneNumberId && envConfig.accessToken && envConfig.webhookSecret && envConfig.verifyToken) {
+ console.log("Config found in environment variables");
+ const config = envConfig as ConfigData;
+ configCache = config;
+ return config;
+ }
+
+ console.log("No configuration found");
+ return null;
+}
+
+export function setConfig(config: ConfigData): void {
+ console.log("Setting config:", {
+ phoneNumberId: config.phoneNumberId,
+ hasAccessToken: !!config.accessToken,
+ hasWebhookSecret: !!config.webhookSecret,
+ hasVerifyToken: !!config.verifyToken
+ });
+
+ // Update cache
+ configCache = config;
+
+ // Save to file
+ saveConfigToFile(config);
+}
+
+export function clearConfig(): void {
+ console.log("Clearing config");
+ configCache = null;
+ // Note: We don't delete the file to avoid permission issues
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/tsconfig.json b/typescript-sdk/apps/client-whatsapp-example/tsconfig.json
new file mode 100644
index 000000000..c1334095f
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "ES2017",
+ "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"]
+}
diff --git a/typescript-sdk/pnpm-lock.yaml b/typescript-sdk/pnpm-lock.yaml
index 83a64af0c..652898d05 100644
--- a/typescript-sdk/pnpm-lock.yaml
+++ b/typescript-sdk/pnpm-lock.yaml
@@ -64,6 +64,49 @@ importers:
specifier: ^5
version: 5.8.2
+ apps/client-whatsapp-example:
+ dependencies:
+ '@ag-ui/community-whatsapp':
+ specifier: workspace:../../integrations/community-whatsapp
+ version: link:../../integrations/community-whatsapp
+ next:
+ specifier: 15.4.5
+ version: 15.4.5(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react:
+ specifier: ^18
+ version: 18.3.1
+ react-dom:
+ specifier: ^18
+ version: 18.3.1(react@18.3.1)
+ devDependencies:
+ '@types/node':
+ specifier: ^20
+ version: 20.19.4
+ '@types/react':
+ specifier: ^18
+ version: 18.3.23
+ '@types/react-dom':
+ specifier: ^18
+ version: 18.3.7(@types/react@18.3.23)
+ autoprefixer:
+ specifier: ^10.0.1
+ version: 10.4.21(postcss@8.5.6)
+ eslint:
+ specifier: ^8
+ version: 8.57.1
+ eslint-config-next:
+ specifier: 15.4.5
+ version: 15.4.5(eslint@8.57.1)(typescript@5.8.2)
+ postcss:
+ specifier: ^8
+ version: 8.5.6
+ tailwindcss:
+ specifier: ^3.3.0
+ version: 3.4.17
+ typescript:
+ specifier: ^5
+ version: 5.8.2
+
apps/dojo:
dependencies:
'@ag-ui/agno':
@@ -335,7 +378,7 @@ importers:
version: 29.7.0(@types/node@20.19.4)
ts-jest:
specifier: ^29.1.2
- version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.5)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2)
+ version: 29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.4)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2)
tsup:
specifier: ^8.0.2
version: 8.5.0(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(typescript@5.8.2)(yaml@2.8.0)
@@ -1460,6 +1503,9 @@ packages:
'@emnapi/runtime@1.4.3':
resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
+ '@emnapi/runtime@1.4.5':
+ resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==}
+
'@emnapi/wasi-threads@1.0.2':
resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==}
@@ -1797,10 +1843,18 @@ packages:
resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/eslintrc@2.1.4':
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/js@8.57.1':
+ resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
'@eslint/js@9.27.0':
resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1913,10 +1967,19 @@ packages:
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
engines: {node: '>=18.18.0'}
+ '@humanwhocodes/config-array@0.13.0':
+ resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
+ engines: {node: '>=10.10.0'}
+ deprecated: Use @eslint/config-array instead
+
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
+ '@humanwhocodes/object-schema@2.0.3':
+ resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+ deprecated: Use @eslint/object-schema instead
+
'@humanwhocodes/retry@0.3.1':
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
@@ -1935,105 +1998,227 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@img/sharp-darwin-arm64@0.34.3':
+ resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
+ 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-darwin-x64@0.34.3':
+ resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==}
+ 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-arm64@1.2.0':
+ resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==}
+ 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-darwin-x64@1.2.0':
+ resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==}
+ 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-arm64@1.2.0':
+ resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==}
+ 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-arm@1.2.0':
+ resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-ppc64@1.2.0':
+ resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==}
+ cpu: [ppc64]
+ os: [linux]
+
'@img/sharp-libvips-linux-s390x@1.0.4':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x]
os: [linux]
+ '@img/sharp-libvips-linux-s390x@1.2.0':
+ resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==}
+ 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-linux-x64@1.2.0':
+ resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==}
+ 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-arm64@1.2.0':
+ resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==}
+ 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-libvips-linuxmusl-x64@1.2.0':
+ resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==}
+ 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-arm64@0.34.3':
+ resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==}
+ 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-arm@0.34.3':
+ resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-linux-ppc64@0.34.3':
+ resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ppc64]
+ 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-s390x@0.34.3':
+ resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==}
+ 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-linux-x64@0.34.3':
+ resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==}
+ 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-arm64@0.34.3':
+ resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==}
+ 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-linuxmusl-x64@0.34.3':
+ resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==}
+ 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-wasm32@0.34.3':
+ resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-arm64@0.34.3':
+ resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
+
'@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-ia32@0.34.3':
+ resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==}
+ 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]
+ '@img/sharp-win32-x64@0.34.3':
+ resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
'@inquirer/checkbox@4.1.8':
resolution: {integrity: sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg==}
engines: {node: '>=18'}
@@ -2876,9 +3061,15 @@ packages:
'@next/env@15.2.1':
resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==}
+ '@next/env@15.4.5':
+ resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==}
+
'@next/eslint-plugin-next@15.2.1':
resolution: {integrity: sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q==}
+ '@next/eslint-plugin-next@15.4.5':
+ resolution: {integrity: sha512-YhbrlbEt0m4jJnXHMY/cCUDBAWgd5SaTa5mJjzOt82QwflAFfW/h3+COp2TfVSzhmscIZ5sg2WXt3MLziqCSCw==}
+
'@next/mdx@15.3.2':
resolution: {integrity: sha512-D6lSSbVzn1EiPwrBKG5QzXClcgdqiNCL8a3/6oROinzgZnYSxbVmnfs0UrqygtGSOmgW7sdJJSEOy555DoAwvw==}
peerDependencies:
@@ -2896,48 +3087,96 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@next/swc-darwin-arm64@15.4.5':
+ resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==}
+ 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-darwin-x64@15.4.5':
+ resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==}
+ 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-gnu@15.4.5':
+ resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==}
+ 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-arm64-musl@15.4.5':
+ resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==}
+ 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-gnu@15.4.5':
+ resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==}
+ 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-linux-x64-musl@15.4.5':
+ resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==}
+ 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-arm64-msvc@15.4.5':
+ resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==}
+ 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]
+ '@next/swc-win32-x64-msvc@15.4.5':
+ resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -4644,6 +4883,11 @@ packages:
'@types/prop-types@15.7.14':
resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
+ '@types/react-dom@18.3.7':
+ resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
+ peerDependencies:
+ '@types/react': ^18.0.0
+
'@types/react-dom@19.1.5':
resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==}
peerDependencies:
@@ -4652,6 +4896,9 @@ packages:
'@types/react-syntax-highlighter@15.5.13':
resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
+ '@types/react@18.3.23':
+ resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
+
'@types/react@19.1.5':
resolution: {integrity: sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==}
@@ -5014,6 +5261,9 @@ packages:
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==}
@@ -5091,6 +5341,13 @@ packages:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
+ autoprefixer@10.4.21:
+ resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
@@ -5226,6 +5483,10 @@ packages:
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'}
+
camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
@@ -5287,6 +5548,10 @@ packages:
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
@@ -5614,6 +5879,9 @@ packages:
devtools-protocol@0.0.1464554:
resolution: {integrity: sha512-CAoP3lYfwAGQTaAXYvA6JZR0fjGUb7qec1qf4mToyoH2TZgUFeIqYcjh6f9jNuhHfuZiEdH+PONHYrLhRQX6aw==}
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
diff-match-patch@1.0.5:
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
@@ -5629,10 +5897,17 @@ packages:
resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
engines: {node: '>=0.3.1'}
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
+ doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+
dotenv@16.6.1:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
@@ -5791,6 +6066,15 @@ packages:
typescript:
optional: true
+ eslint-config-next@15.4.5:
+ resolution: {integrity: sha512-IMijiXaZ43qFB+Gcpnb374ipTKD8JIyVNR+6VsifFQ/LHyx+A9wgcgSIhCX5PYSjwOoSYD5LtNHKlM5uc23eww==}
+ 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==}
@@ -5860,6 +6144,10 @@ packages:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
+ eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
eslint-scope@8.3.0:
resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5872,6 +6160,12 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint@8.57.1:
+ resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
+ hasBin: true
+
eslint@9.27.0:
resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5886,6 +6180,10 @@ packages:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
@@ -6048,6 +6346,10 @@ packages:
fetch-cookie@3.1.0:
resolution: {integrity: sha512-s/XhhreJpqH0ftkGVcQt8JE9bqk+zRn4jF5mPJXWZeQMCI5odV9K+wEWYbnzFPHgQZlvPSMjS4n4yawWE8RINw==}
+ file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
@@ -6078,6 +6380,10 @@ packages:
fix-dts-default-cjs-exports@1.0.1:
resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
+ flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -6148,6 +6454,9 @@ packages:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
@@ -6265,6 +6574,10 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
+ globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -6590,6 +6903,10 @@ packages:
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'}
@@ -6679,6 +6996,10 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+
is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
@@ -6913,6 +7234,10 @@ packages:
node-notifier:
optional: true
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
jiti@2.4.2:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
hasBin: true
@@ -7711,6 +8036,27 @@ packages:
sass:
optional: true
+ next@15.4.5:
+ resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==}
+ engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.51.1
+ 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
+
node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
@@ -7746,6 +8092,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
@@ -7763,6 +8113,10 @@ packages:
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'}
@@ -8016,6 +8370,10 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
pino-abstract-transport@2.0.0:
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
@@ -8062,6 +8420,30 @@ packages:
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.0.1:
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ 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-load-config@6.0.1:
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
engines: {node: '>= 18'}
@@ -8080,18 +8462,27 @@ packages:
yaml:
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.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
engines: {node: '>=4'}
+ 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.4.31:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
- postcss@8.5.3:
- resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
- engines: {node: ^10 || ^12 || >=14}
-
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
@@ -8281,6 +8672,11 @@ packages:
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-dom@19.1.0:
resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
peerDependencies:
@@ -8339,10 +8735,17 @@ packages:
peerDependencies:
react: '>= 0.14.0'
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
react@19.1.0:
resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
engines: {node: '>=0.10.0'}
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines: {node: '>= 6'}
@@ -8355,6 +8758,10 @@ packages:
resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==}
engines: {node: '>=8'}
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
@@ -8487,6 +8894,11 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
rollup@4.41.0:
resolution: {integrity: sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -8538,6 +8950,9 @@ packages:
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
scheduler@0.26.0:
resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
@@ -8590,6 +9005,10 @@ packages:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ sharp@0.34.3:
+ resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
+ 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'}
@@ -8834,6 +9253,11 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
+ tailwindcss@3.4.17:
+ resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
tailwindcss@4.1.7:
resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==}
@@ -8870,6 +9294,9 @@ packages:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -9062,6 +9489,10 @@ packages:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
+ type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+
type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
@@ -11431,6 +11862,11 @@ snapshots:
tslib: 2.8.1
optional: true
+ '@emnapi/runtime@1.4.5':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
'@emnapi/wasi-threads@1.0.2':
dependencies:
tslib: 2.8.1
@@ -11603,6 +12039,11 @@ snapshots:
'@esbuild/win32-x64@0.25.5':
optional: true
+ '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)':
+ dependencies:
+ eslint: 8.57.1
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))':
dependencies:
eslint: 9.27.0(jiti@2.4.2)
@@ -11624,12 +12065,12 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.1':
+ '@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
debug: 4.4.1
- espree: 10.3.0
- globals: 14.0.0
+ espree: 9.6.1
+ globals: 13.24.0
ignore: 5.3.2
import-fresh: 3.3.1
js-yaml: 4.1.0
@@ -11638,11 +12079,27 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.27.0': {}
-
- '@eslint/object-schema@2.1.6': {}
-
- '@eslint/plugin-kit@0.3.1':
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.1
+ espree: 10.3.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@8.57.1': {}
+
+ '@eslint/js@9.27.0': {}
+
+ '@eslint/object-schema@2.1.6': {}
+
+ '@eslint/plugin-kit@0.3.1':
dependencies:
'@eslint/core': 0.14.0
levn: 0.4.1
@@ -11771,8 +12228,18 @@ snapshots:
'@humanfs/core': 0.19.1
'@humanwhocodes/retry': 0.3.1
+ '@humanwhocodes/config-array@0.13.0':
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.3
+ debug: 4.4.1
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
'@humanwhocodes/module-importer@1.0.1': {}
+ '@humanwhocodes/object-schema@2.0.3': {}
+
'@humanwhocodes/retry@0.3.1': {}
'@humanwhocodes/retry@0.4.3': {}
@@ -11790,76 +12257,162 @@ snapshots:
'@img/sharp-libvips-darwin-arm64': 1.0.4
optional: true
+ '@img/sharp-darwin-arm64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.2.0
+ optional: true
+
'@img/sharp-darwin-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.0.4
optional: true
+ '@img/sharp-darwin-x64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.2.0
+ optional: true
+
'@img/sharp-libvips-darwin-arm64@1.0.4':
optional: true
+ '@img/sharp-libvips-darwin-arm64@1.2.0':
+ optional: true
+
'@img/sharp-libvips-darwin-x64@1.0.4':
optional: true
+ '@img/sharp-libvips-darwin-x64@1.2.0':
+ optional: true
+
'@img/sharp-libvips-linux-arm64@1.0.4':
optional: true
+ '@img/sharp-libvips-linux-arm64@1.2.0':
+ optional: true
+
'@img/sharp-libvips-linux-arm@1.0.5':
optional: true
+ '@img/sharp-libvips-linux-arm@1.2.0':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.2.0':
+ optional: true
+
'@img/sharp-libvips-linux-s390x@1.0.4':
optional: true
+ '@img/sharp-libvips-linux-s390x@1.2.0':
+ optional: true
+
'@img/sharp-libvips-linux-x64@1.0.4':
optional: true
+ '@img/sharp-libvips-linux-x64@1.2.0':
+ optional: true
+
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
optional: true
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.0':
+ optional: true
+
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
optional: true
+ '@img/sharp-libvips-linuxmusl-x64@1.2.0':
+ optional: true
+
'@img/sharp-linux-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.0.4
optional: true
+ '@img/sharp-linux-arm64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.0
+ optional: true
+
'@img/sharp-linux-arm@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.0.5
optional: true
+ '@img/sharp-linux-arm@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.0
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.2.0
+ optional: true
+
'@img/sharp-linux-s390x@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.0.4
optional: true
+ '@img/sharp-linux-s390x@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.2.0
+ optional: true
+
'@img/sharp-linux-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.0.4
optional: true
+ '@img/sharp-linux-x64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.2.0
+ optional: true
+
'@img/sharp-linuxmusl-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4
optional: true
+ '@img/sharp-linuxmusl-arm64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
+ optional: true
+
'@img/sharp-linuxmusl-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.0.4
optional: true
+ '@img/sharp-linuxmusl-x64@0.34.3':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.0
+ optional: true
+
'@img/sharp-wasm32@0.33.5':
dependencies:
'@emnapi/runtime': 1.4.3
optional: true
+ '@img/sharp-wasm32@0.34.3':
+ dependencies:
+ '@emnapi/runtime': 1.4.5
+ optional: true
+
+ '@img/sharp-win32-arm64@0.34.3':
+ optional: true
+
'@img/sharp-win32-ia32@0.33.5':
optional: true
+ '@img/sharp-win32-ia32@0.34.3':
+ optional: true
+
'@img/sharp-win32-x64@0.33.5':
optional: true
+ '@img/sharp-win32-x64@0.34.3':
+ optional: true
+
'@inquirer/checkbox@4.1.8(@types/node@20.17.50)':
dependencies:
'@inquirer/core': 10.1.13(@types/node@20.17.50)
@@ -12860,10 +13413,16 @@ snapshots:
'@next/env@15.2.1': {}
+ '@next/env@15.4.5': {}
+
'@next/eslint-plugin-next@15.2.1':
dependencies:
fast-glob: 3.3.1
+ '@next/eslint-plugin-next@15.4.5':
+ dependencies:
+ fast-glob: 3.3.1
+
'@next/mdx@15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))':
dependencies:
source-map: 0.7.4
@@ -12874,27 +13433,51 @@ snapshots:
'@next/swc-darwin-arm64@15.2.1':
optional: true
+ '@next/swc-darwin-arm64@15.4.5':
+ optional: true
+
'@next/swc-darwin-x64@15.2.1':
optional: true
+ '@next/swc-darwin-x64@15.4.5':
+ optional: true
+
'@next/swc-linux-arm64-gnu@15.2.1':
optional: true
+ '@next/swc-linux-arm64-gnu@15.4.5':
+ optional: true
+
'@next/swc-linux-arm64-musl@15.2.1':
optional: true
+ '@next/swc-linux-arm64-musl@15.4.5':
+ optional: true
+
'@next/swc-linux-x64-gnu@15.2.1':
optional: true
+ '@next/swc-linux-x64-gnu@15.4.5':
+ optional: true
+
'@next/swc-linux-x64-musl@15.2.1':
optional: true
+ '@next/swc-linux-x64-musl@15.4.5':
+ optional: true
+
'@next/swc-win32-arm64-msvc@15.2.1':
optional: true
+ '@next/swc-win32-arm64-msvc@15.4.5':
+ optional: true
+
'@next/swc-win32-x64-msvc@15.2.1':
optional: true
+ '@next/swc-win32-x64-msvc@15.4.5':
+ optional: true
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -14634,7 +15217,7 @@ snapshots:
'@alloc/quick-lru': 5.2.0
'@tailwindcss/node': 4.1.7
'@tailwindcss/oxide': 4.1.7
- postcss: 8.5.3
+ postcss: 8.5.6
tailwindcss: 4.1.7
'@tailwindcss/typography@0.5.16(tailwindcss@4.1.7)':
@@ -14987,6 +15570,10 @@ snapshots:
'@types/prop-types@15.7.14': {}
+ '@types/react-dom@18.3.7(@types/react@18.3.23)':
+ dependencies:
+ '@types/react': 18.3.23
+
'@types/react-dom@19.1.5(@types/react@19.1.5)':
dependencies:
'@types/react': 19.1.5
@@ -14995,6 +15582,11 @@ snapshots:
dependencies:
'@types/react': 19.1.5
+ '@types/react@18.3.23':
+ dependencies:
+ '@types/prop-types': 15.7.14
+ csstype: 3.1.3
+
'@types/react@19.1.5':
dependencies:
csstype: 3.1.3
@@ -15039,6 +15631,23 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
+ '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ '@typescript-eslint/scope-manager': 8.32.1
+ '@typescript-eslint/type-utils': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ '@typescript-eslint/utils': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ '@typescript-eslint/visitor-keys': 8.32.1
+ eslint: 8.57.1
+ graphemer: 1.4.0
+ ignore: 7.0.4
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.8.2)
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
@@ -15056,6 +15665,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.32.1
+ '@typescript-eslint/types': 8.32.1
+ '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.2)
+ '@typescript-eslint/visitor-keys': 8.32.1
+ debug: 4.4.1
+ eslint: 8.57.1
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.32.1
@@ -15073,6 +15694,17 @@ snapshots:
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/visitor-keys': 8.32.1
+ '@typescript-eslint/type-utils@8.32.1(eslint@8.57.1)(typescript@5.8.2)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.2)
+ '@typescript-eslint/utils': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ debug: 4.4.1
+ eslint: 8.57.1
+ ts-api-utils: 2.1.0(typescript@5.8.2)
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)':
dependencies:
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.2)
@@ -15100,6 +15732,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/utils@8.32.1(eslint@8.57.1)(typescript@5.8.2)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
+ '@typescript-eslint/scope-manager': 8.32.1
+ '@typescript-eslint/types': 8.32.1
+ '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.2)
+ eslint: 8.57.1
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)':
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
@@ -15428,6 +16071,8 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.1
+ arg@5.0.2: {}
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -15525,6 +16170,16 @@ snapshots:
atomic-sleep@1.0.0: {}
+ autoprefixer@10.4.21(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.25.1
+ caniuse-lite: 1.0.30001726
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
@@ -15704,6 +16359,8 @@ snapshots:
callsites@3.1.0: {}
+ camelcase-css@2.0.1: {}
+
camelcase@5.3.1: {}
camelcase@6.3.0: {}
@@ -15743,6 +16400,18 @@ snapshots:
chardet@0.7.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
+
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
@@ -16036,6 +16705,8 @@ snapshots:
devtools-protocol@0.0.1464554: {}
+ didyoumean@1.2.2: {}
+
diff-match-patch@1.0.5: {}
diff-sequences@29.6.3: {}
@@ -16044,10 +16715,16 @@ snapshots:
diff@7.0.0: {}
+ dlv@1.1.3: {}
+
doctrine@2.1.0:
dependencies:
esutils: 2.0.3
+ doctrine@3.0.0:
+ dependencies:
+ esutils: 2.0.3
+
dotenv@16.6.1: {}
dotenv@17.0.1: {}
@@ -16320,6 +16997,26 @@ snapshots:
- eslint-plugin-import-x
- supports-color
+ eslint-config-next@15.4.5(eslint@8.57.1)(typescript@5.8.2):
+ dependencies:
+ '@next/eslint-plugin-next': 15.4.5
+ '@rushstack/eslint-patch': 1.11.0
+ '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)
+ '@typescript-eslint/parser': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ eslint: 8.57.1
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
+ eslint-plugin-react: 7.37.5(eslint@8.57.1)
+ eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1)
+ optionalDependencies:
+ typescript: 5.8.2
+ transitivePeerDependencies:
+ - eslint-import-resolver-webpack
+ - eslint-plugin-import-x
+ - supports-color
+
eslint-import-resolver-node@0.3.9:
dependencies:
debug: 3.2.7
@@ -16328,6 +17025,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1):
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.4.1
+ eslint: 8.57.1
+ get-tsconfig: 4.10.1
+ is-bun-module: 2.0.0
+ stable-hash: 0.0.5
+ tinyglobby: 0.2.13
+ unrs-resolver: 1.7.2
+ optionalDependencies:
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)
+ transitivePeerDependencies:
+ - supports-color
+
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)):
dependencies:
'@nolyfill/is-core-module': 1.0.39
@@ -16343,6 +17055,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.1):
+ dependencies:
+ debug: 3.2.7
+ optionalDependencies:
+ '@typescript-eslint/parser': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ eslint: 8.57.1
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1)
+ transitivePeerDependencies:
+ - supports-color
+
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2)):
dependencies:
debug: 3.2.7
@@ -16354,6 +17077,35 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1):
+ dependencies:
+ '@rtsao/scc': 1.1.0
+ array-includes: 3.1.8
+ 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: 8.57.1
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1))(eslint@8.57.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.32.1(eslint@8.57.1)(typescript@5.8.2)
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
+
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2)):
dependencies:
'@rtsao/scc': 1.1.0
@@ -16383,6 +17135,25 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
+ eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1):
+ dependencies:
+ aria-query: 5.3.2
+ array-includes: 3.1.8
+ array.prototype.flatmap: 1.3.3
+ ast-types-flow: 0.0.8
+ axe-core: 4.10.3
+ axobject-query: 4.1.0
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ eslint: 8.57.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-jsx-a11y@6.10.2(eslint@9.27.0(jiti@2.4.2)):
dependencies:
aria-query: 5.3.2
@@ -16402,10 +17173,36 @@ snapshots:
safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1
+ eslint-plugin-react-hooks@5.2.0(eslint@8.57.1):
+ dependencies:
+ eslint: 8.57.1
+
eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)):
dependencies:
eslint: 9.27.0(jiti@2.4.2)
+ eslint-plugin-react@7.37.5(eslint@8.57.1):
+ dependencies:
+ array-includes: 3.1.8
+ 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: 8.57.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-plugin-react@7.37.5(eslint@9.27.0(jiti@2.4.2)):
dependencies:
array-includes: 3.1.8
@@ -16434,6 +17231,11 @@ snapshots:
estraverse: 4.3.0
optional: true
+ eslint-scope@7.2.2:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
eslint-scope@8.3.0:
dependencies:
esrecurse: 4.3.0
@@ -16443,6 +17245,49 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
+ eslint@8.57.1:
+ dependencies:
+ '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1)
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.1
+ '@humanwhocodes/config-array': 0.13.0
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.3.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.1
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+
eslint@9.27.0(jiti@2.4.2):
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
@@ -16491,6 +17336,12 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.0
+ espree@9.6.1:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 3.4.3
+
esprima@4.0.1: {}
esquery@1.6.0:
@@ -16700,6 +17551,10 @@ snapshots:
set-cookie-parser: 2.7.1
tough-cookie: 5.1.2
+ file-entry-cache@6.0.1:
+ dependencies:
+ flat-cache: 3.2.0
+
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
@@ -16746,6 +17601,12 @@ snapshots:
mlly: 1.7.4
rollup: 4.41.0
+ flat-cache@3.2.0:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+ rimraf: 3.0.2
+
flat-cache@4.0.1:
dependencies:
flatted: 3.3.3
@@ -16810,6 +17671,8 @@ snapshots:
forwarded@0.2.0: {}
+ fraction.js@4.3.7: {}
+
fresh@0.5.2: {}
fs-extra@11.3.0:
@@ -16973,6 +17836,10 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
+ globals@13.24.0:
+ dependencies:
+ type-fest: 0.20.2
+
globals@14.0.0: {}
globalthis@1.0.4:
@@ -17409,6 +18276,10 @@ snapshots:
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
@@ -17483,6 +18354,8 @@ snapshots:
is-number@7.0.0: {}
+ is-path-inside@3.0.3: {}
+
is-plain-obj@4.1.0: {}
is-regex@1.2.1:
@@ -17979,6 +18852,8 @@ snapshots:
- supports-color
- ts-node
+ jiti@1.21.7: {}
+
jiti@2.4.2: {}
jose@5.10.0: {}
@@ -19111,6 +19986,31 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
+ next@15.4.5(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@next/env': 15.4.5
+ '@swc/helpers': 0.5.15
+ caniuse-lite: 1.0.30001726
+ postcss: 8.4.31
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ styled-jsx: 5.1.6(react@18.3.1)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 15.4.5
+ '@next/swc-darwin-x64': 15.4.5
+ '@next/swc-linux-arm64-gnu': 15.4.5
+ '@next/swc-linux-arm64-musl': 15.4.5
+ '@next/swc-linux-x64-gnu': 15.4.5
+ '@next/swc-linux-x64-musl': 15.4.5
+ '@next/swc-win32-arm64-msvc': 15.4.5
+ '@next/swc-win32-x64-msvc': 15.4.5
+ '@opentelemetry/api': 1.9.0
+ '@playwright/test': 1.53.2
+ sharp: 0.34.3
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
node-domexception@1.0.0: {}
node-fetch-native@1.6.6: {}
@@ -19133,6 +20033,8 @@ snapshots:
normalize-path@3.0.0: {}
+ normalize-range@0.1.2: {}
+
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
@@ -19151,6 +20053,8 @@ snapshots:
object-assign@4.1.1: {}
+ object-hash@3.0.0: {}
+
object-inspect@1.13.4: {}
object-keys@1.1.1: {}
@@ -19443,6 +20347,8 @@ snapshots:
picomatch@4.0.2: {}
+ pify@2.3.0: {}
+
pino-abstract-transport@2.0.0:
dependencies:
split2: 4.2.0
@@ -19524,6 +20430,25 @@ snapshots:
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.0.1(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.0
+ optionalDependencies:
+ postcss: 8.5.6
+
postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.0):
dependencies:
lilconfig: 3.1.3
@@ -19533,18 +20458,24 @@ snapshots:
tsx: 4.20.3
yaml: 2.8.0
+ postcss-nested@6.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
postcss-selector-parser@6.0.10:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss@8.4.31:
+ postcss-selector-parser@6.1.2:
dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
- postcss@8.5.3:
+ postcss@8.4.31:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
@@ -19555,7 +20486,6 @@ snapshots:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- optional: true
postgres-array@2.0.0: {}
@@ -19778,6 +20708,12 @@ snapshots:
iconv-lite: 0.4.24
unpipe: 1.0.0
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
react-dom@19.1.0(react@19.1.0):
dependencies:
react: 19.1.0
@@ -19864,8 +20800,16 @@ snapshots:
react: 19.1.0
refractor: 3.6.0
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
react@19.1.0: {}
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
readable-stream@3.6.2:
dependencies:
inherits: 2.0.4
@@ -19884,6 +20828,10 @@ snapshots:
dependencies:
readable-stream: 4.7.0
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
readdirp@4.1.2: {}
real-require@0.2.0: {}
@@ -20094,6 +21042,10 @@ snapshots:
reusify@1.1.0: {}
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
rollup@4.41.0:
dependencies:
'@types/estree': 1.0.7
@@ -20167,6 +21119,10 @@ snapshots:
safer-buffer@2.1.2: {}
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
scheduler@0.26.0: {}
schema-utils@4.3.2:
@@ -20268,6 +21224,36 @@ snapshots:
'@img/sharp-win32-x64': 0.33.5
optional: true
+ sharp@0.34.3:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.4
+ semver: 7.7.2
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.3
+ '@img/sharp-darwin-x64': 0.34.3
+ '@img/sharp-libvips-darwin-arm64': 1.2.0
+ '@img/sharp-libvips-darwin-x64': 1.2.0
+ '@img/sharp-libvips-linux-arm': 1.2.0
+ '@img/sharp-libvips-linux-arm64': 1.2.0
+ '@img/sharp-libvips-linux-ppc64': 1.2.0
+ '@img/sharp-libvips-linux-s390x': 1.2.0
+ '@img/sharp-libvips-linux-x64': 1.2.0
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.0
+ '@img/sharp-linux-arm': 0.34.3
+ '@img/sharp-linux-arm64': 0.34.3
+ '@img/sharp-linux-ppc64': 0.34.3
+ '@img/sharp-linux-s390x': 0.34.3
+ '@img/sharp-linux-x64': 0.34.3
+ '@img/sharp-linuxmusl-arm64': 0.34.3
+ '@img/sharp-linuxmusl-x64': 0.34.3
+ '@img/sharp-wasm32': 0.34.3
+ '@img/sharp-win32-arm64': 0.34.3
+ '@img/sharp-win32-ia32': 0.34.3
+ '@img/sharp-win32-x64': 0.34.3
+ optional: true
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -20485,6 +21471,11 @@ snapshots:
dependencies:
inline-style-parser: 0.2.4
+ styled-jsx@5.1.6(react@18.3.1):
+ dependencies:
+ client-only: 0.0.1
+ react: 18.3.1
+
styled-jsx@5.1.6(react@19.1.0):
dependencies:
client-only: 0.0.1
@@ -20524,6 +21515,33 @@ snapshots:
dependencies:
tailwindcss: 4.1.7
+ 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.0.1(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
+
tailwindcss@4.1.7: {}
tapable@2.2.2: {}
@@ -20561,6 +21579,8 @@ snapshots:
glob: 7.2.3
minimatch: 3.1.2
+ text-table@0.2.0: {}
+
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
@@ -20680,27 +21700,6 @@ snapshots:
babel-jest: 29.7.0(@babel/core@7.28.0)
esbuild: 0.25.4
- ts-jest@29.3.4(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.5)(jest@29.7.0(@types/node@20.19.4))(typescript@5.8.2):
- dependencies:
- bs-logger: 0.2.6
- ejs: 3.1.10
- fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@20.19.4)
- jest-util: 29.7.0
- json5: 2.2.3
- lodash.memoize: 4.1.2
- make-error: 1.3.6
- semver: 7.7.2
- type-fest: 4.41.0
- typescript: 5.8.2
- yargs-parser: 21.1.1
- optionalDependencies:
- '@babel/core': 7.28.0
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.28.0)
- esbuild: 0.25.5
-
ts-poet@6.11.0:
dependencies:
dprint-node: 1.0.8
@@ -20795,6 +21794,8 @@ snapshots:
type-detect@4.0.8: {}
+ type-fest@0.20.2: {}
+
type-fest@0.21.3: {}
type-fest@4.41.0: {}
From 3dd0270ce14c2fb8df509233e4408238a89ef838 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 10:49:50 +0200
Subject: [PATCH 03/14] Integrate demo app in ag-ui
---
.../client-whatsapp-example/postcss.config.js | 9 +++
.../src/app/api/config/route.ts | 68 +++++++++++++++++++
.../src/app/api/debug/route.ts | 64 +++++++++++++++++
.../src/app/layout.tsx | 4 +-
.../client-whatsapp-example/src/app/page.tsx | 2 +-
.../tailwind.config.ts | 20 ++++++
6 files changed, 164 insertions(+), 3 deletions(-)
create mode 100644 typescript-sdk/apps/client-whatsapp-example/postcss.config.js
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/api/config/route.ts
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts
create mode 100644 typescript-sdk/apps/client-whatsapp-example/tailwind.config.ts
diff --git a/typescript-sdk/apps/client-whatsapp-example/postcss.config.js b/typescript-sdk/apps/client-whatsapp-example/postcss.config.js
new file mode 100644
index 000000000..a653d3f5a
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/postcss.config.js
@@ -0,0 +1,9 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
+
+module.exports = config
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/config/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/config/route.ts
new file mode 100644
index 000000000..3067a1468
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/config/route.ts
@@ -0,0 +1,68 @@
+import { NextRequest, NextResponse } from "next/server";
+import { getConfig, setConfig } from "@/lib/config";
+
+export async function GET() {
+ try {
+ console.log("Config GET API called");
+ const config = getConfig();
+ console.log("Config from getConfig:", config ? "exists" : "null");
+
+ if (!config) {
+ console.log("No configuration found, returning 404");
+ return NextResponse.json({ error: "No configuration found" }, { status: 404 });
+ }
+
+ // Return configuration without sensitive data
+ const response = {
+ phoneNumberId: config.phoneNumberId,
+ hasAccessToken: !!config.accessToken,
+ hasWebhookSecret: !!config.webhookSecret,
+ hasVerifyToken: !!config.verifyToken,
+ };
+ console.log("Returning config status:", response);
+ return NextResponse.json(response);
+ } catch (error) {
+ console.error("Config GET error:", error);
+ return NextResponse.json(
+ { error: "Failed to retrieve configuration" },
+ { status: 500 }
+ );
+ }
+}
+
+export async function POST(request: NextRequest) {
+ try {
+ console.log("Config POST API called");
+ const config = await request.json();
+ console.log("Received config data:", {
+ phoneNumberId: config.phoneNumberId ? "provided" : "missing",
+ hasAccessToken: !!config.accessToken,
+ hasWebhookSecret: !!config.webhookSecret,
+ hasVerifyToken: !!config.verifyToken,
+ });
+
+ // Validate required fields
+ if (!config.phoneNumberId || !config.accessToken || !config.webhookSecret || !config.verifyToken) {
+ console.log("Missing required fields");
+ return NextResponse.json(
+ { error: "All fields are required" },
+ { status: 400 }
+ );
+ }
+
+ // Store configuration (in production, this would be in a secure database)
+ setConfig(config);
+ console.log("Configuration saved successfully");
+
+ return NextResponse.json({
+ success: true,
+ message: "Configuration saved successfully",
+ });
+ } catch (error) {
+ console.error("Config POST error:", error);
+ return NextResponse.json(
+ { error: "Failed to save configuration" },
+ { status: 500 }
+ );
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts
new file mode 100644
index 000000000..22b2046ad
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts
@@ -0,0 +1,64 @@
+import { NextResponse } from "next/server";
+import { getConfig } from "@/lib/config";
+
+export async function GET() {
+ try {
+ console.log("Debug API called");
+ const config = getConfig();
+
+ if (!config) {
+ return NextResponse.json({
+ error: "No configuration found",
+ config: null
+ });
+ }
+
+ // Test the WhatsApp API credentials
+ const testUrl = `https://graph.facebook.com/v18.0/${config.phoneNumberId}`;
+ console.log("Testing WhatsApp API with URL:", testUrl);
+
+ const response = await fetch(testUrl, {
+ headers: {
+ 'Authorization': `Bearer ${config.accessToken}`,
+ 'Content-Type': 'application/json',
+ },
+ });
+
+ const responseData = await response.json();
+ console.log("WhatsApp API Response:", responseData);
+
+ if (!response.ok) {
+ return NextResponse.json({
+ error: "WhatsApp API test failed",
+ status: response.status,
+ statusText: response.statusText,
+ response: responseData,
+ config: {
+ phoneNumberId: config.phoneNumberId,
+ hasAccessToken: !!config.accessToken,
+ hasWebhookSecret: !!config.webhookSecret,
+ hasVerifyToken: !!config.verifyToken,
+ }
+ });
+ }
+
+ return NextResponse.json({
+ success: true,
+ message: "WhatsApp API credentials are valid",
+ phoneNumberInfo: responseData,
+ config: {
+ phoneNumberId: config.phoneNumberId,
+ hasAccessToken: !!config.accessToken,
+ hasWebhookSecret: !!config.webhookSecret,
+ hasVerifyToken: !!config.verifyToken,
+ }
+ });
+
+ } catch (error) {
+ console.error("Debug API error:", error);
+ return NextResponse.json({
+ error: "Debug API failed",
+ details: error instanceof Error ? error.message : 'Unknown error'
+ }, { status: 500 });
+ }
+}
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx b/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx
index f7fa87eb8..516db8782 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/layout.tsx
@@ -13,8 +13,8 @@ const geistMono = Geist_Mono({
});
export const metadata: Metadata = {
- title: "Create Next App",
- description: "Generated by create next app",
+ title: "AG-UI WhatsApp Demo",
+ description: "A lean demonstration of AG-UI WhatsApp integration",
};
export default function RootLayout({
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx b/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
index 21e616381..d41c5a197 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
@@ -335,7 +335,7 @@ export default function Home() {
- {typeof window !== "undefined" ? `${window.location.origin}/api/webhook` : "/api/webhook"}
+ /api/webhook
diff --git a/typescript-sdk/apps/client-whatsapp-example/tailwind.config.ts b/typescript-sdk/apps/client-whatsapp-example/tailwind.config.ts
new file mode 100644
index 000000000..9baf54080
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/tailwind.config.ts
@@ -0,0 +1,20 @@
+import type { Config } from "tailwindcss";
+
+const config: Config = {
+ content: [
+ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
+ "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
+ "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
+ ],
+ theme: {
+ extend: {
+ backgroundImage: {
+ "gradient-radial": "radial-gradient(var(--tw-gradient-stops))",
+ "gradient-conic":
+ "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))",
+ },
+ },
+ },
+ plugins: [],
+};
+export default config;
\ No newline at end of file
From 0533b08373d4c0172b840a601045cb3c4f2e90e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 12:28:54 +0200
Subject: [PATCH 04/14] Continue testing in Vercel
---
.../WEBHOOK_TESTING.md | 1 +
.../src/app/api/send-message/route.ts | 23 +++++--------
.../src/app/api/webhook/route.ts | 33 ++++++++++---------
.../apps/client-whatsapp-example/vercel.json | 19 +++++++++++
4 files changed, 47 insertions(+), 29 deletions(-)
create mode 100644 typescript-sdk/apps/client-whatsapp-example/WEBHOOK_TESTING.md
create mode 100644 typescript-sdk/apps/client-whatsapp-example/vercel.json
diff --git a/typescript-sdk/apps/client-whatsapp-example/WEBHOOK_TESTING.md b/typescript-sdk/apps/client-whatsapp-example/WEBHOOK_TESTING.md
new file mode 100644
index 000000000..0519ecba6
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/WEBHOOK_TESTING.md
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
index a8b400d88..b5d1456c8 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
-// import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
import { getConfig } from "@/lib/config";
export async function POST(request: NextRequest) {
@@ -21,11 +21,11 @@ export async function POST(request: NextRequest) {
console.log("Has Access Token:", !!config.accessToken);
console.log("Has Webhook Secret:", !!config.webhookSecret);
- // const agent = new WhatsAppAgent({
- // phoneNumberId: config.phoneNumberId,
- // accessToken: config.accessToken,
- // webhookSecret: config.webhookSecret,
- // });
+ const agent = new WhatsAppAgent({
+ phoneNumberId: config.phoneNumberId,
+ accessToken: config.accessToken,
+ webhookSecret: config.webhookSecret,
+ });
const { phoneNumber, message } = await request.json();
console.log("Sending message to:", phoneNumber);
@@ -40,13 +40,8 @@ export async function POST(request: NextRequest) {
console.log("Calling sendMessageToNumber");
try {
- // const response = await agent.sendMessageToNumber(phoneNumber, message);
- // console.log("Message sent successfully:", response.messages[0].id);
-
- // Temporary mock response for testing
- const response = {
- messages: [{ id: "mock-message-id" }]
- };
+ const response = await agent.sendMessageToNumber(phoneNumber, message);
+ console.log("Message sent successfully:", response.messages[0].id);
return NextResponse.json({
success: true,
@@ -62,7 +57,7 @@ export async function POST(request: NextRequest) {
return NextResponse.json(
{
- error: "WhatsApp integration not available in this example",
+ error: "Failed to send WhatsApp message",
details: sendError instanceof Error ? sendError.message : 'Unknown error'
},
{ status: 500 }
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
index c6c0e30c7..830318ecc 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
-// import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
import { getConfig } from "@/lib/config";
export async function GET(request: NextRequest) {
@@ -35,28 +35,31 @@ export async function POST(request: NextRequest) {
return NextResponse.json({ error: "Configuration not found" }, { status: 500 });
}
- // const agent = new WhatsAppAgent({
- // phoneNumberId: config.phoneNumberId,
- // accessToken: config.accessToken,
- // webhookSecret: config.webhookSecret,
- // });
+ const agent = new WhatsAppAgent({
+ phoneNumberId: config.phoneNumberId,
+ accessToken: config.accessToken,
+ webhookSecret: config.webhookSecret,
+ });
const body = await request.text();
console.log("Webhook body:", body);
// Verify webhook signature
- // const signature = request.headers.get("x-hub-signature-256");
- // if (!signature || !agent.verifyWebhookSignature(body, signature)) {
- // console.log("Webhook signature verification failed");
- // return NextResponse.json({ error: "Invalid signature" }, { status: 401 });
- // }
+ const signature = request.headers.get("x-hub-signature-256");
+ if (!signature || !agent.verifyWebhookSignature(body, signature)) {
+ console.log("Webhook signature verification failed");
+ return NextResponse.json({ error: "Invalid signature" }, { status: 401 });
+ }
// Process webhook
- // const webhookData = JSON.parse(body);
- // const processedMessages = await agent.processWebhook(webhookData);
+ const webhookData = JSON.parse(body);
+ const processedMessages = await agent.processWebhook(webhookData);
- console.log("Webhook processed successfully (mock)");
- return NextResponse.json({ success: true });
+ console.log("Webhook processed successfully:", processedMessages);
+ return NextResponse.json({
+ success: true,
+ processedMessages
+ });
} catch (error) {
console.error("Webhook processing error:", error);
return NextResponse.json({ error: "Webhook processing failed" }, { status: 500 });
diff --git a/typescript-sdk/apps/client-whatsapp-example/vercel.json b/typescript-sdk/apps/client-whatsapp-example/vercel.json
new file mode 100644
index 000000000..e44f8cac2
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/vercel.json
@@ -0,0 +1,19 @@
+{
+ "functions": {
+ "src/app/api/webhook/route.ts": {
+ "maxDuration": 30
+ },
+ "src/app/api/send-message/route.ts": {
+ "maxDuration": 30
+ },
+ "src/app/api/debug/route.ts": {
+ "maxDuration": 30
+ }
+ },
+ "env": {
+ "WHATSAPP_PHONE_NUMBER_ID": "@whatsapp_phone_number_id",
+ "WHATSAPP_ACCESS_TOKEN": "@whatsapp_access_token",
+ "WHATSAPP_WEBHOOK_SECRET": "@whatsapp_webhook_secret",
+ "WHATSAPP_VERIFY_TOKEN": "@whatsapp_verify_token"
+ }
+}
\ No newline at end of file
From 0a1fecfc2c777883932f574fdbd9b99e7392b7c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 12:34:38 +0200
Subject: [PATCH 05/14] Log more info
---
.../src/agents/whatsapp-agent.ts | 29 +++++++++++++++----
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts b/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
index af66dc855..3a12cd2a1 100644
--- a/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
+++ b/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
@@ -39,22 +39,39 @@ export class WhatsAppAgent extends AbstractAgent {
async sendMessage(to: string, message: WhatsAppSendMessageRequest): Promise {
const url = `${this.baseUrl}/${this.phoneNumberId}/messages`;
+ const requestBody = {
+ ...message,
+ messaging_product: "whatsapp",
+ recipient_type: "individual",
+ to,
+ };
+
+ console.log("=== WHATSAPP API REQUEST DEBUG ===");
+ console.log("URL:", url);
+ console.log("Method: POST");
+ console.log("Headers:", {
+ "Authorization": `Bearer ${this.accessToken.substring(0, 20)}...`,
+ "Content-Type": "application/json",
+ });
+ console.log("Body:", JSON.stringify(requestBody, null, 2));
+ console.log("==================================");
+
const response = await fetch(url, {
method: "POST",
headers: {
"Authorization": `Bearer ${this.accessToken}`,
"Content-Type": "application/json",
},
- body: JSON.stringify({
- ...message,
- messaging_product: "whatsapp",
- recipient_type: "individual",
- to,
- }),
+ body: JSON.stringify(requestBody),
});
if (!response.ok) {
const error = await response.json();
+ console.log("=== WHATSAPP API ERROR DEBUG ===");
+ console.log("Status:", response.status);
+ console.log("Status Text:", response.statusText);
+ console.log("Error Response:", JSON.stringify(error, null, 2));
+ console.log("==================================");
throw new Error(`WhatsApp API error: ${error.error?.message || response.statusText}`);
}
From 3e498044350ef8ac55972238cea580dc0f49a9ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 12:44:09 +0200
Subject: [PATCH 06/14] Donwngrade next to align with dojo
---
typescript-sdk/apps/client-whatsapp-example/package.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/typescript-sdk/apps/client-whatsapp-example/package.json b/typescript-sdk/apps/client-whatsapp-example/package.json
index 70e4acf34..4f06aef50 100644
--- a/typescript-sdk/apps/client-whatsapp-example/package.json
+++ b/typescript-sdk/apps/client-whatsapp-example/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@ag-ui/community-whatsapp": "workspace:../../integrations/community-whatsapp",
- "next": "15.4.5",
+ "next": "15.2.1",
"react": "^18",
"react-dom": "^18"
},
@@ -20,7 +20,7 @@
"@types/react-dom": "^18",
"autoprefixer": "^10.0.1",
"eslint": "^8",
- "eslint-config-next": "15.4.5",
+ "eslint-config-next": "15.2.1",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "^5"
From 0e1d938e89da938927bc4617d73ecaa158d3355c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 12:47:32 +0200
Subject: [PATCH 07/14] Upgrade api version
---
.../apps/client-whatsapp-example/src/app/api/debug/route.ts | 2 +-
typescript-sdk/integrations/community-whatsapp/README.md | 2 +-
.../community-whatsapp/src/agents/whatsapp-agent.ts | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts
index 22b2046ad..b200ebdc1 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/debug/route.ts
@@ -14,7 +14,7 @@ export async function GET() {
}
// Test the WhatsApp API credentials
- const testUrl = `https://graph.facebook.com/v18.0/${config.phoneNumberId}`;
+ const testUrl = `https://graph.facebook.com/v23.0/${config.phoneNumberId}`;
console.log("Testing WhatsApp API with URL:", testUrl);
const response = await fetch(testUrl, {
diff --git a/typescript-sdk/integrations/community-whatsapp/README.md b/typescript-sdk/integrations/community-whatsapp/README.md
index 479023730..9ebf4e4b1 100644
--- a/typescript-sdk/integrations/community-whatsapp/README.md
+++ b/typescript-sdk/integrations/community-whatsapp/README.md
@@ -109,7 +109,7 @@ await agent.handleWebhookWithAI(webhookBody, signature);
- `phoneNumberId`: Your WhatsApp Business API phone number ID (from Step 2)
- `accessToken`: Your WhatsApp Business API access token (from Step 3)
- `webhookSecret`: Secret for verifying webhook requests (from Step 4)
-- `apiVersion`: WhatsApp API version (default: "v18.0")
+- `apiVersion`: WhatsApp API version (default: "v23.0")
### Enhanced Configuration
- `aiProvider`: AI service provider (OpenAI, Anthropic, etc.)
diff --git a/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts b/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
index 3a12cd2a1..bdb6cddff 100644
--- a/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
+++ b/typescript-sdk/integrations/community-whatsapp/src/agents/whatsapp-agent.ts
@@ -15,7 +15,7 @@ export class WhatsAppAgent extends AbstractAgent {
this.phoneNumberId = config.phoneNumberId;
this.accessToken = config.accessToken;
this.webhookSecret = config.webhookSecret;
- this.apiVersion = config.apiVersion || "v18.0";
+ this.apiVersion = config.apiVersion || "v23.0";
this.baseUrl = config.baseUrl || `https://graph.facebook.com/${this.apiVersion}`;
}
From cc84ab25efde319e6659999bc188c4c31a275d72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 12:58:18 +0200
Subject: [PATCH 08/14] Fick pnpm-lock file
---
typescript-sdk/pnpm-lock.yaml | 447 ++++------------------------------
1 file changed, 44 insertions(+), 403 deletions(-)
diff --git a/typescript-sdk/pnpm-lock.yaml b/typescript-sdk/pnpm-lock.yaml
index 652898d05..ec019c7f8 100644
--- a/typescript-sdk/pnpm-lock.yaml
+++ b/typescript-sdk/pnpm-lock.yaml
@@ -70,8 +70,8 @@ importers:
specifier: workspace:../../integrations/community-whatsapp
version: link:../../integrations/community-whatsapp
next:
- specifier: 15.4.5
- version: 15.4.5(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 15.2.1
+ version: 15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react:
specifier: ^18
version: 18.3.1
@@ -95,8 +95,8 @@ importers:
specifier: ^8
version: 8.57.1
eslint-config-next:
- specifier: 15.4.5
- version: 15.4.5(eslint@8.57.1)(typescript@5.8.2)
+ specifier: 15.2.1
+ version: 15.2.1(eslint@8.57.1)(typescript@5.8.2)
postcss:
specifier: ^8
version: 8.5.6
@@ -1998,227 +1998,105 @@ packages:
cpu: [arm64]
os: [darwin]
- '@img/sharp-darwin-arm64@0.34.3':
- resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
- 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-darwin-x64@0.34.3':
- resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==}
- 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-arm64@1.2.0':
- resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==}
- 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-darwin-x64@1.2.0':
- resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==}
- 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-arm64@1.2.0':
- resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==}
- 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-arm@1.2.0':
- resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==}
- cpu: [arm]
- os: [linux]
-
- '@img/sharp-libvips-linux-ppc64@1.2.0':
- resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==}
- cpu: [ppc64]
- os: [linux]
-
'@img/sharp-libvips-linux-s390x@1.0.4':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x]
os: [linux]
- '@img/sharp-libvips-linux-s390x@1.2.0':
- resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==}
- 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-linux-x64@1.2.0':
- resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==}
- 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-arm64@1.2.0':
- resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==}
- 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-libvips-linuxmusl-x64@1.2.0':
- resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==}
- 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-arm64@0.34.3':
- resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==}
- 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-arm@0.34.3':
- resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm]
- os: [linux]
-
- '@img/sharp-linux-ppc64@0.34.3':
- resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [ppc64]
- 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-s390x@0.34.3':
- resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==}
- 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-linux-x64@0.34.3':
- resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==}
- 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-arm64@0.34.3':
- resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==}
- 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-linuxmusl-x64@0.34.3':
- resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==}
- 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-wasm32@0.34.3':
- resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [wasm32]
-
- '@img/sharp-win32-arm64@0.34.3':
- resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [arm64]
- os: [win32]
-
'@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-ia32@0.34.3':
- resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==}
- 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]
- '@img/sharp-win32-x64@0.34.3':
- resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- cpu: [x64]
- os: [win32]
-
'@inquirer/checkbox@4.1.8':
resolution: {integrity: sha512-d/QAsnwuHX2OPolxvYcgSj7A9DO9H6gVOy2DvBTx+P2LH2iRTo/RSGV3iwCzW024nP9hw98KIuDmdyhZQj1UQg==}
engines: {node: '>=18'}
@@ -3061,15 +2939,9 @@ packages:
'@next/env@15.2.1':
resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==}
- '@next/env@15.4.5':
- resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==}
-
'@next/eslint-plugin-next@15.2.1':
resolution: {integrity: sha512-6ppeToFd02z38SllzWxayLxjjNfzvc7Wm07gQOKSLjyASvKcXjNStZrLXMHuaWkhjqxe+cnhb2uzfWXm1VEj/Q==}
- '@next/eslint-plugin-next@15.4.5':
- resolution: {integrity: sha512-YhbrlbEt0m4jJnXHMY/cCUDBAWgd5SaTa5mJjzOt82QwflAFfW/h3+COp2TfVSzhmscIZ5sg2WXt3MLziqCSCw==}
-
'@next/mdx@15.3.2':
resolution: {integrity: sha512-D6lSSbVzn1EiPwrBKG5QzXClcgdqiNCL8a3/6oROinzgZnYSxbVmnfs0UrqygtGSOmgW7sdJJSEOy555DoAwvw==}
peerDependencies:
@@ -3087,96 +2959,48 @@ packages:
cpu: [arm64]
os: [darwin]
- '@next/swc-darwin-arm64@15.4.5':
- resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==}
- 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-darwin-x64@15.4.5':
- resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==}
- 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-gnu@15.4.5':
- resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==}
- 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-arm64-musl@15.4.5':
- resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==}
- 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-gnu@15.4.5':
- resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==}
- 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-linux-x64-musl@15.4.5':
- resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==}
- 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-arm64-msvc@15.4.5':
- resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==}
- 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]
- '@next/swc-win32-x64-msvc@15.4.5':
- resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==}
- engines: {node: '>= 10'}
- cpu: [x64]
- os: [win32]
-
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -5495,9 +5319,6 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- caniuse-lite@1.0.30001718:
- resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
-
caniuse-lite@1.0.30001726:
resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==}
@@ -6066,15 +5887,6 @@ packages:
typescript:
optional: true
- eslint-config-next@15.4.5:
- resolution: {integrity: sha512-IMijiXaZ43qFB+Gcpnb374ipTKD8JIyVNR+6VsifFQ/LHyx+A9wgcgSIhCX5PYSjwOoSYD5LtNHKlM5uc23eww==}
- 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==}
@@ -8036,27 +7848,6 @@ packages:
sass:
optional: true
- next@15.4.5:
- resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==}
- engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
- hasBin: true
- peerDependencies:
- '@opentelemetry/api': ^1.1.0
- '@playwright/test': ^1.51.1
- 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
-
node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
@@ -9005,10 +8796,6 @@ packages:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- sharp@0.34.3:
- resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==}
- 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'}
@@ -12257,162 +12044,76 @@ snapshots:
'@img/sharp-libvips-darwin-arm64': 1.0.4
optional: true
- '@img/sharp-darwin-arm64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-darwin-arm64': 1.2.0
- optional: true
-
'@img/sharp-darwin-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-darwin-x64': 1.0.4
optional: true
- '@img/sharp-darwin-x64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-darwin-x64': 1.2.0
- optional: true
-
'@img/sharp-libvips-darwin-arm64@1.0.4':
optional: true
- '@img/sharp-libvips-darwin-arm64@1.2.0':
- optional: true
-
'@img/sharp-libvips-darwin-x64@1.0.4':
optional: true
- '@img/sharp-libvips-darwin-x64@1.2.0':
- optional: true
-
'@img/sharp-libvips-linux-arm64@1.0.4':
optional: true
- '@img/sharp-libvips-linux-arm64@1.2.0':
- optional: true
-
'@img/sharp-libvips-linux-arm@1.0.5':
optional: true
- '@img/sharp-libvips-linux-arm@1.2.0':
- optional: true
-
- '@img/sharp-libvips-linux-ppc64@1.2.0':
- optional: true
-
'@img/sharp-libvips-linux-s390x@1.0.4':
optional: true
- '@img/sharp-libvips-linux-s390x@1.2.0':
- optional: true
-
'@img/sharp-libvips-linux-x64@1.0.4':
optional: true
- '@img/sharp-libvips-linux-x64@1.2.0':
- optional: true
-
'@img/sharp-libvips-linuxmusl-arm64@1.0.4':
optional: true
- '@img/sharp-libvips-linuxmusl-arm64@1.2.0':
- optional: true
-
'@img/sharp-libvips-linuxmusl-x64@1.0.4':
optional: true
- '@img/sharp-libvips-linuxmusl-x64@1.2.0':
- optional: true
-
'@img/sharp-linux-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm64': 1.0.4
optional: true
- '@img/sharp-linux-arm64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm64': 1.2.0
- optional: true
-
'@img/sharp-linux-arm@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-arm': 1.0.5
optional: true
- '@img/sharp-linux-arm@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-arm': 1.2.0
- optional: true
-
- '@img/sharp-linux-ppc64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-ppc64': 1.2.0
- optional: true
-
'@img/sharp-linux-s390x@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-s390x': 1.0.4
optional: true
- '@img/sharp-linux-s390x@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-s390x': 1.2.0
- optional: true
-
'@img/sharp-linux-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linux-x64': 1.0.4
optional: true
- '@img/sharp-linux-x64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linux-x64': 1.2.0
- optional: true
-
'@img/sharp-linuxmusl-arm64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-arm64': 1.0.4
optional: true
- '@img/sharp-linuxmusl-arm64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
- optional: true
-
'@img/sharp-linuxmusl-x64@0.33.5':
optionalDependencies:
'@img/sharp-libvips-linuxmusl-x64': 1.0.4
optional: true
- '@img/sharp-linuxmusl-x64@0.34.3':
- optionalDependencies:
- '@img/sharp-libvips-linuxmusl-x64': 1.2.0
- optional: true
-
'@img/sharp-wasm32@0.33.5':
- dependencies:
- '@emnapi/runtime': 1.4.3
- optional: true
-
- '@img/sharp-wasm32@0.34.3':
dependencies:
'@emnapi/runtime': 1.4.5
optional: true
- '@img/sharp-win32-arm64@0.34.3':
- optional: true
-
'@img/sharp-win32-ia32@0.33.5':
optional: true
- '@img/sharp-win32-ia32@0.34.3':
- optional: true
-
'@img/sharp-win32-x64@0.33.5':
optional: true
- '@img/sharp-win32-x64@0.34.3':
- optional: true
-
'@inquirer/checkbox@4.1.8(@types/node@20.17.50)':
dependencies:
'@inquirer/core': 10.1.13(@types/node@20.17.50)
@@ -13413,16 +13114,10 @@ snapshots:
'@next/env@15.2.1': {}
- '@next/env@15.4.5': {}
-
'@next/eslint-plugin-next@15.2.1':
dependencies:
fast-glob: 3.3.1
- '@next/eslint-plugin-next@15.4.5':
- dependencies:
- fast-glob: 3.3.1
-
'@next/mdx@15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))':
dependencies:
source-map: 0.7.4
@@ -13433,51 +13128,27 @@ snapshots:
'@next/swc-darwin-arm64@15.2.1':
optional: true
- '@next/swc-darwin-arm64@15.4.5':
- optional: true
-
'@next/swc-darwin-x64@15.2.1':
optional: true
- '@next/swc-darwin-x64@15.4.5':
- optional: true
-
'@next/swc-linux-arm64-gnu@15.2.1':
optional: true
- '@next/swc-linux-arm64-gnu@15.4.5':
- optional: true
-
'@next/swc-linux-arm64-musl@15.2.1':
optional: true
- '@next/swc-linux-arm64-musl@15.4.5':
- optional: true
-
'@next/swc-linux-x64-gnu@15.2.1':
optional: true
- '@next/swc-linux-x64-gnu@15.4.5':
- optional: true
-
'@next/swc-linux-x64-musl@15.2.1':
optional: true
- '@next/swc-linux-x64-musl@15.4.5':
- optional: true
-
'@next/swc-win32-arm64-msvc@15.2.1':
optional: true
- '@next/swc-win32-arm64-msvc@15.4.5':
- optional: true
-
'@next/swc-win32-x64-msvc@15.2.1':
optional: true
- '@next/swc-win32-x64-msvc@15.4.5':
- optional: true
-
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -16365,8 +16036,6 @@ snapshots:
camelcase@6.3.0: {}
- caniuse-lite@1.0.30001718: {}
-
caniuse-lite@1.0.30001726: {}
case-anything@2.1.13: {}
@@ -16977,19 +16646,19 @@ snapshots:
escape-string-regexp@5.0.0: {}
- eslint-config-next@15.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2):
+ eslint-config-next@15.2.1(eslint@8.57.1)(typescript@5.8.2):
dependencies:
'@next/eslint-plugin-next': 15.2.1
'@rushstack/eslint-patch': 1.11.0
- '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)
- '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)
- eslint: 9.27.0(jiti@2.4.2)
+ '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)
+ '@typescript-eslint/parser': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
+ eslint: 8.57.1
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2))
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.27.0(jiti@2.4.2))
- eslint-plugin-react: 7.37.5(eslint@9.27.0(jiti@2.4.2))
- eslint-plugin-react-hooks: 5.2.0(eslint@9.27.0(jiti@2.4.2))
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
+ eslint-plugin-react: 7.37.5(eslint@8.57.1)
+ eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1)
optionalDependencies:
typescript: 5.8.2
transitivePeerDependencies:
@@ -16997,19 +16666,19 @@ snapshots:
- eslint-plugin-import-x
- supports-color
- eslint-config-next@15.4.5(eslint@8.57.1)(typescript@5.8.2):
+ eslint-config-next@15.2.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2):
dependencies:
- '@next/eslint-plugin-next': 15.4.5
+ '@next/eslint-plugin-next': 15.2.1
'@rushstack/eslint-patch': 1.11.0
- '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)
- '@typescript-eslint/parser': 8.32.1(eslint@8.57.1)(typescript@5.8.2)
- eslint: 8.57.1
+ '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)
+ '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2)
+ eslint: 9.27.0(jiti@2.4.2)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1)
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@8.57.1)(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)
- eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1)
- eslint-plugin-react: 7.37.5(eslint@8.57.1)
- eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1)
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.27.0(jiti@2.4.2))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.27.0(jiti@2.4.2))
+ eslint-plugin-react: 7.37.5(eslint@9.27.0(jiti@2.4.2))
+ eslint-plugin-react-hooks: 5.2.0(eslint@9.27.0(jiti@2.4.2))
optionalDependencies:
typescript: 5.8.2
transitivePeerDependencies:
@@ -19959,17 +19628,17 @@ snapshots:
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
- next@15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ next@15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 15.2.1
'@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
busboy: 1.6.0
- caniuse-lite: 1.0.30001718
+ caniuse-lite: 1.0.30001726
postcss: 8.4.31
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
- styled-jsx: 5.1.6(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ styled-jsx: 5.1.6(react@18.3.1)
optionalDependencies:
'@next/swc-darwin-arm64': 15.2.1
'@next/swc-darwin-x64': 15.2.1
@@ -19986,27 +19655,29 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
- next@15.4.5(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ next@15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- '@next/env': 15.4.5
+ '@next/env': 15.2.1
+ '@swc/counter': 0.1.3
'@swc/helpers': 0.5.15
+ busboy: 1.6.0
caniuse-lite: 1.0.30001726
postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.6(react@18.3.1)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
+ styled-jsx: 5.1.6(react@19.1.0)
optionalDependencies:
- '@next/swc-darwin-arm64': 15.4.5
- '@next/swc-darwin-x64': 15.4.5
- '@next/swc-linux-arm64-gnu': 15.4.5
- '@next/swc-linux-arm64-musl': 15.4.5
- '@next/swc-linux-x64-gnu': 15.4.5
- '@next/swc-linux-x64-musl': 15.4.5
- '@next/swc-win32-arm64-msvc': 15.4.5
- '@next/swc-win32-x64-msvc': 15.4.5
+ '@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.53.2
- sharp: 0.34.3
+ sharp: 0.33.5
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
@@ -21224,36 +20895,6 @@ snapshots:
'@img/sharp-win32-x64': 0.33.5
optional: true
- sharp@0.34.3:
- dependencies:
- color: 4.2.3
- detect-libc: 2.0.4
- semver: 7.7.2
- optionalDependencies:
- '@img/sharp-darwin-arm64': 0.34.3
- '@img/sharp-darwin-x64': 0.34.3
- '@img/sharp-libvips-darwin-arm64': 1.2.0
- '@img/sharp-libvips-darwin-x64': 1.2.0
- '@img/sharp-libvips-linux-arm': 1.2.0
- '@img/sharp-libvips-linux-arm64': 1.2.0
- '@img/sharp-libvips-linux-ppc64': 1.2.0
- '@img/sharp-libvips-linux-s390x': 1.2.0
- '@img/sharp-libvips-linux-x64': 1.2.0
- '@img/sharp-libvips-linuxmusl-arm64': 1.2.0
- '@img/sharp-libvips-linuxmusl-x64': 1.2.0
- '@img/sharp-linux-arm': 0.34.3
- '@img/sharp-linux-arm64': 0.34.3
- '@img/sharp-linux-ppc64': 0.34.3
- '@img/sharp-linux-s390x': 0.34.3
- '@img/sharp-linux-x64': 0.34.3
- '@img/sharp-linuxmusl-arm64': 0.34.3
- '@img/sharp-linuxmusl-x64': 0.34.3
- '@img/sharp-wasm32': 0.34.3
- '@img/sharp-win32-arm64': 0.34.3
- '@img/sharp-win32-ia32': 0.34.3
- '@img/sharp-win32-x64': 0.34.3
- optional: true
-
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
From 612c698e6c8e06a74ae9f0f70e364319cdb993fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Fri, 1 Aug 2025 13:04:23 +0200
Subject: [PATCH 09/14] Fix test
---
typescript-sdk/integrations/community-whatsapp/jest.config.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/typescript-sdk/integrations/community-whatsapp/jest.config.js b/typescript-sdk/integrations/community-whatsapp/jest.config.js
index b83ca8420..d1f903abd 100644
--- a/typescript-sdk/integrations/community-whatsapp/jest.config.js
+++ b/typescript-sdk/integrations/community-whatsapp/jest.config.js
@@ -2,7 +2,8 @@ module.exports = {
preset: "ts-jest",
testEnvironment: "node",
testMatch: ["**/__tests__/**/*.test.ts"],
- moduleNameMapping: {
+ moduleNameMapper: {
"^@/(.*)$": "/src/$1",
},
+ passWithNoTests: true,
};
\ No newline at end of file
From bcebf4b6c9251f99a62ae3c4c666e899029cee92 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Sun, 3 Aug 2025 08:25:44 +0200
Subject: [PATCH 10/14] Progress
---
typescript-sdk/apps/dojo/package.json | 8 +-
typescript-sdk/pnpm-lock.yaml | 977 +++++++++++++++-----------
2 files changed, 585 insertions(+), 400 deletions(-)
diff --git a/typescript-sdk/apps/dojo/package.json b/typescript-sdk/apps/dojo/package.json
index 2f5a8bdc3..b7c1e3b4b 100644
--- a/typescript-sdk/apps/dojo/package.json
+++ b/typescript-sdk/apps/dojo/package.json
@@ -57,8 +57,8 @@
"next": "15.2.1",
"next-themes": "^0.4.6",
"openai": "^4.98.0",
- "react": "^19.0.0",
- "react-dom": "^19.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
"react-markdown": "^10.1.0",
"react-syntax-highlighter": "^15.6.1",
"rxjs": "7.8.1",
@@ -81,8 +81,8 @@
"@types/diff": "^7.0.1",
"@types/markdown-it": "^14.1.2",
"@types/node": "^20",
- "@types/react": "^19",
- "@types/react-dom": "^19",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
"eslint": "^9",
"eslint-config-next": "15.2.1",
"tailwindcss": "^4",
diff --git a/typescript-sdk/pnpm-lock.yaml b/typescript-sdk/pnpm-lock.yaml
index ec019c7f8..a55db5cb2 100644
--- a/typescript-sdk/pnpm-lock.yaml
+++ b/typescript-sdk/pnpm-lock.yaml
@@ -156,37 +156,37 @@ importers:
version: 1.3.22(zod@3.25.67)
'@copilotkit/react-core':
specifier: 1.9.2
- version: 1.9.2(@types/react@19.1.5)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 1.9.2(@types/react@18.3.23)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@copilotkit/react-ui':
specifier: 1.9.2
- version: 1.9.2(@types/react@19.1.5)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 1.9.2(@types/react@18.3.23)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@copilotkit/runtime':
specifier: 1.9.2
- version: 1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)
+ version: 1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@18.3.1)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@18.3.1)(redis@5.6.1)(ws@8.18.3)
'@copilotkit/runtime-client-gql':
specifier: 1.9.2
- version: 1.9.2(graphql@16.11.0)(react@19.1.0)
+ version: 1.9.2(graphql@16.11.0)(react@18.3.1)
'@copilotkit/shared':
specifier: 1.9.2
version: 1.9.2
'@mastra/client-js':
specifier: ^0.10.9
- version: 0.10.9(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
+ version: 0.10.9(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
'@mastra/core':
specifier: ^0.11.1
- version: 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
+ version: 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
'@mastra/dynamodb':
specifier: ^0.13.2
- version: 0.13.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))
+ version: 0.13.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))
'@mastra/libsql':
specifier: ^0.11.2
- version: 0.11.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))
+ version: 0.11.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))
'@mastra/loggers':
specifier: ^0.10.3
- version: 0.10.3(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))
+ version: 0.10.3(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))
'@mastra/memory':
specifier: ^0.11.5
- version: 0.11.5(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))(react@19.1.0)
+ version: 0.11.5(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))(react@18.3.1)
'@mdx-js/loader':
specifier: ^3.1.0
version: 3.1.0(acorn@8.15.0)(webpack@5.99.9)
@@ -195,22 +195,22 @@ importers:
version: 3.1.0(acorn@8.15.0)
'@mdx-js/react':
specifier: ^3.1.0
- version: 3.1.0(@types/react@19.1.5)(react@19.1.0)
+ version: 3.1.0(@types/react@18.3.23)(react@18.3.1)
'@monaco-editor/react':
specifier: ^4.7.0
- version: 4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@next/mdx':
specifier: ^15.2.3
- version: 15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))
+ version: 15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@18.3.23)(react@18.3.1))
'@radix-ui/react-dropdown-menu':
specifier: ^2.1.6
- version: 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 2.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-slot':
specifier: ^1.1.2
- version: 1.2.3(@types/react@19.1.5)(react@19.1.0)
+ version: 1.2.3(@types/react@18.3.23)(react@18.3.1)
'@radix-ui/react-tabs':
specifier: ^1.1.3
- version: 1.1.12(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 1.1.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tiptap/extension-color':
specifier: ^2.11.5
version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/extension-text-style@2.24.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0)))
@@ -222,7 +222,7 @@ importers:
version: 2.12.0
'@tiptap/react':
specifier: ^2.11.5
- version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@tiptap/starter-kit':
specifier: ^2.11.5
version: 2.12.0
@@ -243,7 +243,7 @@ importers:
version: 3.1.1
lucide-react:
specifier: ^0.477.0
- version: 0.477.0(react@19.1.0)
+ version: 0.477.0(react@18.3.1)
markdown-it:
specifier: ^14.1.0
version: 14.1.0
@@ -252,25 +252,25 @@ importers:
version: 4.0.0
next:
specifier: 15.2.1
- version: 15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next-themes:
specifier: ^0.4.6
- version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
openai:
specifier: ^4.98.0
version: 4.100.0(ws@8.18.3)(zod@3.25.67)
react:
- specifier: ^19.0.0
- version: 19.1.0
+ specifier: ^18.2.0
+ version: 18.3.1
react-dom:
- specifier: ^19.0.0
- version: 19.1.0(react@19.1.0)
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
react-markdown:
specifier: ^10.1.0
- version: 10.1.0(@types/react@19.1.5)(react@19.1.0)
+ version: 10.1.0(@types/react@18.3.23)(react@18.3.1)
react-syntax-highlighter:
specifier: ^15.6.1
- version: 15.6.1(react@19.1.0)
+ version: 15.6.1(react@18.3.1)
rxjs:
specifier: 7.8.1
version: 7.8.1
@@ -309,11 +309,11 @@ importers:
specifier: ^20
version: 20.17.50
'@types/react':
- specifier: ^19
- version: 19.1.5
+ specifier: ^18
+ version: 18.3.23
'@types/react-dom':
- specifier: ^19
- version: 19.1.5(@types/react@19.1.5)
+ specifier: ^18
+ version: 18.3.7(@types/react@18.3.23)
eslint:
specifier: ^9
version: 9.27.0(jiti@2.4.2)
@@ -424,7 +424,7 @@ importers:
version: 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
'@langchain/langgraph-sdk':
specifier: ^0.0.78
- version: 0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
+ version: 0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@18.3.1)
partial-json:
specifier: ^0.1.7
version: 0.1.7
@@ -4712,20 +4712,12 @@ packages:
peerDependencies:
'@types/react': ^18.0.0
- '@types/react-dom@19.1.5':
- resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==}
- peerDependencies:
- '@types/react': ^19.0.0
-
'@types/react-syntax-highlighter@15.5.13':
resolution: {integrity: sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==}
'@types/react@18.3.23':
resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==}
- '@types/react@19.1.5':
- resolution: {integrity: sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==}
-
'@types/retry@0.12.0':
resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
@@ -8468,11 +8460,6 @@ packages:
peerDependencies:
react: ^18.3.1
- react-dom@19.1.0:
- resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
- peerDependencies:
- react: ^19.1.0
-
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
@@ -8744,9 +8731,6 @@ packages:
scheduler@0.23.2:
resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
- scheduler@0.26.0:
- resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
-
schema-utils@4.3.2:
resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
engines: {node: '>= 10.13.0'}
@@ -9774,11 +9758,11 @@ snapshots:
'@ag-ui/core': 0.0.35
'@ag-ui/proto': 0.0.35
- '@ag-ui/langgraph@0.0.6(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(react@19.1.0)':
+ '@ag-ui/langgraph@0.0.6(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(react@18.3.1)':
dependencies:
'@ag-ui/client': 0.0.34
'@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- '@langchain/langgraph-sdk': 0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
+ '@langchain/langgraph-sdk': 0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@18.3.1)
partial-json: 0.1.7
rxjs: 7.8.1
transitivePeerDependencies:
@@ -9908,6 +9892,26 @@ snapshots:
dependencies:
json-schema: 0.4.0
+ '@ai-sdk/react@1.2.12(react@18.3.1)(zod@3.25.67)':
+ dependencies:
+ '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67)
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67)
+ react: 18.3.1
+ swr: 2.3.3(react@18.3.1)
+ throttleit: 2.1.0
+ optionalDependencies:
+ zod: 3.25.67
+
+ '@ai-sdk/react@1.2.12(react@18.3.1)(zod@3.25.71)':
+ dependencies:
+ '@ai-sdk/provider-utils': 2.2.8(zod@3.25.71)
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.71)
+ react: 18.3.1
+ swr: 2.3.3(react@18.3.1)
+ throttleit: 2.1.0
+ optionalDependencies:
+ zod: 3.25.71
+
'@ai-sdk/react@1.2.12(react@19.1.0)(zod@3.25.17)':
dependencies:
'@ai-sdk/provider-utils': 2.2.8(zod@3.25.17)
@@ -11172,6 +11176,43 @@ snapshots:
transitivePeerDependencies:
- encoding
+ '@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@18.3.1)(zod@3.25.67)':
+ dependencies:
+ '@anthropic-ai/sdk': 0.39.0
+ '@browserbasehq/sdk': 2.6.0
+ '@google/genai': 0.8.0
+ ai: 4.3.16(react@18.3.1)(zod@3.25.67)
+ deepmerge: 4.3.1
+ devtools-protocol: 0.0.1464554
+ dotenv: 17.0.1
+ fetch-cookie: 3.1.0
+ openai: 4.104.0(ws@8.18.3)(zod@3.25.67)
+ pino: 9.7.0
+ pino-pretty: 13.0.0
+ playwright: 1.53.2
+ ws: 8.18.3
+ zod: 3.25.67
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+ optionalDependencies:
+ '@ai-sdk/anthropic': 1.2.12(zod@3.25.67)
+ '@ai-sdk/azure': 1.3.23(zod@3.25.67)
+ '@ai-sdk/cerebras': 0.2.14(zod@3.25.67)
+ '@ai-sdk/deepseek': 0.2.14(zod@3.25.67)
+ '@ai-sdk/google': 1.2.22(zod@3.25.67)
+ '@ai-sdk/groq': 1.2.9(zod@3.25.67)
+ '@ai-sdk/mistral': 1.2.8(zod@3.25.67)
+ '@ai-sdk/openai': 1.3.22(zod@3.25.67)
+ '@ai-sdk/perplexity': 1.1.9(zod@3.25.67)
+ '@ai-sdk/togetherai': 0.2.14(zod@3.25.67)
+ '@ai-sdk/xai': 1.2.16(zod@3.25.67)
+ ollama-ai-provider: 1.2.0(zod@3.25.67)
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - react
+ - supports-color
+ - utf-8-validate
+
'@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67)':
dependencies:
'@anthropic-ai/sdk': 0.39.0
@@ -11215,14 +11256,14 @@ snapshots:
'@cfworker/json-schema@4.1.1': {}
- '@copilotkit/react-core@1.9.2(@types/react@19.1.5)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@copilotkit/react-core@1.9.2(@types/react@18.3.23)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@copilotkit/runtime-client-gql': 1.9.2(graphql@16.11.0)(react@19.1.0)
+ '@copilotkit/runtime-client-gql': 1.9.2(graphql@16.11.0)(react@18.3.1)
'@copilotkit/shared': 1.9.2
'@scarf/scarf': 1.4.0
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
- react-markdown: 8.0.7(@types/react@19.1.5)(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-markdown: 8.0.7(@types/react@18.3.23)(react@18.3.1)
untruncate-json: 0.0.1
transitivePeerDependencies:
- '@types/react'
@@ -11230,15 +11271,15 @@ snapshots:
- graphql
- supports-color
- '@copilotkit/react-ui@1.9.2(@types/react@19.1.5)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@copilotkit/react-ui@1.9.2(@types/react@18.3.23)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@copilotkit/react-core': 1.9.2(@types/react@19.1.5)(graphql@16.11.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@copilotkit/runtime-client-gql': 1.9.2(graphql@16.11.0)(react@19.1.0)
+ '@copilotkit/react-core': 1.9.2(@types/react@18.3.23)(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@copilotkit/runtime-client-gql': 1.9.2(graphql@16.11.0)(react@18.3.1)
'@copilotkit/shared': 1.9.2
- '@headlessui/react': 2.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- react: 19.1.0
- react-markdown: 10.1.0(@types/react@19.1.5)(react@19.1.0)
- react-syntax-highlighter: 15.6.1(react@19.1.0)
+ '@headlessui/react': 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-markdown: 10.1.0(@types/react@18.3.23)(react@18.3.1)
+ react-syntax-highlighter: 15.6.1(react@18.3.1)
rehype-raw: 7.0.0
remark-gfm: 4.0.1
remark-math: 6.0.0
@@ -11249,13 +11290,13 @@ snapshots:
- react-dom
- supports-color
- '@copilotkit/runtime-client-gql@1.9.2(graphql@16.11.0)(react@19.1.0)':
+ '@copilotkit/runtime-client-gql@1.9.2(graphql@16.11.0)(react@18.3.1)':
dependencies:
'@copilotkit/shared': 1.9.2
'@urql/core': 5.1.1(graphql@16.11.0)
- react: 19.1.0
+ react: 18.3.1
untruncate-json: 0.0.1
- urql: 4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@19.1.0)
+ urql: 4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@18.3.1)
transitivePeerDependencies:
- encoding
- graphql
@@ -11437,21 +11478,21 @@ snapshots:
- ws
- youtubei.js
- '@copilotkit/runtime@1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@19.1.0)(redis@5.6.1)(ws@8.18.3)':
+ '@copilotkit/runtime@1.9.2(@ag-ui/client@0.0.33)(@ag-ui/core@0.0.33)(@ag-ui/encoder@0.0.33)(@ag-ui/proto@0.0.33)(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@18.3.1)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(pg@8.16.3)(playwright@1.53.2)(react@18.3.1)(redis@5.6.1)(ws@8.18.3)':
dependencies:
'@ag-ui/client': 0.0.33
'@ag-ui/core': 0.0.33
'@ag-ui/encoder': 0.0.33
- '@ag-ui/langgraph': 0.0.6(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(react@19.1.0)
+ '@ag-ui/langgraph': 0.0.6(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(react@18.3.1)
'@ag-ui/proto': 0.0.33
'@anthropic-ai/sdk': 0.27.3
'@copilotkit/shared': 1.9.2
'@graphql-yoga/plugin-defer-stream': 3.13.4(graphql-yoga@5.13.4(graphql@16.11.0))(graphql@16.11.0)
'@langchain/aws': 0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))
- '@langchain/community': 0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)
+ '@langchain/community': 0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@18.3.1)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
'@langchain/google-gauth': 0.1.8(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(zod@3.25.71)
- '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)
+ '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@18.3.1)
'@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
class-transformer: 0.5.1
class-validator: 0.14.2
@@ -11902,18 +11943,18 @@ snapshots:
'@floating-ui/core': 1.7.0
'@floating-ui/utils': 0.2.9
- '@floating-ui/react-dom@2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/dom': 1.7.0
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
- '@floating-ui/react@0.26.28(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@floating-ui/utils': 0.2.9
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
tabbable: 6.2.0
'@floating-ui/utils@0.2.9': {}
@@ -11998,15 +12039,15 @@ snapshots:
protobufjs: 7.5.3
yargs: 17.7.2
- '@headlessui/react@2.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@headlessui/react@2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@floating-ui/react': 0.26.28(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@react-aria/focus': 3.20.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@react-aria/interactions': 3.25.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@tanstack/react-virtual': 3.13.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
- use-sync-external-store: 1.5.0(react@19.1.0)
+ '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-aria/focus': 3.20.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-aria/interactions': 3.25.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@tanstack/react-virtual': 3.13.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ use-sync-external-store: 1.5.0(react@18.3.1)
'@humanfs/core@0.19.1': {}
@@ -12464,9 +12505,9 @@ snapshots:
transitivePeerDependencies:
- aws-crt
- '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
+ '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@18.3.1)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
dependencies:
- '@browserbasehq/stagehand': 2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67)
+ '@browserbasehq/stagehand': 2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@18.3.1)(zod@3.25.67)
'@ibm-cloud/watsonx-ai': 1.6.8
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
'@langchain/openai': 0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)
@@ -12475,9 +12516,9 @@ snapshots:
flat: 5.0.2
ibm-cloud-sdk-core: 5.4.0
js-yaml: 4.1.0
- langchain: 0.3.26(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(axios@1.10.0)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(ws@8.18.3)
- langsmith: 0.3.29(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
- openai: 4.100.0(ws@8.18.3)(zod@3.25.67)
+ langchain: 0.3.26(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(axios@1.10.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(ws@8.18.3)
+ langsmith: 0.3.29(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
+ openai: 4.104.0(ws@8.18.3)(zod@3.25.71)
uuid: 10.0.0
zod: 3.25.71
zod-to-json-schema: 3.24.6(zod@3.25.71)
@@ -12523,7 +12564,7 @@ snapshots:
- handlebars
- peggy
- '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
+ '@langchain/community@0.3.43(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.844.0)(@aws-sdk/client-bedrock-runtime@3.844.0)(@aws-sdk/client-dynamodb@3.844.0)(@aws-sdk/client-kendra@3.844.0)(@aws-sdk/credential-provider-node@3.844.0)(@browserbasehq/sdk@2.6.0)(@browserbasehq/stagehand@2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67))(@ibm-cloud/watsonx-ai@1.6.8)(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(@libsql/client@0.15.9)(@smithy/eventstream-codec@4.0.4)(@smithy/protocol-http@5.1.2)(@smithy/signature-v4@5.1.2)(@smithy/util-utf8@4.0.0)(@upstash/redis@1.35.1)(axios@1.10.0)(cohere-ai@7.17.1)(fast-xml-parser@5.2.5)(google-auth-library@10.1.0)(ibm-cloud-sdk-core@5.4.0)(ignore@7.0.4)(jsonwebtoken@9.0.2)(lodash@4.17.21)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(pg@8.16.3)(playwright@1.53.2)(redis@5.6.1)(ws@8.18.3)':
dependencies:
'@browserbasehq/stagehand': 2.4.0(deepmerge@4.3.1)(dotenv@17.0.1)(react@19.1.0)(zod@3.25.67)
'@ibm-cloud/watsonx-ai': 1.6.8
@@ -12534,9 +12575,9 @@ snapshots:
flat: 5.0.2
ibm-cloud-sdk-core: 5.4.0
js-yaml: 4.1.0
- langchain: 0.3.26(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(axios@1.10.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.71))(ws@8.18.3)
- langsmith: 0.3.29(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- openai: 4.104.0(ws@8.18.3)(zod@3.25.71)
+ langchain: 0.3.26(@langchain/aws@0.1.11(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))))(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(axios@1.10.0)(openai@4.100.0(ws@8.18.3)(zod@3.25.71))(ws@8.18.3)
+ langsmith: 0.3.29(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
+ openai: 4.100.0(ws@8.18.3)(zod@3.25.67)
uuid: 10.0.0
zod: 3.25.71
zod-to-json-schema: 3.24.6(zod@3.25.71)
@@ -12644,7 +12685,17 @@ snapshots:
'@langchain/core': 0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
react: 19.1.0
- '@langchain/langgraph-sdk@0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@19.1.0)':
+ '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@18.3.1)':
+ 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.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71))
+ react: 18.3.1
+
+ '@langchain/langgraph-sdk@0.0.78(@langchain/core@0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71)))(react@18.3.1)':
dependencies:
'@types/json-schema': 7.0.15
p-queue: 6.6.2
@@ -12652,7 +12703,7 @@ snapshots:
uuid: 9.0.1
optionalDependencies:
'@langchain/core': 0.3.56(openai@4.104.0(ws@8.18.3)(zod@3.25.71))
- react: 19.1.0
+ react: 18.3.1
'@langchain/openai@0.4.9(@langchain/core@0.3.56(openai@4.100.0(ws@8.18.3)(zod@3.25.71)))(ws@8.18.3)':
dependencies:
@@ -12738,6 +12789,33 @@ snapshots:
dependencies:
'@lukeed/csprng': 1.1.0
+ '@mastra/client-js@0.10.9(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)':
+ dependencies:
+ '@ag-ui/client': 0.0.27
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67)
+ '@mastra/core': 0.10.10(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
+ json-schema: 0.4.0
+ rxjs: 7.8.1
+ zod: 3.25.67
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+ transitivePeerDependencies:
+ - '@hono/arktype-validator'
+ - '@hono/effect-validator'
+ - '@hono/typebox-validator'
+ - '@hono/valibot-validator'
+ - '@hono/zod-validator'
+ - '@sinclair/typebox'
+ - '@valibot/to-json-schema'
+ - arktype
+ - aws-crt
+ - effect
+ - encoding
+ - openapi-types
+ - react
+ - supports-color
+ - valibot
+ - zod-openapi
+
'@mastra/client-js@0.10.9(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)':
dependencies:
'@ag-ui/client': 0.0.27
@@ -12792,6 +12870,59 @@ snapshots:
- valibot
- zod-openapi
+ '@mastra/core@0.10.10(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)':
+ dependencies:
+ '@ai-sdk/provider': 1.1.3
+ '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67)
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67)
+ '@mastra/schema-compat': 0.10.3(ai@4.3.16(react@18.3.1)(zod@3.25.67))(zod@3.25.67)
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/auto-instrumentations-node': 0.59.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))
+ '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/exporter-trace-otlp-grpc': 0.201.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/exporter-trace-otlp-http': 0.201.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-exporter-base': 0.201.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-transformer': 0.201.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/sdk-node': 0.201.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.34.0
+ '@sindresorhus/slugify': 2.2.1
+ ai: 4.3.16(react@18.3.1)(zod@3.25.67)
+ cohere-ai: 7.17.1
+ date-fns: 3.6.0
+ dotenv: 16.6.1
+ hono: 4.8.8
+ hono-openapi: 0.4.8(@sinclair/typebox@0.34.37)(hono@4.8.8)(openapi-types@12.1.3)(zod@3.25.67)
+ json-schema: 0.4.0
+ json-schema-to-zod: 2.6.1
+ pino: 9.7.0
+ pino-pretty: 13.0.0
+ radash: 12.1.1
+ sift: 17.1.3
+ xstate: 5.20.0
+ zod: 3.25.67
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+ transitivePeerDependencies:
+ - '@hono/arktype-validator'
+ - '@hono/effect-validator'
+ - '@hono/typebox-validator'
+ - '@hono/valibot-validator'
+ - '@hono/zod-validator'
+ - '@sinclair/typebox'
+ - '@valibot/to-json-schema'
+ - arktype
+ - aws-crt
+ - effect
+ - encoding
+ - openapi-types
+ - react
+ - supports-color
+ - valibot
+ - zod-openapi
+
'@mastra/core@0.10.10(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)':
dependencies:
'@ai-sdk/provider': 1.1.3
@@ -12898,6 +13029,57 @@ snapshots:
- valibot
- zod-openapi
+ '@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)':
+ dependencies:
+ '@ai-sdk/provider': 1.1.3
+ '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67)
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67)
+ '@mastra/schema-compat': 0.10.5(ai@4.3.16(react@18.3.1)(zod@3.25.67))(zod@3.25.67)
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/auto-instrumentations-node': 0.59.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))
+ '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/exporter-trace-otlp-grpc': 0.201.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/exporter-trace-otlp-http': 0.201.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-exporter-base': 0.201.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-transformer': 0.201.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/sdk-node': 0.201.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.34.0
+ '@sindresorhus/slugify': 2.2.1
+ ai: 4.3.16(react@18.3.1)(zod@3.25.67)
+ date-fns: 3.6.0
+ dotenv: 16.6.1
+ hono: 4.8.8
+ hono-openapi: 0.4.8(@sinclair/typebox@0.34.37)(hono@4.8.8)(openapi-types@12.1.3)(zod@3.25.67)
+ json-schema: 0.4.0
+ json-schema-to-zod: 2.6.1
+ pino: 9.7.0
+ pino-pretty: 13.0.0
+ radash: 12.1.1
+ sift: 17.1.3
+ xstate: 5.20.0
+ zod: 3.25.67
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+ 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.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)':
dependencies:
'@ai-sdk/provider': 1.1.3
@@ -12949,11 +13131,11 @@ snapshots:
- valibot
- zod-openapi
- '@mastra/dynamodb@0.13.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))':
+ '@mastra/dynamodb@0.13.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))':
dependencies:
'@aws-sdk/client-dynamodb': 3.844.0
'@aws-sdk/lib-dynamodb': 3.844.0(@aws-sdk/client-dynamodb@3.844.0)
- '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
+ '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
electrodb: 3.4.3(@aws-sdk/client-dynamodb@3.844.0)
transitivePeerDependencies:
- aws-crt
@@ -12966,10 +13148,10 @@ snapshots:
- bufferutil
- utf-8-validate
- '@mastra/libsql@0.11.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))':
+ '@mastra/libsql@0.11.2(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))':
dependencies:
'@libsql/client': 0.15.9
- '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
+ '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
transitivePeerDependencies:
- bufferutil
- utf-8-validate
@@ -12980,9 +13162,9 @@ snapshots:
pino: 9.7.0
pino-pretty: 13.0.0
- '@mastra/loggers@0.10.3(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))':
+ '@mastra/loggers@0.10.3(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))':
dependencies:
- '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
+ '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
pino: 9.7.0
pino-pretty: 13.0.0
@@ -13003,11 +13185,11 @@ snapshots:
- pg-native
- react
- '@mastra/memory@0.11.5(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67))(react@19.1.0)':
+ '@mastra/memory@0.11.5(@mastra/core@0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67))(react@18.3.1)':
dependencies:
- '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@19.1.0)(zod@3.25.67)
+ '@mastra/core': 0.11.1(@sinclair/typebox@0.34.37)(openapi-types@12.1.3)(react@18.3.1)(zod@3.25.67)
'@upstash/redis': 1.35.1
- ai: 4.3.16(react@19.1.0)(zod@3.25.71)
+ ai: 4.3.16(react@18.3.1)(zod@3.25.71)
async-mutex: 0.5.0
js-tiktoken: 1.0.20
json-schema: 0.4.0
@@ -13022,6 +13204,14 @@ snapshots:
- pg-native
- react
+ '@mastra/schema-compat@0.10.3(ai@4.3.16(react@18.3.1)(zod@3.25.67))(zod@3.25.67)':
+ dependencies:
+ ai: 4.3.16(react@18.3.1)(zod@3.25.67)
+ json-schema: 0.4.0
+ zod: 3.25.67
+ zod-from-json-schema: 0.0.5
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+
'@mastra/schema-compat@0.10.3(ai@4.3.16(react@19.1.0)(zod@3.25.67))(zod@3.25.67)':
dependencies:
ai: 4.3.16(react@19.1.0)(zod@3.25.67)
@@ -13038,6 +13228,14 @@ snapshots:
zod-from-json-schema: 0.0.5
zod-to-json-schema: 3.24.6(zod@3.25.71)
+ '@mastra/schema-compat@0.10.5(ai@4.3.16(react@18.3.1)(zod@3.25.67))(zod@3.25.67)':
+ dependencies:
+ ai: 4.3.16(react@18.3.1)(zod@3.25.67)
+ json-schema: 0.4.0
+ zod: 3.25.67
+ zod-from-json-schema: 0.0.5
+ zod-to-json-schema: 3.24.6(zod@3.25.67)
+
'@mastra/schema-compat@0.10.5(ai@4.3.16(react@19.1.0)(zod@3.25.67))(zod@3.25.67)':
dependencies:
ai: 4.3.16(react@19.1.0)(zod@3.25.67)
@@ -13086,22 +13284,22 @@ snapshots:
- acorn
- supports-color
- '@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0)':
+ '@mdx-js/react@3.1.0(@types/react@18.3.23)(react@18.3.1)':
dependencies:
'@types/mdx': 2.0.13
- '@types/react': 19.1.5
- react: 19.1.0
+ '@types/react': 18.3.23
+ react: 18.3.1
'@monaco-editor/loader@1.5.0':
dependencies:
state-local: 1.0.7
- '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@monaco-editor/react@4.7.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@monaco-editor/loader': 1.5.0
monaco-editor: 0.52.2
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
'@napi-rs/wasm-runtime@0.2.10':
dependencies:
@@ -13118,12 +13316,12 @@ snapshots:
dependencies:
fast-glob: 3.3.1
- '@next/mdx@15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@19.1.5)(react@19.1.0))':
+ '@next/mdx@15.3.2(@mdx-js/loader@3.1.0(acorn@8.15.0)(webpack@5.99.9))(@mdx-js/react@3.1.0(@types/react@18.3.23)(react@18.3.1))':
dependencies:
source-map: 0.7.4
optionalDependencies:
'@mdx-js/loader': 3.1.0(acorn@8.15.0)(webpack@5.99.9)
- '@mdx-js/react': 3.1.0(@types/react@19.1.5)(react@19.1.0)
+ '@mdx-js/react': 3.1.0(@types/react@18.3.23)(react@18.3.1)
'@next/swc-darwin-arm64@15.2.1':
optional: true
@@ -13886,308 +14084,308 @@ snapshots:
'@radix-ui/primitive@1.1.2': {}
- '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-context@1.1.2(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-context@1.1.2(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-direction@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-direction@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-dropdown-menu@2.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-menu': 2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-menu': 2.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-focus-guards@1.1.2(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-id@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-id@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-menu@2.1.15(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-menu@2.1.15(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-popper': 1.2.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@18.3.1)
aria-hidden: 1.2.6
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
- react-remove-scroll: 2.7.0(@types/react@19.1.5)(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-remove-scroll: 2.7.0(@types/react@18.3.23)(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
-
- '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
- dependencies:
- '@floating-ui/react-dom': 2.1.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.5)(react@19.1.0)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
+
+ '@radix-ui/react-popper@1.2.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.23)(react@18.3.1)
'@radix-ui/rect': 1.1.1
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-presence@1.1.4(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-slot@1.2.3(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-slot@1.2.3(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@radix-ui/react-tabs@1.1.12(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@radix-ui/primitive': 1.1.2
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-direction': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-id': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-presence': 1.1.4(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-roving-focus': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.23))(@types/react@18.3.23)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
- '@types/react-dom': 19.1.5(@types/react@19.1.5)
+ '@types/react': 18.3.23
+ '@types/react-dom': 18.3.7(@types/react@18.3.23)
- '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.5)(react@19.1.0)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.23)(react@18.3.1)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
'@radix-ui/rect': 1.1.1
- react: 19.1.0
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- '@radix-ui/react-use-size@1.1.1(@types/react@19.1.5)(react@19.1.0)':
+ '@radix-ui/react-use-size@1.1.1(@types/react@18.3.23)(react@18.3.1)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.5)(react@19.1.0)
- react: 19.1.0
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.23)(react@18.3.1)
+ react: 18.3.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
'@radix-ui/rect@1.1.1': {}
- '@react-aria/focus@3.20.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@react-aria/focus@3.20.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@react-aria/interactions': 3.25.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@react-aria/utils': 3.29.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
- '@react-types/shared': 3.29.1(react@19.1.0)
+ '@react-aria/interactions': 3.25.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-aria/utils': 3.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@react-types/shared': 3.29.1(react@18.3.1)
'@swc/helpers': 0.5.17
clsx: 2.1.1
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
- '@react-aria/interactions@3.25.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@react-aria/interactions@3.25.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@react-aria/ssr': 3.9.8(react@19.1.0)
- '@react-aria/utils': 3.29.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
+ '@react-aria/ssr': 3.9.8(react@18.3.1)
+ '@react-aria/utils': 3.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@react-stately/flags': 3.1.1
- '@react-types/shared': 3.29.1(react@19.1.0)
+ '@react-types/shared': 3.29.1(react@18.3.1)
'@swc/helpers': 0.5.17
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
- '@react-aria/ssr@3.9.8(react@19.1.0)':
+ '@react-aria/ssr@3.9.8(react@18.3.1)':
dependencies:
'@swc/helpers': 0.5.17
- react: 19.1.0
+ react: 18.3.1
- '@react-aria/utils@3.29.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@react-aria/utils@3.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@react-aria/ssr': 3.9.8(react@19.1.0)
+ '@react-aria/ssr': 3.9.8(react@18.3.1)
'@react-stately/flags': 3.1.1
- '@react-stately/utils': 3.10.6(react@19.1.0)
- '@react-types/shared': 3.29.1(react@19.1.0)
+ '@react-stately/utils': 3.10.6(react@18.3.1)
+ '@react-types/shared': 3.29.1(react@18.3.1)
'@swc/helpers': 0.5.17
clsx: 2.1.1
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
'@react-stately/flags@3.1.1':
dependencies:
'@swc/helpers': 0.5.17
- '@react-stately/utils@3.10.6(react@19.1.0)':
+ '@react-stately/utils@3.10.6(react@18.3.1)':
dependencies:
'@swc/helpers': 0.5.17
- react: 19.1.0
+ react: 18.3.1
- '@react-types/shared@3.29.1(react@19.1.0)':
+ '@react-types/shared@3.29.1(react@18.3.1)':
dependencies:
- react: 19.1.0
+ react: 18.3.1
'@redis/bloom@1.2.0(@redis/client@1.6.1)':
dependencies:
@@ -14899,11 +15097,11 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 4.1.7
- '@tanstack/react-virtual@3.13.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@tanstack/react-virtual@3.13.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tanstack/virtual-core': 3.13.9
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
'@tanstack/virtual-core@3.13.9': {}
@@ -15039,7 +15237,7 @@ snapshots:
prosemirror-transform: 1.10.4
prosemirror-view: 1.39.3
- '@tiptap/react@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
+ '@tiptap/react@2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@tiptap/core': 2.12.0(@tiptap/pm@2.12.0)
'@tiptap/extension-bubble-menu': 2.12.0(@tiptap/core@2.12.0(@tiptap/pm@2.12.0))(@tiptap/pm@2.12.0)
@@ -15047,9 +15245,9 @@ snapshots:
'@tiptap/pm': 2.12.0
'@types/use-sync-external-store': 0.0.6
fast-deep-equal: 3.1.3
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
- use-sync-external-store: 1.5.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ use-sync-external-store: 1.5.0(react@18.3.1)
'@tiptap/starter-kit@2.12.0':
dependencies:
@@ -15245,23 +15443,15 @@ snapshots:
dependencies:
'@types/react': 18.3.23
- '@types/react-dom@19.1.5(@types/react@19.1.5)':
- dependencies:
- '@types/react': 19.1.5
-
'@types/react-syntax-highlighter@15.5.13':
dependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
'@types/react@18.3.23':
dependencies:
'@types/prop-types': 15.7.14
csstype: 3.1.3
- '@types/react@19.1.5':
- dependencies:
- csstype: 3.1.3
-
'@types/retry@0.12.0': {}
'@types/semver@7.7.0': {}
@@ -15657,6 +15847,30 @@ snapshots:
dependencies:
humanize-ms: 1.2.1
+ ai@4.3.16(react@18.3.1)(zod@3.25.67):
+ dependencies:
+ '@ai-sdk/provider': 1.1.3
+ '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67)
+ '@ai-sdk/react': 1.2.12(react@18.3.1)(zod@3.25.67)
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67)
+ '@opentelemetry/api': 1.9.0
+ jsondiffpatch: 0.6.0
+ zod: 3.25.67
+ optionalDependencies:
+ react: 18.3.1
+
+ ai@4.3.16(react@18.3.1)(zod@3.25.71):
+ dependencies:
+ '@ai-sdk/provider': 1.1.3
+ '@ai-sdk/provider-utils': 2.2.8(zod@3.25.71)
+ '@ai-sdk/react': 1.2.12(react@18.3.1)(zod@3.25.71)
+ '@ai-sdk/ui-utils': 1.2.11(zod@3.25.71)
+ '@opentelemetry/api': 1.9.0
+ jsondiffpatch: 0.6.0
+ zod: 3.25.71
+ optionalDependencies:
+ react: 18.3.1
+
ai@4.3.16(react@19.1.0)(zod@3.25.17):
dependencies:
'@ai-sdk/provider': 1.1.3
@@ -18875,9 +19089,9 @@ snapshots:
dependencies:
yallist: 4.0.0
- lucide-react@0.477.0(react@19.1.0):
+ lucide-react@0.477.0(react@18.3.1):
dependencies:
- react: 19.1.0
+ react: 18.3.1
magic-string@0.30.17:
dependencies:
@@ -19623,10 +19837,10 @@ snapshots:
neo-async@2.6.2:
optional: true
- next-themes@0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
+ next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
next@15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
@@ -19655,33 +19869,6 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
- next@15.2.1(@opentelemetry/api@1.9.0)(@playwright/test@1.53.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.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.30001726
- postcss: 8.4.31
- react: 19.1.0
- react-dom: 19.1.0(react@19.1.0)
- styled-jsx: 5.1.6(react@19.1.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.53.2
- sharp: 0.33.5
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
-
node-domexception@1.0.0: {}
node-fetch-native@1.6.6: {}
@@ -20385,25 +20572,20 @@ snapshots:
react: 18.3.1
scheduler: 0.23.2
- react-dom@19.1.0(react@19.1.0):
- dependencies:
- react: 19.1.0
- scheduler: 0.26.0
-
react-is@16.13.1: {}
react-is@18.3.1: {}
- react-markdown@10.1.0(@types/react@19.1.5)(react@19.1.0):
+ react-markdown@10.1.0(@types/react@18.3.23)(react@18.3.1):
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
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.1.0
+ react: 18.3.1
remark-parse: 11.0.0
remark-rehype: 11.1.2
unified: 11.0.5
@@ -20412,17 +20594,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- react-markdown@8.0.7(@types/react@19.1.5)(react@19.1.0):
+ react-markdown@8.0.7(@types/react@18.3.23)(react@18.3.1):
dependencies:
'@types/hast': 2.3.10
'@types/prop-types': 15.7.14
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
'@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.1.0
+ react: 18.3.1
react-is: 18.3.1
remark-parse: 10.0.2
remark-rehype: 10.1.0
@@ -20434,41 +20616,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- react-remove-scroll-bar@2.3.8(@types/react@19.1.5)(react@19.1.0):
+ react-remove-scroll-bar@2.3.8(@types/react@18.3.23)(react@18.3.1):
dependencies:
- react: 19.1.0
- react-style-singleton: 2.2.3(@types/react@19.1.5)(react@19.1.0)
+ react: 18.3.1
+ react-style-singleton: 2.2.3(@types/react@18.3.23)(react@18.3.1)
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- react-remove-scroll@2.7.0(@types/react@19.1.5)(react@19.1.0):
+ react-remove-scroll@2.7.0(@types/react@18.3.23)(react@18.3.1):
dependencies:
- react: 19.1.0
- react-remove-scroll-bar: 2.3.8(@types/react@19.1.5)(react@19.1.0)
- react-style-singleton: 2.2.3(@types/react@19.1.5)(react@19.1.0)
+ react: 18.3.1
+ react-remove-scroll-bar: 2.3.8(@types/react@18.3.23)(react@18.3.1)
+ react-style-singleton: 2.2.3(@types/react@18.3.23)(react@18.3.1)
tslib: 2.8.1
- use-callback-ref: 1.3.3(@types/react@19.1.5)(react@19.1.0)
- use-sidecar: 1.1.3(@types/react@19.1.5)(react@19.1.0)
+ use-callback-ref: 1.3.3(@types/react@18.3.23)(react@18.3.1)
+ use-sidecar: 1.1.3(@types/react@18.3.23)(react@18.3.1)
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- react-style-singleton@2.2.3(@types/react@19.1.5)(react@19.1.0):
+ react-style-singleton@2.2.3(@types/react@18.3.23)(react@18.3.1):
dependencies:
get-nonce: 1.0.1
- react: 19.1.0
+ react: 18.3.1
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- react-syntax-highlighter@15.6.1(react@19.1.0):
+ react-syntax-highlighter@15.6.1(react@18.3.1):
dependencies:
'@babel/runtime': 7.27.1
highlight.js: 10.7.3
highlightjs-vue: 1.0.0
lowlight: 1.20.0
prismjs: 1.30.0
- react: 19.1.0
+ react: 18.3.1
refractor: 3.6.0
react@18.3.1:
@@ -20794,8 +20976,6 @@ snapshots:
dependencies:
loose-envify: 1.4.0
- scheduler@0.26.0: {}
-
schema-utils@4.3.2:
dependencies:
'@types/json-schema': 7.0.15
@@ -21117,11 +21297,6 @@ snapshots:
client-only: 0.0.1
react: 18.3.1
- styled-jsx@5.1.6(react@19.1.0):
- dependencies:
- client-only: 0.0.1
- react: 19.1.0
-
sucrase@3.35.0:
dependencies:
'@jridgewell/gen-mapping': 0.3.12
@@ -21142,6 +21317,12 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
+ swr@2.3.3(react@18.3.1):
+ dependencies:
+ dequal: 2.0.3
+ react: 18.3.1
+ use-sync-external-store: 1.5.0(react@18.3.1)
+
swr@2.3.3(react@19.1.0):
dependencies:
dequal: 2.0.3
@@ -21639,26 +21820,30 @@ snapshots:
urlpattern-polyfill@10.1.0: {}
- urql@4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@19.1.0):
+ urql@4.2.2(@urql/core@5.1.1(graphql@16.11.0))(react@18.3.1):
dependencies:
'@urql/core': 5.1.1(graphql@16.11.0)
- react: 19.1.0
+ react: 18.3.1
wonka: 6.3.5
- use-callback-ref@1.3.3(@types/react@19.1.5)(react@19.1.0):
+ use-callback-ref@1.3.3(@types/react@18.3.23)(react@18.3.1):
dependencies:
- react: 19.1.0
+ react: 18.3.1
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
- use-sidecar@1.1.3(@types/react@19.1.5)(react@19.1.0):
+ use-sidecar@1.1.3(@types/react@18.3.23)(react@18.3.1):
dependencies:
detect-node-es: 1.1.0
- react: 19.1.0
+ react: 18.3.1
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.5
+ '@types/react': 18.3.23
+
+ use-sync-external-store@1.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
use-sync-external-store@1.5.0(react@19.1.0):
dependencies:
From 73255b2715f27262b91c2256a3339022ee06c40a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Sun, 3 Aug 2025 08:31:32 +0200
Subject: [PATCH 11/14] Fix deployment issues
---
.../apps/client-whatsapp-example/package.json | 1 -
.../src/app/api/send-message/route.ts | 2 +-
.../src/app/api/webhook/route.ts | 2 +-
.../src/lib/whatsapp-agent.ts | 120 ++++++++++++++++++
4 files changed, 122 insertions(+), 3 deletions(-)
create mode 100644 typescript-sdk/apps/client-whatsapp-example/src/lib/whatsapp-agent.ts
diff --git a/typescript-sdk/apps/client-whatsapp-example/package.json b/typescript-sdk/apps/client-whatsapp-example/package.json
index 4f06aef50..8f8ba8eb9 100644
--- a/typescript-sdk/apps/client-whatsapp-example/package.json
+++ b/typescript-sdk/apps/client-whatsapp-example/package.json
@@ -9,7 +9,6 @@
"lint": "next lint"
},
"dependencies": {
- "@ag-ui/community-whatsapp": "workspace:../../integrations/community-whatsapp",
"next": "15.2.1",
"react": "^18",
"react-dom": "^18"
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
index b5d1456c8..49f90ee64 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
-import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+import { WhatsAppAgent } from "@/lib/whatsapp-agent";
import { getConfig } from "@/lib/config";
export async function POST(request: NextRequest) {
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
index 830318ecc..9d9e5b29b 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/webhook/route.ts
@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
-import { WhatsAppAgent } from "@ag-ui/community-whatsapp";
+import { WhatsAppAgent } from "@/lib/whatsapp-agent";
import { getConfig } from "@/lib/config";
export async function GET(request: NextRequest) {
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/lib/whatsapp-agent.ts b/typescript-sdk/apps/client-whatsapp-example/src/lib/whatsapp-agent.ts
new file mode 100644
index 000000000..f4a57da42
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/src/lib/whatsapp-agent.ts
@@ -0,0 +1,120 @@
+import crypto from 'crypto';
+
+export interface WhatsAppAgentConfig {
+ phoneNumberId: string;
+ accessToken: string;
+ webhookSecret: string;
+ apiVersion?: string;
+ baseUrl?: string;
+}
+
+export interface WhatsAppSendMessageResponse {
+ messaging_product: string;
+ contacts: Array<{
+ input: string;
+ wa_id: string;
+ }>;
+ messages: Array<{
+ id: string;
+ }>;
+}
+
+export class WhatsAppAgent {
+ public phoneNumberId: string;
+ private accessToken: string;
+ private webhookSecret: string;
+ private apiVersion: string;
+ private baseUrl: string;
+
+ constructor(config: WhatsAppAgentConfig) {
+ this.phoneNumberId = config.phoneNumberId;
+ this.accessToken = config.accessToken;
+ this.webhookSecret = config.webhookSecret;
+ this.apiVersion = config.apiVersion || "v23.0";
+ this.baseUrl = config.baseUrl || `https://graph.facebook.com/${this.apiVersion}`;
+ }
+
+ /**
+ * Verify webhook signature from WhatsApp
+ */
+ verifyWebhookSignature(body: string, signature: string): boolean {
+ const expectedSignature = `sha256=${crypto
+ .createHmac('sha256', this.webhookSecret)
+ .update(body)
+ .digest('hex')}`;
+
+ return crypto.timingSafeEqual(
+ Buffer.from(signature),
+ Buffer.from(expectedSignature)
+ );
+ }
+
+ /**
+ * Process incoming webhook from WhatsApp
+ */
+ processWebhook(body: any): any[] {
+ const messages: any[] = [];
+
+ if (body.entry && body.entry.length > 0) {
+ for (const entry of body.entry) {
+ if (entry.changes && entry.changes.length > 0) {
+ for (const change of entry.changes) {
+ if (change.value && change.value.messages) {
+ messages.push(...change.value.messages);
+ }
+ }
+ }
+ }
+ }
+
+ return messages;
+ }
+
+ /**
+ * Send a text message to a phone number
+ */
+ async sendMessageToNumber(phoneNumber: string, content: string): Promise {
+ const url = `${this.baseUrl}/${this.phoneNumberId}/messages`;
+
+ const requestBody = {
+ messaging_product: "whatsapp",
+ recipient_type: "individual",
+ to: phoneNumber,
+ type: "text",
+ text: {
+ body: content,
+ },
+ };
+
+ console.log("=== WHATSAPP API REQUEST DEBUG ===");
+ console.log("URL:", url);
+ console.log("Method: POST");
+ console.log("Headers:", {
+ "Authorization": `Bearer ${this.accessToken.substring(0, 20)}...`,
+ "Content-Type": "application/json",
+ });
+ console.log("Body:", JSON.stringify(requestBody, null, 2));
+ console.log("==================================");
+
+ const response = await fetch(url, {
+ method: "POST",
+ headers: {
+ "Authorization": `Bearer ${this.accessToken}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(requestBody),
+ });
+
+ if (!response.ok) {
+ const error = await response.json();
+ console.log("=== WHATSAPP API ERROR DEBUG ===");
+ console.log("Status:", response.status);
+ console.log("Status Text:", response.statusText);
+ console.log("Error Response:", JSON.stringify(error, null, 2));
+ console.log("==================================");
+ throw new Error(`WhatsApp API error: ${error.error?.message || response.statusText}`);
+ }
+
+ return response.json();
+ }
+}
\ No newline at end of file
From 7c6b17d7e022e49e65765ea13a5931a452d3f648 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Sun, 3 Aug 2025 08:40:39 +0200
Subject: [PATCH 12/14] Switch vercel deployment to feat branch
---
typescript-sdk/apps/client-whatsapp-example/.nvmrc | 1 +
typescript-sdk/apps/client-whatsapp-example/package.json | 3 +++
typescript-sdk/apps/client-whatsapp-example/vercel.json | 7 +++++++
3 files changed, 11 insertions(+)
create mode 100644 typescript-sdk/apps/client-whatsapp-example/.nvmrc
diff --git a/typescript-sdk/apps/client-whatsapp-example/.nvmrc b/typescript-sdk/apps/client-whatsapp-example/.nvmrc
new file mode 100644
index 000000000..622e3630e
--- /dev/null
+++ b/typescript-sdk/apps/client-whatsapp-example/.nvmrc
@@ -0,0 +1 @@
+18
\ No newline at end of file
diff --git a/typescript-sdk/apps/client-whatsapp-example/package.json b/typescript-sdk/apps/client-whatsapp-example/package.json
index 8f8ba8eb9..e571d280a 100644
--- a/typescript-sdk/apps/client-whatsapp-example/package.json
+++ b/typescript-sdk/apps/client-whatsapp-example/package.json
@@ -2,6 +2,9 @@
"name": "@ag-ui/client-whatsapp-example",
"version": "0.1.0",
"private": true,
+ "engines": {
+ "node": ">=18.0.0"
+ },
"scripts": {
"dev": "next dev",
"build": "next build",
diff --git a/typescript-sdk/apps/client-whatsapp-example/vercel.json b/typescript-sdk/apps/client-whatsapp-example/vercel.json
index e44f8cac2..f5734ba46 100644
--- a/typescript-sdk/apps/client-whatsapp-example/vercel.json
+++ b/typescript-sdk/apps/client-whatsapp-example/vercel.json
@@ -15,5 +15,12 @@
"WHATSAPP_ACCESS_TOKEN": "@whatsapp_access_token",
"WHATSAPP_WEBHOOK_SECRET": "@whatsapp_webhook_secret",
"WHATSAPP_VERIFY_TOKEN": "@whatsapp_verify_token"
+ },
+ "git": {
+ "deploymentEnabled": {
+ "main": true,
+ "develop": true,
+ "feature/*": false
+ }
}
}
\ No newline at end of file
From 855e92e277d0ac16952d5f28af4267838b10e6f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Sun, 3 Aug 2025 08:45:04 +0200
Subject: [PATCH 13/14] Vercel vars
---
typescript-sdk/apps/client-whatsapp-example/vercel.json | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/typescript-sdk/apps/client-whatsapp-example/vercel.json b/typescript-sdk/apps/client-whatsapp-example/vercel.json
index f5734ba46..b86f68aec 100644
--- a/typescript-sdk/apps/client-whatsapp-example/vercel.json
+++ b/typescript-sdk/apps/client-whatsapp-example/vercel.json
@@ -10,17 +10,11 @@
"maxDuration": 30
}
},
- "env": {
- "WHATSAPP_PHONE_NUMBER_ID": "@whatsapp_phone_number_id",
- "WHATSAPP_ACCESS_TOKEN": "@whatsapp_access_token",
- "WHATSAPP_WEBHOOK_SECRET": "@whatsapp_webhook_secret",
- "WHATSAPP_VERIFY_TOKEN": "@whatsapp_verify_token"
- },
"git": {
"deploymentEnabled": {
"main": true,
"develop": true,
- "feature/*": false
+ "feat/*": true
}
}
}
\ No newline at end of file
From b27d48c53f19a061ae60c20553a7610ad7b91100 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9ctor=20Valverde?=
Date: Sun, 3 Aug 2025 09:18:54 +0200
Subject: [PATCH 14/14] Add error messages to the frontend
---
.../src/app/api/send-message/route.ts | 27 ++++++--
.../src/app/globals.css | 18 +++++
.../client-whatsapp-example/src/app/page.tsx | 65 ++++++++++++++++---
3 files changed, 98 insertions(+), 12 deletions(-)
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
index 49f90ee64..cad19256c 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/api/send-message/route.ts
@@ -11,7 +11,10 @@ export async function POST(request: NextRequest) {
if (!config) {
console.log("No configuration found, returning error");
return NextResponse.json(
- { error: "WhatsApp configuration not found. Please configure your settings first." },
+ {
+ error: "WhatsApp configuration not found. Please configure your settings first.",
+ details: "Missing or invalid configuration"
+ },
{ status: 500 }
);
}
@@ -33,7 +36,10 @@ export async function POST(request: NextRequest) {
if (!phoneNumber || !message) {
return NextResponse.json(
- { error: "phoneNumber and message are required" },
+ {
+ error: "phoneNumber and message are required",
+ details: "Missing required fields"
+ },
{ status: 400 }
);
}
@@ -55,10 +61,19 @@ export async function POST(request: NextRequest) {
stack: sendError instanceof Error ? sendError.stack : undefined
});
+ // Enhanced error response with detailed information
+ const errorMessage = sendError instanceof Error ? sendError.message : 'Unknown error';
+
return NextResponse.json(
{
error: "Failed to send WhatsApp message",
- details: sendError instanceof Error ? sendError.message : 'Unknown error'
+ details: errorMessage,
+ status: 500,
+ response: {
+ error: errorMessage,
+ type: "WhatsApp API Error",
+ timestamp: new Date().toISOString()
+ }
},
{ status: 500 }
);
@@ -66,7 +81,11 @@ export async function POST(request: NextRequest) {
} catch (error) {
console.error("Send message error:", error);
return NextResponse.json(
- { error: "Failed to send message" },
+ {
+ error: "Failed to send message",
+ details: "Unexpected server error",
+ status: 500
+ },
{ status: 500 }
);
}
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css b/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css
index 80dc0f894..f89e035ea 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/globals.css
@@ -18,4 +18,22 @@ body {
background: var(--background);
color: var(--foreground);
font-family: Arial, Helvetica, sans-serif;
+ overflow-x: hidden;
+}
+
+/* Ensure proper text wrapping and prevent overflow */
+pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;
+ overflow-wrap: break-word;
+}
+
+.error-container {
+ max-width: 100%;
+ overflow-x: auto;
+}
+
+.error-text {
+ word-break: break-word;
+ overflow-wrap: break-word;
}
diff --git a/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx b/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
index d41c5a197..cddf23d5f 100644
--- a/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
+++ b/typescript-sdk/apps/client-whatsapp-example/src/app/page.tsx
@@ -34,12 +34,19 @@ interface DebugResult {
response?: Record;
}
+interface ErrorDetails {
+ message: string;
+ details?: string;
+ status?: number;
+ response?: Record;
+}
+
export default function Home() {
const [phoneNumber, setPhoneNumber] = useState("");
const [message, setMessage] = useState("");
const [isLoading, setIsLoading] = useState(false);
const [result, setResult] = useState(null);
- const [error, setError] = useState(null);
+ const [error, setError] = useState(null);
const [configStatus, setConfigStatus] = useState(null);
const [debugResult, setDebugResult] = useState(null);
const [isDebugLoading, setIsDebugLoading] = useState(false);
@@ -78,12 +85,23 @@ export default function Home() {
const data = await response.json();
if (!response.ok) {
- throw new Error(data.error || "Failed to send message");
+ // Enhanced error handling with detailed information
+ const errorDetails: ErrorDetails = {
+ message: data.error || "Failed to send message",
+ status: response.status,
+ details: data.details || undefined,
+ response: data.response || undefined
+ };
+ setError(errorDetails);
+ return;
}
setResult(data);
} catch (err) {
- setError(err instanceof Error ? err.message : "An error occurred");
+ setError({
+ message: err instanceof Error ? err.message : "An error occurred",
+ details: "Network or unexpected error"
+ });
} finally {
setIsLoading(false);
}
@@ -127,7 +145,7 @@ export default function Home() {
{/* Main Content */}
-
+
{/* Configuration Status */}
@@ -302,11 +320,42 @@ export default function Home() {
)}
- {/* Results */}
+ {/* Enhanced Error Display */}
{error && (
-
-
Error
-
{error}
+
+
+
+
+
+ WhatsApp API Error
+
+
+
{error.message}
+ {error.status && (
+
Status Code: {error.status}
+ )}
+ {error.details && (
+
{error.details}
+ )}
+ {error.response && (
+
+
+ View Detailed Error Response
+
+
+
+ {JSON.stringify(error.response, null, 2)}
+
+
+
+ )}
+
+
+
)}