From aad36f256f67440dc45fb7404e14ef941702502d Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 03:07:36 +0000 Subject: [PATCH 01/10] fix ids --- packages/client-twitter/src/base.ts | 28 ++++++++++++--------- packages/client-twitter/src/interactions.ts | 11 ++++---- packages/client-twitter/src/post.ts | 22 +++++++--------- packages/client-twitter/src/search.ts | 2 +- packages/client-twitter/src/utils.ts | 4 +-- 5 files changed, 32 insertions(+), 35 deletions(-) diff --git a/packages/client-twitter/src/base.ts b/packages/client-twitter/src/base.ts index 21313890d4f..d483619e74f 100644 --- a/packages/client-twitter/src/base.ts +++ b/packages/client-twitter/src/base.ts @@ -112,6 +112,7 @@ export class ClientBase extends EventEmitter { const tweet = await this.requestQueue.add(() => this.twitterClient.getTweet(tweetId) ); + await this.cacheTweet(tweet); return tweet; } @@ -343,20 +344,24 @@ export class ClientBase extends EventEmitter { // Check if any of the cached tweets exist in the existing memories const someCachedTweetsExist = cachedTimeline.some((tweet) => - existingMemoryIds.has(tweet.id) + existingMemoryIds.has( + stringToUuid(tweet.id + "-" + this.runtime.agentId) + ) ); if (someCachedTweetsExist) { // Filter out the cached tweets that already exist in the database const tweetsToSave = cachedTimeline.filter( - (tweet) => !existingMemoryIds.has(tweet.id) + (tweet) => + !existingMemoryIds.has( + stringToUuid(tweet.id + "-" + this.runtime.agentId) + ) ); // Save the missing tweets as memories for (const tweet of tweetsToSave) { const roomId = stringToUuid( - tweet.conversationId ?? - "default-room-" + this.runtime.agentId + tweet.conversationId + "-" + this.runtime.agentId ); const tweetuserId = tweet.userId === this.twitterUserId @@ -428,27 +433,26 @@ export class ClientBase extends EventEmitter { // Create a Set to store unique tweet IDs const tweetIdsToCheck = new Set(); + const roomIds = new Set(); // Add tweet IDs to the Set for (const tweet of allTweets) { tweetIdsToCheck.add(tweet.id); + roomIds.add( + stringToUuid(tweet.conversationId + "-" + this.runtime.agentId) + ); } - // Convert the Set to an array of UUIDs - const tweetUuids = Array.from(tweetIdsToCheck).map((id) => - stringToUuid(id + "-" + this.runtime.agentId) - ); - // Check the existing memories in the database const existingMemories = await this.runtime.messageManager.getMemoriesByRoomIds({ agentId: this.runtime.agentId, - roomIds: tweetUuids, + roomIds: Array.from(roomIds), }); // Create a Set to store the existing memory IDs const existingMemoryIds = new Set( - existingMemories.map((memory) => memory.roomId) + existingMemories.map((memory) => memory.id) ); // Filter out the tweets that already exist in the database @@ -469,7 +473,7 @@ export class ClientBase extends EventEmitter { // Save the new tweets as memories for (const tweet of tweetsToSave) { const roomId = stringToUuid( - tweet.conversationId ?? "default-room-" + this.runtime.agentId + tweet.conversationId + "-" + this.runtime.agentId ); const tweetuserId = tweet.userId === this.twitterUserId diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index 616f9664af5..b5f46a350c4 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -14,7 +14,7 @@ import { stringToUuid, elizaLogger, } from "@ai16z/eliza"; -import { ClientBase } from "./base.ts"; +import { ClientBase } from "./base"; import { buildConversationThread, sendTweet, wait } from "./utils.ts"; import { embeddingZeroVector } from "@ai16z/eliza"; @@ -127,12 +127,11 @@ export class TwitterInteractionClient extends ClientBase { !this.lastCheckedTweetId || parseInt(tweet.id) > this.lastCheckedTweetId ) { - const conversationId = - tweet.conversationId + "-" + this.runtime.agentId; - - const roomId = stringToUuid(conversationId); + const roomId = stringToUuid( + tweet.conversationId + "-" + this.runtime.agentId + ); - const userIdUUID = stringToUuid(tweet.userId as string); + const userIdUUID = stringToUuid(tweet.userId!); await this.runtime.ensureConnection( userIdUUID, diff --git a/packages/client-twitter/src/post.ts b/packages/client-twitter/src/post.ts index a9b1c995d8f..9cb7e0c5fa7 100644 --- a/packages/client-twitter/src/post.ts +++ b/packages/client-twitter/src/post.ts @@ -7,12 +7,7 @@ import { ModelClass, stringToUuid, } from "@ai16z/eliza"; -import fs from "fs"; -import { composeContext, elizaLogger } from "@ai16z/eliza"; -import { generateText } from "@ai16z/eliza"; -import { embeddingZeroVector } from "@ai16z/eliza"; -import { IAgentRuntime, ModelClass } from "@ai16z/eliza"; -import { stringToUuid } from "@ai16z/eliza"; +import { elizaLogger } from "@ai16z/eliza"; import { ClientBase } from "./base.ts"; const twitterPostTemplate = `{{timeline}} @@ -163,8 +158,10 @@ export class TwitterPostClient extends ClientBase { // Use the helper function to truncate to complete sentence const content = truncateToCompleteSentence(formattedTweet); - if (this.runtime.getSetting("TWITTER_DRY_RUN") === 'true') { - elizaLogger.info(`Dry run: would have posted tweet: ${content}`); + if (this.runtime.getSetting("TWITTER_DRY_RUN") === "true") { + elizaLogger.info( + `Dry run: would have posted tweet: ${content}` + ); return; } @@ -192,10 +189,9 @@ export class TwitterPostClient extends ClientBase { videos: [], } as Tweet; - const postId = tweet.id; - const conversationId = - tweet.conversationId + "-" + this.runtime.agentId; - const roomId = stringToUuid(conversationId); + const roomId = stringToUuid( + tweet.conversationId + "-" + this.runtime.agentId + ); await this.runtime.ensureRoomExists(roomId); await this.runtime.ensureParticipantInRoom( @@ -206,7 +202,7 @@ export class TwitterPostClient extends ClientBase { await this.cacheTweet(tweet); await this.runtime.messageManager.createMemory({ - id: stringToUuid(postId + "-" + this.runtime.agentId), + id: stringToUuid(tweet.id + "-" + this.runtime.agentId), userId: this.runtime.agentId, agentId: this.runtime.agentId, content: { diff --git a/packages/client-twitter/src/search.ts b/packages/client-twitter/src/search.ts index feaaed19b9f..b12d1d4bfba 100644 --- a/packages/client-twitter/src/search.ts +++ b/packages/client-twitter/src/search.ts @@ -12,7 +12,7 @@ import { State, } from "@ai16z/eliza"; import { stringToUuid } from "@ai16z/eliza"; -import { ClientBase } from "./base.ts"; +import { ClientBase } from "./base"; import { buildConversationThread, sendTweet, wait } from "./utils.ts"; const twitterSearchTemplate = diff --git a/packages/client-twitter/src/utils.ts b/packages/client-twitter/src/utils.ts index 5849c71c6bb..5cc3dad7bff 100644 --- a/packages/client-twitter/src/utils.ts +++ b/packages/client-twitter/src/utils.ts @@ -1,10 +1,8 @@ -// utils.ts - import { Tweet } from "agent-twitter-client"; import { embeddingZeroVector } from "@ai16z/eliza"; import { Content, Memory, UUID } from "@ai16z/eliza"; import { stringToUuid } from "@ai16z/eliza"; -import { ClientBase } from "./base.ts"; +import { ClientBase } from "./base"; import { elizaLogger } from "@ai16z/eliza"; const MAX_TWEET_LENGTH = 280; // Updated to Twitter's current character limit From c0af0b62d8902cb21fd6bc4b1722d4873bc5beb1 Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 04:03:03 +0000 Subject: [PATCH 02/10] use the same client for post and interactions --- packages/client-twitter/src/base.ts | 159 ++++++++++---------- packages/client-twitter/src/index.ts | 18 ++- packages/client-twitter/src/interactions.ts | 60 +++++--- packages/client-twitter/src/post.ts | 31 ++-- 4 files changed, 148 insertions(+), 120 deletions(-) diff --git a/packages/client-twitter/src/base.ts b/packages/client-twitter/src/base.ts index d483619e74f..bdf29173c36 100644 --- a/packages/client-twitter/src/base.ts +++ b/packages/client-twitter/src/base.ts @@ -125,7 +125,7 @@ export class ClientBase extends EventEmitter { ); } - constructor({ runtime }: { runtime: IAgentRuntime }) { + constructor(runtime: IAgentRuntime) { super(); this.runtime = runtime; if (ClientBase._twitterClient) { @@ -140,94 +140,91 @@ export class ClientBase extends EventEmitter { this.runtime.character.style.all.join("\n- ") + "- " + this.runtime.character.style.post.join(); + } - // async initialization - (async () => { - //test - await this.loadCachedLatestCheckedTweetId(); - // Check for Twitter cookies - if (this.runtime.getSetting("TWITTER_COOKIES")) { - const cookiesArray = JSON.parse( - this.runtime.getSetting("TWITTER_COOKIES") - ); + async init() { + //test + await this.loadCachedLatestCheckedTweetId(); + // Check for Twitter cookies + if (this.runtime.getSetting("TWITTER_COOKIES")) { + const cookiesArray = JSON.parse( + this.runtime.getSetting("TWITTER_COOKIES") + ); - await this.setCookiesFromArray(cookiesArray); + await this.setCookiesFromArray(cookiesArray); + } else { + const cachedCookies = await this.getCachedCookies(); + if (cachedCookies) { + await this.setCookiesFromArray(cachedCookies); } else { - const cachedCookies = await this.getCachedCookies(); - if (cachedCookies) { - await this.setCookiesFromArray(cachedCookies); - } else { - await this.twitterClient.login( - this.runtime.getSetting("TWITTER_USERNAME"), - this.runtime.getSetting("TWITTER_PASSWORD"), - this.runtime.getSetting("TWITTER_EMAIL"), - this.runtime.getSetting("TWITTER_2FA_SECRET") - ); - elizaLogger.log("Logged in to Twitter"); - const cookies = await this.twitterClient.getCookies(); - await this.cacheCookies(cookies); - } + await this.twitterClient.login( + this.runtime.getSetting("TWITTER_USERNAME"), + this.runtime.getSetting("TWITTER_PASSWORD"), + this.runtime.getSetting("TWITTER_EMAIL"), + this.runtime.getSetting("TWITTER_2FA_SECRET") + ); + elizaLogger.log("Logged in to Twitter"); + const cookies = await this.twitterClient.getCookies(); + await this.cacheCookies(cookies); } + } - let loggedInWaits = 0; - - while (!(await this.twitterClient.isLoggedIn())) { - console.log("Waiting for Twitter login"); - await new Promise((resolve) => setTimeout(resolve, 2000)); - if (loggedInWaits > 10) { - console.error("Failed to login to Twitter"); - await this.twitterClient.login( - this.runtime.getSetting("TWITTER_USERNAME"), - this.runtime.getSetting("TWITTER_PASSWORD"), - this.runtime.getSetting("TWITTER_EMAIL"), - this.runtime.getSetting("TWITTER_2FA_SECRET") - ); - const cookies = await this.twitterClient.getCookies(); - await this.cacheCookies(cookies); - loggedInWaits = 0; - } - loggedInWaits++; - } - const userId = await this.requestQueue.add(async () => { - // wait 3 seconds before getting the user id - await new Promise((resolve) => setTimeout(resolve, 10000)); - try { - return await this.twitterClient.getUserIdByScreenName( - this.runtime.getSetting("TWITTER_USERNAME") - ); - } catch (error) { - console.error("Error getting user ID:", error); - return null; - } - }); - if (!userId) { - console.error("Failed to get user ID"); - return; + let loggedInWaits = 0; + + while (!(await this.twitterClient.isLoggedIn())) { + console.log("Waiting for Twitter login"); + await new Promise((resolve) => setTimeout(resolve, 2000)); + if (loggedInWaits > 10) { + console.error("Failed to login to Twitter"); + await this.twitterClient.login( + this.runtime.getSetting("TWITTER_USERNAME"), + this.runtime.getSetting("TWITTER_PASSWORD"), + this.runtime.getSetting("TWITTER_EMAIL"), + this.runtime.getSetting("TWITTER_2FA_SECRET") + ); + const cookies = await this.twitterClient.getCookies(); + await this.cacheCookies(cookies); + loggedInWaits = 0; } - elizaLogger.log("Twitter user ID:", userId); - this.twitterUserId = userId; - - // Initialize Twitter profile - const profile = await this.initializeProfile(); - if (profile) { - // console.log("Twitter profile initialized:", profile); - - // Store profile info for use in responses - this.runtime.character = { - ...this.runtime.character, - twitterProfile: { - username: profile.username, - screenName: profile.screenName, - bio: profile.bio, - nicknames: profile.nicknames, - }, - }; + loggedInWaits++; + } + const userId = await this.requestQueue.add(async () => { + // wait 3 seconds before getting the user id + await new Promise((resolve) => setTimeout(resolve, 10000)); + try { + return await this.twitterClient.getUserIdByScreenName( + this.runtime.getSetting("TWITTER_USERNAME") + ); + } catch (error) { + console.error("Error getting user ID:", error); + return null; } + }); + if (!userId) { + console.error("Failed to get user ID"); + return; + } + elizaLogger.log("Twitter user ID:", userId); + this.twitterUserId = userId; + + // Initialize Twitter profile + const profile = await this.initializeProfile(); + if (profile) { + // console.log("Twitter profile initialized:", profile); + + // Store profile info for use in responses + this.runtime.character = { + ...this.runtime.character, + twitterProfile: { + username: profile.username, + screenName: profile.screenName, + bio: profile.bio, + nicknames: profile.nicknames, + }, + }; + } - await this.populateTimeline(); - - this.onReady(); - })(); + await this.populateTimeline(); } async fetchHomeTimeline(count: number): Promise { diff --git a/packages/client-twitter/src/index.ts b/packages/client-twitter/src/index.ts index 742b5ac34dc..332f35441ef 100644 --- a/packages/client-twitter/src/index.ts +++ b/packages/client-twitter/src/index.ts @@ -2,25 +2,35 @@ import { TwitterPostClient } from "./post.ts"; import { TwitterSearchClient } from "./search.ts"; import { TwitterInteractionClient } from "./interactions.ts"; import { IAgentRuntime, Client, elizaLogger } from "@ai16z/eliza"; +import { ClientBase } from "./base.ts"; -class TwitterAllClient { +class TwitterManager { + client: ClientBase; post: TwitterPostClient; search: TwitterSearchClient; interaction: TwitterInteractionClient; constructor(runtime: IAgentRuntime) { - this.post = new TwitterPostClient(runtime); + this.client = new ClientBase(runtime); + this.post = new TwitterPostClient(this.client, runtime); // this.search = new TwitterSearchClient(runtime); // don't start the search client by default // this searches topics from character file, but kind of violates consent of random users // burns your rate limit and can get your account banned // use at your own risk - this.interaction = new TwitterInteractionClient(runtime); + this.interaction = new TwitterInteractionClient(this.client, runtime); } } export const TwitterClientInterface: Client = { async start(runtime: IAgentRuntime) { elizaLogger.log("Twitter client started"); - return new TwitterAllClient(runtime); + const manager = new TwitterManager(runtime); + + await manager.client.init(); + + await this.post.start(); + await this.interaction.start(); + + return manager; }, async stop(runtime: IAgentRuntime) { elizaLogger.warn("Twitter client does not support stopping yet"); diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index b5f46a350c4..1e19699fdd0 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -82,8 +82,16 @@ Thread of Tweets You Are Replying To: # INSTRUCTIONS: Respond with [RESPOND] if {{agentName}} should respond, or [IGNORE] if {{agentName}} should not respond to the last message and [STOP] if {{agentName}} should stop participating in the conversation. ` + shouldRespondFooter; -export class TwitterInteractionClient extends ClientBase { - onReady() { +export class TwitterInteractionClient { + client: ClientBase; + runtime: IAgentRuntime; + + constructor(client: ClientBase, runtime: IAgentRuntime) { + this.client = client; + this.runtime = runtime; + } + + async start() { const handleTwitterInteractionsLoop = () => { this.handleTwitterInteractions(); setTimeout( @@ -94,19 +102,15 @@ export class TwitterInteractionClient extends ClientBase { handleTwitterInteractionsLoop(); } - constructor(runtime: IAgentRuntime) { - super({ - runtime, - }); - } - async handleTwitterInteractions() { elizaLogger.log("Checking Twitter interactions"); + + const twitterUsername = this.runtime.getSetting("TWITTER_USERNAME"); try { // Check for mentions const tweetCandidates = ( - await this.fetchSearchTweets( - `@${this.runtime.getSetting("TWITTER_USERNAME")}`, + await this.client.fetchSearchTweets( + `@${twitterUsername}`, 20, SearchMode.Latest ) @@ -115,23 +119,30 @@ export class TwitterInteractionClient extends ClientBase { // de-duplicate tweetCandidates with a set const uniqueTweetCandidates = [...new Set(tweetCandidates)]; + console.log({ twitterUserId: this.client.twitterUserId }); + // Sort tweet candidates by ID in ascending order uniqueTweetCandidates .sort((a, b) => a.id.localeCompare(b.id)) - .filter((tweet) => tweet.userId !== this.twitterUserId); + .filter((tweet) => tweet.userId !== this.client.twitterUserId); // for each tweet candidate, handle the tweet for (const tweet of uniqueTweetCandidates) { // console.log("tweet:", tweet); if ( - !this.lastCheckedTweetId || - parseInt(tweet.id) > this.lastCheckedTweetId + !this.client.lastCheckedTweetId || + parseInt(tweet.id) > this.client.lastCheckedTweetId ) { + elizaLogger.log("New Tweet found", tweet.permanentUrl); + const roomId = stringToUuid( tweet.conversationId + "-" + this.runtime.agentId ); - const userIdUUID = stringToUuid(tweet.userId!); + const userIdUUID = + tweet.userId === this.client.twitterUserId + ? this.runtime.agentId + : stringToUuid(tweet.userId!); await this.runtime.ensureConnection( userIdUUID, @@ -141,7 +152,10 @@ export class TwitterInteractionClient extends ClientBase { "twitter" ); - const thread = await buildConversationThread(tweet, this); + const thread = await buildConversationThread( + tweet, + this.client + ); const message = { content: { text: tweet.text }, @@ -157,12 +171,12 @@ export class TwitterInteractionClient extends ClientBase { }); // Update the last checked tweet ID after processing each tweet - this.lastCheckedTweetId = parseInt(tweet.id); + this.client.lastCheckedTweetId = parseInt(tweet.id); } } // Save the latest checked tweet ID to the file - await this.cacheLatestCheckedTweetId(); + await this.client.cacheLatestCheckedTweetId(); elizaLogger.log("Finished checking Twitter interactions"); } catch (error) { @@ -200,12 +214,12 @@ export class TwitterInteractionClient extends ClientBase { let homeTimeline: Tweet[] = []; // read the file if it exists - const cachedTimeline = await this.getCachedTimeline(); + const cachedTimeline = await this.client.getCachedTimeline(); if (cachedTimeline) { homeTimeline = cachedTimeline; } else { - homeTimeline = await this.fetchHomeTimeline(50); - await this.cacheTimeline(homeTimeline); + homeTimeline = await this.client.fetchHomeTimeline(50); + await this.client.cacheTimeline(homeTimeline); } elizaLogger.debug("Thread: ", thread); @@ -234,7 +248,7 @@ export class TwitterInteractionClient extends ClientBase { .join("\n"); let state = await this.runtime.composeState(message, { - twitterClient: this.twitterClient, + twitterClient: this.client.twitterClient, twitterUserName: this.runtime.getSetting("TWITTER_USERNAME"), currentPost, formattedConversation, @@ -269,7 +283,7 @@ export class TwitterInteractionClient extends ClientBase { roomId, createdAt: tweet.timestamp * 1000, }; - this.saveRequestMessage(message, state); + this.client.saveRequestMessage(message, state); } const shouldRespondContext = composeContext({ @@ -321,7 +335,7 @@ export class TwitterInteractionClient extends ClientBase { try { const callback: HandlerCallback = async (response: Content) => { const memories = await sendTweet( - this, + this.client, response, message.roomId, this.runtime.getSetting("TWITTER_USERNAME"), diff --git a/packages/client-twitter/src/post.ts b/packages/client-twitter/src/post.ts index 9cb7e0c5fa7..20110730996 100644 --- a/packages/client-twitter/src/post.ts +++ b/packages/client-twitter/src/post.ts @@ -62,8 +62,11 @@ function truncateToCompleteSentence(text: string): string { return text.slice(0, MAX_TWEET_LENGTH - 3).trim() + "..."; } -export class TwitterPostClient extends ClientBase { - onReady(postImmediately: boolean = true) { +export class TwitterPostClient { + client: ClientBase; + runtime: IAgentRuntime; + + async start(postImmediately: boolean = true) { const generateNewTweetLoop = () => { const minMinutes = parseInt(this.runtime.getSetting("POST_INTERVAL_MIN")) || 90; @@ -88,10 +91,9 @@ export class TwitterPostClient extends ClientBase { generateNewTweetLoop(); } - constructor(runtime: IAgentRuntime) { - super({ - runtime, - }); + constructor(client: ClientBase, runtime: IAgentRuntime) { + this.client = client; + this.runtime = runtime; } private async generateNewTweet() { @@ -106,13 +108,13 @@ export class TwitterPostClient extends ClientBase { let homeTimeline = []; - const cachedTimeline = await this.getCachedTimeline(); + const cachedTimeline = await this.client.getCachedTimeline(); if (cachedTimeline) { homeTimeline = cachedTimeline; } else { - homeTimeline = await this.fetchHomeTimeline(50); - this.cacheTimeline(homeTimeline); + homeTimeline = await this.client.fetchHomeTimeline(50); + this.client.cacheTimeline(homeTimeline); } const formattedHomeTimeline = @@ -166,8 +168,11 @@ export class TwitterPostClient extends ClientBase { } try { - const result = await this.requestQueue.add( - async () => await this.twitterClient.sendTweet(content) + elizaLogger.log(`Posting new tweet:\n ${content}`); + + const result = await this.client.requestQueue.add( + async () => + await this.client.twitterClient.sendTweet(content) ); const body = await result.json(); const tweetResult = body.data.create_tweet.tweet_results.result; @@ -189,6 +194,8 @@ export class TwitterPostClient extends ClientBase { videos: [], } as Tweet; + elizaLogger.log(`Tweet posted:\n ${tweet.permanentUrl}`); + const roomId = stringToUuid( tweet.conversationId + "-" + this.runtime.agentId ); @@ -199,7 +206,7 @@ export class TwitterPostClient extends ClientBase { roomId ); - await this.cacheTweet(tweet); + await this.client.cacheTweet(tweet); await this.runtime.messageManager.createMemory({ id: stringToUuid(tweet.id + "-" + this.runtime.agentId), From bb2c4ba93bbda48ee6b1cbac9dacf9842079b2c4 Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 04:17:50 +0000 Subject: [PATCH 03/10] fix --- packages/client-twitter/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/client-twitter/src/index.ts b/packages/client-twitter/src/index.ts index 332f35441ef..5bed063a1f9 100644 --- a/packages/client-twitter/src/index.ts +++ b/packages/client-twitter/src/index.ts @@ -27,8 +27,8 @@ export const TwitterClientInterface: Client = { await manager.client.init(); - await this.post.start(); - await this.interaction.start(); + await manager.post.start(); + await manager.interaction.start(); return manager; }, From 4ebfbb55a6b80aef3af5a09e154e0b4a95632389 Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 04:28:53 +0000 Subject: [PATCH 04/10] save post schedule into cache --- packages/client-twitter/src/post.ts | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/client-twitter/src/post.ts b/packages/client-twitter/src/post.ts index 20110730996..6c640e44770 100644 --- a/packages/client-twitter/src/post.ts +++ b/packages/client-twitter/src/post.ts @@ -66,8 +66,17 @@ export class TwitterPostClient { client: ClientBase; runtime: IAgentRuntime; - async start(postImmediately: boolean = true) { - const generateNewTweetLoop = () => { + async start(postImmediately: boolean = false) { + const generateNewTweetLoop = async () => { + const lastPost = await this.runtime.cacheManager.get<{ + timestamp: number; + }>( + "twitter/" + + this.runtime.getSetting("TWITTER_USERNAME") + + "/lastPost" + ); + + const lastPostTimestamp = lastPost?.timestamp ?? 0; const minMinutes = parseInt(this.runtime.getSetting("POST_INTERVAL_MIN")) || 90; const maxMinutes = @@ -77,8 +86,11 @@ export class TwitterPostClient { minMinutes; const delay = randomMinutes * 60 * 1000; + if (Date.now() > lastPostTimestamp + delay) { + await this.generateNewTweet(); + } + setTimeout(() => { - this.generateNewTweet(); generateNewTweetLoop(); // Set up next iteration }, delay); @@ -88,6 +100,7 @@ export class TwitterPostClient { if (postImmediately) { this.generateNewTweet(); } + generateNewTweetLoop(); } @@ -194,6 +207,16 @@ export class TwitterPostClient { videos: [], } as Tweet; + await this.runtime.cacheManager.set( + "twitter/" + + this.runtime.getSetting("TWITTER_USERNAME") + + "/lastPost", + { + id: tweet.id, + timestamp: Date.now(), + } + ); + elizaLogger.log(`Tweet posted:\n ${tweet.permanentUrl}`); const roomId = stringToUuid( From cbaea9ec89f741bc52626c3739911bede57e79a3 Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 04:58:34 +0000 Subject: [PATCH 05/10] cache new generated post --- packages/client-twitter/src/post.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/client-twitter/src/post.ts b/packages/client-twitter/src/post.ts index 6c640e44770..51602dcebf6 100644 --- a/packages/client-twitter/src/post.ts +++ b/packages/client-twitter/src/post.ts @@ -217,6 +217,11 @@ export class TwitterPostClient { } ); + await this.client.cacheTweet(tweet); + + homeTimeline.push(tweet); + await this.client.cacheTimeline(homeTimeline); + elizaLogger.log(`Tweet posted:\n ${tweet.permanentUrl}`); const roomId = stringToUuid( From 5dc81e22bb2fc48d00dd5e9a85aee3897b803ea3 Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 04:59:29 +0000 Subject: [PATCH 06/10] cache profile use ellizaLogger --- packages/client-twitter/src/base.ts | 38 ++++++++++++++++----- packages/client-twitter/src/interactions.ts | 23 ++++++------- packages/client-twitter/src/post.ts | 5 ++- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/packages/client-twitter/src/base.ts b/packages/client-twitter/src/base.ts index bdf29173c36..bd78a30695e 100644 --- a/packages/client-twitter/src/base.ts +++ b/packages/client-twitter/src/base.ts @@ -23,6 +23,13 @@ export function extractAnswer(text: string): string { return text.slice(startIndex, endIndex); } +type TwitterProfile = { + username: string; + screenName: string; + bio: string; + nicknames: string[]; +}; + class RequestQueue { private queue: (() => Promise)[] = []; private processing: boolean = false; @@ -171,11 +178,11 @@ export class ClientBase extends EventEmitter { let loggedInWaits = 0; + elizaLogger.log("Waiting for Twitter login"); while (!(await this.twitterClient.isLoggedIn())) { - console.log("Waiting for Twitter login"); await new Promise((resolve) => setTimeout(resolve, 2000)); if (loggedInWaits > 10) { - console.error("Failed to login to Twitter"); + elizaLogger.error("Failed to login to Twitter"); await this.twitterClient.login( this.runtime.getSetting("TWITTER_USERNAME"), this.runtime.getSetting("TWITTER_PASSWORD"), @@ -190,28 +197,28 @@ export class ClientBase extends EventEmitter { } const userId = await this.requestQueue.add(async () => { // wait 3 seconds before getting the user id - await new Promise((resolve) => setTimeout(resolve, 10000)); + // await new Promise((resolve) => setTimeout(resolve, 10000)); try { return await this.twitterClient.getUserIdByScreenName( this.runtime.getSetting("TWITTER_USERNAME") ); } catch (error) { - console.error("Error getting user ID:", error); + elizaLogger.error("Error getting user ID:", error); return null; } }); if (!userId) { - console.error("Failed to get user ID"); + elizaLogger.error("Failed to get user ID"); return; } elizaLogger.log("Twitter user ID:", userId); this.twitterUserId = userId; // Initialize Twitter profile - const profile = await this.initializeProfile(); - if (profile) { - // console.log("Twitter profile initialized:", profile); + const profile = await this.loadProfile(); + if (profile) { + elizaLogger.log("Twitter profile loaded:", profile); // Store profile info for use in responses this.runtime.character = { ...this.runtime.character, @@ -222,6 +229,8 @@ export class ClientBase extends EventEmitter { nicknames: profile.nicknames, }, }; + } else { + throw new Error("Failed to load profile"); } await this.populateTimeline(); @@ -596,13 +605,19 @@ export class ClientBase extends EventEmitter { ); } - async initializeProfile() { + async loadProfile(): Promise { const username = this.runtime.getSetting("TWITTER_USERNAME"); if (!username) { console.error("Twitter username not configured"); return; } + const cached = await this.runtime.cacheManager.get( + `twitter/${username}/profile` + ); + + if (cached) return cached; + try { const profile = await this.requestQueue.add(async () => { const profile = await this.twitterClient.getProfile(username); @@ -621,6 +636,11 @@ export class ClientBase extends EventEmitter { }; }); + this.runtime.cacheManager.set( + `twitter/${username}/profile`, + profile + ); + return profile; } catch (error) { console.error("Error fetching Twitter profile:", error); diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index 1e19699fdd0..60d1f78b4c1 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -118,9 +118,6 @@ export class TwitterInteractionClient { // de-duplicate tweetCandidates with a set const uniqueTweetCandidates = [...new Set(tweetCandidates)]; - - console.log({ twitterUserId: this.client.twitterUserId }); - // Sort tweet candidates by ID in ascending order uniqueTweetCandidates .sort((a, b) => a.id.localeCompare(b.id)) @@ -128,7 +125,6 @@ export class TwitterInteractionClient { // for each tweet candidate, handle the tweet for (const tweet of uniqueTweetCandidates) { - // console.log("tweet:", tweet); if ( !this.client.lastCheckedTweetId || parseInt(tweet.id) > this.client.lastCheckedTweetId @@ -393,19 +389,19 @@ export class TwitterInteractionClient { const visited: Set = new Set(); async function processThread(currentTweet: Tweet, depth: number = 0) { - console.log("Processing tweet:", { + elizaLogger.log("Processing tweet:", { id: currentTweet.id, inReplyToStatusId: currentTweet.inReplyToStatusId, depth: depth, }); if (!currentTweet) { - console.log("No current tweet found for thread building"); + elizaLogger.log("No current tweet found for thread building"); return; } if (depth >= maxReplies) { - console.log("Reached maximum reply depth", depth); + elizaLogger.log("Reached maximum reply depth", depth); return; } @@ -469,7 +465,7 @@ export class TwitterInteractionClient { }); if (currentTweet.inReplyToStatusId) { - console.log( + elizaLogger.log( "Fetching parent tweet:", currentTweet.inReplyToStatusId ); @@ -479,25 +475,28 @@ export class TwitterInteractionClient { ); if (parentTweet) { - console.log("Found parent tweet:", { + elizaLogger.log("Found parent tweet:", { id: parentTweet.id, text: parentTweet.text?.slice(0, 50), }); await processThread(parentTweet, depth + 1); } else { - console.log( + elizaLogger.log( "No parent tweet found for:", currentTweet.inReplyToStatusId ); } } catch (error) { - console.log("Error fetching parent tweet:", { + elizaLogger.log("Error fetching parent tweet:", { tweetId: currentTweet.inReplyToStatusId, error, }); } } else { - console.log("Reached end of reply chain at:", currentTweet.id); + elizaLogger.log( + "Reached end of reply chain at:", + currentTweet.id + ); } } diff --git a/packages/client-twitter/src/post.ts b/packages/client-twitter/src/post.ts index 51602dcebf6..5faa1b9cac3 100644 --- a/packages/client-twitter/src/post.ts +++ b/packages/client-twitter/src/post.ts @@ -221,7 +221,6 @@ export class TwitterPostClient { homeTimeline.push(tweet); await this.client.cacheTimeline(homeTimeline); - elizaLogger.log(`Tweet posted:\n ${tweet.permanentUrl}`); const roomId = stringToUuid( @@ -250,10 +249,10 @@ export class TwitterPostClient { createdAt: tweet.timestamp * 1000, }); } catch (error) { - console.error("Error sending tweet:", error); + elizaLogger.error("Error sending tweet:", error); } } catch (error) { - console.error("Error generating new tweet:", error); + elizaLogger.error("Error generating new tweet:", error); } } } From f31ab65e8cffe471e6c7df8bf14c8d537fc497ef Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 05:00:05 +0000 Subject: [PATCH 07/10] add log when creating memory --- packages/core/src/memory.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/memory.ts b/packages/core/src/memory.ts index ea91a615604..e8da49858c5 100644 --- a/packages/core/src/memory.ts +++ b/packages/core/src/memory.ts @@ -165,6 +165,7 @@ export class MemoryManager implements IMemoryManager { return; } + elizaLogger.log("Creating Memory", memory.id, memory.content.text); await this.runtime.databaseAdapter.createMemory( memory, this.tableName, From 4a0edc389324890c8267e4bb308d88dd4a95e8cf Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 05:01:48 +0000 Subject: [PATCH 08/10] add logs when generating text --- packages/core/src/generation.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 448b70518dd..a96b1106cf8 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -61,6 +61,8 @@ export async function generateText({ return ""; } + elizaLogger.log("Genarating text..."); + const provider = runtime.modelProvider; const endpoint = runtime.character.modelEndpointOverride || models[provider].endpoint; @@ -700,6 +702,8 @@ export async function generateMessageResponse({ let retryLength = 1000; // exponential backoff while (true) { try { + elizaLogger.log("Genarating message response.."); + const response = await generateText({ runtime, context, From 83885f87131416e3a9a99ffbafd4e4afb05f0857 Mon Sep 17 00:00:00 2001 From: Bruno Galego Date: Thu, 21 Nov 2024 05:50:18 +0000 Subject: [PATCH 09/10] use profile, other improvements --- packages/client-twitter/src/base.ts | 154 ++++++++------------ packages/client-twitter/src/interactions.ts | 13 +- packages/core/src/runtime.ts | 12 +- 3 files changed, 76 insertions(+), 103 deletions(-) diff --git a/packages/client-twitter/src/base.ts b/packages/client-twitter/src/base.ts index bd78a30695e..58c379faf5a 100644 --- a/packages/client-twitter/src/base.ts +++ b/packages/client-twitter/src/base.ts @@ -24,6 +24,7 @@ export function extractAnswer(text: string): string { } type TwitterProfile = { + id: string; username: string; screenName: string; bio: string; @@ -90,7 +91,8 @@ export class ClientBase extends EventEmitter { temperature: number = 0.5; requestQueue: RequestQueue = new RequestQueue(); - twitterUserId: string; + + profile: TwitterProfile | null; async cacheTweet(tweet: Tweet): Promise { if (!tweet) { @@ -151,7 +153,11 @@ export class ClientBase extends EventEmitter { async init() { //test - await this.loadCachedLatestCheckedTweetId(); + const username = this.runtime.getSetting("TWITTER_USERNAME"); + + if (!username) { + throw new Error("Twitter username not configured"); + } // Check for Twitter cookies if (this.runtime.getSetting("TWITTER_COOKIES")) { const cookiesArray = JSON.parse( @@ -160,79 +166,54 @@ export class ClientBase extends EventEmitter { await this.setCookiesFromArray(cookiesArray); } else { - const cachedCookies = await this.getCachedCookies(); + const cachedCookies = await this.getCachedCookies(username); if (cachedCookies) { await this.setCookiesFromArray(cachedCookies); - } else { - await this.twitterClient.login( - this.runtime.getSetting("TWITTER_USERNAME"), - this.runtime.getSetting("TWITTER_PASSWORD"), - this.runtime.getSetting("TWITTER_EMAIL"), - this.runtime.getSetting("TWITTER_2FA_SECRET") - ); - elizaLogger.log("Logged in to Twitter"); - const cookies = await this.twitterClient.getCookies(); - await this.cacheCookies(cookies); } } - let loggedInWaits = 0; - elizaLogger.log("Waiting for Twitter login"); - while (!(await this.twitterClient.isLoggedIn())) { - await new Promise((resolve) => setTimeout(resolve, 2000)); - if (loggedInWaits > 10) { - elizaLogger.error("Failed to login to Twitter"); - await this.twitterClient.login( - this.runtime.getSetting("TWITTER_USERNAME"), - this.runtime.getSetting("TWITTER_PASSWORD"), - this.runtime.getSetting("TWITTER_EMAIL"), - this.runtime.getSetting("TWITTER_2FA_SECRET") - ); + while (true) { + await this.twitterClient.login( + username, + this.runtime.getSetting("TWITTER_PASSWORD"), + this.runtime.getSetting("TWITTER_EMAIL"), + this.runtime.getSetting("TWITTER_2FA_SECRET") + ); + + if (await this.twitterClient.isLoggedIn()) { const cookies = await this.twitterClient.getCookies(); - await this.cacheCookies(cookies); - loggedInWaits = 0; - } - loggedInWaits++; - } - const userId = await this.requestQueue.add(async () => { - // wait 3 seconds before getting the user id - // await new Promise((resolve) => setTimeout(resolve, 10000)); - try { - return await this.twitterClient.getUserIdByScreenName( - this.runtime.getSetting("TWITTER_USERNAME") - ); - } catch (error) { - elizaLogger.error("Error getting user ID:", error); - return null; + await this.cacheCookies(username, cookies); + break; } - }); - if (!userId) { - elizaLogger.error("Failed to get user ID"); - return; + + elizaLogger.error("Failed to login to Twitter trying again..."); + + await new Promise((resolve) => setTimeout(resolve, 2000)); } - elizaLogger.log("Twitter user ID:", userId); - this.twitterUserId = userId; // Initialize Twitter profile - const profile = await this.loadProfile(); + this.profile = await this.fetchProfile(username); - if (profile) { - elizaLogger.log("Twitter profile loaded:", profile); + if (this.profile) { + elizaLogger.log("Twitter user ID:", this.profile.id); + elizaLogger.log( + "Twitter loaded:", + JSON.stringify(this.profile, null, 10) + ); // Store profile info for use in responses - this.runtime.character = { - ...this.runtime.character, - twitterProfile: { - username: profile.username, - screenName: profile.screenName, - bio: profile.bio, - nicknames: profile.nicknames, - }, + this.runtime.character.twitterProfile = { + id: this.profile.id, + username: this.profile.username, + screenName: this.profile.screenName, + bio: this.profile.bio, + nicknames: this.profile.nicknames, }; } else { throw new Error("Failed to load profile"); } + await this.loadLatestCheckedTweetId(); await this.populateTimeline(); } @@ -245,7 +226,7 @@ export class ClientBase extends EventEmitter { return homeTimeline .filter((t) => t.__typename !== "TweetWithVisibilityResults") .map((tweet) => { - console.log("tweet is", tweet); + // console.log("tweet is", tweet); const obj = { id: tweet.rest_id, name: @@ -281,9 +262,7 @@ export class ClientBase extends EventEmitter { ) ?? [], }; - - console.log("obj is", obj); - + // console.log("obj is", obj); return obj; }); } @@ -316,11 +295,11 @@ export class ClientBase extends EventEmitter { ); return (result ?? { tweets: [] }) as QueryTweetsResponse; } catch (error) { - console.error("Error fetching search tweets:", error); + elizaLogger.error("Error fetching search tweets:", error); return { tweets: [] }; } } catch (error) { - console.error("Error fetching search tweets:", error); + elizaLogger.error("Error fetching search tweets:", error); return { tweets: [] }; } } @@ -370,7 +349,7 @@ export class ClientBase extends EventEmitter { tweet.conversationId + "-" + this.runtime.agentId ); const tweetuserId = - tweet.userId === this.twitterUserId + tweet.userId === this.profile.id ? this.runtime.agentId : stringToUuid(tweet.userId); @@ -482,7 +461,7 @@ export class ClientBase extends EventEmitter { tweet.conversationId + "-" + this.runtime.agentId ); const tweetuserId = - tweet.userId === this.twitterUserId + tweet.userId === this.profile.id ? this.runtime.agentId : stringToUuid(tweet.userId); @@ -560,10 +539,10 @@ export class ClientBase extends EventEmitter { } } - async loadCachedLatestCheckedTweetId(): Promise { + async loadLatestCheckedTweetId(): Promise { const latestCheckedTweetId = await this.runtime.cacheManager.get( - `twitter/${this.runtime.getSetting("TWITTER_USERNAME")}/latest_checked_tweet_id` + `twitter/${this.profile.username}/latest_checked_tweet_id` ); if (latestCheckedTweetId) { @@ -574,7 +553,7 @@ export class ClientBase extends EventEmitter { async cacheLatestCheckedTweetId() { if (this.lastCheckedTweetId) { await this.runtime.cacheManager.set( - `twitter/${this.runtime.getSetting("TWITTER_USERNAME")}/latest_checked_tweet_id`, + `twitter/${this.profile.username}/latest_checked_tweet_id`, this.lastCheckedTweetId ); } @@ -582,36 +561,31 @@ export class ClientBase extends EventEmitter { async getCachedTimeline(): Promise { return await this.runtime.cacheManager.get( - `twitter/${this.runtime.getSetting("TWITTER_USERNAME")}/timeline` + `twitter/${this.profile.username}/timeline` ); } async cacheTimeline(timeline: Tweet[]) { await this.runtime.cacheManager.set( - `twitter/${this.runtime.getSetting("TWITTER_USERNAME")}/timeline`, + `twitter/${this.profile.username}/timeline`, timeline ); } - async getCachedCookies() { + async getCachedCookies(username: string) { return await this.runtime.cacheManager.get( - `twitter/${this.runtime.getSetting("TWITTER_USERNAME")}/cookies` + `twitter/${username}/cookies` ); } - async cacheCookies(cookies: any[]) { + + async cacheCookies(username: string, cookies: any[]) { await this.runtime.cacheManager.set( - `twitter/${this.runtime.getSetting("TWITTER_USERNAME")}/cookies`, + `twitter/${username}/cookies`, cookies ); } - async loadProfile(): Promise { - const username = this.runtime.getSetting("TWITTER_USERNAME"); - if (!username) { - console.error("Twitter username not configured"); - return; - } - + async fetchProfile(username: string): Promise { const cached = await this.runtime.cacheManager.get( `twitter/${username}/profile` ); @@ -621,7 +595,9 @@ export class ClientBase extends EventEmitter { try { const profile = await this.requestQueue.add(async () => { const profile = await this.twitterClient.getProfile(username); + // console.log({ profile }); return { + id: profile.userId, username, screenName: profile.name || this.runtime.character.name, bio: @@ -633,7 +609,7 @@ export class ClientBase extends EventEmitter { : "", nicknames: this.runtime.character.twitterProfile?.nicknames || [], - }; + } satisfies TwitterProfile; }); this.runtime.cacheManager.set( @@ -644,18 +620,8 @@ export class ClientBase extends EventEmitter { return profile; } catch (error) { console.error("Error fetching Twitter profile:", error); - return { - username: this.runtime.character.name, - screenName: username, - bio: - typeof this.runtime.character.bio === "string" - ? (this.runtime.character.bio as string) - : this.runtime.character.bio.length > 0 - ? this.runtime.character.bio[0] - : "", - nicknames: - this.runtime.character.twitterProfile?.nicknames || [], - }; + + return undefined; } } } diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index 60d1f78b4c1..e94750c13ca 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -105,7 +105,7 @@ export class TwitterInteractionClient { async handleTwitterInteractions() { elizaLogger.log("Checking Twitter interactions"); - const twitterUsername = this.runtime.getSetting("TWITTER_USERNAME"); + const twitterUsername = this.client.profile.username; try { // Check for mentions const tweetCandidates = ( @@ -121,7 +121,7 @@ export class TwitterInteractionClient { // Sort tweet candidates by ID in ascending order uniqueTweetCandidates .sort((a, b) => a.id.localeCompare(b.id)) - .filter((tweet) => tweet.userId !== this.client.twitterUserId); + .filter((tweet) => tweet.userId !== this.client.profile.id); // for each tweet candidate, handle the tweet for (const tweet of uniqueTweetCandidates) { @@ -136,7 +136,7 @@ export class TwitterInteractionClient { ); const userIdUUID = - tweet.userId === this.client.twitterUserId + tweet.userId === this.client.profile.id ? this.runtime.agentId : stringToUuid(tweet.userId!); @@ -189,17 +189,18 @@ export class TwitterInteractionClient { message: Memory; thread: Tweet[]; }) { - if (tweet.username === this.runtime.getSetting("TWITTER_USERNAME")) { + if (tweet.userId === this.client.profile.id) { // console.log("skipping tweet from bot itself", tweet.id); // Skip processing if the tweet is from the bot itself return; } if (!message.content.text) { - elizaLogger.log("skipping tweet with no text", tweet.id); + elizaLogger.log("Skipping Tweet with no text", tweet.id); return { text: "", action: "IGNORE" }; } - elizaLogger.log("handling tweet", tweet.id); + + elizaLogger.log("Processing Tweet: ", tweet.id); const formatTweet = (tweet: Tweet) => { return ` ID: ${tweet.id} From: ${tweet.name} (@${tweet.username}) diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index 49feae66580..419883a3d23 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -631,9 +631,15 @@ export class AgentRuntime implements IAgentRuntime { await this.databaseAdapter.getParticipantsForRoom(roomId); if (!participants.includes(userId)) { await this.databaseAdapter.addParticipant(userId, roomId); - elizaLogger.log( - `User ${userId} linked to room ${roomId} successfully.` - ); + if (userId === this.agentId) { + elizaLogger.log( + `Agent ${this.character.name} linked to room ${roomId} successfully.` + ); + } else { + elizaLogger.log( + `User ${userId} linked to room ${roomId} successfully.` + ); + } } } From 0c4d6df051078a4b599d18fc1c9f1c75086d5e3c Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Thu, 21 Nov 2024 18:20:55 +1100 Subject: [PATCH 10/10] type --- agent/src/index.ts | 4 +- pnpm-lock.yaml | 436 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 358 insertions(+), 82 deletions(-) diff --git a/agent/src/index.ts b/agent/src/index.ts index 0e36b570ee1..98f46fb2c38 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -30,7 +30,7 @@ import readline from "readline"; import yargs from "yargs"; import path from "path"; import { fileURLToPath } from "url"; -import { character } from "./character"; +import { character } from "./character.ts"; const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file const __dirname = path.dirname(__filename); // get the name of the directory @@ -315,7 +315,7 @@ const startAgents = async () => { try { for (const character of characters) { - await startAgent(character, directClient); + await startAgent(character, directClient as DirectClient); } } catch (error) { elizaLogger.error("Error starting agents:", error); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4092384721d..7c9a37734e2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -252,6 +252,9 @@ importers: '@ai16z/eliza': specifier: workspace:* version: link:../core + '@types/pg': + specifier: ^8.11.10 + version: 8.11.10 pg: specifier: ^8.13.1 version: 8.13.1 @@ -454,7 +457,7 @@ importers: version: 8.1.0 tsup: specifier: ^8.3.5 - version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.15))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) packages/client-telegram: dependencies: @@ -511,6 +514,18 @@ importers: '@ai-sdk/openai': specifier: 1.0.0-canary.3 version: 1.0.0-canary.3(zod@3.23.8) + '@ai16z/adapter-sqlite': + specifier: ^0.1.3 + version: 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0) + '@ai16z/adapter-sqljs': + specifier: ^0.1.3 + version: 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0) + '@ai16z/adapter-supabase': + specifier: ^0.1.3 + version: 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(utf-8-validate@5.0.10)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0) + '@ai16z/plugin-solana': + specifier: ^0.1.3 + version: 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(jiti@2.4.0)(postcss@8.4.49)(react@18.3.1)(rollup@2.79.2)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(terser@5.36.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)(yaml@2.6.1) '@anthropic-ai/sdk': specifier: ^0.30.1 version: 0.30.1(encoding@0.1.13) @@ -519,13 +534,16 @@ importers: version: 10.0.0 ai: specifier: ^3.4.23 - version: 3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.4))(svelte@5.2.4)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) + version: 3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) anthropic-vertex-ai: specifier: ^1.0.0 - version: 1.0.0(encoding@0.1.13)(zod@3.23.8) + version: 1.0.1(encoding@0.1.13)(zod@3.23.8) fastembed: specifier: ^1.14.1 version: 1.14.1 + fastestsmallesttextencoderdecoder: + specifier: ^1.0.22 + version: 1.0.22 gaxios: specifier: 6.7.1 version: 6.7.1(encoding@0.1.13) @@ -592,7 +610,7 @@ importers: version: 29.5.14 '@types/mocha': specifier: ^10.0.9 - version: 10.0.9 + version: 10.0.10 '@types/node': specifier: 22.8.4 version: 22.8.4 @@ -646,7 +664,7 @@ importers: version: 2.79.2 ts-jest: specifier: 29.2.5 - version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3) + version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3) @@ -1010,8 +1028,8 @@ packages: peerDependencies: zod: ^3.0.0 - '@ai-sdk/provider-utils@1.0.17': - resolution: {integrity: sha512-2VyeTH5DQ6AxqvwdyytKIeiZyYTyJffpufWjE67zM2sXMIHgYl7fivo8m5wVl6Cbf1dFPSGKq//C9s+lz+NHrQ==} + '@ai-sdk/provider-utils@1.0.20': + resolution: {integrity: sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -1037,8 +1055,8 @@ packages: zod: optional: true - '@ai-sdk/provider@0.0.22': - resolution: {integrity: sha512-smZ1/2jL/JSKnbhC6ama/PxI2D/psj+YAe0c0qpd5ComQCNFltg72VFf0rpUSFMmFuj1pCCNoBOCrvyl8HTZHQ==} + '@ai-sdk/provider@0.0.24': + resolution: {integrity: sha512-XMsNGJdGO+L0cxhhegtqZ8+T6nn4EoShS819OvCgI2kLbYTIvk0GWFGD0AXJmxkxs3DrpsJxKAFukFR7bvTkgQ==} engines: {node: '>=18'} '@ai-sdk/provider@0.0.26': @@ -1097,6 +1115,34 @@ packages: vue: optional: true + '@ai16z/adapter-sqlite@0.1.3': + resolution: {integrity: sha512-P05j0xo7HIVKM2xvf8HIzBt6Jkeb43nMdBWQ8BPg/rywcO4BzrJdSAg6vSvQEdkiLBy74KcB0JQW1gXp19Ss2g==} + peerDependencies: + whatwg-url: 7.1.0 + + '@ai16z/adapter-sqljs@0.1.3': + resolution: {integrity: sha512-ctVV7ZY33FIUKb7so4y8ZYLOtxSleclZbFs8xZ0TO6P1VMljrJz3Nsn0cZY1l5JSgDyolS1hV9Od8IaWzMisnQ==} + peerDependencies: + whatwg-url: 7.1.0 + + '@ai16z/adapter-supabase@0.1.3': + resolution: {integrity: sha512-jDnw0rBGxxyzQ+Q/esc/H+qBc27gvxWy8orkugqpgFiF0mB77h7ivSJqho11h13W8c4tCJGN7qvzh1pxFad+eg==} + peerDependencies: + whatwg-url: 7.1.0 + + '@ai16z/eliza@0.1.3': + resolution: {integrity: sha512-MeHvD44YKeYdnmI0k03RpS0COGPUsM5/nYoo7ih9vi7iXWFUWANEa3FReWr8rT51AOdHFXGdaLvTzngI527WjA==} + + '@ai16z/plugin-solana@0.1.3': + resolution: {integrity: sha512-q8d7j/HWwxe1TxeTdPQepMTJOFEt0/OP17ynXLw8OCrOeBrBDETC24tKB7CUD1CdNthEXDTzMK5ff5IiDZp5tw==} + peerDependencies: + whatwg-url: 7.1.0 + + '@ai16z/plugin-trustdb@0.1.3': + resolution: {integrity: sha512-okVpUxvMi9LiCd7oNp0nzXjnGKLHspmqtSg+wfQhSRcgx2gjPdUrzERve0TBS4U4MqY5KcNGhPJvp4H6s6KlMQ==} + peerDependencies: + whatwg-url: 7.1.0 + '@algolia/autocomplete-core@1.17.7': resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} @@ -2274,7 +2320,6 @@ packages: resolution: {integrity: sha512-hArn9FF5ZYi1IkxdJEVnJi+OxlwLV0NJYWpKXsmNOojtGtAZHxmsELA+MZlu2KW1F/K1/nt7lFOfcMXNYweq9w==} version: 0.17.0 engines: {node: '>=16.11.0'} - deprecated: This version uses deprecated encryption modes. Please use a newer version. '@discordjs/ws@1.1.1': resolution: {integrity: sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==} @@ -3619,8 +3664,8 @@ packages: '@octokit/openapi-types@22.2.0': resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - '@octokit/openapi-webhooks-types@8.4.0': - resolution: {integrity: sha512-ooxDnkRsFp07L+k+Giv+Qrmtjy+CnhCwtCDAMyB/hIwB1kIlO32HD1WNDnniezwUt5Rr8bwoPT+Or7PSYHQoOQ==} + '@octokit/openapi-webhooks-types@8.5.1': + resolution: {integrity: sha512-i3h1b5zpGSB39ffBbYdSGuAd0NhBAwPyA3QV3LYi/lx4lsbZiu7u2UHgXVUR6EpvOI8REOuVh1DZTRfHoJDvuQ==} '@octokit/plugin-enterprise-rest@6.0.1': resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==} @@ -3741,8 +3786,8 @@ packages: resolution: {integrity: sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ==} engines: {node: '>= 18'} - '@octokit/webhooks@13.4.0': - resolution: {integrity: sha512-3jQ+/zVgqwUYFqcakZ6BQT1eYql+mK91n4GhjWwdhyuBaLRQ6OHrRRJ26MHus51CqLZ8pwqfRdjc8jTBAeaVnA==} + '@octokit/webhooks@13.4.1': + resolution: {integrity: sha512-I5YPUtfWidh+OzyrlDahJsUpkpGK0kCTmDRbuqGmlCUzOtxdEkX3R4d6Cd08ijQYwkVXQJanPdbKuZBeV2NMaA==} engines: {node: '>= 18'} '@opendocsg/pdf2md@0.1.31': @@ -4571,8 +4616,8 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@swc/types@0.1.15': - resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} + '@swc/types@0.1.16': + resolution: {integrity: sha512-okcPxwxfdKUPrH15TbMcuqMJBu6QcxjHwyhYj1IPyaSAKHY7SHqhaS2UCANaOQ/+E6Dor50IgNpSbeJNqcuehw==} '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -4865,8 +4910,8 @@ packages: '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mocha@10.0.9': - resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==} + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -4908,6 +4953,9 @@ packages: resolution: {integrity: sha512-TRdIPqdsvKmPla44kVy4jv5Nt5vjMfVjbIEke1CRULIrwKNRC4lIiZvNYDJvbUMNCFPNIUcOKhXTyMJrX18IMA==} deprecated: This is a stub types definition. pdfjs-dist provides its own type definitions, so you do not need this installed. + '@types/pg@8.11.10': + resolution: {integrity: sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==} + '@types/phoenix@1.6.5': resolution: {integrity: sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w==} @@ -4935,9 +4983,6 @@ packages: '@types/react-router@5.1.20': resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - '@types/react@18.0.2': - resolution: {integrity: sha512-2poV9ReTwwV5ZNxkKyk7t6Vp/odeTfYI3vRjtDYWfUdEstx9mp26jzELfMBwV6gXg1irhHUnmZJH/dJW7xafcA==} - '@types/react@18.3.12': resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} @@ -4950,9 +4995,6 @@ packages: '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} - '@types/scheduler@0.23.0': - resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} - '@types/send@0.17.4': resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} @@ -5454,8 +5496,8 @@ packages: ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} - anthropic-vertex-ai@1.0.0: - resolution: {integrity: sha512-ME1e8kCNLVvVWrR6vB3zFlREEp1kRLmNZUC+oih+tziPkb/li5ESRvzb1eDV+zyhw7tZDDLy7numRllJwdkCEw==} + anthropic-vertex-ai@1.0.1: + resolution: {integrity: sha512-Gr/7O1YQTO3oOYtq1tScfkUZXePqZ+5qyoaBrPWgnOsS2VZBfS990mD8D7AIkt+rsx77RrheQ/TBp6c1trqRcw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -5916,8 +5958,8 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001680: - resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + caniuse-lite@1.0.30001683: + resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==} canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -10472,6 +10514,10 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} + pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + pg-pool@3.7.0: resolution: {integrity: sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==} peerDependencies: @@ -10484,6 +10530,10 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} + pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + engines: {node: '>=10'} + pg@8.13.1: resolution: {integrity: sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==} engines: {node: '>= 8.0.0'} @@ -11210,18 +11260,37 @@ packages: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} + postgres-array@3.0.2: + resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} + engines: {node: '>=12'} + postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} + postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -12479,8 +12548,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.2.4: - resolution: {integrity: sha512-hsab3Inx/HKV6Y/FUwtX8yCkt+nl6n46zC7Z6y7VWoDFhJWEQ453vP0KmDL42cLm9Q92nZyOE+izANqjss61/A==} + svelte@5.2.7: + resolution: {integrity: sha512-cEhPGuLHiH2+Z8B1FwQgiZJgA39uUmJR4516TKrM5zrp0/cuwJkfhUfcTxhAkznanAF5fXUKzvYR4o+Ksx3ZCQ==} engines: {node: '>=18'} svg-parser@2.0.4: @@ -12671,11 +12740,11 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tldts-core@6.1.61: - resolution: {integrity: sha512-In7VffkDWUPgwa+c9picLUxvb0RltVwTkSgMNFgvlGSWveCzGBemBqTsgJCL4EDFWZ6WH0fKTsot6yNhzy3ZzQ==} + tldts-core@6.1.62: + resolution: {integrity: sha512-ohONqbfobpuaylhqFbtCzc0dFFeNz85FVKSesgT8DS9OV3a25Yj730pTj7/dDtCqmgoCgEj6gDiU9XxgHKQlBw==} - tldts-experimental@6.1.61: - resolution: {integrity: sha512-1plwEyCpyYtVsZVtC169C5bStRlDk3cIniMHUeNmAJOjmQGx7SnLM8kS06PQAHx9PPY4Jm1VS6IXZzPC53XpbQ==} + tldts-experimental@6.1.62: + resolution: {integrity: sha512-HQAtXbhAaCvqo7eV7q0vdrUO6rPkN1Mzjc2MPnxHzjkMz/YQPfiqWFece8Txni0NRnFaZdMdRYl7cSSO95TlFA==} tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} @@ -13684,9 +13753,9 @@ snapshots: '@ai-sdk/provider-utils': 2.0.0-canary.3(zod@3.23.8) zod: 3.23.8 - '@ai-sdk/provider-utils@1.0.17(zod@3.23.8)': + '@ai-sdk/provider-utils@1.0.20(zod@3.23.8)': dependencies: - '@ai-sdk/provider': 0.0.22 + '@ai-sdk/provider': 0.0.24 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 @@ -13711,7 +13780,7 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/provider@0.0.22': + '@ai-sdk/provider@0.0.24': dependencies: json-schema: 0.4.0 @@ -13740,13 +13809,13 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/svelte@0.0.57(svelte@5.2.4)(zod@3.23.8)': + '@ai-sdk/svelte@0.0.57(svelte@5.2.7)(zod@3.23.8)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) - sswr: 2.1.0(svelte@5.2.4) + sswr: 2.1.0(svelte@5.2.7) optionalDependencies: - svelte: 5.2.4 + svelte: 5.2.7 transitivePeerDependencies: - zod @@ -13770,6 +13839,178 @@ snapshots: transitivePeerDependencies: - zod + '@ai16z/adapter-sqlite@0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)': + dependencies: + '@ai16z/eliza': 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3)) + '@types/better-sqlite3': 7.6.11 + better-sqlite3: 11.5.0 + sqlite-vec: 0.1.4-alpha.2 + whatwg-url: 7.1.0 + transitivePeerDependencies: + - '@google-cloud/vertexai' + - encoding + - react + - solid-js + - sswr + - supports-color + - svelte + - vue + + '@ai16z/adapter-sqljs@0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)': + dependencies: + '@ai16z/eliza': 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3)) + '@types/sql.js': 1.4.9 + sql.js: 1.12.0 + uuid: 11.0.2 + whatwg-url: 7.1.0 + transitivePeerDependencies: + - '@google-cloud/vertexai' + - encoding + - react + - solid-js + - sswr + - supports-color + - svelte + - vue + + '@ai16z/adapter-supabase@0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(utf-8-validate@5.0.10)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)': + dependencies: + '@ai16z/eliza': 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3)) + '@supabase/supabase-js': 2.46.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + whatwg-url: 7.1.0 + transitivePeerDependencies: + - '@google-cloud/vertexai' + - bufferutil + - encoding + - react + - solid-js + - sswr + - supports-color + - svelte + - utf-8-validate + - vue + + '@ai16z/eliza@0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))': + dependencies: + '@ai-sdk/anthropic': 0.0.53(zod@3.23.8) + '@ai-sdk/google': 0.0.55(zod@3.23.8) + '@ai-sdk/google-vertex': 0.0.42(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(zod@3.23.8) + '@ai-sdk/groq': 0.0.3(zod@3.23.8) + '@ai-sdk/openai': 1.0.0-canary.3(zod@3.23.8) + '@anthropic-ai/sdk': 0.30.1(encoding@0.1.13) + '@types/uuid': 10.0.0 + ai: 3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) + anthropic-vertex-ai: 1.0.1(encoding@0.1.13)(zod@3.23.8) + fastembed: 1.14.1 + gaxios: 6.7.1(encoding@0.1.13) + glob: 11.0.0 + js-sha1: 0.7.0 + ollama-ai-provider: 0.16.1(zod@3.23.8) + openai: 4.69.0(encoding@0.1.13)(zod@3.23.8) + tiktoken: 1.0.17 + tinyld: 1.3.4 + together-ai: 0.7.0(encoding@0.1.13) + unique-names-generator: 4.7.1 + uuid: 11.0.2 + zod: 3.23.8 + transitivePeerDependencies: + - '@google-cloud/vertexai' + - encoding + - react + - solid-js + - sswr + - supports-color + - svelte + - vue + + '@ai16z/plugin-solana@0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(jiti@2.4.0)(postcss@8.4.49)(react@18.3.1)(rollup@2.79.2)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(terser@5.36.0)(typescript@5.6.3)(utf-8-validate@5.0.10)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)(yaml@2.6.1)': + dependencies: + '@ai16z/eliza': 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3)) + '@ai16z/plugin-trustdb': 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(encoding@0.1.13)(jiti@2.4.0)(postcss@8.4.49)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(terser@5.36.0)(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)(yaml@2.6.1) + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@solana/spl-token': 0.4.9(@solana/web3.js@1.95.4(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + bignumber: 1.1.0 + bignumber.js: 9.1.2 + bs58: 6.0.0 + node-cache: 5.1.2 + pumpdotfun-sdk: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@2.79.2)(typescript@5.6.3)(utf-8-validate@5.0.10) + tsup: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) + whatwg-url: 7.1.0 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@google-cloud/vertexai' + - '@microsoft/api-extractor' + - '@swc/core' + - '@types/node' + - '@vitest/browser' + - '@vitest/ui' + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - happy-dom + - jiti + - jsdom + - less + - lightningcss + - msw + - postcss + - react + - rollup + - sass + - sass-embedded + - solid-js + - sswr + - stylus + - sugarss + - supports-color + - svelte + - terser + - tsx + - typescript + - utf-8-validate + - vue + - yaml + + '@ai16z/plugin-trustdb@0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(encoding@0.1.13)(jiti@2.4.0)(postcss@8.4.49)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(terser@5.36.0)(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))(whatwg-url@7.1.0)(yaml@2.6.1)': + dependencies: + '@ai16z/eliza': 0.1.3(@google-cloud/vertexai@1.9.0(encoding@0.1.13))(encoding@0.1.13)(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3)) + dompurify: 3.2.0 + tsup: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.15))(jiti@2.4.0)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.1) + uuid: 11.0.2 + vitest: 2.1.5(@types/node@22.8.4)(terser@5.36.0) + whatwg-url: 7.1.0 + transitivePeerDependencies: + - '@edge-runtime/vm' + - '@google-cloud/vertexai' + - '@microsoft/api-extractor' + - '@swc/core' + - '@types/node' + - '@vitest/browser' + - '@vitest/ui' + - encoding + - happy-dom + - jiti + - jsdom + - less + - lightningcss + - msw + - postcss + - react + - sass + - sass-embedded + - solid-js + - sswr + - stylus + - sugarss + - supports-color + - svelte + - terser + - tsx + - typescript + - vue + - yaml + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.15.0)(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.15.0)(algoliasearch@5.15.0)(search-insights@2.17.3) @@ -14871,7 +15112,7 @@ snapshots: '@cliqz/adblocker': 1.34.0 '@cliqz/adblocker-content': 1.34.0 playwright: 1.48.2 - tldts-experimental: 6.1.61 + tldts-experimental: 6.1.62 '@cliqz/adblocker@1.34.0': dependencies: @@ -14882,7 +15123,7 @@ snapshots: '@remusao/smaz': 1.10.0 '@types/chrome': 0.0.278 '@types/firefox-webext-browser': 120.0.4 - tldts-experimental: 6.1.61 + tldts-experimental: 6.1.62 '@colors/colors@1.5.0': optional: true @@ -17202,7 +17443,7 @@ snapshots: '@octokit/oauth-app': 7.1.3 '@octokit/plugin-paginate-rest': 11.3.5(@octokit/core@6.1.2) '@octokit/types': 13.6.1 - '@octokit/webhooks': 13.4.0 + '@octokit/webhooks': 13.4.1 '@octokit/auth-app@7.1.3': dependencies: @@ -17343,7 +17584,7 @@ snapshots: '@octokit/openapi-types@22.2.0': {} - '@octokit/openapi-webhooks-types@8.4.0': {} + '@octokit/openapi-webhooks-types@8.5.1': {} '@octokit/plugin-enterprise-rest@6.0.1': {} @@ -17480,9 +17721,9 @@ snapshots: '@octokit/webhooks-methods@5.1.0': {} - '@octokit/webhooks@13.4.0': + '@octokit/webhooks@13.4.1': dependencies: - '@octokit/openapi-webhooks-types': 8.4.0 + '@octokit/openapi-webhooks-types': 8.5.1 '@octokit/request-error': 6.1.5 '@octokit/webhooks-methods': 5.1.0 @@ -18389,7 +18630,7 @@ snapshots: '@swc/core@1.9.2(@swc/helpers@0.5.15)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.15 + '@swc/types': 0.1.16 optionalDependencies: '@swc/core-darwin-arm64': 1.9.2 '@swc/core-darwin-x64': 1.9.2 @@ -18409,7 +18650,7 @@ snapshots: dependencies: tslib: 2.8.0 - '@swc/types@0.1.15': + '@swc/types@0.1.16': dependencies: '@swc/counter': 0.1.3 @@ -18753,7 +18994,7 @@ snapshots: '@types/minimist@1.2.5': {} - '@types/mocha@10.0.9': {} + '@types/mocha@10.0.10': {} '@types/ms@0.7.34': {} @@ -18797,6 +19038,12 @@ snapshots: - encoding - supports-color + '@types/pg@8.11.10': + dependencies: + '@types/node': 22.8.4 + pg-protocol: 1.7.0 + pg-types: 4.0.2 + '@types/phoenix@1.6.5': {} '@types/prismjs@1.26.5': {} @@ -18814,7 +19061,7 @@ snapshots: '@types/react-router-config@5.0.11': dependencies: '@types/history': 4.7.11 - '@types/react': 18.0.2 + '@types/react': 18.3.12 '@types/react-router': 5.1.20 '@types/react-router-dom@5.3.3': @@ -18828,12 +19075,6 @@ snapshots: '@types/history': 4.7.11 '@types/react': 18.3.12 - '@types/react@18.0.2': - dependencies: - '@types/prop-types': 15.7.13 - '@types/scheduler': 0.23.0 - csstype: 3.1.3 - '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.13 @@ -18847,8 +19088,6 @@ snapshots: dependencies: '@types/node': 22.8.4 - '@types/scheduler@0.23.0': {} - '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 @@ -19375,13 +19614,13 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.4))(svelte@5.2.4)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8): + ai@3.4.33(openai@4.69.0(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.7))(svelte@5.2.7)(vue@3.5.13(typescript@5.6.3))(zod@3.23.8): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.23.8) '@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.23.8) '@ai-sdk/solid': 0.0.54(zod@3.23.8) - '@ai-sdk/svelte': 0.0.57(svelte@5.2.4)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@5.2.7)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.6.3))(zod@3.23.8) '@opentelemetry/api': 1.9.0 @@ -19393,8 +19632,8 @@ snapshots: optionalDependencies: openai: 4.69.0(encoding@0.1.13)(zod@3.23.8) react: 18.3.1 - sswr: 2.1.0(svelte@5.2.4) - svelte: 5.2.4 + sswr: 2.1.0(svelte@5.2.7) + svelte: 5.2.7 zod: 3.23.8 transitivePeerDependencies: - solid-js @@ -19506,10 +19745,10 @@ snapshots: ansicolors@0.3.2: {} - anthropic-vertex-ai@1.0.0(encoding@0.1.13)(zod@3.23.8): + anthropic-vertex-ai@1.0.1(encoding@0.1.13)(zod@3.23.8): dependencies: - '@ai-sdk/provider': 0.0.22 - '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) + '@ai-sdk/provider': 0.0.24 + '@ai-sdk/provider-utils': 1.0.20(zod@3.23.8) google-auth-library: 9.15.0(encoding@0.1.13) zod: 3.23.8 transitivePeerDependencies: @@ -19625,7 +19864,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001683 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -19916,7 +20155,7 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001683 electron-to-chromium: 1.5.63 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -20060,11 +20299,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001683 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001680: {} + caniuse-lite@1.0.30001683: {} canvas@2.11.2(encoding@0.1.13): dependencies: @@ -21872,7 +22111,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -24925,7 +25164,7 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.1.2 + minimatch: 3.0.5 mute-stream@0.0.8: {} @@ -25434,7 +25673,7 @@ snapshots: ora@5.3.0: dependencies: bl: 4.1.0 - chalk: 4.1.2 + chalk: 4.1.0 cli-cursor: 3.1.0 cli-spinners: 2.6.1 is-interactive: 1.0.0 @@ -25761,6 +26000,8 @@ snapshots: pg-int8@1.0.1: {} + pg-numeric@1.0.2: {} + pg-pool@3.7.0(pg@8.13.1): dependencies: pg: 8.13.1 @@ -25775,6 +26016,16 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + pg@8.13.1: dependencies: pg-connection-string: 2.7.0 @@ -26545,14 +26796,26 @@ snapshots: postgres-array@2.0.0: {} + postgres-array@3.0.2: {} + postgres-bytea@1.0.0: {} + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + postgres-date@1.0.7: {} + postgres-date@2.1.0: {} + postgres-interval@1.2.0: dependencies: xtend: 4.0.2 + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + prebuild-install@7.1.2: dependencies: detect-libc: 2.0.3 @@ -26716,6 +26979,20 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 + pumpdotfun-sdk@1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@2.79.2)(typescript@5.6.3)(utf-8-validate@5.0.10): + dependencies: + '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@rollup/plugin-json': 6.1.0(rollup@2.79.2) + '@solana/spl-token': 0.4.6(@solana/web3.js@1.95.4(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@solana/web3.js': 1.95.4(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - fastestsmallesttextencoderdecoder + - rollup + - typescript + - utf-8-validate + pumpdotfun-sdk@1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.27.3)(typescript@5.6.3)(utf-8-validate@5.0.10): dependencies: '@coral-xyz/anchor': 0.30.1(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) @@ -27937,9 +28214,9 @@ snapshots: dependencies: minipass: 7.1.2 - sswr@2.1.0(svelte@5.2.4): + sswr@2.1.0(svelte@5.2.7): dependencies: - svelte: 5.2.4 + svelte: 5.2.7 swrev: 4.0.0 stack-utils@2.0.6: @@ -28130,7 +28407,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.2.4: + svelte@5.2.7: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -28362,11 +28639,11 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.61: {} + tldts-core@6.1.62: {} - tldts-experimental@6.1.61: + tldts-experimental@6.1.62: dependencies: - tldts-core: 6.1.61 + tldts-core: 6.1.62 tmp@0.0.33: dependencies: @@ -28447,7 +28724,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.24.0)(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3): + ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -28465,7 +28742,6 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.0) - esbuild: 0.24.0 ts-mixer@6.0.4: {}