From 1b4483615a14f4e204e3fca8ed27cbb5bc30208f Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Thu, 16 Apr 2026 18:52:28 +0700 Subject: [PATCH] fix(server): surface raw claude auth status in diagnostic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return stdout verbatim instead of parsing JSON fields. Parser was fragile to upstream schema changes and added no value — users can read the raw output directly. --- .../server/agent/providers/claude-agent.ts | 36 ++++--------------- 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/packages/server/src/server/agent/providers/claude-agent.ts b/packages/server/src/server/agent/providers/claude-agent.ts index 67cea73f0..09e58797e 100644 --- a/packages/server/src/server/agent/providers/claude-agent.ts +++ b/packages/server/src/server/agent/providers/claude-agent.ts @@ -1218,46 +1218,22 @@ async function resolveClaudeAuth( const command = runtimeSettings?.command; try { - let stdout: string; if (command?.mode === "replace") { - const result = await execCommand( + const { stdout } = await execCommand( command.argv[0]!, [...command.argv.slice(1), "auth", "status"], { timeout: 5_000 }, ); - stdout = result.stdout; - } else { - const executable = await findExecutable("claude"); - if (!executable) { - return null; - } - const result = await execCommand(executable, ["auth", "status"], { timeout: 5_000 }); - stdout = result.stdout; + return stdout.trim() || null; } - const parsed: unknown = JSON.parse(stdout); - if (!parsed || typeof parsed !== "object") { + const executable = await findExecutable("claude"); + if (!executable) { return null; } - const record = parsed as Record; - if (record.loggedIn !== true) { - return "Not logged in"; - } - const parts: string[] = []; - if (typeof record.authMethod === "string" && record.authMethod) { - parts.push(record.authMethod); - } - if (typeof record.subscriptionType === "string" && record.subscriptionType) { - parts.push(record.subscriptionType); - } - if (typeof record.email === "string" && record.email) { - parts.push(record.email); - } else if (typeof record.orgName === "string" && record.orgName) { - parts.push(record.orgName); - } - - return parts.length > 0 ? parts.join(" · ") : "Logged in"; + const { stdout } = await execCommand(executable, ["auth", "status"], { timeout: 5_000 }); + return stdout.trim() || null; } catch { return null; }