diff --git a/agents/README.md b/agents/README.md index cc243513a..0685deb3e 100644 --- a/agents/README.md +++ b/agents/README.md @@ -37,9 +37,6 @@ yarn bot key-check --agentSDK 1.1.2 ### Agent SDK Version Management ```bash -# Setup Agent SDK versions -yarn agent-versions - # Test with specific version AGENT_SDK_VERSION=1.0.1 yarn bot key-check --agentSDK 1.0.1 ``` diff --git a/agents/bots/csx/index.ts b/agents/bots/csx/index.ts index 935b22f21..4740f924d 100644 --- a/agents/bots/csx/index.ts +++ b/agents/bots/csx/index.ts @@ -4,7 +4,7 @@ import { getTestUrl, type Group, type MessageContext, -} from "../../versions/agent-sdk"; +} from "@helpers/versions"; // Load .env file only in local development if (process.env.NODE_ENV !== "production") process.loadEnvFile(".env"); diff --git a/agents/bots/echo/index.ts b/agents/bots/echo/index.ts index 01867d1a9..823248094 100644 --- a/agents/bots/echo/index.ts +++ b/agents/bots/echo/index.ts @@ -1,5 +1,5 @@ import { APP_VERSION } from "@helpers/client"; -import { Agent, getTestUrl } from "../../versions/agent-sdk"; +import { Agent, getTestUrl } from "@helpers/versions"; // Load .env file only in local development if (process.env.NODE_ENV !== "production") process.loadEnvFile(".env"); diff --git a/agents/bots/gang/index.ts b/agents/bots/gang/index.ts index 3e09853e3..6f5e8374b 100644 --- a/agents/bots/gang/index.ts +++ b/agents/bots/gang/index.ts @@ -1,5 +1,5 @@ import { APP_VERSION } from "@helpers/client"; -import { Agent, getTestUrl, type Group } from "../../versions/agent-sdk"; +import { Agent, getTestUrl, type Group } from "@helpers/versions"; // Load .env file only in local development if (process.env.NODE_ENV !== "production") process.loadEnvFile(".env"); diff --git a/agents/bots/gm/index.ts b/agents/bots/gm/index.ts index 709e0aa70..f8c941f3b 100644 --- a/agents/bots/gm/index.ts +++ b/agents/bots/gm/index.ts @@ -1,5 +1,5 @@ import { APP_VERSION } from "@helpers/client"; -import { Agent, getTestUrl } from "../../versions/agent-sdk"; +import { Agent, getTestUrl } from "@helpers/versions"; // Load .env file only in local development if (process.env.NODE_ENV !== "production") process.loadEnvFile(".env"); diff --git a/agents/bots/key-check/handlers/debug.ts b/agents/bots/key-check/handlers/debug.ts index ad1b4695e..ca5b73e4d 100644 --- a/agents/bots/key-check/handlers/debug.ts +++ b/agents/bots/key-check/handlers/debug.ts @@ -1,6 +1,6 @@ import { createRequire } from "node:module"; +import { type MessageContext } from "@helpers/versions"; import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; -import { type MessageContext } from "../../../versions/agent-sdk"; // Get XMTP SDK version from package.json const require = createRequire(import.meta.url); diff --git a/agents/bots/key-check/handlers/forks.ts b/agents/bots/key-check/handlers/forks.ts index f9f51091f..c85116961 100644 --- a/agents/bots/key-check/handlers/forks.ts +++ b/agents/bots/key-check/handlers/forks.ts @@ -1,5 +1,5 @@ +import { type Group, type MessageContext } from "@helpers/versions"; import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; -import { type Group, type MessageContext } from "../../../versions/agent-sdk"; interface ForkDebugInfo { epoch: bigint; diff --git a/agents/bots/key-check/handlers/groups.ts b/agents/bots/key-check/handlers/groups.ts index 3a500e6e6..3b0a3d989 100644 --- a/agents/bots/key-check/handlers/groups.ts +++ b/agents/bots/key-check/handlers/groups.ts @@ -1,10 +1,10 @@ -import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; import { type Group, type IdentifierKind, type MessageContext, type PermissionLevel, -} from "../../../versions/agent-sdk"; +} from "@helpers/versions"; +import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; export class GroupHandlers { async handleGroupMembers(ctx: MessageContext): Promise { diff --git a/agents/bots/key-check/handlers/loadtest.ts b/agents/bots/key-check/handlers/loadtest.ts index 518df065e..aea9eda16 100644 --- a/agents/bots/key-check/handlers/loadtest.ts +++ b/agents/bots/key-check/handlers/loadtest.ts @@ -1,5 +1,5 @@ +import { type MessageContext } from "@helpers/versions"; import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; -import { type MessageContext } from "../../../versions/agent-sdk"; export class LoadTestHandlers { constructor(private agent: any) {} diff --git a/agents/bots/key-check/handlers/ux.ts b/agents/bots/key-check/handlers/ux.ts index b5589e8c9..ba3d0502f 100644 --- a/agents/bots/key-check/handlers/ux.ts +++ b/agents/bots/key-check/handlers/ux.ts @@ -1,3 +1,4 @@ +import { type MessageContext } from "@helpers/versions"; import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; import { ContentTypeRemoteAttachment, @@ -5,7 +6,6 @@ import { } from "@xmtp/content-type-remote-attachment"; import { ContentTypeWalletSendCalls } from "@xmtp/content-type-wallet-send-calls"; import { USDCHandler } from "../../../utils/usdc"; -import { type MessageContext } from "../../../versions/agent-sdk"; export class UxHandlers { private usdcHandler: USDCHandler; diff --git a/agents/bots/key-check/index.ts b/agents/bots/key-check/index.ts index 40255b6bd..5251e5a4a 100644 --- a/agents/bots/key-check/index.ts +++ b/agents/bots/key-check/index.ts @@ -1,15 +1,6 @@ -import { APP_VERSION, createSigner } from "@helpers/client"; -import { - ContentTypeMarkdown, - MarkdownCodec, -} from "@xmtp/content-type-markdown"; -import { ReactionCodec } from "@xmtp/content-type-reaction"; -import { - AttachmentCodec, - RemoteAttachmentCodec, -} from "@xmtp/content-type-remote-attachment"; -import { ReplyCodec } from "@xmtp/content-type-reply"; -import { WalletSendCallsCodec } from "@xmtp/content-type-wallet-send-calls"; +import { APP_VERSION } from "@helpers/client"; +import { Agent, getTestUrl, type MessageContext } from "@helpers/versions"; +import { ContentTypeMarkdown } from "@xmtp/content-type-markdown"; import { ActionBuilder, getRegisteredActions, @@ -23,11 +14,6 @@ import { } from "../../utils/inline-actions/inline-actions"; import { ActionsCodec } from "../../utils/inline-actions/types/ActionsContent"; import { IntentCodec } from "../../utils/inline-actions/types/IntentContent"; -import { - Agent, - getTestUrl, - type MessageContext, -} from "../../versions/agent-sdk"; import { DebugHandlers } from "./handlers/debug"; import { ForksHandlers } from "./handlers/forks"; import { GroupHandlers } from "./handlers/groups"; diff --git a/agents/monitoring/agents-dms.test.ts b/agents/monitoring/agents-dms.test.ts index ed28c8b6d..a7a7541cb 100644 --- a/agents/monitoring/agents-dms.test.ts +++ b/agents/monitoring/agents-dms.test.ts @@ -1,13 +1,13 @@ import { streamTimeout } from "@helpers/client"; import { sendMetric, type ResponseMetricTags } from "@helpers/datadog"; import { verifyAgentMessageStream } from "@helpers/streams"; -import { setupDurationTracking } from "@helpers/vitest"; -import { getWorkers } from "@workers/manager"; import { IdentifierKind, type Conversation, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { setupDurationTracking } from "@helpers/vitest"; +import { getWorkers } from "@workers/manager"; import { describe, expect, it } from "vitest"; import productionAgents from "./agents"; import { type AgentConfig } from "./helper"; diff --git a/agents/monitoring/agents-stress.test.ts b/agents/monitoring/agents-stress.test.ts index 5f7980463..dce2634f0 100644 --- a/agents/monitoring/agents-stress.test.ts +++ b/agents/monitoring/agents-stress.test.ts @@ -1,7 +1,7 @@ +import { IdentifierKind, type XmtpEnv } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { getInboxes } from "@inboxes/utils"; import { getWorkers } from "@workers/manager"; -import { IdentifierKind, type XmtpEnv } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; import productionAgents from "./agents"; import { type AgentConfig } from "./helper"; diff --git a/agents/monitoring/agents-tagged.test.ts b/agents/monitoring/agents-tagged.test.ts index cc9b17635..d3db56c3e 100644 --- a/agents/monitoring/agents-tagged.test.ts +++ b/agents/monitoring/agents-tagged.test.ts @@ -1,14 +1,14 @@ import { streamTimeout } from "@helpers/client"; import { sendMetric, type ResponseMetricTags } from "@helpers/datadog"; import { verifyAgentMessageStream } from "@helpers/streams"; -import { setupDurationTracking } from "@helpers/vitest"; -import { getInboxes } from "@inboxes/utils"; -import { getWorkers } from "@workers/manager"; import { IdentifierKind, type Conversation, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { setupDurationTracking } from "@helpers/vitest"; +import { getInboxes } from "@inboxes/utils"; +import { getWorkers } from "@workers/manager"; import { describe, expect, it } from "vitest"; import productionAgents from "./agents"; import { type AgentConfig } from "./helper"; diff --git a/agents/monitoring/agents-text.test.ts b/agents/monitoring/agents-text.test.ts index 6a72b966e..8995d4c1a 100644 --- a/agents/monitoring/agents-text.test.ts +++ b/agents/monitoring/agents-text.test.ts @@ -1,13 +1,13 @@ import { streamTimeout } from "@helpers/client"; import { sendMetric, type ResponseMetricTags } from "@helpers/datadog"; import { verifyAgentMessageStream } from "@helpers/streams"; -import { setupDurationTracking } from "@helpers/vitest"; -import { getWorkers } from "@workers/manager"; import { IdentifierKind, type Conversation, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { setupDurationTracking } from "@helpers/vitest"; +import { getWorkers } from "@workers/manager"; import { describe, expect, it } from "vitest"; import productionAgents from "./agents"; import { type AgentConfig } from "./helper"; diff --git a/agents/monitoring/agents-untagged.test.ts b/agents/monitoring/agents-untagged.test.ts index 2f93bf43e..af2591292 100644 --- a/agents/monitoring/agents-untagged.test.ts +++ b/agents/monitoring/agents-untagged.test.ts @@ -1,14 +1,14 @@ import { streamTimeout } from "@helpers/client"; import { sendMetric, type ResponseMetricTags } from "@helpers/datadog"; import { verifyAgentMessageStream } from "@helpers/streams"; -import { setupDurationTracking } from "@helpers/vitest"; -import { getInboxes } from "@inboxes/utils"; -import { getWorkers } from "@workers/manager"; import { IdentifierKind, type Conversation, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { setupDurationTracking } from "@helpers/vitest"; +import { getInboxes } from "@inboxes/utils"; +import { getWorkers } from "@workers/manager"; import { describe, expect, it } from "vitest"; import productionAgents from "./agents"; import { type AgentConfig } from "./helper"; diff --git a/agents/monitoring/endpoint.ts b/agents/monitoring/endpoint.ts index 35090e830..b72d502df 100644 --- a/agents/monitoring/endpoint.ts +++ b/agents/monitoring/endpoint.ts @@ -7,7 +7,7 @@ import { type LogLevel, type Signer, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; import { fromString } from "uint8arrays"; import { createWalletClient, http, toBytes } from "viem"; import { privateKeyToAccount } from "viem/accounts"; diff --git a/agents/utils/inline-actions/inline-actions.ts b/agents/utils/inline-actions/inline-actions.ts index a0f674d7e..cbcb22a52 100644 --- a/agents/utils/inline-actions/inline-actions.ts +++ b/agents/utils/inline-actions/inline-actions.ts @@ -1,4 +1,4 @@ -import type { AgentMiddleware, MessageContext } from "../../versions/agent-sdk"; +import type { AgentMiddleware, MessageContext } from "@helpers/versions"; import { ContentTypeActions, type Action, diff --git a/agents/versions/README.md b/agents/versions/README.md deleted file mode 100644 index 17e3765fe..000000000 --- a/agents/versions/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# SDK Version Management - -## Agent SDK Version Management - -```bash -# Setup Agent SDK versions -yarn agent-versions - -# Test with specific Agent SDK version -yarn bot key-check --agentSDK 1.1.2 -``` - -### Agent SDK Upgrade Procedure - -When upgrading Agent SDK versions: - -1. Add `@xmtp/agent-sdk-X.X.X` to package.json -2. Add import for new Agent SDK version to `versions/node-sdk-agent-versions.ts` -3. Run `yarn agent-versions` to link the new versions -4. Test your agents with the new version - -### Agent SDK Version Mapping - -Versions are mapped in `versions/node-sdk-agent-versions.ts`: - -```typescript -export const AgentVersionList = [ - { - Agent: Agent115, - MessageContext: MessageContext115, - agentSDK: "1.1.5", - nodeSDK: "4.2.0", // Agent SDK 1.1.5 uses node-sdk ^4.2.2 - nodeBindings: "1.5.2", - auto: true, // Include in automated testing - }, - // ... more versions -]; -``` - -### Agent SDK Package Aliases - -Multiple Agent SDK versions installed via npm aliases: - -```json -{ - "dependencies": { - "@xmtp/agent-sdk-1.0.0": "npm:@xmtp/agent-sdk@1.0.0", - "@xmtp/agent-sdk-1.1.2": "npm:@xmtp/agent-sdk@1.1.2", - "@xmtp/agent-sdk-1.1.5": "npm:@xmtp/agent-sdk@1.1.5" - } -} -``` - -### Agent SDK Dynamic Linking - -`yarn agent-versions` creates symlinks: - -```bash -node_modules/@xmtp/ -├── agent-sdk -> agent-sdk-1.1.5/ # Points to latest version -├── agent-sdk-1.0.0/ -├── agent-sdk-1.1.2/ -└── agent-sdk-1.1.5/ -``` - -### Testing Agent SDK Versions - -```bash -# Test with specific version -yarn bot key-check --agentSDK 1.1.2 - -# Test with latest version (default) -yarn bot key-check -``` diff --git a/agents/versions/agent-sdk.ts b/agents/versions/agent-sdk.ts deleted file mode 100644 index 715e34ba1..000000000 --- a/agents/versions/agent-sdk.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { - Agent as Agent12, - MessageContext as MessageContext12, -} from "@xmtp/agent-sdk-1.1.2"; -import { - Agent as Agent17, // 1.1.7 - MessageContext as MessageContext17, -} from "@xmtp/agent-sdk-1.1.7"; -import { - Agent as Agent110, // 1.1.10 (latest) - MessageContext as MessageContext110, -} from "@xmtp/agent-sdk-1.1.10"; - -// Export the latest version as default -export { - Agent, - MessageContext, - type AgentMiddleware, - type Group, - type IdentifierKind, - type PermissionLevel, -} from "@xmtp/agent-sdk-1.1.10"; - -export { getTestUrl } from "@xmtp/agent-sdk-1.1.10/debug"; - -export const AgentVersionList = [ - { - Agent: Agent110, - MessageContext: MessageContext110, - agentSDK: "1.1.10", - nodeSDK: "4.3.0", - nodeBindings: "1.6.0-rc2", - auto: true, - }, - { - Agent: Agent17, - MessageContext: MessageContext17, - agentSDK: "1.1.7", - nodeSDK: "4.1.0", - nodeBindings: "1.4.0", - auto: true, - }, - { - Agent: Agent12, - MessageContext: MessageContext12, - agentSDK: "1.1.2", - nodeSDK: "4.1.0", - nodeBindings: "1.4.0", - auto: true, - }, -]; - -export const getActiveAgentVersion = (index = 0) => { - const versions = getAgentVersions(); - let latestVersion = versions[index]; - - if (process.env.AGENT_SDK_VERSION) { - latestVersion = versions.find( - (v) => v.agentSDK === process.env.AGENT_SDK_VERSION, - ) as (typeof AgentVersionList)[number]; - if (!latestVersion) { - throw new Error( - `Agent SDK version ${process.env.AGENT_SDK_VERSION} not found`, - ); - } - } - return latestVersion; -}; - -export const getAgentVersions = (filterAuto: boolean = true) => { - return filterAuto ? AgentVersionList.filter((v) => v.auto) : AgentVersionList; -}; - -export const checkAgentVersionFormat = ( - versionList: typeof AgentVersionList, -) => { - // Agent SDK versions should not include - because it messes up with the worker name-installation conversion - for (const version of versionList) { - if (version.agentSDK.includes("-")) { - throw new Error(`Agent SDK version ${version.agentSDK} contains -`); - } - } -}; diff --git a/agents/versions/cli.ts b/agents/versions/cli.ts deleted file mode 100644 index 8368c2bfc..000000000 --- a/agents/versions/cli.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { execSync } from "child_process"; -import * as fs from "node:fs"; -import * as path from "node:path"; -import { AgentVersionList } from "./agent-sdk"; - -function showHelp() { - console.log(` -XMTP Agent SDK Versions CLI - Agent SDK version management and setup - -USAGE: - yarn agent-versions [options] - -OPTIONS: - --clean Clean package.json imports and node_modules before setup - -h, --help Show this help message - -DESCRIPTION: - Sets up Agent SDK version testing by creating symlinks for different - XMTP Agent SDK versions. This enables testing agents across multiple - Agent SDK versions simultaneously. - -EXAMPLES: - yarn agent-versions - yarn agent-versions --clean - yarn agent-versions --help - -For more information, see: agents/workers/README.md -`); -} - -function createAgentSDKSymlinks() { - const xmtpDir = path.join(process.cwd(), "node_modules", "@xmtp"); - - if (!fs.existsSync(xmtpDir)) { - console.error("@xmtp directory not found"); - process.exit(1); - } - - console.log("Creating Agent SDK symlinks..."); - - let hasErrors = false; - - for (const config of AgentVersionList) { - if (!config.agentSDK) continue; - - const agentSDKDir = path.join(xmtpDir, `agent-sdk-${config.agentSDK}`); - - if (!fs.existsSync(agentSDKDir)) { - console.error( - `❌ Agent SDK directory not found: ${config.agentSDK} (${agentSDKDir})`, - ); - hasErrors = true; - continue; - } - - // Create symlink for agent-sdk -> agent-sdk-{version} - const symlinkTarget = path.join(xmtpDir, "agent-sdk"); - const relativeAgentSDKPath = path.relative(xmtpDir, agentSDKDir); - - // Remove existing symlink or directory - if (fs.existsSync(symlinkTarget)) { - const stats = fs.lstatSync(symlinkTarget); - if (stats.isSymbolicLink()) { - fs.unlinkSync(symlinkTarget); - } else { - fs.rmSync(symlinkTarget, { recursive: true, force: true }); - } - } - - try { - fs.symlinkSync(relativeAgentSDKPath, symlinkTarget); - console.log(`✅ Linked agent-sdk -> agent-sdk-${config.agentSDK}`); - } catch (error) { - console.error( - `❌ Error linking agent-sdk-${config.agentSDK}: ${String(error)}`, - ); - hasErrors = true; - } - } - - if (hasErrors) { - console.error("❌ Failed to create all required Agent SDK symlinks"); - process.exit(1); - } - - console.log("✅ Agent SDK version setup complete!"); -} - -function cleanPackageJson() { - const packageJsonPath = path.join(process.cwd(), "package.json"); - - if (!fs.existsSync(packageJsonPath)) return; - - try { - const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); - - if (packageJson.imports) { - delete packageJson.imports; - fs.writeFileSync( - packageJsonPath, - JSON.stringify(packageJson, null, 2) + "\n", - ); - console.log('Removed "imports" field from package.json'); - } - } catch (error) { - console.error(`Error processing package.json: ${String(error)}`); - } -} - -function main() { - const args = process.argv.slice(2); - - if (args.includes("--help") || args.includes("-h")) { - showHelp(); - return; - } - - const shouldClean = args.includes("--clean"); - - if (shouldClean) { - cleanPackageJson(); - } - - if (!process.env.GITHUB_ACTIONS) { - const nodeModulesDir = path.join(process.cwd(), "node_modules"); - if (fs.existsSync(nodeModulesDir)) { - fs.rmSync(nodeModulesDir, { recursive: true, force: true }); - } - execSync("yarn install", { stdio: "inherit" }); - } - - createAgentSDKSymlinks(); - console.log("Done"); -} - -main(); diff --git a/cli/gen.ts b/cli/gen.ts index 0344d870d..b894f2a15 100644 --- a/cli/gen.ts +++ b/cli/gen.ts @@ -2,7 +2,7 @@ import * as crypto from "crypto"; import * as fs from "fs"; import { APP_VERSION } from "@helpers/client"; import { ProgressBar } from "@helpers/logger"; -import { Client, type XmtpEnv } from "@workers/node-sdk"; +import { Client, type XmtpEnv } from "@helpers/versions"; import { createSigner, generateEncryptionKeyHex, diff --git a/cli/sdk-versions.ts b/cli/sdk-versions.ts deleted file mode 100644 index 8f522221c..000000000 --- a/cli/sdk-versions.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { execSync } from "child_process"; -import * as fs from "node:fs"; -import * as path from "node:path"; -import { VersionList } from "../workers/node-sdk"; - -function showHelp() { - console.log(` -XMTP Versions CLI - SDK version management and setup - -USAGE: - yarn versions [options] - -OPTIONS: - --clean Clean package.json imports and node_modules before setup - -h, --help Show this help message - -DESCRIPTION: - Sets up SDK version testing by creating bindings symlinks for different - XMTP SDK versions. This enables testing across multiple SDK versions - simultaneously. - -EXAMPLES: - yarn versions - yarn versions --clean - yarn versions --help - -For more information, see: cli/readme.md -`); -} - -function createBindingsSymlinks() { - const xmtpDir = path.join(process.cwd(), "node_modules", "@xmtp"); - - if (!fs.existsSync(xmtpDir)) { - console.error("@xmtp directory not found"); - process.exit(1); - } - - console.log("Creating bindings symlinks..."); - - let hasErrors = false; - - for (const config of VersionList) { - if (!config.nodeSDK) continue; - - const sdkDir = path.join(xmtpDir, `node-sdk-${config.nodeSDK}`); - const bindingsDir = path.join( - xmtpDir, - `node-bindings-${config.nodeBindings}`, - ); - - if (!fs.existsSync(sdkDir)) { - console.error( - `❌ SDK directory not found: ${config.nodeSDK} (${sdkDir})`, - ); - hasErrors = true; - continue; - } - - if (!fs.existsSync(bindingsDir)) { - console.error( - `❌ Bindings directory not found: ${config.nodeBindings} (${bindingsDir})`, - ); - hasErrors = true; - continue; - } - - const sdkNodeModulesXmtpDir = path.join(sdkDir, "node_modules", "@xmtp"); - const symlinkTarget = path.join(sdkNodeModulesXmtpDir, "node-bindings"); - - // Remove existing - if (fs.existsSync(path.join(sdkDir, "node_modules"))) { - fs.rmSync(path.join(sdkDir, "node_modules"), { - recursive: true, - force: true, - }); - } - - // Create directories and symlink - fs.mkdirSync(sdkNodeModulesXmtpDir, { recursive: true }); - - try { - const relativeBindingsPath = path.relative( - sdkNodeModulesXmtpDir, - bindingsDir, - ); - fs.symlinkSync(relativeBindingsPath, symlinkTarget); - console.log(`${config.nodeSDK} -> ${config.nodeBindings} ✅`); - } catch (error) { - console.error(`Error linking ${config.nodeSDK}: ${String(error)}`); - hasErrors = true; - } - } - - if (hasErrors) { - console.error("❌ Failed to create all required symlinks"); - process.exit(1); - } -} - -function cleanPackageJson() { - const packageJsonPath = path.join(process.cwd(), "package.json"); - - if (!fs.existsSync(packageJsonPath)) return; - - try { - const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); - - if (packageJson.imports) { - delete packageJson.imports; - fs.writeFileSync( - packageJsonPath, - JSON.stringify(packageJson, null, 2) + "\n", - ); - console.log('Removed "imports" field from package.json'); - } - } catch (error) { - console.error(`Error processing package.json: ${String(error)}`); - } -} - -function main() { - const args = process.argv.slice(2); - - if (args.includes("--help") || args.includes("-h")) { - showHelp(); - return; - } - - const shouldClean = args.includes("--clean"); - - if (shouldClean) { - cleanPackageJson(); - } - - if (!process.env.GITHUB_ACTIONS) { - const nodeModulesDir = path.join(process.cwd(), "node_modules"); - if (fs.existsSync(nodeModulesDir)) { - try { - fs.rmSync(nodeModulesDir, { recursive: true, force: true }); - } catch (error) { - console.warn( - `Warning: Could not remove node_modules directory: ${String(error)}`, - ); - console.log("Continuing with existing node_modules..."); - } - } - try { - execSync("yarn install", { stdio: "inherit" }); - } catch (error) { - console.warn(`Warning: Could not run yarn install: ${String(error)}`); - console.log("Continuing with existing installation..."); - } - } - - createBindingsSymlinks(); - console.log("✅ Node SDK version setup complete!"); - - console.log("Done"); -} - -main(); diff --git a/cli/send.ts b/cli/send.ts index 3b25c819c..616991f8b 100644 --- a/cli/send.ts +++ b/cli/send.ts @@ -4,7 +4,7 @@ import { type Group, type LogLevel, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; import "dotenv/config"; import fs from "node:fs"; import path from "node:path"; diff --git a/cli/versions.ts b/cli/versions.ts new file mode 100644 index 000000000..2ce35fe69 --- /dev/null +++ b/cli/versions.ts @@ -0,0 +1,358 @@ +import { execSync } from "child_process"; +import * as fs from "node:fs"; +import * as path from "node:path"; +import { AgentVersionList, VersionList } from "@helpers/versions"; + +function showHelp() { + console.log(` +XMTP Versions CLI - SDK and Agent SDK version management and setup + +USAGE: + yarn versions [options] + +OPTIONS: + --clean Clean package.json imports and node_modules before setup + -h, --help Show this help message + +DESCRIPTION: + Sets up SDK version testing by creating symlinks for different XMTP SDK versions + and Agent SDK versions. This enables testing across multiple SDK versions + simultaneously. + + - Creates bindings symlinks for node-sdk versions + - Creates node-sdk symlinks for agent-sdk versions + +EXAMPLES: + yarn versions + yarn versions --clean + yarn versions --help + +For more information, see: cli/README.md +`); +} + +function createBindingsSymlinks() { + const xmtpDir = path.join(process.cwd(), "node_modules", "@xmtp"); + + if (!fs.existsSync(xmtpDir)) { + console.error("@xmtp directory not found"); + process.exit(1); + } + + console.log("Creating bindings symlinks..."); + console.log(" (Linking node-sdk versions to their required bindings)"); + + let hasErrors = false; + + for (const config of VersionList) { + if (!config.nodeSDK) continue; + + const sdkDir = path.join(xmtpDir, `node-sdk-${config.nodeSDK}`); + const bindingsDir = path.join( + xmtpDir, + `node-bindings-${config.nodeBindings}`, + ); + + if (!fs.existsSync(sdkDir)) { + console.error( + `❌ SDK directory not found: ${config.nodeSDK} (${sdkDir})`, + ); + hasErrors = true; + continue; + } + + if (!fs.existsSync(bindingsDir)) { + console.error( + `❌ Bindings directory not found: ${config.nodeBindings} (${bindingsDir})`, + ); + hasErrors = true; + continue; + } + + const sdkNodeModulesXmtpDir = path.join(sdkDir, "node_modules", "@xmtp"); + const symlinkTarget = path.join(sdkNodeModulesXmtpDir, "node-bindings"); + + // Check if symlink already exists and points to correct target + let needsUpdate = true; + if (fs.existsSync(symlinkTarget)) { + try { + const stats = fs.lstatSync(symlinkTarget); + if (stats.isSymbolicLink()) { + const currentTarget = fs.readlinkSync(symlinkTarget); + const expectedRelativePath = path.relative( + sdkNodeModulesXmtpDir, + bindingsDir, + ); + // Normalize paths for comparison + if ( + path.resolve(sdkNodeModulesXmtpDir, currentTarget) === + path.resolve(sdkNodeModulesXmtpDir, expectedRelativePath) + ) { + needsUpdate = false; + } + } + } catch { + // If we can't read the symlink, we'll recreate it + } + } + + if (needsUpdate) { + // Remove existing node_modules/@xmtp directory if it exists + if (fs.existsSync(sdkNodeModulesXmtpDir)) { + try { + // Only remove the symlink, not the entire directory + if (fs.existsSync(symlinkTarget)) { + const stats = fs.lstatSync(symlinkTarget); + if (stats.isSymbolicLink()) { + fs.unlinkSync(symlinkTarget); + } else { + fs.rmSync(symlinkTarget, { recursive: true, force: true }); + } + } + // Remove parent directories if empty + if (fs.existsSync(sdkNodeModulesXmtpDir)) { + try { + fs.rmdirSync(sdkNodeModulesXmtpDir); + } catch { + // Directory not empty, that's fine + } + } + } catch { + // If removal fails, try removing the entire node_modules + if (fs.existsSync(path.join(sdkDir, "node_modules"))) { + fs.rmSync(path.join(sdkDir, "node_modules"), { + recursive: true, + force: true, + }); + } + } + } + + // Create directories and symlink + fs.mkdirSync(sdkNodeModulesXmtpDir, { recursive: true }); + + try { + const relativeBindingsPath = path.relative( + sdkNodeModulesXmtpDir, + bindingsDir, + ); + fs.symlinkSync(relativeBindingsPath, symlinkTarget); + console.log( + `✅ node-sdk-${config.nodeSDK} → node-bindings-${config.nodeBindings}`, + ); + } catch (error) { + console.error( + `❌ Error linking node-sdk-${config.nodeSDK} to node-bindings-${config.nodeBindings}: ${String(error)}`, + ); + hasErrors = true; + } + } else { + console.log( + `⏭️ node-sdk-${config.nodeSDK} → node-bindings-${config.nodeBindings} (already linked)`, + ); + } + } + + if (hasErrors) { + console.error("❌ Failed to create all required bindings symlinks"); + process.exit(1); + } + + console.log("✅ Node SDK bindings setup complete!"); +} + +function createAgentSDKSymlinks() { + const xmtpDir = path.join(process.cwd(), "node_modules", "@xmtp"); + + if (!fs.existsSync(xmtpDir)) { + console.error("@xmtp directory not found"); + process.exit(1); + } + + console.log("Creating Agent SDK symlinks..."); + console.log( + " (Linking agent-sdk versions to their required node-sdk versions)", + ); + + let hasErrors = false; + + for (const config of AgentVersionList) { + if (!config.agentSDK || !config.nodeSDK) continue; + + const agentSDKDir = path.join(xmtpDir, `agent-sdk-${config.agentSDK}`); + const nodeSDKDir = path.join(xmtpDir, `node-sdk-${config.nodeSDK}`); + + if (!fs.existsSync(agentSDKDir)) { + console.error( + `❌ Agent SDK directory not found: ${config.agentSDK} (${agentSDKDir})`, + ); + hasErrors = true; + continue; + } + + if (!fs.existsSync(nodeSDKDir)) { + console.error( + `❌ Node SDK directory not found: ${config.nodeSDK} (${nodeSDKDir})`, + ); + hasErrors = true; + continue; + } + + const agentSDKNodeModulesXmtpDir = path.join( + agentSDKDir, + "node_modules", + "@xmtp", + ); + const symlinkTarget = path.join(agentSDKNodeModulesXmtpDir, "node-sdk"); + + // Check if symlink already exists and points to correct target + let needsUpdate = true; + if (fs.existsSync(symlinkTarget)) { + try { + const stats = fs.lstatSync(symlinkTarget); + if (stats.isSymbolicLink()) { + const currentTarget = fs.readlinkSync(symlinkTarget); + const expectedRelativePath = path.relative( + agentSDKNodeModulesXmtpDir, + nodeSDKDir, + ); + // Normalize paths for comparison + if ( + path.resolve(agentSDKNodeModulesXmtpDir, currentTarget) === + path.resolve(agentSDKNodeModulesXmtpDir, expectedRelativePath) + ) { + needsUpdate = false; + } + } + } catch { + // If we can't read the symlink, we'll recreate it + } + } + + if (needsUpdate) { + // Remove existing node_modules/@xmtp directory if it exists + if (fs.existsSync(agentSDKNodeModulesXmtpDir)) { + try { + // Only remove the symlink, not the entire directory + if (fs.existsSync(symlinkTarget)) { + const stats = fs.lstatSync(symlinkTarget); + if (stats.isSymbolicLink()) { + fs.unlinkSync(symlinkTarget); + } else { + fs.rmSync(symlinkTarget, { recursive: true, force: true }); + } + } + // Remove parent directories if empty + if (fs.existsSync(agentSDKNodeModulesXmtpDir)) { + try { + fs.rmdirSync(agentSDKNodeModulesXmtpDir); + } catch { + // Directory not empty, that's fine + } + } + } catch { + // If removal fails, try removing the entire node_modules + if (fs.existsSync(path.join(agentSDKDir, "node_modules"))) { + fs.rmSync(path.join(agentSDKDir, "node_modules"), { + recursive: true, + force: true, + }); + } + } + } + + // Create directories and symlink + fs.mkdirSync(agentSDKNodeModulesXmtpDir, { recursive: true }); + + try { + const relativeNodeSDKPath = path.relative( + agentSDKNodeModulesXmtpDir, + nodeSDKDir, + ); + fs.symlinkSync(relativeNodeSDKPath, symlinkTarget); + console.log( + `✅ agent-sdk-${config.agentSDK} → node-sdk-${config.nodeSDK}`, + ); + } catch (error) { + console.error( + `❌ Error linking agent-sdk-${config.agentSDK} to node-sdk-${config.nodeSDK}: ${String(error)}`, + ); + hasErrors = true; + } + } else { + console.log( + `⏭️ agent-sdk-${config.agentSDK} → node-sdk-${config.nodeSDK} (already linked)`, + ); + } + } + + if (hasErrors) { + console.error("❌ Failed to create all required Agent SDK symlinks"); + process.exit(1); + } + + console.log("✅ Agent SDK version setup complete!"); +} + +function cleanPackageJson() { + const packageJsonPath = path.join(process.cwd(), "package.json"); + + if (!fs.existsSync(packageJsonPath)) return; + + try { + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")); + + if (packageJson.imports) { + delete packageJson.imports; + fs.writeFileSync( + packageJsonPath, + JSON.stringify(packageJson, null, 2) + "\n", + ); + console.log('Removed "imports" field from package.json'); + } + } catch (error) { + console.error(`Error processing package.json: ${String(error)}`); + } +} + +function main() { + const args = process.argv.slice(2); + + if (args.includes("--help") || args.includes("-h")) { + showHelp(); + return; + } + + const shouldClean = args.includes("--clean"); + + if (shouldClean) { + cleanPackageJson(); + if (!process.env.GITHUB_ACTIONS) { + const nodeModulesDir = path.join(process.cwd(), "node_modules"); + if (fs.existsSync(nodeModulesDir)) { + try { + fs.rmSync(nodeModulesDir, { recursive: true, force: true }); + } catch (error) { + console.warn( + `Warning: Could not remove node_modules directory: ${String(error)}`, + ); + console.log("Continuing with existing node_modules..."); + } + } + try { + execSync("yarn install", { stdio: "inherit" }); + } catch (error) { + console.warn(`Warning: Could not run yarn install: ${String(error)}`); + console.log("Continuing with existing installation..."); + } + } + } + + // Always run both operations + createBindingsSymlinks(); + createAgentSDKSymlinks(); + console.log("✅ All version setup complete!"); + console.log("Done"); +} + +main(); diff --git a/deploy-metadata.json b/deploy-metadata.json index e39482c54..a3215c7cb 100644 --- a/deploy-metadata.json +++ b/deploy-metadata.json @@ -1 +1 @@ -{"deployedAt": "2025-11-05T00:34:33Z", "version": "0.4.7"} +{ "deployedAt": "2025-11-05T00:34:33Z", "version": "0.4.7" } diff --git a/forks/config.ts b/forks/config.ts index 805d988a1..21cfae648 100644 --- a/forks/config.ts +++ b/forks/config.ts @@ -1,4 +1,4 @@ -import { getActiveVersion } from "@workers/node-sdk"; +import { getActiveVersion } from "@helpers/versions"; // Fork matrix parameters - shared between test and CLI export const groupCount = 5; diff --git a/forks/forks.test.ts b/forks/forks.test.ts index 193a39cf2..b63973d5f 100644 --- a/forks/forks.test.ts +++ b/forks/forks.test.ts @@ -1,8 +1,8 @@ import { getTime } from "@helpers/logger"; +import { type Group } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { getInboxes } from "@inboxes/utils"; import { getWorkers, type Worker } from "@workers/manager"; -import { type Group } from "@workers/node-sdk"; import { describe, it } from "vitest"; import { epochRotationOperations, diff --git a/helpers/client.ts b/helpers/client.ts index b2cedaa67..25e170b60 100644 --- a/helpers/client.ts +++ b/helpers/client.ts @@ -1,7 +1,6 @@ import fs from "fs"; import { getRandomValues } from "node:crypto"; import path from "node:path"; -import type { Worker, WorkerManager } from "@workers/manager"; import { IdentifierKind, regressionClient, @@ -9,7 +8,8 @@ import { type Conversation, type Signer, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import type { Worker, WorkerManager } from "@workers/manager"; import dotenv from "dotenv"; import { fromString, toString } from "uint8arrays"; import { createWalletClient, http, toBytes } from "viem"; diff --git a/helpers/datadog.ts b/helpers/datadog.ts index 1f204299c..0598ee707 100644 --- a/helpers/datadog.ts +++ b/helpers/datadog.ts @@ -1,8 +1,8 @@ import "dotenv/config"; import { exec } from "child_process"; import { promisify } from "util"; +import { getActiveVersion } from "@helpers/versions"; import metrics from "datadog-metrics"; -import { getActiveVersion } from "../workers/node-sdk"; // Consolidated interfaces interface MetricData { diff --git a/helpers/streams.ts b/helpers/streams.ts index 6fb88f331..8abf3c281 100644 --- a/helpers/streams.ts +++ b/helpers/streams.ts @@ -1,6 +1,4 @@ import { sleep, streamColdStartTimeout } from "@helpers/client"; -import { typeofStream } from "@workers/main"; -import type { Worker } from "@workers/manager"; import { ConsentEntityType, ConsentState, @@ -8,7 +6,9 @@ import { type Conversation, type Dm, type Group, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { typeofStream } from "@workers/main"; +import type { Worker } from "@workers/manager"; // Define the expected return type of verifyMessageStream export type VerifyStreamResult = { diff --git a/workers/node-sdk.ts b/helpers/versions.ts similarity index 76% rename from workers/node-sdk.ts rename to helpers/versions.ts index dc3220d8a..fc80edc5f 100644 --- a/workers/node-sdk.ts +++ b/helpers/versions.ts @@ -1,6 +1,18 @@ import fs from "fs"; import path from "path"; import { APP_VERSION, createSigner } from "@helpers/client"; +import { + Agent as Agent12, + MessageContext as MessageContext12, +} from "@xmtp/agent-sdk-1.1.2"; +import { + Agent as Agent17, // 1.1.7 + MessageContext as MessageContext17, +} from "@xmtp/agent-sdk-1.1.7"; +import { + Agent as Agent110, // 1.1.10 (latest) + MessageContext as MessageContext110, +} from "@xmtp/agent-sdk-1.1.10"; import { ReactionCodec } from "@xmtp/content-type-reaction"; import { ReplyCodec } from "@xmtp/content-type-reply"; import { @@ -48,6 +60,16 @@ import { Group as Group430, } from "@xmtp/node-sdk-4.3.0"; +// Agent SDK exports +export { + Agent, + MessageContext, + type AgentMiddleware, +} from "@xmtp/agent-sdk-1.1.10"; + +export { getTestUrl } from "@xmtp/agent-sdk-1.1.10/debug"; + +// Node SDK exports export { Client, ConsentState, @@ -62,10 +84,37 @@ export { type XmtpEnv, type GroupMember, type KeyPackageStatus, + type PermissionLevel, type PermissionUpdateType, ConsentEntityType, } from "@xmtp/node-sdk-4.3.0"; +// Agent SDK version list +export const AgentVersionList = [ + { + Agent: Agent110, + MessageContext: MessageContext110, + agentSDK: "1.1.10", + nodeSDK: "4.3.0", + auto: true, + }, + { + Agent: Agent17, + MessageContext: MessageContext17, + agentSDK: "1.1.7", + nodeSDK: "4.2.3", + auto: true, + }, + { + Agent: Agent12, + MessageContext: MessageContext12, + agentSDK: "1.1.2", + nodeSDK: "4.1.0", + auto: true, + }, +]; + +// Node SDK version list export const VersionList = [ { Client: Client430, @@ -73,7 +122,7 @@ export const VersionList = [ Dm: Dm430, Group: Group430, nodeSDK: "4.3.0", - nodeBindings: "1.6.0", + nodeBindings: "1.6.1", auto: true, }, { @@ -132,6 +181,40 @@ export const VersionList = [ }, ]; +// Agent SDK functions +export const getActiveAgentVersion = (index = 0) => { + const versions = getAgentVersions(); + let latestVersion = versions[index]; + + if (process.env.AGENT_SDK_VERSION) { + latestVersion = versions.find( + (v) => v.agentSDK === process.env.AGENT_SDK_VERSION, + ) as (typeof AgentVersionList)[number]; + if (!latestVersion) { + throw new Error( + `Agent SDK version ${process.env.AGENT_SDK_VERSION} not found`, + ); + } + } + return latestVersion; +}; + +export const getAgentVersions = (filterAuto: boolean = true) => { + return filterAuto ? AgentVersionList.filter((v) => v.auto) : AgentVersionList; +}; + +export const checkAgentVersionFormat = ( + versionList: typeof AgentVersionList, +) => { + // Agent SDK versions should not include - because it messes up with the worker name-installation conversion + for (const version of versionList) { + if (version.agentSDK.includes("-")) { + throw new Error(`Agent SDK version ${version.agentSDK} contains -`); + } + } +}; + +// Node SDK functions export const getActiveVersion = (index = 0) => { checkNoNameContains(VersionList); let latestVersion = getVersions()[index]; @@ -145,6 +228,7 @@ export const getActiveVersion = (index = 0) => { } return latestVersion; }; + export const getVersions = (filterAuto: boolean = true) => { checkNoNameContains(VersionList); return filterAuto ? VersionList.filter((v) => v.auto) : VersionList; @@ -248,6 +332,7 @@ export const regressionClient = async ( export function isValidSdkVersion(version: string): boolean { return VersionList.some((v) => v.nodeBindings === version); } + export function getDefaultSdkVersion(): string { return getActiveVersion().nodeBindings; } diff --git a/helpers/vitest.ts b/helpers/vitest.ts index d403044bc..7fba6d9f6 100644 --- a/helpers/vitest.ts +++ b/helpers/vitest.ts @@ -1,5 +1,5 @@ import "dotenv/config"; -import { getActiveVersion } from "@workers/node-sdk"; +import { getActiveVersion } from "@helpers/versions"; import { afterAll, afterEach, beforeAll, beforeEach, expect } from "vitest"; import { loadEnv } from "./client"; import { diff --git a/inboxes/bysize.test.ts b/inboxes/bysize.test.ts index 37adae7c8..41084a5c9 100644 --- a/inboxes/bysize.test.ts +++ b/inboxes/bysize.test.ts @@ -1,6 +1,6 @@ import { ProgressBar } from "@helpers/logger"; +import { IdentifierKind } from "@helpers/versions"; import { getWorkers, type Worker } from "@workers/manager"; -import { IdentifierKind } from "@workers/node-sdk"; import { describe, it } from "vitest"; describe("bysize", () => { diff --git a/measurements/concurrency.test.ts b/measurements/concurrency.test.ts index 7f7dfd86b..f6ddd377a 100644 --- a/measurements/concurrency.test.ts +++ b/measurements/concurrency.test.ts @@ -3,9 +3,9 @@ import { createSigner, getEncryptionKeyFromHex, } from "@helpers/client"; +import { Client, type XmtpEnv } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { getInboxes } from "@inboxes/utils"; -import { Client, type XmtpEnv } from "@workers/node-sdk"; import { beforeAll, describe, it } from "vitest"; const testConfig = { diff --git a/measurements/perf-matrix.test.ts b/measurements/perf-matrix.test.ts index 69429825f..9bcce1146 100644 --- a/measurements/perf-matrix.test.ts +++ b/measurements/perf-matrix.test.ts @@ -4,13 +4,6 @@ import { verifyMessageStream, verifyMetadataStream, } from "@helpers/streams"; -import { getInboxes, type InboxData } from "@inboxes/utils"; -import { - getRandomNames, - getWorkers, - type Worker, - type WorkerManager, -} from "@workers/manager"; import { Client, ConsentEntityType, @@ -18,7 +11,14 @@ import { IdentifierKind, type Dm, type Group, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { getInboxes, type InboxData } from "@inboxes/utils"; +import { + getRandomNames, + getWorkers, + type Worker, + type WorkerManager, +} from "@workers/manager"; import { describe, expect, it } from "vitest"; import { setupSummaryTable } from "./helper"; diff --git a/monitoring/browser/playwright.ts b/monitoring/browser/playwright.ts index 9d7a218fc..c52ac9a5c 100644 --- a/monitoring/browser/playwright.ts +++ b/monitoring/browser/playwright.ts @@ -1,7 +1,7 @@ import fs from "fs"; import path from "path"; import { browserTimeout, streamColdStartTimeout } from "@helpers/client"; -import type { XmtpEnv } from "@workers/node-sdk"; +import type { XmtpEnv } from "@helpers/versions"; import { chromium, type Browser, diff --git a/monitoring/bugs/402restart.test.ts b/monitoring/bugs/402restart.test.ts index fdfaa1c9a..96a50893e 100644 --- a/monitoring/bugs/402restart.test.ts +++ b/monitoring/bugs/402restart.test.ts @@ -1,6 +1,6 @@ import { sleep } from "@helpers/client"; +import { type DecodedMessage } from "@helpers/versions"; import { getWorkers } from "@workers/manager"; -import { type DecodedMessage } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; const testName = "clients"; diff --git a/monitoring/bugs/stitch.test.ts b/monitoring/bugs/stitch.test.ts index b5274dee1..9be26e64a 100644 --- a/monitoring/bugs/stitch.test.ts +++ b/monitoring/bugs/stitch.test.ts @@ -1,6 +1,6 @@ +import { type Group } from "@helpers/versions"; import { getInboxes } from "@inboxes/utils"; import { getWorkers } from "@workers/manager"; -import { type Group } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; const testName = "sync"; diff --git a/monitoring/bugs/verifyallinstalls.test.ts b/monitoring/bugs/verifyallinstalls.test.ts index 0c83c323b..96d890a8d 100644 --- a/monitoring/bugs/verifyallinstalls.test.ts +++ b/monitoring/bugs/verifyallinstalls.test.ts @@ -1,8 +1,8 @@ import "@helpers/datadog"; import { checkKeyPackageStatusesByInboxId } from "@helpers/client"; +import { IdentifierKind, type Group } from "@helpers/versions"; import { getInboxes, type InboxData } from "@inboxes/utils"; import { getWorkers, type Worker, type WorkerManager } from "@workers/manager"; -import { IdentifierKind, type Group } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; const testName = "performance"; diff --git a/monitoring/networkchaos/dm-duplicate-prevention.test.ts b/monitoring/networkchaos/dm-duplicate-prevention.test.ts index fb50af88d..61a6b0931 100644 --- a/monitoring/networkchaos/dm-duplicate-prevention.test.ts +++ b/monitoring/networkchaos/dm-duplicate-prevention.test.ts @@ -1,7 +1,7 @@ +import { type Dm } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { typeofStream } from "@workers/main"; import { getWorkers } from "@workers/manager"; -import { type Dm } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; import { DockerContainer } from "../../network-stability/container"; diff --git a/monitoring/networkchaos/group-client-partition.test.ts b/monitoring/networkchaos/group-client-partition.test.ts index f4a70a0d8..9141d6a36 100644 --- a/monitoring/networkchaos/group-client-partition.test.ts +++ b/monitoring/networkchaos/group-client-partition.test.ts @@ -1,7 +1,7 @@ import { verifyMessageStream } from "@helpers/streams"; +import type { Group } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { getWorkers } from "@workers/manager"; -import type { Group } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; import * as iptables from "../../network-stability/iptables"; diff --git a/monitoring/networkchaos/group-partition-delayedreceive.test.ts b/monitoring/networkchaos/group-partition-delayedreceive.test.ts index 5d21e2c7a..bbee6b1e5 100644 --- a/monitoring/networkchaos/group-partition-delayedreceive.test.ts +++ b/monitoring/networkchaos/group-partition-delayedreceive.test.ts @@ -1,7 +1,7 @@ import { verifyMessageStream } from "@helpers/streams"; +import type { Group } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { getWorkers } from "@workers/manager"; -import type { Group } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; import { DockerContainer } from "../../network-stability/container"; diff --git a/monitoring/networkchaos/group-reconciliation.test.ts b/monitoring/networkchaos/group-reconciliation.test.ts index 9e1e37f59..6fd14e887 100644 --- a/monitoring/networkchaos/group-reconciliation.test.ts +++ b/monitoring/networkchaos/group-reconciliation.test.ts @@ -1,7 +1,7 @@ import { verifyMessageStream } from "@helpers/streams"; +import type { Group } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { getWorkers } from "@workers/manager"; -import type { Group } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; import { DockerContainer } from "../../network-stability/container"; diff --git a/monitoring/networkchaos/node-blackhole.test.ts b/monitoring/networkchaos/node-blackhole.test.ts index e2101088a..3e8ae2abd 100644 --- a/monitoring/networkchaos/node-blackhole.test.ts +++ b/monitoring/networkchaos/node-blackhole.test.ts @@ -1,8 +1,8 @@ import { verifyMessageStream } from "@helpers/streams"; +import { type Group } from "@helpers/versions"; import { setupDurationTracking } from "@helpers/vitest"; import { typeofStream } from "@workers/main"; import { getWorkers } from "@workers/manager"; -import { type Group } from "@workers/node-sdk"; import { describe, expect, it } from "vitest"; import { DockerContainer } from "../../network-stability/container"; diff --git a/monitoring/performance.test.ts b/monitoring/performance.test.ts index 8643551d6..f30f92f72 100644 --- a/monitoring/performance.test.ts +++ b/monitoring/performance.test.ts @@ -9,9 +9,6 @@ import { verifyMessageStream, verifyMetadataStream, } from "@helpers/streams"; -import { setupDurationTracking } from "@helpers/vitest"; -import { getInboxes, type InboxData } from "@inboxes/utils"; -import { getWorkers, type Worker, type WorkerManager } from "@workers/manager"; import { Client, ConsentEntityType, @@ -19,7 +16,10 @@ import { IdentifierKind, type Dm, type Group, -} from "@workers/node-sdk"; +} from "@helpers/versions"; +import { setupDurationTracking } from "@helpers/vitest"; +import { getInboxes, type InboxData } from "@inboxes/utils"; +import { getWorkers, type Worker, type WorkerManager } from "@workers/manager"; import { describe, expect, it } from "vitest"; const testName = "performance"; diff --git a/package.json b/package.json index cb0dbdb50..4fa452426 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "workers" ], "scripts": { - "agent-versions": "tsx agents/versions/cli.ts", + "agent-versions": "tsx cli/versions.ts", "bot": "tsx cli/bot.ts", "build": "tsc", "c": "yarn build && yarn lint && yarn format", @@ -25,7 +25,7 @@ "regression": "yarn versions && yarn test performance --env dev --sync all --versions 3 --size 10-100 && yarn test bugs", "send": "tsx cli/send.ts", "test": "tsx cli/test.ts", - "versions": "tsx cli/sdk-versions.ts" + "versions": "tsx cli/versions.ts" }, "dependencies": { "@anthropic-ai/sdk": "^0.54.0", @@ -42,7 +42,7 @@ "@xmtp/node-bindings-1.3.6": "npm:@xmtp/node-bindings@1.3.6", "@xmtp/node-bindings-1.4.0": "npm:@xmtp/node-bindings@1.4.0", "@xmtp/node-bindings-1.5.4": "npm:@xmtp/node-bindings@1.5.4", - "@xmtp/node-bindings-1.6.0": "npm:@xmtp/node-bindings@1.6.0-dev.35d2ff1", + "@xmtp/node-bindings-1.6.1": "npm:@xmtp/node-bindings@1.6.1-rc2", "@xmtp/node-sdk-3.2.2": "npm:@xmtp/node-sdk@3.2.2", "@xmtp/node-sdk-4.0.1": "npm:@xmtp/node-sdk@4.0.1", "@xmtp/node-sdk-4.0.2": "npm:@xmtp/node-sdk@4.0.2", diff --git a/workers/main.ts b/workers/main.ts index 4d2f68620..fc3267ae3 100644 --- a/workers/main.ts +++ b/workers/main.ts @@ -12,7 +12,7 @@ import { type Client, type DecodedMessage, type XmtpEnv, -} from "@workers/node-sdk"; +} from "@helpers/versions"; import { privateKeyToAccount } from "viem/accounts"; import "dotenv/config"; import path from "node:path"; diff --git a/workers/manager.ts b/workers/manager.ts index 93d4929c0..68a947bd9 100644 --- a/workers/manager.ts +++ b/workers/manager.ts @@ -4,7 +4,14 @@ import "dotenv/config"; import path from "path"; import { formatBytes, generateEncryptionKeyHex, sleep } from "@helpers/client"; import { ProgressBar } from "@helpers/logger"; -import { type Client, type Group, type XmtpEnv } from "@workers/node-sdk"; +import { + getDefaultSdkVersion, + isValidSdkVersion, + VersionList, + type Client, + type Group, + type XmtpEnv, +} from "@helpers/versions"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; import { installationThreshold, @@ -12,11 +19,6 @@ import { WorkerClient, type typeofStream, } from "./main"; -import { - getDefaultSdkVersion, - isValidSdkVersion, - VersionList, -} from "./node-sdk"; /** * Interface documenting all methods available in WorkerManager class diff --git a/yarn.lock b/yarn.lock index d0e06baab..08edf8322 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1563,7 +1563,14 @@ __metadata: languageName: node linkType: hard -"@xmtp/node-bindings-1.6.0@npm:@xmtp/node-bindings@1.6.0-dev.35d2ff1, @xmtp/node-bindings@npm:1.6.0-dev.35d2ff1": +"@xmtp/node-bindings-1.6.1@npm:@xmtp/node-bindings@1.6.1-rc2": + version: 1.6.1-rc2 + resolution: "@xmtp/node-bindings@npm:1.6.1-rc2" + checksum: 10/64511c52ace0049ef8b92d53d83b988a4946de3630a534ded09d362b491da5c205d762443a317e085db8e6571319ee1c0f453bca278ab6f04b4ff3704e035edf + languageName: node + linkType: hard + +"@xmtp/node-bindings@npm:1.6.0-dev.35d2ff1": version: 1.6.0-dev.35d2ff1 resolution: "@xmtp/node-bindings@npm:1.6.0-dev.35d2ff1" checksum: 10/8cfd99033695f422fc8973a65bb9554b4ecb05fe2b2558809e2d17f64bfcb159c831a93ce051e459a36478f0eaa52f0a92ae65805265a9b106f3e65f1d71d654 @@ -4659,7 +4666,7 @@ __metadata: "@xmtp/node-bindings-1.3.6": "npm:@xmtp/node-bindings@1.3.6" "@xmtp/node-bindings-1.4.0": "npm:@xmtp/node-bindings@1.4.0" "@xmtp/node-bindings-1.5.4": "npm:@xmtp/node-bindings@1.5.4" - "@xmtp/node-bindings-1.6.0": "npm:@xmtp/node-bindings@1.6.0-dev.35d2ff1" + "@xmtp/node-bindings-1.6.1": "npm:@xmtp/node-bindings@1.6.1-rc2" "@xmtp/node-sdk-3.2.2": "npm:@xmtp/node-sdk@3.2.2" "@xmtp/node-sdk-4.0.1": "npm:@xmtp/node-sdk@4.0.1" "@xmtp/node-sdk-4.0.2": "npm:@xmtp/node-sdk@4.0.2"