From a987e9e27b8729afedfe1f2110fee45993c4c518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Guti=C3=A9rrez?= <35082514+alezmad@users.noreply.github.com> Date: Mon, 6 Apr 2026 12:18:08 +0100 Subject: [PATCH] =?UTF-8?q?fix(cli):=20v0.1.14=20=E2=80=94=20persist=20dis?= =?UTF-8?q?playName=20in=20config=20file,=20not=20env=20var?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Write displayName into tmpdir config.json so the MCP server reads it directly. Env vars from claudemesh launch may not propagate to MCP child processes spawned by Claude Code. Config file is reliable. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/cli/package.json | 2 +- apps/cli/src/commands/launch.ts | 1 + apps/cli/src/state/config.ts | 3 ++- apps/cli/src/ws/client.ts | 3 ++- apps/cli/src/ws/manager.ts | 4 +++- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index 70cd747..489f12c 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "claudemesh-cli", - "version": "0.1.13", + "version": "0.1.14", "description": "Claude Code MCP client for claudemesh — peer mesh messaging between Claude sessions.", "keywords": [ "claude-code", diff --git a/apps/cli/src/commands/launch.ts b/apps/cli/src/commands/launch.ts index 211d3d9..e5d233d 100644 --- a/apps/cli/src/commands/launch.ts +++ b/apps/cli/src/commands/launch.ts @@ -220,6 +220,7 @@ export async function runLaunch(extraArgs: string[]): Promise { const sessionConfig: Config = { version: 1, meshes: [mesh], + displayName, }; writeFileSync( join(tmpDir, "config.json"), diff --git a/apps/cli/src/state/config.ts b/apps/cli/src/state/config.ts index 8defe9f..6d3f4c6 100644 --- a/apps/cli/src/state/config.ts +++ b/apps/cli/src/state/config.ts @@ -31,6 +31,7 @@ export interface JoinedMesh { export interface Config { version: 1; meshes: JoinedMesh[]; + displayName?: string; // per-session override, written by `claudemesh launch --name` } const CONFIG_DIR = env.CLAUDEMESH_CONFIG_DIR ?? join(homedir(), ".claudemesh"); @@ -46,7 +47,7 @@ export function loadConfig(): Config { if (!parsed || !Array.isArray(parsed.meshes)) { return { version: 1, meshes: [] }; } - return { version: 1, meshes: parsed.meshes }; + return { version: 1, meshes: parsed.meshes, displayName: parsed.displayName }; } catch (e) { throw new Error( `Failed to load ${CONFIG_PATH}: ${e instanceof Error ? e.message : String(e)}`, diff --git a/apps/cli/src/ws/client.ts b/apps/cli/src/ws/client.ts index 10ab5ab..971bbdd 100644 --- a/apps/cli/src/ws/client.ts +++ b/apps/cli/src/ws/client.ts @@ -86,6 +86,7 @@ export class BrokerClient { private mesh: JoinedMesh, private opts: { onStatusChange?: (status: ConnStatus) => void; + displayName?: string; debug?: boolean; } = {}, ) {} @@ -132,7 +133,7 @@ export class BrokerClient { memberId: this.mesh.memberId, pubkey: this.mesh.pubkey, sessionPubkey: this.sessionPubkey, - displayName: process.env.CLAUDEMESH_DISPLAY_NAME || undefined, + displayName: process.env.CLAUDEMESH_DISPLAY_NAME || this.opts.displayName || undefined, sessionId: `${process.pid}-${Date.now()}`, pid: process.pid, cwd: process.cwd(), diff --git a/apps/cli/src/ws/manager.ts b/apps/cli/src/ws/manager.ts index bc689a1..eb2ed11 100644 --- a/apps/cli/src/ws/manager.ts +++ b/apps/cli/src/ws/manager.ts @@ -11,12 +11,13 @@ import type { Config, JoinedMesh } from "../state/config"; import { env } from "../env"; const clients = new Map(); +let configDisplayName: string | undefined; /** Ensure a BrokerClient exists + is connecting/open for this mesh. */ export async function ensureClient(mesh: JoinedMesh): Promise { const existing = clients.get(mesh.meshId); if (existing) return existing; - const client = new BrokerClient(mesh, { debug: env.CLAUDEMESH_DEBUG }); + const client = new BrokerClient(mesh, { debug: env.CLAUDEMESH_DEBUG, displayName: configDisplayName }); clients.set(mesh.meshId, client); try { await client.connect(); @@ -29,6 +30,7 @@ export async function ensureClient(mesh: JoinedMesh): Promise { /** Start clients for every joined mesh. Called once on MCP server start. */ export async function startClients(config: Config): Promise { + configDisplayName = config.displayName; await Promise.allSettled(config.meshes.map(ensureClient)); }