From fe8c65a8cd28cfcbf37a31d6beadb89841fae01c Mon Sep 17 00:00:00 2001 From: zengyuzhi Date: Wed, 25 Mar 2026 14:40:33 +0800 Subject: [PATCH] feat(openclaw): add workerHost config for Docker deployments When the OpenClaw gateway runs in Docker and the claude-mem worker runs on the host, localhost:37777 is unreachable from inside the container. Add a workerHost config option (default: 127.0.0.1) so users can set it to host.docker.internal for Docker-based deployments. Changes: - Add workerHost to ClaudeMemPluginConfig interface - Read workerHost from plugin config in plugin entry point - Update workerBaseUrl to use configurable host - Add workerHost to openclaw.plugin.json config schema - Update startup log to show configured host --- openclaw/openclaw.plugin.json | 5 +++++ openclaw/src/index.ts | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/openclaw/openclaw.plugin.json b/openclaw/openclaw.plugin.json index 6c52b962..ce0de1db 100644 --- a/openclaw/openclaw.plugin.json +++ b/openclaw/openclaw.plugin.json @@ -27,6 +27,11 @@ "default": 37777, "description": "Port for Claude-Mem worker service" }, + "workerHost": { + "type": "string", + "default": "127.0.0.1", + "description": "Hostname for Claude-Mem worker service. Set to host.docker.internal when the gateway runs in Docker and the worker runs on the host." + }, "project": { "type": "string", "default": "openclaw", diff --git a/openclaw/src/index.ts b/openclaw/src/index.ts index 7e4ac304..1f3f232d 100644 --- a/openclaw/src/index.ts +++ b/openclaw/src/index.ts @@ -183,6 +183,7 @@ interface ClaudeMemPluginConfig { syncMemoryFileExclude?: string[]; project?: string; workerPort?: number; + workerHost?: string; observationFeed?: { enabled?: boolean; channel?: string; @@ -198,6 +199,7 @@ interface ClaudeMemPluginConfig { const MAX_SSE_BUFFER_SIZE = 1024 * 1024; // 1MB const DEFAULT_WORKER_PORT = 37777; +const DEFAULT_WORKER_HOST = "127.0.0.1"; // Emoji pool for deterministic auto-assignment to unknown agents. // Uses a hash of the agentId to pick a consistent emoji — no persistent state needed. @@ -256,8 +258,10 @@ function buildGetSourceLabel( // Worker HTTP Client // ============================================================================ +let _workerHost = DEFAULT_WORKER_HOST; + function workerBaseUrl(port: number): string { - return `http://127.0.0.1:${port}`; + return `http://${_workerHost}:${port}`; } async function workerPost( @@ -533,6 +537,7 @@ async function connectToSSEStream( export default function claudeMemPlugin(api: OpenClawPluginApi): void { const userConfig = (api.pluginConfig || {}) as ClaudeMemPluginConfig; const workerPort = userConfig.workerPort || DEFAULT_WORKER_PORT; + _workerHost = userConfig.workerHost || DEFAULT_WORKER_HOST; const baseProjectName = userConfig.project || "openclaw"; const getSourceLabel = buildGetSourceLabel(userConfig.observationFeed?.emojis); @@ -1047,5 +1052,5 @@ export default function claudeMemPlugin(api: OpenClawPluginApi): void { }, }); - api.logger.info(`[claude-mem] OpenClaw plugin loaded — v1.0.0 (worker: 127.0.0.1:${workerPort})`); + api.logger.info(`[claude-mem] OpenClaw plugin loaded — v1.0.0 (worker: ${_workerHost}:${workerPort})`); }