From 8264e7b9958fc4a3f769157e8abb294467643528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Sun, 8 Mar 2026 01:29:14 +0000 Subject: [PATCH] fix super admin claude: host cwd, host mcp config paths Capture HOST_HOME before user-instance overrides process.env.HOME so Super Admin spawns claude in /home/pastilhas. Generate separate MCP configs for sandbox (sandbox paths) and host (real filesystem paths), pick based on role at spawn time. Co-Authored-By: Claude Opus 4.6 --- src/servers/sidecar-registry.ts | 1 - src/servers/sidecar/claude/claude-manager.ts | 28 +++++++----- src/servers/sidecar/claude/user-instance.ts | 46 ++++++++++++++------ 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/src/servers/sidecar-registry.ts b/src/servers/sidecar-registry.ts index ed86330d..220975fe 100644 --- a/src/servers/sidecar-registry.ts +++ b/src/servers/sidecar-registry.ts @@ -225,7 +225,6 @@ async function ensureClaudeSidecar(email: string): Promise { } async function spawnAndWaitForRegistration(email: string, name: string): Promise { - // Get proxy secret for auth const proxySecret = await getProxySecret(); const proxyPort = process.env.ANTHROPIC_PROXY_PORT ?? '5051'; diff --git a/src/servers/sidecar/claude/claude-manager.ts b/src/servers/sidecar/claude/claude-manager.ts index ece56cb0..ed4cd39f 100644 --- a/src/servers/sidecar/claude/claude-manager.ts +++ b/src/servers/sidecar/claude/claude-manager.ts @@ -12,6 +12,8 @@ const SEND_TIMEOUT_MS = 5 * 60 * 1000; // The actual binary lives at ~/.local/bin/claude, symlinked from /usr/local/bin/claude. const CLAUDE_BIN = '/usr/local/bin/claude'; +// Capture original HOME before user-instance overrides it +const HOST_HOME = process.env.HOME!; const DATA_PATH = process.env.DATA_PATH ?? join(process.cwd(), 'data'); // Build full bwrap sandbox args for Claude (prefix + Anthropic env + runuser suffix) @@ -28,11 +30,13 @@ function buildSandboxArgs(email: string): string[] { // Active streaming processes const activeProcs = new Map(); -// MCP config path, set by user-instance at startup -let mcpConfigPath: string | undefined; +// MCP config paths, set by user-instance at startup +let mcpSandboxPath: string | undefined; // path inside bwrap sandbox (/data/...) +let mcpHostPath: string | undefined; // path on the host filesystem -export function setMcpConfigPath(path: string): void { - mcpConfigPath = path; +export function setMcpConfigPath(sandboxPath: string, hostPath: string): void { + mcpSandboxPath = sandboxPath; + mcpHostPath = hostPath; } // ── Blocking send ── @@ -60,7 +64,9 @@ export async function spawnClaude(params: ClaudeSpawnParams): Promise