diff --git a/ui-tui/src/__tests__/createGatewayEventHandler.test.ts b/ui-tui/src/__tests__/createGatewayEventHandler.test.ts index 991c87a1c6..658ca571b6 100644 --- a/ui-tui/src/__tests__/createGatewayEventHandler.test.ts +++ b/ui-tui/src/__tests__/createGatewayEventHandler.test.ts @@ -123,6 +123,20 @@ describe('createGatewayEventHandler', () => { expect(appended[0]?.toolTokens).toBeGreaterThan(0) }) + it('streams legacy thinking.delta into visible reasoning state', () => { + vi.useFakeTimers() + const appended: Msg[] = [] + const streamed = 'short streamed reasoning' + + createGatewayEventHandler(buildCtx(appended))({ payload: { text: streamed }, type: 'thinking.delta' } as any) + vi.runOnlyPendingTimers() + + expect(getTurnState().reasoning).toBe(streamed) + expect(getTurnState().reasoningActive).toBe(true) + expect(getTurnState().reasoningTokens).toBe(estimateTokensRough(streamed)) + vi.useRealTimers() + }) + it('ignores fallback reasoning.available when streamed reasoning already exists', () => { const appended: Msg[] = [] const streamed = 'short streamed reasoning' diff --git a/ui-tui/src/app/createGatewayEventHandler.ts b/ui-tui/src/app/createGatewayEventHandler.ts index 15cf00a5a9..94e82c56c3 100644 --- a/ui-tui/src/app/createGatewayEventHandler.ts +++ b/ui-tui/src/app/createGatewayEventHandler.ts @@ -220,7 +220,12 @@ export function createGatewayEventHandler(ctx: GatewayEventHandlerContext): (ev: const text = ev.payload?.text if (text !== undefined) { - scheduleThinkingStatus(text ? String(text) : statusFromBusy()) + const value = String(text) + scheduleThinkingStatus(value || statusFromBusy()) + + if (value) { + turnController.recordReasoningDelta(value) + } } return