diff --git a/packages/coding-agent/src/tui/streaming-message.ts b/packages/coding-agent/src/tui/streaming-message.ts index da574b47..d1681988 100644 --- a/packages/coding-agent/src/tui/streaming-message.ts +++ b/packages/coding-agent/src/tui/streaming-message.ts @@ -1,18 +1,21 @@ import type { AssistantMessage, Message } from "@mariozechner/pi-ai"; -import { Container, Markdown, Text } from "@mariozechner/pi-tui"; +import { Container, Markdown, Spacer, Text } from "@mariozechner/pi-tui"; import chalk from "chalk"; /** * Component that renders a streaming message with live updates */ export class StreamingMessageComponent extends Container { + private spacer: Spacer; private markdown: Markdown; private statsText: Text; constructor() { super(); + this.spacer = new Spacer(1); this.markdown = new Markdown(""); this.statsText = new Text("", 1, 0); + this.addChild(this.spacer); this.addChild(this.markdown); this.addChild(this.statsText); } diff --git a/packages/coding-agent/src/tui/tui-renderer.ts b/packages/coding-agent/src/tui/tui-renderer.ts index 59300528..e381b4ce 100644 --- a/packages/coding-agent/src/tui/tui-renderer.ts +++ b/packages/coding-agent/src/tui/tui-renderer.ts @@ -199,7 +199,7 @@ export class TuiRenderer { this.editor.setText(""); this.ui.requestRender(); } else if (event.message.role === "assistant") { - // Create streaming component for assistant messages + // Create streaming component for assistant messages (has its own spacer) this.streamingComponent = new StreamingMessageComponent(); this.chatContainer.addChild(this.streamingComponent); this.streamingComponent.updateContent(event.message); @@ -304,6 +304,9 @@ export class TuiRenderer { } else if (message.role === "assistant") { const assistantMsg = message as AssistantMessage; + // Add spacer before assistant message + this.chatContainer.addChild(new Spacer(1)); + // Render content in order for (const content of assistantMsg.content) { if (content.type === "text" && content.text.trim()) { diff --git a/packages/tui/src/tui.ts b/packages/tui/src/tui.ts index a7d7dbc4..1f6d13ad 100644 --- a/packages/tui/src/tui.ts +++ b/packages/tui/src/tui.ts @@ -210,7 +210,7 @@ export class TUI extends Container { for (let i = firstChanged; i < newLines.length; i++) { if (i > firstChanged) buffer += "\r\n"; if (visibleWidth(newLines[i]) > width) { - throw new Error("Rendered line exceeds terminal width"); + throw new Error(`Rendered line ${i} exceeds terminal width\n\n${newLines[i]}`); } buffer += newLines[i]; }