Coalesce sequential status messages

Rapidly changing settings no longer spams the chat log with multiple status lines.

fixes #365
This commit is contained in:
Mario Zechner 2026-01-01 00:28:37 +01:00
parent ac6f5006a9
commit a2afa490f1
3 changed files with 7 additions and 6 deletions

View file

@ -199,6 +199,7 @@ Total color count increased from 46 to 50. See [docs/theme.md](docs/theme.md) fo
### Fixed
- **Status messages spam chat log**: Rapidly changing settings (e.g., thinking level via Shift+Tab) would add multiple status lines. Sequential status updates now coalesce into a single line. ([#365](https://github.com/badlogic/pi-mono/pull/365) by [@paulbettner](https://github.com/paulbettner))
- **Toggling thinking blocks during streaming shows nothing**: Pressing Ctrl+T while streaming would hide the current message until streaming completed.
- **Resuming session resets thinking level to off**: Initial model and thinking level were not saved to session file, causing `--resume`/`--continue` to default to `off`. ([#342](https://github.com/badlogic/pi-mono/issues/342) by [@aliou](https://github.com/aliou))
- **Hook `tool_result` event ignores errors from custom tools**: The `tool_result` hook event was never emitted when tools threw errors, and always had `isError: false` for successful executions. Now emits the event with correct `isError` value in both success and error cases. ([#374](https://github.com/badlogic/pi-mono/issues/374) by [@nicobailon](https://github.com/nicobailon))

View file

@ -92,8 +92,8 @@ export class InteractiveMode {
private changelogMarkdown: string | undefined = undefined;
// Status line tracking (for mutating immediately-sequential status updates)
private lastStatusSpacer: Spacer | null = null;
private lastStatusText: Text | null = null;
private lastStatusSpacer: Spacer | undefined = undefined;
private lastStatusText: Text | undefined = undefined;
// Streaming message tracking
private streamingComponent: AssistantMessageComponent | undefined = undefined;

View file

@ -19,8 +19,8 @@ describe("InteractiveMode.showStatus", () => {
const fakeThis: any = {
chatContainer: new Container(),
ui: { requestRender: vi.fn() },
lastStatusSpacer: null,
lastStatusText: null,
lastStatusSpacer: undefined,
lastStatusText: undefined,
};
(InteractiveMode as any).prototype.showStatus.call(fakeThis, "STATUS_ONE");
@ -38,8 +38,8 @@ describe("InteractiveMode.showStatus", () => {
const fakeThis: any = {
chatContainer: new Container(),
ui: { requestRender: vi.fn() },
lastStatusSpacer: null,
lastStatusText: null,
lastStatusSpacer: undefined,
lastStatusText: undefined,
};
(InteractiveMode as any).prototype.showStatus.call(fakeThis, "STATUS_ONE");