diff --git a/src/acp-agent.ts b/src/acp-agent.ts index 972c28f8..992d3ee8 100644 --- a/src/acp-agent.ts +++ b/src/acp-agent.ts @@ -811,6 +811,7 @@ export class ClaudeAcpAgent implements Agent { message.includes("Failed to write to process stdin") ) { this.logger.error(`Session ${params.sessionId}: Claude Agent process died: ${message}`); + session.settingsManager.dispose(); session.input.end(); delete this.sessions[params.sessionId]; throw RequestError.internalError( @@ -858,6 +859,7 @@ export class ClaudeAcpAgent implements Agent { } await this.cancel({ sessionId: params.sessionId }); + session.settingsManager.dispose(); session.abortController.abort(); delete this.sessions[params.sessionId]; diff --git a/src/tests/acp-agent.test.ts b/src/tests/acp-agent.test.ts index ec479629..bebac4bd 100644 --- a/src/tests/acp-agent.test.ts +++ b/src/tests/acp-agent.test.ts @@ -1336,7 +1336,7 @@ describe("stop reason propagation", () => { currentModelId: "default", availableModels: [], }, - settingsManager: {} as any, + settingsManager: { dispose: vi.fn() } as any, accumulatedUsage: { inputTokens: 0, outputTokens: 0, @@ -1470,7 +1470,7 @@ describe("stop reason propagation", () => { currentModelId: "default", availableModels: [], }, - settingsManager: {} as any, + settingsManager: { dispose: vi.fn() } as any, accumulatedUsage: { inputTokens: 0, outputTokens: 0, @@ -1543,7 +1543,7 @@ describe("session/close", () => { currentModelId: "default", availableModels: [], }, - settingsManager: {} as any, + settingsManager: { dispose: vi.fn() } as any, accumulatedUsage: { inputTokens: 0, outputTokens: 0, @@ -1570,6 +1570,7 @@ describe("session/close", () => { expect(result).toEqual({}); expect(agent.sessions["session-1"]).toBeUndefined(); expect(session.query.interrupt).toHaveBeenCalled(); + expect(session.settingsManager.dispose).toHaveBeenCalled(); }); it("should abort the session's abort controller", async () => {