mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-13 07:30:52 -07:00
Made tool calls take the entire terminal height
This commit is contained in:
@@ -189,7 +189,7 @@ describe('<ShellToolMessage />', () => {
|
||||
[
|
||||
'respects availableTerminalHeight when it is smaller than ACTIVE_SHELL_MAX_LINES',
|
||||
10,
|
||||
3, // 10 - 1 (static) - 6 (ASB reserved) = 3
|
||||
10,
|
||||
false,
|
||||
],
|
||||
[
|
||||
@@ -201,7 +201,7 @@ describe('<ShellToolMessage />', () => {
|
||||
[
|
||||
'uses full availableTerminalHeight when focused in alternate buffer mode',
|
||||
100,
|
||||
93, // 100 - 1 (static) - 6 (ASB reserved) = 93
|
||||
100,
|
||||
true,
|
||||
],
|
||||
[
|
||||
|
||||
@@ -191,7 +191,7 @@ export const ToolGroupMessage: React.FC<ToolGroupMessageProps> = ({
|
||||
maxLinesLimit: maxLines,
|
||||
});
|
||||
|
||||
if (contentMaxLines === undefined) return false;
|
||||
if (!contentMaxLines) return false;
|
||||
|
||||
if (typeof tool.resultDisplay === 'string') {
|
||||
const text = tool.resultDisplay;
|
||||
|
||||
@@ -23,10 +23,7 @@ import { Scrollable } from '../shared/Scrollable.js';
|
||||
import { ScrollableList } from '../shared/ScrollableList.js';
|
||||
import { SCROLL_TO_ITEM_END } from '../shared/VirtualizedList.js';
|
||||
import { ACTIVE_SHELL_MAX_LINES } from '../../constants.js';
|
||||
import {
|
||||
calculateToolContentMaxLines,
|
||||
TOOL_RESULT_MIN_LINES_SHOWN,
|
||||
} from '../../utils/toolLayoutUtils.js';
|
||||
import { calculateToolContentMaxLines } from '../../utils/toolLayoutUtils.js';
|
||||
import { SubagentProgressDisplay } from './SubagentProgressDisplay.js';
|
||||
|
||||
// Large threshold to ensure we don't cause performance issues for very large
|
||||
@@ -64,11 +61,6 @@ export const ToolResultDisplay: React.FC<ToolResultDisplayProps> = ({
|
||||
maxLinesLimit: maxLines,
|
||||
});
|
||||
|
||||
const effectiveMaxHeight =
|
||||
availableHeight !== undefined
|
||||
? Math.max(TOOL_RESULT_MIN_LINES_SHOWN, availableHeight)
|
||||
: undefined;
|
||||
|
||||
const combinedPaddingAndBorderWidth = 4;
|
||||
const childWidth = terminalWidth - combinedPaddingAndBorderWidth;
|
||||
|
||||
@@ -140,7 +132,7 @@ export const ToolResultDisplay: React.FC<ToolResultDisplayProps> = ({
|
||||
if (isAlternateBuffer && Array.isArray(truncatedResultDisplay)) {
|
||||
// If availableHeight is undefined, fallback to a safe default to prevents infinite loop
|
||||
// where Container grows -> List renders more -> Container grows.
|
||||
const limit = maxLines ?? effectiveMaxHeight ?? ACTIVE_SHELL_MAX_LINES;
|
||||
const limit = maxLines ?? availableHeight ?? ACTIVE_SHELL_MAX_LINES;
|
||||
const listHeight = Math.min(
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
||||
(truncatedResultDisplay as AnsiOutput).length,
|
||||
@@ -213,7 +205,7 @@ export const ToolResultDisplay: React.FC<ToolResultDisplayProps> = ({
|
||||
diffContent={(truncatedResultDisplay as FileDiffResult).fileDiff}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
||||
filename={(truncatedResultDisplay as FileDiffResult).fileName}
|
||||
availableTerminalHeight={effectiveMaxHeight}
|
||||
availableTerminalHeight={availableHeight}
|
||||
terminalWidth={childWidth}
|
||||
/>
|
||||
);
|
||||
@@ -227,7 +219,7 @@ export const ToolResultDisplay: React.FC<ToolResultDisplayProps> = ({
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
||||
data={truncatedResultDisplay as AnsiOutput}
|
||||
availableTerminalHeight={
|
||||
isAlternateBuffer ? undefined : effectiveMaxHeight
|
||||
isAlternateBuffer ? undefined : availableHeight
|
||||
}
|
||||
width={childWidth}
|
||||
maxLines={isAlternateBuffer ? undefined : maxLines}
|
||||
@@ -241,7 +233,7 @@ export const ToolResultDisplay: React.FC<ToolResultDisplayProps> = ({
|
||||
return (
|
||||
<Scrollable
|
||||
width={childWidth}
|
||||
maxHeight={maxLines ?? effectiveMaxHeight}
|
||||
maxHeight={maxLines ?? availableHeight}
|
||||
hasFocus={hasFocus} // Allow scrolling via keyboard (Shift+Up/Down)
|
||||
scrollToBottom={true}
|
||||
>
|
||||
@@ -253,7 +245,7 @@ export const ToolResultDisplay: React.FC<ToolResultDisplayProps> = ({
|
||||
return (
|
||||
<Box width={childWidth} flexDirection="column">
|
||||
<MaxSizedBox
|
||||
maxHeight={effectiveMaxHeight}
|
||||
maxHeight={availableHeight}
|
||||
maxWidth={childWidth}
|
||||
additionalHiddenLinesCount={hiddenLinesCount}
|
||||
>
|
||||
|
||||
@@ -133,6 +133,13 @@ exports[`<ShellToolMessage /> > Height Constraints > respects availableTerminalH
|
||||
"╭──────────────────────────────────────────────────────────────────────────────╮
|
||||
│ ⊶ Shell Command A shell command │
|
||||
│ │
|
||||
│ Line 91 │
|
||||
│ Line 92 │
|
||||
│ Line 93 │
|
||||
│ Line 94 │
|
||||
│ Line 95 │
|
||||
│ Line 96 │
|
||||
│ Line 97 │
|
||||
│ Line 98 │
|
||||
│ Line 99 │
|
||||
│ Line 100 █ │
|
||||
@@ -187,99 +194,106 @@ exports[`<ShellToolMessage /> > Height Constraints > uses full availableTerminal
|
||||
"╭──────────────────────────────────────────────────────────────────────────────╮
|
||||
│ ⊶ Shell Command A shell command (Shift+Tab to unfocus) │
|
||||
│ │
|
||||
│ Line 1 │
|
||||
│ Line 2 │
|
||||
│ Line 3 │
|
||||
│ Line 4 │
|
||||
│ Line 5 │
|
||||
│ Line 6 │
|
||||
│ Line 7 │
|
||||
│ Line 8 │
|
||||
│ Line 9 │
|
||||
│ Line 10 │
|
||||
│ Line 11 │
|
||||
│ Line 12 │
|
||||
│ Line 13 │
|
||||
│ Line 14 ▄ │
|
||||
│ Line 15 █ │
|
||||
│ Line 16 █ │
|
||||
│ Line 17 █ │
|
||||
│ Line 18 █ │
|
||||
│ Line 19 █ │
|
||||
│ Line 20 █ │
|
||||
│ Line 21 █ │
|
||||
│ Line 22 █ │
|
||||
│ Line 23 █ │
|
||||
│ Line 24 █ │
|
||||
│ Line 25 █ │
|
||||
│ Line 26 █ │
|
||||
│ Line 27 █ │
|
||||
│ Line 28 █ │
|
||||
│ Line 29 █ │
|
||||
│ Line 30 █ │
|
||||
│ Line 31 █ │
|
||||
│ Line 32 █ │
|
||||
│ Line 33 █ │
|
||||
│ Line 34 █ │
|
||||
│ Line 35 █ │
|
||||
│ Line 36 █ │
|
||||
│ Line 37 █ │
|
||||
│ Line 38 █ │
|
||||
│ Line 39 █ │
|
||||
│ Line 40 █ │
|
||||
│ Line 41 █ │
|
||||
│ Line 42 █ │
|
||||
│ Line 43 █ │
|
||||
│ Line 44 █ │
|
||||
│ Line 45 █ │
|
||||
│ Line 46 █ │
|
||||
│ Line 47 █ │
|
||||
│ Line 48 █ │
|
||||
│ Line 49 █ │
|
||||
│ Line 50 █ │
|
||||
│ Line 51 █ │
|
||||
│ Line 52 █ │
|
||||
│ Line 53 █ │
|
||||
│ Line 54 █ │
|
||||
│ Line 55 █ │
|
||||
│ Line 56 █ │
|
||||
│ Line 57 █ │
|
||||
│ Line 58 █ │
|
||||
│ Line 59 █ │
|
||||
│ Line 60 █ │
|
||||
│ Line 61 █ │
|
||||
│ Line 62 █ │
|
||||
│ Line 63 █ │
|
||||
│ Line 64 █ │
|
||||
│ Line 65 █ │
|
||||
│ Line 66 █ │
|
||||
│ Line 67 █ │
|
||||
│ Line 68 █ │
|
||||
│ Line 69 █ │
|
||||
│ Line 70 █ │
|
||||
│ Line 71 █ │
|
||||
│ Line 72 █ │
|
||||
│ Line 73 █ │
|
||||
│ Line 74 █ │
|
||||
│ Line 75 █ │
|
||||
│ Line 76 █ │
|
||||
│ Line 77 █ │
|
||||
│ Line 78 █ │
|
||||
│ Line 79 █ │
|
||||
│ Line 80 █ │
|
||||
│ Line 81 █ │
|
||||
│ Line 82 █ │
|
||||
│ Line 83 █ │
|
||||
│ Line 84 █ │
|
||||
│ Line 85 █ │
|
||||
│ Line 86 █ │
|
||||
│ Line 87 █ │
|
||||
│ Line 88 █ │
|
||||
│ Line 89 █ │
|
||||
│ Line 90 █ │
|
||||
│ Line 91 █ │
|
||||
│ Line 92 █ │
|
||||
│ Line 93 █ │
|
||||
│ Line 94 █ │
|
||||
│ Line 95 █ │
|
||||
│ Line 96 █ │
|
||||
│ Line 97 █ │
|
||||
│ Line 98 █ │
|
||||
│ Line 99 █ │
|
||||
│ Line 100 █ │
|
||||
│ Line 14 │
|
||||
│ Line 15 │
|
||||
│ Line 16 │
|
||||
│ Line 17 │
|
||||
│ Line 18 │
|
||||
│ Line 19 │
|
||||
│ Line 20 │
|
||||
│ Line 21 │
|
||||
│ Line 22 │
|
||||
│ Line 23 │
|
||||
│ Line 24 │
|
||||
│ Line 25 │
|
||||
│ Line 26 │
|
||||
│ Line 27 │
|
||||
│ Line 28 │
|
||||
│ Line 29 │
|
||||
│ Line 30 │
|
||||
│ Line 31 │
|
||||
│ Line 32 │
|
||||
│ Line 33 │
|
||||
│ Line 34 │
|
||||
│ Line 35 │
|
||||
│ Line 36 │
|
||||
│ Line 37 │
|
||||
│ Line 38 │
|
||||
│ Line 39 │
|
||||
│ Line 40 │
|
||||
│ Line 41 │
|
||||
│ Line 42 │
|
||||
│ Line 43 │
|
||||
│ Line 44 │
|
||||
│ Line 45 │
|
||||
│ Line 46 │
|
||||
│ Line 47 │
|
||||
│ Line 48 │
|
||||
│ Line 49 │
|
||||
│ Line 50 │
|
||||
│ Line 51 │
|
||||
│ Line 52 │
|
||||
│ Line 53 │
|
||||
│ Line 54 │
|
||||
│ Line 55 │
|
||||
│ Line 56 │
|
||||
│ Line 57 │
|
||||
│ Line 58 │
|
||||
│ Line 59 │
|
||||
│ Line 60 │
|
||||
│ Line 61 │
|
||||
│ Line 62 │
|
||||
│ Line 63 │
|
||||
│ Line 64 │
|
||||
│ Line 65 │
|
||||
│ Line 66 │
|
||||
│ Line 67 │
|
||||
│ Line 68 │
|
||||
│ Line 69 │
|
||||
│ Line 70 │
|
||||
│ Line 71 │
|
||||
│ Line 72 │
|
||||
│ Line 73 │
|
||||
│ Line 74 │
|
||||
│ Line 75 │
|
||||
│ Line 76 │
|
||||
│ Line 77 │
|
||||
│ Line 78 │
|
||||
│ Line 79 │
|
||||
│ Line 80 │
|
||||
│ Line 81 │
|
||||
│ Line 82 │
|
||||
│ Line 83 │
|
||||
│ Line 84 │
|
||||
│ Line 85 │
|
||||
│ Line 86 │
|
||||
│ Line 87 │
|
||||
│ Line 88 │
|
||||
│ Line 89 │
|
||||
│ Line 90 │
|
||||
│ Line 91 │
|
||||
│ Line 92 │
|
||||
│ Line 93 │
|
||||
│ Line 94 │
|
||||
│ Line 95 │
|
||||
│ Line 96 │
|
||||
│ Line 97 │
|
||||
│ Line 98 │
|
||||
│ Line 99 │
|
||||
│ Line 100 │
|
||||
"
|
||||
`;
|
||||
|
||||
|
||||
@@ -37,7 +37,10 @@ exports[`ToolResultDisplay > renders string result as plain text when renderOutp
|
||||
`;
|
||||
|
||||
exports[`ToolResultDisplay > truncates very long string results 1`] = `
|
||||
"... 248 hidden (Ctrl+O) ...
|
||||
"... 245 hidden (Ctrl+O) ...
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||
@@ -33,17 +33,10 @@ export function calculateToolContentMaxLines(options: {
|
||||
isAlternateBuffer: boolean;
|
||||
maxLinesLimit?: number;
|
||||
}): number | undefined {
|
||||
const { availableTerminalHeight, isAlternateBuffer, maxLinesLimit } = options;
|
||||
|
||||
const reservedLines = isAlternateBuffer
|
||||
? TOOL_RESULT_ASB_RESERVED_LINE_COUNT
|
||||
: TOOL_RESULT_STANDARD_RESERVED_LINE_COUNT;
|
||||
const { availableTerminalHeight, maxLinesLimit } = options;
|
||||
|
||||
let contentHeight = availableTerminalHeight
|
||||
? Math.max(
|
||||
0,
|
||||
availableTerminalHeight - TOOL_RESULT_STATIC_HEIGHT - reservedLines,
|
||||
)
|
||||
? Math.max(TOOL_RESULT_STATIC_HEIGHT, availableTerminalHeight)
|
||||
: undefined;
|
||||
|
||||
if (maxLinesLimit) {
|
||||
@@ -91,14 +84,7 @@ export function calculateShellMaxLines(options: {
|
||||
return isAlternateBuffer ? ACTIVE_SHELL_MAX_LINES : undefined;
|
||||
}
|
||||
|
||||
const reservedLines = isAlternateBuffer
|
||||
? TOOL_RESULT_ASB_RESERVED_LINE_COUNT
|
||||
: TOOL_RESULT_STANDARD_RESERVED_LINE_COUNT;
|
||||
|
||||
const maxLinesBasedOnHeight = Math.max(
|
||||
0,
|
||||
availableTerminalHeight - TOOL_RESULT_STATIC_HEIGHT - reservedLines,
|
||||
);
|
||||
const maxLinesBasedOnHeight = Math.max(1, availableTerminalHeight);
|
||||
|
||||
// 3. Handle ASB mode focus expansion.
|
||||
// We allow a focused shell in ASB mode to take up the full available height,
|
||||
|
||||
Reference in New Issue
Block a user