feat(cli): implement modular dense tool output with summary/payload pattern

- Support structured summaries and payloads in ToolGroupMessage/DenseToolMessage.
- Add specialized box-layout rendering for file and read-many-files tools.
- Refine tool state management in useGeminiStream during cancellations.
- Update UI tests and snapshots to reflect new compact rendering styles.
This commit is contained in:
Jarrod Whelan
2026-02-11 02:31:00 -08:00
parent 35f56a5496
commit 03de28960f
11 changed files with 479 additions and 159 deletions
@@ -8,6 +8,7 @@ import {
renderWithProviders,
persistentStateMock,
} from '../../test-utils/render.js';
import { createMockSettings } from '../../test-utils/settings.js';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { AlternateBufferQuittingDisplay } from './AlternateBufferQuittingDisplay.js';
import { ToolCallStatus } from '../types.js';
@@ -90,6 +91,10 @@ const mockPendingHistoryItems: HistoryItemWithoutId[] = [
];
describe('AlternateBufferQuittingDisplay', () => {
const mockSettings = createMockSettings({
ui: { enableCompactToolOutput: false },
});
beforeEach(() => {
vi.clearAllMocks();
});
@@ -116,6 +121,7 @@ describe('AlternateBufferQuittingDisplay', () => {
history: mockHistory,
pendingHistoryItems: mockPendingHistoryItems,
},
settings: mockSettings,
},
);
expect(lastFrame()).toMatchSnapshot('with_history_and_pending');
@@ -131,6 +137,7 @@ describe('AlternateBufferQuittingDisplay', () => {
history: [],
pendingHistoryItems: [],
},
settings: mockSettings,
},
);
expect(lastFrame()).toMatchSnapshot('empty');
@@ -146,6 +153,7 @@ describe('AlternateBufferQuittingDisplay', () => {
history: mockHistory,
pendingHistoryItems: [],
},
settings: mockSettings,
},
);
expect(lastFrame()).toMatchSnapshot('with_history_no_pending');
@@ -161,6 +169,7 @@ describe('AlternateBufferQuittingDisplay', () => {
history: [],
pendingHistoryItems: mockPendingHistoryItems,
},
settings: mockSettings,
},
);
expect(lastFrame()).toMatchSnapshot('with_pending_no_history');
@@ -196,6 +205,7 @@ describe('AlternateBufferQuittingDisplay', () => {
history: [],
pendingHistoryItems,
},
settings: mockSettings,
},
);
const output = lastFrame();
@@ -219,6 +229,7 @@ describe('AlternateBufferQuittingDisplay', () => {
history,
pendingHistoryItems: [],
},
settings: mockSettings,
},
);
expect(lastFrame()).toMatchSnapshot('with_user_gemini_messages');