diff --git a/packages/server/src/server/agent/providers/claude-agent.test.ts b/packages/server/src/server/agent/providers/claude-agent.test.ts index 9adebeb9a..661e38315 100644 --- a/packages/server/src/server/agent/providers/claude-agent.test.ts +++ b/packages/server/src/server/agent/providers/claude-agent.test.ts @@ -1261,9 +1261,10 @@ function normalizeCwdCandidates(cwd: string): string[] { } function cleanupClaudeHistory(cwd: string) { + const configDir = process.env.CLAUDE_CONFIG_DIR ?? path.join(os.homedir(), ".claude"); for (const candidate of normalizeCwdCandidates(cwd)) { const sanitized = sanitizeClaudeProjectName(candidate); - const projectDir = path.join(os.homedir(), ".claude", "projects", sanitized); + const projectDir = path.join(configDir, "projects", sanitized); if (existsSync(projectDir)) { rmSync(projectDir, { recursive: true, force: true }); } diff --git a/packages/server/src/server/agent/providers/claude-agent.ts b/packages/server/src/server/agent/providers/claude-agent.ts index f5e773d7f..2639ab830 100644 --- a/packages/server/src/server/agent/providers/claude-agent.ts +++ b/packages/server/src/server/agent/providers/claude-agent.ts @@ -325,7 +325,8 @@ export class ClaudeAgentClient implements AgentClient { } async listPersistedAgents(options?: ListPersistedAgentsOptions): Promise { - const projectsRoot = path.join(os.homedir(), ".claude", "projects"); + const configDir = process.env.CLAUDE_CONFIG_DIR ?? path.join(os.homedir(), ".claude"); + const projectsRoot = path.join(configDir, "projects"); if (!(await pathExists(projectsRoot))) { return []; } @@ -628,7 +629,7 @@ class ClaudeAgentSession implements AgentSession { }; pending.resolve(result); this.pushToolCall({ - name: pending.request.name, + name: "permission", status: "granted", callId: pending.request.id, input: pending.request.input, @@ -641,7 +642,7 @@ class ClaudeAgentSession implements AgentSession { }; pending.resolve(result); this.pushToolCall({ - name: pending.request.name, + name: "permission", status: "denied", callId: pending.request.id, input: pending.request.input, @@ -1050,7 +1051,7 @@ class ClaudeAgentSession implements AgentSession { }; this.pushToolCall({ - name: toolName, + name: "permission", status: "requested", callId: requestId, input, @@ -1075,7 +1076,7 @@ class ClaudeAgentSession implements AgentSession { cleanup(); const error = new Error("Permission request timed out"); this.pushToolCall({ - name: toolName, + name: "permission", status: "denied", callId: requestId, input, diff --git a/packages/server/src/server/daemon.e2e.test.ts b/packages/server/src/server/daemon.e2e.test.ts index 95dc0ad29..c4522fcfe 100644 --- a/packages/server/src/server/daemon.e2e.test.ts +++ b/packages/server/src/server/daemon.e2e.test.ts @@ -2660,13 +2660,11 @@ describe("daemon E2E", () => { describe("Claude persisted agent import", () => { test("filters internal warmup entries from persisted Claude history", async () => { - const previousHome = process.env.HOME; - const previousUserProfile = process.env.USERPROFILE; - const homeDir = mkdtempSync(path.join(tmpdir(), "claude-home-")); - process.env.HOME = homeDir; - process.env.USERPROFILE = homeDir; + const previousClaudeConfigDir = process.env.CLAUDE_CONFIG_DIR; + const claudeConfigDir = mkdtempSync(path.join(tmpdir(), "claude-config-")); + process.env.CLAUDE_CONFIG_DIR = claudeConfigDir; - const projectDir = path.join(homeDir, ".claude", "projects", "test-project"); + const projectDir = path.join(claudeConfigDir, "projects", "test-project"); mkdirSync(projectDir, { recursive: true }); const sessionId = `session-${Date.now()}-${Math.random().toString(16).slice(2)}`; @@ -2708,17 +2706,12 @@ describe("daemon E2E", () => { expect(timelineTexts).toContain("Real task prompt"); expect(timelineTexts).not.toContain("Warmup"); } finally { - if (previousHome === undefined) { - delete process.env.HOME; + if (previousClaudeConfigDir === undefined) { + delete process.env.CLAUDE_CONFIG_DIR; } else { - process.env.HOME = previousHome; + process.env.CLAUDE_CONFIG_DIR = previousClaudeConfigDir; } - if (previousUserProfile === undefined) { - delete process.env.USERPROFILE; - } else { - process.env.USERPROFILE = previousUserProfile; - } - rmSync(homeDir, { recursive: true, force: true }); + rmSync(claudeConfigDir, { recursive: true, force: true }); } }); });