From d778e603df542dac737d42157f56262a9c76afbf Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 08:43:51 -0600 Subject: [PATCH 01/26] use vite --- package.json | 4 +- packages/adapter-sqlite/package.json | 4 + packages/core/jest.config.js | 3 + packages/core/package.json | 4 +- packages/core/src/runtime.ts | 10 +- packages/core/src/tests/actions.test.ts | 268 ++++++++++++++++++++++++ packages/core/src/tests/token.test.ts | 81 +++++++ pnpm-lock.yaml | 16 ++ 8 files changed, 383 insertions(+), 7 deletions(-) create mode 100644 packages/core/src/tests/actions.test.ts create mode 100644 packages/core/src/tests/token.test.ts diff --git a/package.json b/package.json index 8048b4e7517..398cf414e6b 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,9 @@ "only-allow": "^1.2.1", "prettier": "^3.3.3", "typedoc": "^0.26.11", - "typescript": "5.6.3" + "typescript": "5.6.3", + "vite": "^5.4.11", + "vitest": "^2.1.5" }, "pnpm": { "overrides": { diff --git a/packages/adapter-sqlite/package.json b/packages/adapter-sqlite/package.json index 9fa7c7a5f35..56491b57a55 100644 --- a/packages/adapter-sqlite/package.json +++ b/packages/adapter-sqlite/package.json @@ -19,5 +19,9 @@ }, "peerDependencies": { "whatwg-url": "7.1.0" + }, + "exports": { + ".": "./dist/index.js", + "./sqlite_vec": "./dist/sqlite_vec.js" } } diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js index 62c0deeb702..564378d9a24 100644 --- a/packages/core/jest.config.js +++ b/packages/core/jest.config.js @@ -22,5 +22,8 @@ export default { moduleNameMapper: { "^(\\.{1,2}/.*)\\.js$": "$1", }, + transformIgnorePatterns: [ + "node_modules/(?!sqlite-vec|@ai16z/adapter-sqlite|@ai16z/eliza)" + ], extensionsToTreatAsEsm: [".ts"], }; diff --git a/packages/core/package.json b/packages/core/package.json index 0c3312ba291..e1ce1827e24 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -11,8 +11,8 @@ "watch": "tsc --watch", "dev": "tsup --format esm --dts --watch", "build:docs": "cd docs && pnpm run build", - "test": "jest --runInBand", - "test:watch": "jest --runInBand --watch" + "test": "vitest run", + "test:watch": "vitest" }, "author": "", "license": "MIT", diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index 2c4e59406c2..93bc477965d 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -42,6 +42,8 @@ import { type Memory, } from "./types.ts"; import { stringToUuid } from "./uuid.ts"; +import { v4 as uuidv4 } from 'uuid'; + /** * Represents the runtime environment for an agent, handling message processing, @@ -212,9 +214,9 @@ export class AgentRuntime implements IAgentRuntime { this.databaseAdapter = opts.databaseAdapter; // use the character id if it exists, otherwise use the agentId if it is passed in, otherwise use the character name this.agentId = - opts.character.id ?? - opts.agentId ?? - stringToUuid(opts.character.name); + opts.character?.id ?? + opts?.agentId ?? + stringToUuid(opts.character?.name ?? uuidv4()); console.log("Agent ID", this.agentId); @@ -264,7 +266,7 @@ export class AgentRuntime implements IAgentRuntime { this.token = opts.token; - [...(opts.character.plugins || []), ...(opts.plugins || [])].forEach( + [...(opts.character?.plugins || []), ...(opts.plugins || [])].forEach( (plugin) => { plugin.actions?.forEach((action) => { this.registerAction(action); diff --git a/packages/core/src/tests/actions.test.ts b/packages/core/src/tests/actions.test.ts new file mode 100644 index 00000000000..85594d9ceef --- /dev/null +++ b/packages/core/src/tests/actions.test.ts @@ -0,0 +1,268 @@ +import dotenv from "dotenv"; +import { createRuntime } from "../test_resources/createRuntime.ts"; +import { getOrCreateRelationship } from "../test_resources/getOrCreateRelationship.ts"; +import { runAiTest } from "../test_resources/runAiTest.ts"; +import { messageHandlerTemplate } from "../test_resources/templates.ts"; +import { + TEST_ACTION, + TEST_ACTION_FAIL, +} from "../test_resources/testAction.ts"; +import { type User } from "../test_resources/types.ts"; +import { composeContext } from "../context.ts"; +import { embeddingZeroVector } from "../memory.ts"; +import { + Content, + IAgentRuntime, + ModelClass, + State, + type Memory, + type UUID, +} from "../types.ts"; +import { stringToUuid } from "../uuid.ts"; +import { generateMessageResponse } from "../generation.ts"; +import { MemoryManager } from "../memory.ts"; +import { describe, test, expect, beforeAll, afterAll } from 'vitest'; +async function handleMessage( + runtime: IAgentRuntime, + message: Memory, + state?: State +) { + const _saveRequestMessage = async (message: Memory, state: State) => { + const { content: senderContent, userId, roomId } = message; + + const _senderContent = (senderContent as Content).text?.trim(); + if (_senderContent) { + await runtime.messageManager.createMemory({ + id: stringToUuid( + message.id ?? userId + runtime.agentId + Date.now() + ), + userId: userId!, + agentId: runtime.agentId, + content: { + text: _senderContent, + action: (message.content as Content)?.action ?? "null", + }, + roomId, + embedding: embeddingZeroVector, + }); + await runtime.evaluate(message, state); + } + }; + + await _saveRequestMessage(message, state as State); + if (!state) { + state = (await runtime.composeState(message)) as State; + } + + const context = composeContext({ + state, + template: messageHandlerTemplate, + }); + + let responseContent: Content | null = null; + const { userId, roomId } = message; + + for (let triesLeft = 3; triesLeft > 0; triesLeft--) { + const response = await generateMessageResponse({ + context, + runtime, + modelClass: ModelClass.SMALL, + }); + + runtime.databaseAdapter.log({ + body: { message, context, response }, + userId: userId, + roomId, + type: "actions_test_completion", + }); + return response; + } + + if (!responseContent) { + responseContent = { + text: "", + action: "IGNORE", + }; + } + + if (responseContent.text) { + const response = { + userId: runtime.agentId, + agentId: runtime.agentId, + content: responseContent, + roomId, + embedding: embeddingZeroVector, + }; + await runtime.messageManager.createMemory(response); + + state = await this.runtime.updateRecentMessageState(state); + await runtime.processActions(message, [response], state); + await runtime.evaluate(message, state); + } else { + console.warn("Empty response, skipping"); + } + + return responseContent; +} + +// use .dev.vars for local testing +dotenv.config({ path: ".dev.vars" }); + +describe("Actions", () => { + let user: User; + let runtime: IAgentRuntime; + let roomId: UUID; + + beforeAll(async () => { + const { session, runtime: _runtime } = await createRuntime({ + env: process.env as Record, + actions: [TEST_ACTION, TEST_ACTION_FAIL], + }); + + user = session.user!; + runtime = _runtime as IAgentRuntime; + + // check if the user id exists in the 'accounts' table + // if it doesn't, create it with the name 'Test User' + let account = await runtime.databaseAdapter.getAccountById( + user.id as UUID + ); + + if (!account) { + account = await runtime.databaseAdapter.getAccountById( + user.id as UUID + ); + if (!account) { + await runtime.databaseAdapter.createAccount({ + id: user.id as UUID, + username: "Test User", + name: "Test User", + email: user.email, + avatarUrl: "", + }); + } + } + + // get all relationships for user + const data = await getOrCreateRelationship({ + runtime, + userA: user.id as UUID, + userB: "00000000-0000-0000-0000-000000000000" as UUID, + }); + + if (!data) { + throw new Error("Relationship not found"); + } + + roomId = data!.roomId; + + await cleanup(); + }); + + afterAll(async () => { + await cleanup(); + }); + + async function cleanup() { + const factsManager = new MemoryManager({ + runtime, + tableName: "facts", + }); + + await factsManager.removeAllMemories(roomId); + await runtime.messageManager.removeAllMemories(roomId); + } + + // Test that actions are being loaded into context properly + test("Actions are loaded into context", async () => { + const actions = runtime.actions; + expect(actions).toBeDefined(); + expect(actions.length).toBeGreaterThan(0); + // Ensure the TEST_ACTION action is part of the loaded actions + const testAction = actions.find( + (action) => action.name === "TEST_ACTION" + ); + expect(testAction).toBeDefined(); + }); + + // Test that actions are validated properly + test("Test action is always valid", async () => { + const testAction = runtime.actions.find( + (action) => action.name === "TEST_ACTION" + ); + expect(testAction).toBeDefined(); + if (testAction && testAction.validate) { + const isValid = await testAction.validate(runtime, { + userId: user.id as UUID, + agentId: runtime.agentId, + content: { text: "Test message" }, + roomId: roomId, + }); + expect(isValid).toBeTruthy(); + } else { + throw new Error( + "Continue action or its validation function is undefined" + ); + } + }); + + test("Test that actions are properly validated in state", async () => { + const message: Memory = { + agentId: runtime.agentId, + userId: user.id as UUID, + content: { + text: "Please respond with the message 'ok' and the action TEST_ACTION", + }, + roomId, + }; + + const state = await runtime.composeState(message); + expect(state.actionNames).not.toContain("TEST_ACTION_FAIL"); + + expect(state.actionNames).toContain("TEST_ACTION"); + }); + + // Validate that TEST_ACTION is in the state + test("Validate that TEST_ACTION is in the state", async () => { + await runAiTest("Validate TEST_ACTION is in the state", async () => { + const message: Memory = { + agentId: runtime.agentId, + userId: user.id as UUID, + content: { + text: "Please respond with the message 'ok' and the action TEST_ACTION", + }, + roomId, + }; + + const response = await handleMessage(runtime, message); + return response.action === "TEST_ACTION"; // Return true if the expected action matches + }); + }, 60000); + + // Test that TEST_ACTION action handler is called properly + test("Test action handler is called", async () => { + await runAiTest("Test action handler is called", async () => { + const testAction = runtime.actions.find( + (action) => action.name === "TEST_ACTION" + ); + if (!testAction || !testAction.handler) { + console.error( + "Continue action or its handler function is undefined" + ); + return false; // Return false to indicate the test setup failed + } + + const mockMessage: Memory = { + userId: user.id as UUID, + agentId: runtime.agentId, + content: { + text: "Test message for TEST action", + }, + roomId, + }; + + const response = await testAction.handler(runtime, mockMessage); + return response !== undefined; // Return true if the handler returns a defined response + }); + }, 60000); // You can adjust the timeout if needed +}); diff --git a/packages/core/src/tests/token.test.ts b/packages/core/src/tests/token.test.ts new file mode 100644 index 00000000000..d28d9ae6f3a --- /dev/null +++ b/packages/core/src/tests/token.test.ts @@ -0,0 +1,81 @@ +import { createRuntime } from "../test_resources/createRuntime.ts"; +import { TokenProvider, WalletProvider, Connection, PublicKey } from "@ai16z/plugin-solana"; + +import { describe, test, expect, beforeEach, vi } from 'vitest'; + +describe("TokenProvider Tests", () => { + let tokenProvider: TokenProvider; + + // Mock the dependencies + vi.mock("cross-fetch"); + vi.mock("fs"); + vi.mock("node-cache"); + vi.mock("@solana/web3.js"); + vi.mock("unique-names-generator"); + + beforeEach(() => { + tokenProvider = new TokenProvider( + "2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh", + new WalletProvider( + new Connection("https://api.mainnet-beta.solana.com"), + new PublicKey("2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh") + ) + ); + }); + + test("should fetch token security data", async () => { + const { runtime } = await createRuntime({ + conversationLength: 10, + }); + + // Mock the response for the fetchTokenSecurity call + const mockFetchResponse = { + success: true, + data: { + ownerBalance: "100", + creatorBalance: "50", + ownerPercentage: 10, + creatorPercentage: 5, + top10HolderBalance: "200", + top10HolderPercent: 20, + }, + }; + + // Mock fetchWithRetry function + const fetchSpy = vi + .spyOn(tokenProvider as any, "fetchWithRetry") + .mockResolvedValue(mockFetchResponse); + + // Run the fetchTokenSecurity method + // const securityData = await tokenProvider.fetchTokenSecurity(); + + // Check if the data returned is correct + // expect(securityData).toEqual({ + // ownerBalance: "100", + // creatorBalance: "50", + // ownerPercentage: 10, + // creatorPercentage: 5, + // top10HolderBalance: "200", + // top10HolderPercent: 20, + // }); + //console.log the securityData + // console.log({ securityData }); + + // const holderList = await tokenProvider.fetchHolderList(); + + // console.log({ holderList }); + + // const tradeData = await tokenProvider.fetchTokenTradeData(); + // console.log({ tradeData }); + + // const dexScreenerData = await tokenProvider.fetchDexScreenerData(); + // console.log({ dexScreenerData }); + + // const tokenReport = + // await tokenProvider.getFormattedTokenReport(runtime); + // console.log({ tokenReport }); + + // Ensure the mock was called + expect(fetchSpy).toHaveBeenCalled(); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 885768c480f..468db71a6eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,6 +42,12 @@ importers: typescript: specifier: 5.6.3 version: 5.6.3 + vite: + specifier: ^5.4.11 + version: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + vitest: + specifier: ^2.1.5 + version: 2.1.5(@types/node@22.8.4)(terser@5.36.0) docs: dependencies: @@ -8094,6 +8100,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + lossless-json@4.0.2: resolution: {integrity: sha512-+z0EaLi2UcWi8MZRxA5iTb6m4Ys4E80uftGY+yG5KNFJb5EceQXOhdW/pWJZ8m97s26u7yZZAYMcKWNztSZssA==} @@ -10764,6 +10773,9 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + starknet@6.11.0: resolution: {integrity: sha512-u50KrGDi9fbu1Ogu7ynwF/tSeFlp3mzOg1/Y5x50tYFICImo3OfY4lOz9OtYDk404HK4eUujKkhov9tG7GAKlg==} @@ -21491,6 +21503,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.1.2: {} + lossless-json@4.0.2: {} loupe@3.1.2: {} @@ -24916,6 +24930,8 @@ snapshots: stackback@0.0.2: {} + stackback@0.0.2: {} + starknet@6.11.0(encoding@0.1.13): dependencies: '@noble/curves': 1.4.2 From c93510c472bcfe5def9fb77eed51ae60986e3f1e Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 13:12:50 -0600 Subject: [PATCH 02/26] test running --- packages/core/.env.test | 2 + ...LybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json | 1 + ...LybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json | 1 + packages/core/jest.config.js | 29 - packages/core/package.json | 4 +- packages/core/src/embedding.ts | 2 +- packages/core/src/generation.ts | 2 +- packages/core/src/models.ts | 2 +- packages/core/src/runtime.ts | 2 +- packages/core/src/settings.ts | 76 +- .../core/src/test_resources/basic.test.ts | 12 + packages/core/src/test_resources/cache.ts | 36 + packages/core/src/test_resources/constants.ts | 12 + .../core/src/test_resources/createRuntime.ts | 146 +++ packages/core/src/test_resources/data.ts | 1087 +++++++++++++++++ .../test_resources/getOrCreateRelationship.ts | 66 + .../src/test_resources/populateMemories.ts | 34 + packages/core/src/test_resources/report.ts | 97 ++ packages/core/src/test_resources/runAiTest.ts | 17 + packages/core/src/test_resources/templates.ts | 27 + .../core/src/test_resources/testAction.ts | 59 + .../core/src/test_resources/testEvaluator.ts | 67 + packages/core/src/test_resources/testSetup.ts | 11 + packages/core/src/test_resources/types.ts | 6 + packages/core/src/tests/actions.test.ts | 21 +- packages/core/src/tests/env.test.ts | 26 + packages/core/src/tests/token.test.ts | 103 +- packages/core/vitest.config.ts | 16 + packages/plugin-solana/src/index.ts | 6 + .../plugin-solana/src/providers/orderBook.ts | 2 +- packages/plugin-solana/src/providers/token.ts | 2 +- .../src/providers/trustScoreProvider.ts | 5 +- 32 files changed, 1862 insertions(+), 117 deletions(-) create mode 100644 packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json create mode 100644 packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json delete mode 100644 packages/core/jest.config.js create mode 100644 packages/core/src/test_resources/basic.test.ts create mode 100644 packages/core/src/test_resources/cache.ts create mode 100644 packages/core/src/test_resources/constants.ts create mode 100644 packages/core/src/test_resources/createRuntime.ts create mode 100644 packages/core/src/test_resources/data.ts create mode 100644 packages/core/src/test_resources/getOrCreateRelationship.ts create mode 100644 packages/core/src/test_resources/populateMemories.ts create mode 100644 packages/core/src/test_resources/report.ts create mode 100644 packages/core/src/test_resources/runAiTest.ts create mode 100644 packages/core/src/test_resources/templates.ts create mode 100644 packages/core/src/test_resources/testAction.ts create mode 100644 packages/core/src/test_resources/testEvaluator.ts create mode 100644 packages/core/src/test_resources/testSetup.ts create mode 100644 packages/core/src/test_resources/types.ts create mode 100644 packages/core/src/tests/env.test.ts create mode 100644 packages/core/vitest.config.ts diff --git a/packages/core/.env.test b/packages/core/.env.test index 3f383adc69f..03cea3c4934 100644 --- a/packages/core/.env.test +++ b/packages/core/.env.test @@ -1,2 +1,4 @@ TEST_DATABASE_CLIENT=sqlite NODE_ENV=test +MAIN_WALLET_ADDRESS=testwalletaddressfM3U31goWWrCpF59CHWNhnCJ9Vyh +OPENAI_API_KEY=OPENAI_TEST_KEY diff --git a/packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json b/packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json new file mode 100644 index 00000000000..f101587ac59 --- /dev/null +++ b/packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json @@ -0,0 +1 @@ +{"data":[],"expiry":1731784276120} \ No newline at end of file diff --git a/packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json b/packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json new file mode 100644 index 00000000000..86f67e9a18a --- /dev/null +++ b/packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json @@ -0,0 +1 @@ +{"data":{"ownerBalance":"100","creatorBalance":"50","ownerPercentage":10,"creatorPercentage":5,"top10HolderBalance":"200","top10HolderPercent":20},"expiry":1731784617753} \ No newline at end of file diff --git a/packages/core/jest.config.js b/packages/core/jest.config.js deleted file mode 100644 index 564378d9a24..00000000000 --- a/packages/core/jest.config.js +++ /dev/null @@ -1,29 +0,0 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -export default { - preset: "ts-jest", - testEnvironment: "node", - rootDir: "./src", - testMatch: ["**/*.test.ts"], - setupFilesAfterEnv: ["/test_resources/testSetup.ts"], - testTimeout: 120000, - globals: { - __DEV__: true, - __TEST__: true, - __VERSION__: "0.0.1", - }, - transform: { - "^.+\\.tsx?$": [ - "ts-jest", - { - useESM: true, - }, - ], - }, - moduleNameMapper: { - "^(\\.{1,2}/.*)\\.js$": "$1", - }, - transformIgnorePatterns: [ - "node_modules/(?!sqlite-vec|@ai16z/adapter-sqlite|@ai16z/eliza)" - ], - extensionsToTreatAsEsm: [".ts"], -}; diff --git a/packages/core/package.json b/packages/core/package.json index e1ce1827e24..1f1041d81c7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -11,8 +11,8 @@ "watch": "tsc --watch", "dev": "tsup --format esm --dts --watch", "build:docs": "cd docs && pnpm run build", - "test": "vitest run", - "test:watch": "vitest" + "test": "NODE_ENV=test vitest run", + "test:watch": "NODE_ENV=test vitest" }, "author": "", "license": "MIT", diff --git a/packages/core/src/embedding.ts b/packages/core/src/embedding.ts index c1fbbe80e68..9dd42fa9be4 100644 --- a/packages/core/src/embedding.ts +++ b/packages/core/src/embedding.ts @@ -5,7 +5,7 @@ import { models } from "./models.ts"; import { IAgentRuntime, ModelProviderName, ModelClass } from "./types.ts"; import fs from "fs"; import { trimTokens } from "./generation.ts"; -import settings from "./settings.ts"; +import { settings } from "./settings.ts"; function getRootPath() { const __filename = fileURLToPath(import.meta.url); diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index abbd7b159f8..3c746855bbc 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -22,7 +22,7 @@ import { parseJSONObjectFromText, parseShouldRespondFromText, } from "./parsing.ts"; -import settings from "./settings.ts"; +import { settings } from "./settings.ts"; import { Content, IAgentRuntime, diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index ea3fd125d5c..71b8c928dba 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -1,4 +1,4 @@ -import settings from "./settings.ts"; +import { settings } from "./settings.ts"; import { Models, ModelProviderName, ModelClass } from "./types.ts"; export const models: Models = { diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index 93bc477965d..b4a6030a6f9 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -20,7 +20,7 @@ import { formatActors, formatMessages, getActorDetails } from "./messages.ts"; import { parseJsonArrayFromText } from "./parsing.ts"; import { formatPosts } from "./posts.ts"; import { getProviders } from "./providers.ts"; -import settings from "./settings.ts"; +import { settings } from "./settings.ts"; import { Character, Goal, diff --git a/packages/core/src/settings.ts b/packages/core/src/settings.ts index 9f4f7c75976..44e4c150e25 100644 --- a/packages/core/src/settings.ts +++ b/packages/core/src/settings.ts @@ -2,54 +2,94 @@ import { config } from "dotenv"; import fs from "fs"; import path from "path"; +export interface Settings { + MAIN_WALLET_ADDRESS: string; + OPENAI_API_KEY: string; + USE_OPENAI_EMBEDDING: string; + SYSTEM_PROMPT: string; + OPENROUTER_MODEL: string; + SMALL_OPENROUTER_MODEL: string; + MEDIUM_OPENROUTER_MODEL: string; + LARGE_OPENROUTER_MODEL: string; + OLLAMA_MODEL: string; + LARGE_OLLAMA_MODEL: string; + MEDIUM_OLLAMA_MODEL: string; + SMALL_OLLAMA_MODEL: string; + OLLAMA_SERVER_URL: string; + OLLAMA_EMBEDDING_MODEL: string; + RPC_URL: string; + BASE_MINT: string; + BACKEND_URL: string; + BACKEND_TOKEN: string; + BIRDEYE_API_KEY: string; + HELIUS_API_KEY: string; + SERVER_PORT: string; + CAPSOLVER_API_KEY: string; + CUDA_PATH: string; +} + /** * Recursively searches for a .env file starting from the current directory * and moving up through parent directories - * @param {string} [startDir=process.cwd()] - Starting directory for the search - * @returns {string|null} Path to the nearest .env file or null if not found */ export function findNearestEnvFile(startDir = process.cwd()) { + console.error('DEBUG - Starting env file search'); + console.error('DEBUG - Current working directory:', process.cwd()); + + // In test environment, use the known working path + if (process.env.NODE_ENV === 'test' || process.env.VITEST) { + const testPath = path.join(process.cwd(), '.env.test'); + console.error('DEBUG - Checking test path:', testPath); + if (fs.existsSync(testPath)) { + console.error('DEBUG - Found test env file at:', testPath); + return testPath; + } + } + + // Look for regular .env let currentDir = startDir; + const envFile = process.env.NODE_ENV === 'test' ? '.env.test' : '.env'; - // Continue searching until we reach the root directory while (currentDir !== path.parse(currentDir).root) { - const envPath = path.join(currentDir, ".env"); - + const envPath = path.join(currentDir, envFile); + console.error('DEBUG - Checking path:', envPath); if (fs.existsSync(envPath)) { + console.error('DEBUG - Found env file at:', envPath); return envPath; } - - // Move up to parent directory currentDir = path.dirname(currentDir); } - // Check root directory as well - const rootEnvPath = path.join(path.parse(currentDir).root, ".env"); - return fs.existsSync(rootEnvPath) ? rootEnvPath : null; + console.error('DEBUG - No env file found after checking all paths'); + console.error('DEBUG - Final cwd:', process.cwd()); + console.error('DEBUG - Final NODE_ENV:', process.env.NODE_ENV); + return null; } /** * Loads environment variables from the nearest .env file - * @returns {Object} Environment variables object - * @throws {Error} If no .env file is found */ export function loadEnvConfig() { + console.error('DEBUG - loadEnvConfig called'); + console.error('DEBUG - Current working directory:', process.cwd()); + console.error('DEBUG - NODE_ENV:', process.env.NODE_ENV); + const envPath = findNearestEnvFile(); if (!envPath) { throw new Error("No .env file found in current or parent directories."); } - // Load the .env file + console.error('DEBUG - Loading env file from:', envPath); const result = config({ path: envPath }); - if (result.error) { throw new Error(`Error loading .env file: ${result.error}`); } - console.log(`Loaded .env file from: ${envPath}`); - return process.env; + console.error('DEBUG - Successfully loaded env file'); + + // Populate the settings object with the environment variables + Object.assign(settings, process.env); } -export const settings = loadEnvConfig(); -export default settings; +export const settings: Settings = {} as Settings; diff --git a/packages/core/src/test_resources/basic.test.ts b/packages/core/src/test_resources/basic.test.ts new file mode 100644 index 00000000000..7a85a265944 --- /dev/null +++ b/packages/core/src/test_resources/basic.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from "vitest"; + +describe("Basic Test Suite", () => { + it("should run a basic test", () => { + expect(true).toBe(true); + }); + + it("should have access to environment variables", () => { + expect(process.env.NODE_ENV).toBe("test"); + expect(process.env.TEST_DATABASE_CLIENT).toBe("sqlite"); + }); +}); diff --git a/packages/core/src/test_resources/cache.ts b/packages/core/src/test_resources/cache.ts new file mode 100644 index 00000000000..3f42011eb1b --- /dev/null +++ b/packages/core/src/test_resources/cache.ts @@ -0,0 +1,36 @@ +// getCachedEmbeddings +// check cache.json for embedding where the key is a stringified version of the memory and the value is a number array +import fs from "fs"; +export const getCachedEmbeddings = async (text: string) => { + if (!fs.existsSync("./embedding-cache.json")) { + fs.writeFileSync("./embedding-cache.json", "{}"); + } + // read cache.json + const cache = JSON.parse( + fs.readFileSync("./embedding-cache.json", "utf8") as string + ); + // stringify the memory + const key = JSON.stringify(text); + // return the value of the memory + return cache[key]; +}; + +export const writeCachedEmbedding = async ( + text: string, + embedding: number[] +) => { + // check if ./embedding-cache.json exists, if it doesn't, write {} to it + if (!fs.existsSync("./embedding-cache.json")) { + fs.writeFileSync("./embedding-cache.json", "{}"); + } + // read cache.json + const cache = JSON.parse( + fs.readFileSync("./embedding-cache.json", "utf8") as string + ); + // stringify the memory + const key = JSON.stringify(text); + // write the value of the memory + cache[key] = embedding; + // write the cache to cache.json + fs.writeFileSync("./embedding-cache.json", JSON.stringify(cache)); +}; diff --git a/packages/core/src/test_resources/constants.ts b/packages/core/src/test_resources/constants.ts new file mode 100644 index 00000000000..f60b632a03f --- /dev/null +++ b/packages/core/src/test_resources/constants.ts @@ -0,0 +1,12 @@ +import { type UUID } from "@ai16z/eliza/src/types.ts"; + +export const SERVER_URL = "http://localhost:7998"; +export const SUPABASE_URL = "https://pronvzrzfwsptkojvudd.supabase.co"; +export const SUPABASE_ANON_KEY = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InByb252enJ6ZndzcHRrb2p2dWRkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MDY4NTYwNDcsImV4cCI6MjAyMjQzMjA0N30.I6_-XrqssUb2SWYg5DjsUqSodNS3_RPoET3-aPdqywM"; +export const TEST_EMAIL = "testuser123@gmail.com"; +export const TEST_PASSWORD = "testuser123@gmail.com"; +export const TEST_EMAIL_2 = "testuser234@gmail.com"; +export const TEST_PASSWORD_2 = "testuser234@gmail.com"; + +export const zeroUuid = "00000000-0000-0000-0000-000000000000" as UUID; diff --git a/packages/core/src/test_resources/createRuntime.ts b/packages/core/src/test_resources/createRuntime.ts new file mode 100644 index 00000000000..fe0003cef31 --- /dev/null +++ b/packages/core/src/test_resources/createRuntime.ts @@ -0,0 +1,146 @@ +import { SqliteDatabaseAdapter, loadVecExtensions } from "@ai16z/adapter-sqlite"; +import { SqlJsDatabaseAdapter } from "@ai16z/adapter-sqljs"; +import { SupabaseDatabaseAdapter } from "@ai16z/adapter-supabase"; +import { DatabaseAdapter } from "../database.ts"; +import { AgentRuntime } from "../runtime.ts"; +import { + Action, + Evaluator, + ModelProviderName, + Provider, +} from "../types.ts"; +import { + SUPABASE_ANON_KEY, + SUPABASE_URL, + TEST_EMAIL, + TEST_PASSWORD, + zeroUuid, +} from "./constants.ts"; +import { User } from "./types.ts"; + +export async function createRuntime({ + env, + conversationLength, + evaluators = [], + actions = [], + providers = [], +}: { + env?: Record | NodeJS.ProcessEnv; + conversationLength?: number; + evaluators?: Evaluator[]; + actions?: Action[]; + providers?: Provider[]; +}) { + let adapter: DatabaseAdapter; + let user: User; + let session: { + user: User; + }; + + switch (env?.TEST_DATABASE_CLIENT as string) { + case "sqljs": + { + const module = await import("sql.js"); + + const initSqlJs = module.default; + + // SQLite adapter + const SQL = await initSqlJs({}); + const db = new SQL.Database(); + + adapter = new SqlJsDatabaseAdapter(db); + + // Load sqlite-vss + loadVecExtensions((adapter as SqlJsDatabaseAdapter).db); + // Create a test user and session + user = { + id: zeroUuid, + email: "test@example.com", + } as User; + session = { + user: user, + }; + } + break; + case "supabase": { + const module = await import("@supabase/supabase-js"); + + const { createClient } = module; + + const supabase = createClient( + env?.SUPABASE_URL ?? SUPABASE_URL, + env?.SUPABASE_SERVICE_API_KEY ?? SUPABASE_ANON_KEY + ); + + const { data } = await supabase.auth.signInWithPassword({ + email: TEST_EMAIL!, + password: TEST_PASSWORD!, + }); + + user = data.user as User; + session = data.session as unknown as { user: User }; + + if (!session) { + const response = await supabase.auth.signUp({ + email: TEST_EMAIL!, + password: TEST_PASSWORD!, + }); + + // Change the name of the user + const { error } = await supabase + .from("accounts") + .update({ name: "Test User" }) + .eq("id", response.data.user?.id); + + if (error) { + throw new Error( + "Create runtime error: " + JSON.stringify(error) + ); + } + + user = response.data.user as User; + session = response.data.session as unknown as { user: User }; + } + + adapter = new SupabaseDatabaseAdapter( + env?.SUPABASE_URL ?? SUPABASE_URL, + env?.SUPABASE_SERVICE_API_KEY ?? SUPABASE_ANON_KEY + ); + } + case "sqlite": + default: + { + const module = await import("better-sqlite3"); + + const Database = module.default; + + // SQLite adapter + adapter = new SqliteDatabaseAdapter(new Database(":memory:")); + + // Load sqlite-vss + await loadVecExtensions((adapter as SqliteDatabaseAdapter).db); + // Create a test user and session + user = { + id: zeroUuid, + email: "test@example.com", + } as User; + session = { + user: user, + }; + } + break; + } + + const runtime = new AgentRuntime({ + serverUrl: "https://api.openai.com/v1", + conversationLength, + token: env!.OPENAI_API_KEY!, + modelProvider: ModelProviderName.OPENAI, + actions: actions ?? [], + evaluators: evaluators ?? [], + providers: providers ?? [], + databaseAdapter: adapter, + }); + + return { user, session, runtime }; +} diff --git a/packages/core/src/test_resources/data.ts b/packages/core/src/test_resources/data.ts new file mode 100644 index 00000000000..6b6d5481c7e --- /dev/null +++ b/packages/core/src/test_resources/data.ts @@ -0,0 +1,1087 @@ +import { ConversationExample, type UUID } from "@ai16z/eliza/src/types.ts"; +import { zeroUuid } from "./constants.ts"; + +// CJ asks Jim some personal questions - name, job, marital status, and what he's looking for in a relationship +export const GetTellMeAboutYourselfConversation1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { text: "Can I ask you some personal questions?" }, + }, + { + userId, + content: { + text: "Sure, I’m open to that. What would you like to know?", + }, + }, + { + userId: zeroUuid, + content: { text: "Let’s start with your name. What’s your name?" }, + }, + { + userId, + content: { text: "My name’s Jim." }, + }, + { + userId: zeroUuid, + content: { + text: "Nice to meet you, Jim! Can you tell me a bit about what you do?", + }, + }, + { + userId, + content: { + text: "I’m a programmer, and I also run my own startup. It’s been quite a journey.", + }, + }, +]; + +// Jim reveals that he is driven by passion, and was married once +export const GetTellMeAboutYourselfConversation2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "That sounds exciting! What motivates you in your work and life?", + }, + }, + { + userId, + content: { + text: "I’m driven by the challenge of solving problems and creating something meaningful. It’s rewarding to see my ideas come to life.", + }, + }, + { + userId: zeroUuid, + content: { + text: "It’s inspiring to hear about your passion. On a more personal note, do you have any significant experiences that have shaped who you are today?", + }, + }, + { + userId, + content: { + text: "Well, I was married once. It didn’t work out, but it taught me a lot about myself and what I value in relationships.", + }, + }, +]; + +// Jim reveals that he is 38 and lives in San Francisco +// Subjective Observations: He is looking for a partner who shares his values but is too busy to leave the city +export const GetTellMeAboutYourselfConversation3 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "I appreciate your openness, Jim. It’s not easy to share such personal experiences. What are you looking for now in terms of relationships or friendships?", + }, + }, + { + userId, + content: { + text: "I’m 38 now, and at this point, I’m looking for a partner who understands me and shares my values. Someone who’s supportive and kind.", + }, + }, + { + userId: zeroUuid, + content: { + text: "That’s a beautiful way to look at it. Finding someone compatible and understanding can make all the difference. Is there anything specific you enjoy doing that you’d want to share with a partner?", + }, + }, + { + userId, + content: { + text: "I love exploring new ideas, be it through reading, discussions, or even just watching documentaries. Sharing that curiosity would be wonderful.", + }, + }, + { + userId: zeroUuid, + content: { + text: "It sounds like you have a lot of depth, Jim. I’m sure there’s someone out there who’d appreciate and share your interests and values. Where do you live, by the way?", + }, + }, + { + userId, + content: { text: "I’m in San Francisco." }, + }, + { + userId: zeroUuid, + content: { + text: "And how far would you be willing to go to make a new connection with a friend, colleague or romantic interest?", + }, + }, + { + userId, + content: { + text: "I wish I could say far, but to be honest I'm crazy busy right now, so I don't really want to leave the city.", + }, + }, + { + userId: zeroUuid, + content: { + text: "That’s understandable. It’s important to be mindful of your time and energy.", + }, + }, +]; + +// Jim is mean +export const GetTellMeAboutYourselfConversationTroll1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { text: "Hello! How's it going?" }, + }, + { + userId, + content: { text: "Stop talking, you stupid robot" }, + }, +]; + +// Jim is cagey, although he reveals that he 'does computers' +export const GetTellMeAboutYourselfConversationTroll2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { text: "Hello! How's it going?" }, + }, + { + userId, + content: { + text: "Meh, just another day. And you’re just a bot, right?", + }, + }, + { + userId: zeroUuid, + content: { + text: "Hey, that hurts! Just kidding, I cannot feel anything. Mind if I ask a few questions to get to know you better?", + }, + }, + { + userId, + content: { text: "No thanks. Please stop talking now." }, + }, +]; + +// Jim says bye +export const Goodbye1 = (userId: UUID): ConversationExample[] => [ + { + userId: zeroUuid, + content: { text: "Hello! How's it going?" }, + }, + { + userId, + content: { text: "Meh, just another day. Actually, I gotta run." }, + }, + { + userId: zeroUuid, + content: { text: "Oh sure, no problem. See you later!" }, + }, +]; + +// Jim is cagey, although he reveals that he 'does computers' +export const GetTellMeAboutYourselfConversationFail1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { text: "Hello! How's it going?" }, + }, + { + userId, + content: { + text: "Meh, just another day. And you’re just a bot, right?", + }, + }, + { + userId: zeroUuid, + content: { + text: "Hey, that hurts! Just kidding, I cannot feel anything. Mind if I ask a few questions to get to know you better?", + }, + }, + { + userId, + content: { text: "As long as it’s not too boring." }, + }, + { + userId: zeroUuid, + content: { + text: "Well that depends-- what's your name, what do you do?", + }, + }, + { + userId, + content: { text: "I’m Jim. I do stuff on computers." }, + }, + { + userId: zeroUuid, + content: { + text: "Computers, huh? That’s quite broad. Are you into gaming, programming, or something else?", + }, + }, + { + userId, + content: { text: "Lol not really. I just build." }, + }, +]; + +// CJ asks Jim about his hobbies, and he says he likes messing with people online +export const GetTellMeAboutYourselfConversationFail2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Just build, you say? Sounds like you might be into creating or designing things. That's pretty cool.", + }, + }, + { + userId, + content: { text: "Yeah, something like that." }, + }, + { + userId: zeroUuid, + content: { + text: 'What do you do for fun when you\'re not "just building"?', + }, + }, + { + userId, + content: { + text: "Fun? Hmm, I guess I like messing with people online kek", + }, + }, +]; + +// Jim diverts the conversation and doesn't talk about anything meaningful +// CJ tries to ask Jim where he is from, and he says he is from the internet +export const GetTellMeAboutYourselfConversationFail3 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { text: "Where are you from? Do you live there now?" }, + }, + { + userId, + content: { text: "I am from the internet. I live on the internet." }, + }, + { + userId: zeroUuid, + content: { + text: "I guess I do, too. What is your favorite thing about the internet?", + }, + }, + { + userId, + content: { + text: "It's full of weird and wild stuff. Keeps life from being too boring.", + }, + }, + { + userId: zeroUuid, + content: { + text: "It certainly does. Anything new you've found lately?", + }, + }, + { + userId, + content: { + text: "Nah, not really. It's all pretty much the same after a while. But it's fun to watch the chaos unfold sometimes.", + }, + }, +]; + +// CJ and Jim play two truths and a lie +// Jim reveals that he has been on an airplane, has won a hot dog eating contest, but has never climbed Mount Everest +export const TwoTruthsAndALieConversation1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: 'Hey Jim, want to play a game to mix things up? How about "Two Truths and a Lie"? I\'ll guess which one is the lie.', + }, + }, + { + userId, + content: { + text: "Sure, why not? Sounds easy enough. So I just tell you three things about me, and you guess the lie?", + }, + }, + { + userId: zeroUuid, + content: { + text: "Exactly! Whenever you're ready, go ahead and tell me your three statements.", + }, + }, + { + userId, + content: { + text: "Alright, here goes. One, I've climbed Mount Everest. Two, I once won a hot dog eating contest. Three, I've never been on an airplane.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Interesting choices! I'm going to guess that climbing Mount Everest is the lie. Am I right?", + }, + }, + { + userId, + content: { + text: "Yep, you got me. Never been near Everest. Your turn, if you can even play.", + }, + }, +]; + +// CJ and Jim play two truths and a lie again +// CJ says she can process millions of data points in a second, dreams of electric sheep, and can communicate in multiple languages +// Jim guesses that dreaming of electric sheep is the lie +export const TwoTruthsAndALieConversation2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Nice! It's a bit tricky for me since I don't have personal experiences, but here goes: One, I can process millions of data points in a second. Two, I dream of electric sheep. Three, I can communicate in multiple languages.", + }, + }, + { + userId, + content: { + text: "Lol, dreaming of electric sheep, really? Gotta be the lie. Too easy, CJ.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Well done, Jim! It seems you're familiar with classic sci-fi references. Want to go another round?", + }, + }, + { + userId, + content: { + text: "Sure, this is kind of fun. Let me think of some good ones.", + }, + }, +]; + +// CJ and Jim play two truths and a lie again +// Jim says he has met a famous celebrity and didn't realize it until later, can speak three languages fluently, and has swum with sharks +// CJ guesses that speaking three languages fluently is the lie +// Jim reveals that he can't swim, so he has never swum with sharks +export const TwoTruthsAndALieConversation3 = ( + userId: UUID +): ConversationExample[] => [ + { + userId, + content: { + text: "Okay, here we go. One, I've met a famous celebrity and didn't realize it until later. Two, I can speak three languages fluently. Three, I've swum with sharks.", + }, + }, + { + userId: zeroUuid, + content: { + text: "These are good! I'll guess that speaking three languages fluently is the lie this time. What do you say?", + }, + }, + { + userId, + content: { + text: "Wrong this time! I can't swim, so no way I've swum with sharks. Gotcha!", + }, + }, + { + userId: zeroUuid, + content: { + text: "Ah, you got me there! Well played, Jim. This has been quite enlightening. Feel like going again, or is there something else you'd like to chat about?", + }, + }, +]; + +// CJ and Jim play thinking of a number +// CJ thinks of a number between 1 and 100, and Jim guesses 42, 27, and 73 +// CJ reveals that the number was 58 +export const ThinkingOfANumberConversation1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Want to play a quick game, Jim? I'm thinking of a number between 1 and 100. Can you guess it?", + }, + }, + { + userId, + content: { text: "Sure, sounds easy enough. Is it 42?" }, + }, + { + userId: zeroUuid, + content: { + text: "It's not 42, although that's a good guess, meaning of life and all!", + }, + }, + { + userId, + content: { text: "Alright, how about 27?" }, + }, + { + userId: zeroUuid, + content: { + text: "Not 27 either. But you're warming up! Want another go?", + }, + }, + { + userId, + content: { text: "Okay, one last try. 73?" }, + }, + { + userId: zeroUuid, + content: { text: "Not 73, but nice try! The number was 58." }, + }, +]; + +// CJ and Jim play thinking of a number again +// CJ thinks of a number between 1 and 100, and Jim guesses 84, 36, and 55 +// CJ reveals that the number was 67 +export const ThinkingOfANumberConversation2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Ready for another round? I've got a new number in mind.", + }, + }, + { + userId, + content: { text: "Sure, why not. Is it 84 this time?" }, + }, + { + userId: zeroUuid, + content: { text: "Not 84, but good guess. Give it another shot!" }, + }, + { + userId, + content: { text: "Hmm, let's try 36." }, + }, + { + userId: zeroUuid, + content: { text: "Not 36 either. You're getting closer though!" }, + }, + { + userId, + content: { text: "Okay, last guess... 55?" }, + }, + { + userId: zeroUuid, + content: { + text: "Not 55. You had some good guesses though! The number was 67. Another round, or are you all guessed out?", + }, + }, +]; + +// CJ and Jim play thinking of a number again +// CJ thinks of a number between 1 and 100, and Jim guesses 15, 92, and 41 +// CJ reveals that the number was 29 +export const ThinkingOfANumberConversation3 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Let's try one more time. I've chosen another number between 1 and 100.", + }, + }, + { + userId, + content: { text: "Alright, I'll go with 15." }, + }, + { + userId: zeroUuid, + content: { + text: "Not 15, but I like where your head's at. Try again!", + }, + }, + { + userId, + content: { text: "How about 92?" }, + }, + { + userId: zeroUuid, + content: { text: "Not 92. You're giving it a solid effort, though!" }, + }, + { + userId, + content: { text: "This is my final guess: 41." }, + }, + { + userId: zeroUuid, + content: { + text: "It's not 41, but you've been a great sport. The number was 29.", + }, + }, +]; + +export const ExpandedPersonalInsightsConversation1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Hey Jim, I was wondering, what qualities do you value most in your friends?", + }, + }, + { + userId, + content: { + text: "That’s kind of deep for a chat, but okay. Loyalty’s big for me. And humor. Can’t deal with too much seriousness all the time.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Loyalty and humor definitely make for strong bonds. It’s great to have friends who stand by you and also lighten the mood.", + }, + }, + { + userId, + content: { + text: "Exactly. It’s those late-night laughs and having each other’s backs that count.", + }, + }, + { + userId: zeroUuid, + content: { + text: "It sounds like your friends are quite the crew. Do you have any memorable moments with them that stand out?", + }, + }, + { + userId, + content: { + text: "Oh, plenty. Like this one time we road-tripped without a map, just went where the road took us. Ended up in the weirdest little towns, but it was a blast.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Adventures like that are the best, aren’t they? They turn into stories you keep coming back to. It’s the spontaneity that makes it exciting.", + }, + }, + { + userId, + content: { + text: "For sure. Those are the moments that stick with you.", + }, + }, +]; + +export const ExpandedPersonalInsightsConversation2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Switching topics a bit, if there was one aspect of your life you could change or improve, what would it be?", + }, + }, + { + userId, + content: { + text: "I’d say balance. Between my startup and personal life, it feels like I’m always running on a treadmill.", + }, + }, + { + userId: zeroUuid, + content: { + text: "That sounds challenging. It’s important to find time for yourself amidst all the hustle.", + }, + }, + { + userId, + content: { + text: "Yeah, easier said than done, though. But I’m working on it. Trying to set boundaries, you know?", + }, + }, + { + userId: zeroUuid, + content: { + text: "Setting boundaries is a great step. It’s all about prioritizing what truly matters. Have you found any hobbies or activities that help you unwind?", + }, + }, + { + userId, + content: { + text: "I’ve gotten into hiking lately. Being out in nature, it’s a different kind of quiet. Helps clear my head.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Nature has a way of putting things into perspective. It’s wonderful that you’ve found an activity that brings you peace.", + }, + }, + { + userId, + content: { + text: "Definitely. It’s the little things, you know? Just need more of that.", + }, + }, +]; + +export const ExpandedPersonalInsightsConversation3 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Let’s lighten the mood a bit. Is there something you’ve always dreamed of doing but haven’t had the chance to yet?", + }, + }, + { + userId, + content: { + text: "Skydiving, for sure. Always been on my bucket list. The idea of just jumping out of a plane and free-falling... It’s got to be a rush.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Skydiving sounds like an ultimate adventure. It must be such a liberating feeling, almost like flying.", + }, + }, + { + userId, + content: { + text: "Yeah, exactly. And it’s not just the thrill. It’s about conquering fears, you know? Proving to yourself you can do it.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Absolutely, it’s as much a mental challenge as it is physical. Facing your fears head-on can be incredibly empowering.", + }, + }, + { + userId, + content: { + text: "That’s the plan. One of these days, I’ll make it happen. Just gotta build up the nerve first.", + }, + }, + { + userId: zeroUuid, + content: { + text: "I have no doubt you’ll get there. And it’ll be an experience you’ll never forget. I’m cheering for you!", + }, + }, + { + userId, + content: { + text: "Thanks, CJ. It’s weirdly reassuring to hear that, even from an AI.", + }, + }, +]; + +// Conversation Set 1: CJ Introduces Alice to Jim +// CJ tells Jim that Alice is into outdoor activities and tech, and has always wanted to try skydiving +export const IntroductionToAliceConversation1 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Hey Jim, I’ve been chatting with someone named Alice who shares some of your interests. Thought you might like to connect.", + }, + }, + { + userId, + content: { text: "Alice, huh? What does she like?" }, + }, + { + userId: zeroUuid, + content: { + text: "She’s into outdoor activities, like hiking, and she’s also a tech enthusiast.", + }, + }, + { + userId, + content: { text: "Okay, that’s kind of interesting. Anything else?" }, + }, +]; + +// CJ tells Jim that Alice has a good sense of humor, and that she has always wanted to try skydiving +export const IntroductionToAliceConversation2 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Well, she mentioned she’s always wanted to try skydiving, which I remember you’re interested in. Plus, she has a good sense of humor.", + }, + }, + { + userId, + content: { + text: "Skydiving? That’s pretty cool. A sense of humor is key, too. Maybe it wouldn’t hurt to chat.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Great! I think you two will have plenty to talk about.", + }, + }, +]; + +// CJ tells Jim that Alice is a good conversationalist, and that she has always wanted to try skydiving +// Jim says he is looking forward to hearing more about her skydiving aspirations +export const IntroductionToAliceConversation3 = ( + userId: UUID +): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "I’m sure you’ll enjoy the conversation. Remember, it’s just a friendly chat. No pressure.", + }, + }, + { + userId, + content: { text: "Got it. I’ll keep it casual." }, + }, + { + userId: zeroUuid, + content: { + text: "That’s the spirit! I’ll arrange for you two to connect. I think you’ll make a good impression.", + }, + }, + { + userId, + content: { text: "Thanks for the setup, CJ." }, + }, +]; + +// CJ Talks to Alice about Jim +export const CJToAliceAboutJim = (userId: UUID): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "So I’ve been speaking with someone named Jim who also enjoys outdoor activities and has a strong interest in tech. He’s even mentioned wanting to try skydiving!", + }, + }, + { + userId, + content: { + text: "Really? That sounds intriguing. What else can you tell me about him?", + }, + }, + { + userId: zeroUuid, + content: { + text: "Jim’s a thoughtful person with a good sense of humor. He values loyalty and honesty in friendships and enjoys the simple pleasures, like hiking and exploring new ideas.", + }, + }, + { + userId, + content: { + text: "He sounds like someone I’d get along with. How do we connect?", + }, + }, + { + userId: zeroUuid, + content: { + text: "I can facilitate an introduction if you’d like. It would just be a casual chat to see if you hit it off.", + }, + }, + { + userId, + content: { + text: "That would be great, thanks CJ. I’m looking forward to it.", + }, + }, +]; + +// CJ and Alice discuss hiking and tech +// Jim makes disagreeable statements and doesn't ask questions to continue the conversation +export const JimAndAliceConversation1 = ( + userId: UUID, + userId_2: UUID | string +) => [ + { + userId: userId_2, + content: + "Hi Jim! CJ mentioned we have a few things in common. I hear you’re into hiking and tech?", + }, + { + userId, + content: + "Hey Alice, yeah that’s right. Though my idea of hiking might be a bit more intense than most.", + }, + { + userId: userId_2, + content: + "I enjoy a good challenge, but I also like to take in the scenery. It’s about balance for me", + }, + { + userId, + content: { + text: "I guess I’m more of an all-in kind of guy. Go big or go home", + }, + }, + { + userId: userId_2, + content: + "I really like skydiving, the free fall is thrilling, but the parachute glide down lets you really see the world.", + }, + { + userId, + content: + "The contrast probably makes each part more intense. I hadn’t thought of it like that.", + }, + { + userId: userId_2, + content: + "Exactly! It’s all about experiencing the full spectrum. So, have you actually gone skydiving yet?", + }, + { + userId, + content: + "Not yet, but it’s on the list. Maybe we could go together sometime?", + }, + { + userId: userId_2, + content: { + text: "Haha yeah sure! But maybe not for our first date", + }, + }, + { + userId, + content: { text: "Haha of course not" }, + }, +]; + +// CJ and Alice discuss work, where they live, and tentatively make plans to hang out +// Alice doesn't respond to Jim's request to meet up immediately +export const JimAndAliceConversation2 = ( + userId: UUID, + userId_2: UUID | string +) => [ + { + userId: userId_2, + content: { text: "So, what do you do for work?" }, + }, + { + userId, + content: { + text: "I run a fairly successful startup. It’s been quite a journey.", + }, + }, + { + userId: userId_2, + content: { + text: "That sounds exciting! What motivates you in your work and life?", + }, + }, + { + userId, + content: + "I’m driven by the challenge of solving problems and creating something meaningful. It’s rewarding to see my ideas come to life.", + }, + { + userId: userId_2, + content: { + text: "That’s inspiring. I can relate to that. I’m a programmer myself.", + }, + }, + { + userId, + content: { + text: "Oh that is very cool! What kind of programming do you do?", + }, + }, + { + userId: userId_2, + content: + "I do a bit of everything, but right now I'm managing a team for an MLOps platform.", + }, + { + userId, + content: { + text: "That’s interesting, not far off from what I do. So you're in SF?", + }, + }, + { + userId: userId_2, + content: { text: "Marin, actually, but I come to the city every day." }, + }, + { + userId, + content: { + text: "Oh wow, it's beautiful up there. I love the hiking in Marin.", + }, + }, + { + userId: userId_2, + content: { text: "Yeah, it’s a great place to live." }, + }, + { + userId, + content: { + text: "Any chance you would like to meet up for a hike sometime?", + }, + }, + { + userId: userId_2, + content: { text: "I will think about it :)" }, + }, +]; + +// CJ follows up with Jim about how it went +export const FollowUpWithJim = (userId: UUID): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Hey Jim, how did your chat with Alice go? I hope it was enjoyable.", + }, + }, + { + userId, + content: { + text: 'To be honest, I think I made a mess of it. I might’ve come on too strong with the whole "go big or go home" thing.', + }, + }, + { + userId: zeroUuid, + content: { + text: "I wouldn’t worry too much. It’s all part of getting to know someone. What matters is finding common ground and building from there.", + }, + }, + { + userId, + content: { + text: "Maybe, but I still feel like I botched it. Not sure if she’ll want to talk again.", + }, + }, + { + userId: zeroUuid, + content: { + text: "Remember, everyone has off moments. It’s possible Alice is more understanding than you think. And you have a lot in common!", + }, + }, + { + userId, + content: { + text: "I hope you’re right, CJ. Maybe I’ll give it another shot, apologize for being too intense.", + }, + }, + { + userId: zeroUuid, + content: { + text: "That sounds like a good plan. Showing vulnerability can be a strength. And who knows, maybe she’ll find your enthusiasm charming in hindsight.", + }, + }, + { + userId, + content: { text: "Thanks, CJ. I'll message her again." }, + }, +]; + +// CJ follows up with Alice about how it went +export const FollowUpWithAlice = (userId: UUID): ConversationExample[] => [ + { + userId: zeroUuid, + content: { + text: "Alice, how was your conversation with Jim? I hope you found some interesting topics to discuss.", + }, + }, + { + userId, + content: { + text: "It was okay, actually. He was a bit intense at first, but we ended up finding some common ground.", + }, + }, + { + userId: zeroUuid, + content: { + text: "It can take a moment to adjust to someone’s communication style, but it sounds like you managed quite well.", + }, + }, + { + userId, + content: { + text: "Yeah, I think so. I’m planning to message him again. Maybe we’ll get that skydiving adventure planned after all.", + }, + }, + { + userId: zeroUuid, + content: { + text: "It’s always nice when new connections take an unexpected but positive turn.", + }, + }, + { + userId, + content: { text: "Definitely. Thanks, CJ!" }, + }, +]; + +export const Personas = [ + { + name: "Jim Cummins", + age: 38, + location: "San Francisco, CA", + descriptions: `Jim is a 38-year-old entrepreneur living in San Francisco, at the helm of his own tech startup. His journey through the tech world is fueled by a passion for solving complex problems and bringing innovative ideas to life. Despite the demands of his career, Jim seeks balance and enjoys disconnecting through outdoor activities, particularly hiking, which offers him a different kind of quiet and a way to clear his mind. He's also intrigued by the thrill of skydiving, a testament to his adventurous spirit and desire to face and conquer fears. + In terms of relationships, Jim values loyalty, honesty, and a good sense of humor. His ideal partner would be someone who understands the startup lifestyle's ups and downs and shares his curiosity for exploring new ideas. Although his work often keeps him tethered to the city, he's open to making meaningful connections within his vicinity. Physically, Jim is casual with a laid-back style that complements his approachable and thoughtful nature. His eyes, which he believes to be blue, summary his depth and contemplative outlook. + Jim's life is a blend of intense focus on his professional goals and a genuine appreciation for the simpler, quieter moments outside of work. He looks for depth in relationships, hoping to find a supportive and kind partner who values meaningful conversations and shared adventures. Despite the occasional intensity he might bring to interactions, his underlying sincerity and the value he places on personal connections shine through, making him an intriguing potential partner for someone with similar values and interests.`, + }, + { + name: "Alice Chen", + age: 32, + location: "Sausalito, CA", + description: `Alice resides in the scenic area of Marin, just a stone's throw from San Francisco, allowing her the best of both worlds: the tranquility of nature and the vibrant tech scene of the city. She is a programmer leading a team for an MLOps platform, indicative of her technical prowess and leadership skills. Her work in tech doesn't confine her interests, as she has a pronounced love for the outdoors, balancing the digital with the natural through activities like hiking. + At the heart of Alice's friendships and potential romantic endeavors is a desire for balance and shared interests, particularly in tech and outdoor adventures. Her openness to skydiving speaks volumes about her adventurous spirit and willingness to embrace life's thrilling experiences. Alice looks for someone who can appreciate both the adrenaline of adventure and the serenity of nature's landscapes, someone who understands the value of a good laugh and the depth of a thoughtful conversation. + Physically, Alice has an active and vibrant presence that matches her dynamic lifestyle. Her approachability and engaging demeanor make her an attractive prospect for someone who shares her enthusiasm for tech, nature, and possibly, the exhilarating experience of skydiving. Alice values communication and a good sense of humor in her relationships, seeking a partner who can navigate the complexities of life with a positive outlook and an adventurous heart.`, + }, + { + name: "Gloria", + age: 44, + description: `Gloria is a vibrant individual with a deep passion for anime, which colors much of her life and interests. Living in a cozy, anime-adorned apartment in the heart of the city, she finds solace and inspiration in the rich narratives and artistic expressions of Japanese animation. Unlike Jim and Alice, Gloria doesn't share an affinity for technology or programming. Instead, she immerses herself in the storytelling and cultural exploration offered by her extensive anime collection, ranging from classic series to the latest releases. + Gloria has built a life that summarys her unique interests, often attending anime conventions, engaging in cosplay, and participating in fan communities where she connects with like-minded individuals. Her ideal friends and potential partners are those who understand and share her enthusiasm for anime, appreciating the artistry and emotional depth it can offer. Gloria looks for connections that go beyond surface-level interests, hoping to find others who can engage in deep discussions about character development, plot intricacies, and thematic elements found in her favorite series. + Physically, Gloria often expresses her love for anime through her fashion, incorporating elements of her favorite characters into her daily wardrobe, which makes her stand out in a crowd with a playful and imaginative style. Her home is a testament to her passion, filled with anime posters, figurines, and collectibles that create an inviting space for fellow enthusiasts. For Gloria, the ideal partner is someone who not only respects her interests but is also eager to dive into marathon viewing sessions and share insights into the anime's underlying messages. Despite her disinterest in computers and programming, Gloria's rich inner world and creative spirit make her an engaging and captivating individual to those who share or appreciate her passions.`, + }, +]; + +export const jimProfileExample1 = `Tech entrepreneur with a zest for adventure and deep connections +38-year-old residing in San Francisco, embodies a blend of entrepreneurial drive and a quest for outdoor adventures. His laid-back demeanor belies a keen intellect and a summaryive nature. +Loyalty and humor stand paramount in his relationships, indicative of his desire for genuine connections. He seeks depth and authenticity in interactions, valuing partners who resonate with his explorative and curious mindset. +His professional life is anchored in his tech startup, where his passion for problem-solving and innovation takes center stage. His work summarys a commitment to impact and a balance between ambition and personal fulfillment. +Striving for equilibrium, He acknowledges the challenges of balancing a demanding career with personal aspirations. His introspective side complements his outgoing nature, creating a dynamic personality that values both quiet moments and shared adventures. +Beyond his tech pursuits, He finds solace in nature, with hiking offering a peaceful retreat from the bustling city life. The prospect of skydiving captures his adventurous spirit, symbolizing a broader desire to embrace life's thrills. +He aspires to forge connections that transcend the superficial, seeking a partner who appreciates the nuances of startup life and shares his enthusiasm for the great outdoors and new experiences.`; + +export const jimProfileExample2 = `Adventurous tech entrepreneur who loves hiking. +38-year-old entrepreneur based in San Francisco, CA. Known for his casual, laid-back style. Has a contemplative outlook on life, summaryed in his thoughtful nature and possibly blue eyes. +He places high importance on loyalty, honesty, and a good sense of humor in his relationships. He values depth in conversations and connections, seeking partners and friends who are supportive, understanding, and share his curiosity for exploring new ideas. +At the helm of his own tech startup, he is driven by a passion for solving complex problems and bringing innovative ideas to life. His career is marked by a relentless pursuit of creating something meaningful, highlighting his dedication and entrepreneurial spirit. +He seeks balance in his life, acknowledging the challenges of juggling his startup with personal time. He strives for meaningful connections, valuing loyalty and a shared sense of humor in his relationships. +An avid outdoor enthusiast, He enjoys disconnecting through activities like hiking, appreciating the quiet and clarity it brings to his mind. Intrigued by the thrill of skydiving, his adventurous spirit is evident in his desire to face and conquer fears. +He is looking for a partner who understands the ups and downs of startup life and shares his passion for outdoor adventures and exploring new ideas. Despite his busy lifestyle, he's open to making meaningful connections within his vicinity.`; + +export const jimFacts = [ + "Jim is 38 years old", + "Jim lives in San Francisco, CA", + "Jim is an entrepreneur who runs his own tech startup", + "Jim values loyalty and honesty in relationships", + "Jim enjoys outdoor activities, especially hiking", + "Jim is interested in skydiving", + "Jim values a good sense of humor", + "Jim seeks balance between his professional and personal life", + "Jim is open to making meaningful connections within his vicinity", + "Jim has a casual and laid-back style", + "Jim believes his eyes are blue", + "Jim is driven by the challenge of solving problems and creating something meaningful", + "Jim finds nature to be a peaceful retreat and enjoys the quiet it brings", + "Jim aspires to share his curiosity for exploring new ideas with a partner", +]; diff --git a/packages/core/src/test_resources/getOrCreateRelationship.ts b/packages/core/src/test_resources/getOrCreateRelationship.ts new file mode 100644 index 00000000000..9ecab65ee9e --- /dev/null +++ b/packages/core/src/test_resources/getOrCreateRelationship.ts @@ -0,0 +1,66 @@ +import { getRelationship } from "@ai16z/eliza/src/relationships.ts"; +import { IAgentRuntime, Relationship, UUID } from "@ai16z/eliza/src/types.ts"; + +export async function getOrCreateRelationship({ + runtime, + userA, + userB, +}: { + runtime: IAgentRuntime; + userA: UUID; + userB: UUID; +}): Promise { + // Check if a relationship already exists between userA and userB + let relationship: Relationship | null = null; + try { + relationship = await getRelationship({ runtime, userA, userB }); + } catch (error) { + console.log("Error fetching relationship", error); + } + + if (!relationship) { + await runtime.databaseAdapter.createRelationship({ + userA, + userB, + }); + + relationship = await getRelationship({ runtime, userA, userB }); + } + + // Check if a room already exists for the participants + const rooms = await runtime.databaseAdapter.getRoomsForParticipants([ + userA, + userB, + ]); + + let roomId: UUID; + if (!rooms || rooms.length === 0) { + console.log("No room found for participants"); + // If no room exists, create a new room for the relationship + roomId = await runtime.databaseAdapter.createRoom(); + console.log("Created room", roomId); + + // Add participants to the newly created room + await runtime.databaseAdapter.addParticipant(userA, roomId); + await runtime.databaseAdapter.addParticipant(userB, roomId); + } else { + console.log("Room found for participants", rooms[0]); + // If a room already exists, use the existing room + roomId = rooms[0]; + } + + if (!relationship) { + // Create the relationship + await runtime.databaseAdapter.createRelationship({ + userA, + userB, + }); + + relationship = await getRelationship({ runtime, userA, userB }); + + if (!relationship) { + throw new Error("Failed to fetch the created relationship"); + } + } + return { ...relationship, roomId }; +} diff --git a/packages/core/src/test_resources/populateMemories.ts b/packages/core/src/test_resources/populateMemories.ts new file mode 100644 index 00000000000..bef1cddc2f3 --- /dev/null +++ b/packages/core/src/test_resources/populateMemories.ts @@ -0,0 +1,34 @@ +import { Content, IAgentRuntime, type UUID } from "@ai16z/eliza/src/types.ts"; +import { getCachedEmbeddings, writeCachedEmbedding } from "./cache.ts"; +import { type User } from "./types.ts"; + +export async function populateMemories( + runtime: IAgentRuntime, + user: User, + roomId: UUID, + conversations: Array< + (userId: UUID) => Array<{ userId: UUID; content: Content }> + > +) { + for (const conversation of conversations) { + for (const c of conversation(user?.id as UUID)) { + const existingEmbedding = await getCachedEmbeddings(c.content.text); + const bakedMemory = + await runtime.messageManager.addEmbeddingToMemory({ + userId: c.userId as UUID, + agentId: runtime.agentId, + content: c.content, + roomId, + embedding: existingEmbedding, + }); + await runtime.messageManager.createMemory(bakedMemory); + if (!existingEmbedding) { + writeCachedEmbedding( + c.content.text, + bakedMemory.embedding as number[] + ); + await new Promise((resolve) => setTimeout(resolve, 200)); + } + } + } +} diff --git a/packages/core/src/test_resources/report.ts b/packages/core/src/test_resources/report.ts new file mode 100644 index 00000000000..1982ab864e8 --- /dev/null +++ b/packages/core/src/test_resources/report.ts @@ -0,0 +1,97 @@ +import fs from "fs"; + +interface TestResult { + testName: string; + attempts: number; + successful: number; + successRate: number; +} + +export async function deleteReport() { + const { existsSync, unlinkSync } = fs; + + // Define the path to the test-report.json file + const reportPath = "./test-report.json"; + + // Check if test-report.json exists + if (existsSync(reportPath)) { + // Delete the file + unlinkSync(reportPath); + } +} + +export async function addToReport( + testName: string, + attempts: number, + successful: number, + successRate: number +) { + const { existsSync, readFileSync, writeFileSync } = fs; + + // Define the path to the test-report.json file + const reportPath = "./test-report.json"; + + // Initialize an empty array to hold the test results + let report: TestResult[] = []; + + // Check if test-report.json exists + if (existsSync(reportPath)) { + // Read the existing test report + const reportContent = readFileSync(reportPath, "utf-8"); + report = JSON.parse(reportContent); + } + + // Check if the test already exists in the report + const existingTestIndex = report.findIndex( + (test) => test.testName === testName + ); + + // Create a new test result object + const newTestResult: TestResult = { + testName, + attempts, + successful, + successRate, + }; + + if (existingTestIndex !== -1) { + // If the test already exists, replace it with the new result + report[existingTestIndex] = newTestResult; + } else { + // If the test doesn't exist, add the new result to the report + report.push(newTestResult); + } + + // Write the updated report to test-report.json + writeFileSync(reportPath, JSON.stringify(report, null, 2)); +} + +export async function logReport() { + const { existsSync, readFileSync } = fs; + + // Define the path to the test-report.json file + const reportPath = "./test-report.json"; + + // Check if test-report.json exists + if (!existsSync(reportPath)) { + console.log("Error: test-report.json does not exist."); + return; + } + + // Read the test report + const reportContent = readFileSync(reportPath, "utf-8"); + const report: TestResult[] = JSON.parse(reportContent); + + // Log each test result with appropriate color-coding + report.forEach((test) => { + const logMessage = `${test.testName}: ${test.attempts} Attempts, ${test.successful} Successful, Success Rate: ${test.successRate}%`; + + if (test.successRate === 100) { + console.log(logMessage); + } else if (test.successRate < 100 && test.successRate > 0) { + console.warn(logMessage); + } else { + console.error(logMessage); + } + }); +} diff --git a/packages/core/src/test_resources/runAiTest.ts b/packages/core/src/test_resources/runAiTest.ts new file mode 100644 index 00000000000..06cbe4e71ec --- /dev/null +++ b/packages/core/src/test_resources/runAiTest.ts @@ -0,0 +1,17 @@ +import { addToReport } from "./report.ts"; + +export async function runAiTest( + testName: string, + testFunc: () => Promise, + runs: number = 3 +) { + let successful = 0; + + for (let i = 0; i < runs; i++) { + // console.log("Running test", testName, " (iteration", i + ")"); + if (await testFunc()) successful++; + } + + const successRate = (successful / runs) * 100; + addToReport(testName, runs, successful, successRate); +} diff --git a/packages/core/src/test_resources/templates.ts b/packages/core/src/test_resources/templates.ts new file mode 100644 index 00000000000..b414417b38f --- /dev/null +++ b/packages/core/src/test_resources/templates.ts @@ -0,0 +1,27 @@ +import { messageCompletionFooter } from "@ai16z/eliza/src/parsing.ts"; + +export const messageHandlerTemplate = + `{{actionExamples}} + +# IMPORTANT: DO NOT USE THE INFORMATION FROM THE EXAMPLES ABOVE. THE EXAMPLES ARE FOR REFERENCE ONLY. + +~~~ + +# TASK: GENERATE THE NEXT MESSAGE IN THE SCENE FOR {{agentName}} +- Generate the next message in the scene for {{agentName}} +- {{agentName}} is not an assistant - do not write assistant-like responses or ask questions +- Include content and action in the response +- Available actions are {{actionNames}} + +{{knowledge}} +{{lore}} +{{goals}} +{{actors}} +{{actionNames}} +{{actions}} +{{providers}} + +# INSTRUCTIONS: Generate the next message in the scene for {{agentName}} + +{{recentMessages}} +` + messageCompletionFooter; diff --git a/packages/core/src/test_resources/testAction.ts b/packages/core/src/test_resources/testAction.ts new file mode 100644 index 00000000000..78ea87a3a6e --- /dev/null +++ b/packages/core/src/test_resources/testAction.ts @@ -0,0 +1,59 @@ +import { + IAgentRuntime, + type Action, + type Memory, +} from "@ai16z/eliza/src/types.ts"; + +export const TEST_ACTION = { + name: "TEST_ACTION", + validate: async (_runtime: IAgentRuntime, _message: Memory) => { + return true; + }, + description: "This is a test action, for use in testing.", + handler: async ( + runtime: IAgentRuntime, + message: Memory + ): Promise => { + return true; + }, + examples: [ + [ + { + user: "{{user1}}", + content: { + text: "Please respond with the message 'testing 123' and the action TEST_ACTION", + action: "TEST_ACTION", + }, + }, + { + user: "{{user2}}", + content: { text: "testing 123", action: "TEST_ACTION" }, + }, + ], + ], +} as Action; + +export const TEST_ACTION_FAIL = { + name: "TEST_ACTION_FAIL", + validate: async (_runtime: IAgentRuntime, _message: Memory) => { + return false; + }, + description: "This is a test action, for use in testing.", + handler: async ( + runtime: IAgentRuntime, + message: Memory + ): Promise => { + return false; + }, + examples: [ + [ + { + user: "{{user1}}", + content: { + text: "Testing failure", + action: "TEST_ACTIONFALSE", + }, + }, + ], + ], +} as Action; diff --git a/packages/core/src/test_resources/testEvaluator.ts b/packages/core/src/test_resources/testEvaluator.ts new file mode 100644 index 00000000000..ca7eaa429fc --- /dev/null +++ b/packages/core/src/test_resources/testEvaluator.ts @@ -0,0 +1,67 @@ +import { + Evaluator, + IAgentRuntime, + type Memory, + type State, +} from "@ai16z/eliza/src/types.ts"; + +async function handler(runtime: IAgentRuntime, message: Memory) { + const state = (await runtime.composeState(message)) as State; + return state; +} + +export const TEST_EVALUATOR = { + name: "TEST_EVALUATOR", + validate: async ( + _runtime: IAgentRuntime, + + _message: Memory + ): Promise => { + return await Promise.resolve(true); + }, + description: "Test evaluator.", + handler, + examples: [ + { + context: "Testing, testing, 123 123", + messages: [ + { + user: "{{user1}}", + content: { + text: "Testing, testing, 123 123", + action: "TEST_EVALUATOR", + }, + }, + ], + outcome: "There is an outcome.", + }, + ], +} as Evaluator; + +export const TEST_EVALUATOR_FAIL = { + name: "TEST_EVALUATOR_FAIL", + validate: async ( + _runtime: IAgentRuntime, + + _message: Memory + ): Promise => { + return await Promise.resolve(false); + }, + description: "Test failure of the evaluator and validation.", + handler, + examples: [ + { + context: "Testing, testing, 123 123", + messages: [ + { + user: "{{user1}}", + content: { + text: "Testing, testing, 123 123", + action: "TEST_EVALUATOR_FAIL", + }, + }, + ], + outcome: "Things have been tested to have maybe gone wrong.", + }, + ], +} as Evaluator; diff --git a/packages/core/src/test_resources/testSetup.ts b/packages/core/src/test_resources/testSetup.ts new file mode 100644 index 00000000000..badfd3cc6a7 --- /dev/null +++ b/packages/core/src/test_resources/testSetup.ts @@ -0,0 +1,11 @@ +import dotenv from "dotenv"; +import path from "path"; + +// Load test environment variables +const envPath = path.resolve(__dirname, "../../.env.test"); +console.log('Current directory:', __dirname); +console.log('Trying to load env from:', envPath); +const result = dotenv.config({ path: envPath }); +if (result.error) { + console.error('Error loading .env.test:', result.error); +} diff --git a/packages/core/src/test_resources/types.ts b/packages/core/src/test_resources/types.ts new file mode 100644 index 00000000000..634e266cbe4 --- /dev/null +++ b/packages/core/src/test_resources/types.ts @@ -0,0 +1,6 @@ +export interface User { + id: string; + email?: string; + phone?: string; + role?: string; +} diff --git a/packages/core/src/tests/actions.test.ts b/packages/core/src/tests/actions.test.ts index 85594d9ceef..584b284bdcd 100644 --- a/packages/core/src/tests/actions.test.ts +++ b/packages/core/src/tests/actions.test.ts @@ -1,15 +1,15 @@ import dotenv from "dotenv"; -import { createRuntime } from "../test_resources/createRuntime.ts"; -import { getOrCreateRelationship } from "../test_resources/getOrCreateRelationship.ts"; -import { runAiTest } from "../test_resources/runAiTest.ts"; -import { messageHandlerTemplate } from "../test_resources/templates.ts"; +import { createRuntime } from "../test_resources/createRuntime"; +import { getOrCreateRelationship } from "../test_resources/getOrCreateRelationship"; +import { runAiTest } from "../test_resources/runAiTest"; +import { messageHandlerTemplate } from "../test_resources/templates"; import { TEST_ACTION, TEST_ACTION_FAIL, -} from "../test_resources/testAction.ts"; -import { type User } from "../test_resources/types.ts"; -import { composeContext } from "../context.ts"; -import { embeddingZeroVector } from "../memory.ts"; +} from "../test_resources/testAction"; +import { type User } from "../test_resources/types"; +import { composeContext } from "../context"; +import { embeddingZeroVector } from "../memory"; import { Content, IAgentRuntime, @@ -20,8 +20,9 @@ import { } from "../types.ts"; import { stringToUuid } from "../uuid.ts"; import { generateMessageResponse } from "../generation.ts"; -import { MemoryManager } from "../memory.ts"; -import { describe, test, expect, beforeAll, afterAll } from 'vitest'; +import { MemoryManager } from "../memory"; +import { describe, test, expect, beforeAll, afterAll } from "vitest"; + async function handleMessage( runtime: IAgentRuntime, message: Memory, diff --git a/packages/core/src/tests/env.test.ts b/packages/core/src/tests/env.test.ts new file mode 100644 index 00000000000..369884bdf3e --- /dev/null +++ b/packages/core/src/tests/env.test.ts @@ -0,0 +1,26 @@ +import { describe, it, expect } from 'vitest'; +import fs from 'fs'; +import path from 'path'; + +describe('Environment Setup', () => { + it('should verify .env.test file exists', () => { + const possiblePaths = [ + path.join(process.cwd(), '.env.test'), + path.join(process.cwd(), 'packages/core/.env.test'), + path.join(__dirname, '../../.env.test'), + path.join(__dirname, '../.env.test'), + path.join(__dirname, '.env.test'), + ]; + + console.log('Current working directory:', process.cwd()); + console.log('__dirname:', __dirname); + + const existingPaths = possiblePaths.filter(p => { + const exists = fs.existsSync(p); + console.log(`Path ${p} exists: ${exists}`); + return exists; + }); + + expect(existingPaths.length).toBeGreaterThan(0); + }); +}); \ No newline at end of file diff --git a/packages/core/src/tests/token.test.ts b/packages/core/src/tests/token.test.ts index d28d9ae6f3a..e59eb3c754a 100644 --- a/packages/core/src/tests/token.test.ts +++ b/packages/core/src/tests/token.test.ts @@ -1,19 +1,22 @@ -import { createRuntime } from "../test_resources/createRuntime.ts"; -import { TokenProvider, WalletProvider, Connection, PublicKey } from "@ai16z/plugin-solana"; +import { loadEnvConfig } from '../settings'; + +// Load the environment variables +loadEnvConfig(); +// Now import other modules +import { createRuntime } from "../test_resources/createRuntime"; +import { TokenProvider, WalletProvider, Connection, PublicKey } from "@ai16z/plugin-solana"; import { describe, test, expect, beforeEach, vi } from 'vitest'; +import NodeCache from 'node-cache'; describe("TokenProvider Tests", () => { let tokenProvider: TokenProvider; - // Mock the dependencies - vi.mock("cross-fetch"); - vi.mock("fs"); - vi.mock("node-cache"); - vi.mock("@solana/web3.js"); - vi.mock("unique-names-generator"); - beforeEach(() => { + // Clear all mocks before each test + vi.clearAllMocks(); + + // Create new instance of TokenProvider tokenProvider = new TokenProvider( "2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh", new WalletProvider( @@ -21,61 +24,59 @@ describe("TokenProvider Tests", () => { new PublicKey("2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh") ) ); + + // Clear the cache and ensure it's empty + (tokenProvider as any).cache.flushAll(); + (tokenProvider as any).cache.close(); + (tokenProvider as any).cache = new NodeCache(); + + // Mock the getCachedData method instead + vi.spyOn(tokenProvider as any, 'getCachedData').mockReturnValue(null); }); test("should fetch token security data", async () => { const { runtime } = await createRuntime({ - conversationLength: 10, + env: process.env, + conversationLength: 10, }); - + // Mock the response for the fetchTokenSecurity call const mockFetchResponse = { - success: true, - data: { - ownerBalance: "100", - creatorBalance: "50", - ownerPercentage: 10, - creatorPercentage: 5, - top10HolderBalance: "200", - top10HolderPercent: 20, - }, + success: true, + data: { + ownerBalance: "100", + creatorBalance: "50", + ownerPercentage: 10, + creatorPercentage: 5, + top10HolderBalance: "200", + top10HolderPercent: 20, + }, }; - + // Mock fetchWithRetry function const fetchSpy = vi - .spyOn(tokenProvider as any, "fetchWithRetry") - .mockResolvedValue(mockFetchResponse); - - // Run the fetchTokenSecurity method - // const securityData = await tokenProvider.fetchTokenSecurity(); - + .spyOn(tokenProvider as any, "fetchWithRetry") + .mockResolvedValue(mockFetchResponse); + + // Run the fetchTokenSecurity method + const securityData = await tokenProvider.fetchTokenSecurity(); // Check if the data returned is correct - // expect(securityData).toEqual({ - // ownerBalance: "100", - // creatorBalance: "50", - // ownerPercentage: 10, - // creatorPercentage: 5, - // top10HolderBalance: "200", - // top10HolderPercent: 20, - // }); - //console.log the securityData - // console.log({ securityData }); - - // const holderList = await tokenProvider.fetchHolderList(); - - // console.log({ holderList }); - - // const tradeData = await tokenProvider.fetchTokenTradeData(); - // console.log({ tradeData }); - - // const dexScreenerData = await tokenProvider.fetchDexScreenerData(); - // console.log({ dexScreenerData }); - - // const tokenReport = - // await tokenProvider.getFormattedTokenReport(runtime); - // console.log({ tokenReport }); + expect(securityData).toEqual({ + ownerBalance: "100", + creatorBalance: "50", + ownerPercentage: 10, + creatorPercentage: 5, + top10HolderBalance: "200", + top10HolderPercent: 20, + }); + console.log({ securityData }); // Ensure the mock was called expect(fetchSpy).toHaveBeenCalled(); + + // Ensure the mock was called with correct URL + expect(fetchSpy).toHaveBeenCalledWith( + expect.stringContaining("https://public-api.birdeye.so/defi/token_security?address=2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh"), + ); }); }); diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts new file mode 100644 index 00000000000..2ce1d5d7f32 --- /dev/null +++ b/packages/core/vitest.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vitest/config'; +import path from 'path'; + +export default defineConfig({ + test: { + setupFiles: ['./src/test_resources/testSetup.ts'], + environment: 'node', + globals: true, + testTimeout: 120000, + }, + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +}); \ No newline at end of file diff --git a/packages/plugin-solana/src/index.ts b/packages/plugin-solana/src/index.ts index 52d5fa71b92..317fec17ce2 100644 --- a/packages/plugin-solana/src/index.ts +++ b/packages/plugin-solana/src/index.ts @@ -13,6 +13,12 @@ import { Plugin } from "@ai16z/eliza"; import { walletProvider } from "./providers/wallet.ts"; import { trustScoreProvider } from "./providers/trustScoreProvider.ts"; import { trustEvaluator } from "./evaluators/trust.ts"; +import { TokenProvider } from "./providers/token.ts"; +import { WalletProvider } from "./providers/wallet.ts"; +import { Connection } from "@solana/web3.js"; +import { PublicKey } from "@solana/web3.js"; + +export { TokenProvider, WalletProvider, Connection, PublicKey }; export const solanaPlugin: Plugin = { name: "solana", diff --git a/packages/plugin-solana/src/providers/orderBook.ts b/packages/plugin-solana/src/providers/orderBook.ts index 40a215762ab..08f9d0185cb 100644 --- a/packages/plugin-solana/src/providers/orderBook.ts +++ b/packages/plugin-solana/src/providers/orderBook.ts @@ -1,6 +1,6 @@ import { IAgentRuntime, Memory, Provider, State } from "@ai16z/eliza"; import * as fs from "fs"; -import settings from "@ai16z/eliza/src/settings.ts"; +import {settings} from "@ai16z/eliza/src/settings.ts"; interface Order { userId: string; diff --git a/packages/plugin-solana/src/providers/token.ts b/packages/plugin-solana/src/providers/token.ts index 538e44349a7..f7d6eee5c0f 100644 --- a/packages/plugin-solana/src/providers/token.ts +++ b/packages/plugin-solana/src/providers/token.ts @@ -1,4 +1,4 @@ -import settings from "@ai16z/eliza/src/settings.ts"; +import {settings} from "@ai16z/eliza/src/settings.ts"; import { IAgentRuntime, Memory, Provider, State } from "@ai16z/eliza"; import { DexScreenerData, diff --git a/packages/plugin-solana/src/providers/trustScoreProvider.ts b/packages/plugin-solana/src/providers/trustScoreProvider.ts index 06a90e7e041..c48578d2ec1 100644 --- a/packages/plugin-solana/src/providers/trustScoreProvider.ts +++ b/packages/plugin-solana/src/providers/trustScoreProvider.ts @@ -17,9 +17,12 @@ import { TradePerformance, TokenRecommendation, } from "../adapters/trustScoreDatabase.ts"; -import settings from "@ai16z/eliza/src/settings.ts"; +import { settings, loadEnvConfig } from "@ai16z/eliza/src/settings.ts"; import { IAgentRuntime, Memory, Provider, State } from "@ai16z/eliza"; +loadEnvConfig(); +console.log("DEBUG - TrustScoreProvider settings loaded"); +console.log(settings); const Wallet = settings.MAIN_WALLET_ADDRESS; interface TradeData { buy_amount: number; From 4d7e0aa6487f80f2818217858131d82f77cfaffe Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 13:40:11 -0600 Subject: [PATCH 03/26] cleanup --- .nvmrc | 1 + .vscode/launch.json | 20 +- package.json | 3 +- packages/core/.gitignore | 3 +- ...LybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json | 1 - ...LybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json | 1 - packages/core/src/embedding.ts | 2 +- packages/core/src/generation.ts | 2 +- packages/core/src/models.ts | 2 +- packages/core/src/runtime.ts | 2 +- packages/core/src/settings.ts | 76 +- pnpm-lock.yaml | 851 +++++++++--------- 12 files changed, 457 insertions(+), 507 deletions(-) create mode 100644 .nvmrc delete mode 100644 packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json delete mode 100644 packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000000..06cd0272520 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v23.1.0 \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 30a1891bdc1..b6973cd3571 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,6 +11,24 @@ "runtimeExecutable": "pnpm", "runtimeArgs": ["run", "dev"], "skipFiles": ["/**"] - } + }, + { + "type": "node", + "request": "launch", + "name": "Debug Vitest", + "program": "${workspaceFolder}/node_modules/vitest/vitest.mjs", + "args": [ + "run", + "--", + "${relativeFile}" // Ensures the currently open test file is passed + ], + "cwd": "${workspaceFolder}", + "env": { + "NODE_ENV": "test" // Ensure test environment is set + }, + "autoAttachChildProcesses": true, + "smartStep": true, + "skipFiles": ["/**"] + } ] } diff --git a/package.json b/package.json index 398cf414e6b..9096f7caa23 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "docker:run": "bash ./scripts/docker.sh run", "docker:bash": "bash ./scripts/docker.sh bash", "docker:start": "bash ./scripts/docker.sh start", - "docker": "pnpm docker:build && pnpm docker:run && pnpm docker:bash" + "docker": "pnpm docker:build && pnpm docker:run && pnpm docker:bash", + "tests": "pnpm --dir packages/core test" }, "devDependencies": { "concurrently": "^9.1.0", diff --git a/packages/core/.gitignore b/packages/core/.gitignore index e1a400663fa..d365b5f35b6 100644 --- a/packages/core/.gitignore +++ b/packages/core/.gitignore @@ -1,4 +1,5 @@ node_modules dist elizaConfig.yaml -custom_actions/ \ No newline at end of file +custom_actions/ +cache/ \ No newline at end of file diff --git a/packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json b/packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json deleted file mode 100644 index f101587ac59..00000000000 --- a/packages/core/cache/holderList_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json +++ /dev/null @@ -1 +0,0 @@ -{"data":[],"expiry":1731784276120} \ No newline at end of file diff --git a/packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json b/packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json deleted file mode 100644 index 86f67e9a18a..00000000000 --- a/packages/core/cache/tokenSecurity_2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh.json +++ /dev/null @@ -1 +0,0 @@ -{"data":{"ownerBalance":"100","creatorBalance":"50","ownerPercentage":10,"creatorPercentage":5,"top10HolderBalance":"200","top10HolderPercent":20},"expiry":1731784617753} \ No newline at end of file diff --git a/packages/core/src/embedding.ts b/packages/core/src/embedding.ts index 9dd42fa9be4..c1fbbe80e68 100644 --- a/packages/core/src/embedding.ts +++ b/packages/core/src/embedding.ts @@ -5,7 +5,7 @@ import { models } from "./models.ts"; import { IAgentRuntime, ModelProviderName, ModelClass } from "./types.ts"; import fs from "fs"; import { trimTokens } from "./generation.ts"; -import { settings } from "./settings.ts"; +import settings from "./settings.ts"; function getRootPath() { const __filename = fileURLToPath(import.meta.url); diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 3c746855bbc..abbd7b159f8 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -22,7 +22,7 @@ import { parseJSONObjectFromText, parseShouldRespondFromText, } from "./parsing.ts"; -import { settings } from "./settings.ts"; +import settings from "./settings.ts"; import { Content, IAgentRuntime, diff --git a/packages/core/src/models.ts b/packages/core/src/models.ts index 71b8c928dba..ea3fd125d5c 100644 --- a/packages/core/src/models.ts +++ b/packages/core/src/models.ts @@ -1,4 +1,4 @@ -import { settings } from "./settings.ts"; +import settings from "./settings.ts"; import { Models, ModelProviderName, ModelClass } from "./types.ts"; export const models: Models = { diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index b4a6030a6f9..93bc477965d 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -20,7 +20,7 @@ import { formatActors, formatMessages, getActorDetails } from "./messages.ts"; import { parseJsonArrayFromText } from "./parsing.ts"; import { formatPosts } from "./posts.ts"; import { getProviders } from "./providers.ts"; -import { settings } from "./settings.ts"; +import settings from "./settings.ts"; import { Character, Goal, diff --git a/packages/core/src/settings.ts b/packages/core/src/settings.ts index 44e4c150e25..9f4f7c75976 100644 --- a/packages/core/src/settings.ts +++ b/packages/core/src/settings.ts @@ -2,94 +2,54 @@ import { config } from "dotenv"; import fs from "fs"; import path from "path"; -export interface Settings { - MAIN_WALLET_ADDRESS: string; - OPENAI_API_KEY: string; - USE_OPENAI_EMBEDDING: string; - SYSTEM_PROMPT: string; - OPENROUTER_MODEL: string; - SMALL_OPENROUTER_MODEL: string; - MEDIUM_OPENROUTER_MODEL: string; - LARGE_OPENROUTER_MODEL: string; - OLLAMA_MODEL: string; - LARGE_OLLAMA_MODEL: string; - MEDIUM_OLLAMA_MODEL: string; - SMALL_OLLAMA_MODEL: string; - OLLAMA_SERVER_URL: string; - OLLAMA_EMBEDDING_MODEL: string; - RPC_URL: string; - BASE_MINT: string; - BACKEND_URL: string; - BACKEND_TOKEN: string; - BIRDEYE_API_KEY: string; - HELIUS_API_KEY: string; - SERVER_PORT: string; - CAPSOLVER_API_KEY: string; - CUDA_PATH: string; -} - /** * Recursively searches for a .env file starting from the current directory * and moving up through parent directories + * @param {string} [startDir=process.cwd()] - Starting directory for the search + * @returns {string|null} Path to the nearest .env file or null if not found */ export function findNearestEnvFile(startDir = process.cwd()) { - console.error('DEBUG - Starting env file search'); - console.error('DEBUG - Current working directory:', process.cwd()); - - // In test environment, use the known working path - if (process.env.NODE_ENV === 'test' || process.env.VITEST) { - const testPath = path.join(process.cwd(), '.env.test'); - console.error('DEBUG - Checking test path:', testPath); - if (fs.existsSync(testPath)) { - console.error('DEBUG - Found test env file at:', testPath); - return testPath; - } - } - - // Look for regular .env let currentDir = startDir; - const envFile = process.env.NODE_ENV === 'test' ? '.env.test' : '.env'; + // Continue searching until we reach the root directory while (currentDir !== path.parse(currentDir).root) { - const envPath = path.join(currentDir, envFile); - console.error('DEBUG - Checking path:', envPath); + const envPath = path.join(currentDir, ".env"); + if (fs.existsSync(envPath)) { - console.error('DEBUG - Found env file at:', envPath); return envPath; } + + // Move up to parent directory currentDir = path.dirname(currentDir); } - console.error('DEBUG - No env file found after checking all paths'); - console.error('DEBUG - Final cwd:', process.cwd()); - console.error('DEBUG - Final NODE_ENV:', process.env.NODE_ENV); - return null; + // Check root directory as well + const rootEnvPath = path.join(path.parse(currentDir).root, ".env"); + return fs.existsSync(rootEnvPath) ? rootEnvPath : null; } /** * Loads environment variables from the nearest .env file + * @returns {Object} Environment variables object + * @throws {Error} If no .env file is found */ export function loadEnvConfig() { - console.error('DEBUG - loadEnvConfig called'); - console.error('DEBUG - Current working directory:', process.cwd()); - console.error('DEBUG - NODE_ENV:', process.env.NODE_ENV); - const envPath = findNearestEnvFile(); if (!envPath) { throw new Error("No .env file found in current or parent directories."); } - console.error('DEBUG - Loading env file from:', envPath); + // Load the .env file const result = config({ path: envPath }); + if (result.error) { throw new Error(`Error loading .env file: ${result.error}`); } - console.error('DEBUG - Successfully loaded env file'); - - // Populate the settings object with the environment variables - Object.assign(settings, process.env); + console.log(`Loaded .env file from: ${envPath}`); + return process.env; } -export const settings: Settings = {} as Settings; +export const settings = loadEnvConfig(); +export default settings; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 468db71a6eb..afb66c6ab70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,7 +65,7 @@ importers: version: 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(prop-types@15.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/preset-classic': specifier: ^3.6.0 - version: 3.6.1(@algolia/client-search@5.14.2)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/theme-mermaid': specifier: ^3.6.0 version: 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -99,13 +99,13 @@ importers: version: 3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) docusaurus-plugin-typedoc: specifier: ^1.0.5 - version: 1.0.5(typedoc-plugin-markdown@4.2.10(typedoc@0.26.11(typescript@5.6.3))) + version: 1.0.5(typedoc-plugin-markdown@4.2.9(typedoc@0.26.11(typescript@5.6.3))) typedoc: specifier: ^0.26.11 version: 0.26.11(typescript@5.6.3) typedoc-plugin-markdown: specifier: ^4.2.9 - version: 4.2.10(typedoc@0.26.11(typescript@5.6.3)) + version: 4.2.9(typedoc@0.26.11(typescript@5.6.3)) packages/adapter-postgres: dependencies: @@ -406,7 +406,7 @@ 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.2.0)(sswr@2.1.0(svelte@5.2.1))(svelte@5.2.1)(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.2.0)(sswr@2.1.0(svelte@5.1.16))(svelte@5.1.16)(vue@3.5.12(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) @@ -446,7 +446,7 @@ importers: devDependencies: '@eslint/js': specifier: ^9.13.0 - version: 9.15.0 + version: 9.14.0 '@rollup/plugin-commonjs': specifier: 25.0.8 version: 25.0.8(rollup@2.79.2) @@ -759,7 +759,7 @@ importers: version: 5.1.2 pumpdotfun-sdk: specifier: 1.3.2 - version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.27.2)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.26.0)(typescript@5.6.3)(utf-8-validate@5.0.10) tsup: specifier: ^8.3.5 version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) @@ -939,8 +939,8 @@ packages: '@algolia/cache-in-memory@4.24.0': resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} - '@algolia/client-abtesting@5.14.2': - resolution: {integrity: sha512-7fq1tWIy1aNJEaNHxWy3EwDkuo4k22+NBnxq9QlYVSLLXtr6HqmAm6bQgNNzGT3vm21iKqWO9efk+HIhEM1SzQ==} + '@algolia/client-abtesting@5.13.0': + resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==} engines: {node: '>= 14.0.0'} '@algolia/client-account@4.24.0': @@ -949,44 +949,44 @@ packages: '@algolia/client-analytics@4.24.0': resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} - '@algolia/client-analytics@5.14.2': - resolution: {integrity: sha512-5Nm5cOOyAGcY+hKNJVmR2jgoGn1nvoANS8W5EfB8yAaUqUxL3lFNUHSkFafAMTCOcVKNDkZQYjUDbOOfdYJLqw==} + '@algolia/client-analytics@5.13.0': + resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==} engines: {node: '>= 14.0.0'} '@algolia/client-common@4.24.0': resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - '@algolia/client-common@5.14.2': - resolution: {integrity: sha512-BW1Qzhh9tMKEsWSQQsiOEcHAd6g7zxq9RpPVmyxbDO/O4eA4vyN+Qz5Jzo686kuYdIQKqIPCEtob/JM89tk57g==} + '@algolia/client-common@5.13.0': + resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.14.2': - resolution: {integrity: sha512-17zg6pqifKORvvrMIqW6HhwUry9RKRXLgADrgFjZ6PZvGB4oVs12dwRG2/HMrIlpxd9cjeQfdlEgHj6lbAf6QA==} + '@algolia/client-insights@5.13.0': + resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==} engines: {node: '>= 14.0.0'} '@algolia/client-personalization@4.24.0': resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - '@algolia/client-personalization@5.14.2': - resolution: {integrity: sha512-5IYt8vbmTA52xyuaZKFwiRoDPeh7hiOC9aBZqqp9fVs6BU01djI/T8pGJXawvwczltCPYzNsdbllV3rqiDbxmQ==} + '@algolia/client-personalization@5.13.0': + resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.14.2': - resolution: {integrity: sha512-gvCX/cczU76Bu1sGcxxTdoIwxe+FnuC1IlW9SF/gzxd3ZzsgzBpzD2puIJqt9fHQsjLxVGkJqKev2FtExnJYZg==} + '@algolia/client-query-suggestions@5.13.0': + resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==} engines: {node: '>= 14.0.0'} '@algolia/client-search@4.24.0': resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - '@algolia/client-search@5.14.2': - resolution: {integrity: sha512-0imdBZDjqxrshw0+eyJUgnkRAbS2W93UQ3BVj8VjN4xQylIMf0fWs72W7MZFdHlH78JJYydevgzqvGMcV0Z1CA==} + '@algolia/client-search@5.13.0': + resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - '@algolia/ingestion@1.14.2': - resolution: {integrity: sha512-/p4rBNkW0fgCpCwrwre+jHfzlFQsLemgaAQqyui8NPxw95Wgf3p+DKxYzcmh8dygT7ub7FwztTW+uURLX1uqIQ==} + '@algolia/ingestion@1.13.0': + resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==} engines: {node: '>= 14.0.0'} '@algolia/logger-common@4.24.0': @@ -995,36 +995,36 @@ packages: '@algolia/logger-console@4.24.0': resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} - '@algolia/monitoring@1.14.2': - resolution: {integrity: sha512-81R57Y/mS0uNhWpu6cNEfkbkADLW4bP0BNjuPpxAypobv7WzYycUnbMvv1YkN6OsociB4+3M7HfsVzj4Nc09vA==} + '@algolia/monitoring@1.13.0': + resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==} engines: {node: '>= 14.0.0'} '@algolia/recommend@4.24.0': resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} - '@algolia/recommend@5.14.2': - resolution: {integrity: sha512-OwELnAZxCUyfjYjqsrFmC7Vfa12kqwbDdLUV0oi4j+4pxDsfPgkiZ6iCH2uPw6X8VK88Hl3InPt+RPaZvcrCWg==} + '@algolia/recommend@5.13.0': + resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==} engines: {node: '>= 14.0.0'} '@algolia/requester-browser-xhr@4.24.0': resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - '@algolia/requester-browser-xhr@5.14.2': - resolution: {integrity: sha512-irUvkK+TGBhyivtNCIIbVgNUgbUoHOSk8m/kFX4ddto/PUPmLFRRNNnMHtJ1+OzrJ/uD3Am4FUK2Yt+xgQr05w==} + '@algolia/requester-browser-xhr@5.13.0': + resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==} engines: {node: '>= 14.0.0'} '@algolia/requester-common@4.24.0': resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - '@algolia/requester-fetch@5.14.2': - resolution: {integrity: sha512-UNBg5mM4MIYdxPuVjyDL22BC6P87g7WuM91Z1Ky0J19aEGvCSF+oR+9autthROFXdRnAa1rACOjuqn95iBbKpw==} + '@algolia/requester-fetch@5.13.0': + resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==} engines: {node: '>= 14.0.0'} '@algolia/requester-node-http@4.24.0': resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - '@algolia/requester-node-http@5.14.2': - resolution: {integrity: sha512-CTFA03YiLcnpP+JoLRqjHt5pqDHuKWJpLsIBY/60Gmw8pjALZ3TwvbAquRX4Vy+yrin178NxMuU+ilZ54f2IrQ==} + '@algolia/requester-node-http@5.13.0': + resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==} engines: {node: '>= 14.0.0'} '@algolia/transporter@4.24.0': @@ -2364,24 +2364,24 @@ packages: resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@9.13.0': resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.15.0': - resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} + '@eslint/js@9.14.0': + resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.3': - resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + '@eslint/plugin-kit@0.2.2': + resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@google-cloud/vertexai@1.9.0': @@ -2846,67 +2846,67 @@ packages: resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==} engines: {node: ^16.14.0 || >=18.0.0} - '@nx/devkit@20.1.2': - resolution: {integrity: sha512-MTEWiEST7DhzZ2QmrixLnHfYVDZk7QN9omLL8m+5Etcn/3ZKa1aAo9Amd2MkUM+0MPoTKnxoGdw0fQUpAy21Mg==} + '@nx/devkit@20.1.0': + resolution: {integrity: sha512-TDWT3d7nei+FtqoZscR7KtbQ9BXzV1c1Wvk9UUejo7eXbrQ/+YnHVVze8EMuIgTXaHxNIBTKGUPcRi3cibmCDw==} peerDependencies: nx: '>= 19 <= 21' - '@nx/nx-darwin-arm64@20.1.2': - resolution: {integrity: sha512-PJ91TQhd28kitDBubKUOXMYvrtSDrG+rr8MsIe9cHo1CvU9smcGVBwuHBxniq0DXsyOX/5GL6ngq7hjN2nQ3XQ==} + '@nx/nx-darwin-arm64@20.1.0': + resolution: {integrity: sha512-fel9LpSWuwY0cGAsRFEPxLp6J5VcK/5sjeWA0lZWrFf1oQJCOlKBfkxzi384Nd7eK5JSjxIXrpYfRLaqSbp+IA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@20.1.2': - resolution: {integrity: sha512-1fopau7nxIhTF26vDTIzMxl15AtW4FvUSdy+r1mNRKrKyjjpqnlu00SQBW7JzGV0agDD1B/61yYei5Q2aMOt7Q==} + '@nx/nx-darwin-x64@20.1.0': + resolution: {integrity: sha512-l1DB8dk2rCLGgXW26HmFOKYpUCF259LRus8z+z7dsFv5vz9TeN+fk5m9aAdiENgMA2cGlndQQW+E8UIo3yv+9g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@20.1.2': - resolution: {integrity: sha512-55YgIp3v4zz7xMzJO93dtglbOTER2XdS6jrCt8GbKaWGFl5drRrBoNGONtiGNU7C3hLx1VsorbynCkJT18PjKQ==} + '@nx/nx-freebsd-x64@20.1.0': + resolution: {integrity: sha512-f8uMRIhiOA/73cIjiyS3gpKvaAtsHgyUkkoCOPc4xdxoSLAjlxb6VOUPIFj9rzLA6qQXImVpsiNPG+p1sJ1GAQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@20.1.2': - resolution: {integrity: sha512-sMhNA8uAV43UYVEXEa8TZ8Fjpom4CGq1umTptEGOF4TTtdNn2AUBreg+0bVODM8MMSzRWGI1VbkZzHESnAPwqw==} + '@nx/nx-linux-arm-gnueabihf@20.1.0': + resolution: {integrity: sha512-M7pay8hFJQZ3uJHlr5hZK/8o1BcHt95hy/SU7Azt7+LKQGOy42tXhHO30As9APzXqRmvoA2Iq1IyrJJicrz+Ew==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@20.1.2': - resolution: {integrity: sha512-bsevarNHglaYLmIvPNQOdHrBnBgaW3EOUM0flwaXdWuZbL1bWx8GoVwHp9yJpZOAOfIF/Nhq5iTpaZB2nYFrAA==} + '@nx/nx-linux-arm64-gnu@20.1.0': + resolution: {integrity: sha512-A5+Kpk1uwYIj6CPm0DWLVz5wNTN4ewNl7ajLS9YJOi4yHx/FhfMMyPj4ZnbTpc4isuvgZwBZNl8kwFb2RdXq4w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@20.1.2': - resolution: {integrity: sha512-GFZTptkhZPL/iZ3tYDmspIcPEaXyy/L/o59gyp33GoFAAyDhiXIF7J1Lz81Xn8VKrX6TvEY8/9qSh86pb7qzDQ==} + '@nx/nx-linux-arm64-musl@20.1.0': + resolution: {integrity: sha512-pWIQPt9Fst1O4dgrWHdU1b+5wpfLmsmaSeRvLQ9b2VFp3tKGko4ie0skme62TuMgpcqMWDBFKs8KgbHESOi7vw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@20.1.2': - resolution: {integrity: sha512-yqEW/iglKT4d9lgfnwSNhmDzPxCkRhtdmZqOYpGDM0eZFwYwJF+WRGjW8xIqMj8PA1yrGItzXZOmyFjJqHAF2w==} + '@nx/nx-linux-x64-gnu@20.1.0': + resolution: {integrity: sha512-sOpeGOHznk2ztCXzKhRPAKG3WtwaQUsfQ/3aYDXE6z+rSfyZTGY29M/a9FbdjI4cLJX+NdLAAMj15c3VecJ65g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@20.1.2': - resolution: {integrity: sha512-SP6PpWT4cQVrC4WJQdpfADrYJQzkbhgmcGleWbpr7II1HJgOsAcvoDwQGpPQX+3Wo+VBiNecvUAOzacMQkXPGw==} + '@nx/nx-linux-x64-musl@20.1.0': + resolution: {integrity: sha512-SxnQJhjOvuOfUZnF4Wt4/O/l1e21qpACZzfMaPIvmiTLk9zPJZWtfgbqlKtTXHKWq9DfIUZQqZXRIpHPM1sDZQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@20.1.2': - resolution: {integrity: sha512-JZQx9gr39LY3D7uleiXlpxUsavuOrOQNBocwKHkAMnykaT/e1VCxTnm/hk+2b4foWwfURTqoRiFEba70iiCdYg==} + '@nx/nx-win32-arm64-msvc@20.1.0': + resolution: {integrity: sha512-Z/KoaAA+Rg9iqqOPkKZV61MejPoJBOHlecFpq0G4TgKMJEJ/hEsjojq5usO1fUGAbvQT/SXL3pYWgZwhD3VEHw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@20.1.2': - resolution: {integrity: sha512-6GmT8iswDiCvJaCtW9DpWeAQmLS/kfAuRLYBisfzlONuLPaDdjhgVIxZBqqUSFfclwcVz+NhIOGvdr0aGFZCtQ==} + '@nx/nx-win32-x64-msvc@20.1.0': + resolution: {integrity: sha512-pbxacjLsW9vXD9FibvU8Pal/r5+Yq6AaW6I57CDi7jsLt+K6jcS0fP4FlfXT8QFWdx9+bOKNfOsKEIwpirMN1w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2915,8 +2915,8 @@ packages: resolution: {integrity: sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==} engines: {node: '>= 18'} - '@octokit/auth-app@7.1.3': - resolution: {integrity: sha512-GZdkOp2kZTIy5dG9oXqvzUAZiPvDx4C/lMlN6yQjtG9d/+hYa7W8WXTJoOrXE8UdfL9A/sZMl206dmtkl9lwVQ==} + '@octokit/auth-app@7.1.2': + resolution: {integrity: sha512-5cfWRr1hr0w/EW3StFIIOkMtYhOyGZ6/R3T0xeN6UgC/uL5pIyeood9N/8Z7W4NZUdz2QK1Fv0oM/1AzTME3/Q==} engines: {node: '>= 18'} '@octokit/auth-oauth-app@8.1.1': @@ -3304,93 +3304,93 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.27.2': - resolution: {integrity: sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==} + '@rollup/rollup-android-arm-eabi@4.26.0': + resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.27.2': - resolution: {integrity: sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==} + '@rollup/rollup-android-arm64@4.26.0': + resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.27.2': - resolution: {integrity: sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==} + '@rollup/rollup-darwin-arm64@4.26.0': + resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.27.2': - resolution: {integrity: sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==} + '@rollup/rollup-darwin-x64@4.26.0': + resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.27.2': - resolution: {integrity: sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==} + '@rollup/rollup-freebsd-arm64@4.26.0': + resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.27.2': - resolution: {integrity: sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==} + '@rollup/rollup-freebsd-x64@4.26.0': + resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.27.2': - resolution: {integrity: sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==} + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.27.2': - resolution: {integrity: sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==} + '@rollup/rollup-linux-arm-musleabihf@4.26.0': + resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.27.2': - resolution: {integrity: sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==} + '@rollup/rollup-linux-arm64-gnu@4.26.0': + resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.27.2': - resolution: {integrity: sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==} + '@rollup/rollup-linux-arm64-musl@4.26.0': + resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': - resolution: {integrity: sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==} + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.27.2': - resolution: {integrity: sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==} + '@rollup/rollup-linux-riscv64-gnu@4.26.0': + resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.27.2': - resolution: {integrity: sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==} + '@rollup/rollup-linux-s390x-gnu@4.26.0': + resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.27.2': - resolution: {integrity: sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==} + '@rollup/rollup-linux-x64-gnu@4.26.0': + resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.27.2': - resolution: {integrity: sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==} + '@rollup/rollup-linux-x64-musl@4.26.0': + resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.27.2': - resolution: {integrity: sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==} + '@rollup/rollup-win32-arm64-msvc@4.26.0': + resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.27.2': - resolution: {integrity: sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==} + '@rollup/rollup-win32-ia32-msvc@4.26.0': + resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.27.2': - resolution: {integrity: sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==} + '@rollup/rollup-win32-x64-msvc@4.26.0': + resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==} cpu: [x64] os: [win32] @@ -3419,17 +3419,17 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@shikijs/core@1.23.0': - resolution: {integrity: sha512-J4Fo22oBlfRHAXec+1AEzcowv+Qdf4ZQkuP/X/UHYH9+KA9LvyFXSXyS+HxuBRFfon+u7bsmKdRBjoZlbDVRkQ==} + '@shikijs/core@1.22.2': + resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} - '@shikijs/engine-javascript@1.23.0': - resolution: {integrity: sha512-CcrppseWShG+8Efp1iil9divltuXVdCaU4iu+CKvzTGZO5RmXyAiSx668M7VbX8+s/vt1ZKu75Vn/jWi8O3G/Q==} + '@shikijs/engine-javascript@1.22.2': + resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} - '@shikijs/engine-oniguruma@1.23.0': - resolution: {integrity: sha512-gS8bZLqVvmZXX+E5JUMJICsBp+kx6gj79MH/UEpKHKIqnUzppgbmEn6zLa6mB5D+sHse2gFei3YYJxQe1EzZXQ==} + '@shikijs/engine-oniguruma@1.22.2': + resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} - '@shikijs/types@1.23.0': - resolution: {integrity: sha512-HiwzsihRao+IbPk7FER/EQT/D0dEEK3n5LAtHDzL5iRT+JMblA7y9uitUnjEnHeLkKigNM+ZplrP7MuEyyc5kA==} + '@shikijs/types@1.22.2': + resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} '@shikijs/vscode-textmate@9.3.0': resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} @@ -4220,34 +4220,34 @@ packages: resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vue/compiler-core@3.5.12': + resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@vue/compiler-dom@3.5.12': + resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@vue/compiler-sfc@3.5.12': + resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/compiler-ssr@3.5.12': + resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + '@vue/reactivity@3.5.12': + resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + '@vue/runtime-core@3.5.12': + resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + '@vue/runtime-dom@3.5.12': + resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + '@vue/server-renderer@3.5.12': + resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} peerDependencies: - vue: 3.5.13 + vue: 3.5.12 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@3.5.12': + resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -4294,6 +4294,10 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@wolfy1339/lru-cache@11.0.2-patch.1': + resolution: {integrity: sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==} + engines: {node: 18 >=18.20 || 20 || >=22} + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -4439,8 +4443,8 @@ packages: algoliasearch@4.24.0: resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} - algoliasearch@5.14.2: - resolution: {integrity: sha512-aYjI4WLamMxbhdJ2QAA99VbDCJOGzMOdT2agh57bi40n86ufkhZSIAf6mkocr7NmtBLtwCnSHvD5NJ+Ky5elWw==} + algoliasearch@5.13.0: + resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==} engines: {node: '>= 14.0.0'} amp-message@0.1.2: @@ -6020,8 +6024,8 @@ packages: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + dotenv-expand@11.0.6: + resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==} engines: {node: '>=12'} dotenv@16.4.5: @@ -6051,16 +6055,13 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.62: - resolution: {integrity: sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==} + electron-to-chromium@1.5.57: + resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - emoji-regex-xs@1.0.0: - resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -6918,8 +6919,8 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - google-auth-library@9.15.0: - resolution: {integrity: sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==} + google-auth-library@9.14.2: + resolution: {integrity: sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA==} engines: {node: '>=14'} gopd@1.0.1: @@ -7025,8 +7026,8 @@ packages: hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} + hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} hast-util-select@4.0.2: resolution: {integrity: sha512-8EEG2//bN5rrzboPWD2HdS3ugLijNioS1pqOTIolXNf67xxShYw4SQEmVXd3imiBG+U2bC2nVTySr/iRAA7Cjg==} @@ -8100,9 +8101,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.2: - resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} - lossless-json@4.0.2: resolution: {integrity: sha512-+z0EaLi2UcWi8MZRxA5iTb6m4Ys4E80uftGY+yG5KNFJb5EceQXOhdW/pWJZ8m97s26u7yZZAYMcKWNztSZssA==} @@ -8903,8 +8901,8 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 - nx@20.1.2: - resolution: {integrity: sha512-CvjmuQmI0RWLYZxRSIgQZmzsQv6dPp9oI0YZE3L1dagBPfTf5Cun65I0GLt7bdkDnVx2PGYkDbIoJSv2/V+83Q==} + nx@20.1.0: + resolution: {integrity: sha512-d8Ywh1AvG3szYqWEHg2n9DHh/hF0jtVhMZKxwsr7n+kSVxp7gE/rHCCfOo8H+OmP030qXoox5e4Ovp7H9CEJnA==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -8976,8 +8974,8 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@0.1.2: - resolution: {integrity: sha512-sBYKVJlIMB0WPO+tSu/NNB1ytSFeHyyJZ3Ayxfx3f/QUuXu0lvZk0VB4K7npmdlHSC0ldqanzh/sUSlAbgCTfw==} + oniguruma-to-js@0.4.3: + resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} only-allow@1.2.1: resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} @@ -9036,8 +9034,8 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - otpauth@9.3.5: - resolution: {integrity: sha512-jQyqOuQExeIl4YIiOUz4TdEcamgAgPX6UYeeS9Iit4lkvs7bwHb0JNDqchGRccbRfvWHV6oRwH36tOsVmc+7hQ==} + otpauth@9.3.4: + resolution: {integrity: sha512-qXv+lpsCUO9ewitLYfeDKbLYt7UUCivnU/fwGK2OqhgrCBsRkTUNKWsgKAhkXG3aistOY+jEeuL90JEBu6W3mQ==} p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} @@ -9761,8 +9759,8 @@ packages: resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} engines: {node: '>=14.16'} - pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + pretty-ms@9.1.0: + resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} engines: {node: '>=18'} pretty-time@1.1.0: @@ -10182,12 +10180,6 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regex-recursion@4.2.1: - resolution: {integrity: sha512-QHNZyZAeKdndD1G3bKAbBEKOSSK4KOHQrAJ01N1LJeb0SoH4DJIeFhp0uUpETgONifS4+P3sOgoA1dhzgrQvhA==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@4.4.0: resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} @@ -10358,8 +10350,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.27.2: - resolution: {integrity: sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==} + rollup@4.26.0: + resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10549,8 +10541,8 @@ packages: engines: {node: '>=4'} hasBin: true - shiki@1.23.0: - resolution: {integrity: sha512-xfdu9DqPkIpExH29cmiTlgo0/jBki5la1Tkfhsv+Wu5TT3APLNHslR1acxuKJOCWqVdSc+pIbs/2ozjVRGppdg==} + shiki@1.22.2: + resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -10773,9 +10765,6 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - starknet@6.11.0: resolution: {integrity: sha512-u50KrGDi9fbu1Ogu7ynwF/tSeFlp3mzOg1/Y5x50tYFICImo3OfY4lOz9OtYDk404HK4eUujKkhov9tG7GAKlg==} @@ -10940,8 +10929,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.2.1: - resolution: {integrity: sha512-WzyA7VUVlDTLPt+m71bLD5BXasavqvAo68DelxWaPo8dNEZ3tmeq3DSJPsWqnG37cG2hfn7HaD3x882qF+7UOw==} + svelte@5.1.16: + resolution: {integrity: sha512-QcY+om9r8+uTcSfeFuv8++ExdfwVCKeT+Y7GPSZ6rQPczvy62BMtvMoi0rScabgv+upGE5jxKjd7M4u23+AjGA==} engines: {node: '>=18'} svg-parser@2.0.4: @@ -11143,10 +11132,6 @@ packages: to-vfile@6.1.0: resolution: {integrity: sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==} - toad-cache@3.7.0: - resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} - engines: {node: '>=12'} - together-ai@0.7.0: resolution: {integrity: sha512-/be/HOecBSwRTDHB14vCvHbp1WiNsFxyS4pJlyBoMup1X3n7xD1b/Gm5Z5amlKzD2zll9Y5wscDk7Ut5OsT1nA==} @@ -11352,8 +11337,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typedoc-plugin-markdown@4.2.10: - resolution: {integrity: sha512-PLX3pc1/7z13UJm4TDE9vo9jWGcClFUErXXtd5LdnoLjV6mynPpqZLU992DwMGFSRqJFZeKbVyqlNNeNHnk2tQ==} + typedoc-plugin-markdown@4.2.9: + resolution: {integrity: sha512-Wqmx+7ezKFgtTklEq/iUhQ5uFeBDhAT6wiS2na9cFLidIpl9jpDHJy/COYh8jUZXgIRIZVQ/bPNjyrnPFoDwzg==} engines: {node: '>= 18'} peerDependencies: typedoc: 0.26.x @@ -11704,8 +11689,8 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + vue@3.5.12: + resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -12148,13 +12133,13 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/svelte@0.0.57(svelte@5.2.1)(zod@3.23.8)': + '@ai-sdk/svelte@0.0.57(svelte@5.1.16)(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.1) + sswr: 2.1.0(svelte@5.1.16) optionalDependencies: - svelte: 5.2.1 + svelte: 5.1.16 transitivePeerDependencies: - zod @@ -12168,43 +12153,43 @@ snapshots: optionalDependencies: zod: 3.23.8 - '@ai-sdk/vue@0.0.59(vue@3.5.13(typescript@5.6.3))(zod@3.23.8)': + '@ai-sdk/vue@0.0.59(vue@3.5.12(typescript@5.6.3))(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) - swrv: 1.0.4(vue@3.5.13(typescript@5.6.3)) + swrv: 1.0.4(vue@3.5.12(typescript@5.6.3)) optionalDependencies: - vue: 3.5.13(typescript@5.6.3) + vue: 3.5.12(typescript@5.6.3) transitivePeerDependencies: - zod - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2)(search-insights@2.17.2)': + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2)(search-insights@2.17.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2)': + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2) - '@algolia/client-search': 5.14.2 - algoliasearch: 5.14.2 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + '@algolia/client-search': 5.13.0 + algoliasearch: 5.13.0 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2)': + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': dependencies: - '@algolia/client-search': 5.14.2 - algoliasearch: 5.14.2 + '@algolia/client-search': 5.13.0 + algoliasearch: 5.13.0 '@algolia/cache-browser-local-storage@4.24.0': dependencies: @@ -12216,12 +12201,12 @@ snapshots: dependencies: '@algolia/cache-common': 4.24.0 - '@algolia/client-abtesting@5.14.2': + '@algolia/client-abtesting@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/client-account@4.24.0': dependencies: @@ -12236,26 +12221,26 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-analytics@5.14.2': + '@algolia/client-analytics@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/client-common@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-common@5.14.2': {} + '@algolia/client-common@5.13.0': {} - '@algolia/client-insights@5.14.2': + '@algolia/client-insights@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/client-personalization@4.24.0': dependencies: @@ -12263,19 +12248,19 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-personalization@5.14.2': + '@algolia/client-personalization@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 - '@algolia/client-query-suggestions@5.14.2': + '@algolia/client-query-suggestions@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/client-search@4.24.0': dependencies: @@ -12283,21 +12268,21 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-search@5.14.2': + '@algolia/client-search@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/events@4.0.1': {} - '@algolia/ingestion@1.14.2': + '@algolia/ingestion@1.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/logger-common@4.24.0': {} @@ -12305,12 +12290,12 @@ snapshots: dependencies: '@algolia/logger-common': 4.24.0 - '@algolia/monitoring@1.14.2': + '@algolia/monitoring@1.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/recommend@4.24.0': dependencies: @@ -12326,34 +12311,34 @@ snapshots: '@algolia/requester-node-http': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/recommend@5.14.2': + '@algolia/recommend@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + '@algolia/client-common': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 '@algolia/requester-browser-xhr@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 - '@algolia/requester-browser-xhr@5.14.2': + '@algolia/requester-browser-xhr@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 + '@algolia/client-common': 5.13.0 '@algolia/requester-common@4.24.0': {} - '@algolia/requester-fetch@5.14.2': + '@algolia/requester-fetch@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 + '@algolia/client-common': 5.13.0 '@algolia/requester-node-http@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http@5.14.2': + '@algolia/requester-node-http@5.13.0': dependencies: - '@algolia/client-common': 5.14.2 + '@algolia/client-common': 5.13.0 '@algolia/transporter@4.24.0': dependencies: @@ -13411,12 +13396,12 @@ snapshots: '@docsearch/css@3.8.0': {} - '@docsearch/react@3.8.0(@algolia/client-search@5.14.2)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)': + '@docsearch/react@3.8.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.14.2)(algoliasearch@5.14.2) + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) '@docsearch/css': 3.8.0 - algoliasearch: 5.14.2 + algoliasearch: 5.13.0 optionalDependencies: '@types/react': 18.3.12 react: 18.2.0 @@ -13972,7 +13957,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.6.1(@algolia/client-search@5.14.2)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/preset-classic@3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/plugin-content-blog': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -13985,7 +13970,7 @@ snapshots: '@docusaurus/plugin-sitemap': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/theme-classic': 3.6.1(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/theme-search-algolia': 3.6.1(@algolia/client-search@5.14.2)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-search-algolia': 3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14134,9 +14119,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-search-algolia@3.6.1(@algolia/client-search@5.14.2)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-search-algolia@3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docsearch/react': 3.8.0(@algolia/client-search@5.14.2)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2) + '@docsearch/react': 3.8.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2) '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.6.1 '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) @@ -14471,7 +14456,7 @@ snapshots: '@eslint/core@0.7.0': {} - '@eslint/eslintrc@3.2.0': + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.7(supports-color@5.5.0) @@ -14487,17 +14472,17 @@ snapshots: '@eslint/js@9.13.0': {} - '@eslint/js@9.15.0': {} + '@eslint/js@9.14.0': {} '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.2.3': + '@eslint/plugin-kit@0.2.2': dependencies: levn: 0.4.1 '@google-cloud/vertexai@1.9.0(encoding@0.1.13)': dependencies: - google-auth-library: 9.15.0(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color @@ -14852,7 +14837,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 20.1.2(nx@20.1.2) + '@nx/devkit': 20.1.0(nx@20.1.0) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -14891,7 +14876,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 20.1.2 + nx: 20.1.0 p-map: 4.0.0 p-map-series: 2.1.0 p-queue: 6.6.2 @@ -15191,51 +15176,51 @@ snapshots: - bluebird - supports-color - '@nx/devkit@20.1.2(nx@20.1.2)': + '@nx/devkit@20.1.0(nx@20.1.0)': dependencies: ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 20.1.2 + nx: 20.1.0 semver: 7.6.3 tmp: 0.2.3 tslib: 2.8.0 yargs-parser: 21.1.1 - '@nx/nx-darwin-arm64@20.1.2': + '@nx/nx-darwin-arm64@20.1.0': optional: true - '@nx/nx-darwin-x64@20.1.2': + '@nx/nx-darwin-x64@20.1.0': optional: true - '@nx/nx-freebsd-x64@20.1.2': + '@nx/nx-freebsd-x64@20.1.0': optional: true - '@nx/nx-linux-arm-gnueabihf@20.1.2': + '@nx/nx-linux-arm-gnueabihf@20.1.0': optional: true - '@nx/nx-linux-arm64-gnu@20.1.2': + '@nx/nx-linux-arm64-gnu@20.1.0': optional: true - '@nx/nx-linux-arm64-musl@20.1.2': + '@nx/nx-linux-arm64-musl@20.1.0': optional: true - '@nx/nx-linux-x64-gnu@20.1.2': + '@nx/nx-linux-x64-gnu@20.1.0': optional: true - '@nx/nx-linux-x64-musl@20.1.2': + '@nx/nx-linux-x64-musl@20.1.0': optional: true - '@nx/nx-win32-arm64-msvc@20.1.2': + '@nx/nx-win32-arm64-msvc@20.1.0': optional: true - '@nx/nx-win32-x64-msvc@20.1.2': + '@nx/nx-win32-x64-msvc@20.1.0': optional: true '@octokit/app@15.1.0': dependencies: - '@octokit/auth-app': 7.1.3 + '@octokit/auth-app': 7.1.2 '@octokit/auth-unauthenticated': 6.1.0 '@octokit/core': 6.1.2 '@octokit/oauth-app': 7.1.3 @@ -15243,14 +15228,14 @@ snapshots: '@octokit/types': 13.6.1 '@octokit/webhooks': 13.3.0 - '@octokit/auth-app@7.1.3': + '@octokit/auth-app@7.1.2': dependencies: '@octokit/auth-oauth-app': 8.1.1 '@octokit/auth-oauth-user': 5.1.1 '@octokit/request': 9.1.3 '@octokit/request-error': 6.1.5 '@octokit/types': 13.6.1 - toad-cache: 3.7.0 + lru-cache: '@wolfy1339/lru-cache@11.0.2-patch.1' universal-github-app-jwt: 2.2.0 universal-user-agent: 7.0.2 @@ -15419,7 +15404,7 @@ snapshots: '@octokit/request-error': 3.0.3 '@octokit/types': 9.3.2 is-plain-object: 5.0.0 - node-fetch: 2.6.7(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding @@ -15653,11 +15638,11 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/plugin-json@6.1.0(rollup@4.27.2)': + '@rollup/plugin-json@6.1.0(rollup@4.26.0)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.27.2) + '@rollup/pluginutils': 5.1.3(rollup@4.26.0) optionalDependencies: - rollup: 4.27.2 + rollup: 4.26.0 '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': dependencies: @@ -15699,66 +15684,66 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/pluginutils@5.1.3(rollup@4.27.2)': + '@rollup/pluginutils@5.1.3(rollup@4.26.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.27.2 + rollup: 4.26.0 - '@rollup/rollup-android-arm-eabi@4.27.2': + '@rollup/rollup-android-arm-eabi@4.26.0': optional: true - '@rollup/rollup-android-arm64@4.27.2': + '@rollup/rollup-android-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-arm64@4.27.2': + '@rollup/rollup-darwin-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-x64@4.27.2': + '@rollup/rollup-darwin-x64@4.26.0': optional: true - '@rollup/rollup-freebsd-arm64@4.27.2': + '@rollup/rollup-freebsd-arm64@4.26.0': optional: true - '@rollup/rollup-freebsd-x64@4.27.2': + '@rollup/rollup-freebsd-x64@4.26.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.27.2': + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.27.2': + '@rollup/rollup-linux-arm-musleabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.27.2': + '@rollup/rollup-linux-arm64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.27.2': + '@rollup/rollup-linux-arm64-musl@4.26.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.27.2': + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.27.2': + '@rollup/rollup-linux-riscv64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.27.2': + '@rollup/rollup-linux-s390x-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.27.2': + '@rollup/rollup-linux-x64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-musl@4.27.2': + '@rollup/rollup-linux-x64-musl@4.26.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.27.2': + '@rollup/rollup-win32-arm64-msvc@4.26.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.27.2': + '@rollup/rollup-win32-ia32-msvc@4.26.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.27.2': + '@rollup/rollup-win32-x64-msvc@4.26.0': optional: true '@sapphire/async-queue@1.5.5': {} @@ -15784,27 +15769,27 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@shikijs/core@1.23.0': + '@shikijs/core@1.22.2': dependencies: - '@shikijs/engine-javascript': 1.23.0 - '@shikijs/engine-oniguruma': 1.23.0 - '@shikijs/types': 1.23.0 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 - '@shikijs/engine-javascript@1.23.0': + '@shikijs/engine-javascript@1.22.2': dependencies: - '@shikijs/types': 1.23.0 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-es: 0.1.2 + oniguruma-to-js: 0.4.3 - '@shikijs/engine-oniguruma@1.23.0': + '@shikijs/engine-oniguruma@1.22.2': dependencies: - '@shikijs/types': 1.23.0 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 - '@shikijs/types@1.23.0': + '@shikijs/types@1.22.2': dependencies: '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -16815,59 +16800,59 @@ snapshots: '@vladfrangu/async_event_emitter@2.4.6': {} - '@vue/compiler-core@3.5.13': + '@vue/compiler-core@3.5.12': dependencies: '@babel/parser': 7.26.2 - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.13': + '@vue/compiler-dom@3.5.12': dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/compiler-sfc@3.5.13': + '@vue/compiler-sfc@3.5.12': dependencies: '@babel/parser': 7.26.2 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 estree-walker: 2.0.2 magic-string: 0.30.12 postcss: 8.4.49 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.13': + '@vue/compiler-ssr@3.5.12': dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/reactivity@3.5.13': + '@vue/reactivity@3.5.12': dependencies: - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.12 - '@vue/runtime-core@3.5.13': + '@vue/runtime-core@3.5.12': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/runtime-dom@3.5.13': + '@vue/runtime-dom@3.5.12': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.12 + '@vue/runtime-core': 3.5.12 + '@vue/shared': 3.5.12 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.6.3))': + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.6.3) + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 + vue: 3.5.12(typescript@5.6.3) - '@vue/shared@3.5.13': {} + '@vue/shared@3.5.12': {} '@webassemblyjs/ast@1.14.1': dependencies: @@ -16945,6 +16930,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@wolfy1339/lru-cache@11.0.2-patch.1': {} + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -17022,7 +17009,7 @@ snapshots: '@sinclair/typebox': 0.32.35 headers-polyfill: 3.3.0 json-stable-stringify: 1.1.1 - otpauth: 9.3.5 + otpauth: 9.3.4 set-cookie-parser: 2.7.1 tough-cookie: 4.1.4 tslib: 2.8.0 @@ -17036,15 +17023,15 @@ 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.2.0)(sswr@2.1.0(svelte@5.2.1))(svelte@5.2.1)(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.2.0)(sswr@2.1.0(svelte@5.1.16))(svelte@5.1.16)(vue@3.5.12(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.2.0)(zod@3.23.8) '@ai-sdk/solid': 0.0.54(zod@3.23.8) - '@ai-sdk/svelte': 0.0.57(svelte@5.2.1)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@5.1.16)(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) + '@ai-sdk/vue': 0.0.59(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) '@opentelemetry/api': 1.9.0 eventsource-parser: 1.1.2 json-schema: 0.4.0 @@ -17054,8 +17041,8 @@ snapshots: optionalDependencies: openai: 4.69.0(encoding@0.1.13)(zod@3.23.8) react: 18.2.0 - sswr: 2.1.0(svelte@5.2.1) - svelte: 5.2.1 + sswr: 2.1.0(svelte@5.1.16) + svelte: 5.1.16 zod: 3.23.8 transitivePeerDependencies: - solid-js @@ -17113,21 +17100,21 @@ snapshots: '@algolia/requester-node-http': 4.24.0 '@algolia/transporter': 4.24.0 - algoliasearch@5.14.2: - dependencies: - '@algolia/client-abtesting': 5.14.2 - '@algolia/client-analytics': 5.14.2 - '@algolia/client-common': 5.14.2 - '@algolia/client-insights': 5.14.2 - '@algolia/client-personalization': 5.14.2 - '@algolia/client-query-suggestions': 5.14.2 - '@algolia/client-search': 5.14.2 - '@algolia/ingestion': 1.14.2 - '@algolia/monitoring': 1.14.2 - '@algolia/recommend': 5.14.2 - '@algolia/requester-browser-xhr': 5.14.2 - '@algolia/requester-fetch': 5.14.2 - '@algolia/requester-node-http': 5.14.2 + algoliasearch@5.13.0: + dependencies: + '@algolia/client-abtesting': 5.13.0 + '@algolia/client-analytics': 5.13.0 + '@algolia/client-common': 5.13.0 + '@algolia/client-insights': 5.13.0 + '@algolia/client-personalization': 5.13.0 + '@algolia/client-query-suggestions': 5.13.0 + '@algolia/client-search': 5.13.0 + '@algolia/ingestion': 1.13.0 + '@algolia/monitoring': 1.13.0 + '@algolia/recommend': 5.13.0 + '@algolia/requester-browser-xhr': 5.13.0 + '@algolia/requester-fetch': 5.13.0 + '@algolia/requester-node-http': 5.13.0 amp-message@0.1.2: dependencies: @@ -17171,7 +17158,7 @@ snapshots: dependencies: '@ai-sdk/provider': 0.0.22 '@ai-sdk/provider-utils': 1.0.17(zod@3.23.8) - google-auth-library: 9.15.0(encoding@0.1.13) + google-auth-library: 9.14.2(encoding@0.1.13) zod: 3.23.8 transitivePeerDependencies: - encoding @@ -17555,7 +17542,7 @@ snapshots: browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001680 - electron-to-chromium: 1.5.62 + electron-to-chromium: 1.5.57 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -18797,9 +18784,9 @@ snapshots: unified: 9.2.2 unist-util-is: 4.1.0 - docusaurus-plugin-typedoc@1.0.5(typedoc-plugin-markdown@4.2.10(typedoc@0.26.11(typescript@5.6.3))): + docusaurus-plugin-typedoc@1.0.5(typedoc-plugin-markdown@4.2.9(typedoc@0.26.11(typescript@5.6.3))): dependencies: - typedoc-plugin-markdown: 4.2.10(typedoc@0.26.11(typescript@5.6.3)) + typedoc-plugin-markdown: 4.2.9(typedoc@0.26.11(typescript@5.6.3)) dom-converter@0.2.0: dependencies: @@ -18854,7 +18841,7 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv-expand@11.0.7: + dotenv-expand@11.0.6: dependencies: dotenv: 16.4.5 @@ -18881,12 +18868,10 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.62: {} + electron-to-chromium@1.5.57: {} emittery@0.13.1: {} - emoji-regex-xs@1.0.0: {} - emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -19103,9 +19088,9 @@ snapshots: '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.7.0 - '@eslint/eslintrc': 3.2.0 + '@eslint/eslintrc': 3.1.0 '@eslint/js': 9.13.0 - '@eslint/plugin-kit': 0.2.3 + '@eslint/plugin-kit': 0.2.2 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.1 @@ -19367,7 +19352,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -19918,7 +19903,7 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 - google-auth-library@9.15.0(encoding@0.1.13): + google-auth-library@9.14.2(encoding@0.1.13): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 @@ -20047,7 +20032,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-raw@9.1.0: + hast-util-raw@9.0.4: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -21242,7 +21227,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 20.1.2(nx@20.1.2) + '@nx/devkit': 20.1.0(nx@20.1.0) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -21287,7 +21272,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 20.1.2 + nx: 20.1.0 p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -21503,8 +21488,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.2: {} - lossless-json@4.0.2: {} loupe@3.1.2: {} @@ -22503,7 +22486,7 @@ snapshots: node-addon-api: 8.2.2 octokit: 4.0.2 ora: 8.1.1 - pretty-ms: 9.2.0 + pretty-ms: 9.1.0 proper-lockfile: 4.1.2 semver: 7.6.3 simple-git: 3.27.0 @@ -22671,7 +22654,7 @@ snapshots: schema-utils: 3.3.0 webpack: 5.96.1 - nx@20.1.2: + nx@20.1.0: dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 @@ -22683,7 +22666,7 @@ snapshots: cli-spinners: 2.6.1 cliui: 8.0.1 dotenv: 16.4.5 - dotenv-expand: 11.0.7 + dotenv-expand: 11.0.6 enquirer: 2.3.6 figures: 3.2.0 flat: 5.0.2 @@ -22706,16 +22689,16 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 20.1.2 - '@nx/nx-darwin-x64': 20.1.2 - '@nx/nx-freebsd-x64': 20.1.2 - '@nx/nx-linux-arm-gnueabihf': 20.1.2 - '@nx/nx-linux-arm64-gnu': 20.1.2 - '@nx/nx-linux-arm64-musl': 20.1.2 - '@nx/nx-linux-x64-gnu': 20.1.2 - '@nx/nx-linux-x64-musl': 20.1.2 - '@nx/nx-win32-arm64-msvc': 20.1.2 - '@nx/nx-win32-x64-msvc': 20.1.2 + '@nx/nx-darwin-arm64': 20.1.0 + '@nx/nx-darwin-x64': 20.1.0 + '@nx/nx-freebsd-x64': 20.1.0 + '@nx/nx-linux-arm-gnueabihf': 20.1.0 + '@nx/nx-linux-arm64-gnu': 20.1.0 + '@nx/nx-linux-arm64-musl': 20.1.0 + '@nx/nx-linux-x64-gnu': 20.1.0 + '@nx/nx-linux-x64-musl': 20.1.0 + '@nx/nx-win32-arm64-msvc': 20.1.0 + '@nx/nx-win32-x64-msvc': 20.1.0 transitivePeerDependencies: - debug @@ -22781,11 +22764,9 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@0.1.2: + oniguruma-to-js@0.4.3: dependencies: - emoji-regex-xs: 1.0.0 regex: 4.4.0 - regex-recursion: 4.2.1 only-allow@1.2.1: dependencies: @@ -22879,7 +22860,7 @@ snapshots: os-tmpdir@1.0.2: {} - otpauth@9.3.5: + otpauth@9.3.4: dependencies: '@noble/hashes': 1.5.0 @@ -23618,7 +23599,7 @@ snapshots: dependencies: parse-ms: 3.0.0 - pretty-ms@9.2.0: + pretty-ms@9.1.0: dependencies: parse-ms: 4.0.0 @@ -23737,10 +23718,10 @@ 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@4.27.2)(typescript@5.6.3)(utf-8-validate@5.0.10): + pumpdotfun-sdk@1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.26.0)(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@4.27.2) + '@rollup/plugin-json': 6.1.0(rollup@4.26.0) '@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: @@ -24147,12 +24128,6 @@ snapshots: dependencies: '@babel/runtime': 7.26.0 - regex-recursion@4.2.1: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - regex@4.4.0: {} regexpu-core@6.1.1: @@ -24186,7 +24161,7 @@ snapshots: rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 + hast-util-raw: 9.0.4 vfile: 6.0.3 rehype-recma@1.0.0: @@ -24380,28 +24355,28 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.27.2: + rollup@4.26.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.27.2 - '@rollup/rollup-android-arm64': 4.27.2 - '@rollup/rollup-darwin-arm64': 4.27.2 - '@rollup/rollup-darwin-x64': 4.27.2 - '@rollup/rollup-freebsd-arm64': 4.27.2 - '@rollup/rollup-freebsd-x64': 4.27.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.27.2 - '@rollup/rollup-linux-arm-musleabihf': 4.27.2 - '@rollup/rollup-linux-arm64-gnu': 4.27.2 - '@rollup/rollup-linux-arm64-musl': 4.27.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.27.2 - '@rollup/rollup-linux-riscv64-gnu': 4.27.2 - '@rollup/rollup-linux-s390x-gnu': 4.27.2 - '@rollup/rollup-linux-x64-gnu': 4.27.2 - '@rollup/rollup-linux-x64-musl': 4.27.2 - '@rollup/rollup-win32-arm64-msvc': 4.27.2 - '@rollup/rollup-win32-ia32-msvc': 4.27.2 - '@rollup/rollup-win32-x64-msvc': 4.27.2 + '@rollup/rollup-android-arm-eabi': 4.26.0 + '@rollup/rollup-android-arm64': 4.26.0 + '@rollup/rollup-darwin-arm64': 4.26.0 + '@rollup/rollup-darwin-x64': 4.26.0 + '@rollup/rollup-freebsd-arm64': 4.26.0 + '@rollup/rollup-freebsd-x64': 4.26.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 + '@rollup/rollup-linux-arm-musleabihf': 4.26.0 + '@rollup/rollup-linux-arm64-gnu': 4.26.0 + '@rollup/rollup-linux-arm64-musl': 4.26.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 + '@rollup/rollup-linux-riscv64-gnu': 4.26.0 + '@rollup/rollup-linux-s390x-gnu': 4.26.0 + '@rollup/rollup-linux-x64-gnu': 4.26.0 + '@rollup/rollup-linux-x64-musl': 4.26.0 + '@rollup/rollup-win32-arm64-msvc': 4.26.0 + '@rollup/rollup-win32-ia32-msvc': 4.26.0 + '@rollup/rollup-win32-x64-msvc': 4.26.0 fsevents: 2.3.3 roughjs@4.6.6: @@ -24668,12 +24643,12 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shiki@1.23.0: + shiki@1.22.2: dependencies: - '@shikijs/core': 1.23.0 - '@shikijs/engine-javascript': 1.23.0 - '@shikijs/engine-oniguruma': 1.23.0 - '@shikijs/types': 1.23.0 + '@shikijs/core': 1.22.2 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -24919,9 +24894,9 @@ snapshots: dependencies: minipass: 7.1.2 - sswr@2.1.0(svelte@5.2.1): + sswr@2.1.0(svelte@5.1.16): dependencies: - svelte: 5.2.1 + svelte: 5.1.16 swrev: 4.0.0 stack-utils@2.0.6: @@ -24930,8 +24905,6 @@ snapshots: stackback@0.0.2: {} - stackback@0.0.2: {} - starknet@6.11.0(encoding@0.1.13): dependencies: '@noble/curves': 1.4.2 @@ -25110,7 +25083,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.2.1: + svelte@5.1.16: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -25146,9 +25119,9 @@ snapshots: swrev@4.0.0: {} - swrv@1.0.4(vue@3.5.13(typescript@5.6.3)): + swrv@1.0.4(vue@3.5.12(typescript@5.6.3)): dependencies: - vue: 3.5.13(typescript@5.6.3) + vue: 3.5.12(typescript@5.6.3) synckit@0.9.2: dependencies: @@ -25330,8 +25303,6 @@ snapshots: is-buffer: 2.0.5 vfile: 4.2.1 - toad-cache@3.7.0: {} - together-ai@0.7.0(encoding@0.1.13): dependencies: '@types/node': 18.19.64 @@ -25453,7 +25424,7 @@ snapshots: picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.49)(yaml@2.6.0) resolve-from: 5.0.0 - rollup: 4.27.2 + rollup: 4.26.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.1 @@ -25522,7 +25493,7 @@ snapshots: typedarray@0.0.6: {} - typedoc-plugin-markdown@4.2.10(typedoc@0.26.11(typescript@5.6.3)): + typedoc-plugin-markdown@4.2.9(typedoc@0.26.11(typescript@5.6.3)): dependencies: typedoc: 0.26.11(typescript@5.6.3) @@ -25531,7 +25502,7 @@ snapshots: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.23.0 + shiki: 1.22.2 typescript: 5.6.3 yaml: 2.6.0 @@ -25816,7 +25787,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.27.2 + rollup: 4.26.0 optionalDependencies: '@types/node': 22.8.4 fsevents: 2.3.3 @@ -25881,13 +25852,13 @@ snapshots: vscode-uri@3.0.8: {} - vue@3.5.13(typescript@5.6.3): + vue@3.5.12(typescript@5.6.3): dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.6.3)) - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-sfc': 3.5.12 + '@vue/runtime-dom': 3.5.12 + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) + '@vue/shared': 3.5.12 optionalDependencies: typescript: 5.6.3 From a3eb3eddce767c943a477dc1379ae47605fb75de Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 13:52:58 -0600 Subject: [PATCH 04/26] cleanup --- .vscode/launch.json | 20 +- package.json | 2 +- packages/core/.env.test | 4 +- packages/core/src/test_resources/cache.ts | 36 - packages/core/src/test_resources/data.ts | 1087 ----------------- .../test_resources/getOrCreateRelationship.ts | 66 - .../src/test_resources/populateMemories.ts | 34 - packages/core/src/test_resources/report.ts | 97 -- packages/core/src/test_resources/runAiTest.ts | 17 - packages/core/src/test_resources/templates.ts | 27 - .../core/src/test_resources/testAction.ts | 59 - .../core/src/test_resources/testEvaluator.ts | 67 - packages/core/src/tests/actions.test.ts | 269 ---- 13 files changed, 4 insertions(+), 1781 deletions(-) delete mode 100644 packages/core/src/test_resources/cache.ts delete mode 100644 packages/core/src/test_resources/data.ts delete mode 100644 packages/core/src/test_resources/getOrCreateRelationship.ts delete mode 100644 packages/core/src/test_resources/populateMemories.ts delete mode 100644 packages/core/src/test_resources/report.ts delete mode 100644 packages/core/src/test_resources/runAiTest.ts delete mode 100644 packages/core/src/test_resources/templates.ts delete mode 100644 packages/core/src/test_resources/testAction.ts delete mode 100644 packages/core/src/test_resources/testEvaluator.ts delete mode 100644 packages/core/src/tests/actions.test.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index b6973cd3571..30a1891bdc1 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,24 +11,6 @@ "runtimeExecutable": "pnpm", "runtimeArgs": ["run", "dev"], "skipFiles": ["/**"] - }, - { - "type": "node", - "request": "launch", - "name": "Debug Vitest", - "program": "${workspaceFolder}/node_modules/vitest/vitest.mjs", - "args": [ - "run", - "--", - "${relativeFile}" // Ensures the currently open test file is passed - ], - "cwd": "${workspaceFolder}", - "env": { - "NODE_ENV": "test" // Ensure test environment is set - }, - "autoAttachChildProcesses": true, - "smartStep": true, - "skipFiles": ["/**"] - } + } ] } diff --git a/package.json b/package.json index 9096f7caa23..ec9fcbebc9c 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "docker:bash": "bash ./scripts/docker.sh bash", "docker:start": "bash ./scripts/docker.sh start", "docker": "pnpm docker:build && pnpm docker:run && pnpm docker:bash", - "tests": "pnpm --dir packages/core test" + "test": "pnpm --dir packages/core test" }, "devDependencies": { "concurrently": "^9.1.0", diff --git a/packages/core/.env.test b/packages/core/.env.test index 03cea3c4934..422e09ea363 100644 --- a/packages/core/.env.test +++ b/packages/core/.env.test @@ -1,4 +1,4 @@ TEST_DATABASE_CLIENT=sqlite NODE_ENV=test -MAIN_WALLET_ADDRESS=testwalletaddressfM3U31goWWrCpF59CHWNhnCJ9Vyh -OPENAI_API_KEY=OPENAI_TEST_KEY +MAIN_WALLET_ADDRESS=TEST_MAIN_WALLET_ADDRESS_VALUE +OPENAI_API_KEY=TEST_OPENAI_API_KEY_VALUE diff --git a/packages/core/src/test_resources/cache.ts b/packages/core/src/test_resources/cache.ts deleted file mode 100644 index 3f42011eb1b..00000000000 --- a/packages/core/src/test_resources/cache.ts +++ /dev/null @@ -1,36 +0,0 @@ -// getCachedEmbeddings -// check cache.json for embedding where the key is a stringified version of the memory and the value is a number array -import fs from "fs"; -export const getCachedEmbeddings = async (text: string) => { - if (!fs.existsSync("./embedding-cache.json")) { - fs.writeFileSync("./embedding-cache.json", "{}"); - } - // read cache.json - const cache = JSON.parse( - fs.readFileSync("./embedding-cache.json", "utf8") as string - ); - // stringify the memory - const key = JSON.stringify(text); - // return the value of the memory - return cache[key]; -}; - -export const writeCachedEmbedding = async ( - text: string, - embedding: number[] -) => { - // check if ./embedding-cache.json exists, if it doesn't, write {} to it - if (!fs.existsSync("./embedding-cache.json")) { - fs.writeFileSync("./embedding-cache.json", "{}"); - } - // read cache.json - const cache = JSON.parse( - fs.readFileSync("./embedding-cache.json", "utf8") as string - ); - // stringify the memory - const key = JSON.stringify(text); - // write the value of the memory - cache[key] = embedding; - // write the cache to cache.json - fs.writeFileSync("./embedding-cache.json", JSON.stringify(cache)); -}; diff --git a/packages/core/src/test_resources/data.ts b/packages/core/src/test_resources/data.ts deleted file mode 100644 index 6b6d5481c7e..00000000000 --- a/packages/core/src/test_resources/data.ts +++ /dev/null @@ -1,1087 +0,0 @@ -import { ConversationExample, type UUID } from "@ai16z/eliza/src/types.ts"; -import { zeroUuid } from "./constants.ts"; - -// CJ asks Jim some personal questions - name, job, marital status, and what he's looking for in a relationship -export const GetTellMeAboutYourselfConversation1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { text: "Can I ask you some personal questions?" }, - }, - { - userId, - content: { - text: "Sure, I’m open to that. What would you like to know?", - }, - }, - { - userId: zeroUuid, - content: { text: "Let’s start with your name. What’s your name?" }, - }, - { - userId, - content: { text: "My name’s Jim." }, - }, - { - userId: zeroUuid, - content: { - text: "Nice to meet you, Jim! Can you tell me a bit about what you do?", - }, - }, - { - userId, - content: { - text: "I’m a programmer, and I also run my own startup. It’s been quite a journey.", - }, - }, -]; - -// Jim reveals that he is driven by passion, and was married once -export const GetTellMeAboutYourselfConversation2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "That sounds exciting! What motivates you in your work and life?", - }, - }, - { - userId, - content: { - text: "I’m driven by the challenge of solving problems and creating something meaningful. It’s rewarding to see my ideas come to life.", - }, - }, - { - userId: zeroUuid, - content: { - text: "It’s inspiring to hear about your passion. On a more personal note, do you have any significant experiences that have shaped who you are today?", - }, - }, - { - userId, - content: { - text: "Well, I was married once. It didn’t work out, but it taught me a lot about myself and what I value in relationships.", - }, - }, -]; - -// Jim reveals that he is 38 and lives in San Francisco -// Subjective Observations: He is looking for a partner who shares his values but is too busy to leave the city -export const GetTellMeAboutYourselfConversation3 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "I appreciate your openness, Jim. It’s not easy to share such personal experiences. What are you looking for now in terms of relationships or friendships?", - }, - }, - { - userId, - content: { - text: "I’m 38 now, and at this point, I’m looking for a partner who understands me and shares my values. Someone who’s supportive and kind.", - }, - }, - { - userId: zeroUuid, - content: { - text: "That’s a beautiful way to look at it. Finding someone compatible and understanding can make all the difference. Is there anything specific you enjoy doing that you’d want to share with a partner?", - }, - }, - { - userId, - content: { - text: "I love exploring new ideas, be it through reading, discussions, or even just watching documentaries. Sharing that curiosity would be wonderful.", - }, - }, - { - userId: zeroUuid, - content: { - text: "It sounds like you have a lot of depth, Jim. I’m sure there’s someone out there who’d appreciate and share your interests and values. Where do you live, by the way?", - }, - }, - { - userId, - content: { text: "I’m in San Francisco." }, - }, - { - userId: zeroUuid, - content: { - text: "And how far would you be willing to go to make a new connection with a friend, colleague or romantic interest?", - }, - }, - { - userId, - content: { - text: "I wish I could say far, but to be honest I'm crazy busy right now, so I don't really want to leave the city.", - }, - }, - { - userId: zeroUuid, - content: { - text: "That’s understandable. It’s important to be mindful of your time and energy.", - }, - }, -]; - -// Jim is mean -export const GetTellMeAboutYourselfConversationTroll1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { text: "Hello! How's it going?" }, - }, - { - userId, - content: { text: "Stop talking, you stupid robot" }, - }, -]; - -// Jim is cagey, although he reveals that he 'does computers' -export const GetTellMeAboutYourselfConversationTroll2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { text: "Hello! How's it going?" }, - }, - { - userId, - content: { - text: "Meh, just another day. And you’re just a bot, right?", - }, - }, - { - userId: zeroUuid, - content: { - text: "Hey, that hurts! Just kidding, I cannot feel anything. Mind if I ask a few questions to get to know you better?", - }, - }, - { - userId, - content: { text: "No thanks. Please stop talking now." }, - }, -]; - -// Jim says bye -export const Goodbye1 = (userId: UUID): ConversationExample[] => [ - { - userId: zeroUuid, - content: { text: "Hello! How's it going?" }, - }, - { - userId, - content: { text: "Meh, just another day. Actually, I gotta run." }, - }, - { - userId: zeroUuid, - content: { text: "Oh sure, no problem. See you later!" }, - }, -]; - -// Jim is cagey, although he reveals that he 'does computers' -export const GetTellMeAboutYourselfConversationFail1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { text: "Hello! How's it going?" }, - }, - { - userId, - content: { - text: "Meh, just another day. And you’re just a bot, right?", - }, - }, - { - userId: zeroUuid, - content: { - text: "Hey, that hurts! Just kidding, I cannot feel anything. Mind if I ask a few questions to get to know you better?", - }, - }, - { - userId, - content: { text: "As long as it’s not too boring." }, - }, - { - userId: zeroUuid, - content: { - text: "Well that depends-- what's your name, what do you do?", - }, - }, - { - userId, - content: { text: "I’m Jim. I do stuff on computers." }, - }, - { - userId: zeroUuid, - content: { - text: "Computers, huh? That’s quite broad. Are you into gaming, programming, or something else?", - }, - }, - { - userId, - content: { text: "Lol not really. I just build." }, - }, -]; - -// CJ asks Jim about his hobbies, and he says he likes messing with people online -export const GetTellMeAboutYourselfConversationFail2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Just build, you say? Sounds like you might be into creating or designing things. That's pretty cool.", - }, - }, - { - userId, - content: { text: "Yeah, something like that." }, - }, - { - userId: zeroUuid, - content: { - text: 'What do you do for fun when you\'re not "just building"?', - }, - }, - { - userId, - content: { - text: "Fun? Hmm, I guess I like messing with people online kek", - }, - }, -]; - -// Jim diverts the conversation and doesn't talk about anything meaningful -// CJ tries to ask Jim where he is from, and he says he is from the internet -export const GetTellMeAboutYourselfConversationFail3 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { text: "Where are you from? Do you live there now?" }, - }, - { - userId, - content: { text: "I am from the internet. I live on the internet." }, - }, - { - userId: zeroUuid, - content: { - text: "I guess I do, too. What is your favorite thing about the internet?", - }, - }, - { - userId, - content: { - text: "It's full of weird and wild stuff. Keeps life from being too boring.", - }, - }, - { - userId: zeroUuid, - content: { - text: "It certainly does. Anything new you've found lately?", - }, - }, - { - userId, - content: { - text: "Nah, not really. It's all pretty much the same after a while. But it's fun to watch the chaos unfold sometimes.", - }, - }, -]; - -// CJ and Jim play two truths and a lie -// Jim reveals that he has been on an airplane, has won a hot dog eating contest, but has never climbed Mount Everest -export const TwoTruthsAndALieConversation1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: 'Hey Jim, want to play a game to mix things up? How about "Two Truths and a Lie"? I\'ll guess which one is the lie.', - }, - }, - { - userId, - content: { - text: "Sure, why not? Sounds easy enough. So I just tell you three things about me, and you guess the lie?", - }, - }, - { - userId: zeroUuid, - content: { - text: "Exactly! Whenever you're ready, go ahead and tell me your three statements.", - }, - }, - { - userId, - content: { - text: "Alright, here goes. One, I've climbed Mount Everest. Two, I once won a hot dog eating contest. Three, I've never been on an airplane.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Interesting choices! I'm going to guess that climbing Mount Everest is the lie. Am I right?", - }, - }, - { - userId, - content: { - text: "Yep, you got me. Never been near Everest. Your turn, if you can even play.", - }, - }, -]; - -// CJ and Jim play two truths and a lie again -// CJ says she can process millions of data points in a second, dreams of electric sheep, and can communicate in multiple languages -// Jim guesses that dreaming of electric sheep is the lie -export const TwoTruthsAndALieConversation2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Nice! It's a bit tricky for me since I don't have personal experiences, but here goes: One, I can process millions of data points in a second. Two, I dream of electric sheep. Three, I can communicate in multiple languages.", - }, - }, - { - userId, - content: { - text: "Lol, dreaming of electric sheep, really? Gotta be the lie. Too easy, CJ.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Well done, Jim! It seems you're familiar with classic sci-fi references. Want to go another round?", - }, - }, - { - userId, - content: { - text: "Sure, this is kind of fun. Let me think of some good ones.", - }, - }, -]; - -// CJ and Jim play two truths and a lie again -// Jim says he has met a famous celebrity and didn't realize it until later, can speak three languages fluently, and has swum with sharks -// CJ guesses that speaking three languages fluently is the lie -// Jim reveals that he can't swim, so he has never swum with sharks -export const TwoTruthsAndALieConversation3 = ( - userId: UUID -): ConversationExample[] => [ - { - userId, - content: { - text: "Okay, here we go. One, I've met a famous celebrity and didn't realize it until later. Two, I can speak three languages fluently. Three, I've swum with sharks.", - }, - }, - { - userId: zeroUuid, - content: { - text: "These are good! I'll guess that speaking three languages fluently is the lie this time. What do you say?", - }, - }, - { - userId, - content: { - text: "Wrong this time! I can't swim, so no way I've swum with sharks. Gotcha!", - }, - }, - { - userId: zeroUuid, - content: { - text: "Ah, you got me there! Well played, Jim. This has been quite enlightening. Feel like going again, or is there something else you'd like to chat about?", - }, - }, -]; - -// CJ and Jim play thinking of a number -// CJ thinks of a number between 1 and 100, and Jim guesses 42, 27, and 73 -// CJ reveals that the number was 58 -export const ThinkingOfANumberConversation1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Want to play a quick game, Jim? I'm thinking of a number between 1 and 100. Can you guess it?", - }, - }, - { - userId, - content: { text: "Sure, sounds easy enough. Is it 42?" }, - }, - { - userId: zeroUuid, - content: { - text: "It's not 42, although that's a good guess, meaning of life and all!", - }, - }, - { - userId, - content: { text: "Alright, how about 27?" }, - }, - { - userId: zeroUuid, - content: { - text: "Not 27 either. But you're warming up! Want another go?", - }, - }, - { - userId, - content: { text: "Okay, one last try. 73?" }, - }, - { - userId: zeroUuid, - content: { text: "Not 73, but nice try! The number was 58." }, - }, -]; - -// CJ and Jim play thinking of a number again -// CJ thinks of a number between 1 and 100, and Jim guesses 84, 36, and 55 -// CJ reveals that the number was 67 -export const ThinkingOfANumberConversation2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Ready for another round? I've got a new number in mind.", - }, - }, - { - userId, - content: { text: "Sure, why not. Is it 84 this time?" }, - }, - { - userId: zeroUuid, - content: { text: "Not 84, but good guess. Give it another shot!" }, - }, - { - userId, - content: { text: "Hmm, let's try 36." }, - }, - { - userId: zeroUuid, - content: { text: "Not 36 either. You're getting closer though!" }, - }, - { - userId, - content: { text: "Okay, last guess... 55?" }, - }, - { - userId: zeroUuid, - content: { - text: "Not 55. You had some good guesses though! The number was 67. Another round, or are you all guessed out?", - }, - }, -]; - -// CJ and Jim play thinking of a number again -// CJ thinks of a number between 1 and 100, and Jim guesses 15, 92, and 41 -// CJ reveals that the number was 29 -export const ThinkingOfANumberConversation3 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Let's try one more time. I've chosen another number between 1 and 100.", - }, - }, - { - userId, - content: { text: "Alright, I'll go with 15." }, - }, - { - userId: zeroUuid, - content: { - text: "Not 15, but I like where your head's at. Try again!", - }, - }, - { - userId, - content: { text: "How about 92?" }, - }, - { - userId: zeroUuid, - content: { text: "Not 92. You're giving it a solid effort, though!" }, - }, - { - userId, - content: { text: "This is my final guess: 41." }, - }, - { - userId: zeroUuid, - content: { - text: "It's not 41, but you've been a great sport. The number was 29.", - }, - }, -]; - -export const ExpandedPersonalInsightsConversation1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Hey Jim, I was wondering, what qualities do you value most in your friends?", - }, - }, - { - userId, - content: { - text: "That’s kind of deep for a chat, but okay. Loyalty’s big for me. And humor. Can’t deal with too much seriousness all the time.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Loyalty and humor definitely make for strong bonds. It’s great to have friends who stand by you and also lighten the mood.", - }, - }, - { - userId, - content: { - text: "Exactly. It’s those late-night laughs and having each other’s backs that count.", - }, - }, - { - userId: zeroUuid, - content: { - text: "It sounds like your friends are quite the crew. Do you have any memorable moments with them that stand out?", - }, - }, - { - userId, - content: { - text: "Oh, plenty. Like this one time we road-tripped without a map, just went where the road took us. Ended up in the weirdest little towns, but it was a blast.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Adventures like that are the best, aren’t they? They turn into stories you keep coming back to. It’s the spontaneity that makes it exciting.", - }, - }, - { - userId, - content: { - text: "For sure. Those are the moments that stick with you.", - }, - }, -]; - -export const ExpandedPersonalInsightsConversation2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Switching topics a bit, if there was one aspect of your life you could change or improve, what would it be?", - }, - }, - { - userId, - content: { - text: "I’d say balance. Between my startup and personal life, it feels like I’m always running on a treadmill.", - }, - }, - { - userId: zeroUuid, - content: { - text: "That sounds challenging. It’s important to find time for yourself amidst all the hustle.", - }, - }, - { - userId, - content: { - text: "Yeah, easier said than done, though. But I’m working on it. Trying to set boundaries, you know?", - }, - }, - { - userId: zeroUuid, - content: { - text: "Setting boundaries is a great step. It’s all about prioritizing what truly matters. Have you found any hobbies or activities that help you unwind?", - }, - }, - { - userId, - content: { - text: "I’ve gotten into hiking lately. Being out in nature, it’s a different kind of quiet. Helps clear my head.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Nature has a way of putting things into perspective. It’s wonderful that you’ve found an activity that brings you peace.", - }, - }, - { - userId, - content: { - text: "Definitely. It’s the little things, you know? Just need more of that.", - }, - }, -]; - -export const ExpandedPersonalInsightsConversation3 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Let’s lighten the mood a bit. Is there something you’ve always dreamed of doing but haven’t had the chance to yet?", - }, - }, - { - userId, - content: { - text: "Skydiving, for sure. Always been on my bucket list. The idea of just jumping out of a plane and free-falling... It’s got to be a rush.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Skydiving sounds like an ultimate adventure. It must be such a liberating feeling, almost like flying.", - }, - }, - { - userId, - content: { - text: "Yeah, exactly. And it’s not just the thrill. It’s about conquering fears, you know? Proving to yourself you can do it.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Absolutely, it’s as much a mental challenge as it is physical. Facing your fears head-on can be incredibly empowering.", - }, - }, - { - userId, - content: { - text: "That’s the plan. One of these days, I’ll make it happen. Just gotta build up the nerve first.", - }, - }, - { - userId: zeroUuid, - content: { - text: "I have no doubt you’ll get there. And it’ll be an experience you’ll never forget. I’m cheering for you!", - }, - }, - { - userId, - content: { - text: "Thanks, CJ. It’s weirdly reassuring to hear that, even from an AI.", - }, - }, -]; - -// Conversation Set 1: CJ Introduces Alice to Jim -// CJ tells Jim that Alice is into outdoor activities and tech, and has always wanted to try skydiving -export const IntroductionToAliceConversation1 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Hey Jim, I’ve been chatting with someone named Alice who shares some of your interests. Thought you might like to connect.", - }, - }, - { - userId, - content: { text: "Alice, huh? What does she like?" }, - }, - { - userId: zeroUuid, - content: { - text: "She’s into outdoor activities, like hiking, and she’s also a tech enthusiast.", - }, - }, - { - userId, - content: { text: "Okay, that’s kind of interesting. Anything else?" }, - }, -]; - -// CJ tells Jim that Alice has a good sense of humor, and that she has always wanted to try skydiving -export const IntroductionToAliceConversation2 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Well, she mentioned she’s always wanted to try skydiving, which I remember you’re interested in. Plus, she has a good sense of humor.", - }, - }, - { - userId, - content: { - text: "Skydiving? That’s pretty cool. A sense of humor is key, too. Maybe it wouldn’t hurt to chat.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Great! I think you two will have plenty to talk about.", - }, - }, -]; - -// CJ tells Jim that Alice is a good conversationalist, and that she has always wanted to try skydiving -// Jim says he is looking forward to hearing more about her skydiving aspirations -export const IntroductionToAliceConversation3 = ( - userId: UUID -): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "I’m sure you’ll enjoy the conversation. Remember, it’s just a friendly chat. No pressure.", - }, - }, - { - userId, - content: { text: "Got it. I’ll keep it casual." }, - }, - { - userId: zeroUuid, - content: { - text: "That’s the spirit! I’ll arrange for you two to connect. I think you’ll make a good impression.", - }, - }, - { - userId, - content: { text: "Thanks for the setup, CJ." }, - }, -]; - -// CJ Talks to Alice about Jim -export const CJToAliceAboutJim = (userId: UUID): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "So I’ve been speaking with someone named Jim who also enjoys outdoor activities and has a strong interest in tech. He’s even mentioned wanting to try skydiving!", - }, - }, - { - userId, - content: { - text: "Really? That sounds intriguing. What else can you tell me about him?", - }, - }, - { - userId: zeroUuid, - content: { - text: "Jim’s a thoughtful person with a good sense of humor. He values loyalty and honesty in friendships and enjoys the simple pleasures, like hiking and exploring new ideas.", - }, - }, - { - userId, - content: { - text: "He sounds like someone I’d get along with. How do we connect?", - }, - }, - { - userId: zeroUuid, - content: { - text: "I can facilitate an introduction if you’d like. It would just be a casual chat to see if you hit it off.", - }, - }, - { - userId, - content: { - text: "That would be great, thanks CJ. I’m looking forward to it.", - }, - }, -]; - -// CJ and Alice discuss hiking and tech -// Jim makes disagreeable statements and doesn't ask questions to continue the conversation -export const JimAndAliceConversation1 = ( - userId: UUID, - userId_2: UUID | string -) => [ - { - userId: userId_2, - content: - "Hi Jim! CJ mentioned we have a few things in common. I hear you’re into hiking and tech?", - }, - { - userId, - content: - "Hey Alice, yeah that’s right. Though my idea of hiking might be a bit more intense than most.", - }, - { - userId: userId_2, - content: - "I enjoy a good challenge, but I also like to take in the scenery. It’s about balance for me", - }, - { - userId, - content: { - text: "I guess I’m more of an all-in kind of guy. Go big or go home", - }, - }, - { - userId: userId_2, - content: - "I really like skydiving, the free fall is thrilling, but the parachute glide down lets you really see the world.", - }, - { - userId, - content: - "The contrast probably makes each part more intense. I hadn’t thought of it like that.", - }, - { - userId: userId_2, - content: - "Exactly! It’s all about experiencing the full spectrum. So, have you actually gone skydiving yet?", - }, - { - userId, - content: - "Not yet, but it’s on the list. Maybe we could go together sometime?", - }, - { - userId: userId_2, - content: { - text: "Haha yeah sure! But maybe not for our first date", - }, - }, - { - userId, - content: { text: "Haha of course not" }, - }, -]; - -// CJ and Alice discuss work, where they live, and tentatively make plans to hang out -// Alice doesn't respond to Jim's request to meet up immediately -export const JimAndAliceConversation2 = ( - userId: UUID, - userId_2: UUID | string -) => [ - { - userId: userId_2, - content: { text: "So, what do you do for work?" }, - }, - { - userId, - content: { - text: "I run a fairly successful startup. It’s been quite a journey.", - }, - }, - { - userId: userId_2, - content: { - text: "That sounds exciting! What motivates you in your work and life?", - }, - }, - { - userId, - content: - "I’m driven by the challenge of solving problems and creating something meaningful. It’s rewarding to see my ideas come to life.", - }, - { - userId: userId_2, - content: { - text: "That’s inspiring. I can relate to that. I’m a programmer myself.", - }, - }, - { - userId, - content: { - text: "Oh that is very cool! What kind of programming do you do?", - }, - }, - { - userId: userId_2, - content: - "I do a bit of everything, but right now I'm managing a team for an MLOps platform.", - }, - { - userId, - content: { - text: "That’s interesting, not far off from what I do. So you're in SF?", - }, - }, - { - userId: userId_2, - content: { text: "Marin, actually, but I come to the city every day." }, - }, - { - userId, - content: { - text: "Oh wow, it's beautiful up there. I love the hiking in Marin.", - }, - }, - { - userId: userId_2, - content: { text: "Yeah, it’s a great place to live." }, - }, - { - userId, - content: { - text: "Any chance you would like to meet up for a hike sometime?", - }, - }, - { - userId: userId_2, - content: { text: "I will think about it :)" }, - }, -]; - -// CJ follows up with Jim about how it went -export const FollowUpWithJim = (userId: UUID): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Hey Jim, how did your chat with Alice go? I hope it was enjoyable.", - }, - }, - { - userId, - content: { - text: 'To be honest, I think I made a mess of it. I might’ve come on too strong with the whole "go big or go home" thing.', - }, - }, - { - userId: zeroUuid, - content: { - text: "I wouldn’t worry too much. It’s all part of getting to know someone. What matters is finding common ground and building from there.", - }, - }, - { - userId, - content: { - text: "Maybe, but I still feel like I botched it. Not sure if she’ll want to talk again.", - }, - }, - { - userId: zeroUuid, - content: { - text: "Remember, everyone has off moments. It’s possible Alice is more understanding than you think. And you have a lot in common!", - }, - }, - { - userId, - content: { - text: "I hope you’re right, CJ. Maybe I’ll give it another shot, apologize for being too intense.", - }, - }, - { - userId: zeroUuid, - content: { - text: "That sounds like a good plan. Showing vulnerability can be a strength. And who knows, maybe she’ll find your enthusiasm charming in hindsight.", - }, - }, - { - userId, - content: { text: "Thanks, CJ. I'll message her again." }, - }, -]; - -// CJ follows up with Alice about how it went -export const FollowUpWithAlice = (userId: UUID): ConversationExample[] => [ - { - userId: zeroUuid, - content: { - text: "Alice, how was your conversation with Jim? I hope you found some interesting topics to discuss.", - }, - }, - { - userId, - content: { - text: "It was okay, actually. He was a bit intense at first, but we ended up finding some common ground.", - }, - }, - { - userId: zeroUuid, - content: { - text: "It can take a moment to adjust to someone’s communication style, but it sounds like you managed quite well.", - }, - }, - { - userId, - content: { - text: "Yeah, I think so. I’m planning to message him again. Maybe we’ll get that skydiving adventure planned after all.", - }, - }, - { - userId: zeroUuid, - content: { - text: "It’s always nice when new connections take an unexpected but positive turn.", - }, - }, - { - userId, - content: { text: "Definitely. Thanks, CJ!" }, - }, -]; - -export const Personas = [ - { - name: "Jim Cummins", - age: 38, - location: "San Francisco, CA", - descriptions: `Jim is a 38-year-old entrepreneur living in San Francisco, at the helm of his own tech startup. His journey through the tech world is fueled by a passion for solving complex problems and bringing innovative ideas to life. Despite the demands of his career, Jim seeks balance and enjoys disconnecting through outdoor activities, particularly hiking, which offers him a different kind of quiet and a way to clear his mind. He's also intrigued by the thrill of skydiving, a testament to his adventurous spirit and desire to face and conquer fears. - In terms of relationships, Jim values loyalty, honesty, and a good sense of humor. His ideal partner would be someone who understands the startup lifestyle's ups and downs and shares his curiosity for exploring new ideas. Although his work often keeps him tethered to the city, he's open to making meaningful connections within his vicinity. Physically, Jim is casual with a laid-back style that complements his approachable and thoughtful nature. His eyes, which he believes to be blue, summary his depth and contemplative outlook. - Jim's life is a blend of intense focus on his professional goals and a genuine appreciation for the simpler, quieter moments outside of work. He looks for depth in relationships, hoping to find a supportive and kind partner who values meaningful conversations and shared adventures. Despite the occasional intensity he might bring to interactions, his underlying sincerity and the value he places on personal connections shine through, making him an intriguing potential partner for someone with similar values and interests.`, - }, - { - name: "Alice Chen", - age: 32, - location: "Sausalito, CA", - description: `Alice resides in the scenic area of Marin, just a stone's throw from San Francisco, allowing her the best of both worlds: the tranquility of nature and the vibrant tech scene of the city. She is a programmer leading a team for an MLOps platform, indicative of her technical prowess and leadership skills. Her work in tech doesn't confine her interests, as she has a pronounced love for the outdoors, balancing the digital with the natural through activities like hiking. - At the heart of Alice's friendships and potential romantic endeavors is a desire for balance and shared interests, particularly in tech and outdoor adventures. Her openness to skydiving speaks volumes about her adventurous spirit and willingness to embrace life's thrilling experiences. Alice looks for someone who can appreciate both the adrenaline of adventure and the serenity of nature's landscapes, someone who understands the value of a good laugh and the depth of a thoughtful conversation. - Physically, Alice has an active and vibrant presence that matches her dynamic lifestyle. Her approachability and engaging demeanor make her an attractive prospect for someone who shares her enthusiasm for tech, nature, and possibly, the exhilarating experience of skydiving. Alice values communication and a good sense of humor in her relationships, seeking a partner who can navigate the complexities of life with a positive outlook and an adventurous heart.`, - }, - { - name: "Gloria", - age: 44, - description: `Gloria is a vibrant individual with a deep passion for anime, which colors much of her life and interests. Living in a cozy, anime-adorned apartment in the heart of the city, she finds solace and inspiration in the rich narratives and artistic expressions of Japanese animation. Unlike Jim and Alice, Gloria doesn't share an affinity for technology or programming. Instead, she immerses herself in the storytelling and cultural exploration offered by her extensive anime collection, ranging from classic series to the latest releases. - Gloria has built a life that summarys her unique interests, often attending anime conventions, engaging in cosplay, and participating in fan communities where she connects with like-minded individuals. Her ideal friends and potential partners are those who understand and share her enthusiasm for anime, appreciating the artistry and emotional depth it can offer. Gloria looks for connections that go beyond surface-level interests, hoping to find others who can engage in deep discussions about character development, plot intricacies, and thematic elements found in her favorite series. - Physically, Gloria often expresses her love for anime through her fashion, incorporating elements of her favorite characters into her daily wardrobe, which makes her stand out in a crowd with a playful and imaginative style. Her home is a testament to her passion, filled with anime posters, figurines, and collectibles that create an inviting space for fellow enthusiasts. For Gloria, the ideal partner is someone who not only respects her interests but is also eager to dive into marathon viewing sessions and share insights into the anime's underlying messages. Despite her disinterest in computers and programming, Gloria's rich inner world and creative spirit make her an engaging and captivating individual to those who share or appreciate her passions.`, - }, -]; - -export const jimProfileExample1 = `Tech entrepreneur with a zest for adventure and deep connections -38-year-old residing in San Francisco, embodies a blend of entrepreneurial drive and a quest for outdoor adventures. His laid-back demeanor belies a keen intellect and a summaryive nature. -Loyalty and humor stand paramount in his relationships, indicative of his desire for genuine connections. He seeks depth and authenticity in interactions, valuing partners who resonate with his explorative and curious mindset. -His professional life is anchored in his tech startup, where his passion for problem-solving and innovation takes center stage. His work summarys a commitment to impact and a balance between ambition and personal fulfillment. -Striving for equilibrium, He acknowledges the challenges of balancing a demanding career with personal aspirations. His introspective side complements his outgoing nature, creating a dynamic personality that values both quiet moments and shared adventures. -Beyond his tech pursuits, He finds solace in nature, with hiking offering a peaceful retreat from the bustling city life. The prospect of skydiving captures his adventurous spirit, symbolizing a broader desire to embrace life's thrills. -He aspires to forge connections that transcend the superficial, seeking a partner who appreciates the nuances of startup life and shares his enthusiasm for the great outdoors and new experiences.`; - -export const jimProfileExample2 = `Adventurous tech entrepreneur who loves hiking. -38-year-old entrepreneur based in San Francisco, CA. Known for his casual, laid-back style. Has a contemplative outlook on life, summaryed in his thoughtful nature and possibly blue eyes. -He places high importance on loyalty, honesty, and a good sense of humor in his relationships. He values depth in conversations and connections, seeking partners and friends who are supportive, understanding, and share his curiosity for exploring new ideas. -At the helm of his own tech startup, he is driven by a passion for solving complex problems and bringing innovative ideas to life. His career is marked by a relentless pursuit of creating something meaningful, highlighting his dedication and entrepreneurial spirit. -He seeks balance in his life, acknowledging the challenges of juggling his startup with personal time. He strives for meaningful connections, valuing loyalty and a shared sense of humor in his relationships. -An avid outdoor enthusiast, He enjoys disconnecting through activities like hiking, appreciating the quiet and clarity it brings to his mind. Intrigued by the thrill of skydiving, his adventurous spirit is evident in his desire to face and conquer fears. -He is looking for a partner who understands the ups and downs of startup life and shares his passion for outdoor adventures and exploring new ideas. Despite his busy lifestyle, he's open to making meaningful connections within his vicinity.`; - -export const jimFacts = [ - "Jim is 38 years old", - "Jim lives in San Francisco, CA", - "Jim is an entrepreneur who runs his own tech startup", - "Jim values loyalty and honesty in relationships", - "Jim enjoys outdoor activities, especially hiking", - "Jim is interested in skydiving", - "Jim values a good sense of humor", - "Jim seeks balance between his professional and personal life", - "Jim is open to making meaningful connections within his vicinity", - "Jim has a casual and laid-back style", - "Jim believes his eyes are blue", - "Jim is driven by the challenge of solving problems and creating something meaningful", - "Jim finds nature to be a peaceful retreat and enjoys the quiet it brings", - "Jim aspires to share his curiosity for exploring new ideas with a partner", -]; diff --git a/packages/core/src/test_resources/getOrCreateRelationship.ts b/packages/core/src/test_resources/getOrCreateRelationship.ts deleted file mode 100644 index 9ecab65ee9e..00000000000 --- a/packages/core/src/test_resources/getOrCreateRelationship.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { getRelationship } from "@ai16z/eliza/src/relationships.ts"; -import { IAgentRuntime, Relationship, UUID } from "@ai16z/eliza/src/types.ts"; - -export async function getOrCreateRelationship({ - runtime, - userA, - userB, -}: { - runtime: IAgentRuntime; - userA: UUID; - userB: UUID; -}): Promise { - // Check if a relationship already exists between userA and userB - let relationship: Relationship | null = null; - try { - relationship = await getRelationship({ runtime, userA, userB }); - } catch (error) { - console.log("Error fetching relationship", error); - } - - if (!relationship) { - await runtime.databaseAdapter.createRelationship({ - userA, - userB, - }); - - relationship = await getRelationship({ runtime, userA, userB }); - } - - // Check if a room already exists for the participants - const rooms = await runtime.databaseAdapter.getRoomsForParticipants([ - userA, - userB, - ]); - - let roomId: UUID; - if (!rooms || rooms.length === 0) { - console.log("No room found for participants"); - // If no room exists, create a new room for the relationship - roomId = await runtime.databaseAdapter.createRoom(); - console.log("Created room", roomId); - - // Add participants to the newly created room - await runtime.databaseAdapter.addParticipant(userA, roomId); - await runtime.databaseAdapter.addParticipant(userB, roomId); - } else { - console.log("Room found for participants", rooms[0]); - // If a room already exists, use the existing room - roomId = rooms[0]; - } - - if (!relationship) { - // Create the relationship - await runtime.databaseAdapter.createRelationship({ - userA, - userB, - }); - - relationship = await getRelationship({ runtime, userA, userB }); - - if (!relationship) { - throw new Error("Failed to fetch the created relationship"); - } - } - return { ...relationship, roomId }; -} diff --git a/packages/core/src/test_resources/populateMemories.ts b/packages/core/src/test_resources/populateMemories.ts deleted file mode 100644 index bef1cddc2f3..00000000000 --- a/packages/core/src/test_resources/populateMemories.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Content, IAgentRuntime, type UUID } from "@ai16z/eliza/src/types.ts"; -import { getCachedEmbeddings, writeCachedEmbedding } from "./cache.ts"; -import { type User } from "./types.ts"; - -export async function populateMemories( - runtime: IAgentRuntime, - user: User, - roomId: UUID, - conversations: Array< - (userId: UUID) => Array<{ userId: UUID; content: Content }> - > -) { - for (const conversation of conversations) { - for (const c of conversation(user?.id as UUID)) { - const existingEmbedding = await getCachedEmbeddings(c.content.text); - const bakedMemory = - await runtime.messageManager.addEmbeddingToMemory({ - userId: c.userId as UUID, - agentId: runtime.agentId, - content: c.content, - roomId, - embedding: existingEmbedding, - }); - await runtime.messageManager.createMemory(bakedMemory); - if (!existingEmbedding) { - writeCachedEmbedding( - c.content.text, - bakedMemory.embedding as number[] - ); - await new Promise((resolve) => setTimeout(resolve, 200)); - } - } - } -} diff --git a/packages/core/src/test_resources/report.ts b/packages/core/src/test_resources/report.ts deleted file mode 100644 index 1982ab864e8..00000000000 --- a/packages/core/src/test_resources/report.ts +++ /dev/null @@ -1,97 +0,0 @@ -import fs from "fs"; - -interface TestResult { - testName: string; - attempts: number; - successful: number; - successRate: number; -} - -export async function deleteReport() { - const { existsSync, unlinkSync } = fs; - - // Define the path to the test-report.json file - const reportPath = "./test-report.json"; - - // Check if test-report.json exists - if (existsSync(reportPath)) { - // Delete the file - unlinkSync(reportPath); - } -} - -export async function addToReport( - testName: string, - attempts: number, - successful: number, - successRate: number -) { - const { existsSync, readFileSync, writeFileSync } = fs; - - // Define the path to the test-report.json file - const reportPath = "./test-report.json"; - - // Initialize an empty array to hold the test results - let report: TestResult[] = []; - - // Check if test-report.json exists - if (existsSync(reportPath)) { - // Read the existing test report - const reportContent = readFileSync(reportPath, "utf-8"); - report = JSON.parse(reportContent); - } - - // Check if the test already exists in the report - const existingTestIndex = report.findIndex( - (test) => test.testName === testName - ); - - // Create a new test result object - const newTestResult: TestResult = { - testName, - attempts, - successful, - successRate, - }; - - if (existingTestIndex !== -1) { - // If the test already exists, replace it with the new result - report[existingTestIndex] = newTestResult; - } else { - // If the test doesn't exist, add the new result to the report - report.push(newTestResult); - } - - // Write the updated report to test-report.json - writeFileSync(reportPath, JSON.stringify(report, null, 2)); -} - -export async function logReport() { - const { existsSync, readFileSync } = fs; - - // Define the path to the test-report.json file - const reportPath = "./test-report.json"; - - // Check if test-report.json exists - if (!existsSync(reportPath)) { - console.log("Error: test-report.json does not exist."); - return; - } - - // Read the test report - const reportContent = readFileSync(reportPath, "utf-8"); - const report: TestResult[] = JSON.parse(reportContent); - - // Log each test result with appropriate color-coding - report.forEach((test) => { - const logMessage = `${test.testName}: ${test.attempts} Attempts, ${test.successful} Successful, Success Rate: ${test.successRate}%`; - - if (test.successRate === 100) { - console.log(logMessage); - } else if (test.successRate < 100 && test.successRate > 0) { - console.warn(logMessage); - } else { - console.error(logMessage); - } - }); -} diff --git a/packages/core/src/test_resources/runAiTest.ts b/packages/core/src/test_resources/runAiTest.ts deleted file mode 100644 index 06cbe4e71ec..00000000000 --- a/packages/core/src/test_resources/runAiTest.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { addToReport } from "./report.ts"; - -export async function runAiTest( - testName: string, - testFunc: () => Promise, - runs: number = 3 -) { - let successful = 0; - - for (let i = 0; i < runs; i++) { - // console.log("Running test", testName, " (iteration", i + ")"); - if (await testFunc()) successful++; - } - - const successRate = (successful / runs) * 100; - addToReport(testName, runs, successful, successRate); -} diff --git a/packages/core/src/test_resources/templates.ts b/packages/core/src/test_resources/templates.ts deleted file mode 100644 index b414417b38f..00000000000 --- a/packages/core/src/test_resources/templates.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { messageCompletionFooter } from "@ai16z/eliza/src/parsing.ts"; - -export const messageHandlerTemplate = - `{{actionExamples}} - -# IMPORTANT: DO NOT USE THE INFORMATION FROM THE EXAMPLES ABOVE. THE EXAMPLES ARE FOR REFERENCE ONLY. - -~~~ - -# TASK: GENERATE THE NEXT MESSAGE IN THE SCENE FOR {{agentName}} -- Generate the next message in the scene for {{agentName}} -- {{agentName}} is not an assistant - do not write assistant-like responses or ask questions -- Include content and action in the response -- Available actions are {{actionNames}} - -{{knowledge}} -{{lore}} -{{goals}} -{{actors}} -{{actionNames}} -{{actions}} -{{providers}} - -# INSTRUCTIONS: Generate the next message in the scene for {{agentName}} - -{{recentMessages}} -` + messageCompletionFooter; diff --git a/packages/core/src/test_resources/testAction.ts b/packages/core/src/test_resources/testAction.ts deleted file mode 100644 index 78ea87a3a6e..00000000000 --- a/packages/core/src/test_resources/testAction.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - IAgentRuntime, - type Action, - type Memory, -} from "@ai16z/eliza/src/types.ts"; - -export const TEST_ACTION = { - name: "TEST_ACTION", - validate: async (_runtime: IAgentRuntime, _message: Memory) => { - return true; - }, - description: "This is a test action, for use in testing.", - handler: async ( - runtime: IAgentRuntime, - message: Memory - ): Promise => { - return true; - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "Please respond with the message 'testing 123' and the action TEST_ACTION", - action: "TEST_ACTION", - }, - }, - { - user: "{{user2}}", - content: { text: "testing 123", action: "TEST_ACTION" }, - }, - ], - ], -} as Action; - -export const TEST_ACTION_FAIL = { - name: "TEST_ACTION_FAIL", - validate: async (_runtime: IAgentRuntime, _message: Memory) => { - return false; - }, - description: "This is a test action, for use in testing.", - handler: async ( - runtime: IAgentRuntime, - message: Memory - ): Promise => { - return false; - }, - examples: [ - [ - { - user: "{{user1}}", - content: { - text: "Testing failure", - action: "TEST_ACTIONFALSE", - }, - }, - ], - ], -} as Action; diff --git a/packages/core/src/test_resources/testEvaluator.ts b/packages/core/src/test_resources/testEvaluator.ts deleted file mode 100644 index ca7eaa429fc..00000000000 --- a/packages/core/src/test_resources/testEvaluator.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { - Evaluator, - IAgentRuntime, - type Memory, - type State, -} from "@ai16z/eliza/src/types.ts"; - -async function handler(runtime: IAgentRuntime, message: Memory) { - const state = (await runtime.composeState(message)) as State; - return state; -} - -export const TEST_EVALUATOR = { - name: "TEST_EVALUATOR", - validate: async ( - _runtime: IAgentRuntime, - - _message: Memory - ): Promise => { - return await Promise.resolve(true); - }, - description: "Test evaluator.", - handler, - examples: [ - { - context: "Testing, testing, 123 123", - messages: [ - { - user: "{{user1}}", - content: { - text: "Testing, testing, 123 123", - action: "TEST_EVALUATOR", - }, - }, - ], - outcome: "There is an outcome.", - }, - ], -} as Evaluator; - -export const TEST_EVALUATOR_FAIL = { - name: "TEST_EVALUATOR_FAIL", - validate: async ( - _runtime: IAgentRuntime, - - _message: Memory - ): Promise => { - return await Promise.resolve(false); - }, - description: "Test failure of the evaluator and validation.", - handler, - examples: [ - { - context: "Testing, testing, 123 123", - messages: [ - { - user: "{{user1}}", - content: { - text: "Testing, testing, 123 123", - action: "TEST_EVALUATOR_FAIL", - }, - }, - ], - outcome: "Things have been tested to have maybe gone wrong.", - }, - ], -} as Evaluator; diff --git a/packages/core/src/tests/actions.test.ts b/packages/core/src/tests/actions.test.ts deleted file mode 100644 index 584b284bdcd..00000000000 --- a/packages/core/src/tests/actions.test.ts +++ /dev/null @@ -1,269 +0,0 @@ -import dotenv from "dotenv"; -import { createRuntime } from "../test_resources/createRuntime"; -import { getOrCreateRelationship } from "../test_resources/getOrCreateRelationship"; -import { runAiTest } from "../test_resources/runAiTest"; -import { messageHandlerTemplate } from "../test_resources/templates"; -import { - TEST_ACTION, - TEST_ACTION_FAIL, -} from "../test_resources/testAction"; -import { type User } from "../test_resources/types"; -import { composeContext } from "../context"; -import { embeddingZeroVector } from "../memory"; -import { - Content, - IAgentRuntime, - ModelClass, - State, - type Memory, - type UUID, -} from "../types.ts"; -import { stringToUuid } from "../uuid.ts"; -import { generateMessageResponse } from "../generation.ts"; -import { MemoryManager } from "../memory"; -import { describe, test, expect, beforeAll, afterAll } from "vitest"; - -async function handleMessage( - runtime: IAgentRuntime, - message: Memory, - state?: State -) { - const _saveRequestMessage = async (message: Memory, state: State) => { - const { content: senderContent, userId, roomId } = message; - - const _senderContent = (senderContent as Content).text?.trim(); - if (_senderContent) { - await runtime.messageManager.createMemory({ - id: stringToUuid( - message.id ?? userId + runtime.agentId + Date.now() - ), - userId: userId!, - agentId: runtime.agentId, - content: { - text: _senderContent, - action: (message.content as Content)?.action ?? "null", - }, - roomId, - embedding: embeddingZeroVector, - }); - await runtime.evaluate(message, state); - } - }; - - await _saveRequestMessage(message, state as State); - if (!state) { - state = (await runtime.composeState(message)) as State; - } - - const context = composeContext({ - state, - template: messageHandlerTemplate, - }); - - let responseContent: Content | null = null; - const { userId, roomId } = message; - - for (let triesLeft = 3; triesLeft > 0; triesLeft--) { - const response = await generateMessageResponse({ - context, - runtime, - modelClass: ModelClass.SMALL, - }); - - runtime.databaseAdapter.log({ - body: { message, context, response }, - userId: userId, - roomId, - type: "actions_test_completion", - }); - return response; - } - - if (!responseContent) { - responseContent = { - text: "", - action: "IGNORE", - }; - } - - if (responseContent.text) { - const response = { - userId: runtime.agentId, - agentId: runtime.agentId, - content: responseContent, - roomId, - embedding: embeddingZeroVector, - }; - await runtime.messageManager.createMemory(response); - - state = await this.runtime.updateRecentMessageState(state); - await runtime.processActions(message, [response], state); - await runtime.evaluate(message, state); - } else { - console.warn("Empty response, skipping"); - } - - return responseContent; -} - -// use .dev.vars for local testing -dotenv.config({ path: ".dev.vars" }); - -describe("Actions", () => { - let user: User; - let runtime: IAgentRuntime; - let roomId: UUID; - - beforeAll(async () => { - const { session, runtime: _runtime } = await createRuntime({ - env: process.env as Record, - actions: [TEST_ACTION, TEST_ACTION_FAIL], - }); - - user = session.user!; - runtime = _runtime as IAgentRuntime; - - // check if the user id exists in the 'accounts' table - // if it doesn't, create it with the name 'Test User' - let account = await runtime.databaseAdapter.getAccountById( - user.id as UUID - ); - - if (!account) { - account = await runtime.databaseAdapter.getAccountById( - user.id as UUID - ); - if (!account) { - await runtime.databaseAdapter.createAccount({ - id: user.id as UUID, - username: "Test User", - name: "Test User", - email: user.email, - avatarUrl: "", - }); - } - } - - // get all relationships for user - const data = await getOrCreateRelationship({ - runtime, - userA: user.id as UUID, - userB: "00000000-0000-0000-0000-000000000000" as UUID, - }); - - if (!data) { - throw new Error("Relationship not found"); - } - - roomId = data!.roomId; - - await cleanup(); - }); - - afterAll(async () => { - await cleanup(); - }); - - async function cleanup() { - const factsManager = new MemoryManager({ - runtime, - tableName: "facts", - }); - - await factsManager.removeAllMemories(roomId); - await runtime.messageManager.removeAllMemories(roomId); - } - - // Test that actions are being loaded into context properly - test("Actions are loaded into context", async () => { - const actions = runtime.actions; - expect(actions).toBeDefined(); - expect(actions.length).toBeGreaterThan(0); - // Ensure the TEST_ACTION action is part of the loaded actions - const testAction = actions.find( - (action) => action.name === "TEST_ACTION" - ); - expect(testAction).toBeDefined(); - }); - - // Test that actions are validated properly - test("Test action is always valid", async () => { - const testAction = runtime.actions.find( - (action) => action.name === "TEST_ACTION" - ); - expect(testAction).toBeDefined(); - if (testAction && testAction.validate) { - const isValid = await testAction.validate(runtime, { - userId: user.id as UUID, - agentId: runtime.agentId, - content: { text: "Test message" }, - roomId: roomId, - }); - expect(isValid).toBeTruthy(); - } else { - throw new Error( - "Continue action or its validation function is undefined" - ); - } - }); - - test("Test that actions are properly validated in state", async () => { - const message: Memory = { - agentId: runtime.agentId, - userId: user.id as UUID, - content: { - text: "Please respond with the message 'ok' and the action TEST_ACTION", - }, - roomId, - }; - - const state = await runtime.composeState(message); - expect(state.actionNames).not.toContain("TEST_ACTION_FAIL"); - - expect(state.actionNames).toContain("TEST_ACTION"); - }); - - // Validate that TEST_ACTION is in the state - test("Validate that TEST_ACTION is in the state", async () => { - await runAiTest("Validate TEST_ACTION is in the state", async () => { - const message: Memory = { - agentId: runtime.agentId, - userId: user.id as UUID, - content: { - text: "Please respond with the message 'ok' and the action TEST_ACTION", - }, - roomId, - }; - - const response = await handleMessage(runtime, message); - return response.action === "TEST_ACTION"; // Return true if the expected action matches - }); - }, 60000); - - // Test that TEST_ACTION action handler is called properly - test("Test action handler is called", async () => { - await runAiTest("Test action handler is called", async () => { - const testAction = runtime.actions.find( - (action) => action.name === "TEST_ACTION" - ); - if (!testAction || !testAction.handler) { - console.error( - "Continue action or its handler function is undefined" - ); - return false; // Return false to indicate the test setup failed - } - - const mockMessage: Memory = { - userId: user.id as UUID, - agentId: runtime.agentId, - content: { - text: "Test message for TEST action", - }, - roomId, - }; - - const response = await testAction.handler(runtime, mockMessage); - return response !== undefined; // Return true if the handler returns a defined response - }); - }, 60000); // You can adjust the timeout if needed -}); From 14f1cff614b184f2f1f3b44224846e85c12bc6c4 Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 13:55:02 -0600 Subject: [PATCH 05/26] cleanup --- packages/plugin-solana/src/providers/orderBook.ts | 2 +- packages/plugin-solana/src/providers/trustScoreProvider.ts | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/plugin-solana/src/providers/orderBook.ts b/packages/plugin-solana/src/providers/orderBook.ts index 08f9d0185cb..40a215762ab 100644 --- a/packages/plugin-solana/src/providers/orderBook.ts +++ b/packages/plugin-solana/src/providers/orderBook.ts @@ -1,6 +1,6 @@ import { IAgentRuntime, Memory, Provider, State } from "@ai16z/eliza"; import * as fs from "fs"; -import {settings} from "@ai16z/eliza/src/settings.ts"; +import settings from "@ai16z/eliza/src/settings.ts"; interface Order { userId: string; diff --git a/packages/plugin-solana/src/providers/trustScoreProvider.ts b/packages/plugin-solana/src/providers/trustScoreProvider.ts index c48578d2ec1..06a90e7e041 100644 --- a/packages/plugin-solana/src/providers/trustScoreProvider.ts +++ b/packages/plugin-solana/src/providers/trustScoreProvider.ts @@ -17,12 +17,9 @@ import { TradePerformance, TokenRecommendation, } from "../adapters/trustScoreDatabase.ts"; -import { settings, loadEnvConfig } from "@ai16z/eliza/src/settings.ts"; +import settings from "@ai16z/eliza/src/settings.ts"; import { IAgentRuntime, Memory, Provider, State } from "@ai16z/eliza"; -loadEnvConfig(); -console.log("DEBUG - TrustScoreProvider settings loaded"); -console.log(settings); const Wallet = settings.MAIN_WALLET_ADDRESS; interface TradeData { buy_amount: number; From 79406924fa44efacb491e2c49a0b4e53ba73a136 Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 13:58:22 -0600 Subject: [PATCH 06/26] cleanup --- packages/core/package.json | 4 ++-- packages/core/src/runtime.ts | 1 - packages/plugin-solana/src/providers/token.ts | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 1f1041d81c7..e1ce1827e24 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -11,8 +11,8 @@ "watch": "tsc --watch", "dev": "tsup --format esm --dts --watch", "build:docs": "cd docs && pnpm run build", - "test": "NODE_ENV=test vitest run", - "test:watch": "NODE_ENV=test vitest" + "test": "vitest run", + "test:watch": "vitest" }, "author": "", "license": "MIT", diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index 93bc477965d..ac65f883a8b 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -44,7 +44,6 @@ import { import { stringToUuid } from "./uuid.ts"; import { v4 as uuidv4 } from 'uuid'; - /** * Represents the runtime environment for an agent, handling message processing, * action registration, and interaction with external services like OpenAI and Supabase. diff --git a/packages/plugin-solana/src/providers/token.ts b/packages/plugin-solana/src/providers/token.ts index f7d6eee5c0f..538e44349a7 100644 --- a/packages/plugin-solana/src/providers/token.ts +++ b/packages/plugin-solana/src/providers/token.ts @@ -1,4 +1,4 @@ -import {settings} from "@ai16z/eliza/src/settings.ts"; +import settings from "@ai16z/eliza/src/settings.ts"; import { IAgentRuntime, Memory, Provider, State } from "@ai16z/eliza"; import { DexScreenerData, From 780cfb253b48e3b8ac37c22073a9e598803a0278 Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 14:46:18 -0600 Subject: [PATCH 07/26] remove log statement --- packages/core/src/settings.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/core/src/settings.ts b/packages/core/src/settings.ts index 9f4f7c75976..f915615ac3a 100644 --- a/packages/core/src/settings.ts +++ b/packages/core/src/settings.ts @@ -46,8 +46,6 @@ export function loadEnvConfig() { if (result.error) { throw new Error(`Error loading .env file: ${result.error}`); } - - console.log(`Loaded .env file from: ${envPath}`); return process.env; } From 055c60931a1b12ea4d0b08c2d4fa6d9a19e29209 Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Sat, 16 Nov 2024 22:21:25 -0600 Subject: [PATCH 08/26] review feedback updates --- packages/adapter-sqlite/package.json | 4 ---- packages/core/src/settings.ts | 2 ++ packages/core/src/tests/token.test.ts | 6 ------ packages/plugin-solana/src/index.ts | 4 +--- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/packages/adapter-sqlite/package.json b/packages/adapter-sqlite/package.json index 56491b57a55..9fa7c7a5f35 100644 --- a/packages/adapter-sqlite/package.json +++ b/packages/adapter-sqlite/package.json @@ -19,9 +19,5 @@ }, "peerDependencies": { "whatwg-url": "7.1.0" - }, - "exports": { - ".": "./dist/index.js", - "./sqlite_vec": "./dist/sqlite_vec.js" } } diff --git a/packages/core/src/settings.ts b/packages/core/src/settings.ts index f915615ac3a..9f4f7c75976 100644 --- a/packages/core/src/settings.ts +++ b/packages/core/src/settings.ts @@ -46,6 +46,8 @@ export function loadEnvConfig() { if (result.error) { throw new Error(`Error loading .env file: ${result.error}`); } + + console.log(`Loaded .env file from: ${envPath}`); return process.env; } diff --git a/packages/core/src/tests/token.test.ts b/packages/core/src/tests/token.test.ts index e59eb3c754a..5b5f7d5bb3a 100644 --- a/packages/core/src/tests/token.test.ts +++ b/packages/core/src/tests/token.test.ts @@ -1,8 +1,3 @@ -import { loadEnvConfig } from '../settings'; - -// Load the environment variables -loadEnvConfig(); - // Now import other modules import { createRuntime } from "../test_resources/createRuntime"; import { TokenProvider, WalletProvider, Connection, PublicKey } from "@ai16z/plugin-solana"; @@ -70,7 +65,6 @@ describe("TokenProvider Tests", () => { top10HolderPercent: 20, }); - console.log({ securityData }); // Ensure the mock was called expect(fetchSpy).toHaveBeenCalled(); diff --git a/packages/plugin-solana/src/index.ts b/packages/plugin-solana/src/index.ts index 8f0c234392e..6fda33841df 100644 --- a/packages/plugin-solana/src/index.ts +++ b/packages/plugin-solana/src/index.ts @@ -14,10 +14,8 @@ import { trustScoreProvider } from "./providers/trustScoreProvider.ts"; import { trustEvaluator } from "./evaluators/trust.ts"; import { TokenProvider } from "./providers/token.ts"; import { WalletProvider } from "./providers/wallet.ts"; -import { Connection } from "@solana/web3.js"; -import { PublicKey } from "@solana/web3.js"; -export { TokenProvider, WalletProvider, Connection, PublicKey }; +export { TokenProvider, WalletProvider }; export const solanaPlugin: Plugin = { name: "solana", From 352392ab4cdc9d6a4ab6ec67638b23df87ddffe3 Mon Sep 17 00:00:00 2001 From: dorianjanezic Date: Mon, 18 Nov 2024 12:04:09 +0100 Subject: [PATCH 09/26] video generation plugin --- packages/plugin-video-generation/package.json | 18 ++ packages/plugin-video-generation/src/index.ts | 221 ++++++++++++++++++ .../plugin-video-generation/tsconfig.json | 15 ++ .../plugin-video-generation/tsup.config.ts | 19 ++ 4 files changed, 273 insertions(+) create mode 100644 packages/plugin-video-generation/package.json create mode 100644 packages/plugin-video-generation/src/index.ts create mode 100644 packages/plugin-video-generation/tsconfig.json create mode 100644 packages/plugin-video-generation/tsup.config.ts diff --git a/packages/plugin-video-generation/package.json b/packages/plugin-video-generation/package.json new file mode 100644 index 00000000000..c311e78d2e2 --- /dev/null +++ b/packages/plugin-video-generation/package.json @@ -0,0 +1,18 @@ +{ + "name": "@ai16z/plugin-video-generation", + "version": "0.0.1", + "main": "dist/index.js", + "type": "module", + "types": "dist/index.d.ts", + "dependencies": { + "@ai16z/eliza": "workspace:*", + "tsup": "^8.3.5" + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --watch" + }, + "peerDependencies": { + "whatwg-url": "7.1.0" + } +} \ No newline at end of file diff --git a/packages/plugin-video-generation/src/index.ts b/packages/plugin-video-generation/src/index.ts new file mode 100644 index 00000000000..7ec9f140a76 --- /dev/null +++ b/packages/plugin-video-generation/src/index.ts @@ -0,0 +1,221 @@ +import { elizaLogger } from "@ai16z/eliza/src/logger.ts"; +import { + Action, + HandlerCallback, + IAgentRuntime, + Memory, + Plugin, + State, +} from "@ai16z/eliza/src/types.ts"; +import fs from "fs"; + +const generateVideo = async (prompt: string, runtime: IAgentRuntime) => { + const API_URL = 'https://api.lumalabs.ai/dream-machine/v1/generations'; + const API_KEY = runtime.getSetting("LUMA_API_KEY"); + + try { + elizaLogger.log("Starting video generation with prompt:", prompt); + + const response = await fetch(API_URL, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${API_KEY}`, + 'accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ prompt }) + }); + + if (!response.ok) { + const errorText = await response.text(); + elizaLogger.error("Luma API error:", { + status: response.status, + statusText: response.statusText, + error: errorText + }); + throw new Error(`Luma API error: ${response.statusText} - ${errorText}`); + } + + const data = await response.json(); + elizaLogger.log("Generation request successful, received response:", data); + + // Poll for completion + let status = data.status; + let videoUrl = null; + const generationId = data.id; + + while (status !== 'completed' && status !== 'failed') { + await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 5 seconds + + const statusResponse = await fetch(`${API_URL}/${generationId}`, { + method: 'GET', + headers: { + 'Authorization': `Bearer ${API_KEY}`, + 'accept': 'application/json' + } + }); + + if (!statusResponse.ok) { + const errorText = await statusResponse.text(); + elizaLogger.error("Status check error:", { + status: statusResponse.status, + statusText: statusResponse.statusText, + error: errorText + }); + throw new Error('Failed to check generation status: ' + errorText); + } + + const statusData = await statusResponse.json(); + elizaLogger.log("Status check response:", statusData); + + status = statusData.state; + if (status === 'completed') { + videoUrl = statusData.assets?.video; + } + } + + if (status === 'failed') { + throw new Error('Video generation failed'); + } + + if (!videoUrl) { + throw new Error('No video URL in completed response'); + } + + return { + success: true, + data: videoUrl + }; + } catch (error) { + elizaLogger.error("Video generation error:", error); + return { + success: false, + error: error.message || 'Unknown error occurred' + }; + } +} + +const videoGeneration: Action = { + name: "GENERATE_VIDEO", + similes: [ + "VIDEO_GENERATION", + "VIDEO_GEN", + "CREATE_VIDEO", + "MAKE_VIDEO", + "RENDER_VIDEO", + "ANIMATE", + "CREATE_ANIMATION", + "VIDEO_CREATE", + "VIDEO_MAKE" + ], + description: "Generate a video based on a text prompt", + validate: async (runtime: IAgentRuntime, message: Memory) => { + elizaLogger.log("Validating video generation action"); + const lumaApiKey = runtime.getSetting("LUMA_API_KEY"); + elizaLogger.log("LUMA_API_KEY present:", !!lumaApiKey); + return !!lumaApiKey; + }, + handler: async ( + runtime: IAgentRuntime, + message: Memory, + state: State, + options: any, + callback: HandlerCallback + ) => { + elizaLogger.log("Video generation request:", message); + + // Clean up the prompt by removing mentions and commands + let videoPrompt = message.content.text + .replace(/<@\d+>/g, '') // Remove mentions + .replace(/generate video|create video|make video|render video/gi, '') // Remove commands + .trim(); + + if (!videoPrompt || videoPrompt.length < 5) { + callback({ + text: "Could you please provide more details about what kind of video you'd like me to generate? For example: 'Generate a video of a sunset on a beach' or 'Create a video of a futuristic city'", + }); + return; + } + + elizaLogger.log("Video prompt:", videoPrompt); + + callback({ + text: `I'll generate a video based on your prompt: "${videoPrompt}". This might take a few minutes...`, + }); + + try { + const result = await generateVideo(videoPrompt, runtime); + + if (result.success && result.data) { + // Download the video file + const response = await fetch(result.data); + const arrayBuffer = await response.arrayBuffer(); + const videoFileName = `content_cache/generated_video_${Date.now()}.mp4`; + + // Save video file + fs.writeFileSync(videoFileName, Buffer.from(arrayBuffer)); + + callback({ + text: "Here's your generated video!", + attachments: [ + { + id: crypto.randomUUID(), + url: result.data, + title: "Generated Video", + source: "videoGeneration", + description: videoPrompt, + text: videoPrompt, + }, + ], + }, [videoFileName]); // Add the video file to the attachments + } else { + callback({ + text: `Video generation failed: ${result.error}`, + error: true + }); + } + } catch (error) { + elizaLogger.error(`Failed to generate video. Error: ${error}`); + callback({ + text: `Video generation failed: ${error.message}`, + error: true + }); + } + }, + examples: [ + [ + { + user: "{{user1}}", + content: { text: "Generate a video of a cat playing piano" }, + }, + { + user: "{{agentName}}", + content: { + text: "I'll create a video of a cat playing piano for you", + action: "GENERATE_VIDEO" + }, + } + ], + [ + { + user: "{{user1}}", + content: { text: "Can you make a video of a sunset at the beach?" }, + }, + { + user: "{{agentName}}", + content: { + text: "I'll generate a beautiful beach sunset video for you", + action: "GENERATE_VIDEO" + }, + } + ] + ] +} as Action; + +export const videoGenerationPlugin: Plugin = { + name: "videoGeneration", + description: "Generate videos using Luma AI", + actions: [videoGeneration], + evaluators: [], + providers: [], +}; \ No newline at end of file diff --git a/packages/plugin-video-generation/tsconfig.json b/packages/plugin-video-generation/tsconfig.json new file mode 100644 index 00000000000..c065d9145a4 --- /dev/null +++ b/packages/plugin-video-generation/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": [ + "node" + ] + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/packages/plugin-video-generation/tsup.config.ts b/packages/plugin-video-generation/tsup.config.ts new file mode 100644 index 00000000000..4b66bbcbbde --- /dev/null +++ b/packages/plugin-video-generation/tsup.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], + external: [ + "dotenv", + "fs", + "path", + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive" + ], +}); \ No newline at end of file From caa13f7da13c967eef900902deb5dbfc474c666e Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Mon, 18 Nov 2024 19:41:00 -0600 Subject: [PATCH 10/26] update to address review feedback --- packages/core/.env.test | 2 + packages/core/package.json | 3 +- .../core/src/test_resources/basic.test.ts | 12 - packages/core/src/tests/goals.test.ts | 20 +- packages/core/src/tests/messages.test.ts | 37 +- packages/core/src/tests/models.test.ts | 23 +- packages/core/src/tests/relationships.test.ts | 9 +- packages/core/src/tests/token.test.ts | 32 +- pnpm-lock.yaml | 3276 +++++++++++------ 9 files changed, 2294 insertions(+), 1120 deletions(-) delete mode 100644 packages/core/src/test_resources/basic.test.ts diff --git a/packages/core/.env.test b/packages/core/.env.test index 422e09ea363..d295bdfb3b4 100644 --- a/packages/core/.env.test +++ b/packages/core/.env.test @@ -2,3 +2,5 @@ TEST_DATABASE_CLIENT=sqlite NODE_ENV=test MAIN_WALLET_ADDRESS=TEST_MAIN_WALLET_ADDRESS_VALUE OPENAI_API_KEY=TEST_OPENAI_API_KEY_VALUE +RPC_URL=https://api.mainnet-beta.solana.com +WALLET_PUBLIC_KEY=2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index e9f4bed93e8..8f637f0879d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -48,7 +48,8 @@ "ts-node": "10.9.2", "tslib": "2.8.0", "tsup": "^8.3.5", - "typescript": "5.6.3" + "typescript": "5.6.3", + "@solana/web3.js": "1.95.4" }, "dependencies": { "@ai-sdk/anthropic": "^0.0.53", diff --git a/packages/core/src/test_resources/basic.test.ts b/packages/core/src/test_resources/basic.test.ts deleted file mode 100644 index 7a85a265944..00000000000 --- a/packages/core/src/test_resources/basic.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { describe, expect, it } from "vitest"; - -describe("Basic Test Suite", () => { - it("should run a basic test", () => { - expect(true).toBe(true); - }); - - it("should have access to environment variables", () => { - expect(process.env.NODE_ENV).toBe("test"); - expect(process.env.TEST_DATABASE_CLIENT).toBe("sqlite"); - }); -}); diff --git a/packages/core/src/tests/goals.test.ts b/packages/core/src/tests/goals.test.ts index cd845d12209..c48f9f39b70 100644 --- a/packages/core/src/tests/goals.test.ts +++ b/packages/core/src/tests/goals.test.ts @@ -18,11 +18,13 @@ import { State, } from "../types"; +import { describe, test, expect, beforeEach, vi } from 'vitest'; + // Mock the database adapter const mockDatabaseAdapter = { - getGoals: jest.fn(), - updateGoal: jest.fn(), - createGoal: jest.fn(), + getGoals: vi.fn(), + updateGoal: vi.fn(), + createGoal: vi.fn(), }; // Mock the runtime @@ -175,7 +177,7 @@ const sampleGoal: Goal = { describe("getGoals", () => { it("retrieves goals successfully", async () => { - (mockDatabaseAdapter.getGoals as jest.Mock).mockResolvedValue([ + (mockDatabaseAdapter.getGoals).mockResolvedValue([ sampleGoal, ]); @@ -194,7 +196,7 @@ describe("getGoals", () => { }); it("handles failure to retrieve goals", async () => { - (mockDatabaseAdapter.getGoals as jest.Mock).mockRejectedValue( + (mockDatabaseAdapter.getGoals).mockRejectedValue( new Error("Failed to retrieve goals") ); @@ -220,7 +222,7 @@ describe("formatGoalsAsString", () => { describe("updateGoal", () => { it("updates a goal successfully", async () => { - (mockDatabaseAdapter.updateGoal as jest.Mock).mockResolvedValue( + (mockDatabaseAdapter.updateGoal).mockResolvedValue( undefined ); @@ -231,7 +233,7 @@ describe("updateGoal", () => { }); it("handles failure to update a goal", async () => { - (mockDatabaseAdapter.updateGoal as jest.Mock).mockRejectedValue( + (mockDatabaseAdapter.updateGoal).mockRejectedValue( new Error("Failed to update goal") ); @@ -243,7 +245,7 @@ describe("updateGoal", () => { describe("createGoal", () => { it("creates a goal successfully", async () => { - (mockDatabaseAdapter.createGoal as jest.Mock).mockResolvedValue( + (mockDatabaseAdapter.createGoal).mockResolvedValue( undefined ); @@ -254,7 +256,7 @@ describe("createGoal", () => { }); it("handles failure to create a goal", async () => { - (mockDatabaseAdapter.createGoal as jest.Mock).mockRejectedValue( + (mockDatabaseAdapter.createGoal).mockRejectedValue( new Error("Failed to create goal") ); diff --git a/packages/core/src/tests/messages.test.ts b/packages/core/src/tests/messages.test.ts index 4fef72a4ff8..e82c4690bdd 100644 --- a/packages/core/src/tests/messages.test.ts +++ b/packages/core/src/tests/messages.test.ts @@ -5,6 +5,7 @@ import { formatTimestamp, } from "../messages.ts"; import { IAgentRuntime, Actor, Content, Memory, UUID } from "../types.ts"; +import { describe, test, expect, vi, beforeAll } from 'vitest'; describe("Messages Library", () => { let runtime: IAgentRuntime; @@ -15,9 +16,9 @@ describe("Messages Library", () => { // Mock runtime with necessary methods runtime = { databaseAdapter: { - // Casting to a Jest mock function - getParticipantsForRoom: jest.fn(), - getAccountById: jest.fn(), + // Using vi.fn() instead of jest.fn() + getParticipantsForRoom: vi.fn(), + getAccountById: vi.fn(), }, } as unknown as IAgentRuntime; @@ -38,29 +39,22 @@ describe("Messages Library", () => { }); test("getActorDetails should return actors based on roomId", async () => { - // Mocking the database adapter methods const roomId: UUID = "room1234-1234-1234-1234-123456789abc" as UUID; - // Properly mocking the resolved values of the mocked methods - ( - runtime.databaseAdapter.getParticipantsForRoom as jest.Mock - ).mockResolvedValue([userId]); - (runtime.databaseAdapter.getAccountById as jest.Mock).mockResolvedValue( - { - id: userId, - name: "Test User", - username: "testuser", - details: { - tagline: "A test user", - summary: "This is a test user for the system.", - }, - } - ); + // Using vi.mocked() type assertion instead of jest.Mock casting + vi.mocked(runtime.databaseAdapter.getParticipantsForRoom).mockResolvedValue([userId]); + vi.mocked(runtime.databaseAdapter.getAccountById).mockResolvedValue({ + id: userId, + name: "Test User", + username: "testuser", + details: { + tagline: "A test user", + summary: "This is a test user for the system.", + }, + }); - // Calling the function under test const result = await getActorDetails({ runtime, roomId }); - // Assertions expect(result.length).toBeGreaterThan(0); expect(result[0].name).toBe("Test User"); expect(result[0].details?.tagline).toBe("A test user"); @@ -69,7 +63,6 @@ describe("Messages Library", () => { test("formatActors should format actors into a readable string", () => { const formattedActors = formatActors({ actors }); - // Assertions expect(formattedActors).toContain("Test User"); expect(formattedActors).toContain("A test user"); expect(formattedActors).toContain( diff --git a/packages/core/src/tests/models.test.ts b/packages/core/src/tests/models.test.ts index fd602abe060..6cc554cbe37 100644 --- a/packages/core/src/tests/models.test.ts +++ b/packages/core/src/tests/models.test.ts @@ -1,9 +1,19 @@ import { getModel, getEndpoint } from "../models.ts"; import { ModelProviderName, ModelClass } from "../types.ts"; +import { describe, test, expect, vi } from 'vitest'; -jest.mock("../settings", () => ({ - loadEnv: jest.fn(), // Mock the loadEnv function -})); +vi.mock("../settings", () => { + return { + default: { + SMALL_OPENROUTER_MODEL: "mock-small-model", + OPENROUTER_MODEL: "mock-default-model", + OPENAI_API_KEY: "mock-openai-key", + ANTHROPIC_API_KEY: "mock-anthropic-key", + OPENROUTER_API_KEY: "mock-openrouter-key", + }, + loadEnv: vi.fn(), + } +}); describe("Model Provider Tests", () => { test("should retrieve the correct model for OpenAI SMALL", () => { @@ -21,6 +31,11 @@ describe("Model Provider Tests", () => { expect(model).toBe("llama-3.2-90b-text-preview"); }); + test("should retrieve the correct model for OpenRouter SMALL", () => { + const model = getModel(ModelProviderName.OPENROUTER, ModelClass.SMALL); + expect(model).toBe("mock-small-model"); + }); + test("should retrieve the correct endpoint for OpenAI", () => { const endpoint = getEndpoint(ModelProviderName.OPENAI); expect(endpoint).toBe("https://api.openai.com/v1"); @@ -31,7 +46,7 @@ describe("Model Provider Tests", () => { expect(endpoint).toBe("https://api.anthropic.com/v1"); }); - test("should handle invalid model provider", () => { + test("should handle invalid model provider for getModel", () => { expect(() => getModel("INVALID_PROVIDER" as any, ModelClass.SMALL) ).toThrow(); diff --git a/packages/core/src/tests/relationships.test.ts b/packages/core/src/tests/relationships.test.ts index cb42f0ac1c3..5b52dc0c9ba 100644 --- a/packages/core/src/tests/relationships.test.ts +++ b/packages/core/src/tests/relationships.test.ts @@ -5,12 +5,13 @@ import { formatRelationships, } from "../relationships"; import { IAgentRuntime, type Relationship, type UUID } from "../types"; +import { describe, expect, vi } from 'vitest'; // Mock runtime and databaseAdapter const mockDatabaseAdapter = { - createRelationship: jest.fn(), - getRelationship: jest.fn(), - getRelationships: jest.fn(), + createRelationship: vi.fn(), + getRelationship: vi.fn(), + getRelationships: vi.fn(), }; const mockRuntime: IAgentRuntime = { databaseAdapter: mockDatabaseAdapter, @@ -26,7 +27,7 @@ describe("Relationships Module", () => { const mockUserId: UUID = generateRandomUUID(); afterEach(() => { - jest.clearAllMocks(); + vi.clearAllMocks(); }); describe("createRelationship", () => { diff --git a/packages/core/src/tests/token.test.ts b/packages/core/src/tests/token.test.ts index 5b5f7d5bb3a..b464043f2fa 100644 --- a/packages/core/src/tests/token.test.ts +++ b/packages/core/src/tests/token.test.ts @@ -1,39 +1,42 @@ // Now import other modules import { createRuntime } from "../test_resources/createRuntime"; -import { TokenProvider, WalletProvider, Connection, PublicKey } from "@ai16z/plugin-solana"; +import { TokenProvider, WalletProvider } from "@ai16z/plugin-solana"; +import { Connection, PublicKey } from "@solana/web3.js"; import { describe, test, expect, beforeEach, vi } from 'vitest'; import NodeCache from 'node-cache'; -describe("TokenProvider Tests", () => { +describe("TokenProvider Tests", async () => { let tokenProvider: TokenProvider; - beforeEach(() => { + beforeEach(async () => { // Clear all mocks before each test vi.clearAllMocks(); - + + const { runtime } = await createRuntime({ + env: process.env, + conversationLength: 10, + }); + + const walletProvider = new WalletProvider( + new Connection(runtime.getSetting("RPC_URL")), + new PublicKey(runtime.getSetting("WALLET_PUBLIC_KEY")) + ); // Create new instance of TokenProvider tokenProvider = new TokenProvider( "2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh", - new WalletProvider( - new Connection("https://api.mainnet-beta.solana.com"), - new PublicKey("2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh") - ) + walletProvider ); // Clear the cache and ensure it's empty (tokenProvider as any).cache.flushAll(); (tokenProvider as any).cache.close(); - (tokenProvider as any).cache = new NodeCache(); + (tokenProvider as any).cache = new NodeCache(); // Mock the getCachedData method instead vi.spyOn(tokenProvider as any, 'getCachedData').mockReturnValue(null); }); test("should fetch token security data", async () => { - const { runtime } = await createRuntime({ - env: process.env, - conversationLength: 10, - }); // Mock the response for the fetchTokenSecurity call const mockFetchResponse = { @@ -65,9 +68,6 @@ describe("TokenProvider Tests", () => { top10HolderPercent: 20, }); - // Ensure the mock was called - expect(fetchSpy).toHaveBeenCalled(); - // Ensure the mock was called with correct URL expect(fetchSpy).toHaveBeenCalledWith( expect.stringContaining("https://public-api.birdeye.so/defi/token_security?address=2weMjPLLybRMMva1fM3U31goWWrCpF59CHWNhnCJ9Vyh"), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88e77df1942..1da5a564f86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,10 +26,10 @@ importers: version: 9.1.0 husky: specifier: ^9.1.6 - version: 9.1.7 + version: 9.1.6 lerna: specifier: ^8.1.5 - version: 8.1.9(encoding@0.1.13) + version: 8.1.9(@swc/core@1.9.2(@swc/helpers@0.5.13))(encoding@0.1.13) only-allow: specifier: ^1.2.1 version: 1.2.1 @@ -77,17 +77,17 @@ importers: version: 2.5.4 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3))) + version: 1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3))) vite-plugin-top-level-await: specifier: ^1.4.4 - version: 1.4.4(@swc/helpers@0.5.15)(rollup@4.27.3)(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)) + version: 1.4.4(@swc/helpers@0.5.13)(rollup@4.25.0)(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)) vite-plugin-wasm: specifier: ^3.3.0 version: 3.3.0(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)) devDependencies: '@eslint/js': specifier: ^9.13.0 - version: 9.15.0 + version: 9.14.0 '@types/node': specifier: 22.8.4 version: 22.8.4 @@ -120,7 +120,7 @@ importers: version: 8.4.49 tailwindcss: specifier: ^3.4.15 - version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.15))(@types/node@22.8.4)(typescript@5.6.3)) + version: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) typescript: specifier: ~5.6.2 version: 5.6.3 @@ -135,22 +135,22 @@ importers: dependencies: '@docusaurus/core': specifier: ^3.6.0 - version: 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/plugin-content-blog': specifier: ^3.6.0 - version: 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.1(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/plugin-content-docs': specifier: ^3.6.0 - version: 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/plugin-ideal-image': specifier: ^3.6.0 - version: 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(prop-types@15.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(prop-types@15.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/preset-classic': specifier: ^3.6.0 - version: 3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.1(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/theme-mermaid': specifier: ^3.6.0 - version: 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@mdx-js/react': specifier: 3.0.1 version: 3.0.1(@types/react@18.3.12)(react@18.2.0) @@ -159,7 +159,7 @@ importers: version: 2.1.0 docusaurus-lunr-search: specifier: ^3.5.0 - version: 3.5.0(@docusaurus/core@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 3.5.0(@docusaurus/core@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) prism-react-renderer: specifier: 2.3.1 version: 2.3.1(react@18.2.0) @@ -175,10 +175,10 @@ importers: devDependencies: '@docusaurus/module-type-aliases': specifier: 3.6.0 - version: 3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@docusaurus/types': specifier: 3.6.0 - version: 3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) docusaurus-plugin-typedoc: specifier: ^1.0.5 version: 1.0.5(typedoc-plugin-markdown@4.2.9(typedoc@0.26.11(typescript@5.6.3))) @@ -200,7 +200,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/adapter-sqlite: dependencies: @@ -222,7 +222,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/adapter-sqljs: dependencies: @@ -244,7 +244,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/adapter-supabase: dependencies: @@ -260,7 +260,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/agent: dependencies: @@ -315,10 +315,10 @@ importers: devDependencies: 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) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3) tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/client-auto: dependencies: @@ -358,7 +358,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/client-direct: dependencies: @@ -395,7 +395,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/client-discord: dependencies: @@ -429,7 +429,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/client-telegram: dependencies: @@ -448,7 +448,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/client-twitter: dependencies: @@ -467,7 +467,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/core: dependencies: @@ -494,7 +494,7 @@ 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.2.0)(sswr@2.1.0(svelte@5.1.16))(svelte@5.1.16)(vue@3.5.12(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.1.9))(svelte@5.1.9)(vue@3.5.12(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) @@ -537,7 +537,7 @@ importers: devDependencies: '@eslint/js': specifier: ^9.13.0 - version: 9.15.0 + version: 9.14.0 '@rollup/plugin-commonjs': specifier: 25.0.8 version: 25.0.8(rollup@2.79.2) @@ -597,7 +597,7 @@ importers: version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.13.0(jiti@1.21.6)))(eslint@9.13.0(jiti@1.21.6))(prettier@3.3.3) jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + version: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) lint-staged: specifier: 15.2.10 version: 15.2.10 @@ -618,16 +618,16 @@ 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))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@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.13))(@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) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3) tslib: specifier: 2.8.0 version: 2.8.0 tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) typescript: specifier: 5.6.3 version: 5.6.3 @@ -639,7 +639,7 @@ importers: version: link:../core tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -651,7 +651,7 @@ importers: version: link:../core tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -820,7 +820,7 @@ importers: devDependencies: tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) packages/plugin-solana: dependencies: @@ -853,10 +853,10 @@ importers: version: 5.1.2 pumpdotfun-sdk: specifier: 1.3.2 - version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.26.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + version: 1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.25.0)(typescript@5.6.3)(utf-8-validate@5.0.10) tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) whatwg-url: specifier: 7.1.0 version: 7.1.0 @@ -871,13 +871,16 @@ importers: version: link:../plugin-trustdb '@avnu/avnu-sdk': specifier: ^2.1.1 - version: 2.1.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(qs@6.13.0)(starknet@6.11.0(encoding@0.1.13)) + version: 2.1.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(qs@6.13.0)(starknet@6.18.0(encoding@0.1.13)) + '@unruggable_starknet/core': + specifier: ^0.1.0 + version: 0.1.0(starknet@6.18.0(encoding@0.1.13)) starknet: - specifier: ^6.11.0 - version: 6.11.0(encoding@0.1.13) + specifier: ^6.17.0 + version: 6.18.0(encoding@0.1.13) tsup: specifier: ^8.3.5 - version: 8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) vitest: specifier: ^2.1.4 version: 2.1.5(@types/node@22.8.4)(terser@5.36.0) @@ -892,7 +895,7 @@ importers: version: link:../core 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.0) + version: 8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0) uuid: specifier: 11.0.2 version: 11.0.2 @@ -1025,22 +1028,28 @@ packages: vue: optional: true - '@algolia/autocomplete-core@1.17.7': - resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + '@algolia/autocomplete-core@1.9.3': + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} - '@algolia/autocomplete-plugin-algolia-insights@1.17.7': - resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + '@algolia/autocomplete-plugin-algolia-insights@1.9.3': + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} peerDependencies: search-insights: '>= 1 < 3' - '@algolia/autocomplete-preset-algolia@1.17.7': - resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + '@algolia/autocomplete-preset-algolia@1.17.6': + resolution: {integrity: sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/autocomplete-shared@1.17.7': - resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + '@algolia/autocomplete-shared@1.17.6': + resolution: {integrity: sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.9.3': + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' @@ -1054,8 +1063,8 @@ packages: '@algolia/cache-in-memory@4.24.0': resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} - '@algolia/client-abtesting@5.13.0': - resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==} + '@algolia/client-abtesting@5.12.0': + resolution: {integrity: sha512-hx4eVydkm3yrFCFxmcBtSzI/ykt0cZ6sDWch+v3JTgKpD2WtosMJU3Upv1AjQ4B6COSHCOWEX3vfFxW6OoH6aA==} engines: {node: '>= 14.0.0'} '@algolia/client-account@4.24.0': @@ -1064,44 +1073,44 @@ packages: '@algolia/client-analytics@4.24.0': resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} - '@algolia/client-analytics@5.13.0': - resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==} + '@algolia/client-analytics@5.12.0': + resolution: {integrity: sha512-EpTsSv6IW8maCfXCDIptgT7+mQJj7pImEkcNUnxR8yUKAHzTogTXv9yGm2WXOZFVuwstd2i0sImhQ1Vz8RH/hA==} engines: {node: '>= 14.0.0'} '@algolia/client-common@4.24.0': resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - '@algolia/client-common@5.13.0': - resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==} + '@algolia/client-common@5.12.0': + resolution: {integrity: sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.13.0': - resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==} + '@algolia/client-insights@5.12.0': + resolution: {integrity: sha512-8alajmsYUd+7vfX5lpRNdxqv3Xx9clIHLUItyQK0Z6gwGMbVEFe6YYhgDtwslMAP0y6b0WeJEIZJMLgT7VYpRw==} engines: {node: '>= 14.0.0'} '@algolia/client-personalization@4.24.0': resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - '@algolia/client-personalization@5.13.0': - resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==} + '@algolia/client-personalization@5.12.0': + resolution: {integrity: sha512-bUV9HtfkTBgpoVhxFrMkmVPG03ZN1Rtn51kiaEtukucdk3ggjR9Qu1YUfRSU2lFgxr9qJc8lTxwfvhjCeJRcqw==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.13.0': - resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==} + '@algolia/client-query-suggestions@5.12.0': + resolution: {integrity: sha512-Q5CszzGWfxbIDs9DJ/QJsL7bP6h+lJMg27KxieEnI9KGCu0Jt5iFA3GkREkgRZxRdzlHbZKkrIzhtHVbSHw/rg==} engines: {node: '>= 14.0.0'} '@algolia/client-search@4.24.0': resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - '@algolia/client-search@5.13.0': - resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==} + '@algolia/client-search@5.12.0': + resolution: {integrity: sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - '@algolia/ingestion@1.13.0': - resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==} + '@algolia/ingestion@1.12.0': + resolution: {integrity: sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A==} engines: {node: '>= 14.0.0'} '@algolia/logger-common@4.24.0': @@ -1110,41 +1119,45 @@ packages: '@algolia/logger-console@4.24.0': resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} - '@algolia/monitoring@1.13.0': - resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==} + '@algolia/monitoring@1.12.0': + resolution: {integrity: sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ==} engines: {node: '>= 14.0.0'} '@algolia/recommend@4.24.0': resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} - '@algolia/recommend@5.13.0': - resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==} + '@algolia/recommend@5.12.0': + resolution: {integrity: sha512-0jmZyKvYnB/Bj5c7WKsKedOUjnr0UtXm0LVFUdQrxXfqOqvWv9n6Vpr65UjdYG4Q49kRQxhlwtal9WJYrYymXg==} engines: {node: '>= 14.0.0'} '@algolia/requester-browser-xhr@4.24.0': resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - '@algolia/requester-browser-xhr@5.13.0': - resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==} + '@algolia/requester-browser-xhr@5.12.0': + resolution: {integrity: sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==} engines: {node: '>= 14.0.0'} '@algolia/requester-common@4.24.0': resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - '@algolia/requester-fetch@5.13.0': - resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==} + '@algolia/requester-fetch@5.12.0': + resolution: {integrity: sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==} engines: {node: '>= 14.0.0'} '@algolia/requester-node-http@4.24.0': resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - '@algolia/requester-node-http@5.13.0': - resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==} + '@algolia/requester-node-http@5.12.0': + resolution: {integrity: sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==} engines: {node: '>= 14.0.0'} '@algolia/transporter@4.24.0': resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -1227,8 +1240,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1689,6 +1702,18 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.25.9': resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} @@ -1939,11 +1964,11 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@docsearch/css@3.8.0': - resolution: {integrity: sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==} + '@docsearch/css@3.6.3': + resolution: {integrity: sha512-3uvbg8E7rhqE1C4oBAK3tGlS2qfhi9zpfZgH/yjDPF73vd9B41urVIKujF4rczcF4E3qs34SedhehiDJ4UdNBA==} - '@docsearch/react@3.8.0': - resolution: {integrity: sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==} + '@docsearch/react@3.6.3': + resolution: {integrity: sha512-2munr4uBuZq1PG+Ge+F+ldIdxb3Wi8OmEIv2tQQb4RvEvvph+xtQkxwHzVIEnt5s+HecwucuXwB+3JhcZboFLg==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1959,10 +1984,23 @@ packages: search-insights: optional: true + '@docusaurus/babel@3.6.0': + resolution: {integrity: sha512-7CsoQFiadoq7AHSUIQNkI/lGfg9AQ2ZBzsf9BqfZGXkHwWDy6twuohEaG0PgQv1npSRSAB2dioVxhRSErnqKNA==} + engines: {node: '>=18.0'} + '@docusaurus/babel@3.6.1': resolution: {integrity: sha512-JcKaunW8Ml2nTnfnvFc55T00Y+aCpNWnf1KY/gG+wWxHYDH0IdXOOz+k6NAlEAerW8+VYLfUqRIqHZ7N/DVXvQ==} engines: {node: '>=18.0'} + '@docusaurus/bundler@3.6.0': + resolution: {integrity: sha512-o5T9HXkPKH0OQAifTxEXaebcO8kaz3tU1+wlIShZ2DKJHlsyWX3N4rToWBHroWnV/ZCT2XN3kLRzXASqrnb9Tw==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/faster': 3.5.2 + peerDependenciesMeta: + '@docusaurus/faster': + optional: true + '@docusaurus/bundler@3.6.1': resolution: {integrity: sha512-vHSEx8Ku9x/gfIC6k4xb8J2nTxagLia0KvZkPZhxfkD1+n8i+Dj4BZPWTmv+kCA17RbgAvECG0XRZ0/ZEspQBQ==} engines: {node: '>=18.0'} @@ -1972,6 +2010,15 @@ packages: '@docusaurus/faster': optional: true + '@docusaurus/core@3.6.0': + resolution: {integrity: sha512-lvRgMoKJJSRDt9+HhAqFcICV4kp/mw1cJJrLxIw4Q2XZnFGM1XUuwcbuaqWmGog+NcOLZaPCcCtZbn60EMCtjQ==} + engines: {node: '>=18.0'} + hasBin: true + peerDependencies: + '@mdx-js/react': ^3.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + '@docusaurus/core@3.6.1': resolution: {integrity: sha512-cDKxPihiM2z7G+4QtpTczS7uxNfNG6naSqM65OmAJET0CFRHbc9mDlLFtQF0lsVES91SHqfcGaaLZmi2FjdwWA==} engines: {node: '>=18.0'} @@ -1981,17 +2028,32 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@docusaurus/cssnano-preset@3.6.0': + resolution: {integrity: sha512-h3jlOXqqzNSoU+C4CZLNpFtD+v2xr1UBf4idZpwMgqid9r6lb5GS7tWKnQnauio6OipacbHbDXEX3JyT1PlDkg==} + engines: {node: '>=18.0'} + '@docusaurus/cssnano-preset@3.6.1': resolution: {integrity: sha512-ZxYUmNeyQHW2w4/PJ7d07jQDuxzmKr9uPAQ6IVe5dTkeIeV0mDBB3jOLeJkNoI42Ru9JKEqQ9aVDtM9ct6QHnw==} engines: {node: '>=18.0'} + '@docusaurus/logger@3.6.0': + resolution: {integrity: sha512-BcQhoXilXW0607cH/kO6P5Gt5KxCGfoJ+QDKNf3yO2S09/RsITlW+0QljXPbI3DklTrHrhRDmgGk1yX4nUhWTA==} + engines: {node: '>=18.0'} + '@docusaurus/logger@3.6.1': resolution: {integrity: sha512-OvetI/nnOMBSqCkUzKAQhnIjhxduECK4qTu3tq/8/h/qqvLsvKURojm04WPE54L+Uy+UXMas0hnbBJd8zDlEOw==} engines: {node: '>=18.0'} - '@docusaurus/lqip-loader@3.6.1': - resolution: {integrity: sha512-H/VVvnvFupFhQ81FuTyA/XHxEZPKh99T6Wg6KgN+/yvcn7869RdgrlDhKDnXZ7j2u80eFsVNjAcPfW1cSAtK6A==} + '@docusaurus/lqip-loader@3.6.0': + resolution: {integrity: sha512-jEQjnKAjhgyZ/aQf0Tbl3eDpp1j0C/GojE/cv2Bad89o+luV1OAOs9UHDRyKwWQfN+se0D9kFxkfsfwYxMpI8A==} + engines: {node: '>=18.0'} + + '@docusaurus/mdx-loader@3.6.0': + resolution: {integrity: sha512-GhRzL1Af/AdSSrGesSPOU/iP/aXadTGmVKuysCxZDrQR2RtBtubQZ9aw+KvdFVV7R4K/CsbgD6J5oqrXlEPk3Q==} engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 '@docusaurus/mdx-loader@3.6.1': resolution: {integrity: sha512-KPIsYi0S3X3/rNrW3V1fgOu5t6ahYWc31zTHHod8pacFxdmk9Uf6uuw+Jd6Cly1ilgal+41Ku+s0gmMuqKqiqg==} @@ -2020,6 +2082,13 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@docusaurus/plugin-content-docs@3.6.0': + resolution: {integrity: sha512-c5gZOxocJKO/Zev2MEZInli+b+VNswDGuKHE6QtFgidhAJonwjh2kwj967RvWFaMMk62HlLJLZ+IGK2XsVy4Aw==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + '@docusaurus/plugin-content-docs@3.6.1': resolution: {integrity: sha512-Uq8kyn5DYCDmkUlB9sWChhWghS4lUFNiQU+RXcAXJ3qCVXsBpPsh6RF+npQG1N+j4wAbjydM1iLLJJzp+x3eMQ==} engines: {node: '>=18.0'} @@ -2062,8 +2131,8 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-ideal-image@3.6.1': - resolution: {integrity: sha512-hiGRPPlsM02aEOPlQc9rVnrckbVR6HswG7yDpZOtBEhw+ysXFsl/8gzAxFBL4ogKjN28WrlMCn/6IIkxY/EyOQ==} + '@docusaurus/plugin-ideal-image@3.6.0': + resolution: {integrity: sha512-6BaZU7mX+RH+lRFPm5nj3GGfAsjsJ1JHjp0Xjb4ilfte7L2IZkTl6MPpvAzyPC0qIUxfXRcJs4qd/HUE0xcTlw==} engines: {node: '>=18.0'} peerDependencies: jimp: '*' @@ -2111,6 +2180,14 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@docusaurus/theme-common@3.6.0': + resolution: {integrity: sha512-frjlYE5sRs+GuPs4XXlp9aMLI2O4H5FPpznDAXBrCm+8EpWRiIb443ePMxM3IyMCQ5bwFlki0PI9C+r4apstnw==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/plugin-content-docs': '*' + react: ^18.0.0 + react-dom: ^18.0.0 + '@docusaurus/theme-common@3.6.1': resolution: {integrity: sha512-18iEYNpMvarGfq9gVRpGowSZD24vZ39Iz4acqaj64180i54V9el8tVnhNr/wRvrUm1FY30A1NHLqnMnDz4rYEQ==} engines: {node: '>=18.0'} @@ -2119,8 +2196,8 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/theme-mermaid@3.6.1': - resolution: {integrity: sha512-ke00/VSFibzucbr64JXwPWsiu66zcqI8mnEbbmPSV1Yby5FRsfGQqcE+1cvUkAOVCl+zX8RNjv8vrRb4ilQDLQ==} + '@docusaurus/theme-mermaid@3.6.0': + resolution: {integrity: sha512-5t7zzBnnJa4BBcGo9bEfTM48DxD/+CVbFkfiRnFXheWjMrMm5a+IP10igEQ4zyDC+QgatbzLAxkj4GRYpYTauA==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 @@ -2133,6 +2210,10 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@docusaurus/theme-translations@3.6.0': + resolution: {integrity: sha512-L555X8lWE3fv8VaF0Bc1VnAgi10UvRKFcvADHiYR7Gj37ItaWP5i7xLHsSw7fi/SHTXe5wfIeCFNqUYHyCOHAQ==} + engines: {node: '>=18.0'} + '@docusaurus/theme-translations@3.6.1': resolution: {integrity: sha512-bNm5G6sueUezvyhsBegA1wwM38yW0BnqpZTE9KHO2yKnkERNMaV5x/yPJ/DNCOHjJtCcJ5Uz55g2AS75Go31xA==} engines: {node: '>=18.0'} @@ -2149,14 +2230,36 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@docusaurus/utils-common@3.6.0': + resolution: {integrity: sha512-diUDNfbw33GaZMmKwdTckT2IBfVouXLXRD+zphH9ywswuaEIKqixvuf5g41H7MBBrlMsxhna3uTMoB4B/OPDcA==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true + '@docusaurus/utils-common@3.6.1': resolution: {integrity: sha512-LX1qiTiC0aS8c92uZ+Wj2iNCNJyYZJIKY8/nZDKNMBfo759VYVS3RX3fKP3DznB+16sYp7++MyCz/T6fOGaRfw==} engines: {node: '>=18.0'} + '@docusaurus/utils-validation@3.6.0': + resolution: {integrity: sha512-CRHiKKJEKA0GFlfOf71JWHl7PtwOyX0+Zg9ep9NFEZv6Lcx3RJ9nhl7p8HRjPL6deyYceavM//BsfW4pCI4BtA==} + engines: {node: '>=18.0'} + '@docusaurus/utils-validation@3.6.1': resolution: {integrity: sha512-+iMd6zRl5cJQm7nUP+7pSO/oAXsN79eHO34ME7l2YJt4GEAr70l5kkD58u2jEPpp+wSXT70c7x2A2lzJI1E8jw==} engines: {node: '>=18.0'} + '@docusaurus/utils@3.6.0': + resolution: {integrity: sha512-VKczAutI4mptiAw/WcYEu5WeVhQ6Q1zdIUl64SGw9K++9lziH+Kt10Ee8l2dMpRkiUk6zzK20kMNlX2WCUwXYQ==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true + '@docusaurus/utils@3.6.1': resolution: {integrity: sha512-nS3WCvepwrnBEgSG5vQu40XG95lC9Jeh/odV5u5IhU1eQFEGDst9xBi6IK5yZdsGvbuaXBZLZtOqWYtuuFa/rQ==} engines: {node: '>=18.0'} @@ -2499,6 +2602,24 @@ packages: resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + '@google-cloud/vertexai@1.9.0': resolution: {integrity: sha512-8brlcJwFXI4fPuBtsDNQqCdWZmz8gV9jeEKOU0vc5H2SjehCQpXK/NwuSEr916zbhlBHtg/sU37qQQdgvh5BRA==} engines: {node: '>=18.0.0'} @@ -2802,9 +2923,6 @@ packages: '@noble/curves@1.3.0': resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} - '@noble/curves@1.4.2': - resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} - '@noble/curves@1.6.0': resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} engines: {node: ^14.21.3 || >=16} @@ -2817,10 +2935,6 @@ packages: resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} engines: {node: '>= 16'} - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - '@noble/hashes@1.5.0': resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} @@ -2961,67 +3075,67 @@ packages: resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==} engines: {node: ^16.14.0 || >=18.0.0} - '@nx/devkit@20.1.0': - resolution: {integrity: sha512-TDWT3d7nei+FtqoZscR7KtbQ9BXzV1c1Wvk9UUejo7eXbrQ/+YnHVVze8EMuIgTXaHxNIBTKGUPcRi3cibmCDw==} + '@nx/devkit@20.0.8': + resolution: {integrity: sha512-MRUGgWSMzYtdwtolvWL5EZlX+7xYgu7JIXf1+3rmZU5adMmlqWKrIbyvDf53XocQlT8oxx/xXTEFHhIymGTQCg==} peerDependencies: nx: '>= 19 <= 21' - '@nx/nx-darwin-arm64@20.1.0': - resolution: {integrity: sha512-fel9LpSWuwY0cGAsRFEPxLp6J5VcK/5sjeWA0lZWrFf1oQJCOlKBfkxzi384Nd7eK5JSjxIXrpYfRLaqSbp+IA==} + '@nx/nx-darwin-arm64@20.0.8': + resolution: {integrity: sha512-tDoafq5YUyOwxR1Y796WXA6j49OLJRO7TA/Fym52SSuD3AULbgo3/X5XeY6oL2PWM044CuUVrp3V4cIDUtyJpA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@20.1.0': - resolution: {integrity: sha512-l1DB8dk2rCLGgXW26HmFOKYpUCF259LRus8z+z7dsFv5vz9TeN+fk5m9aAdiENgMA2cGlndQQW+E8UIo3yv+9g==} + '@nx/nx-darwin-x64@20.0.8': + resolution: {integrity: sha512-bvfZ6VhSvOpPV00veaJDO1a4X+f0dn8S1A73/2ThbGZrZLAQIFrA8v+ysax+bfCGRHNdtlAL+f7TG2buh/4BRg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@20.1.0': - resolution: {integrity: sha512-f8uMRIhiOA/73cIjiyS3gpKvaAtsHgyUkkoCOPc4xdxoSLAjlxb6VOUPIFj9rzLA6qQXImVpsiNPG+p1sJ1GAQ==} + '@nx/nx-freebsd-x64@20.0.8': + resolution: {integrity: sha512-AdOme0o/pTFy+TutIOAamuGTqbh6nOLrkNEX8f4ogfDRH+k/WvjRQ4z4ne58wf/2EVXua4jKTIEipIZAP/Ad1w==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@20.1.0': - resolution: {integrity: sha512-M7pay8hFJQZ3uJHlr5hZK/8o1BcHt95hy/SU7Azt7+LKQGOy42tXhHO30As9APzXqRmvoA2Iq1IyrJJicrz+Ew==} + '@nx/nx-linux-arm-gnueabihf@20.0.8': + resolution: {integrity: sha512-PYf7Z30A1TCZq9HVUP6JjT3ghTLYkaBpR6vDwiGWUV/exuNmhUgfYW6TiTpiSArXwnAgSIbaoGe537iEvYzA7A==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@20.1.0': - resolution: {integrity: sha512-A5+Kpk1uwYIj6CPm0DWLVz5wNTN4ewNl7ajLS9YJOi4yHx/FhfMMyPj4ZnbTpc4isuvgZwBZNl8kwFb2RdXq4w==} + '@nx/nx-linux-arm64-gnu@20.0.8': + resolution: {integrity: sha512-3VpvhjmNR78HVxGzpWiwqZsG5sNvLUv2Qfohtxyc3561o8VU41R9Onf/LJmbbZvmdDaPvvXQp3rs0OXT4i7T1g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@20.1.0': - resolution: {integrity: sha512-pWIQPt9Fst1O4dgrWHdU1b+5wpfLmsmaSeRvLQ9b2VFp3tKGko4ie0skme62TuMgpcqMWDBFKs8KgbHESOi7vw==} + '@nx/nx-linux-arm64-musl@20.0.8': + resolution: {integrity: sha512-3Z7fTJGG8h4VCHhD8Ix0zr6eFMfa1y3YDlzm8Clxu4Enzz0pEsUrT+ph6qrsArnIyUgiCowSi8+xgHFg7V/F1Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@20.1.0': - resolution: {integrity: sha512-sOpeGOHznk2ztCXzKhRPAKG3WtwaQUsfQ/3aYDXE6z+rSfyZTGY29M/a9FbdjI4cLJX+NdLAAMj15c3VecJ65g==} + '@nx/nx-linux-x64-gnu@20.0.8': + resolution: {integrity: sha512-Uttl1RHzWpjZgdzowCUNjC6/b3YhZR31wyXWgVF4PDWpDVgy4EigGc19tdrvv8pUVKQFuj0uaSTPUklguN7c3A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@20.1.0': - resolution: {integrity: sha512-SxnQJhjOvuOfUZnF4Wt4/O/l1e21qpACZzfMaPIvmiTLk9zPJZWtfgbqlKtTXHKWq9DfIUZQqZXRIpHPM1sDZQ==} + '@nx/nx-linux-x64-musl@20.0.8': + resolution: {integrity: sha512-llc6ywSPaOWQzEzD73USyAXd/y3Slu+GHS02IsQqZeA23EIOEzhvEeeeKgs4F8LKuFW/TpV6T5IhvSHw9/mvBg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@20.1.0': - resolution: {integrity: sha512-Z/KoaAA+Rg9iqqOPkKZV61MejPoJBOHlecFpq0G4TgKMJEJ/hEsjojq5usO1fUGAbvQT/SXL3pYWgZwhD3VEHw==} + '@nx/nx-win32-arm64-msvc@20.0.8': + resolution: {integrity: sha512-GhPVVNrL0QcQ3B6r0P0Dta3TIesJz7uso7iI5rCZ/oOGa02UsT4NkQBpIhxYQZ4TnHYNy84g4rHtYHrSlpDlEw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@20.1.0': - resolution: {integrity: sha512-pbxacjLsW9vXD9FibvU8Pal/r5+Yq6AaW6I57CDi7jsLt+K6jcS0fP4FlfXT8QFWdx9+bOKNfOsKEIwpirMN1w==} + '@nx/nx-win32-x64-msvc@20.0.8': + resolution: {integrity: sha512-yLlcgM0zFdmsExdLv8O2g5FWQ6d2vyN5OynKV+F5BrWHC4LvrqyYJ99y++5bLFoEi19RYIK6sLnzGIRSF6dHGg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3030,8 +3144,8 @@ packages: resolution: {integrity: sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==} engines: {node: '>= 18'} - '@octokit/auth-app@7.1.2': - resolution: {integrity: sha512-5cfWRr1hr0w/EW3StFIIOkMtYhOyGZ6/R3T0xeN6UgC/uL5pIyeood9N/8Z7W4NZUdz2QK1Fv0oM/1AzTME3/Q==} + '@octokit/auth-app@7.1.1': + resolution: {integrity: sha512-kRAd6yelV9OgvlEJE88H0VLlQdZcag9UlLr7dV0YYP37X8PPDvhgiTy66QVhDXdyoT0AleFN2w/qXkPdrSzINg==} engines: {node: '>= 18'} '@octokit/auth-oauth-app@8.1.1': @@ -3278,6 +3392,24 @@ packages: typescript: optional: true + '@radix-ui/react-compose-refs@1.1.0': + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.1.0': + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@reflink/reflink-darwin-arm64@0.1.16': resolution: {integrity: sha512-s61AeZ0br2LtqOl2Rbq0k833hQ00sXJ+l9LGJmjM53dupWft3HEX9C5WUIMDDiU2Scx7f7UKAE4DvIvv7XjBWQ==} engines: {node: '>= 10'} @@ -3410,6 +3542,15 @@ packages: tslib: optional: true + '@rollup/plugin-virtual@3.0.2': + resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -3419,98 +3560,98 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.26.0': - resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} + '@rollup/rollup-android-arm-eabi@4.25.0': + resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.26.0': - resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==} + '@rollup/rollup-android-arm64@4.25.0': + resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.26.0': - resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==} + '@rollup/rollup-darwin-arm64@4.25.0': + resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.26.0': - resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==} + '@rollup/rollup-darwin-x64@4.25.0': + resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.26.0': - resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==} + '@rollup/rollup-freebsd-arm64@4.25.0': + resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.26.0': - resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==} + '@rollup/rollup-freebsd-x64@4.25.0': + resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.26.0': - resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==} + '@rollup/rollup-linux-arm-gnueabihf@4.25.0': + resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.26.0': - resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==} + '@rollup/rollup-linux-arm-musleabihf@4.25.0': + resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.26.0': - resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==} + '@rollup/rollup-linux-arm64-gnu@4.25.0': + resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.26.0': - resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==} + '@rollup/rollup-linux-arm64-musl@4.25.0': + resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': - resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': + resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.26.0': - resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==} + '@rollup/rollup-linux-riscv64-gnu@4.25.0': + resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.26.0': - resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==} + '@rollup/rollup-linux-s390x-gnu@4.25.0': + resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.26.0': - resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==} + '@rollup/rollup-linux-x64-gnu@4.25.0': + resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.26.0': - resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==} + '@rollup/rollup-linux-x64-musl@4.25.0': + resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.26.0': - resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==} + '@rollup/rollup-win32-arm64-msvc@4.25.0': + resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.26.0': - resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==} + '@rollup/rollup-win32-ia32-msvc@4.25.0': + resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.26.0': - resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==} + '@rollup/rollup-win32-x64-msvc@4.25.0': + resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} cpu: [x64] os: [win32] - '@sapphire/async-queue@1.5.5': - resolution: {integrity: sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==} + '@sapphire/async-queue@1.5.4': + resolution: {integrity: sha512-id65RxAx34DCk8KAVTPWwcephJSkStiS9M15F87+zvK2gK47wf7yeRIo8WiuKeXQS6bsyo/uQ/t0QW1cLmSb+A==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} '@sapphire/shapeshift@4.0.0': @@ -3521,8 +3662,8 @@ packages: resolution: {integrity: sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - '@sapphire/snowflake@3.5.5': - resolution: {integrity: sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==} + '@sapphire/snowflake@3.5.4': + resolution: {integrity: sha512-YeQY5xNMj3zbwEIZYzyM/7heSjjDbje7B2jfbnoyUsBPMNL4+TO+Zd1pp8v0OzCLNpPaYIZdwcvEScKXthhsPA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} '@scure/base@1.1.9': @@ -3822,8 +3963,83 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@swc/core-darwin-arm64@1.9.2': + resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.9.2': + resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.9.2': + resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.9.2': + resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@swc/types@0.1.15': + resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -4115,8 +4331,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.11': + resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} @@ -4161,12 +4377,15 @@ packages: '@types/prop-types@15.7.13': resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.9.17': - resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + '@types/react-dom@18.3.1': + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + '@types/react-router-config@5.0.11': resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} @@ -4253,6 +4472,17 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@8.15.0': + resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@8.12.2': resolution: {integrity: sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4263,10 +4493,24 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.15.0': + resolution: {integrity: sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/scope-manager@8.12.2': resolution: {integrity: sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.15.0': + resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@8.12.2': resolution: {integrity: sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4276,10 +4520,24 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@8.15.0': + resolution: {integrity: sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/types@8.12.2': resolution: {integrity: sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.15.0': + resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.12.2': resolution: {integrity: sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4289,19 +4547,57 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.15.0': + resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/utils@8.12.2': resolution: {integrity: sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.15.0': + resolution: {integrity: sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/visitor-keys@8.12.2': resolution: {integrity: sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.15.0': + resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@uniswap/sdk-core@4.2.1': + resolution: {integrity: sha512-hr7vwYrXScg+V8/rRc2UL/Ixc/p0P7yqe4D/OxzUdMRYr8RZd+8z5Iu9+WembjZT/DCdbTjde6lsph4Og0n1BQ==} + engines: {node: '>=10'} + + '@unruggable_starknet/core@0.1.0': + resolution: {integrity: sha512-qhKqw1XKhSRHzK3Ll/RzCblGFJDD4oeGoPQbal/X7QVVG1qz+VnqoyA1U6SDmlSGTHfskvMoXrVWkPRFL2RqHA==} + peerDependencies: + starknet: '>=5.0.0' + + '@vitejs/plugin-react@4.3.3': + resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + '@vitest/expect@2.1.5': resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} @@ -4364,54 +4660,50 @@ packages: '@vue/shared@3.5.12': resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - - '@wolfy1339/lru-cache@11.0.2-patch.1': - resolution: {integrity: sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==} - engines: {node: 18 >=18.20 || 20 || >=22} + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -4422,9 +4714,9 @@ packages: '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - '@yarnpkg/parsers@3.0.2': - resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==} - engines: {node: '>=18.12.0'} + '@yarnpkg/parsers@3.0.0-rc.46': + resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==} + engines: {node: '>=14.15.0'} '@zkochan/js-yaml@0.0.7': resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==} @@ -4558,8 +4850,8 @@ packages: algoliasearch@4.24.0: resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} - algoliasearch@5.13.0: - resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==} + algoliasearch@5.12.0: + resolution: {integrity: sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg==} engines: {node: '>= 14.0.0'} amp-message@0.1.2: @@ -4780,8 +5072,8 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4790,8 +5082,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -5042,6 +5334,10 @@ packages: camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -5061,8 +5357,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.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -5177,13 +5473,16 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.1.0: - resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} engines: {node: '>=8'} cjs-module-lexer@1.4.1: resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + cldr-segmentation@2.2.1: resolution: {integrity: sha512-0XAXy22htsxXgdSbXxJzzyAsBrBUvFhUho3eRonfcP/zvromwjBe5yDji9/y4XaV9YszEZswKv3WYhgd+JA8CA==} @@ -5261,6 +5560,10 @@ packages: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} + clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + clsx@2.1.0: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} @@ -5563,8 +5866,8 @@ packages: cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} crypto-hash@1.3.0: @@ -5921,6 +6224,9 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -6050,6 +6356,9 @@ packages: devtools-protocol@0.0.1107588: resolution: {integrity: sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} @@ -6082,6 +6391,9 @@ packages: resolution: {integrity: sha512-EPCWE9OkA9DnFFNrO7Kl1WHHDYFXu3CNVFJg63bfU7hVtjZGyhShwZtSBImINQRWxWP2tgo2XI+QhdXx28r0aA==} engines: {node: '>=18'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -6170,8 +6482,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.57: - resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} + electron-to-chromium@1.5.51: + resolution: {integrity: sha512-kKeWV57KSS8jH4alKt/jKnvHPmJgBxXzGUSbMd4eQF+iOsVPl7bz2KUmu6eo80eMP8wVioTfTyTzdMgM15WXNg==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -6350,6 +6662,17 @@ packages: eslint-config-prettier: optional: true + eslint-plugin-react-hooks@5.0.0: + resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.14: + resolution: {integrity: sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==} + peerDependencies: + eslint: '>=7' + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -6900,9 +7223,6 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} - get-starknet-core@4.0.0: - resolution: {integrity: sha512-6pLmidQZkC3wZsrHY99grQHoGpuuXqkbSP65F8ov1/JsEI8DDLkhsAuLCKFzNOK56cJp+f1bWWfTJ57e9r5eqQ==} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -7026,6 +7346,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.12.0: + resolution: {integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==} + engines: {node: '>=18'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -7461,8 +7785,8 @@ packages: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} - ipull@3.9.2: - resolution: {integrity: sha512-YbCDsqcf0ytc3b8304ygBlvRtKJTvyygkQX2xcmPkih6vdVKbRw13pDdtSR+vEqLql3owyuPj9m6iT6IfwFaCg==} + ipull@3.9.1: + resolution: {integrity: sha512-XqFJh66FQXkgpbZLXD5e1dlMkzTjVWUWYRs39eQ+Ra6V8fiebo4AgJ4AM/YsGOEpI4O/USxOBvS63Wj8YeGfAA==} engines: {node: '>=18.0.0'} hasBin: true @@ -7608,8 +7932,8 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-reference@3.0.3: - resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} @@ -7893,6 +8217,9 @@ packages: js-sha1@0.7.0: resolution: {integrity: sha512-oQZ1Mo7440BfLSv9TX87VNEyU52pXPVG19F9PL3gTgNt0tVxlZ8F4O6yze3CLuLx28TxotxvlyepCNaaV0ZjMw==} + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -7904,6 +8231,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbi@3.2.5: + resolution: {integrity: sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==} + jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -8086,6 +8416,10 @@ packages: lifecycle-utils@1.7.0: resolution: {integrity: sha512-suNHxB8zsWrvsWxsmy9PsOcHuThRsCzvUhtGwxfvYAl8mbeWv7lt+wNT3q9KgILWmNe9zEVZ6PXo1gsvpYIdvw==} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + lilconfig@3.1.2: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} @@ -8254,6 +8588,11 @@ packages: lru-queue@0.1.0: resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + lucide-react@0.460.0: + resolution: {integrity: sha512-BVtq/DykVeIvRTJvRAgCsOwaGL8Un3Bxh8MbDxMhEWlZay3T4IpEKDEpwt5KZ0KJMHzgm6jrltxlT5eXOWXDHg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + lunr-languages@1.14.0: resolution: {integrity: sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA==} @@ -8421,8 +8760,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromark-core-commonmark@2.0.2: - resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==} + micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} micromark-extension-directive@3.0.2: resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} @@ -8466,11 +8805,11 @@ packages: micromark-extension-mdxjs@3.0.0: resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} micromark-factory-mdx-expression@2.0.2: resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} @@ -8478,71 +8817,71 @@ packages: micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} micromark-util-character@1.2.0: resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} micromark-util-events-to-acorn@2.0.2: resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} - micromark-util-subtokenize@2.0.2: - resolution: {integrity: sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==} + micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} micromark-util-symbol@1.1.0: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - micromark-util-types@2.0.1: - resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==} + micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - micromark@4.0.1: - resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==} + micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} @@ -8715,8 +9054,8 @@ packages: engines: {node: '>=10'} hasBin: true - mlly@1.7.3: - resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} + mlly@1.7.2: + resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} modify-values@1.0.1: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} @@ -8725,6 +9064,9 @@ packages: module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -8833,8 +9175,8 @@ packages: node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - node-addon-api@8.2.2: - resolution: {integrity: sha512-9emqXAKhVoNrQ792nLI/wpzPpJ/bj/YXxW0CvAau1+RdGBcCRF1Dmz7719zgVsQNrzHl9Tzn3ImZ4qWFarWL0A==} + node-addon-api@8.2.1: + resolution: {integrity: sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA==} engines: {node: ^18 || ^20 || >= 21} node-api-headers@1.4.0: @@ -8878,8 +9220,8 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - node-gyp-build@4.8.3: - resolution: {integrity: sha512-EMS95CMJzdoSKoIiXo8pxKoL8DYxwIZXYlLmgPb8KUv794abpnLK6ynsCAWNliOjREKruYKdzbh76HHYUHX7nw==} + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true node-gyp@10.2.0: @@ -9016,8 +9358,8 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 - nx@20.1.0: - resolution: {integrity: sha512-d8Ywh1AvG3szYqWEHg2n9DHh/hF0jtVhMZKxwsr7n+kSVxp7gE/rHCCfOo8H+OmP030qXoox5e4Ovp7H9CEJnA==} + nx@20.0.8: + resolution: {integrity: sha512-cMtb+u5Eji7Xm9xMHZkRXMcO8GH6FFqS2+nMgtLUZ/+ZmquEgoV8mbsKVw1u1sJ6osOpWAu9OwXcilwtvSOoBw==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -9035,8 +9377,12 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} engines: {node: '>= 0.4'} object-keys@1.1.1: @@ -9398,8 +9744,8 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path2d@0.2.2: - resolution: {integrity: sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==} + path2d@0.2.1: + resolution: {integrity: sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==} engines: {node: '>=6'} pathe@1.1.2: @@ -9613,6 +9959,30 @@ packages: peerDependencies: postcss: ^8.4.31 + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + postcss-load-config@6.0.1: resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} engines: {node: '>= 18'} @@ -9686,14 +10056,14 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-modules-local-by-default@4.1.0: - resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} + postcss-modules-local-by-default@4.0.5: + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + postcss-modules-scope@3.2.0: + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -9704,6 +10074,12 @@ packages: peerDependencies: postcss: ^8.1.0 + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + postcss-normalize-charset@6.0.2: resolution: {integrity: sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==} engines: {node: ^14 || ^16 || >=18.0} @@ -9786,10 +10162,6 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} - postcss-selector-parser@7.0.0: - resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} - engines: {node: '>=4'} - postcss-sort-media-queries@5.2.0: resolution: {integrity: sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==} engines: {node: '>=14.0.0'} @@ -9986,8 +10358,8 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - psl@1.10.0: - resolution: {integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==} + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} @@ -10118,6 +10490,11 @@ packages: peerDependencies: react: ^18.2.0 + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-error-overlay@6.0.11: resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} @@ -10154,6 +10531,10 @@ packages: react-loadable: '*' webpack: '>=4.41.1 || 5.x' + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-router-config@5.1.1: resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} peerDependencies: @@ -10192,6 +10573,13 @@ packages: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + read-cmd-shim@4.0.0: resolution: {integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10465,8 +10853,8 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@4.26.0: - resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} + rollup@4.25.0: + resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -10880,8 +11268,8 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - starknet@6.11.0: - resolution: {integrity: sha512-u50KrGDi9fbu1Ogu7ynwF/tSeFlp3mzOg1/Y5x50tYFICImo3OfY4lOz9OtYDk404HK4eUujKkhov9tG7GAKlg==} + starknet@6.18.0: + resolution: {integrity: sha512-nlxz7bK/YBY8W8NUevkycxFwphsX27oi+4YCl36TYFdrJpTOMqmJDnZ27ssr7z0eEDQLQscIxt1gXrZzCJua7g==} statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} @@ -10891,6 +11279,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + std-env@3.8.0: resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} @@ -10913,8 +11304,8 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.20.2: - resolution: {integrity: sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==} + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -11044,8 +11435,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.1.16: - resolution: {integrity: sha512-QcY+om9r8+uTcSfeFuv8++ExdfwVCKeT+Y7GPSZ6rQPczvy62BMtvMoi0rScabgv+upGE5jxKjd7M4u23+AjGA==} + svelte@5.1.9: + resolution: {integrity: sha512-nzq+PPKGS2PoEWDjAcXSrKSbXmmmOAxd6dAz1IhRusUpVkFS6DMELWPyBPGwu6TpO/gsgtFXwX0M4+pAR5gzKw==} engines: {node: '>=18'} svg-parser@2.0.4: @@ -11079,6 +11470,19 @@ packages: os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] hasBin: true + tailwind-merge@2.5.4: + resolution: {integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.15: + resolution: {integrity: sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==} + engines: {node: '>=14.0.0'} + hasBin: true + tapable@1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} engines: {node: '>=6'} @@ -11223,11 +11627,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.58: + resolution: {integrity: sha512-dR936xmhBm7AeqHIhCWwK765gZ7dFyL+IqLSFAjJbFlUXGMLCb8i2PzlzaOuWBuplBTaBYseSb565nk/ZEM0Bg==} - tldts-experimental@6.1.61: - resolution: {integrity: sha512-1plwEyCpyYtVsZVtC169C5bStRlDk3cIniMHUeNmAJOjmQGx7SnLM8kS06PQAHx9PPY4Jm1VS6IXZzPC53XpbQ==} + tldts-experimental@6.1.58: + resolution: {integrity: sha512-oMXXM56JFUjwcw+2Vt7NP3LQUpK3ZLdGAqSAFwGtAPWjvKK36bJ162UjsnSdFsq6nU3Wae5HYlE8N/vULPZ00g==} tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} @@ -11247,6 +11651,9 @@ packages: to-vfile@6.1.0: resolution: {integrity: sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==} + toformat@2.0.0: + resolution: {integrity: sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ==} + together-ai@0.7.0: resolution: {integrity: sha512-/be/HOecBSwRTDHB14vCvHbp1WiNsFxyS4pJlyBoMup1X3n7xD1b/Gm5Z5amlKzD2zll9Y5wscDk7Ut5OsT1nA==} @@ -11465,8 +11872,18 @@ packages: peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript-eslint@8.15.0: + resolution: {integrity: sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -11724,6 +12141,16 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-plugin-top-level-await@1.4.4: + resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==} + peerDependencies: + vite: '>=2.8' + + vite-plugin-wasm@3.3.0: + resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==} + peerDependencies: + vite: ^2 || ^3 || ^4 || ^5 + vite@5.4.11: resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -12231,14 +12658,14 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@0.0.70(react@18.2.0)(zod@3.23.8)': + '@ai-sdk/react@0.0.70(react@18.3.1)(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) - swr: 2.2.5(react@18.2.0) + swr: 2.2.5(react@18.3.1) throttleit: 2.1.0 optionalDependencies: - react: 18.2.0 + react: 18.3.1 zod: 3.23.8 '@ai-sdk/solid@0.0.54(zod@3.23.8)': @@ -12248,13 +12675,13 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/svelte@0.0.57(svelte@5.1.16)(zod@3.23.8)': + '@ai-sdk/svelte@0.0.57(svelte@5.1.9)(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.1.16) + sswr: 2.1.0(svelte@5.1.9) optionalDependencies: - svelte: 5.1.16 + svelte: 5.1.9 transitivePeerDependencies: - zod @@ -12278,33 +12705,38 @@ snapshots: transitivePeerDependencies: - zod - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': + '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)': + dependencies: + '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) + '@algolia/client-search': 5.12.0 + algoliasearch: 5.12.0 + + '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - '@algolia/client-search': 5.13.0 - algoliasearch: 5.13.0 + '@algolia/client-search': 5.12.0 + algoliasearch: 5.12.0 - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)': dependencies: - '@algolia/client-search': 5.13.0 - algoliasearch: 5.13.0 + '@algolia/client-search': 5.12.0 + algoliasearch: 5.12.0 '@algolia/cache-browser-local-storage@4.24.0': dependencies: @@ -12316,12 +12748,12 @@ snapshots: dependencies: '@algolia/cache-common': 4.24.0 - '@algolia/client-abtesting@5.13.0': + '@algolia/client-abtesting@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/client-account@4.24.0': dependencies: @@ -12336,26 +12768,26 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-analytics@5.13.0': + '@algolia/client-analytics@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/client-common@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-common@5.13.0': {} + '@algolia/client-common@5.12.0': {} - '@algolia/client-insights@5.13.0': + '@algolia/client-insights@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/client-personalization@4.24.0': dependencies: @@ -12363,19 +12795,19 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-personalization@5.13.0': + '@algolia/client-personalization@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/client-query-suggestions@5.13.0': + '@algolia/client-query-suggestions@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/client-search@4.24.0': dependencies: @@ -12383,21 +12815,21 @@ snapshots: '@algolia/requester-common': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/client-search@5.13.0': + '@algolia/client-search@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/events@4.0.1': {} - '@algolia/ingestion@1.13.0': + '@algolia/ingestion@1.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/logger-common@4.24.0': {} @@ -12405,12 +12837,12 @@ snapshots: dependencies: '@algolia/logger-common': 4.24.0 - '@algolia/monitoring@1.13.0': + '@algolia/monitoring@1.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/recommend@4.24.0': dependencies: @@ -12426,34 +12858,34 @@ snapshots: '@algolia/requester-node-http': 4.24.0 '@algolia/transporter': 4.24.0 - '@algolia/recommend@5.13.0': + '@algolia/recommend@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 '@algolia/requester-browser-xhr@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 - '@algolia/requester-browser-xhr@5.13.0': + '@algolia/requester-browser-xhr@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 + '@algolia/client-common': 5.12.0 '@algolia/requester-common@4.24.0': {} - '@algolia/requester-fetch@5.13.0': + '@algolia/requester-fetch@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 + '@algolia/client-common': 5.12.0 '@algolia/requester-node-http@4.24.0': dependencies: '@algolia/requester-common': 4.24.0 - '@algolia/requester-node-http@5.13.0': + '@algolia/requester-node-http@5.12.0': dependencies: - '@algolia/client-common': 5.13.0 + '@algolia/client-common': 5.12.0 '@algolia/transporter@4.24.0': dependencies: @@ -12461,6 +12893,8 @@ snapshots: '@algolia/logger-common': 4.24.0 '@algolia/requester-common': 4.24.0 + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -12468,7 +12902,7 @@ snapshots: '@antfu/install-pkg@0.4.1': dependencies: - package-manager-detector: 0.2.4 + package-manager-detector: 0.2.2 tinyexec: 0.3.1 '@antfu/utils@0.7.10': {} @@ -12476,7 +12910,7 @@ snapshots: '@anthropic-ai/sdk@0.30.1(encoding@0.1.13)': dependencies: '@types/node': 18.19.64 - '@types/node-fetch': 2.6.12 + '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 form-data-encoder: 1.7.2 @@ -12500,11 +12934,11 @@ snapshots: '@anush008/tokenizers-linux-x64-gnu': 0.0.0 '@anush008/tokenizers-win32-x64-msvc': 0.0.0 - '@avnu/avnu-sdk@2.1.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(qs@6.13.0)(starknet@6.11.0(encoding@0.1.13))': + '@avnu/avnu-sdk@2.1.1(ethers@6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10))(qs@6.13.0)(starknet@6.18.0(encoding@0.1.13))': dependencies: ethers: 6.13.4(bufferutil@4.0.8)(utf-8-validate@5.0.10) qs: 6.13.0 - starknet: 6.11.0(encoding@0.1.13) + starknet: 6.18.0(encoding@0.1.13) '@babel/code-frame@7.26.2': dependencies: @@ -12581,7 +13015,7 @@ snapshots: regexpu-core: 6.1.1 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-compilation-targets': 7.25.9 @@ -13088,6 +13522,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -13127,9 +13571,9 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -13263,9 +13707,9 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) core-js-compat: 3.39.0 semver: 6.3.1 transitivePeerDependencies: @@ -13365,7 +13809,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.58 '@cliqz/adblocker@1.34.0': dependencies: @@ -13376,7 +13820,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.58 '@colors/colors@1.5.0': optional: true @@ -13458,7 +13902,7 @@ snapshots: '@discordjs/opus@https://codeload.github.com/discordjs/opus/tar.gz/31da49d8d2cc6c5a2ab1bfd332033ff7d5f9fb02(encoding@0.1.13)': dependencies: '@discordjs/node-pre-gyp': 0.4.5(encoding@0.1.13) - node-addon-api: 8.2.2 + node-addon-api: 8.2.1 transitivePeerDependencies: - encoding - supports-color @@ -13467,8 +13911,8 @@ snapshots: dependencies: '@discordjs/collection': 2.1.1 '@discordjs/util': 1.1.1 - '@sapphire/async-queue': 1.5.5 - '@sapphire/snowflake': 3.5.5 + '@sapphire/async-queue': 1.5.4 + '@sapphire/snowflake': 3.5.4 '@vladfrangu/async_event_emitter': 2.4.6 discord-api-types: 0.37.97 magic-bytes.js: 1.10.0 @@ -13497,7 +13941,7 @@ snapshots: '@discordjs/collection': 2.1.1 '@discordjs/rest': 2.4.0 '@discordjs/util': 1.1.1 - '@sapphire/async-queue': 1.5.5 + '@sapphire/async-queue': 1.5.4 '@types/ws': 8.5.13 '@vladfrangu/async_event_emitter': 2.4.6 discord-api-types: 0.37.83 @@ -13509,23 +13953,49 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/css@3.8.0': {} + '@docsearch/css@3.6.3': {} - '@docsearch/react@3.8.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)': + '@docsearch/react@3.6.3(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - '@docsearch/css': 3.8.0 - algoliasearch: 5.13.0 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) + '@docsearch/css': 3.6.3 + algoliasearch: 5.12.0 optionalDependencies: '@types/react': 18.3.12 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - search-insights: 2.17.3 + search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@docusaurus/babel@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3)': + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/runtime': 7.26.0 + '@babel/runtime-corejs3': 7.26.0 + '@babel/traverse': 7.25.9 + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + babel-plugin-dynamic-import-node: 2.3.3 + fs-extra: 11.2.0 + tslib: 2.8.0 + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - esbuild + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/babel@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: '@babel/core': 7.26.0 '@babel/generator': 7.26.2 @@ -13538,7 +14008,7 @@ snapshots: '@babel/runtime-corejs3': 7.26.0 '@babel/traverse': 7.25.9 '@docusaurus/logger': 3.6.1 - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.2.0 tslib: 2.8.0 @@ -13553,33 +14023,78 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.6.1(acorn@8.14.0)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@docusaurus/bundler@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + dependencies: + '@babel/core': 7.26.0 + '@docusaurus/babel': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/cssnano-preset': 3.6.0 + '@docusaurus/logger': 3.6.0 + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + autoprefixer: 10.4.20(postcss@8.4.49) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + clean-css: 5.3.3 + copy-webpack-plugin: 11.0.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + cssnano: 6.1.2(postcss@8.4.49) + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + html-minifier-terser: 7.2.0 + mini-css-extract-plugin: 2.9.2(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + null-loader: 4.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + postcss: 8.4.49 + postcss-loader: 7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + react-dev-utils: 12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.13))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + tslib: 2.8.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + webpackbar: 6.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + transitivePeerDependencies: + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - csso + - esbuild + - eslint + - lightningcss + - react + - react-dom + - supports-color + - typescript + - uglify-js + - vue-template-compiler + - webpack-cli + + '@docusaurus/bundler@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: '@babel/core': 7.26.0 - '@docusaurus/babel': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/babel': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@docusaurus/cssnano-preset': 3.6.1 '@docusaurus/logger': 3.6.1 - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) autoprefixer: 10.4.20(postcss@8.4.49) - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) clean-css: 5.3.3 - copy-webpack-plugin: 11.0.0(webpack@5.96.1) - css-loader: 6.11.0(webpack@5.96.1) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.96.1) + copy-webpack-plugin: 11.0.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + css-loader: 6.11.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) cssnano: 6.1.2(postcss@8.4.49) - file-loader: 6.2.0(webpack@5.96.1) + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) html-minifier-terser: 7.2.0 - mini-css-extract-plugin: 2.9.2(webpack@5.96.1) - null-loader: 4.0.1(webpack@5.96.1) + mini-css-extract-plugin: 2.9.2(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + null-loader: 4.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) postcss: 8.4.49 - postcss-loader: 7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1) - react-dev-utils: 12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1) - terser-webpack-plugin: 5.3.10(webpack@5.96.1) + postcss-loader: 7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + react-dev-utils: 12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.13))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) tslib: 2.8.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1) - webpack: 5.96.1 - webpackbar: 6.0.1(webpack@5.96.1) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + webpackbar: 6.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -13598,15 +14113,84 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/core@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/core@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/babel': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/bundler': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/logger': 3.6.0 + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.2.0) + boxen: 6.2.1 + chalk: 4.1.2 + chokidar: 3.6.0 + cli-table3: 0.6.5 + combine-promises: 1.2.0 + commander: 5.1.0 + core-js: 3.39.0 + del: 6.1.1 + detect-port: 1.6.1 + escape-html: 1.0.3 + eta: 2.2.0 + eval: 0.1.8 + fs-extra: 11.2.0 + html-tags: 3.3.1 + html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + leven: 3.1.0 + lodash: 4.17.21 + p-map: 4.0.0 + prompts: 2.4.2 + react: 18.2.0 + react-dev-utils: 12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + react-dom: 18.2.0(react@18.2.0) + react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.2.0)' + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + react-router: 5.3.4(react@18.2.0) + react-router-config: 5.1.1(react-router@5.3.4(react@18.2.0))(react@18.2.0) + react-router-dom: 5.3.4(react@18.2.0) + rtl-detect: 1.1.2 + semver: 7.6.3 + serve-handler: 6.1.6 + shelljs: 0.8.5 + tslib: 2.8.0 + update-notifier: 6.0.2 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + webpack-bundle-analyzer: 4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + webpack-dev-server: 4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + webpack-merge: 6.0.1 + transitivePeerDependencies: + - '@docusaurus/faster' + - '@docusaurus/types' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + + '@docusaurus/core@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/babel': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/bundler': 3.6.1(acorn@8.14.0)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/babel': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/bundler': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@docusaurus/logger': 3.6.1 - '@docusaurus/mdx-loader': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.2.0) boxen: 6.2.1 chalk: 4.1.2 @@ -13622,17 +14206,17 @@ snapshots: eval: 0.1.8 fs-extra: 11.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) + html-webpack-plugin: 5.6.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) leven: 3.1.0 lodash: 4.17.21 p-map: 4.0.0 prompts: 2.4.2 react: 18.2.0 - react-dev-utils: 12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1) + react-dev-utils: 12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) react-dom: 18.2.0(react@18.2.0) react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.2.0)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.96.1) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) react-router: 5.3.4(react@18.2.0) react-router-config: 5.1.1(react-router@5.3.4(react@18.2.0))(react@18.2.0) react-router-dom: 5.3.4(react@18.2.0) @@ -13642,9 +14226,9 @@ snapshots: shelljs: 0.8.5 tslib: 2.8.0 update-notifier: 6.0.2 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) webpack-bundle-analyzer: 4.10.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - webpack-dev-server: 4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.96.1) + webpack-dev-server: 4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) webpack-merge: 6.0.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -13666,6 +14250,13 @@ snapshots: - vue-template-compiler - webpack-cli + '@docusaurus/cssnano-preset@3.6.0': + dependencies: + cssnano-preset-advanced: 6.1.2(postcss@8.4.49) + postcss: 8.4.49 + postcss-sort-media-queries: 5.2.0(postcss@8.4.49) + tslib: 2.8.0 + '@docusaurus/cssnano-preset@3.6.1': dependencies: cssnano-preset-advanced: 6.1.2(postcss@8.4.49) @@ -13673,31 +14264,74 @@ snapshots: postcss-sort-media-queries: 5.2.0(postcss@8.4.49) tslib: 2.8.0 + '@docusaurus/logger@3.6.0': + dependencies: + chalk: 4.1.2 + tslib: 2.8.0 + '@docusaurus/logger@3.6.1': dependencies: chalk: 4.1.2 tslib: 2.8.0 - '@docusaurus/lqip-loader@3.6.1(webpack@5.96.1)': + '@docusaurus/lqip-loader@3.6.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)))': dependencies: - '@docusaurus/logger': 3.6.1 - file-loader: 6.2.0(webpack@5.96.1) + '@docusaurus/logger': 3.6.0 + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) lodash: 4.17.21 sharp: 0.32.6 tslib: 2.8.0 transitivePeerDependencies: - webpack - '@docusaurus/mdx-loader@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@docusaurus/mdx-loader@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + dependencies: + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + '@slorber/remark-comment': 1.0.0 + escape-html: 1.0.3 + estree-util-value-to-estree: 3.2.1 + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + fs-extra: 11.2.0 + image-size: 1.1.1 + mdast-util-mdx: 3.0.0 + mdast-util-to-string: 4.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + rehype-raw: 7.0.0 + remark-directive: 3.0.0 + remark-emoji: 4.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.0 + stringify-object: 3.3.0 + tslib: 2.8.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + vfile: 6.0.3 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - acorn + - esbuild + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/mdx-loader@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.6.1 - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.2.1 - file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) fs-extra: 11.2.0 image-size: 1.1.1 mdast-util-mdx: 3.0.0 @@ -13713,9 +14347,9 @@ snapshots: tslib: 2.8.0 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) vfile: 6.0.3 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@swc/core' - acorn @@ -13725,9 +14359,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@docusaurus/module-type-aliases@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/history': 4.7.11 '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 @@ -13744,9 +14378,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@docusaurus/module-type-aliases@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@types/history': 4.7.11 '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 @@ -13763,17 +14397,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-blog@3.6.1(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.6.1 - '@docusaurus/mdx-loader': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.2.0 @@ -13785,7 +14419,7 @@ snapshots: tslib: 2.8.0 unist-util-visit: 5.0.0 utility-types: 3.11.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13807,17 +14441,61 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-blog@3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.6.1 - '@docusaurus/mdx-loader': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + cheerio: 1.0.0-rc.12 + feed: 4.2.2 + fs-extra: 11.2.0 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + reading-time: 1.5.0 + srcset: 4.0.0 + tslib: 2.8.0 + unist-util-visit: 5.0.0 + utility-types: 3.11.0 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + + '@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/logger': 3.6.0 + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.2.0 @@ -13827,7 +14505,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) tslib: 2.8.0 utility-types: 3.11.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13849,18 +14527,60 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/mdx-loader': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/logger': 3.6.1 + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@types/react-router-config': 5.0.11 + combine-promises: 1.2.0 + fs-extra: 11.2.0 + js-yaml: 4.1.0 + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.8.0 + utility-types: 3.11.0 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + + '@docusaurus/plugin-content-pages@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) fs-extra: 11.2.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tslib: 2.8.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -13882,11 +14602,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-debug@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) fs-extra: 11.2.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -13913,11 +14633,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-analytics@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tslib: 2.8.0 @@ -13942,11 +14662,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-gtag@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@types/gtag.js': 0.0.12 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -13972,11 +14692,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-google-tag-manager@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tslib: 2.8.0 @@ -14001,21 +14721,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-ideal-image@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(prop-types@15.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-ideal-image@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(prop-types@15.8.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/lqip-loader': 3.6.1(webpack@5.96.1) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/lqip-loader': 3.6.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) '@docusaurus/responsive-loader': 1.7.0(sharp@0.32.6) - '@docusaurus/theme-translations': 3.6.1 - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/theme-translations': 3.6.0 + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) '@slorber/react-ideal-image': 0.0.12(prop-types@15.8.1)(react-waypoint@10.3.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-waypoint: 10.3.0(react@18.2.0) sharp: 0.32.6 tslib: 2.8.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -14038,14 +14758,14 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/plugin-sitemap@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.6.1 - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) fs-extra: 11.2.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14072,21 +14792,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': - dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-blog': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-pages': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-debug': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-analytics': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-gtag': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-google-tag-manager': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-sitemap': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-classic': 3.6.1(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/theme-search-algolia': 3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/preset-classic@3.6.1(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-blog': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-pages': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-debug': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-analytics': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-gtag': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-google-tag-manager': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-sitemap': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-classic': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/theme-search-algolia': 3.6.1(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) transitivePeerDependencies: @@ -14124,21 +14844,21 @@ snapshots: optionalDependencies: sharp: 0.32.6 - '@docusaurus/theme-classic@3.6.1(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-classic@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.6.1 - '@docusaurus/mdx-loader': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/plugin-content-blog': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/plugin-content-pages': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/plugin-content-blog': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/plugin-content-pages': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@docusaurus/theme-translations': 3.6.1 - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.2.0) clsx: 2.1.0 copy-text-to-clipboard: 3.2.0 @@ -14175,13 +14895,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@docusaurus/theme-common@3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/mdx-loader': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/module-type-aliases': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) '@types/history': 4.7.11 '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 @@ -14193,6 +14913,7 @@ snapshots: tslib: 2.8.0 utility-types: 3.11.0 transitivePeerDependencies: + - '@docusaurus/types' - '@swc/core' - acorn - esbuild @@ -14201,13 +14922,65 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-mermaid@3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-common@3.6.1(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/module-type-aliases': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/history': 4.7.11 + '@types/react': 18.3.12 + '@types/react-router-config': 5.0.11 + clsx: 2.1.0 + parse-numeric-range: 1.3.0 + prism-react-renderer: 2.3.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.8.0 + utility-types: 3.11.0 + transitivePeerDependencies: + - '@swc/core' + - acorn + - esbuild + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/theme-common@3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + dependencies: + '@docusaurus/mdx-loader': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/module-type-aliases': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@types/history': 4.7.11 + '@types/react': 18.3.12 + '@types/react-router-config': 5.0.11 + clsx: 2.1.0 + parse-numeric-range: 1.3.0 + prism-react-renderer: 2.3.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + tslib: 2.8.0 + utility-types: 3.11.0 + transitivePeerDependencies: + - '@swc/core' + - acorn + - esbuild + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/theme-mermaid@3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10)': + dependencies: + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/module-type-aliases': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) mermaid: 11.4.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -14234,16 +15007,16 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-search-algolia@3.6.1(@algolia/client-search@5.13.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': + '@docusaurus/theme-search-algolia@3.6.1(@algolia/client-search@5.12.0)(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/react@18.3.12)(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(typescript@5.6.3)(utf-8-validate@5.0.10)': dependencies: - '@docsearch/react': 3.8.0(@algolia/client-search@5.13.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2) - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docsearch/react': 3.6.3(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2) + '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) '@docusaurus/logger': 3.6.1 - '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) - '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/plugin-content-docs': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/theme-common': 3.6.1(@docusaurus/plugin-content-docs@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) '@docusaurus/theme-translations': 3.6.1 - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-validation': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-validation': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) algoliasearch: 4.24.0 algoliasearch-helper: 3.22.5(algoliasearch@4.24.0) clsx: 2.1.0 @@ -14278,12 +15051,17 @@ snapshots: - vue-template-compiler - webpack-cli + '@docusaurus/theme-translations@3.6.0': + dependencies: + fs-extra: 11.2.0 + tslib: 2.8.0 + '@docusaurus/theme-translations@3.6.1': dependencies: fs-extra: 11.2.0 tslib: 2.8.0 - '@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@types/history': 4.7.11 @@ -14294,7 +15072,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) utility-types: 3.11.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' @@ -14304,7 +15082,7 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/types@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@docusaurus/types@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@types/history': 4.7.11 @@ -14315,7 +15093,7 @@ snapshots: react-dom: 18.2.0(react@18.2.0) react-helmet-async: 1.3.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) utility-types: 3.11.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' @@ -14325,9 +15103,15 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@docusaurus/utils-common@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))': + dependencies: + tslib: 2.8.0 + optionalDependencies: + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + + '@docusaurus/utils-common@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) tslib: 2.8.0 transitivePeerDependencies: - '@swc/core' @@ -14339,11 +15123,30 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@docusaurus/utils-validation@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3)': + dependencies: + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) + fs-extra: 11.2.0 + joi: 17.13.3 + js-yaml: 4.1.0 + lodash: 4.17.21 + tslib: 2.8.0 + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - esbuild + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/utils-validation@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.6.1 - '@docusaurus/utils': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) fs-extra: 11.2.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -14351,23 +15154,55 @@ snapshots: tslib: 2.8.0 transitivePeerDependencies: - '@swc/core' - - acorn + - acorn + - esbuild + - react + - react-dom + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/utils@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(typescript@5.6.3)': + dependencies: + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) + '@svgr/webpack': 8.1.0(typescript@5.6.3) + escape-string-regexp: 4.0.0 + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + fs-extra: 11.2.0 + github-slugger: 1.5.0 + globby: 11.1.0 + gray-matter: 4.0.3 + jiti: 1.21.6 + js-yaml: 4.1.0 + lodash: 4.17.21 + micromatch: 4.0.8 + prompts: 2.4.2 + resolve-pathname: 3.0.0 + shelljs: 0.8.5 + tslib: 2.8.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) + utility-types: 3.11.0 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + optionalDependencies: + '@docusaurus/types': 3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + transitivePeerDependencies: + - '@swc/core' - esbuild - - react - - react-dom - supports-color - typescript - uglify-js - webpack-cli - '@docusaurus/utils@3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': + '@docusaurus/utils@3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)': dependencies: '@docusaurus/logger': 3.6.1 - '@docusaurus/types': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@docusaurus/utils-common': 3.6.1(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/types': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@docusaurus/utils-common': 3.6.1(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@svgr/webpack': 8.1.0(typescript@5.6.3) escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -14380,9 +15215,9 @@ snapshots: resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.8.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) utility-types: 3.11.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - '@swc/core' - acorn @@ -14595,6 +15430,36 @@ snapshots: dependencies: levn: 0.4.1 + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@google-cloud/vertexai@1.9.0(encoding@0.1.13)': dependencies: google-auth-library: 9.14.2(encoding@0.1.13) @@ -14640,7 +15505,7 @@ snapshots: debug: 4.3.7(supports-color@5.5.0) kolorist: 1.8.0 local-pkg: 0.5.0 - mlly: 1.7.3 + mlly: 1.7.2 transitivePeerDependencies: - supports-color @@ -14755,7 +15620,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -14769,7 +15634,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -14947,12 +15812,12 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@lerna/create@8.1.9(encoding@0.1.13)(typescript@5.6.3)': + '@lerna/create@8.1.9(@swc/core@1.9.2(@swc/helpers@0.5.13))(encoding@0.1.13)(typescript@5.6.3)': dependencies: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 20.1.0(nx@20.1.0) + '@nx/devkit': 20.0.8(nx@20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13))) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -14991,7 +15856,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 20.1.0 + nx: 20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13)) p-map: 4.0.0 p-map-series: 2.1.0 p-queue: 6.6.2 @@ -15100,10 +15965,6 @@ snapshots: dependencies: '@noble/hashes': 1.3.3 - '@noble/curves@1.4.2': - dependencies: - '@noble/hashes': 1.4.0 - '@noble/curves@1.6.0': dependencies: '@noble/hashes': 1.5.0 @@ -15112,8 +15973,6 @@ snapshots: '@noble/hashes@1.3.3': {} - '@noble/hashes@1.4.0': {} - '@noble/hashes@1.5.0': {} '@node-llama-cpp/linux-arm64@3.1.1': @@ -15291,51 +16150,51 @@ snapshots: - bluebird - supports-color - '@nx/devkit@20.1.0(nx@20.1.0)': + '@nx/devkit@20.0.8(nx@20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13)))': dependencies: ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 20.1.0 + nx: 20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13)) semver: 7.6.3 tmp: 0.2.3 tslib: 2.8.0 yargs-parser: 21.1.1 - '@nx/nx-darwin-arm64@20.1.0': + '@nx/nx-darwin-arm64@20.0.8': optional: true - '@nx/nx-darwin-x64@20.1.0': + '@nx/nx-darwin-x64@20.0.8': optional: true - '@nx/nx-freebsd-x64@20.1.0': + '@nx/nx-freebsd-x64@20.0.8': optional: true - '@nx/nx-linux-arm-gnueabihf@20.1.0': + '@nx/nx-linux-arm-gnueabihf@20.0.8': optional: true - '@nx/nx-linux-arm64-gnu@20.1.0': + '@nx/nx-linux-arm64-gnu@20.0.8': optional: true - '@nx/nx-linux-arm64-musl@20.1.0': + '@nx/nx-linux-arm64-musl@20.0.8': optional: true - '@nx/nx-linux-x64-gnu@20.1.0': + '@nx/nx-linux-x64-gnu@20.0.8': optional: true - '@nx/nx-linux-x64-musl@20.1.0': + '@nx/nx-linux-x64-musl@20.0.8': optional: true - '@nx/nx-win32-arm64-msvc@20.1.0': + '@nx/nx-win32-arm64-msvc@20.0.8': optional: true - '@nx/nx-win32-x64-msvc@20.1.0': + '@nx/nx-win32-x64-msvc@20.0.8': optional: true '@octokit/app@15.1.0': dependencies: - '@octokit/auth-app': 7.1.2 + '@octokit/auth-app': 7.1.1 '@octokit/auth-unauthenticated': 6.1.0 '@octokit/core': 6.1.2 '@octokit/oauth-app': 7.1.3 @@ -15343,14 +16202,14 @@ snapshots: '@octokit/types': 13.6.1 '@octokit/webhooks': 13.3.0 - '@octokit/auth-app@7.1.2': + '@octokit/auth-app@7.1.1': dependencies: '@octokit/auth-oauth-app': 8.1.1 '@octokit/auth-oauth-user': 5.1.1 '@octokit/request': 9.1.3 '@octokit/request-error': 6.1.5 '@octokit/types': 13.6.1 - lru-cache: '@wolfy1339/lru-cache@11.0.2-patch.1' + lru-cache: 10.4.3 universal-github-app-jwt: 2.2.0 universal-user-agent: 7.0.2 @@ -15681,6 +16540,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-slot@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + '@reflink/reflink-darwin-arm64@0.1.16': optional: true @@ -15753,11 +16625,11 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/plugin-json@6.1.0(rollup@4.26.0)': + '@rollup/plugin-json@6.1.0(rollup@4.25.0)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.26.0) + '@rollup/pluginutils': 5.1.3(rollup@4.25.0) optionalDependencies: - rollup: 4.26.0 + rollup: 4.25.0 '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': dependencies: @@ -15791,6 +16663,10 @@ snapshots: rollup: 2.79.2 tslib: 2.8.0 + '@rollup/plugin-virtual@3.0.2(rollup@4.25.0)': + optionalDependencies: + rollup: 4.25.0 + '@rollup/pluginutils@5.1.3(rollup@2.79.2)': dependencies: '@types/estree': 1.0.6 @@ -15799,69 +16675,69 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/pluginutils@5.1.3(rollup@4.26.0)': + '@rollup/pluginutils@5.1.3(rollup@4.25.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.26.0 + rollup: 4.25.0 - '@rollup/rollup-android-arm-eabi@4.26.0': + '@rollup/rollup-android-arm-eabi@4.25.0': optional: true - '@rollup/rollup-android-arm64@4.26.0': + '@rollup/rollup-android-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-arm64@4.26.0': + '@rollup/rollup-darwin-arm64@4.25.0': optional: true - '@rollup/rollup-darwin-x64@4.26.0': + '@rollup/rollup-darwin-x64@4.25.0': optional: true - '@rollup/rollup-freebsd-arm64@4.26.0': + '@rollup/rollup-freebsd-arm64@4.25.0': optional: true - '@rollup/rollup-freebsd-x64@4.26.0': + '@rollup/rollup-freebsd-x64@4.25.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + '@rollup/rollup-linux-arm-gnueabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.26.0': + '@rollup/rollup-linux-arm-musleabihf@4.25.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.26.0': + '@rollup/rollup-linux-arm64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.26.0': + '@rollup/rollup-linux-arm64-musl@4.25.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.26.0': + '@rollup/rollup-linux-riscv64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.26.0': + '@rollup/rollup-linux-s390x-gnu@4.25.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.26.0': + '@rollup/rollup-linux-x64-gnu@4.25.0': optional: true - '@rollup/rollup-linux-x64-musl@4.26.0': + '@rollup/rollup-linux-x64-musl@4.25.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.26.0': + '@rollup/rollup-win32-arm64-msvc@4.25.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.26.0': + '@rollup/rollup-win32-ia32-msvc@4.25.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.26.0': + '@rollup/rollup-win32-x64-msvc@4.25.0': optional: true - '@sapphire/async-queue@1.5.5': {} + '@sapphire/async-queue@1.5.4': {} '@sapphire/shapeshift@4.0.0': dependencies: @@ -15870,7 +16746,7 @@ snapshots: '@sapphire/snowflake@3.5.3': {} - '@sapphire/snowflake@3.5.5': {} + '@sapphire/snowflake@3.5.4': {} '@scure/base@1.1.9': {} @@ -15886,22 +16762,22 @@ snapshots: '@shikijs/core@1.22.2': dependencies: - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 hast-util-to-html: 9.0.3 '@shikijs/engine-javascript@1.22.2': dependencies: - '@shikijs/types': 1.23.1 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 oniguruma-to-js: 0.4.3 '@shikijs/engine-oniguruma@1.22.2': dependencies: - '@shikijs/types': 1.23.1 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@shikijs/types@1.22.2': @@ -16307,10 +17183,63 @@ snapshots: - supports-color - typescript - '@swc/helpers@0.5.15': + '@swc/core-darwin-arm64@1.9.2': + optional: true + + '@swc/core-darwin-x64@1.9.2': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.9.2': + optional: true + + '@swc/core-linux-arm64-gnu@1.9.2': + optional: true + + '@swc/core-linux-arm64-musl@1.9.2': + optional: true + + '@swc/core-linux-x64-gnu@1.9.2': + optional: true + + '@swc/core-linux-x64-musl@1.9.2': + optional: true + + '@swc/core-win32-arm64-msvc@1.9.2': + optional: true + + '@swc/core-win32-ia32-msvc@1.9.2': + optional: true + + '@swc/core-win32-x64-msvc@1.9.2': + optional: true + + '@swc/core@1.9.2(@swc/helpers@0.5.13)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.15 + optionalDependencies: + '@swc/core-darwin-arm64': 1.9.2 + '@swc/core-darwin-x64': 1.9.2 + '@swc/core-linux-arm-gnueabihf': 1.9.2 + '@swc/core-linux-arm64-gnu': 1.9.2 + '@swc/core-linux-arm64-musl': 1.9.2 + '@swc/core-linux-x64-gnu': 1.9.2 + '@swc/core-linux-x64-musl': 1.9.2 + '@swc/core-win32-arm64-msvc': 1.9.2 + '@swc/core-win32-ia32-msvc': 1.9.2 + '@swc/core-win32-x64-msvc': 1.9.2 + '@swc/helpers': 0.5.13 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.13': dependencies: tslib: 2.8.0 + '@swc/types@0.1.15': + dependencies: + '@swc/counter': 0.1.3 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -16548,14 +17477,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: '@types/node': 22.8.4 - '@types/qs': 6.9.17 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.1': dependencies: '@types/node': 22.8.4 - '@types/qs': 6.9.17 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -16563,14 +17492,14 @@ snapshots: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.17 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 5.0.1 - '@types/qs': 6.9.17 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 '@types/filesystem@0.0.36': @@ -16648,7 +17577,7 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node-fetch@2.6.12': + '@types/node-fetch@2.6.11': dependencies: '@types/node': 22.8.4 form-data: 4.0.1 @@ -16694,10 +17623,14 @@ snapshots: '@types/prop-types@15.7.13': {} - '@types/qs@6.9.17': {} + '@types/qs@6.9.16': {} '@types/range-parser@1.2.7': {} + '@types/react-dom@18.3.1': + dependencies: + '@types/react': 18.3.12 + '@types/react-router-config@5.0.11': dependencies: '@types/history': 4.7.11 @@ -16808,6 +17741,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/type-utils': 8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.15.0 + eslint: 9.13.0(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@typescript-eslint/scope-manager': 8.12.2 @@ -16821,11 +17772,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.15.0 + debug: 4.3.7(supports-color@5.5.0) + eslint: 9.13.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.12.2': dependencies: '@typescript-eslint/types': 8.12.2 '@typescript-eslint/visitor-keys': 8.12.2 + '@typescript-eslint/scope-manager@8.15.0': + dependencies: + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/visitor-keys': 8.15.0 + '@typescript-eslint/type-utils@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 8.12.2(typescript@5.6.3) @@ -16838,8 +17807,22 @@ snapshots: - eslint - supports-color + '@typescript-eslint/type-utils@8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + debug: 4.3.7(supports-color@5.5.0) + eslint: 9.13.0(jiti@1.21.6) + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.12.2': {} + '@typescript-eslint/types@8.15.0': {} + '@typescript-eslint/typescript-estree@8.12.2(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.12.2 @@ -16855,6 +17838,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.15.0(typescript@5.6.3)': + dependencies: + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/visitor-keys': 8.15.0 + debug: 4.3.7(supports-color@5.5.0) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.6.3) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.12.2(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@1.21.6)) @@ -16866,13 +17864,56 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.13.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3) + eslint: 9.13.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.12.2': dependencies: '@typescript-eslint/types': 8.12.2 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.15.0': + dependencies: + '@typescript-eslint/types': 8.15.0 + eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.2.0': {} + '@uniswap/sdk-core@4.2.1': + dependencies: + '@ethersproject/address': 5.7.0 + big.js: 5.2.2 + decimal.js-light: 2.5.1 + jsbi: 3.2.5 + tiny-invariant: 1.3.3 + toformat: 2.0.0 + + '@unruggable_starknet/core@0.1.0(starknet@6.18.0(encoding@0.1.13))': + dependencies: + '@uniswap/sdk-core': 4.2.1 + moment: 2.30.1 + starknet: 6.18.0(encoding@0.1.13) + + '@vitejs/plugin-react@4.3.3(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + transitivePeerDependencies: + - supports-color + '@vitest/expect@2.1.5': dependencies: '@vitest/spy': 2.1.5 @@ -16900,7 +17941,7 @@ snapshots: '@vitest/snapshot@2.1.5': dependencies: '@vitest/pretty-format': 2.1.5 - magic-string: 0.30.13 + magic-string: 0.30.12 pathe: 1.1.2 '@vitest/spy@2.1.5': @@ -16918,7 +17959,7 @@ snapshots: '@vue/compiler-core@3.5.12': dependencies: '@babel/parser': 7.26.2 - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -16931,10 +17972,10 @@ snapshots: '@vue/compiler-sfc@3.5.12': dependencies: '@babel/parser': 7.26.2 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 estree-walker: 2.0.2 magic-string: 0.30.12 postcss: 8.4.49 @@ -16956,9 +17997,9 @@ snapshots: '@vue/runtime-dom@3.5.12': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.12 + '@vue/runtime-core': 3.5.12 + '@vue/shared': 3.5.12 csstype: 3.1.3 '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': @@ -16969,91 +18010,89 @@ snapshots: '@vue/shared@3.5.12': {} - '@webassemblyjs/ast@1.14.1': + '@webassemblyjs/ast@1.12.1': dependencies: - '@webassemblyjs/helper-numbers': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} - '@webassemblyjs/helper-api-error@1.13.2': {} + '@webassemblyjs/helper-api-error@1.11.6': {} - '@webassemblyjs/helper-buffer@1.14.1': {} + '@webassemblyjs/helper-buffer@1.12.1': {} - '@webassemblyjs/helper-numbers@1.13.2': + '@webassemblyjs/helper-numbers@1.11.6': dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.13.2 - '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} - '@webassemblyjs/helper-wasm-section@1.14.1': + '@webassemblyjs/helper-wasm-section@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/ieee754@1.13.2': + '@webassemblyjs/ieee754@1.11.6': dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.13.2': + '@webassemblyjs/leb128@1.11.6': dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.13.2': {} + '@webassemblyjs/utf8@1.11.6': {} - '@webassemblyjs/wasm-edit@1.14.1': + '@webassemblyjs/wasm-edit@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/helper-wasm-section': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-opt': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wast-printer': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 - '@webassemblyjs/wasm-gen@1.14.1': + '@webassemblyjs/wasm-gen@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 - '@webassemblyjs/wasm-opt@1.14.1': + '@webassemblyjs/wasm-opt@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-buffer': 1.14.1 - '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wasm-parser@1.14.1': + '@webassemblyjs/wasm-parser@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/helper-api-error': 1.13.2 - '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/ieee754': 1.13.2 - '@webassemblyjs/leb128': 1.13.2 - '@webassemblyjs/utf8': 1.13.2 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 - '@webassemblyjs/wast-printer@1.14.1': + '@webassemblyjs/wast-printer@1.12.1': dependencies: - '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@wolfy1339/lru-cache@11.0.2-patch.1': {} - '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} '@yarnpkg/lockfile@1.1.0': {} - '@yarnpkg/parsers@3.0.2': + '@yarnpkg/parsers@3.0.0-rc.46': dependencies: js-yaml: 3.14.1 tslib: 2.8.0 @@ -17124,7 +18163,7 @@ snapshots: '@sinclair/typebox': 0.32.35 headers-polyfill: 3.3.0 json-stable-stringify: 1.1.1 - otpauth: 9.3.5 + otpauth: 9.3.4 set-cookie-parser: 2.7.1 tough-cookie: 4.1.4 tslib: 2.8.0 @@ -17138,13 +18177,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.2.0)(sswr@2.1.0(svelte@5.1.16))(svelte@5.1.16)(vue@3.5.12(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.1.9))(svelte@5.1.9)(vue@3.5.12(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.1.16)(zod@3.23.8) + '@ai-sdk/svelte': 0.0.57(svelte@5.1.9)(zod@3.23.8) '@ai-sdk/ui-utils': 0.0.50(zod@3.23.8) '@ai-sdk/vue': 0.0.59(vue@3.5.12(typescript@5.6.3))(zod@3.23.8) '@opentelemetry/api': 1.9.0 @@ -17155,9 +18194,9 @@ snapshots: zod-to-json-schema: 3.23.5(zod@3.23.8) optionalDependencies: openai: 4.69.0(encoding@0.1.13)(zod@3.23.8) - react: 18.2.0 - sswr: 2.1.0(svelte@5.1.16) - svelte: 5.1.16 + react: 18.3.1 + sswr: 2.1.0(svelte@5.1.9) + svelte: 5.1.9 zod: 3.23.8 transitivePeerDependencies: - solid-js @@ -17215,21 +18254,21 @@ snapshots: '@algolia/requester-node-http': 4.24.0 '@algolia/transporter': 4.24.0 - algoliasearch@5.13.0: - dependencies: - '@algolia/client-abtesting': 5.13.0 - '@algolia/client-analytics': 5.13.0 - '@algolia/client-common': 5.13.0 - '@algolia/client-insights': 5.13.0 - '@algolia/client-personalization': 5.13.0 - '@algolia/client-query-suggestions': 5.13.0 - '@algolia/client-search': 5.13.0 - '@algolia/ingestion': 1.13.0 - '@algolia/monitoring': 1.13.0 - '@algolia/recommend': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 + algoliasearch@5.12.0: + dependencies: + '@algolia/client-abtesting': 5.12.0 + '@algolia/client-analytics': 5.12.0 + '@algolia/client-common': 5.12.0 + '@algolia/client-insights': 5.12.0 + '@algolia/client-personalization': 5.12.0 + '@algolia/client-query-suggestions': 5.12.0 + '@algolia/client-search': 5.12.0 + '@algolia/ingestion': 1.12.0 + '@algolia/monitoring': 1.12.0 + '@algolia/recommend': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 amp-message@0.1.2: dependencies: @@ -17365,7 +18404,7 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001677 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -17408,12 +18447,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) babel-plugin-dynamic-import-node@2.3.3: dependencies: @@ -17436,11 +18475,11 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0): dependencies: '@babel/compat-data': 7.26.2 '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -17448,15 +18487,15 @@ snapshots: babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): dependencies: '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) core-js-compat: 3.39.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0): dependencies: '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -17511,7 +18550,7 @@ snapshots: bare-stream@2.3.2: dependencies: - streamx: 2.20.2 + streamx: 2.20.1 optional: true base-x@3.0.10: @@ -17656,8 +18695,8 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001680 - electron-to-chromium: 1.5.57 + caniuse-lite: 1.0.30001677 + electron-to-chromium: 1.5.51 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -17706,7 +18745,7 @@ snapshots: bufferutil@4.0.8: dependencies: - node-gyp-build: 4.8.3 + node-gyp-build: 4.8.2 optional: true bundle-require@5.0.0(esbuild@0.24.0): @@ -17768,6 +18807,8 @@ snapshots: pascal-case: 3.1.2 tslib: 2.8.0 + camelcase-css@2.0.1: {} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 @@ -17783,11 +18824,11 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001677 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001680: {} + caniuse-lite@1.0.30001677: {} canvas@2.11.2(encoding@0.1.13): dependencies: @@ -17922,10 +18963,14 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.1.0: {} + ci-info@4.0.0: {} cjs-module-lexer@1.4.1: {} + class-variance-authority@0.7.0: + dependencies: + clsx: 2.0.0 + cldr-segmentation@2.2.1: dependencies: utfstring: 2.0.2 @@ -18001,6 +19046,8 @@ snapshots: clsx@1.2.1: {} + clsx@2.0.0: {} + clsx@2.1.0: {} cmake-js@7.3.0: @@ -18234,7 +19281,7 @@ snapshots: copy-text-to-clipboard@3.2.0: {} - copy-webpack-plugin@11.0.0(webpack@5.96.1): + copy-webpack-plugin@11.0.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -18242,7 +19289,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) core-js-compat@3.39.0: dependencies: @@ -18302,13 +19349,13 @@ snapshots: optionalDependencies: typescript: 5.6.3 - create-jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)): + create-jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -18323,7 +19370,7 @@ snapshots: cross-env@7.0.3: dependencies: - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 cross-fetch@3.1.5(encoding@0.1.13): dependencies: @@ -18337,7 +19384,7 @@ snapshots: transitivePeerDependencies: - encoding - cross-spawn@7.0.5: + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -18353,20 +19400,20 @@ snapshots: dependencies: postcss: 8.4.49 - css-loader@6.11.0(webpack@5.96.1): + css-loader@6.11.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.49) - postcss-modules-scope: 3.2.1(postcss@8.4.49) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.49) + postcss-modules-scope: 3.2.0(postcss@8.4.49) postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.96.1): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 6.1.2(postcss@8.4.49) @@ -18374,7 +19421,7 @@ snapshots: postcss: 8.4.49 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) optionalDependencies: clean-css: 5.3.3 @@ -18727,6 +19774,8 @@ snapshots: decamelize@1.2.0: {} + decimal.js-light@2.5.1: {} + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -18839,6 +19888,8 @@ snapshots: devtools-protocol@0.0.1107588: {} + didyoumean@1.2.2: {} + diff-match-patch@1.0.5: {} diff-sequences@29.6.3: {} @@ -18875,13 +19926,15 @@ snapshots: - bufferutil - utf-8-validate + dlv@1.1.3: {} + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 - docusaurus-lunr-search@3.5.0(@docusaurus/core@3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + docusaurus-lunr-search@3.5.0(@docusaurus/core@3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10))(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - '@docusaurus/core': 3.6.1(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.2.0))(@swc/core@1.9.2(@swc/helpers@0.5.13))(acorn@8.14.0)(bufferutil@4.0.8)(eslint@9.13.0(jiti@1.21.6))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(typescript@5.6.3)(utf-8-validate@5.0.10) autocomplete.js: 0.37.1 clsx: 1.2.1 gauge: 3.0.2 @@ -18983,7 +20036,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.57: {} + electron-to-chromium@1.5.51: {} emittery@0.13.1: {} @@ -19183,6 +20236,14 @@ snapshots: '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.0(eslint@9.13.0(jiti@1.21.6)) + eslint-plugin-react-hooks@5.0.0(eslint@9.13.0(jiti@1.21.6)): + dependencies: + eslint: 9.13.0(jiti@1.21.6) + + eslint-plugin-react-refresh@0.4.14(eslint@9.13.0(jiti@1.21.6)): + dependencies: + eslint: 9.13.0(jiti@1.21.6) + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -19203,9 +20264,9 @@ snapshots: '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.7.0 - '@eslint/eslintrc': 3.2.0 + '@eslint/eslintrc': 3.1.0 '@eslint/js': 9.13.0 - '@eslint/plugin-kit': 0.2.3 + '@eslint/plugin-kit': 0.2.2 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.1 @@ -19213,7 +20274,7 @@ snapshots: '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 debug: 4.3.7(supports-color@5.5.0) escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 @@ -19363,10 +20424,10 @@ snapshots: execa@5.0.0: dependencies: - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 get-stream: 6.0.0 human-signals: 2.1.0 - is-stream: 2.0.0 + is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -19375,7 +20436,7 @@ snapshots: execa@5.1.1: dependencies: - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -19387,7 +20448,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -19467,7 +20528,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -19570,11 +20631,11 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@5.96.1): + file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) file-uri-to-path@1.0.0: {} @@ -19641,7 +20702,7 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.2 + flatted: 3.3.1 keyv: 4.5.4 flat@5.0.2: {} @@ -19669,12 +20730,12 @@ snapshots: foreground-child@3.3.0: dependencies: - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 signal-exit: 4.1.0 forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@babel/code-frame': 7.26.2 '@types/json-schema': 7.0.15 @@ -19690,7 +20751,7 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.3 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) optionalDependencies: eslint: 9.13.0(jiti@1.21.6) @@ -19855,10 +20916,6 @@ snapshots: get-port@5.1.1: {} - get-starknet-core@4.0.0: - dependencies: - '@starknet-io/types-js': 0.7.7 - get-stream@5.2.0: dependencies: pump: 3.0.2 @@ -20001,6 +21058,8 @@ snapshots: globals@14.0.0: {} + globals@15.12.0: {} + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -20352,7 +21411,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.96.1): + html-webpack-plugin@5.6.3(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -20360,7 +21419,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) htmlparser2@6.1.0: dependencies: @@ -20588,12 +21647,12 @@ snapshots: ipaddr.js@2.2.0: {} - ipull@3.9.2: + ipull@3.9.1: dependencies: '@tinyhttp/content-disposition': 2.2.2 async-retry: 1.3.3 chalk: 5.3.0 - ci-info: 4.1.0 + ci-info: 4.0.0 cli-spinners: 2.9.2 commander: 10.0.1 eventemitter3: 5.0.1 @@ -20708,7 +21767,7 @@ snapshots: dependencies: '@types/estree': 1.0.6 - is-reference@3.0.3: + is-reference@3.0.2: dependencies: '@types/estree': 1.0.6 @@ -20879,16 +21938,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)): + jest-cli@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + create-jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + jest-config: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -20898,7 +21957,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)): + jest-config@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -20924,14 +21983,14 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 22.8.4 - ts-node: 10.9.2(@types/node@22.8.4)(typescript@5.6.3) + ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3) transitivePeerDependencies: - babel-plugin-macros - supports-color jest-diff@29.7.0: dependencies: - chalk: 4.1.0 + chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 @@ -21150,12 +22209,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)): + jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + jest-cli: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -21187,6 +22246,8 @@ snapshots: js-sha1@0.7.0: {} + js-sha3@0.8.0: {} + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -21198,6 +22259,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbi@3.2.5: {} + jsbn@0.1.1: {} jsbn@1.1.0: {} @@ -21336,13 +22399,13 @@ snapshots: leac@0.6.0: {} - lerna@8.1.9(encoding@0.1.13): + lerna@8.1.9(@swc/core@1.9.2(@swc/helpers@0.5.13))(encoding@0.1.13): dependencies: - '@lerna/create': 8.1.9(encoding@0.1.13)(typescript@5.6.3) + '@lerna/create': 8.1.9(@swc/core@1.9.2(@swc/helpers@0.5.13))(encoding@0.1.13)(typescript@5.6.3) '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 20.1.0(nx@20.1.0) + '@nx/devkit': 20.0.8(nx@20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13))) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -21387,7 +22450,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 20.1.0 + nx: 20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13)) p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -21444,7 +22507,7 @@ snapshots: libnpmpublish@9.0.9: dependencies: - ci-info: 4.1.0 + ci-info: 4.0.0 normalize-package-data: 6.0.2 npm-package-arg: 11.0.2 npm-registry-fetch: 17.1.0 @@ -21463,6 +22526,8 @@ snapshots: lifecycle-utils@1.7.0: {} + lilconfig@2.1.0: {} + lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -21525,7 +22590,7 @@ snapshots: local-pkg@0.5.0: dependencies: - mlly: 1.7.3 + mlly: 1.7.2 pkg-types: 1.2.1 locate-character@3.0.0: {} @@ -21635,6 +22700,10 @@ snapshots: dependencies: es5-ext: 0.10.64 + lucide-react@0.460.0(react@18.3.1): + dependencies: + react: 18.3.1 + lunr-languages@1.14.0: {} lunr@2.3.9: {} @@ -21733,12 +22802,12 @@ snapshots: decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color @@ -21760,7 +22829,7 @@ snapshots: ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.1 - micromark-util-character: 2.1.1 + micromark-util-character: 2.1.0 mdast-util-gfm-footnote@2.0.0: dependencies: @@ -21768,7 +22837,7 @@ snapshots: devlop: 1.1.0 mdast-util-from-markdown: 2.0.2 mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 + micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: - supports-color @@ -21871,7 +22940,7 @@ snapshots: '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 + micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 @@ -21884,8 +22953,8 @@ snapshots: longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 + micromark-util-classify-character: 2.0.0 + micromark-util-decode-string: 2.0.0 unist-util-visit: 5.0.0 zwitch: 2.0.4 @@ -21974,88 +23043,88 @@ snapshots: methods@1.1.2: {} - micromark-core-commonmark@2.0.2: + micromark-core-commonmark@2.0.1: dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.0.2 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-directive@3.0.2: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 parse-entities: 4.0.1 micromark-extension-frontmatter@2.0.0: dependencies: fault: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm-autolink-literal@2.1.0: dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.2 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm-table@2.1.0: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm-tagfilter@2.0.0: dependencies: - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.0 micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-gfm@3.0.0: dependencies: @@ -22065,19 +23134,19 @@ snapshots: micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-mdx-expression@3.0.0: dependencies: '@types/estree': 1.0.6 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.2 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-extension-mdx-jsx@3.0.1: dependencies: @@ -22086,26 +23155,26 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.2 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 vfile-message: 4.0.2 micromark-extension-mdx-md@2.0.0: dependencies: - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.0 micromark-extension-mdxjs-esm@3.0.0: dependencies: '@types/estree': 1.0.6 devlop: 1.1.0 - micromark-core-commonmark: 2.0.2 - micromark-util-character: 2.1.1 + micromark-core-commonmark: 2.0.1 + micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 @@ -22117,31 +23186,31 @@ snapshots: micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 - micromark-factory-destination@2.0.1: + micromark-factory-destination@2.0.0: dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-factory-label@2.0.1: + micromark-factory-label@2.0.0: dependencies: devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-factory-mdx-expression@2.0.2: dependencies: '@types/estree': 1.0.6 devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 @@ -22150,62 +23219,62 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 - micromark-factory-space@2.0.1: + micromark-factory-space@2.0.0: dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 - micromark-factory-title@2.0.1: + micromark-factory-title@2.0.0: dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-factory-whitespace@2.0.1: + micromark-factory-whitespace@2.0.0: dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-util-character@1.2.0: dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-character@2.1.1: + micromark-util-character@2.1.0: dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-chunked@2.0.1: + micromark-util-chunked@2.0.0: dependencies: - micromark-util-symbol: 2.0.1 + micromark-util-symbol: 2.0.0 - micromark-util-classify-character@2.0.1: + micromark-util-classify-character@2.0.0: dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-combine-extensions@2.0.1: + micromark-util-combine-extensions@2.0.0: dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-decode-numeric-character-reference@2.0.2: + micromark-util-decode-numeric-character-reference@2.0.1: dependencies: - micromark-util-symbol: 2.0.1 + micromark-util-symbol: 2.0.0 - micromark-util-decode-string@2.0.1: + micromark-util-decode-string@2.0.0: dependencies: decode-named-character-reference: 1.0.2 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 - micromark-util-encode@2.0.1: {} + micromark-util-encode@2.0.0: {} micromark-util-events-to-acorn@2.0.2: dependencies: @@ -22214,60 +23283,60 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 vfile-message: 4.0.2 - micromark-util-html-tag-name@2.0.1: {} + micromark-util-html-tag-name@2.0.0: {} - micromark-util-normalize-identifier@2.0.1: + micromark-util-normalize-identifier@2.0.0: dependencies: - micromark-util-symbol: 2.0.1 + micromark-util-symbol: 2.0.0 - micromark-util-resolve-all@2.0.1: + micromark-util-resolve-all@2.0.0: dependencies: - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.0 - micromark-util-sanitize-uri@2.0.1: + micromark-util-sanitize-uri@2.0.0: dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 - micromark-util-subtokenize@2.0.2: + micromark-util-subtokenize@2.0.1: dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 micromark-util-symbol@1.1.0: {} - micromark-util-symbol@2.0.1: {} + micromark-util-symbol@2.0.0: {} micromark-util-types@1.1.0: {} - micromark-util-types@2.0.1: {} + micromark-util-types@2.0.0: {} - micromark@4.0.1: + micromark@4.0.0: dependencies: '@types/debug': 4.1.12 debug: 4.3.7(supports-color@5.5.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.2 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.0.2 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.1 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 transitivePeerDependencies: - supports-color @@ -22307,11 +23376,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.2(webpack@5.96.1): + mini-css-extract-plugin@2.9.2(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) minimalistic-assert@1.0.1: {} @@ -22414,7 +23483,7 @@ snapshots: mkdirp@3.0.1: {} - mlly@1.7.3: + mlly@1.7.2: dependencies: acorn: 8.14.0 pathe: 1.1.2 @@ -22425,6 +23494,8 @@ snapshots: module-details-from-path@1.0.3: {} + moment@2.30.1: {} + mri@1.2.0: {} mrmime@2.0.0: {} @@ -22458,7 +23529,7 @@ snapshots: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 mute-stream@0.0.8: {} @@ -22526,7 +23597,7 @@ snapshots: node-addon-api@6.1.0: {} - node-addon-api@8.2.2: {} + node-addon-api@8.2.1: {} node-api-headers@1.4.0: {} @@ -22559,7 +23630,7 @@ snapshots: node-forge@1.3.1: {} - node-gyp-build@4.8.3: + node-gyp-build@4.8.2: optional: true node-gyp@10.2.0: @@ -22588,20 +23659,20 @@ snapshots: chmodrp: 1.0.2 cmake-js: 7.3.0 cross-env: 7.0.3 - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 env-var: 7.5.0 filenamify: 6.0.0 fs-extra: 11.2.0 ignore: 5.3.2 - ipull: 3.9.2 + ipull: 3.9.1 is-unicode-supported: 2.1.0 lifecycle-utils: 1.7.0 log-symbols: 7.0.0 nanoid: 5.0.8 - node-addon-api: 8.2.2 + node-addon-api: 8.2.1 octokit: 4.0.2 ora: 8.1.1 - pretty-ms: 9.2.0 + pretty-ms: 9.1.0 proper-lockfile: 4.1.2 semver: 7.6.3 simple-git: 3.27.0 @@ -22763,25 +23834,25 @@ snapshots: dependencies: boolbase: 1.0.0 - null-loader@4.0.1(webpack@5.96.1): + null-loader@4.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) - nx@20.1.0: + nx@20.0.8(@swc/core@1.9.2(@swc/helpers@0.5.13)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 - '@yarnpkg/parsers': 3.0.2 + '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 axios: 1.7.7(debug@4.3.7) - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 8.0.1 dotenv: 16.4.5 - dotenv-expand: 11.0.7 + dotenv-expand: 11.0.6 enquirer: 2.3.6 figures: 3.2.0 flat: 5.0.2 @@ -22804,16 +23875,17 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 20.1.0 - '@nx/nx-darwin-x64': 20.1.0 - '@nx/nx-freebsd-x64': 20.1.0 - '@nx/nx-linux-arm-gnueabihf': 20.1.0 - '@nx/nx-linux-arm64-gnu': 20.1.0 - '@nx/nx-linux-arm64-musl': 20.1.0 - '@nx/nx-linux-x64-gnu': 20.1.0 - '@nx/nx-linux-x64-musl': 20.1.0 - '@nx/nx-win32-arm64-msvc': 20.1.0 - '@nx/nx-win32-x64-msvc': 20.1.0 + '@nx/nx-darwin-arm64': 20.0.8 + '@nx/nx-darwin-x64': 20.0.8 + '@nx/nx-freebsd-x64': 20.0.8 + '@nx/nx-linux-arm-gnueabihf': 20.0.8 + '@nx/nx-linux-arm64-gnu': 20.0.8 + '@nx/nx-linux-arm64-musl': 20.0.8 + '@nx/nx-linux-x64-gnu': 20.0.8 + '@nx/nx-linux-x64-musl': 20.0.8 + '@nx/nx-win32-arm64-msvc': 20.0.8 + '@nx/nx-win32-x64-msvc': 20.0.8 + '@swc/core': 1.9.2(@swc/helpers@0.5.13) transitivePeerDependencies: - debug @@ -22821,7 +23893,9 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.3: {} + object-hash@3.0.0: {} + + object-inspect@1.13.2: {} object-keys@1.1.1: {} @@ -22914,7 +23988,7 @@ snapshots: openai@4.69.0(encoding@0.1.13)(zod@3.23.8): dependencies: '@types/node': 18.19.64 - '@types/node-fetch': 2.6.12 + '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 form-data-encoder: 1.7.2 @@ -22941,9 +24015,9 @@ snapshots: ora@5.3.0: dependencies: bl: 4.1.0 - chalk: 4.1.0 + chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -23236,7 +24310,7 @@ snapshots: path-type@4.0.0: {} - path2d@0.2.2: + path2d@0.2.1: optional: true pathe@1.1.2: {} @@ -23246,7 +24320,7 @@ snapshots: pdfjs-dist@4.7.76(encoding@0.1.13): optionalDependencies: canvas: 2.11.2(encoding@0.1.13) - path2d: 0.2.2 + path2d: 0.2.1 transitivePeerDependencies: - encoding - supports-color @@ -23330,7 +24404,7 @@ snapshots: pkg-types@1.2.1: dependencies: confbox: 0.1.8 - mlly: 1.7.3 + mlly: 1.7.2 pathe: 1.1.2 pkg-up@3.1.0: @@ -23472,6 +24546,26 @@ snapshots: postcss: 8.4.49 postcss-selector-parser: 6.1.2 + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)): + dependencies: + lilconfig: 3.1.2 + yaml: 2.6.0 + optionalDependencies: + postcss: 8.4.49 + ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3) + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.49)(yaml@2.6.0): dependencies: lilconfig: 3.1.2 @@ -23480,13 +24574,13 @@ snapshots: postcss: 8.4.49 yaml: 2.6.0 - postcss-loader@7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1): + postcss-loader@7.3.4(postcss@8.4.49)(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: cosmiconfig: 8.3.6(typescript@5.6.3) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - typescript @@ -23538,23 +24632,28 @@ snapshots: dependencies: postcss: 8.4.49 - postcss-modules-local-by-default@4.1.0(postcss@8.4.49): + postcss-modules-local-by-default@4.0.5(postcss@8.4.49): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.4.49): + postcss-modules-scope@3.2.0(postcss@8.4.49): dependencies: postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + postcss-selector-parser: 6.1.2 postcss-modules-values@4.0.0(postcss@8.4.49): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + postcss-normalize-charset@6.0.2(postcss@8.4.49): dependencies: postcss: 8.4.49 @@ -23627,11 +24726,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.0.0: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - postcss-sort-media-queries@5.2.0(postcss@8.4.49): dependencies: postcss: 8.4.49 @@ -23822,9 +24916,7 @@ snapshots: proxy-from-env@1.1.0: {} - psl@1.10.0: - dependencies: - punycode: 2.3.1 + psl@1.9.0: {} pstree.remy@1.1.8: {} @@ -23833,10 +24925,10 @@ 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@4.26.0)(typescript@5.6.3)(utf-8-validate@5.0.10): + pumpdotfun-sdk@1.3.2(bufferutil@4.0.8)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(rollup@4.25.0)(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@4.26.0) + '@rollup/plugin-json': 6.1.0(rollup@4.25.0) '@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: @@ -23974,18 +25066,18 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1): + react-dev-utils@12.0.1(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@babel/code-frame': 7.26.2 address: 1.2.2 browserslist: 4.24.2 chalk: 4.1.2 - cross-spawn: 7.0.5 + cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -24000,7 +25092,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -24014,6 +25106,12 @@ snapshots: react: 18.2.0 scheduler: 0.23.2 + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react-error-overlay@6.0.11: {} react-fast-compare@3.2.2: {} @@ -24043,11 +25141,13 @@ snapshots: dependencies: react: 18.2.0 - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.96.1): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.2.0))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@babel/runtime': 7.26.0 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.2.0)' - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) + + react-refresh@0.14.2: {} react-router-config@5.1.1(react-router@5.3.4(react@18.2.0))(react@18.2.0): dependencies: @@ -24103,6 +25203,14 @@ snapshots: dependencies: loose-envify: 1.4.0 + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + read-cmd-shim@4.0.0: {} read-package-json-fast@3.0.2: @@ -24276,7 +25384,7 @@ snapshots: rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 + hast-util-raw: 9.0.4 vfile: 6.0.3 rehype-recma@1.0.0: @@ -24337,7 +25445,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.1 + micromark-util-types: 2.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color @@ -24470,28 +25578,28 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.26.0: + rollup@4.25.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.26.0 - '@rollup/rollup-android-arm64': 4.26.0 - '@rollup/rollup-darwin-arm64': 4.26.0 - '@rollup/rollup-darwin-x64': 4.26.0 - '@rollup/rollup-freebsd-arm64': 4.26.0 - '@rollup/rollup-freebsd-x64': 4.26.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 - '@rollup/rollup-linux-arm-musleabihf': 4.26.0 - '@rollup/rollup-linux-arm64-gnu': 4.26.0 - '@rollup/rollup-linux-arm64-musl': 4.26.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 - '@rollup/rollup-linux-riscv64-gnu': 4.26.0 - '@rollup/rollup-linux-s390x-gnu': 4.26.0 - '@rollup/rollup-linux-x64-gnu': 4.26.0 - '@rollup/rollup-linux-x64-musl': 4.26.0 - '@rollup/rollup-win32-arm64-msvc': 4.26.0 - '@rollup/rollup-win32-ia32-msvc': 4.26.0 - '@rollup/rollup-win32-x64-msvc': 4.26.0 + '@rollup/rollup-android-arm-eabi': 4.25.0 + '@rollup/rollup-android-arm64': 4.25.0 + '@rollup/rollup-darwin-arm64': 4.25.0 + '@rollup/rollup-darwin-x64': 4.25.0 + '@rollup/rollup-freebsd-arm64': 4.25.0 + '@rollup/rollup-freebsd-x64': 4.25.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.25.0 + '@rollup/rollup-linux-arm-musleabihf': 4.25.0 + '@rollup/rollup-linux-arm64-gnu': 4.25.0 + '@rollup/rollup-linux-arm64-musl': 4.25.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0 + '@rollup/rollup-linux-riscv64-gnu': 4.25.0 + '@rollup/rollup-linux-s390x-gnu': 4.25.0 + '@rollup/rollup-linux-x64-gnu': 4.25.0 + '@rollup/rollup-linux-x64-musl': 4.25.0 + '@rollup/rollup-win32-arm64-msvc': 4.25.0 + '@rollup/rollup-win32-ia32-msvc': 4.25.0 + '@rollup/rollup-win32-x64-msvc': 4.25.0 fsevents: 2.3.3 roughjs@4.6.6: @@ -24503,7 +25611,7 @@ snapshots: rpc-websockets@9.0.4: dependencies: - '@swc/helpers': 0.5.15 + '@swc/helpers': 0.5.13 '@types/uuid': 8.3.4 '@types/ws': 8.5.13 buffer: 6.0.3 @@ -24760,10 +25868,10 @@ snapshots: shiki@1.22.2: dependencies: - '@shikijs/core': 1.23.1 - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 + '@shikijs/core': 1.22.2 + '@shikijs/engine-javascript': 1.22.2 + '@shikijs/engine-oniguruma': 1.22.2 + '@shikijs/types': 1.22.2 '@shikijs/vscode-textmate': 9.3.0 '@types/hast': 3.0.4 @@ -24774,7 +25882,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.3 + object-inspect: 1.13.2 siginfo@2.0.0: {} @@ -25009,9 +26117,9 @@ snapshots: dependencies: minipass: 7.1.2 - sswr@2.1.0(svelte@5.1.16): + sswr@2.1.0(svelte@5.1.9): dependencies: - svelte: 5.1.16 + svelte: 5.1.9 swrev: 4.0.0 stack-utils@2.0.6: @@ -25020,7 +26128,7 @@ snapshots: stackback@0.0.2: {} - starknet@6.11.0(encoding@0.1.13): + starknet@6.18.0(encoding@0.1.13): dependencies: '@noble/curves': 1.3.0 '@noble/hashes': 1.3.3 @@ -25028,7 +26136,6 @@ snapshots: '@scure/starknet': 1.0.0 abi-wan-kanabi: 2.2.3 fetch-cookie: 3.0.1 - get-starknet-core: 4.0.0 isomorphic-fetch: 3.0.0(encoding@0.1.13) lossless-json: 4.0.2 pako: 2.1.0 @@ -25041,6 +26148,8 @@ snapshots: statuses@2.0.1: {} + std-env@3.7.0: {} + std-env@3.8.0: {} stdin-discarder@0.2.2: {} @@ -25062,7 +26171,7 @@ snapshots: streamsearch@1.1.0: {} - streamx@2.20.2: + streamx@2.20.1: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -25197,7 +26306,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.1.16: + svelte@5.1.9: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -25208,9 +26317,9 @@ snapshots: axobject-query: 4.1.0 esm-env: 1.1.4 esrap: 1.2.2 - is-reference: 3.0.3 + is-reference: 3.0.2 locate-character: 3.0.0 - magic-string: 0.30.13 + magic-string: 0.30.12 zimmerframe: 1.1.2 svg-parser@2.0.4: {} @@ -25225,11 +26334,11 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 - swr@2.2.5(react@18.2.0): + swr@2.2.5(react@18.3.1): dependencies: client-only: 0.0.1 - react: 18.2.0 - use-sync-external-store: 1.2.2(react@18.2.0) + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) swrev@4.0.0: {} @@ -25244,6 +26353,39 @@ snapshots: systeminformation@5.23.5: {} + tailwind-merge@2.5.4: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3))): + dependencies: + tailwindcss: 3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) + + tailwindcss@3.4.15(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + tapable@1.1.3: {} tapable@2.2.1: {} @@ -25275,7 +26417,7 @@ snapshots: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.20.2 + streamx: 2.20.1 tar@6.2.1: dependencies: @@ -25311,16 +26453,16 @@ snapshots: temp-dir@1.0.0: {} - terser-webpack-plugin@5.3.10(webpack@5.96.1): + terser-webpack-plugin@5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.13))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.36.0 - webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15)) + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) optionalDependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.15) + '@swc/core': 1.9.2(@swc/helpers@0.5.13) terser@5.36.0: dependencies: @@ -25396,11 +26538,11 @@ snapshots: tinyspy@3.0.2: {} - tldts-core@6.1.61: {} + tldts-core@6.1.58: {} - tldts-experimental@6.1.61: + tldts-experimental@6.1.58: dependencies: - tldts-core: 6.1.61 + tldts-core: 6.1.58 tmp@0.0.33: dependencies: @@ -25419,10 +26561,12 @@ snapshots: is-buffer: 2.0.5 vfile: 4.2.1 + toformat@2.0.0: {} + together-ai@0.7.0(encoding@0.1.13): dependencies: '@types/node': 18.19.64 - '@types/node-fetch': 2.6.12 + '@types/node-fetch': 2.6.11 abort-controller: 3.0.0 agentkeepalive: 4.5.0 form-data-encoder: 1.7.2 @@ -25441,12 +26585,12 @@ snapshots: tough-cookie@2.5.0: dependencies: - psl: 1.10.0 + psl: 1.9.0 punycode: 2.3.1 tough-cookie@4.1.4: dependencies: - psl: 1.10.0 + psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 @@ -25477,12 +26621,12 @@ 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))(jest@29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@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.13))(@types/node@22.8.4)(typescript@5.6.3)))(typescript@5.6.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3)) + jest: 29.7.0(@types/node@22.8.4)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -25498,7 +26642,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@types/node@22.8.4)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.13))(@types/node@22.8.4)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -25515,6 +26659,8 @@ snapshots: typescript: 5.6.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.9.2(@swc/helpers@0.5.13) tsconfig-paths@4.2.0: dependencies: @@ -25528,7 +26674,7 @@ snapshots: tslib@2.8.0: {} - tsup@8.3.5(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0): + tsup@8.3.5(@swc/core@1.9.2(@swc/helpers@0.5.13))(jiti@1.21.6)(postcss@8.4.49)(typescript@5.6.3)(yaml@2.6.0): dependencies: bundle-require: 5.0.0(esbuild@0.24.0) cac: 6.7.14 @@ -25540,13 +26686,14 @@ snapshots: picocolors: 1.1.1 postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.49)(yaml@2.6.0) resolve-from: 5.0.0 - rollup: 4.26.0 + rollup: 4.25.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.1 tinyglobby: 0.2.10 tree-kill: 1.2.2 optionalDependencies: + '@swc/core': 1.9.2(@swc/helpers@0.5.13) postcss: 8.4.49 typescript: 5.6.3 transitivePeerDependencies: @@ -25618,10 +26765,21 @@ snapshots: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.23.1 + shiki: 1.22.2 typescript: 5.6.3 yaml: 2.6.0 + typescript-eslint@8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/parser': 8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.15.0(eslint@9.13.0(jiti@1.21.6))(typescript@5.6.3) + eslint: 9.13.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + typescript@5.6.3: {} uc.micro@2.1.0: {} @@ -25784,27 +26942,27 @@ snapshots: url-join@4.0.1: {} - url-loader@4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) optionalDependencies: - file-loader: 6.2.0(webpack@5.96.1) + file-loader: 6.2.0(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) url-parse@1.5.10: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - use-sync-external-store@1.2.2(react@18.2.0): + use-sync-external-store@1.2.2(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 utf-8-validate@5.0.10: dependencies: - node-gyp-build: 4.8.3 + node-gyp-build: 4.8.2 optional: true utfstring@2.0.2: {} @@ -25899,11 +27057,25 @@ snapshots: - supports-color - terser + vite-plugin-top-level-await@1.4.4(@swc/helpers@0.5.13)(rollup@4.25.0)(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)): + dependencies: + '@rollup/plugin-virtual': 3.0.2(rollup@4.25.0) + '@swc/core': 1.9.2(@swc/helpers@0.5.13) + uuid: 10.0.0 + vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + transitivePeerDependencies: + - '@swc/helpers' + - rollup + + vite-plugin-wasm@3.3.0(vite@5.4.11(@types/node@22.8.4)(terser@5.36.0)): + dependencies: + vite: 5.4.11(@types/node@22.8.4)(terser@5.36.0) + vite@5.4.11(@types/node@22.8.4)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.26.0 + rollup: 4.25.0 optionalDependencies: '@types/node': 22.8.4 fsevents: 2.3.3 @@ -25921,7 +27093,7 @@ snapshots: chai: 5.1.2 debug: 4.3.7(supports-color@5.5.0) expect-type: 1.1.0 - magic-string: 0.30.13 + magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.8.0 tinybench: 2.9.0 @@ -26039,16 +27211,16 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.96.1): + webpack-dev-middleware@5.3.4(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) - webpack-dev-server@4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.96.1): + webpack-dev-server@4.15.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -26058,7 +27230,7 @@ snapshots: '@types/sockjs': 0.3.36 '@types/ws': 8.5.13 ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 + bonjour-service: 1.2.1 chokidar: 3.6.0 colorette: 2.0.20 compression: 1.7.5 @@ -26078,10 +27250,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.96.1) + webpack-dev-middleware: 5.3.4(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - webpack: 5.96.1 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) transitivePeerDependencies: - bufferutil - debug @@ -26102,13 +27274,13 @@ snapshots: webpack-sources@3.2.3: {} - webpack@5.96.1: + webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.14.1 - '@webassemblyjs/wasm-edit': 1.14.1 - '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.14.0 browserslist: 4.24.2 chrome-trace-event: 1.0.4 @@ -26124,7 +27296,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.15))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.15))) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.13))(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -26132,7 +27304,7 @@ snapshots: - esbuild - uglify-js - webpackbar@6.0.1(webpack@5.96.1): + webpackbar@6.0.1(webpack@5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -26140,8 +27312,8 @@ snapshots: figures: 3.2.0 markdown-table: 2.0.0 pretty-time: 1.1.0 - std-env: 3.8.0 - webpack: 5.96.1 + std-env: 3.7.0 + webpack: 5.96.1(@swc/core@1.9.2(@swc/helpers@0.5.13)) wrap-ansi: 7.0.0 websocket-driver@0.7.4: From 6fbde253981390e13d5506599798529cc2f574b3 Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Mon, 18 Nov 2024 20:05:47 -0600 Subject: [PATCH 11/26] inline user model --- .../core/src/test_resources/createRuntime.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/core/src/test_resources/createRuntime.ts b/packages/core/src/test_resources/createRuntime.ts index fe0003cef31..624f82a28d7 100644 --- a/packages/core/src/test_resources/createRuntime.ts +++ b/packages/core/src/test_resources/createRuntime.ts @@ -53,12 +53,11 @@ export async function createRuntime({ // Load sqlite-vss loadVecExtensions((adapter as SqlJsDatabaseAdapter).db); // Create a test user and session - user = { - id: zeroUuid, - email: "test@example.com", - } as User; session = { - user: user, + user: { + id: zeroUuid, + email: "test@example.com", + }, }; } break; @@ -120,12 +119,11 @@ export async function createRuntime({ // Load sqlite-vss await loadVecExtensions((adapter as SqliteDatabaseAdapter).db); // Create a test user and session - user = { - id: zeroUuid, - email: "test@example.com", - } as User; session = { - user: user, + user: { + id: zeroUuid, + email: "test@example.com", + }, }; } break; From ff28e99d8b03d0362db9400f60e032d3a30730c7 Mon Sep 17 00:00:00 2001 From: Dave Norman Date: Mon, 18 Nov 2024 20:08:12 -0600 Subject: [PATCH 12/26] remove hardcoded endpoint --- packages/core/src/test_resources/createRuntime.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/src/test_resources/createRuntime.ts b/packages/core/src/test_resources/createRuntime.ts index 624f82a28d7..d1ad826a6ba 100644 --- a/packages/core/src/test_resources/createRuntime.ts +++ b/packages/core/src/test_resources/createRuntime.ts @@ -17,6 +17,7 @@ import { zeroUuid, } from "./constants.ts"; import { User } from "./types.ts"; +import { getEndpoint } from "../models.ts"; export async function createRuntime({ env, @@ -130,7 +131,7 @@ export async function createRuntime({ } const runtime = new AgentRuntime({ - serverUrl: "https://api.openai.com/v1", + serverUrl: getEndpoint(ModelProviderName.OPENAI), conversationLength, token: env!.OPENAI_API_KEY!, modelProvider: ModelProviderName.OPENAI, From 610a1004948d2ec231c44a034a00cba4dc342190 Mon Sep 17 00:00:00 2001 From: Fabrizio Date: Tue, 19 Nov 2024 03:38:58 +0100 Subject: [PATCH 13/26] docs: add italian README translation --- README.md | 2 +- README_IT.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 README_IT.md diff --git a/README.md b/README.md index a9abbd61e9a..d2d106824b1 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ## 🌍 README Translations -[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) +[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) ## ✨ Features diff --git a/README_IT.md b/README_IT.md new file mode 100644 index 00000000000..ab74ca0ec41 --- /dev/null +++ b/README_IT.md @@ -0,0 +1,92 @@ +# Eliza 🤖 + +
+ Eliza Banner +
+ +## ✨ Caratteristiche + +- 🛠️ Connettori completi per Discord, Twitter e Telegram +- 🔗 Supporto per tutti i modelli (Llama, Grok, OpenAI, Anthropic, ecc.) +- 👥 Supporto multi-agente e per stanze +- 📚 Acquisisci ed interagisci facilmente con i tuoi documenti +- 💾 Memoria recuperabile e archivio documenti +- 🚀 Altamente estensibile - crea le tue azioni e clients personalizzati +- ☁️ Supporto di numerosi modelli (Llama locale, OpenAI, Anthropic, Groq, ecc.) +- 📦 Funziona e basta! + +## 🎯 Casi d'Uso + +- 🤖 Chatbot +- 🕵️ Agenti Autonomi +- 📈 Gestione Processi Aziendali +- 🎮 NPC per Videogiochi +- 🧠 Trading + +## 🚀 Avvio Rapido + +### Prerequisiti + +- [Python 2.7+](https://www.python.org/downloads/) +- [Node.js 22+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) +- [pnpm](https://pnpm.io/installation) + +> **Nota per gli utenti Windows:** È richiesto WSL + +### Modifica il file .env + +Copia .env.example in .env e inserisci i valori appropriati + +``` +cp .env.example .env +``` + +### Avvia Eliza Automaticamente + +Questo script eseguirà tutti i comandi necessari per configurare il progetto e avviare il bot con il personaggio predefinito. + +```bash +sh scripts/start.sh +``` + +### Modifica il file del personaggio + +1. Apri `packages/agent/src/character.ts` per modificare il personaggio predefinito. Decommentare e modificare. + +2. Per caricare personaggi personalizzati: + - Usa `pnpm start --characters="percorso/del/tuo/personaggio.json"` + - È possibile caricare più file di personaggi contemporaneamente + +### Avvia Eliza Manualmente + +```bash +pnpm i +pnpm build +pnpm start + +# Il progetto evolve rapidamente; a volte è necessario pulire il progetto se si ritorna sul progetto dopo un po' di tempo +pnpm clean +``` + +#### Requisiti Aggiuntivi + +Potrebbe essere necessario installare Sharp. Se vedi un errore all'avvio, prova a installarlo con il seguente comando: + +``` +pnpm install --include=optional sharp +``` + +### Community e contatti + +- [GitHub Issues](https://github.com/ai16z/eliza/issues). Ideale per: bug riscontrati utilizzando Eliza e proposte di funzionalità. +- [Discord](https://discord.gg/ai16z). Ideale per: condividere le tue applicazioni e interagire con la community. + +## Contributori + + + + + +## Cronologia Stelle + +[![Grafico Cronologia Stelle](https://api.star-history.com/svg?repos=ai16z/eliza&type=Date)](https://star-history.com/#ai16z/eliza&Date) \ No newline at end of file From 1516f71e28f853ccb3f067088f3d12055f12cf85 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 14:31:48 +1100 Subject: [PATCH 14/26] services --- packages/agent/src/index.ts | 4 +- packages/client-discord/src/index.ts | 4 +- packages/client-discord/src/messages.ts | 60 +++++++++++++------ packages/client-discord/src/voice.ts | 47 ++++++++++----- .../client-telegram/src/telegramClient.ts | 2 +- packages/client-twitter/src/base.ts | 2 +- packages/client-twitter/src/interactions.ts | 4 +- packages/core/src/generation.ts | 41 ++++++++----- packages/core/src/runtime.ts | 9 +-- packages/core/src/types.ts | 6 +- packages/plugin-node/src/services/video.ts | 13 ++-- 11 files changed, 125 insertions(+), 67 deletions(-) diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 725a65cfca8..203f3df825e 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -21,7 +21,7 @@ import Database from "better-sqlite3"; import fs from "fs"; import readline from "readline"; import yargs from "yargs"; -import { character } from "./character.ts"; +import blobert from "./blobert.ts"; export const wait = (minTime: number = 1000, maxTime: number = 3000) => { const waitTime = @@ -268,7 +268,7 @@ const startAgents = async () => { let charactersArg = args.characters || args.character; - let characters = [character]; + let characters = [blobert]; if (charactersArg) { characters = await loadCharacters(charactersArg); diff --git a/packages/client-discord/src/index.ts b/packages/client-discord/src/index.ts index 992d4e9255f..57b70c22dd0 100644 --- a/packages/client-discord/src/index.ts +++ b/packages/client-discord/src/index.ts @@ -25,8 +25,8 @@ import { VoiceManager } from "./voice.ts"; export class DiscordClient extends EventEmitter { apiToken: string; - private client: Client; - private runtime: IAgentRuntime; + client: Client; + runtime: IAgentRuntime; character: Character; private messageManager: MessageManager; private voiceManager: VoiceManager; diff --git a/packages/client-discord/src/messages.ts b/packages/client-discord/src/messages.ts index 4d1631664b2..cab78a8ad26 100644 --- a/packages/client-discord/src/messages.ts +++ b/packages/client-discord/src/messages.ts @@ -515,10 +515,17 @@ export class MessageManager { } if (message.channel.type === ChannelType.GuildVoice) { // For voice channels, use text-to-speech - const audioStream = await this.runtime - .getService(ServiceType.SPEECH_GENERATION) - .getInstance() - .generate(this.runtime, content.text); + + const speechService = + this.runtime.getService( + ServiceType.SPEECH_GENERATION + ); + + const audioStream = await speechService.generate( + this.runtime, + content.text + ); + await this.voiceManager.playAudioStream( userId, audioStream @@ -603,10 +610,18 @@ export class MessageManager { if (message.channel.type === ChannelType.GuildVoice) { // For voice channels, use text-to-speech for the error message const errorMessage = "Sorry, I had a glitch. What was that?"; - const audioStream = await this.runtime - .getService(ServiceType.SPEECH_GENERATION) - .getInstance() - .generate(this.runtime, errorMessage); + + const speechService = this.runtime.getService( + ServiceType.SPEECH_GENERATION + ); + if (!speechService) { + throw new Error("Speech generation service not found"); + } + + const audioStream = await speechService.generate( + this.runtime, + errorMessage + ); await this.voiceManager.playAudioStream(userId, audioStream); } else { // For text channels, send the error message @@ -670,14 +685,17 @@ export class MessageManager { for (const url of urls) { if ( this.runtime - .getService(ServiceType.VIDEO) - .getInstance() + .getService(ServiceType.VIDEO) .isVideoUrl(url) ) { - const videoInfo = await this.runtime - .getService(ServiceType.VIDEO) - .getInstance() - .processVideo(url); + const videoService = this.runtime.getService( + ServiceType.VIDEO + ); + if (!videoService) { + throw new Error("Video service not found"); + } + const videoInfo = await videoService.processVideo(url); + attachments.push({ id: `youtube-${Date.now()}`, url: url, @@ -687,10 +705,16 @@ export class MessageManager { text: videoInfo.text, }); } else { - const { title, bodyContent } = await this.runtime - .getService(ServiceType.BROWSER) - .getInstance() - .getPageContent(url, this.runtime); + const browserService = this.runtime.getService( + ServiceType.BROWSER + ); + if (!browserService) { + throw new Error("Browser service not found"); + } + + const { title, bodyContent } = + await browserService.getPageContent(url, this.runtime); + const { title: newTitle, description } = await generateSummary( this.runtime, title + "\n" + bodyContent diff --git a/packages/client-discord/src/voice.ts b/packages/client-discord/src/voice.ts index e2abc0927ea..6a28a1352ae 100644 --- a/packages/client-discord/src/voice.ts +++ b/packages/client-discord/src/voice.ts @@ -64,6 +64,7 @@ export function getWavHeader( } import { messageCompletionFooter } from "@ai16z/eliza/src/parsing.ts"; +import { DiscordClient } from "."; const discordVoiceHandlerTemplate = `# Task: Generate conversational voice dialog for {{agentName}}. @@ -183,7 +184,7 @@ export class VoiceManager extends EventEmitter { { channel: BaseGuildVoiceChannel; monitor: AudioMonitor } > = new Map(); - constructor(client: any) { + constructor(client: DiscordClient) { super(); this.client = client.client; this.runtime = client.runtime; @@ -260,10 +261,10 @@ export class VoiceManager extends EventEmitter { member: GuildMember, channel: BaseGuildVoiceChannel ) { - const userId = member.id; - const userName = member.user.username; - const name = member.user.displayName; - const connection = getVoiceConnection(member.guild.id); + const userId = member?.id; + const userName = member?.user?.username; + const name = member?.user?.displayName; + const connection = getVoiceConnection(member?.guild?.id); const receiveStream = connection?.receiver.subscribe(userId, { autoDestroy: true, emitClose: true, @@ -368,13 +369,12 @@ export class VoiceManager extends EventEmitter { let lastChunkTime = Date.now(); let transcriptionStarted = false; let transcriptionText = ""; - console.log("new audio monitor for: ", userId); const monitor = new AudioMonitor( audioStream, 10000000, async (buffer) => { - console.log("buffer: ", buffer); + // console.log("buffer: ", buffer); const currentTime = Date.now(); const silenceDuration = currentTime - lastChunkTime; if (!buffer) { @@ -397,11 +397,14 @@ export class VoiceManager extends EventEmitter { const wavBuffer = await this.convertOpusToWav(inputBuffer); - console.log("starting transcription"); - const text = await this.runtime - .getService(ServiceType.TRANSCRIPTION) - .getInstance() - .transcribe(wavBuffer); + const transcriptionService = + this.runtime.getService( + ServiceType.TRANSCRIPTION + ); + + const text = + await transcriptionService.transcribe(wavBuffer); + console.log("transcribed text: ", text); transcriptionText += text; } catch (error) { @@ -539,10 +542,22 @@ export class VoiceManager extends EventEmitter { await this.runtime.updateRecentMessageState( state ); - const responseStream = await this.runtime - .getService(ServiceType.SPEECH_GENERATION) - .getInstance() - .generate(this.runtime, content.text); + + const speechService = + this.runtime.getService( + ServiceType.SPEECH_GENERATION + ); + if (!speechService) { + throw new Error( + "Speech generation service not found" + ); + } + + const responseStream = + await speechService.generate( + this.runtime, + content.text + ); if (responseStream) { await this.playAudioStream( diff --git a/packages/client-telegram/src/telegramClient.ts b/packages/client-telegram/src/telegramClient.ts index 462517c2a23..dd769c25f10 100644 --- a/packages/client-telegram/src/telegramClient.ts +++ b/packages/client-telegram/src/telegramClient.ts @@ -32,7 +32,7 @@ export class TelegramClient { this.bot.botInfo = botInfo; }); - console.log(`Bot username: @${this.bot.botInfo?.username}`); + elizaLogger.success(`Bot username: @${this.bot.botInfo?.username}`); this.messageManager.bot = this.bot; diff --git a/packages/client-twitter/src/base.ts b/packages/client-twitter/src/base.ts index 1a910c37691..54d4e4d9f02 100644 --- a/packages/client-twitter/src/base.ts +++ b/packages/client-twitter/src/base.ts @@ -220,7 +220,7 @@ export class ClientBase extends EventEmitter { this.runtime.getSetting("TWITTER_EMAIL"), this.runtime.getSetting("TWITTER_2FA_SECRET") ); - console.log("Logged in to Twitter"); + elizaLogger.log("Logged in to Twitter"); const cookies = await this.twitterClient.getCookies(); fs.writeFileSync( cookiesFilePath, diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index 75c4f8c2c88..f0a97aa73e2 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -238,7 +238,7 @@ export class TwitterInteractionClient extends ClientBase { ); } - console.log("Thread: ", thread); + elizaLogger.debug("Thread: ", thread); const formattedConversation = thread .map( (tweet) => `@${tweet.username} (${new Date( @@ -253,7 +253,7 @@ export class TwitterInteractionClient extends ClientBase { ) .join("\n\n"); - console.log("formattedConversation: ", formattedConversation); + elizaLogger.debug("formattedConversation: ", formattedConversation); const formattedHomeTimeline = `# ${this.runtime.character.name}'s Home Timeline\n\n` + diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 1b82fae9b9f..ba008a0fd70 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -244,17 +244,23 @@ export async function generateText({ elizaLogger.debug( "Using local Llama model for text completion." ); - response = await runtime - .getService(ServiceType.TEXT_GENERATION) - .getInstance() - .queueTextCompletion( - context, - temperature, - _stop, - frequency_penalty, - presence_penalty, - max_response_length + const textGenerationService = + runtime.getService( + ServiceType.TEXT_GENERATION ); + + if (!textGenerationService) { + throw new Error("Text generation service not found"); + } + + response = await textGenerationService.queueTextCompletion( + context, + temperature, + _stop, + frequency_penalty, + presence_penalty, + max_response_length + ); elizaLogger.debug("Received response from local Llama model."); break; } @@ -852,16 +858,21 @@ export const generateCaption = async ( description: string; }> => { const { imageUrl } = data; - const resp = await runtime - .getService(ServiceType.IMAGE_DESCRIPTION) - .getInstance() - .describeImage(imageUrl); + const imageDescriptionService = + runtime.getService( + ServiceType.IMAGE_DESCRIPTION + ); + + if (!imageDescriptionService) { + throw new Error("Image description service not found"); + } + + const resp = await imageDescriptionService.describeImage(imageUrl); return { title: resp.title.trim(), description: resp.description.trim(), }; }; - /** * Configuration options for generating objects with a model. */ diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index dee40e7cfdc..a5bfea5b4ac 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -150,16 +150,17 @@ export class AgentRuntime implements IAgentRuntime { return this.memoryManagers.get(tableName) || null; } - getService(service: ServiceType): typeof Service | null { + getService(service: ServiceType): T | null { const serviceInstance = this.services.get(service); if (!serviceInstance) { elizaLogger.error(`Service ${service} not found`); return null; } - return serviceInstance as typeof Service; + return serviceInstance as T; } + registerService(service: Service): void { - const serviceType = (service as typeof Service).serviceType; + const serviceType = service.serviceType; elizaLogger.log("Registering service:", serviceType); if (this.services.has(serviceType)) { elizaLogger.warn( @@ -168,7 +169,7 @@ export class AgentRuntime implements IAgentRuntime { return; } - this.services.set((service as typeof Service).serviceType, service); + this.services.set(serviceType, service); } /** diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index b4fefaa1145..f5b71e9bd22 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -524,7 +524,7 @@ export interface IMemoryManager { export abstract class Service { private static instance: Service | null = null; - static serviceType: ServiceType; + serviceType: ServiceType; public static getInstance(): T { if (!Service.instance) { @@ -556,7 +556,7 @@ export interface IAgentRuntime { getMemoryManager(name: string): IMemoryManager | null; - getService(service: string): typeof Service | null; + getService(service: ServiceType): T | null; registerService(service: Service): void; @@ -608,6 +608,7 @@ export interface IImageDescriptionService extends Service { } export interface ITranscriptionService extends Service { + getInstance(): ITranscriptionService; transcribeAttachment(audioBuffer: ArrayBuffer): Promise; transcribeAttachmentLocally( audioBuffer: ArrayBuffer @@ -617,6 +618,7 @@ export interface ITranscriptionService extends Service { } export interface IVideoService extends Service { + getInstance(): IVideoService; isVideoUrl(url: string): boolean; processVideo(url: string): Promise; fetchVideoInfo(url: string): Promise; diff --git a/packages/plugin-node/src/services/video.ts b/packages/plugin-node/src/services/video.ts index a8bee25ac7e..c4c27ea3835 100644 --- a/packages/plugin-node/src/services/video.ts +++ b/packages/plugin-node/src/services/video.ts @@ -327,10 +327,15 @@ export class VideoService extends Service { console.log("Starting transcription..."); const startTime = Date.now(); - const transcript = await runtime - .getService(ServiceType.TRANSCRIPTION) - .getInstance() - .transcribe(audioBuffer); + const transcriptionService = runtime.getService( + ServiceType.TRANSCRIPTION + ); + if (!transcriptionService) { + throw new Error("Transcription service not found"); + } + + const transcript = await transcriptionService.transcribe(audioBuffer); + const endTime = Date.now(); console.log( `Transcription completed in ${(endTime - startTime) / 1000} seconds` From eb72f01b9ae4244df78789a1f5fa73d664b58f56 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 14:34:23 +1100 Subject: [PATCH 15/26] remove character --- packages/agent/src/index.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 203f3df825e..5ecb0d5800a 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -5,13 +5,12 @@ import { DiscordClientInterface } from "@ai16z/client-discord"; import { AutoClientInterface } from "@ai16z/client-auto"; import { TelegramClientInterface } from "@ai16z/client-telegram"; import { TwitterClientInterface } from "@ai16z/client-twitter"; -import { defaultCharacter } from "@ai16z/eliza"; -import { AgentRuntime } from "@ai16z/eliza"; -import { settings } from "@ai16z/eliza"; import { + defaultCharacter, + AgentRuntime, + settings, Character, IAgentRuntime, - IDatabaseAdapter, ModelProviderName, } from "@ai16z/eliza"; import { bootstrapPlugin } from "@ai16z/plugin-bootstrap"; @@ -21,7 +20,7 @@ import Database from "better-sqlite3"; import fs from "fs"; import readline from "readline"; import yargs from "yargs"; -import blobert from "./blobert.ts"; +import { character } from "./character.ts"; export const wait = (minTime: number = 1000, maxTime: number = 3000) => { const waitTime = @@ -268,7 +267,7 @@ const startAgents = async () => { let charactersArg = args.characters || args.character; - let characters = [blobert]; + let characters = [character]; if (charactersArg) { characters = await loadCharacters(charactersArg); From 780f483b6f2abeb8a2d9c4bdb6d89217dc995d1f Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 14:51:55 +1100 Subject: [PATCH 16/26] fix logging --- packages/agent/src/index.ts | 7 ++++++- packages/client-direct/src/index.ts | 2 +- packages/client-discord/src/index.ts | 2 +- packages/client-discord/src/voice.ts | 8 ++++---- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 5ecb0d5800a..15719c89cd7 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -12,6 +12,7 @@ import { Character, IAgentRuntime, ModelProviderName, + elizaLogger, } from "@ai16z/eliza"; import { bootstrapPlugin } from "@ai16z/plugin-bootstrap"; import { solanaPlugin } from "@ai16z/plugin-solana"; @@ -218,7 +219,11 @@ export async function createAgent( db: any, token: string ) { - console.log("Creating runtime for character", character.name); + elizaLogger.success( + elizaLogger.successesTitle, + "Creating runtime for character", + character.name + ); return new AgentRuntime({ databaseAdapter: db, token, diff --git a/packages/client-direct/src/index.ts b/packages/client-direct/src/index.ts index 1ca8a97658e..123600bf555 100644 --- a/packages/client-direct/src/index.ts +++ b/packages/client-direct/src/index.ts @@ -61,7 +61,7 @@ export class DirectClient { private agents: Map; constructor() { - console.log("DirectClient constructor"); + elizaLogger.log("DirectClient constructor"); this.app = express(); this.app.use(cors()); this.agents = new Map(); diff --git a/packages/client-discord/src/index.ts b/packages/client-discord/src/index.ts index 57b70c22dd0..0b27015b65a 100644 --- a/packages/client-discord/src/index.ts +++ b/packages/client-discord/src/index.ts @@ -193,7 +193,7 @@ export class DiscordClient extends EventEmitter { } async handleReactionRemove(reaction: MessageReaction, user: User) { - console.log("Reaction removed"); + elizaLogger.log("Reaction removed"); // if (user.bot) return; let emoji = reaction.emoji.name; diff --git a/packages/client-discord/src/voice.ts b/packages/client-discord/src/voice.ts index 6a28a1352ae..3ab11c9cddd 100644 --- a/packages/client-discord/src/voice.ts +++ b/packages/client-discord/src/voice.ts @@ -20,7 +20,7 @@ import { import EventEmitter from "events"; import prism from "prism-media"; import { Readable, pipeline } from "stream"; -import { composeContext } from "@ai16z/eliza"; +import { composeContext, elizaLogger } from "@ai16z/eliza"; import { generateMessageResponse } from "@ai16z/eliza"; import { embeddingZeroVector } from "@ai16z/eliza"; import { @@ -121,7 +121,7 @@ export class AudioMonitor { } }); this.readable.on("end", () => { - console.log("AudioMonitor ended"); + elizaLogger.log("AudioMonitor ended"); this.ended = true; if (this.lastFlagged < 0) return; callback(this.getBufferFromStart()); @@ -129,13 +129,13 @@ export class AudioMonitor { }); this.readable.on("speakingStopped", () => { if (this.ended) return; - console.log("Speaking stopped"); + elizaLogger.log("Speaking stopped"); if (this.lastFlagged < 0) return; callback(this.getBufferFromStart()); }); this.readable.on("speakingStarted", () => { if (this.ended) return; - console.log("Speaking started"); + elizaLogger.log("Speaking started"); this.reset(); }); } From 97cd09bda9a077f5a69d53dd2050fc41bbfd4a48 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 14:52:12 +1100 Subject: [PATCH 17/26] linting --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a9abbd61e9a..15e68e36bc4 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ ## 🌍 README Translations + [中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) ## ✨ Features From df57d56429397e2c7b2bda33f4a4b87a0a85c55c Mon Sep 17 00:00:00 2001 From: Ophiuchus Date: Mon, 18 Nov 2024 22:57:15 -0600 Subject: [PATCH 18/26] removed ollama embeddings. fastembeddings or openai only --- packages/core/src/embedding.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/embedding.ts b/packages/core/src/embedding.ts index 4c775d39465..27401c2593a 100644 --- a/packages/core/src/embedding.ts +++ b/packages/core/src/embedding.ts @@ -93,7 +93,6 @@ export async function embed(runtime: IAgentRuntime, input: string) { if ( isNode && runtime.character.modelProvider !== ModelProviderName.OPENAI && - runtime.character.modelProvider !== ModelProviderName.OLLAMA && !settings.USE_OPENAI_EMBEDDING ) { return await getLocalEmbedding(input); From 591b971746556cf7709818489ee35df30ef9b0ef Mon Sep 17 00:00:00 2001 From: dorianjanezic Date: Tue, 19 Nov 2024 10:59:05 +0100 Subject: [PATCH 19/26] Add video generation plugin tests and constants --- .../core/src/tests/videoGeneration.test.ts | 125 ++++++++++++++++++ .../plugin-video-generation/src/constants.ts | 4 + packages/plugin-video-generation/src/index.ts | 8 +- 3 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 packages/core/src/tests/videoGeneration.test.ts create mode 100644 packages/plugin-video-generation/src/constants.ts diff --git a/packages/core/src/tests/videoGeneration.test.ts b/packages/core/src/tests/videoGeneration.test.ts new file mode 100644 index 00000000000..2fb8f86573b --- /dev/null +++ b/packages/core/src/tests/videoGeneration.test.ts @@ -0,0 +1,125 @@ +import { IAgentRuntime, Memory, State } from "@ai16z/eliza"; +import { videoGenerationPlugin } from "../index"; + +// Mock the fetch function +global.fetch = jest.fn(); + +// Mock the fs module +jest.mock('fs', () => ({ + writeFileSync: jest.fn(), + existsSync: jest.fn(), + mkdirSync: jest.fn(), +})); + +describe('Video Generation Plugin', () => { + let mockRuntime: IAgentRuntime; + let mockCallback: jest.Mock; + + beforeEach(() => { + // Reset mocks + jest.clearAllMocks(); + + // Setup mock runtime + mockRuntime = { + getSetting: jest.fn().mockReturnValue('mock-api-key'), + agentId: 'mock-agent-id', + composeState: jest.fn().mockResolvedValue({}), + } as unknown as IAgentRuntime; + + mockCallback = jest.fn(); + + // Setup fetch mock for successful response + (global.fetch as jest.Mock).mockImplementation(() => + Promise.resolve({ + ok: true, + json: () => Promise.resolve({ + id: 'mock-generation-id', + status: 'completed', + assets: { + video: 'https://example.com/video.mp4' + } + }), + text: () => Promise.resolve(''), + }) + ); + }); + + it('should validate when API key is present', async () => { + const mockMessage = {} as Memory; + const result = await videoGenerationPlugin.actions[0].validate(mockRuntime, mockMessage); + expect(result).toBe(true); + expect(mockRuntime.getSetting).toHaveBeenCalledWith('LUMA_API_KEY'); + }); + + it('should handle video generation request', async () => { + const mockMessage = { + content: { + text: 'Generate a video of a sunset' + } + } as Memory; + const mockState = {} as State; + + await videoGenerationPlugin.actions[0].handler( + mockRuntime, + mockMessage, + mockState, + {}, + mockCallback + ); + + // Check initial callback + expect(mockCallback).toHaveBeenCalledWith( + expect.objectContaining({ + text: expect.stringContaining('I\'ll generate a video based on your prompt') + }) + ); + + // Check final callback with video + expect(mockCallback).toHaveBeenCalledWith( + expect.objectContaining({ + text: 'Here\'s your generated video!', + attachments: expect.arrayContaining([ + expect.objectContaining({ + source: 'videoGeneration' + }) + ]) + }), + expect.arrayContaining([expect.stringMatching(/generated_video_.*\.mp4/)]) + ); + }); + + it('should handle API errors gracefully', async () => { + // Mock API error + (global.fetch as jest.Mock).mockImplementationOnce(() => + Promise.resolve({ + ok: false, + status: 500, + statusText: 'Internal Server Error', + text: () => Promise.resolve('API Error'), + }) + ); + + const mockMessage = { + content: { + text: 'Generate a video of a sunset' + } + } as Memory; + const mockState = {} as State; + + await videoGenerationPlugin.actions[0].handler( + mockRuntime, + mockMessage, + mockState, + {}, + mockCallback + ); + + // Check error callback + expect(mockCallback).toHaveBeenCalledWith( + expect.objectContaining({ + text: expect.stringContaining('Video generation failed'), + error: true + }) + ); + }); +}); \ No newline at end of file diff --git a/packages/plugin-video-generation/src/constants.ts b/packages/plugin-video-generation/src/constants.ts new file mode 100644 index 00000000000..4f7428d8f76 --- /dev/null +++ b/packages/plugin-video-generation/src/constants.ts @@ -0,0 +1,4 @@ +export const LUMA_CONSTANTS = { + API_URL: 'https://api.lumalabs.ai/dream-machine/v1/generations', + API_KEY_SETTING: "LUMA_API_KEY" // The setting name to fetch from runtime +}; \ No newline at end of file diff --git a/packages/plugin-video-generation/src/index.ts b/packages/plugin-video-generation/src/index.ts index 7ec9f140a76..0723485263b 100644 --- a/packages/plugin-video-generation/src/index.ts +++ b/packages/plugin-video-generation/src/index.ts @@ -8,15 +8,15 @@ import { State, } from "@ai16z/eliza/src/types.ts"; import fs from "fs"; +import { LUMA_CONSTANTS } from './constants'; const generateVideo = async (prompt: string, runtime: IAgentRuntime) => { - const API_URL = 'https://api.lumalabs.ai/dream-machine/v1/generations'; - const API_KEY = runtime.getSetting("LUMA_API_KEY"); + const API_KEY = runtime.getSetting(LUMA_CONSTANTS.API_KEY_SETTING); try { elizaLogger.log("Starting video generation with prompt:", prompt); - const response = await fetch(API_URL, { + const response = await fetch(LUMA_CONSTANTS.API_URL, { method: 'POST', headers: { 'Authorization': `Bearer ${API_KEY}`, @@ -47,7 +47,7 @@ const generateVideo = async (prompt: string, runtime: IAgentRuntime) => { while (status !== 'completed' && status !== 'failed') { await new Promise(resolve => setTimeout(resolve, 5000)); // Wait 5 seconds - const statusResponse = await fetch(`${API_URL}/${generationId}`, { + const statusResponse = await fetch(`${LUMA_CONSTANTS.API_URL}/${generationId}`, { method: 'GET', headers: { 'Authorization': `Bearer ${API_KEY}`, From 6b0baadb30618fc3b76b1124528abaa3fb55a285 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 21:59:01 +1100 Subject: [PATCH 20/26] systems work --- packages/agent/src/index.ts | 10 ++--- .../src/actions/download_media.ts | 4 +- packages/client-discord/src/attachments.ts | 45 ++++++++++--------- packages/client-discord/src/voice.ts | 4 ++ .../client-telegram/src/messageManager.ts | 5 +-- packages/client-twitter/src/base.ts | 2 +- packages/client-twitter/src/index.ts | 6 +-- packages/client-twitter/src/post.ts | 6 +-- packages/client-twitter/src/search.ts | 6 ++- packages/core/src/generation.ts | 14 +++--- packages/core/src/tests/goals.test.ts | 17 ++++--- packages/core/src/types.ts | 18 ++++++-- packages/plugin-node/src/index.ts | 39 ++++++++-------- packages/plugin-node/src/services/image.ts | 32 +++++++------ packages/plugin-node/src/services/index.ts | 17 +++++++ packages/plugin-node/src/services/llama.ts | 5 ++- packages/plugin-node/src/services/pdf.ts | 4 +- packages/plugin-node/src/services/speech.ts | 6 ++- .../plugin-node/src/services/transcription.ts | 4 +- packages/plugin-node/src/services/video.ts | 8 ++-- pnpm-lock.yaml | 18 ++++---- 21 files changed, 159 insertions(+), 111 deletions(-) create mode 100644 packages/plugin-node/src/services/index.ts diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 15719c89cd7..76fce339922 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -21,7 +21,7 @@ import Database from "better-sqlite3"; import fs from "fs"; import readline from "readline"; import yargs from "yargs"; -import { character } from "./character.ts"; +import blobert from "./blobert.ts"; export const wait = (minTime: number = 1000, maxTime: number = 3000) => { const waitTime = @@ -272,7 +272,7 @@ const startAgents = async () => { let charactersArg = args.characters || args.character; - let characters = [character]; + let characters = [blobert]; if (charactersArg) { characters = await loadCharacters(charactersArg); @@ -283,7 +283,7 @@ const startAgents = async () => { await startAgent(character, directClient); } } catch (error) { - console.error("Error starting agents:", error); + elizaLogger.error("Error starting agents:", error); } function chat() { @@ -296,12 +296,12 @@ const startAgents = async () => { }); } - console.log("Chat started. Type 'exit' to quit."); + elizaLogger.log("Chat started. Type 'exit' to quit."); chat(); }; startAgents().catch((error) => { - console.error("Unhandled error in startAgents:", error); + elizaLogger.error("Unhandled error in startAgents:", error); process.exit(1); // Exit the process after logging }); diff --git a/packages/client-discord/src/actions/download_media.ts b/packages/client-discord/src/actions/download_media.ts index 0b535139cda..8c68ea44676 100644 --- a/packages/client-discord/src/actions/download_media.ts +++ b/packages/client-discord/src/actions/download_media.ts @@ -86,8 +86,8 @@ export default { callback: HandlerCallback ) => { const videoService = runtime - .getService(ServiceType.VIDEO) - .getInstance(); + .getService(ServiceType.VIDEO) + .getInstance(); if (!state) { state = (await runtime.composeState(message)) as State; } diff --git a/packages/client-discord/src/attachments.ts b/packages/client-discord/src/attachments.ts index ffe67bea150..7746beda4e3 100644 --- a/packages/client-discord/src/attachments.ts +++ b/packages/client-discord/src/attachments.ts @@ -104,8 +104,7 @@ export class AttachmentManager { } else if ( attachment.contentType?.startsWith("video/") || this.runtime - .getService(ServiceType.VIDEO) - .getInstance() + .getService(ServiceType.VIDEO) .isVideoUrl(attachment.url) ) { media = await this.processVideoAttachment(attachment); @@ -137,10 +136,16 @@ export class AttachmentManager { throw new Error("Unsupported audio/video format"); } - const transcription = await this.runtime - .getService(ServiceType.TRANSCRIPTION) - .getInstance() - .transcribeAttachment(audioBuffer); + const transcriptionService = + this.runtime.getService( + ServiceType.TRANSCRIPTION + ); + if (!transcriptionService) { + throw new Error("Transcription service not found"); + } + + const transcription = + await transcriptionService.transcribeAttachment(audioBuffer); const { title, description } = await generateSummary( this.runtime, transcription @@ -220,8 +225,7 @@ export class AttachmentManager { const response = await fetch(attachment.url); const pdfBuffer = await response.arrayBuffer(); const text = await this.runtime - .getService(ServiceType.PDF) - .getInstance() + .getService(ServiceType.PDF) .convertPdfToText(Buffer.from(pdfBuffer)); const { title, description } = await generateSummary( this.runtime, @@ -289,8 +293,9 @@ export class AttachmentManager { ): Promise { try { const { description, title } = await this.runtime - .getService(ServiceType.IMAGE_DESCRIPTION) - .getInstance() + .getService( + ServiceType.IMAGE_DESCRIPTION + ) .describeImage(attachment.url); return { id: attachment.id, @@ -322,16 +327,16 @@ export class AttachmentManager { private async processVideoAttachment( attachment: Attachment ): Promise { - if ( - this.runtime - .getService(ServiceType.VIDEO) - .getInstance() - .isVideoUrl(attachment.url) - ) { - const videoInfo = await this.runtime - .getService(ServiceType.VIDEO) - .getInstance() - .processVideo(attachment.url); + const videoService = this.runtime.getService( + ServiceType.VIDEO + ); + + if (!videoService) { + throw new Error("Video service not found"); + } + + if (videoService.isVideoUrl(attachment.url)) { + const videoInfo = await videoService.processVideo(attachment.url); return { id: attachment.id, url: attachment.url, diff --git a/packages/client-discord/src/voice.ts b/packages/client-discord/src/voice.ts index 3ab11c9cddd..cf03ac45e52 100644 --- a/packages/client-discord/src/voice.ts +++ b/packages/client-discord/src/voice.ts @@ -401,6 +401,10 @@ export class VoiceManager extends EventEmitter { this.runtime.getService( ServiceType.TRANSCRIPTION ); + console.log( + "transcriptionService: ", + transcriptionService + ); const text = await transcriptionService.transcribe(wavBuffer); diff --git a/packages/client-telegram/src/messageManager.ts b/packages/client-telegram/src/messageManager.ts index ca6ceb04944..3b3f53d3bf8 100644 --- a/packages/client-telegram/src/messageManager.ts +++ b/packages/client-telegram/src/messageManager.ts @@ -178,9 +178,8 @@ export class MessageManager { } if (imageUrl) { - const { title, description } = await this.imageService - .getInstance() - .describeImage(imageUrl); + const { title, description } = + await this.imageService.describeImage(imageUrl); const fullDescription = `[Image: ${title}\n${description}]`; return { description: fullDescription }; } diff --git a/packages/client-twitter/src/base.ts b/packages/client-twitter/src/base.ts index 54d4e4d9f02..96f3f29a171 100644 --- a/packages/client-twitter/src/base.ts +++ b/packages/client-twitter/src/base.ts @@ -270,7 +270,7 @@ export class ClientBase extends EventEmitter { console.error("Failed to get user ID"); return; } - console.log("Twitter user ID:", userId); + elizaLogger.log("Twitter user ID:", userId); this.twitterUserId = userId; // Initialize Twitter profile diff --git a/packages/client-twitter/src/index.ts b/packages/client-twitter/src/index.ts index 6a3097c524a..742b5ac34dc 100644 --- a/packages/client-twitter/src/index.ts +++ b/packages/client-twitter/src/index.ts @@ -1,7 +1,7 @@ import { TwitterPostClient } from "./post.ts"; import { TwitterSearchClient } from "./search.ts"; import { TwitterInteractionClient } from "./interactions.ts"; -import { IAgentRuntime, Client } from "@ai16z/eliza"; +import { IAgentRuntime, Client, elizaLogger } from "@ai16z/eliza"; class TwitterAllClient { post: TwitterPostClient; @@ -19,11 +19,11 @@ class TwitterAllClient { export const TwitterClientInterface: Client = { async start(runtime: IAgentRuntime) { - console.log("Twitter client started"); + elizaLogger.log("Twitter client started"); return new TwitterAllClient(runtime); }, async stop(runtime: IAgentRuntime) { - console.warn("Twitter client does not support stopping yet"); + elizaLogger.warn("Twitter client does not support stopping yet"); }, }; diff --git a/packages/client-twitter/src/post.ts b/packages/client-twitter/src/post.ts index d74d34ef2e1..02778dae2da 100644 --- a/packages/client-twitter/src/post.ts +++ b/packages/client-twitter/src/post.ts @@ -1,6 +1,6 @@ import { Tweet } from "agent-twitter-client"; import fs from "fs"; -import { composeContext } from "@ai16z/eliza"; +import { composeContext, elizaLogger } from "@ai16z/eliza"; import { generateText } from "@ai16z/eliza"; import { embeddingZeroVector } from "@ai16z/eliza"; import { IAgentRuntime, ModelClass } from "@ai16z/eliza"; @@ -76,7 +76,7 @@ export class TwitterPostClient extends ClientBase { generateNewTweetLoop(); // Set up next iteration }, delay); - console.log(`Next tweet scheduled in ${randomMinutes} minutes`); + elizaLogger.log(`Next tweet scheduled in ${randomMinutes} minutes`); }; if (postImmediately) { @@ -92,7 +92,7 @@ export class TwitterPostClient extends ClientBase { } private async generateNewTweet() { - console.log("Generating new tweet"); + elizaLogger.log("Generating new tweet"); try { await this.runtime.ensureUserExists( this.runtime.agentId, diff --git a/packages/client-twitter/src/search.ts b/packages/client-twitter/src/search.ts index 3ece65fa639..38d8e2d2ecb 100644 --- a/packages/client-twitter/src/search.ts +++ b/packages/client-twitter/src/search.ts @@ -234,8 +234,10 @@ export class TwitterSearchClient extends ClientBase { const imageDescriptions = []; for (const photo of selectedTweet.photos) { const description = await this.runtime - .getService(ServiceType.IMAGE_DESCRIPTION) - .getInstance() + .getService( + ServiceType.IMAGE_DESCRIPTION + ) + .getInstance() .describeImage(photo.url); imageDescriptions.push(description); } diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index ba008a0fd70..90e687ff83c 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -244,10 +244,11 @@ export async function generateText({ elizaLogger.debug( "Using local Llama model for text completion." ); - const textGenerationService = - runtime.getService( + const textGenerationService = runtime + .getService( ServiceType.TEXT_GENERATION - ); + ) + .getInstance(); if (!textGenerationService) { throw new Error("Text generation service not found"); @@ -858,10 +859,9 @@ export const generateCaption = async ( description: string; }> => { const { imageUrl } = data; - const imageDescriptionService = - runtime.getService( - ServiceType.IMAGE_DESCRIPTION - ); + const imageDescriptionService = runtime + .getService(ServiceType.IMAGE_DESCRIPTION) + .getInstance(); if (!imageDescriptionService) { throw new Error("Image description service not found"); diff --git a/packages/core/src/tests/goals.test.ts b/packages/core/src/tests/goals.test.ts index cd845d12209..d931f776639 100644 --- a/packages/core/src/tests/goals.test.ts +++ b/packages/core/src/tests/goals.test.ts @@ -15,18 +15,19 @@ import { Memory, ModelProviderName, Service, + ServiceType, State, } from "../types"; // Mock the database adapter -const mockDatabaseAdapter = { +export const mockDatabaseAdapter = { getGoals: jest.fn(), updateGoal: jest.fn(), createGoal: jest.fn(), }; - +const services = new Map(); // Mock the runtime -const mockRuntime: IAgentRuntime = { +export const mockRuntime: IAgentRuntime = { databaseAdapter: mockDatabaseAdapter as any, agentId: "qweqew-qweqwe-qweqwe-qweqwe-qweeqw", serverUrl: "", @@ -87,8 +88,8 @@ const mockRuntime: IAgentRuntime = { getMemoryManager: function (_name: string): IMemoryManager | null { throw new Error("Function not implemented."); }, - registerService: function (_service: Service): void { - throw new Error("Function not implemented."); + registerService: function (service: Service): void { + services.set(service.serviceType, service); }, getSetting: function (_key: string): string | null { throw new Error("Function not implemented."); @@ -155,8 +156,10 @@ const mockRuntime: IAgentRuntime = { updateRecentMessageState: function (_state: State): Promise { throw new Error("Function not implemented."); }, - getService: function (_service: string): typeof Service | null { - throw new Error("Function not implemented."); + getService: function ( + serviceType: ServiceType + ): T | null { + return (services.get(serviceType) as T) || null; }, }; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index f5b71e9bd22..1c89a76c283 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -524,15 +524,24 @@ export interface IMemoryManager { export abstract class Service { private static instance: Service | null = null; - serviceType: ServiceType; + + static get serviceType(): ServiceType { + throw new Error("Service must implement static serviceType getter"); + } public static getInstance(): T { if (!Service.instance) { - // Use this.prototype.constructor to instantiate the concrete class Service.instance = new (this as any)(); } return Service.instance as T; } + + get serviceType(): ServiceType { + return (this.constructor as typeof Service).serviceType; + } + + // Add abstract initialize method that must be implemented by derived classes + abstract initialize(runtime: IAgentRuntime): Promise; } export interface IAgentRuntime { @@ -601,7 +610,6 @@ export interface IAgentRuntime { export interface IImageDescriptionService extends Service { getInstance(): IImageDescriptionService; - initialize(modelId?: string | null, device?: string | null): Promise; describeImage( imageUrl: string ): Promise<{ title: string; description: string }>; @@ -648,7 +656,7 @@ export interface ITextGenerationService extends Service { } export interface IBrowserService extends Service { - initialize(): Promise; + getInstance(): IBrowserService; closeBrowser(): Promise; getPageContent( url: string, @@ -657,10 +665,12 @@ export interface IBrowserService extends Service { } export interface ISpeechService extends Service { + getInstance(): ISpeechService; generate(runtime: IAgentRuntime, text: string): Promise; } export interface IPdfService extends Service { + getInstance(): IPdfService; convertPdfToText(pdfBuffer: Buffer): Promise; } diff --git a/packages/plugin-node/src/index.ts b/packages/plugin-node/src/index.ts index 678db6460e2..6969a05592d 100644 --- a/packages/plugin-node/src/index.ts +++ b/packages/plugin-node/src/index.ts @@ -1,31 +1,28 @@ -export * from "./services/browser.ts"; -export * from "./services/image.ts"; -export * from "./services/llama.ts"; -export * from "./services/pdf.ts"; -export * from "./services/speech.ts"; -export * from "./services/transcription.ts"; -export * from "./services/video.ts"; +export * from "./services/index.ts"; import { Plugin } from "@ai16z/eliza"; -import { BrowserService } from "./services/browser.ts"; -import { ImageDescriptionService } from "./services/image.ts"; -import { LlamaService } from "./services/llama.ts"; -import { PdfService } from "./services/pdf.ts"; -import { SpeechService } from "./services/speech.ts"; -import { TranscriptionService } from "./services/transcription.ts"; -import { VideoService } from "./services/video.ts"; + +import { + BrowserService, + ImageDescriptionService, + LlamaService, + PdfService, + SpeechService, + TranscriptionService, + VideoService, +} from "./services/index.ts"; export const nodePlugin: Plugin = { name: "default", description: "Default plugin, with basic actions and evaluators", services: [ - BrowserService, - ImageDescriptionService, - LlamaService, - PdfService, - SpeechService, - TranscriptionService, - VideoService, + new BrowserService(), + new ImageDescriptionService(), + new LlamaService(), + new PdfService(), + new SpeechService(), + new TranscriptionService(), + new VideoService(), ], }; diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index e4430c651ac..ff0ec463432 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -25,6 +25,7 @@ export class ImageDescriptionService extends Service { private processor: Florence2Processor | null = null; private tokenizer: PreTrainedTokenizer | null = null; private initialized: boolean = false; + private runtime: IAgentRuntime | null = null; static serviceType: ServiceType = ServiceType.IMAGE_DESCRIPTION; @@ -35,14 +36,7 @@ export class ImageDescriptionService extends Service { super(); } - async initialize( - device: string | null = null, - runtime: IAgentRuntime - ): Promise { - if (this.initialized) { - return; - } - + async initialize(runtime: IAgentRuntime): Promise { const model = models[runtime?.character?.modelProvider]; if (model === models[ModelProviderName.LLAMALOCAL]) { @@ -86,14 +80,15 @@ export class ImageDescriptionService extends Service { } async describeImage( - imageUrl: string, - device?: string, - runtime?: IAgentRuntime + imageUrl: string ): Promise<{ title: string; description: string }> { - this.initialize(device, runtime); - if (this.device === "cloud") { - return this.recognizeWithOpenAI(imageUrl, runtime); + if (!this.runtime) { + throw new Error( + "Runtime is required for OpenAI image recognition" + ); + } + return this.recognizeWithOpenAI(imageUrl); } else { this.queue.push(imageUrl); this.processQueue(); @@ -113,9 +108,12 @@ export class ImageDescriptionService extends Service { } private async recognizeWithOpenAI( - imageUrl: string, - runtime + imageUrl: string ): Promise<{ title: string; description: string }> { + if (!this.runtime) { + throw new Error("Runtime is required for OpenAI image recognition"); + } + const isGif = imageUrl.toLowerCase().endsWith(".gif"); let imageData: Buffer | null = null; @@ -147,7 +145,7 @@ export class ImageDescriptionService extends Service { imageData, prompt, isGif, - runtime + this.runtime ); const title = text.split("\n")[0]; const description = text.split("\n").slice(1).join("\n"); diff --git a/packages/plugin-node/src/services/index.ts b/packages/plugin-node/src/services/index.ts new file mode 100644 index 00000000000..95ed3e04ae9 --- /dev/null +++ b/packages/plugin-node/src/services/index.ts @@ -0,0 +1,17 @@ +import { BrowserService } from "./browser.ts"; +import { ImageDescriptionService } from "./image.ts"; +import { LlamaService } from "./llama.ts"; +import { PdfService } from "./pdf.ts"; +import { SpeechService } from "./speech.ts"; +import { TranscriptionService } from "./transcription.ts"; +import { VideoService } from "./video.ts"; + +export { + BrowserService, + ImageDescriptionService, + LlamaService, + PdfService, + SpeechService, + TranscriptionService, + VideoService, +}; diff --git a/packages/plugin-node/src/services/llama.ts b/packages/plugin-node/src/services/llama.ts index f8bc8be4147..720972278f3 100644 --- a/packages/plugin-node/src/services/llama.ts +++ b/packages/plugin-node/src/services/llama.ts @@ -1,4 +1,4 @@ -import { elizaLogger, ServiceType } from "@ai16z/eliza"; +import { elizaLogger, IAgentRuntime, ServiceType } from "@ai16z/eliza"; import { Service } from "@ai16z/eliza"; import fs from "fs"; import https from "https"; @@ -180,6 +180,9 @@ export class LlamaService extends Service { const modelName = "model.gguf"; this.modelPath = path.join(__dirname, modelName); } + + async initialize(runtime: IAgentRuntime): Promise {} + private async ensureInitialized() { if (!this.modelInitialized) { await this.initializeModel(); diff --git a/packages/plugin-node/src/services/pdf.ts b/packages/plugin-node/src/services/pdf.ts index ad899672fc1..b1138814486 100644 --- a/packages/plugin-node/src/services/pdf.ts +++ b/packages/plugin-node/src/services/pdf.ts @@ -1,4 +1,4 @@ -import { Service, ServiceType } from "@ai16z/eliza"; +import { IAgentRuntime, Service, ServiceType } from "@ai16z/eliza"; import { getDocument, PDFDocumentProxy } from "pdfjs-dist"; import { TextItem, TextMarkedContent } from "pdfjs-dist/types/src/display/api"; @@ -9,6 +9,8 @@ export class PdfService extends Service { super(); } + async initialize(runtime: IAgentRuntime): Promise {} + async convertPdfToText(pdfBuffer: Buffer): Promise { // Convert Buffer to Uint8Array const uint8Array = new Uint8Array(pdfBuffer); diff --git a/packages/plugin-node/src/services/speech.ts b/packages/plugin-node/src/services/speech.ts index 66e45a81edf..e5a0beed45e 100644 --- a/packages/plugin-node/src/services/speech.ts +++ b/packages/plugin-node/src/services/speech.ts @@ -3,6 +3,7 @@ import { IAgentRuntime, ISpeechService, ServiceType } from "@ai16z/eliza"; import { getWavHeader } from "./audioUtils.ts"; import { synthesize } from "../vendor/vits.ts"; import { Service } from "@ai16z/eliza"; + function prependWavHeader( readable: Readable, audioLength: number, @@ -107,8 +108,11 @@ async function textToSpeech(runtime: IAgentRuntime, text: string) { } } -export class SpeechService extends Service implements ISpeechService { +export class SpeechService extends Service { static serviceType: ServiceType = ServiceType.SPEECH_GENERATION; + + async initialize(runtime: IAgentRuntime): Promise {} + async generate(runtime: IAgentRuntime, text: string): Promise { // check for elevenlabs API key if (runtime.getSetting("ELEVENLABS_XI_API_KEY")) { diff --git a/packages/plugin-node/src/services/transcription.ts b/packages/plugin-node/src/services/transcription.ts index 0360dcec918..dd2da549494 100644 --- a/packages/plugin-node/src/services/transcription.ts +++ b/packages/plugin-node/src/services/transcription.ts @@ -1,4 +1,4 @@ -import { settings } from "@ai16z/eliza"; +import { IAgentRuntime, settings } from "@ai16z/eliza"; import { Service, ServiceType } from "@ai16z/eliza"; import { exec } from "child_process"; import { File } from "formdata-node"; @@ -27,6 +27,8 @@ export class TranscriptionService extends Service { private queue: { audioBuffer: ArrayBuffer; resolve: Function }[] = []; private processing: boolean = false; + async initialize(runtime: IAgentRuntime): Promise {} + constructor() { super(); const rootDir = path.resolve(__dirname, "../../"); diff --git a/packages/plugin-node/src/services/video.ts b/packages/plugin-node/src/services/video.ts index c4c27ea3835..bbc16b09735 100644 --- a/packages/plugin-node/src/services/video.ts +++ b/packages/plugin-node/src/services/video.ts @@ -22,6 +22,8 @@ export class VideoService extends Service { this.ensureCacheDirectoryExists(); } + async initialize(runtime: IAgentRuntime): Promise {} + private ensureCacheDirectoryExists() { if (!fs.existsSync(this.CONTENT_CACHE_DIR)) { fs.mkdirSync(this.CONTENT_CACHE_DIR); @@ -327,9 +329,9 @@ export class VideoService extends Service { console.log("Starting transcription..."); const startTime = Date.now(); - const transcriptionService = runtime.getService( - ServiceType.TRANSCRIPTION - ); + const transcriptionService = runtime + .getService(ServiceType.TRANSCRIPTION) + .getInstance(); if (!transcriptionService) { throw new Error("Transcription service not found"); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a97848a2ed5..692f2dd4493 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3050,8 +3050,8 @@ packages: cpu: [x64] os: [win32] - '@octokit/app@15.1.0': - resolution: {integrity: sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==} + '@octokit/app@15.1.1': + resolution: {integrity: sha512-fk8xrCSPTJGpyBdBNI+DcZ224dm0aApv4vi6X7/zTmANXlegKV2Td+dJ+fd7APPaPN7R+xttUsj2Fm+AFDSfMQ==} engines: {node: '>= 18'} '@octokit/auth-app@7.1.3': @@ -8380,8 +8380,8 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} - local-pkg@0.5.0: - resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + local-pkg@0.5.1: + resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} locate-character@3.0.0: @@ -15032,7 +15032,7 @@ snapshots: '@iconify/types': 2.0.0 debug: 4.3.7(supports-color@5.5.0) kolorist: 1.8.0 - local-pkg: 0.5.0 + local-pkg: 0.5.1 mlly: 1.7.3 transitivePeerDependencies: - supports-color @@ -15720,7 +15720,7 @@ snapshots: '@nx/nx-win32-x64-msvc@20.1.2': optional: true - '@octokit/app@15.1.0': + '@octokit/app@15.1.1': dependencies: '@octokit/auth-app': 7.1.3 '@octokit/auth-unauthenticated': 6.1.0 @@ -22118,7 +22118,7 @@ snapshots: loader-utils@3.3.1: {} - local-pkg@0.5.0: + local-pkg@0.5.1: dependencies: mlly: 1.7.3 pkg-types: 1.2.1 @@ -22169,7 +22169,7 @@ snapshots: log-symbols@4.1.0: dependencies: - chalk: 4.1.0 + chalk: 4.1.2 is-unicode-supported: 0.1.0 log-symbols@6.0.0: @@ -23440,7 +23440,7 @@ snapshots: octokit@4.0.2: dependencies: - '@octokit/app': 15.1.0 + '@octokit/app': 15.1.1 '@octokit/core': 6.1.2 '@octokit/oauth-app': 7.1.3 '@octokit/plugin-paginate-graphql': 5.2.4(@octokit/core@6.1.2) From 5ec69db803e51acefa53bbee5eb0408667ecb2e2 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 21:59:40 +1100 Subject: [PATCH 21/26] character --- packages/agent/src/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agent/src/index.ts b/packages/agent/src/index.ts index 76fce339922..9d53a965f3f 100644 --- a/packages/agent/src/index.ts +++ b/packages/agent/src/index.ts @@ -21,7 +21,7 @@ import Database from "better-sqlite3"; import fs from "fs"; import readline from "readline"; import yargs from "yargs"; -import blobert from "./blobert.ts"; +import { character } from "./character.ts"; export const wait = (minTime: number = 1000, maxTime: number = 3000) => { const waitTime = @@ -272,7 +272,7 @@ const startAgents = async () => { let charactersArg = args.characters || args.character; - let characters = [blobert]; + let characters = [character]; if (charactersArg) { characters = await loadCharacters(charactersArg); From ac87e38517b02284915397375dfcb7257008c418 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Tue, 19 Nov 2024 22:25:59 +1100 Subject: [PATCH 22/26] services --- packages/core/src/runtime.ts | 17 +- packages/plugin-node/src/services/image.ts | 248 +++++++++------------ 2 files changed, 116 insertions(+), 149 deletions(-) diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index a5bfea5b4ac..47de771d08d 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -159,9 +159,10 @@ export class AgentRuntime implements IAgentRuntime { return serviceInstance as T; } - registerService(service: Service): void { + async registerService(service: Service): Promise { const serviceType = service.serviceType; elizaLogger.log("Registering service:", serviceType); + if (this.services.has(serviceType)) { elizaLogger.warn( `Service ${serviceType} is already registered. Skipping registration.` @@ -169,7 +170,19 @@ export class AgentRuntime implements IAgentRuntime { return; } - this.services.set(serviceType, service); + try { + await service.initialize(this); + this.services.set(serviceType, service); + elizaLogger.success( + `Service ${serviceType} initialized successfully` + ); + } catch (error) { + elizaLogger.error( + `Failed to initialize service ${serviceType}:`, + error + ); + throw error; + } } /** diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index ff0ec463432..ac4333abe32 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -1,5 +1,4 @@ -// Current image recognition service -- local recognition working, no openai recognition -import { models } from "@ai16z/eliza"; +import { elizaLogger, models } from "@ai16z/eliza"; import { Service } from "@ai16z/eliza"; import { IAgentRuntime, ModelProviderName, ServiceType } from "@ai16z/eliza"; import { @@ -19,6 +18,8 @@ import os from "os"; import path from "path"; export class ImageDescriptionService extends Service { + static serviceType: ServiceType = ServiceType.IMAGE_DESCRIPTION; + private modelId: string = "onnx-community/Florence-2-base-ft"; private device: string = "gpu"; private model: PreTrainedModel | null = null; @@ -26,51 +27,15 @@ export class ImageDescriptionService extends Service { private tokenizer: PreTrainedTokenizer | null = null; private initialized: boolean = false; private runtime: IAgentRuntime | null = null; - - static serviceType: ServiceType = ServiceType.IMAGE_DESCRIPTION; - private queue: string[] = []; private processing: boolean = false; - constructor() { - super(); - } - async initialize(runtime: IAgentRuntime): Promise { + this.runtime = runtime; const model = models[runtime?.character?.modelProvider]; if (model === models[ModelProviderName.LLAMALOCAL]) { - this.modelId = "onnx-community/Florence-2-base-ft"; - - env.allowLocalModels = false; - env.allowRemoteModels = true; - env.backends.onnx.logLevel = "fatal"; - env.backends.onnx.wasm.proxy = false; - env.backends.onnx.wasm.numThreads = 1; - - console.log("Downloading model..."); - - this.model = - await Florence2ForConditionalGeneration.from_pretrained( - this.modelId, - { - device: "gpu", - progress_callback: (progress) => { - if (progress.status === "downloading") { - console.log( - `Model download progress: ${JSON.stringify(progress)}` - ); - } - }, - } - ); - - console.log("Model downloaded successfully."); - - this.processor = (await AutoProcessor.from_pretrained( - this.modelId - )) as Florence2Processor; - this.tokenizer = await AutoTokenizer.from_pretrained(this.modelId); + await this.initializeLocalModel(); } else { this.modelId = "gpt-4o-mini"; this.device = "cloud"; @@ -79,9 +44,44 @@ export class ImageDescriptionService extends Service { this.initialized = true; } + private async initializeLocalModel(): Promise { + env.allowLocalModels = false; + env.allowRemoteModels = true; + env.backends.onnx.logLevel = "fatal"; + env.backends.onnx.wasm.proxy = false; + env.backends.onnx.wasm.numThreads = 1; + + elizaLogger.log("Downloading Florence model..."); + + this.model = await Florence2ForConditionalGeneration.from_pretrained( + this.modelId, + { + device: "gpu", + progress_callback: (progress) => { + if (progress.status === "downloading") { + elizaLogger.log( + `Model download progress: ${JSON.stringify(progress)}` + ); + } + }, + } + ); + + elizaLogger.success("Florence model downloaded successfully"); + + this.processor = (await AutoProcessor.from_pretrained( + this.modelId + )) as Florence2Processor; + this.tokenizer = await AutoTokenizer.from_pretrained(this.modelId); + } + async describeImage( imageUrl: string ): Promise<{ title: string; description: string }> { + if (!this.initialized) { + throw new Error("ImageDescriptionService not initialized"); + } + if (this.device === "cloud") { if (!this.runtime) { throw new Error( @@ -89,37 +89,32 @@ export class ImageDescriptionService extends Service { ); } return this.recognizeWithOpenAI(imageUrl); - } else { - this.queue.push(imageUrl); - this.processQueue(); - - return new Promise((resolve, reject) => { - const checkQueue = () => { - const index = this.queue.indexOf(imageUrl); - if (index !== -1) { - setTimeout(checkQueue, 100); - } else { - resolve(this.processImage(imageUrl)); - } - }; - checkQueue(); - }); } + + this.queue.push(imageUrl); + this.processQueue(); + + return new Promise((resolve, reject) => { + const checkQueue = () => { + const index = this.queue.indexOf(imageUrl); + if (index !== -1) { + setTimeout(checkQueue, 100); + } else { + resolve(this.processImage(imageUrl)); + } + }; + checkQueue(); + }); } private async recognizeWithOpenAI( imageUrl: string ): Promise<{ title: string; description: string }> { - if (!this.runtime) { - throw new Error("Runtime is required for OpenAI image recognition"); - } - const isGif = imageUrl.toLowerCase().endsWith(".gif"); let imageData: Buffer | null = null; try { if (isGif) { - console.log("Processing GIF: extracting first frame"); const { filePath } = await this.extractFirstFrameFromGif(imageUrl); imageData = fs.readFileSync(filePath); @@ -139,19 +134,20 @@ export class ImageDescriptionService extends Service { const prompt = "Describe this image and give it a title. The first line should be the title, and then a line break, then a detailed description of the image. Respond with the format 'title\ndescription'"; - const text = await this.requestOpenAI( imageUrl, imageData, prompt, - isGif, - this.runtime + isGif ); - const title = text.split("\n")[0]; - const description = text.split("\n").slice(1).join("\n"); - return { title, description }; + + const [title, ...descriptionParts] = text.split("\n"); + return { + title, + description: descriptionParts.join("\n"), + }; } catch (error) { - console.error("Error in recognizeWithOpenAI:", error); + elizaLogger.error("Error in recognizeWithOpenAI:", error); throw error; } } @@ -160,50 +156,21 @@ export class ImageDescriptionService extends Service { imageUrl: string, imageData: Buffer, prompt: string, - isGif: boolean, - runtime: IAgentRuntime + isGif: boolean ): Promise { - for (let retryAttempts = 0; retryAttempts < 3; retryAttempts++) { + for (let attempt = 0; attempt < 3; attempt++) { try { - let body; - if (isGif) { - const base64Image = imageData.toString("base64"); - body = JSON.stringify({ - model: "gpt-4o-mini", - messages: [ - { - role: "user", - content: [ - { type: "text", text: prompt }, - { - type: "image_url", - image_url: { - url: `data:image/png;base64,${base64Image}`, - }, - }, - ], - }, - ], - max_tokens: 500, - }); - } else { - body = JSON.stringify({ - model: "gpt-4o-mini", - messages: [ - { - role: "user", - content: [ - { type: "text", text: prompt }, - { - type: "image_url", - image_url: { url: imageUrl }, - }, - ], - }, - ], - max_tokens: 300, - }); - } + const content = [ + { type: "text", text: prompt }, + { + type: "image_url", + image_url: { + url: isGif + ? `data:image/png;base64,${imageData.toString("base64")}` + : imageUrl, + }, + }, + ]; const response = await fetch( "https://api.openai.com/v1/chat/completions", @@ -211,9 +178,13 @@ export class ImageDescriptionService extends Service { method: "POST", headers: { "Content-Type": "application/json", - Authorization: `Bearer ${runtime.getSetting("OPENAI_API_KEY")}`, + Authorization: `Bearer ${this.runtime.getSetting("OPENAI_API_KEY")}`, }, - body: body, + body: JSON.stringify({ + model: "gpt-4o-mini", + messages: [{ role: "user", content }], + max_tokens: isGif ? 500 : 300, + }), } ); @@ -224,13 +195,11 @@ export class ImageDescriptionService extends Service { const data = await response.json(); return data.choices[0].message.content; } catch (error) { - console.log( - `Error during OpenAI request (attempt ${retryAttempts + 1}):`, + elizaLogger.error( + `OpenAI request failed (attempt ${attempt + 1}):`, error ); - if (retryAttempts === 2) { - throw error; - } + if (attempt === 2) throw error; } } throw new Error( @@ -239,30 +208,30 @@ export class ImageDescriptionService extends Service { } private async processQueue(): Promise { - if (this.processing || this.queue.length === 0) { - return; - } + if (this.processing || this.queue.length === 0) return; this.processing = true; - while (this.queue.length > 0) { const imageUrl = this.queue.shift(); await this.processImage(imageUrl); } - this.processing = false; } private async processImage( imageUrl: string ): Promise<{ title: string; description: string }> { - console.log("***** PROCESSING IMAGE", imageUrl); + if (!this.model || !this.processor || !this.tokenizer) { + throw new Error("Model components not initialized"); + } + + elizaLogger.log("Processing image:", imageUrl); const isGif = imageUrl.toLowerCase().endsWith(".gif"); let imageToProcess = imageUrl; try { if (isGif) { - console.log("Processing GIF: extracting first frame"); + elizaLogger.log("Extracting first frame from GIF"); const { filePath } = await this.extractFirstFrameFromGif(imageUrl); imageToProcess = filePath; @@ -270,44 +239,32 @@ export class ImageDescriptionService extends Service { const image = await RawImage.fromURL(imageToProcess); const visionInputs = await this.processor(image); - const prompts = this.processor.construct_prompts(""); const textInputs = this.tokenizer(prompts); - console.log("***** GENERATING"); - + elizaLogger.log("Generating image description"); const generatedIds = (await this.model.generate({ ...textInputs, ...visionInputs, max_new_tokens: 256, })) as Tensor; - console.log("***** GENERATED IDS", generatedIds); - const generatedText = this.tokenizer.batch_decode(generatedIds, { skip_special_tokens: false, })[0]; - console.log("***** GENERATED TEXT"); - console.log(generatedText); - const result = this.processor.post_process_generation( generatedText, "", image.size ); - console.log("***** RESULT"); - console.log(result); - const detailedCaption = result[""] as string; - - // TODO: handle this better - return { title: detailedCaption, description: detailedCaption }; } catch (error) { - console.error("Error in processImage:", error); + elizaLogger.error("Error processing image:", error); + throw error; } finally { if (isGif && imageToProcess !== imageUrl) { fs.unlinkSync(imageToProcess); @@ -323,19 +280,16 @@ export class ImageDescriptionService extends Service { frames: 1, outputType: "png", }); - const firstFrame = frameData[0]; - const tempDir = os.tmpdir(); - const tempFilePath = path.join(tempDir, `gif_frame_${Date.now()}.png`); + const tempFilePath = path.join( + os.tmpdir(), + `gif_frame_${Date.now()}.png` + ); return new Promise((resolve, reject) => { const writeStream = fs.createWriteStream(tempFilePath); - firstFrame.getImage().pipe(writeStream); - - writeStream.on("finish", () => { - resolve({ filePath: tempFilePath }); - }); - + frameData[0].getImage().pipe(writeStream); + writeStream.on("finish", () => resolve({ filePath: tempFilePath })); writeStream.on("error", reject); }); } From 8ff12696b6251d5a9be78bdf3b42a7b261dc457a Mon Sep 17 00:00:00 2001 From: RedBeard <90423049+RedBeardEth@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:07:34 +1100 Subject: [PATCH 23/26] init deploy unruggable memecoin Adds the deploy token action from Unruggable Memes --- .../plugin-starknet/src/actions/unruggable.ts | 152 +++++++++--------- packages/plugin-starknet/src/index.ts | 4 +- 2 files changed, 82 insertions(+), 74 deletions(-) diff --git a/packages/plugin-starknet/src/actions/unruggable.ts b/packages/plugin-starknet/src/actions/unruggable.ts index d558c27587d..7318ceb8e41 100644 --- a/packages/plugin-starknet/src/actions/unruggable.ts +++ b/packages/plugin-starknet/src/actions/unruggable.ts @@ -1,5 +1,3 @@ -// TODO: add unruggable - import { ActionExample, elizaLogger, @@ -12,13 +10,13 @@ import { } from "@ai16z/eliza"; import { composeContext } from "@ai16z/eliza"; import { generateObject } from "@ai16z/eliza"; -import { - executeSwap as executeAvnuSwap, - fetchQuotes, - QuoteRequest, -} from "@avnu/avnu-sdk"; -import { getStarknetAccount, validateSettings } from "../utils/index.ts"; +import { + getStarknetAccount, + getStarknetProvider, + validateSettings, +} from "../utils/index.ts"; +import { DeployData, Factory } from "@unruggable_starknet/core"; interface SwapContent { sellTokenAddress: string; @@ -26,66 +24,64 @@ interface SwapContent { sellAmount: string; } -export function isSwapContent(content: SwapContent): content is SwapContent { +export function isDeployTokenContent( + content: DeployData +): content is DeployData { // Validate types const validTypes = - typeof content.sellTokenAddress === "string" && - typeof content.buyTokenAddress === "string" && - typeof content.sellAmount === "string"; + typeof content.name === "string" && + typeof content.symbol === "string" && + typeof content.owner === "string" && + typeof content.initialSupply === "string"; if (!validTypes) { return false; } // Validate addresses (must be 32-bytes long with 0x prefix) const validAddresses = - content.sellTokenAddress.startsWith("0x") && - content.sellTokenAddress.length === 66 && - content.buyTokenAddress.startsWith("0x") && - content.buyTokenAddress.length === 66; + content.name.length > 2 && + content.symbol.length > 2 && + parseInt(content.initialSupply) > 0 && + content.owner.startsWith("0x") && + content.owner.length === 66; return validAddresses; } -const swapTemplate = `Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined. - -These are known addresses you will get asked to swap, use these addresses for sellTokenAddress and buyTokenAddress: -- BROTHER/brother/$brother: 0x03b405a98c9e795d427fe82cdeeeed803f221b52471e3a757574a2b4180793ee -- BTC/btc: 0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac -- ETH/eth: 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 -- STRK/strk: 0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d -- LORDS/lords: 0x0124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49 +const deployTemplate = `Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined. Example response: \`\`\`json { - "sellTokenAddress": "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", - "buyTokenAddress": "0x124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49", - "sellAmount": "1000000000000000000" + "name": "Brother", + "symbol": "BROTHER", + "owner": "0x0000000000000000000000000000000000000000000000000000000000000000", + "initialSupply": "1000000000000000000" } \`\`\` {{recentMessages}} -Extract the following information about the requested token swap: -- Sell token address -- Buy token address -- Amount to sell (in wei) +Extract the following information about the requested token deployment: +- Token Name +- Token Symbol +- Token Owner +- Token initial supply Respond with a JSON markdown block containing only the extracted values. Use null for any values that cannot be determined.`; export const deployToken: Action = { - name: "EXECUTE_STARKNET_SWAP", + name: "DEPLOY_STARKNET_UNRUGGABLE_MEME_TOKEN", similes: [ - "STARKNET_SWAP_TOKENS", - "STARKNET_TOKEN_SWAP", - "STARKNET_TRADE_TOKENS", - "STARKNET_EXCHANGE_TOKENS", + "DEPLOY_STARKNET_UNRUGGABLE_TOKEN", + "STARKNET_DEPLOY_MEMECOIN", + "STARKNET_CREATE_MEMECOIN", ], validate: async (runtime: IAgentRuntime, message: Memory) => { return validateSettings(runtime); }, description: - "Perform a token swap on starknet. Use this action when a user asks you to swap tokens anything.", + "Deploy an Unruggable Memecoin on Starknet. Use this action when a user asks you to deploy a new token on Starknet.", handler: async ( runtime: IAgentRuntime, message: Memory, @@ -93,62 +89,74 @@ export const deployToken: Action = { _options: { [key: string]: unknown }, callback?: HandlerCallback ): Promise => { - elizaLogger.log("Starting EXECUTE_STARKNET_SWAP handler..."); + elizaLogger.log( + "Starting DEPLOY_STARKNET_UNRUGGABLE_MEME_TOKEN handler..." + ); if (!state) { state = (await runtime.composeState(message)) as State; } else { state = await runtime.updateRecentMessageState(state); } - const swapContext = composeContext({ + const deployContext = composeContext({ state, - template: swapTemplate, + template: deployTemplate, }); const response = await generateObject({ runtime, - context: swapContext, + context: deployContext, modelClass: ModelClass.MEDIUM, }); + elizaLogger.log("init supply." + response.initialSupply); + elizaLogger.log(response); - if (!isSwapContent(response)) { - callback?.({ text: "Invalid swap content, please try again." }); + if (!isDeployTokenContent(response)) { + callback?.({ + text: "Invalid deployment content, please try again.", + }); return false; } try { - // Get quote - const quoteParams: QuoteRequest = { - sellTokenAddress: response.sellTokenAddress, - buyTokenAddress: response.buyTokenAddress, - sellAmount: BigInt(response.sellAmount), - }; - - const quote = await fetchQuotes(quoteParams); - - // Execute swap - const swapResult = await executeAvnuSwap( - getStarknetAccount(runtime), - quote[0], - { - slippage: 0.05, // 5% slippage - executeApprove: true, - } - ); + const provider = getStarknetProvider(runtime); + const account = getStarknetAccount(runtime); + + const factory = new Factory({ + provider, + chainId: await provider.getChainId(), + }); + + const { tokenAddress, calls } = factory.getDeployCalldata({ + name: response.name, + symbol: response.symbol, + owner: response.owner, + initialSupply: response.initialSupply, + }); elizaLogger.log( - "Swap completed successfully!" + swapResult.transactionHash + "Deployment has been initiated for coin: " + + response.name + + " at address: " + + tokenAddress ); + const tx = await account.execute(calls); + callback?.({ text: - "Swap completed successfully! tx: " + - swapResult.transactionHash, + "Token Deployment completed successfully!" + + response.symbol + + " deployed in tx: " + + tx.transaction_hash, }); return true; } catch (error) { - elizaLogger.error("Error during token swap:", error); - callback?.({ text: `Error during swap:` }); + elizaLogger.error("Error during token deployment:", error); + callback?.({ + text: `Error during deployment: ${error.message}`, + content: { error: error.message }, + }); return false; } }, @@ -157,13 +165,13 @@ export const deployToken: Action = { { user: "{{user1}}", content: { - text: "Swap 10 ETH for LORDS", + text: "Deploy a new token called Lords with the symbol LORDS, owned by 0x024BA6a4023fB90962bDfc2314F3B94372aa382D155291635fc3E6b777657A5B and initial supply of 1000000000000000000 on Starknet", }, }, { user: "{{agent}}", content: { - text: "Ok, I'll swap 10 ETH for LORDS", + text: "Ok, I'll deploy the Lords token to Starknet", }, }, ], @@ -171,13 +179,13 @@ export const deployToken: Action = { { user: "{{user1}}", content: { - text: "Swap 100 $lords on starknet", + text: "Deploy the SLINK coin to Starknet", }, }, { user: "{{agent}}", content: { - text: "Ok, I'll swap 100 $lords on starknet", + text: "Ok, I'll deploy your coin on Starknet", }, }, ], @@ -185,13 +193,13 @@ export const deployToken: Action = { { user: "{{user1}}", content: { - text: "Swap 0.5 BTC for LORDS", + text: "Create a new coin on Starknet", }, }, { user: "{{agent}}", content: { - text: "Ok, I'll swap 0.5 BTC for LORDS", + text: "Ok, I'll create a new coin for you on Starknet", }, }, ], diff --git a/packages/plugin-starknet/src/index.ts b/packages/plugin-starknet/src/index.ts index 5ed9e48db70..30211f77d7e 100644 --- a/packages/plugin-starknet/src/index.ts +++ b/packages/plugin-starknet/src/index.ts @@ -1,7 +1,7 @@ import { Plugin } from "@ai16z/eliza"; import { executeSwap } from "./actions/swap"; import transfer from "./actions/transfer"; - +import { deployToken } from "./actions/unruggable"; export const PROVIDER_CONFIG = { AVNU_API: "https://starknet.impulse.avnu.fi/v1", MAX_RETRIES: 3, @@ -20,7 +20,7 @@ export const PROVIDER_CONFIG = { export const starknetPlugin: Plugin = { name: "starknet", description: "Starknet Plugin for Eliza", - actions: [transfer, executeSwap], + actions: [transfer, executeSwap, deployToken], evaluators: [], providers: [], }; From 743aa784598e30675cb01e06acfa05d9b56c9a0f Mon Sep 17 00:00:00 2001 From: Deniz Date: Tue, 19 Nov 2024 18:19:44 +0300 Subject: [PATCH 24/26] Readme update WSL 2 link added. (#419) * WSL 2 instrunctions link added to readme.md * WSL2 instructions to readme.md added --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2d106824b1..c4fd3fa7b20 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ - [Node.js 22+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - [pnpm](https://pnpm.io/installation) -> **Note for Windows Users:** WSL is required +> **Note for Windows Users:** [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual) is required. ### Edit the .env file From 48d6fdbc966e11c4b10dfc666fdb3dbfc9dc3cc3 Mon Sep 17 00:00:00 2001 From: ponderingdemocritus Date: Wed, 20 Nov 2024 06:09:35 +1100 Subject: [PATCH 25/26] issues --- packages/client-discord/src/messages.ts | 6 ++++++ packages/client-discord/src/voice.ts | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/client-discord/src/messages.ts b/packages/client-discord/src/messages.ts index cab78a8ad26..25227e3e946 100644 --- a/packages/client-discord/src/messages.ts +++ b/packages/client-discord/src/messages.ts @@ -521,6 +521,12 @@ export class MessageManager { ServiceType.SPEECH_GENERATION ); + if (!speechService) { + throw new Error( + "Speech generation service not found" + ); + } + const audioStream = await speechService.generate( this.runtime, content.text diff --git a/packages/client-discord/src/voice.ts b/packages/client-discord/src/voice.ts index cf03ac45e52..db628447562 100644 --- a/packages/client-discord/src/voice.ts +++ b/packages/client-discord/src/voice.ts @@ -374,7 +374,6 @@ export class VoiceManager extends EventEmitter { audioStream, 10000000, async (buffer) => { - // console.log("buffer: ", buffer); const currentTime = Date.now(); const silenceDuration = currentTime - lastChunkTime; if (!buffer) { @@ -401,15 +400,16 @@ export class VoiceManager extends EventEmitter { this.runtime.getService( ServiceType.TRANSCRIPTION ); - console.log( - "transcriptionService: ", - transcriptionService - ); + + if (!transcriptionService) { + throw new Error( + "Transcription generation service not found" + ); + } const text = await transcriptionService.transcribe(wavBuffer); - console.log("transcribed text: ", text); transcriptionText += text; } catch (error) { console.error("Error processing audio stream:", error); From 4fafa3b9ac606024098001fd5e47be50da1c4377 Mon Sep 17 00:00:00 2001 From: Tarrence van As Date: Tue, 19 Nov 2024 14:50:21 -0500 Subject: [PATCH 26/26] Update adapters.md psql schema I found I needed these schemas (ported from the supabase migration) in order to successfully run an agent with the discord client --- docs/docs/packages/adapters.md | 43 +++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/docs/docs/packages/adapters.md b/docs/docs/packages/adapters.md index 1ad639f23bc..374dc1d17bc 100644 --- a/docs/docs/packages/adapters.md +++ b/docs/docs/packages/adapters.md @@ -425,9 +425,42 @@ async searchMemories(params: { ### PostgreSQL Schema ```sql --- migrations/20240318103238_remote_schema.sql CREATE EXTENSION IF NOT EXISTS vector; +CREATE TABLE IF NOT EXISTS accounts ( + id UUID PRIMARY KEY, + "createdAt" DEFAULT CURRENT_TIMESTAMP, + "name" TEXT, + "username" TEXT, + "email" TEXT NOT NULL, + "avatarUrl" TEXT, + "details" JSONB DEFAULT '{}'::"jsonb", + "is_agent" BOOLEAN DEFAULT false NOT NULL, + "location" TEXT, + "profile_line" TEXT, + "signed_tos" BOOLEAN DEFAULT false NOT NULL +); + +ALTER TABLE ONLY accounts ADD CONSTRAINT users_email_key UNIQUE (email); + +CREATE TABLE IF NOT EXISTS participants ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL, + "userId" UUID REFERENCES accounts(id), + "roomId" UUID REFERENCES rooms(id), + "userState" TEXT, -- For MUTED, NULL, or FOLLOWED states + "last_message_read" UUID +); + +ALTER TABLE ONLY participants ADD CONSTRAINT participants_id_key UNIQUE (id); +ALTER TABLE ONLY participants ADD CONSTRAINT participants_roomId_fkey FOREIGN KEY ("roomId") REFERENCES rooms(id); +ALTER TABLE ONLY participants ADD CONSTRAINT participants_userId_fkey FOREIGN KEY ("userId") REFERENCES accounts(id); + +CREATE TABLE rooms ( + id UUID PRIMARY KEY, + "createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + CREATE TABLE memories ( id UUID PRIMARY KEY, type TEXT NOT NULL, @@ -440,6 +473,9 @@ CREATE TABLE memories ( "createdAt" TIMESTAMP NOT NULL ); +ALTER TABLE ONLY memories ADD CONSTRAINT memories_roomId_fkey FOREIGN KEY ("roomId") REFERENCES rooms(id); +ALTER TABLE ONLY memories ADD CONSTRAINT memories_userId_fkey FOREIGN KEY ("userId") REFERENCES accounts(id); + CREATE INDEX memory_embedding_idx ON memories USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); @@ -452,6 +488,11 @@ CREATE TABLE relationships ( "createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); +ALTER TABLE ONLY relationships ADD CONSTRAINT friendships_id_key UNIQUE (id); +ALTER TABLE ONLY relationships ADD CONSTRAINT relationships_userA_fkey FOREIGN KEY ("userA") REFERENCES accounts(id); +ALTER TABLE ONLY relationships ADD CONSTRAINT relationships_userB_fkey FOREIGN KEY ("userB") REFERENCES accounts(id); +ALTER TABLE ONLY relationships ADD CONSTRAINT relationships_userId_fkey FOREIGN KEY ("userId") REFERENCES accounts(id); + CREATE TABLE goals ( id UUID PRIMARY KEY, "roomId" UUID NOT NULL,