import React from "react"; import type { DOMElement } from "ink"; import type { Provider, ThinkingLevel } from "@kenkaiiii/gg-ai"; import type { ContextWindowOptions } from "../../core/model-registry.js"; import type { TaskRecord } from "../../core/tasks-store.js"; import type { SlashCommandInfo } from "./SlashCommandMenu.js"; import type { ImageAttachment } from "../../utils/image.js"; import type { CompletedItem } from "../app-items.js"; import type { FooterStatusLayoutDecision } from "./BackgroundTasksBar.js"; import type { ThemeName, useTheme } from "../theme/theme.js"; import { type PasteInfo } from "./InputArea.js"; import type { LiveToolEntry } from "./LiveToolPanel.js"; import type { ActivityPhase, RetryInfo } from "../hooks/useAgentLoop.js"; import type { BackgroundProcess } from "../../core/process-manager.js"; interface ChatInputControls { onSubmit: (value: string, images: ImageAttachment[], paste?: PasteInfo) => void; onAbort: () => void; injectText?: { text: string; nonce: number; } | null; inputActive: boolean; onDownAtEnd: () => void; onShiftTab: () => void; onToggleTasks: () => void; onToggleSkills: () => void; onToggleMarkdown: () => void; cwd: string; commands: SlashCommandInfo[]; /** Fullscreen alt-screen: route mouse-wheel to the transcript scroll. */ mouseScroll?: boolean; onScroll?: (deltaLines: number) => void; } interface TaskPickerControls { open: boolean; tasks: readonly TaskRecord[]; onClose: () => void; onStart: (task: TaskRecord) => void; onRunAll: (task?: TaskRecord) => void; onDelete: (task: TaskRecord) => void; } interface ChatScreenProps { columns: number; liveItems: CompletedItem[]; renderItem: (item: CompletedItem, index: number, items: CompletedItem[]) => React.ReactNode; isRunning: boolean; visibleStreamingText: string; streamingThinking: string; thinkingMs: number; reserveStreamingSpacing: boolean; renderMarkdown: boolean; measuredLiveAreaRows: number; /** * Fullscreen alt-screen viewport mode. When true, the transcript is rendered * inside Ink (history + liveItems + streaming) as a bounded, app-scrolled * region, and the controls below it are pinned to the bottom of a full-height * frame. When false, the legacy scrollback `ChatLivePane` tail is used. */ fullscreen?: boolean; rows: number; transcriptLines: readonly string[]; viewportRows: number; assistantMarginTop: number; streamingContinuation: boolean; controlsRef: (node: DOMElement | null) => void; hiddenQueuedCount: number; queueIndicatorMarginTop: number; theme: ReturnType; statusSlotVisible: boolean; activityVisible: boolean; stallStatusVisible: boolean; liveToolFeed: readonly LiveToolEntry[]; doneStatus: { verb: string; durationMs: number; } | null; activityPhase: ActivityPhase; elapsedMs: number; runStartRef: React.RefObject; isThinking: boolean; thinkingLevel?: ThinkingLevel; tokenEstimate: number; charCountRef: React.RefObject; realTokensAccumRef: React.RefObject; lastUserMessage?: string; activeToolNames: string[]; retryInfo?: RetryInfo | null; planDone: number; planTotal: number; formatDuration: (durationMs: number) => string; inputControls: ChatInputControls; taskPicker: TaskPickerControls; overlay: string | null; onModelSelect: (modelId: string) => void; onModelCancel: () => void; loggedInProviders: Provider[]; currentModel: string; currentProvider: Provider; onThemeSelect: (themeName: ThemeName) => void; onThemeCancel: () => void; currentTheme: string; contextUsed: number; contextWindowOptions?: ContextWindowOptions; displayedCwd: string; gitBranch?: string | null; planMode: boolean; exitPending: boolean; footerStatusLayout: FooterStatusLayoutDecision; backgroundTasks: BackgroundProcess[]; taskBarFocused: boolean; taskBarExpanded: boolean; selectedTaskIndex: number; onTaskBarExpand: () => void; onTaskBarCollapse: () => void; onTaskKill: (id: string) => void; onTaskBarExit: () => void; onTaskNavigate: (index: number) => void; } export declare function ChatScreen({ columns, liveItems, renderItem, isRunning, visibleStreamingText, streamingThinking, thinkingMs, reserveStreamingSpacing, renderMarkdown, measuredLiveAreaRows, fullscreen, rows, transcriptLines, viewportRows, assistantMarginTop, streamingContinuation, controlsRef, hiddenQueuedCount, queueIndicatorMarginTop, theme, statusSlotVisible, activityVisible, stallStatusVisible, liveToolFeed, doneStatus, activityPhase, elapsedMs, runStartRef, isThinking, thinkingLevel, tokenEstimate, charCountRef, realTokensAccumRef, lastUserMessage, activeToolNames, retryInfo, planDone, planTotal, formatDuration, inputControls, taskPicker, overlay, onModelSelect, onModelCancel, loggedInProviders, currentModel, currentProvider, onThemeSelect, onThemeCancel, currentTheme, contextUsed, contextWindowOptions, displayedCwd, gitBranch, planMode, exitPending, footerStatusLayout, backgroundTasks, taskBarFocused, taskBarExpanded, selectedTaskIndex, onTaskBarExpand, onTaskBarCollapse, onTaskKill, onTaskBarExit, onTaskNavigate, }: ChatScreenProps): import("react/jsx-runtime").JSX.Element; export {}; //# sourceMappingURL=ChatScreen.d.ts.map