diff --git a/src/servers/channels/send-claude-code.ts b/src/servers/channels/send-claude-code.ts index b35ccc33..256ce235 100644 --- a/src/servers/channels/send-claude-code.ts +++ b/src/servers/channels/send-claude-code.ts @@ -19,6 +19,14 @@ import type { MessageCost, PiEvent } from '@@/api/pi/types'; const SEND_TIMEOUT_MS = 5 * 60 * 1000; const PROXY_PORT = process.env.ANTHROPIC_PROXY_PORT ?? '5051'; +async function hasOwnCredentials(homeDir: string): Promise { + try { + return await Bun.file(join(homeDir, '.claude', '.credentials.json')).exists(); + } catch { + return false; + } +} + // Resolve absolute path to claude binary so sudo -u can find it regardless of target user's PATH const CLAUDE_BIN = (() => { const result = Bun.spawnSync({ cmd: ['which', 'claude'], stdout: 'pipe', stderr: 'ignore' }); @@ -161,14 +169,19 @@ export async function sendClaudeCode(params: ClaudeCodeParams): Promise = { ...toolEnv, - ...(isServiceUser - ? { HOME: process.env.HOME ?? '' } - : { ANTHROPIC_BASE_URL: `http://127.0.0.1:${PROXY_PORT}`, ANTHROPIC_API_KEY: proxySecret }), + ...authEnv, PATH: process.env.PATH ?? '', TERM: 'xterm-256color', }; @@ -177,6 +190,7 @@ export async function sendClaudeCode(params: ClaudeCodeParams): Promise = { ...toolEnv, - ...(isServiceUser - ? { HOME: cleanEnv.HOME ?? '' } - : { ANTHROPIC_BASE_URL: `http://127.0.0.1:${PROXY_PORT}`, ANTHROPIC_API_KEY: proxySecret }), + ...authEnv, PATH: cleanEnv.PATH ?? '', TERM: 'xterm-256color', }; @@ -335,6 +354,7 @@ export async function sendClaudeCodeStreaming(params: ClaudeCodeStreamingParams) sessionKey, username: shellUsername, isServiceUser, + userHasCredentials, cwd: workDir, resume: existingSession ?? null, });