From 1743546c5d25ed841d477890154f9d5aa7de71d8 Mon Sep 17 00:00:00 2001 From: sean Date: Sun, 8 Mar 2026 15:06:38 +0800 Subject: [PATCH 1/3] refactor(server): make platform-agnostic by removing node-platform dependency - Remove @agentxjs/node-platform and @agentxjs/mono-driver from server dependencies - Replace commonxjs/logger with @deepracticex/logger (platform-agnostic) - ServerConfig.platform now accepts AgentXPlatform directly (caller resolves deferred) - Move node-platform and mono-driver to devDependencies (used only by bin/server.ts) - Update portagent to resolve platform before passing to createServer Co-Authored-By: Claude Opus 4.6 --- apps/portagent/lib/agentx/index.ts | 3 ++- bun.lock | 26 ++++++++++++++------------ packages/server/bin/server.ts | 8 +++----- packages/server/package.json | 6 +++--- packages/server/src/CommandHandler.ts | 2 +- packages/server/src/Server.ts | 15 ++++----------- 6 files changed, 27 insertions(+), 33 deletions(-) diff --git a/apps/portagent/lib/agentx/index.ts b/apps/portagent/lib/agentx/index.ts index 28d209c9..36e925c9 100644 --- a/apps/portagent/lib/agentx/index.ts +++ b/apps/portagent/lib/agentx/index.ts @@ -101,8 +101,9 @@ export async function startAgentXServer(): Promise { hasApiKey: !!initialConfig.apiKey, }); + const platform = await nodePlatform({ dataPath }).resolve(); const config: ServerConfig = { - platform: nodePlatform({ dataPath }), + platform, createDriver: (driverConfig: DriverConfig) => { // Read latest config from DB on each agent creation const llm = getLLMConfigFromDB(); diff --git a/bun.lock b/bun.lock index eb7ab35b..315168c9 100644 --- a/bun.lock +++ b/bun.lock @@ -41,7 +41,7 @@ }, "apps/cli": { "name": "@agentxjs/cli", - "version": "0.0.2", + "version": "0.0.4", "bin": { "agentx": "./bin/agentx", }, @@ -65,7 +65,7 @@ }, "apps/portagent": { "name": "@agentx/portagent", - "version": "0.1.1", + "version": "0.1.3", "dependencies": { "@agentxjs/mono-driver": "workspace:*", "@agentxjs/node-platform": "workspace:*", @@ -101,7 +101,7 @@ }, "packages/agentx": { "name": "agentxjs", - "version": "2.0.0", + "version": "2.0.2", "dependencies": { "@agentxjs/core": "workspace:*", "@agentxjs/mono-driver": "workspace:*", @@ -119,7 +119,7 @@ }, "packages/claude-driver": { "name": "@agentxjs/claude-driver", - "version": "2.0.0", + "version": "2.0.2", "dependencies": { "@agentxjs/core": "workspace:*", "@anthropic-ai/claude-agent-sdk": "^0.2.29", @@ -132,7 +132,7 @@ }, "packages/core": { "name": "@agentxjs/core", - "version": "2.0.0", + "version": "2.0.2", "dependencies": { "commonxjs": "^0.1.1", "jsonrpc-lite": "2.2.0", @@ -144,7 +144,7 @@ }, "packages/devtools": { "name": "@agentxjs/devtools", - "version": "2.0.0", + "version": "2.0.2", "bin": { "bdd": "./dist/bdd/cli.js", }, @@ -172,7 +172,7 @@ }, "packages/mono-driver": { "name": "@agentxjs/mono-driver", - "version": "2.0.0", + "version": "2.0.2", "dependencies": { "@agentxjs/core": "workspace:*", "@ai-sdk/anthropic": "^3.0.36", @@ -191,7 +191,7 @@ }, "packages/node-platform": { "name": "@agentxjs/node-platform", - "version": "2.0.0", + "version": "2.0.2", "dependencies": { "@agentxjs/core": "workspace:*", "commonxjs": "^0.1.1", @@ -207,17 +207,17 @@ }, "packages/server": { "name": "@agentxjs/server", - "version": "2.0.0", + "version": "2.0.2", "bin": { "agentx-server": "./bin/server.ts", }, "dependencies": { "@agentxjs/core": "workspace:*", - "@agentxjs/mono-driver": "workspace:*", - "@agentxjs/node-platform": "workspace:*", - "commonxjs": "^0.1.1", + "@deepracticex/logger": "^1.2.0", }, "devDependencies": { + "@agentxjs/mono-driver": "workspace:*", + "@agentxjs/node-platform": "workspace:*", "typescript": "^5.3.3", }, }, @@ -423,6 +423,8 @@ "@deepracticex/bdd": ["@deepracticex/bdd@0.3.0", "", { "dependencies": { "@cucumber/cucumber-expressions": "^18.0.1", "@cucumber/gherkin": "^31.0.0", "@cucumber/messages": "^27.2.0" } }, "sha512-JNljvjAJIZknE8MBjzLfhPr/WRGe/hz6d+nYaEY7TqPVtWiXRPnN2iT8vP7DqTdDqIOw6B5NiUHh8g+V5Ffy+A=="], + "@deepracticex/logger": ["@deepracticex/logger@1.2.0", "", {}, "sha512-p9dvgAeZmb8q+lBNpcKnJWxsIa75J5j0nsscCFW4mLPW3LnaUVE5enIkVluNbI2UoKMSI/0m44+58u/EaJOGaw=="], + "@dimforge/rapier2d-simd-compat": ["@dimforge/rapier2d-simd-compat@0.17.3", "", {}, "sha512-bijvwWz6NHsNj5e5i1vtd3dU2pDhthSaTUZSh14DUGGKJfw8eMnlWZsxwHBxB/a3AXVNDjL9abuHw1k9FGR+jg=="], "@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], diff --git a/packages/server/bin/server.ts b/packages/server/bin/server.ts index a37b48af..f8a8a832 100755 --- a/packages/server/bin/server.ts +++ b/packages/server/bin/server.ts @@ -18,7 +18,7 @@ import type { CreateDriver } from "@agentxjs/core/driver"; import { createMonoDriver } from "@agentxjs/mono-driver"; import { nodePlatform } from "@agentxjs/node-platform"; -import { createLogger } from "commonxjs/logger"; +import { createLogger } from "@deepracticex/logger"; import { createServer } from "../src"; const logger = createLogger("server/bin"); @@ -61,11 +61,9 @@ async function main() { }; // Create server with nodePlatform + driver + const platform = await nodePlatform({ dataPath, logDir }).resolve(); const server = await createServer({ - platform: nodePlatform({ - dataPath, - logDir, - }), + platform, createDriver: wrappedCreateDriver, port, host, diff --git a/packages/server/package.json b/packages/server/package.json index 79250ddc..b99b6409 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -28,11 +28,11 @@ }, "dependencies": { "@agentxjs/core": "workspace:*", - "@agentxjs/node-platform": "workspace:*", - "@agentxjs/mono-driver": "workspace:*", - "commonxjs": "^0.1.1" + "@deepracticex/logger": "^1.2.0" }, "devDependencies": { + "@agentxjs/node-platform": "workspace:*", + "@agentxjs/mono-driver": "workspace:*", "typescript": "^5.3.3" } } diff --git a/packages/server/src/CommandHandler.ts b/packages/server/src/CommandHandler.ts index abc66dca..706b1813 100644 --- a/packages/server/src/CommandHandler.ts +++ b/packages/server/src/CommandHandler.ts @@ -10,7 +10,7 @@ import type { UserContentPart } from "@agentxjs/core/agent"; import type { RpcMethod } from "@agentxjs/core/network"; import type { AgentXRuntime } from "@agentxjs/core/runtime"; -import { createLogger } from "commonxjs/logger"; +import { createLogger } from "@deepracticex/logger"; const logger = createLogger("server/CommandHandler"); diff --git a/packages/server/src/Server.ts b/packages/server/src/Server.ts index 8a05d7ef..78cd4353 100644 --- a/packages/server/src/Server.ts +++ b/packages/server/src/Server.ts @@ -26,8 +26,7 @@ import { } from "@agentxjs/core/network"; import type { AgentXPlatform } from "@agentxjs/core/runtime"; import { createAgentXRuntime } from "@agentxjs/core/runtime"; -import { type DeferredPlatformConfig, isDeferredPlatform } from "@agentxjs/node-platform"; -import { createLogger } from "commonxjs/logger"; +import { createLogger } from "@deepracticex/logger"; import { CommandHandler } from "./CommandHandler"; import type { AgentXServer } from "./types"; @@ -46,11 +45,9 @@ interface ConnectionState { */ export interface ServerConfig { /** - * AgentX Platform (can be AgentXPlatform or DeferredPlatformConfig) - * - * Must provide `channelServer` for accepting WebSocket connections. + * AgentX Platform — must provide `channelServer` for accepting WebSocket connections. */ - platform: AgentXPlatform | DeferredPlatformConfig; + platform: AgentXPlatform; /** * LLM Driver factory function - creates Driver per Agent @@ -88,11 +85,7 @@ export interface ServerConfig { */ export async function createServer(config: ServerConfig): Promise { const { wsPath = "/ws" } = config; - - // Resolve deferred platform if needed - const platform: AgentXPlatform = isDeferredPlatform(config.platform) - ? await config.platform.resolve() - : config.platform; + const platform = config.platform; // Create runtime from platform + driver const runtime = createAgentXRuntime(platform, config.createDriver); From 8cb077c9905c7d3a92ba51152610b63947af8392 Mon Sep 17 00:00:00 2001 From: sean Date: Sun, 8 Mar 2026 15:07:00 +0800 Subject: [PATCH 2/3] chore: add changeset for server platform-agnostic refactoring Co-Authored-By: Claude Opus 4.6 --- .changeset/server-platform-agnostic.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/server-platform-agnostic.md diff --git a/.changeset/server-platform-agnostic.md b/.changeset/server-platform-agnostic.md new file mode 100644 index 00000000..eddd7d88 --- /dev/null +++ b/.changeset/server-platform-agnostic.md @@ -0,0 +1,5 @@ +--- +"@agentxjs/server": patch +--- + +Make @agentxjs/server platform-agnostic by removing @agentxjs/node-platform dependency. ServerConfig.platform now accepts AgentXPlatform directly. Replace commonxjs/logger with @deepracticex/logger. From 632579880f834e1bbec53013c135cd640c824e50 Mon Sep 17 00:00:00 2001 From: sean Date: Sun, 8 Mar 2026 15:08:21 +0800 Subject: [PATCH 3/3] fix(cli): resolve platform before passing to createServer Co-Authored-By: Claude Opus 4.6 --- apps/cli/src/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index ea25be4d..8d46a1f5 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -73,11 +73,12 @@ async function getServerUrl(port: number): Promise<{ url: string; cleanup?: () = }); }; + const platform = await nodePlatform({ + dataPath, + // logDir already configured at startup + }).resolve(); const server = await createServer({ - platform: nodePlatform({ - dataPath, - // logDir already configured at startup - }), + platform, createDriver: wrappedCreateDriver, port, host: "127.0.0.1",