feat(client): surface subagent activity in sidebar

This commit is contained in:
Yichen Jiang
2026-08-08 14:42:07 +08:00
parent 915a56208d
commit 04e6a98064
20 changed files with 320 additions and 93 deletions

View File

@@ -95,18 +95,35 @@ describe('deriveGroups', () => {
it('hides subagent-origin sessions without hiding ordinary forks', () => {
const parent = summary('parent', 1)
const fork = { ...summary('fork', 2), parentId: parent.id }
const subagent = { ...summary('subagent', 3), parentId: parent.id, origin: 'subagent' as const }
const sessions = { ...list(parent, fork, subagent), current: subagent.id }
const subagent = {
...summary('subagent', 3), parentId: parent.id, origin: 'subagent' as const, running: true,
}
const grandchild = {
...summary('grandchild', 4), parentId: subagent.id, origin: 'subagent' as const, running: true,
}
const fork = { ...summary('fork', 2), parentId: subagent.id }
const forkChild = {
...summary('fork-child', 5), parentId: fork.id, origin: 'subagent' as const, running: true,
}
const sessions = { ...list(parent, fork, subagent, grandchild, forkChild), current: subagent.id }
const groups = deriveGroups(
sessions,
[workspace('first', ['parent', 'fork', 'subagent'])],
[workspace('first', ['parent', 'fork', 'subagent', 'grandchild', 'fork-child'])],
noArchive,
view(['first']),
)
expect(groups[0]!.sessions.map(node => node.id)).toEqual([parent.id, fork.id])
expect(groups[0]!.sessionCount).toBe(2)
expect(groups[0]!.sessions[0]).toMatchObject({ running: false, runningSubagentCount: 2 })
expect(groups[0]!.sessions[1]).toMatchObject({ running: false, runningSubagentCount: 1 })
expect(deriveFlat(sessions, noArchive).map(node => [node.id, node.runningSubagentCount])).toEqual([
[fork.id, 1], [parent.id, 2],
])
expect(deriveSearchResults(
sessions, [workspace('first', ['parent', 'fork'])], 'parent', noArchive,
{ items: [], hasMore: false }, 10,
).items[0]).toMatchObject({ id: parent.id, runningSubagentCount: 2 })
})
it('ignores fork lineage and sorts every ungrouped session as a top-level row', () => {
@@ -274,6 +291,7 @@ describe('deriveSearchResults', () => {
title: 'Needle title',
workspace: 'Alpha',
running: false,
runningSubagentCount: 0,
pendingInteraction: 'plan-review',
completed: false,
snippet: 'title session body excerpt',
@@ -283,6 +301,7 @@ describe('deriveSearchResults', () => {
title: 'Ordinary title',
workspace: 'Needle Workspace',
running: false,
runningSubagentCount: 0,
completed: false,
},
{
@@ -290,6 +309,7 @@ describe('deriveSearchResults', () => {
title: 'content-hit',
workspace: 'c',
running: false,
runningSubagentCount: 0,
completed: false,
snippet: 'body needle excerpt',
},