/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { Box, Static } from 'ink'; import { HistoryItemDisplay } from './HistoryItemDisplay.js'; import { ShowMoreLines } from './ShowMoreLines.js'; import { OverflowProvider } from '../contexts/OverflowContext.js'; import { useUIState } from '../contexts/UIStateContext.js'; import { useAppContext } from '../contexts/AppContext.js'; import { AppHeader } from './AppHeader.js'; import { useSettings } from '../contexts/SettingsContext.js'; // Limit Gemini messages to a very high number of lines to mitigate performance // issues in the worst case if we somehow get an enormous response from Gemini. // This threshold is arbitrary but should be high enough to never impact normal // usage. const MAX_GEMINI_MESSAGE_LINES = 65536; export const MainContent = () => { const { version } = useAppContext(); const uiState = useUIState(); const settings = useSettings(); const useAlternateBuffer = settings.merged.ui?.useAlternateBuffer ?? false; const { pendingHistoryItems, mainAreaWidth, staticAreaMaxItemHeight, availableTerminalHeight, } = uiState; const historyItems = [ , ...uiState.history.map((h) => ( )), ]; const pendingItems = ( {pendingHistoryItems.map((item, i) => ( ))} ); if (useAlternateBuffer) { // Placeholder alternate buffer implementation using a scrollable box that // is always scrolled to the bottom. In follow up PRs we will switch this // to a proper alternate buffer implementation. return ( {historyItems} {pendingItems} ); } return ( <> {(item) => item} {pendingItems} ); };