show subagent usage and active duration

This commit is contained in:
kingwl
2026-08-02 23:31:24 +08:00
parent baf133d134
commit b30686d634
35 changed files with 438 additions and 88 deletions

View File

@@ -1,8 +1,8 @@
- tree "子代理会话":
- treeitem "event-sourcing researcher Explain event sourcing in one · 可继续 · 当前未运行 刚刚" [expanded] [level=1]:
- treeitem "event-sourcing researcher Explain event sourcing in one · 可继续 · 当前未运行 7.9K tok · 2秒" [expanded] [level=1]:
- button "收起 event-sourcing researcher 的下级子代理":
- img
- text: event-sourcing researcher Explain event sourcing in one · 可继续 · 当前未运行 刚刚
- text: event-sourcing researcher Explain event sourcing in one · 可继续 · 当前未运行 7.9K tok · 2秒
- group:
- treeitem "example editor 可继续 · 当前未运行 刚刚" [level=2]
- treeitem "event-sourcing reviewer 一次性 · 当前未运行 刚刚" [level=1]
- treeitem "example editor 可继续 · 当前未运行 0 tok · 0秒" [level=2]
- treeitem "event-sourcing reviewer 一次性 · 当前未运行 0 tok · 0秒" [level=1]

View File

@@ -149,6 +149,7 @@ describe('web e2e: persisted subagent conversation and human continuation', () =
data: { turn: 1, reason: { kind: 'completed' } },
},
] as SessionEvent[])
await scaffold.ctx.sessionProjectionCache.coldSnapshot(oneShotId)
grandchildId = sessionId('recorded-grandchild')
const authoredAt = Date.now()
await scaffold.ctx.sessionPersistence.create({
@@ -192,6 +193,7 @@ describe('web e2e: persisted subagent conversation and human continuation', () =
data: { turn: 1, reason: { kind: 'completed' } },
},
] as SessionEvent[])
await scaffold.ctx.sessionProjectionCache.coldSnapshot(grandchildId)
expect(scaffold.ctx.agents.get(childId)).toBeUndefined()
expect(scaffold.ctx.agents.get(oneShotId)).toBeUndefined()
expect(scaffold.ctx.agents.get(grandchildId)).toBeUndefined()
@@ -246,6 +248,10 @@ describe('web e2e: persisted subagent conversation and human continuation', () =
name: `展开 ${ONE_SHOT_LABEL} 的下级子代理`,
}).count()).toBe(0)
await page.getByRole('button', { name: `展开 ${LABEL} 的下级子代理` }).click()
const childRow = page.getByRole('treeitem', { name: new RegExp(LABEL) })
const childLabel = await childRow.getAttribute('aria-label')
await page.waitForTimeout(1_100)
expect(await childRow.getAttribute('aria-label')).toBe(childLabel)
await page.getByRole('treeitem', { name: new RegExp(NESTED_LABEL) }).waitFor({ timeout: 15_000 })
expect(scaffold.ctx.agents.get(childId)).toBeUndefined()
expect(scaffold.ctx.agents.get(grandchildId)).toBeUndefined()