Merge branch 'copilot/precious-seahorse'

This commit is contained in:
David Kaya
2026-04-07 08:49:30 +02:00
7 changed files with 366 additions and 41 deletions
+100
View File
@@ -13,6 +13,8 @@ import {
isAgentActivityCompleted,
pruneSessionActivities,
pruneSessionRequestUsage,
purgeCompletedActivity,
summarizeSessionActivity,
type SessionActivityMap,
type SessionRequestUsageMap,
} from '@renderer/lib/sessionActivity';
@@ -209,6 +211,7 @@ describe('session activity helpers', () => {
},
};
// Active agents transition to 'completed' on idle (grace period before purge)
expect(
applySessionEventActivity(current, {
sessionId: 'session-1',
@@ -223,6 +226,11 @@ describe('session activity helpers', () => {
agentName: 'Architect',
activityType: 'completed',
},
reviewer: {
agentId: 'reviewer',
agentName: 'Reviewer',
activityType: 'completed',
},
},
});
});
@@ -243,6 +251,7 @@ describe('session activity helpers', () => {
},
};
// Active agents transition to 'completed' on cancel (grace period before purge)
expect(
applySessionEventActivity(current, {
sessionId: 'session-1',
@@ -272,6 +281,11 @@ describe('session activity helpers', () => {
agentName: 'Architect',
activityType: 'completed',
},
reviewer: {
agentId: 'reviewer',
agentName: 'Reviewer',
activityType: 'completed',
},
},
});
});
@@ -392,6 +406,92 @@ describe('session activity helpers', () => {
'session-2': current['session-2'],
});
});
test('purgeCompletedActivity removes completed entries after grace period', () => {
const current: SessionActivityMap = {
'session-1': {
architect: {
agentId: 'architect',
agentName: 'Architect',
activityType: 'completed',
},
reviewer: {
agentId: 'reviewer',
agentName: 'Reviewer',
activityType: 'completed',
},
},
};
const result = purgeCompletedActivity(current, 'session-1');
expect(result['session-1']).toBeUndefined();
});
test('purgeCompletedActivity is a no-op when nothing is completed', () => {
const current: SessionActivityMap = {
'session-1': {
architect: {
agentId: 'architect',
agentName: 'Architect',
activityType: 'thinking',
},
},
};
expect(purgeCompletedActivity(current, 'session-1')).toBe(current);
});
test('summarizeSessionActivity returns the most relevant label', () => {
expect(summarizeSessionActivity(undefined)).toBeUndefined();
expect(summarizeSessionActivity({})).toBeUndefined();
expect(
summarizeSessionActivity({
architect: {
agentId: 'architect',
agentName: 'Architect',
activityType: 'thinking',
},
}),
).toBe('Thinking…');
expect(
summarizeSessionActivity({
architect: {
agentId: 'architect',
agentName: 'Architect',
activityType: 'tool-calling',
toolName: 'bash',
},
}),
).toBe('Using bash…');
// Thinking takes priority over tool-calling
expect(
summarizeSessionActivity({
architect: {
agentId: 'architect',
agentName: 'Architect',
activityType: 'thinking',
},
reviewer: {
agentId: 'reviewer',
agentName: 'Reviewer',
activityType: 'tool-calling',
toolName: 'read_file',
},
}),
).toBe('Thinking…');
expect(
summarizeSessionActivity({
architect: {
agentId: 'architect',
agentName: 'Architect',
activityType: 'completed',
},
}),
).toBe('Completed');
});
});
describe('assistant usage accumulator', () => {