import type { GatewayEvent } from "../../../gateway/index.js";
export type TuiRenderState = {
transcript: string[];
activeTools: Record<string, string>;
errors: string[];
};
export function createTuiRenderState(): TuiRenderState {
return { transcript: [], activeTools: {}, errors: [] };
}
export function applyTuiEvent(state: TuiRenderState, event: GatewayEvent): TuiRenderState {
switch (event.type) {
case "assistant_text_delta":
state.transcript.push(event.text);
break;
case "assistant_thinking_delta":
state.transcript.push(`[thinking] ${event.text}`);
break;
case "tool_call_started":
state.activeTools[event.toolCallId] = event.name;
break;
case "tool_call_finished":
delete state.activeTools[event.toolCallId];
state.transcript.push(`[tool:${event.toolCallId}] ${event.ok ? "ok" : "error"}`);
break;
case "error":
state.errors.push(event.message);
break;
}
return state;
}