fix(tui): harden reasoning groups (#36913)

This commit is contained in:
Kit Langton 2026-07-14 16:38:42 -04:00 committed by GitHub
commit a149a61a89
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 138 additions and 97 deletions

View file

@ -737,6 +737,52 @@ test("completes exploration when a queued prompt is promoted", async () => {
}
})
test("classifies live tool rows independently of their call ID", async () => {
const events = createEventStream()
const sessionID = "session-tool-call-id"
const calls = createFetch((url) => {
if (url.pathname === `/api/session/${sessionID}/message`) return json({ data: [], cursor: {} })
}, events)
let rows!: ReturnType<typeof createSessionRows>
function Probe() {
rows = createSessionRows(() => sessionID)
return <box />
}
const app = await testRender(() => (
<TestTuiContexts>
<ClientProvider api={createApi(calls.fetch)}>
<ProjectProvider>
<DataProvider>
<Probe />
</DataProvider>
</ProjectProvider>
</ClientProvider>
</TestTuiContexts>
))
try {
emitEvent(events, {
id: "evt_tool_started",
created: 1,
type: "session.tool.input.started",
durable: durable(sessionID),
data: {
sessionID,
assistantMessageID: "message-assistant",
callID: "reasoning:0",
name: "bash",
},
})
await wait(() => rows.length > 0)
expect(rows).toEqual([{ type: "part", ref: { messageID: "message-assistant", partID: "reasoning:0" } }])
} finally {
app.renderer.destroy()
}
})
test("removes committed revert messages from local state", async () => {
const events = createEventStream()
const sessionID = "session-revert"

View file

@ -38,7 +38,7 @@ test("keeps non-exploration tools as individual part rows", () => {
const messages: SessionMessageInfo[] = [
assistant("assistant-1", [
{ type: "tool", id: "read-1", name: "read", state: pending(), time: { created: 1 } },
{ type: "tool", id: "bash-1", name: "bash", state: pending(), time: { created: 2 } },
{ type: "tool", id: "reasoning:0", name: "bash", state: pending(), time: { created: 2 } },
{ type: "tool", id: "grep-1", name: "grep", state: pending(), time: { created: 3 } },
]),
]
@ -51,7 +51,7 @@ test("keeps non-exploration tools as individual part rows", () => {
completed: true,
refs: [{ messageID: "assistant-1", partID: "read-1" }],
},
{ type: "part", ref: { messageID: "assistant-1", partID: "bash-1" } },
{ type: "part", ref: { messageID: "assistant-1", partID: "reasoning:0" } },
{
type: "group",
kind: "exploration",