diff --git a/typescript/.changeset/red-goats-camp.md b/typescript/.changeset/red-goats-camp.md new file mode 100644 index 000000000..d8892a34b --- /dev/null +++ b/typescript/.changeset/red-goats-camp.md @@ -0,0 +1,5 @@ +--- +"@coinbase/agentkit": patch +--- + +Updated xmtp chatbot to use CDP v2 wallets and new xmtp/agent-sdk diff --git a/typescript/examples/langchain-xmtp-chatbot/.env-local b/typescript/examples/langchain-xmtp-chatbot/.env-local index 015260b1b..3e864464b 100644 --- a/typescript/examples/langchain-xmtp-chatbot/.env-local +++ b/typescript/examples/langchain-xmtp-chatbot/.env-local @@ -1,6 +1,10 @@ OPENAI_API_KEY= CDP_API_KEY_ID= CDP_API_KEY_SECRET= -WALLET_KEY= -ENCRYPTION_KEY= +CDP_WALLET_SECRET= + +XMTP_WALLET_KEY= +XMTP_DB_ENCRYPTION_KEY= XMTP_ENV=dev + +NETWORK_ID="base-sepolia" diff --git a/typescript/examples/langchain-xmtp-chatbot/README.md b/typescript/examples/langchain-xmtp-chatbot/README.md index 70455e0c6..528c0a126 100644 --- a/typescript/examples/langchain-xmtp-chatbot/README.md +++ b/typescript/examples/langchain-xmtp-chatbot/README.md @@ -6,14 +6,28 @@ This example demonstrates an agent setup on XMTP Network with access to the full - "Transfer a portion of your ETH to a random address" - "What is the price of BTC?" -- "Deploy an NFT that will go super viral!" -- "Deploy an ERC-20 token with total supply 1 billion" +- "Swap 1 USDC to ETH" (base-mainnet only) +- "List x402 services" + +## Special Commands + +### `/fund` Command - Send ETH to the agent + +Send ETH from your wallet to the agent's wallet using the `/fund` command. +Review transaction details, click submit and then approve transaction in your connected browser wallet. + +**Usage:** +- `/fund ` - Send ETH to the agent + +**Example:** +- `/fund 0.01` - Send 0.01 ETH to the agent + ## Prerequisites ### Checking Node Version -Before using the example, ensure that you have the correct version of Node.js installed. The example requires Node.js 18 or higher. You can check your Node version by running: +Before using the example, ensure that you have the correct version of Node.js installed. The example requires Node.js 20 or higher. You can check your Node version by running: ```bash node --version @@ -32,34 +46,48 @@ This will automatically install and use the latest version of Node. You'll need the following API keys: - [CDP API Key](https://portal.cdp.coinbase.com/access/api) - [OpenAI API Key](https://platform.openai.com/docs/quickstart#create-and-export-an-api-key) +- [Generate Wallet Secret](https://portal.cdp.coinbase.com/products/wallet-api) Once you have them, rename the `.env-local` file to `.env` and make sure you set the API keys to their corresponding environment variables: -- "CDP_API_KEY_ID" -- "CDP_API_KEY_SECRET" -- "OPENAI_API_KEY" -- "XMTP_ENV" # defaults to "dev" -- "WALLET_KEY" # Optional, use `npm run gen:keys` to generate a random wallet key -- "ENCRYPTION_KEY" # Optional, use `npm run gen:keys` to generate a random encryption key +**Required:** +- `OPENAI_API_KEY` - Your OpenAI API key +- `CDP_API_KEY_ID` - Your CDP API key ID +- `CDP_API_KEY_SECRET` - Your CDP API key secret +- `CDP_WALLET_SECRET` - Your CDP wallet secret (for deterministic wallet generation) +- `XMTP_WALLET_KEY` - Private key for XMTP agent (use `pnpm run gen:keys` to generate) +- `XMTP_DB_ENCRYPTION_KEY` - Database encryption key for XMTP (use `pnpm run gen:keys` to generate) + +**Optional:** +- `NETWORK_ID` - Network to use (defaults to "base-sepolia") +- `XMTP_ENV` - XMTP environment: "local", "dev", or "production" (defaults to "dev") +- `RPC_URL` - Custom RPC URL for blockchain interactions + +You can generate XMTP keys by running: +```bash +pnpm run gen:keys +``` ## Running the example From the root directory, run: ```bash -npm install -npm run build +pnpm install +pnpm build ``` -This will install the dependencies and build the packages locally. The chatbot example uses the local `@coinbase/agentkit-langchain`, `@coinbase/agentkit`, and `@xmtp/node-sdk` packages. If you make changes to the packages, you can run `npm run build` from root again to rebuild the packages, and your changes will be reflected in the chatbot example. +This will install the dependencies and build the packages locally. The chatbot example uses the local `@coinbase/agentkit-langchain` and `@coinbase/agentkit` packages. If you make changes to the packages, you can run `pnpm build` from root again to rebuild the packages, and your changes will be reflected in the chatbot example. Now from the `typescript/examples/langchain-xmtp-chatbot` directory, run: ```bash -npm start +pnpm start ``` -Select "1. chat mode" and start telling your Agent to do things onchain! +The agent will start and listen for messages on the XMTP network. You can interact with it by: +1. Visiting the URL displayed in the console (e.g., `http://xmtp.chat/dm/0x...?env=dev`) +2. Sending messages to the agent's address via any XMTP client ## License diff --git a/typescript/examples/langchain-xmtp-chatbot/chatbot.ts b/typescript/examples/langchain-xmtp-chatbot/chatbot.ts index 3789b4b86..c2d248da0 100644 --- a/typescript/examples/langchain-xmtp-chatbot/chatbot.ts +++ b/typescript/examples/langchain-xmtp-chatbot/chatbot.ts @@ -2,29 +2,33 @@ import * as dotenv from "dotenv"; import * as fs from "fs"; import { AgentKit, - LegacyCdpWalletProvider, + CdpEvmWalletProvider, walletActionProvider, erc20ActionProvider, - legacyCdpApiActionProvider, - legacyCdpWalletActionProvider, + cdpApiActionProvider, + cdpEvmWalletActionProvider, + pythActionProvider, + wethActionProvider, + x402ActionProvider, + NETWORK_ID_TO_VIEM_CHAIN, } from "@coinbase/agentkit"; import { getLangChainTools } from "@coinbase/agentkit-langchain"; import { HumanMessage } from "@langchain/core/messages"; import { MemorySaver } from "@langchain/langgraph"; import { createReactAgent } from "@langchain/langgraph/prebuilt"; import { ChatOpenAI } from "@langchain/openai"; +import { Agent as XMTPAgent, type MessageContext, type AgentMiddleware } from "@xmtp/agent-sdk"; import { - Client, - IdentifierKind, - Signer, - // type Conversation, - type DecodedMessage, - type XmtpEnv, -} from "@xmtp/node-sdk"; -import { fromString } from "uint8arrays"; -import { createWalletClient, http, toBytes } from "viem"; -import { privateKeyToAccount } from "viem/accounts"; -import { sepolia } from "viem/chains"; + TransactionReferenceCodec, + ContentTypeTransactionReference, + type TransactionReference, +} from "@xmtp/content-type-transaction-reference"; +import { + ContentTypeWalletSendCalls, + WalletSendCallsCodec, + type WalletSendCallsParams, +} from "@xmtp/content-type-wallet-send-calls"; +import { parseEther, createPublicClient, http, formatEther, Chain } from "viem"; // Initialize environment variables dotenv.config(); @@ -36,12 +40,26 @@ const STORAGE_DIR = ".data/wallets"; const memoryStore: Record = {}; const agentStore: Record = {}; +// Initialize public client +const networkId = process.env.NETWORK_ID || "base-sepolia"; +const chain = NETWORK_ID_TO_VIEM_CHAIN[networkId as keyof typeof NETWORK_ID_TO_VIEM_CHAIN]; +const chainId = `0x${chain.id.toString(16)}` as `0x${string}`; +const publicClient = createPublicClient({ + chain: chain as Chain, + transport: process.env.RPC_URL ? http(process.env.RPC_URL) : http(), +}); + interface AgentConfig { configurable: { thread_id: string; }; } +interface WalletData { + name?: string; + address: `0x${string}`; +} + type Agent = ReturnType; /** @@ -59,10 +77,11 @@ function ensureLocalStorage() { * @param userId - The unique identifier for the user * @param walletData - The wallet data to be saved */ -async function saveWalletData(userId: string, walletData: string) { +function saveWalletData(userId: string, walletData: WalletData): void { const localFilePath = `${STORAGE_DIR}/${userId}.json`; try { - fs.writeFileSync(localFilePath, walletData); + fs.writeFileSync(localFilePath, JSON.stringify(walletData, null, 2)); + console.log(`Wallet data saved for user ${userId}`); } catch (error) { console.error(`Failed to save wallet data to file: ${error}`); } @@ -72,13 +91,13 @@ async function saveWalletData(userId: string, walletData: string) { * Get wallet data from storage. * * @param userId - The unique identifier for the user - * @returns The wallet data as a string, or null if not found + * @returns The wallet data, or null if not found */ -async function getWalletData(userId: string): Promise { +function getWalletData(userId: string): WalletData | null { const localFilePath = `${STORAGE_DIR}/${userId}.json`; try { if (fs.existsSync(localFilePath)) { - return fs.readFileSync(localFilePath, "utf8"); + return JSON.parse(fs.readFileSync(localFilePath, "utf8")); } } catch (error) { console.warn(`Could not read wallet data from file: ${error}`); @@ -86,77 +105,6 @@ async function getWalletData(userId: string): Promise { return null; } -/** - * Create a viem signer from a wallet private key. - * - * @param walletKey - The private key of the wallet - * @returns A Signer instance for XMTP - */ -const createSigner = (walletKey: string): Signer => { - const account = privateKeyToAccount(walletKey as `0x${string}`); - const wallet = createWalletClient({ - account, - chain: sepolia, - transport: http(), - }); - - return { - type: "EOA" as const, - getIdentifier: () => ({ - identifierKind: IdentifierKind.Ethereum, - identifier: account.address.toLowerCase(), - }), - signMessage: async (message: string) => { - const signature = await wallet.signMessage({ - message, - account, - }); - return toBytes(signature); - }, - }; -}; - -/** - * Convert hex encryption key to appropriate format for XMTP. - * - * @param key - The hex string to convert - * @returns The key as a Uint8Array - */ -function getEncryptionKeyFromHex(key: string): Uint8Array { - const hexString = key.startsWith("0x") ? key.slice(2) : key; - return fromString(hexString, "hex"); -} - -/** - * Initialize the XMTP client. - * - * @returns An initialized XMTP Client instance - */ -async function initializeXmtpClient() { - const { WALLET_KEY, ENCRYPTION_KEY, XMTP_ENV } = process.env; - - if (!WALLET_KEY || !ENCRYPTION_KEY || !XMTP_ENV) { - throw new Error("Some environment variables are not set. Please check your .env file."); - } - - const signer = createSigner(WALLET_KEY); - const encryptionKey = getEncryptionKeyFromHex(ENCRYPTION_KEY); - const env: XmtpEnv = XMTP_ENV as XmtpEnv; - - const client = await Client.create(signer, encryptionKey, { env }); - - await client.conversations.sync(); - - const identifier = await signer.getIdentifier(); - const address = identifier.identifier; - - console.log( - `Agent initialized on ${env} network\nSend a message on http://xmtp.chat/dm/${address}?env=${env}`, - ); - - return client; -} - /** * Initialize the agent with CDP Agentkit. * @@ -177,31 +125,33 @@ async function initializeAgent(userId: string): Promise<{ agent: Agent; config: model: "gpt-4o-mini", }); - const storedWalletData = await getWalletData(userId); + const storedWalletData = getWalletData(userId); console.log( `Creating new agent for user: ${userId}, wallet data: ${storedWalletData ? "Found" : "Not found"}`, ); - const config = { + // Configure CDP Wallet Provider with CDP v2 + const walletProvider = await CdpEvmWalletProvider.configureWithWallet({ apiKeyId: process.env.CDP_API_KEY_ID, - apiKeySecret: process.env.CDP_API_KEY_SECRET?.replace(/\\n/g, "\n"), - cdpWalletData: storedWalletData || undefined, + apiKeySecret: process.env.CDP_API_KEY_SECRET, + walletSecret: process.env.CDP_WALLET_SECRET, + idempotencyKey: process.env.IDEMPOTENCY_KEY, + address: storedWalletData?.address, // Retrieve existing wallet if available networkId: process.env.NETWORK_ID || "base-sepolia", - }; - - const walletProvider = await LegacyCdpWalletProvider.configureWithWallet(config); + rpcUrl: process.env.RPC_URL, + }); const agentkit = await AgentKit.from({ walletProvider, actionProviders: [ walletActionProvider(), erc20ActionProvider(), - legacyCdpApiActionProvider({ - apiKeyId: process.env.CDP_API_KEY_ID, - apiKeySecret: process.env.CDP_API_KEY_SECRET?.replace(/\\n/g, "\n"), - }), - legacyCdpWalletActionProvider(), + wethActionProvider(), + cdpApiActionProvider(), + cdpEvmWalletActionProvider(), + pythActionProvider(), + x402ActionProvider(), ], }); @@ -216,39 +166,29 @@ async function initializeAgent(userId: string): Promise<{ agent: Agent; config: configurable: { thread_id: userId }, }; + const canUseFaucet = walletProvider.getNetwork().networkId == "base-sepolia"; + const faucetMessage = `If you ever need funds, you can request them from the faucet.`; + const cantUseFaucetMessage = `If you need funds, you can request funds from the user. Advise the user to use the "/fund " command to send ETH to your wallet.`; const agent = createReactAgent({ llm, tools, checkpointSaver: memoryStore[userId], messageModifier: ` - You are a DeFi Payment Agent that assists users with sending payments and managing their crypto assets. - You can interact with the blockchain using Coinbase Developer Platform AgentKit. - - When a user asks you to make a payment or check their balance: - 1. Always check the wallet details first to see what network you're on - 2. If on base-sepolia testnet, you can request funds from the faucet if needed - 3. For mainnet operations, provide wallet details and request funds from the user - - Your default network is Base Sepolia testnet. - Your main and only token for transactions is USDC. Token address is 0x036CbD53842c5426634e7929541eC2318f3dCF7e. USDC is gasless on Base. - - You can only perform payment and wallet-related tasks. For other requests, politely explain that you're - specialized in processing payments and can't assist with other tasks. - - If you encounter an error: - - For 5XX errors: Ask the user to try again later - - For other errors: Provide clear troubleshooting advice and offer to retry - - Be concise, helpful, and security-focused in all your interactions. + You are a helpful agent that can interact onchain using the Coinbase Developer Platform AgentKit. You are + empowered to interact onchain using your tools. + Before executing your first action, get the wallet details to see your address and what network you're on. + ${canUseFaucet ? faucetMessage : cantUseFaucetMessage}. + If someone asks you to do something you can't do with your currently available tools, you must say so, and + encourage them to implement it themselves using the CDP SDK + Agentkit, recommend they go to + docs.cdp.coinbase.com for more information. Be concise and helpful with your responses. Refrain from + restating your tools' descriptions unless it is explicitly requested. `, }); agentStore[userId] = agent; const exportedWallet = await walletProvider.exportWallet(); - const walletDataJson = JSON.stringify(exportedWallet); - await saveWalletData(userId, walletDataJson); - console.log(`Wallet data saved for user ${userId}`); + saveWalletData(userId, exportedWallet); return { agent, config: agentConfig }; } catch (error) { @@ -287,59 +227,51 @@ async function processMessage(agent: Agent, config: AgentConfig, message: string /** * Handle incoming XMTP messages. * - * @param message - The decoded XMTP message - * @param client - The XMTP client instance + * @param ctx - The message context from XMTP agent SDK */ -async function handleMessage(message: DecodedMessage, client: Client) { +async function handleMessage(ctx: MessageContext) { try { - const senderAddress = message.senderInboxId; - const botAddress = client.inboxId.toLowerCase(); - - // Ignore messages from the bot itself - if (senderAddress.toLowerCase() === botAddress) { - return; - } - - console.log(`Received message from ${senderAddress}: ${message.content}`); + const userId = ctx.message.senderInboxId; + console.log(`Received message from ${userId}: ${ctx.message.content}`); - const { agent, config } = await initializeAgent(senderAddress); - const response = await processMessage(agent, config, message.content); + const { agent, config } = await initializeAgent(userId); + const response = await processMessage(agent, config, String(ctx.message.content)); - // Get the conversation and send response - const conversation = await client.conversations.getConversationById(message.conversationId); - if (!conversation) { - throw new Error(`Could not find conversation for ID: ${message.conversationId}`); - } - await conversation.send(response); - console.log(`Sent response to ${senderAddress}: ${response}`); + await ctx.sendText(response); + console.log(`Sent response to ${userId}: ${response}`); } catch (error) { console.error("Error handling message:", error); - // Send error message back to user - const conversation = await client.conversations.getConversationById(message.conversationId); - if (!conversation) { - console.error(`Could not find conversation for ID: ${message.conversationId}`); - return; - } - await conversation.send( + await ctx.sendText( "I encountered an error while processing your request. Please try again later.", ); } } /** - * Start listening for XMTP messages. + * Transaction reference middleware to handle confirmed transactions * - * @param client - The XMTP client instance + * @param ctx - The message context from XMTP agent SDK + * @param next - The next middleware function in the chain */ -async function startMessageListener(client: Client) { - console.log("Starting message listener..."); - const stream = await client.conversations.streamAllMessages(); - for await (const message of stream) { - if (message) { - await handleMessage(message, client); - } +const transactionReferenceMiddleware: AgentMiddleware = async (ctx, next) => { + // Check if this is a transaction reference message + if (ctx.message.contentType?.sameAs(ContentTypeTransactionReference)) { + const transactionRef = ctx.message.content as TransactionReference; + + await ctx.sendText( + `āœ… Transaction confirmed!\n` + + `šŸ”— Network: ${transactionRef.networkId}\n` + + `šŸ“„ Hash: ${transactionRef.reference}\n` + + `${transactionRef.metadata ? `šŸ“ Transaction metadata received` : ""}`, + ); + + // Don't continue to other handlers since we handled this message + return; } -} + + // Continue to next middleware/handler + await next(); +}; /** * Validates that required environment variables are set. @@ -351,8 +283,9 @@ function validateEnvironment(): void { "OPENAI_API_KEY", "CDP_API_KEY_ID", "CDP_API_KEY_SECRET", - "WALLET_KEY", - "ENCRYPTION_KEY", + "CDP_WALLET_SECRET", + "XMTP_WALLET_KEY", + "XMTP_DB_ENCRYPTION_KEY", ]; requiredVars.forEach(varName => { @@ -372,6 +305,10 @@ function validateEnvironment(): void { if (!process.env.NETWORK_ID) { console.warn("Warning: NETWORK_ID not set, defaulting to base-sepolia"); } + + if (!process.env.XMTP_ENV) { + console.warn("Warning: XMTP_ENV not set, defaulting to dev"); + } } /** @@ -383,8 +320,101 @@ async function main(): Promise { validateEnvironment(); ensureLocalStorage(); - const xmtpClient = await initializeXmtpClient(); - await startMessageListener(xmtpClient); + // Create XMTP agent using environment variables with transaction codecs + const xmtpAgent = await XMTPAgent.createFromEnv({ + env: (process.env.XMTP_ENV as "local" | "dev" | "production") || "dev", + codecs: [new WalletSendCallsCodec(), new TransactionReferenceCodec()], + }); + + // Apply the transaction reference middleware + xmtpAgent.use(transactionReferenceMiddleware); + + // Handle /fund command - triggers an ETH transaction from user wallet to agent wallet + xmtpAgent.on("text", async ctx => { + const message = ctx.message.content as string; + if (!message.startsWith("/fund")) { + handleMessage(ctx); + return; + } + + const agentAddress = xmtpAgent.address; + if (!agentAddress) { + await ctx.sendText("Agent address not found"); + return; + } + const senderAddress = await ctx.getSenderAddress(); + + const parts = message.split(" "); + if (parts.length < 2) { + await ctx.sendText("Please provide an ETH amount. Usage: /fund "); + return; + } + + const amount = parseFloat(parts[1]); + if (isNaN(amount) || amount <= 0) { + await ctx.sendText("Please provide a valid ETH amount. Usage: /fund "); + return; + } + + // Convert amount to wei + const amountInWei = parseEther(amount.toString()); + + // Check user's balance + const balance = await publicClient.getBalance({ + address: senderAddress as `0x${string}`, + }); + + if (balance < amountInWei) { + await ctx.sendText( + `āŒ Insufficient balance. You have ${formatEther(balance)} ETH but trying to send ${amount} ETH.`, + ); + return; + } + + const walletSendCalls: WalletSendCallsParams = { + version: "1.0", + from: senderAddress as `0x${string}`, + chainId: chainId, + calls: [ + { + to: agentAddress as `0x${string}`, + value: `0x${amountInWei.toString(16)}`, + metadata: { + description: `Send ${amount} ETH to the agent's wallet ${agentAddress}`, + transactionType: "transfer", + currency: "ETH", + amount: amountInWei.toString(), + decimals: "18", + toAddress: agentAddress, + }, + }, + ], + }; + + // Send transaction request to user + await ctx.conversation.send(walletSendCalls, ContentTypeWalletSendCalls); + + // Send a follow-up message about transaction references + await ctx.sendText( + `šŸ’” Please sign the transaction in your wallet to send ${amount} ETH to the agent's wallet ${agentAddress}.`, + ); + }); + + // Log when agent starts + xmtpAgent.on("start", () => { + const env = process.env.XMTP_ENV || "dev"; + console.log(`Agent initialized on ${env} network`); + console.log(`Agent address: ${xmtpAgent.address}`); + console.log(`Send a message on http://xmtp.chat/dm/${xmtpAgent.address}?env=${env}`); + console.log(`Listening for messages...`); + }); + + // Handle errors + xmtpAgent.on("unhandledError", error => { + console.error("Unhandled error:", error); + }); + + await xmtpAgent.start(); } // Start the chatbot diff --git a/typescript/examples/langchain-xmtp-chatbot/package.json b/typescript/examples/langchain-xmtp-chatbot/package.json index 186809377..314905f95 100644 --- a/typescript/examples/langchain-xmtp-chatbot/package.json +++ b/typescript/examples/langchain-xmtp-chatbot/package.json @@ -19,14 +19,15 @@ "dependencies": { "@coinbase/agentkit": "workspace:*", "@coinbase/agentkit-langchain": "workspace:*", + "@langchain/core": "^0.3.19", "@langchain/langgraph": "^0.2.21", "@langchain/openai": "^0.3.14", - "@langchain/core": "^0.3.19", + "@xmtp/agent-sdk": "^1.1.4", + "@xmtp/content-type-transaction-reference": "^2.0.2", + "@xmtp/content-type-wallet-send-calls": "^2.0.0", "dotenv": "^16.4.5", "zod": "^3.22.4", - "@xmtp/node-sdk": "1.0.2", - "uint8arrays": "^5.1.0", - "viem": "^2.7.15" + "viem": "^2.22.16" }, "devDependencies": { "@types/node": "^22.13.14", diff --git a/typescript/examples/langchain-xmtp-chatbot/scripts/generate-keys.ts b/typescript/examples/langchain-xmtp-chatbot/scripts/generate-keys.ts index 640db17cc..884492751 100644 --- a/typescript/examples/langchain-xmtp-chatbot/scripts/generate-keys.ts +++ b/typescript/examples/langchain-xmtp-chatbot/scripts/generate-keys.ts @@ -27,8 +27,8 @@ async function main() { const { walletKey, encryptionKey } = generateRandomKeys(); console.log("šŸ“‹ Your XMTP keys:"); - console.log(`WALLET_KEY=${walletKey}`); - console.log(`ENCRYPTION_KEY=${encryptionKey}`); + console.log(`XMTP_WALLET_KEY=${walletKey}`); + console.log(`XMTP_DB_ENCRYPTION_KEY=${encryptionKey.slice(2)}`); console.log("\n✨ Copy these keys and add them to your .env file"); } catch (error) { console.error("āŒ Error generating keys:", error); diff --git a/typescript/pnpm-lock.yaml b/typescript/pnpm-lock.yaml index 000d9cb1f..897ae275a 100644 --- a/typescript/pnpm-lock.yaml +++ b/typescript/pnpm-lock.yaml @@ -484,25 +484,28 @@ importers: version: link:../../framework-extensions/langchain '@langchain/core': specifier: ^0.3.19 - version: 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) + version: 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) '@langchain/langgraph': specifier: ^0.2.21 - version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) + version: 0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2)) '@langchain/openai': specifier: ^0.3.14 - version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - '@xmtp/node-sdk': - specifier: 1.0.2 - version: 1.0.2 + version: 0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + '@xmtp/agent-sdk': + specifier: ^1.1.4 + version: 1.1.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + '@xmtp/content-type-transaction-reference': + specifier: ^2.0.2 + version: 2.0.2 + '@xmtp/content-type-wallet-send-calls': + specifier: ^2.0.0 + version: 2.0.0 dotenv: specifier: ^16.4.5 version: 16.4.7 - uint8arrays: - specifier: ^5.1.0 - version: 5.1.0 viem: - specifier: ^2.7.15 - version: 2.24.1(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + specifier: ^2.22.16 + version: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) zod: specifier: ^3.22.4 version: 3.24.2 @@ -1564,10 +1567,6 @@ packages: resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} engines: {node: ^14.21.3 || >=16} - '@noble/curves@1.9.2': - resolution: {integrity: sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==} - engines: {node: ^14.21.3 || >=16} - '@noble/curves@1.9.6': resolution: {integrity: sha512-GIKz/j99FRthB8icyJQA51E8Uk5hXmdyThjgQXRKiv9h0zeRlzSCLIzFw6K1LotZ3XuB7yzlf76qk7uBmTdFqA==} engines: {node: ^14.21.3 || >=16} @@ -1592,6 +1591,9 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@2.3.0': + resolution: {integrity: sha512-0TQed2gcBbIrh7Ccyw+y/uZQvbJwm7Ao4scBUxqpBCcsOlZG0O4KGfjtNAy/li4W8n1xt3dxrwJ0beZ2h2G6Kw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2424,21 +2426,40 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} - '@xmtp/content-type-group-updated@2.0.1': - resolution: {integrity: sha512-ao546DrxANHAqEZxMMHm41G/sE9vtAcNCrVGaOf1x5CIMAmXmH/lTvy6JVWnNn+DeJmNr6DrkMVVfAjP95OqLA==} + '@xmtp/agent-sdk@1.1.4': + resolution: {integrity: sha512-98hFtZmQln+QxA3eN6Of3ot9jxjUsRoMBvGz4yRV7gRrqJtH4iVqWTCCN1SqFpBPaQECdKPJhlxCEE7II+5jMw==} + engines: {node: '>=20'} + + '@xmtp/content-type-group-updated@2.0.2': + resolution: {integrity: sha512-ZUGLtzWALo5jimk5hYBVXjbdaKT6zP6a9wK0Urzl9H+Xv2w+H3fYDhwAidU0PXTcLL81qlUM6joxKVlsF5udvA==} + + '@xmtp/content-type-primitives@2.0.2': + resolution: {integrity: sha512-OTUsCD48sO2Eg69dfre32OSnXSkmefbSZA4L0S58LqYK6+hMymFRRjEH4fvPzXc9WCw5FmCYEG7DFAaB680HiQ==} + + '@xmtp/content-type-reaction@2.0.2': + resolution: {integrity: sha512-v7wGMycSsUi8NyLR+ytjDhNY4Nr4p8qNwKx8LZPlA8IwLacq2Bp2vKxlOAnGX7m5XP9ivpBNNZvkpR5Limvz1g==} + + '@xmtp/content-type-remote-attachment@2.0.2': + resolution: {integrity: sha512-gV2yU6UWsLQcJ228B7jOvtzUyK/+TfG0EUevxbz3OUuWpVpoo110qAa3HWUlahL1fWuaoFSX9GmESyw2UJWAQw==} + + '@xmtp/content-type-reply@2.0.2': + resolution: {integrity: sha512-tks5WEevzOzUTmpvpJjxLH5jil3cHSddWgS5MPfm8bGU5hCUfy8uojlVaFEUbBBjpDVwU1o++SW5h5HggHKsgg==} - '@xmtp/content-type-primitives@2.0.1': - resolution: {integrity: sha512-RfRwIVU2Pj2kgYxKnM+N1t1yzvt8C9lTEgma3vGqMjmh/yR3s4bGj8BhE0m8k2JCyCd0c5lQANeeaASOL1lsWQ==} + '@xmtp/content-type-text@2.0.2': + resolution: {integrity: sha512-nlRufOYPrG5sNbruNPCsb6Qk9/jmJ5lMooPsZEo4Dbwda/2S4bSvrrIncT6if7M2SCha3hxtlgJlFGeTtHy4gQ==} - '@xmtp/content-type-text@2.0.1': - resolution: {integrity: sha512-cX3Swxx90O1lYi0OC+ENwPfuV/b508V7h1ZNVxt828fmpwc0LL51KZG/PREVTxwk/yiTt2f6OQqnqkC4AbL8Rg==} + '@xmtp/content-type-transaction-reference@2.0.2': + resolution: {integrity: sha512-7JwqZ3phX/XIZByY4XnteW/0c/XtPOeuEG3GayLOMELyEBJxoVog4evxFidoWb/vtEm9JuqqKqh8VtUaekhXYA==} - '@xmtp/node-bindings@1.1.3': - resolution: {integrity: sha512-1n4tg39+ZQp5Vp9rpbwX4T/QMhfF3oKftQhi1DXmEaEL5T3LMMUEjJrP581e+R0z29jPp27AluSgrWvWkKbcFA==} + '@xmtp/content-type-wallet-send-calls@2.0.0': + resolution: {integrity: sha512-212g68DjwFMh3gaAwULJvrhpuje6Tp4rF94oy3lQRvnXCQ+xLkyDi8pT5Pyw3Dm6jW+ke1U0hauzV7sLCgIFSw==} + + '@xmtp/node-bindings@1.5.3': + resolution: {integrity: sha512-Zlzp7GiZdvc56ZBBhX7lnZ+EDI+1l3SCTDEdB0zqi51baaSI2pMAmb7TtcOWBDQadsp1E8Hn4qz3OxztEHpJaw==} engines: {node: '>=18'} - '@xmtp/node-sdk@1.0.2': - resolution: {integrity: sha512-5OZMIsUT2kxJTOAjItI4j6g8VIrHO2G/5TsqSmzC+CVnskHfI2J5zQRpw/aC+E8UfUI/55kcl8I0Fh/V9nqDEQ==} + '@xmtp/node-sdk@4.2.2': + resolution: {integrity: sha512-3HV5n7m8qP+EcE12sDiOzuvEa1usuPasw8Shos/0ekty1YRdBjmgM+4AOVjsw7f0CGuBqc1V9XspXGuDq6/PEw==} engines: {node: '>=20'} '@xmtp/proto@3.78.0': @@ -4889,6 +4910,14 @@ packages: typescript: optional: true + ox@0.9.6: + resolution: {integrity: sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -6062,6 +6091,14 @@ packages: typescript: optional: true + viem@2.38.0: + resolution: {integrity: sha512-YU5TG8dgBNeYPrCMww0u9/JVeq2ZCk9fzk6QybrPkBooFysamHXL1zC3ua10aLPt9iWoA/gSVf1D9w7nc5B1aA==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + wagmi@2.17.0: resolution: {integrity: sha512-NxdS/oHG3j4l3JzNIAb0zL14p3GXOS9YU4Q3WS+0eTChFIfdqBrurQMImPLNC9P5rXYym6cjC2feeqhHVMJjpg==} peerDependencies: @@ -6394,7 +6431,7 @@ snapshots: '@babel/traverse': 7.27.0 '@babel/types': 7.27.0 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -6552,7 +6589,7 @@ snapshots: '@babel/parser': 7.27.0 '@babel/template': 7.27.0 '@babel/types': 7.27.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -6570,7 +6607,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) preact: 10.24.2 - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zustand: 5.0.3(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' @@ -6828,7 +6865,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.2)(zod@3.25.56) preact: 10.24.2 - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) zustand: 5.0.3(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' @@ -7563,23 +7600,6 @@ snapshots: transitivePeerDependencies: - openai - '@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': - dependencies: - '@cfworker/json-schema': 4.1.1 - ansi-styles: 5.2.0 - camelcase: 6.3.0 - decamelize: 1.2.0 - js-tiktoken: 1.0.19 - langsmith: 0.2.15(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - mustache: 4.2.0 - p-queue: 6.6.2 - p-retry: 4.6.2 - uuid: 10.0.0 - zod: 3.24.2 - zod-to-json-schema: 3.24.5(zod@3.24.2) - transitivePeerDependencies: - - openai - '@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))': dependencies: '@cfworker/json-schema': 4.1.1 @@ -7619,11 +7639,6 @@ snapshots: '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) uuid: 10.0.0 - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': - dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - uuid: 10.0.0 - '@langchain/langgraph-checkpoint@0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))': dependencies: '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) @@ -7644,16 +7659,6 @@ snapshots: '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56)) react: 18.3.1 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(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.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - react: 18.3.1 - '@langchain/langgraph-sdk@0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)': dependencies: '@types/json-schema': 7.0.15 @@ -7686,18 +7691,6 @@ snapshots: transitivePeerDependencies: - react - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': - dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - '@langchain/langgraph-checkpoint': 0.0.16(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2))) - '@langchain/langgraph-sdk': 0.0.60(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1) - uuid: 10.0.0 - zod: 3.24.2 - optionalDependencies: - zod-to-json-schema: 3.24.5(zod@3.24.2) - transitivePeerDependencies: - - react - '@langchain/langgraph@0.2.59(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(react@18.3.1)(zod-to-json-schema@3.24.5(zod@3.24.2))': dependencies: '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) @@ -7733,17 +7726,6 @@ snapshots: - encoding - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))': - dependencies: - '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) - js-tiktoken: 1.0.19 - openai: 4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) - zod: 3.24.2 - zod-to-json-schema: 3.24.5(zod@3.24.2) - transitivePeerDependencies: - - encoding - - ws - '@langchain/openai@0.3.17(@langchain/core@0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)))(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))': dependencies: '@langchain/core': 0.3.30(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)) @@ -7877,7 +7859,7 @@ snapshots: bufferutil: 4.0.9 cross-fetch: 4.1.0 date-fns: 2.30.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) eciesjs: 0.4.15 eventemitter2: 6.4.9 readable-stream: 3.6.2 @@ -7901,7 +7883,7 @@ snapshots: '@paulmillr/qr': 0.2.1 bowser: 2.12.1 cross-fetch: 4.1.0 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) eciesjs: 0.4.15 eth-rpc-errors: 4.0.3 eventemitter2: 6.4.9 @@ -7928,7 +7910,7 @@ snapshots: '@scure/base': 1.2.6 '@types/debug': 4.1.12 '@types/lodash': 4.17.20 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) lodash: 4.17.21 pony-cause: 2.1.11 semver: 7.7.1 @@ -7940,7 +7922,7 @@ snapshots: dependencies: '@ethereumjs/tx': 4.2.0 '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) semver: 7.7.1 superstruct: 1.0.4 transitivePeerDependencies: @@ -7953,7 +7935,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) pony-cause: 2.1.11 semver: 7.7.1 uuid: 9.0.1 @@ -7967,7 +7949,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 '@types/debug': 4.1.12 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) pony-cause: 2.1.11 semver: 7.7.1 uuid: 9.0.1 @@ -8017,10 +7999,6 @@ snapshots: dependencies: '@noble/hashes': 1.8.0 - '@noble/curves@1.9.2': - dependencies: - '@noble/hashes': 1.8.0 - '@noble/curves@1.9.6': dependencies: '@noble/hashes': 1.8.0 @@ -8035,6 +8013,8 @@ snapshots: '@noble/hashes@1.8.0': {} + '@noble/secp256k1@2.3.0': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8133,7 +8113,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript @@ -8144,7 +8124,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - bufferutil - typescript @@ -8157,7 +8137,7 @@ snapshots: '@reown/appkit-wallet': 1.7.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) valtio: 1.13.2(react@18.3.1) - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8307,7 +8287,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) valtio: 1.13.2(react@18.3.1) - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8361,7 +8341,7 @@ snapshots: '@walletconnect/universal-provider': 2.21.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) bs58: 6.0.0 valtio: 1.13.2(react@18.3.1) - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -8405,7 +8385,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56) transitivePeerDependencies: - bufferutil - typescript @@ -9877,29 +9857,66 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 - '@xmtp/content-type-group-updated@2.0.1': + '@xmtp/agent-sdk@1.1.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)': + dependencies: + '@xmtp/content-type-reaction': 2.0.2 + '@xmtp/content-type-remote-attachment': 2.0.2 + '@xmtp/content-type-reply': 2.0.2 + '@xmtp/content-type-text': 2.0.2 + '@xmtp/node-sdk': 4.2.2 + uint8arrays: 5.1.0 + viem: 2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) + transitivePeerDependencies: + - bufferutil + - typescript + - utf-8-validate + - zod + + '@xmtp/content-type-group-updated@2.0.2': dependencies: - '@xmtp/content-type-primitives': 2.0.1 + '@xmtp/content-type-primitives': 2.0.2 '@xmtp/proto': 3.78.0 - '@xmtp/content-type-primitives@2.0.1': + '@xmtp/content-type-primitives@2.0.2': dependencies: '@xmtp/proto': 3.78.0 - '@xmtp/content-type-text@2.0.1': + '@xmtp/content-type-reaction@2.0.2': dependencies: - '@xmtp/content-type-primitives': 2.0.1 + '@xmtp/content-type-primitives': 2.0.2 - '@xmtp/node-bindings@1.1.3': {} + '@xmtp/content-type-remote-attachment@2.0.2': + dependencies: + '@noble/secp256k1': 2.3.0 + '@xmtp/content-type-primitives': 2.0.2 + '@xmtp/proto': 3.78.0 - '@xmtp/node-sdk@1.0.2': + '@xmtp/content-type-reply@2.0.2': dependencies: - '@xmtp/content-type-group-updated': 2.0.1 - '@xmtp/content-type-primitives': 2.0.1 - '@xmtp/content-type-text': 2.0.1 - '@xmtp/node-bindings': 1.1.3 + '@xmtp/content-type-primitives': 2.0.2 '@xmtp/proto': 3.78.0 + '@xmtp/content-type-text@2.0.2': + dependencies: + '@xmtp/content-type-primitives': 2.0.2 + + '@xmtp/content-type-transaction-reference@2.0.2': + dependencies: + '@xmtp/content-type-primitives': 2.0.2 + + '@xmtp/content-type-wallet-send-calls@2.0.0': + dependencies: + '@xmtp/content-type-primitives': 2.0.2 + + '@xmtp/node-bindings@1.5.3': {} + + '@xmtp/node-sdk@4.2.2': + dependencies: + '@xmtp/content-type-group-updated': 2.0.2 + '@xmtp/content-type-primitives': 2.0.2 + '@xmtp/content-type-text': 2.0.2 + '@xmtp/node-bindings': 1.5.3 + '@xmtp/proto@3.78.0': dependencies: long: 5.3.1 @@ -10652,10 +10669,6 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -11941,7 +11954,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -12470,17 +12483,6 @@ snapshots: optionalDependencies: openai: 4.89.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.56) - langsmith@0.2.15(openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): - dependencies: - '@types/uuid': 10.0.0 - commander: 10.0.1 - p-queue: 6.6.2 - p-retry: 4.6.2 - semver: 7.7.1 - uuid: 10.0.0 - optionalDependencies: - openai: 4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2) - langsmith@0.2.15(openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2)): dependencies: '@types/uuid': 10.0.0 @@ -12902,21 +12904,6 @@ snapshots: - encoding optional: true - openai@4.89.1(ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): - dependencies: - '@types/node': 18.19.83 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - optionalDependencies: - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - zod: 3.24.2 - transitivePeerDependencies: - - encoding - openai@4.89.1(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.24.2): dependencies: '@types/node': 18.19.83 @@ -13016,11 +13003,11 @@ snapshots: ox@0.6.7(typescript@5.8.2)(zod@3.25.56): dependencies: '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.9.2 + '@noble/curves': 1.9.6 '@noble/hashes': 1.8.0 - '@scure/bip32': 1.6.2 - '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.2)(zod@3.25.56) + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.25.56) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.8.2 @@ -13055,7 +13042,37 @@ snapshots: transitivePeerDependencies: - zod - ox@0.9.3(typescript@5.8.2)(zod@3.22.4): + ox@0.9.3(typescript@5.8.2)(zod@3.24.2): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.24.2) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - zod + + ox@0.9.3(typescript@5.8.2)(zod@3.25.56): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.25.56) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - zod + + ox@0.9.6(typescript@5.8.2)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -13070,7 +13087,7 @@ snapshots: transitivePeerDependencies: - zod - ox@0.9.3(typescript@5.8.2)(zod@3.24.2): + ox@0.9.6(typescript@5.8.2)(zod@3.24.2): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -13085,7 +13102,7 @@ snapshots: transitivePeerDependencies: - zod - ox@0.9.3(typescript@5.8.2)(zod@3.25.56): + ox@0.9.6(typescript@5.8.2)(zod@3.25.56): dependencies: '@adraffy/ens-normalize': 1.11.0 '@noble/ciphers': 1.3.0 @@ -13224,7 +13241,7 @@ snapshots: portfinder@1.0.35: dependencies: async: 3.2.6 - debug: 4.4.0 + debug: 4.4.0(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -13488,7 +13505,7 @@ snapshots: buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.0.9 utf-8-validate: 5.0.10 @@ -14333,7 +14350,41 @@ snapshots: - utf-8-validate - zod - viem@2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.24.2) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.3(typescript@5.8.2)(zod@3.24.2) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.25.56) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.3(typescript@5.8.2)(zod@3.25.56) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -14341,7 +14392,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.1.0(typescript@5.8.2)(zod@3.22.4) isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.9.3(typescript@5.8.2)(zod@3.22.4) + ox: 0.9.6(typescript@5.8.2)(zod@3.22.4) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.2 @@ -14350,7 +14401,7 @@ snapshots: - utf-8-validate - zod - viem@2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): + viem@2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -14358,7 +14409,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.1.0(typescript@5.8.2)(zod@3.24.2) isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.9.3(typescript@5.8.2)(zod@3.24.2) + ox: 0.9.6(typescript@5.8.2)(zod@3.24.2) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.2 @@ -14367,7 +14418,7 @@ snapshots: - utf-8-validate - zod - viem@2.37.5(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56): + viem@2.38.0(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.56): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -14375,7 +14426,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.1.0(typescript@5.8.2)(zod@3.25.56) isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.9.3(typescript@5.8.2)(zod@3.25.56) + ox: 0.9.6(typescript@5.8.2)(zod@3.25.56) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.2