From 628fdff29e603a781c1ffaae9b5d3bcee825bde9 Mon Sep 17 00:00:00 2001 From: David Kaya Date: Wed, 25 Mar 2026 22:20:57 +0100 Subject: [PATCH] fix: clear live agent status on cancel Clear only active agent statuses when a session reaches idle, and keep the terminal cancelled/error run cleanup in place. Add regression coverage for idle cleanup after cancellation-like flows. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/renderer/lib/sessionActivity.ts | 4 +++ tests/renderer/sessionActivity.test.ts | 36 +++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/renderer/lib/sessionActivity.ts b/src/renderer/lib/sessionActivity.ts index 434d99b..0a67a14 100644 --- a/src/renderer/lib/sessionActivity.ts +++ b/src/renderer/lib/sessionActivity.ts @@ -46,6 +46,10 @@ export function applySessionEventActivity( if (event.status === 'running') { return removeSessionActivity(current, event.sessionId); } + + if (event.status === 'idle') { + return clearActiveSessionActivity(current, event.sessionId); + } } if ( diff --git a/tests/renderer/sessionActivity.test.ts b/tests/renderer/sessionActivity.test.ts index abc3b66..b7217a1 100644 --- a/tests/renderer/sessionActivity.test.ts +++ b/tests/renderer/sessionActivity.test.ts @@ -149,7 +149,7 @@ describe('session activity helpers', () => { }); }); - test('keeps the last observed status after completion or error', () => { + test('preserves completed activity on idle and error', () => { const current: SessionActivityMap = { 'session-1': { architect: { @@ -179,6 +179,40 @@ describe('session activity helpers', () => { ).toEqual(current); }); + test('clears only active agent states when a session becomes idle', () => { + const current: SessionActivityMap = { + 'session-1': { + architect: { + agentId: 'architect', + agentName: 'Architect', + activityType: 'completed', + }, + reviewer: { + agentId: 'reviewer', + agentName: 'Reviewer', + activityType: 'thinking', + }, + }, + }; + + expect( + applySessionEventActivity(current, { + sessionId: 'session-1', + kind: 'status', + occurredAt: '2026-03-23T00:00:01.000Z', + status: 'idle', + }), + ).toEqual({ + 'session-1': { + architect: { + agentId: 'architect', + agentName: 'Architect', + activityType: 'completed', + }, + }, + }); + }); + test('clears only active agent states when a run is cancelled', () => { const current: SessionActivityMap = { 'session-1': {