import React from "react"; import type { ContentPart } from "../sse-event-processor.js"; export declare function displayableUserMessageText(text: string): string; export declare function isHiddenUserMessage(message: unknown): boolean; interface FormattedMessageTimestamp { short: string; full: string; } export declare function formatMessageTimestamp(value: unknown): FormattedMessageTimestamp | null; export declare function MessageTimestamp({ timestamp, className, }: { timestamp: FormattedMessageTimestamp; className?: string; }): React.JSX.Element; export declare function SelectionAttachedPill(): React.JSX.Element | null; export declare const CheckpointContext: React.Context<{ apiUrl: string; devMode: boolean; threadId?: string; checkpointRunIds?: ReadonlySet; } | null>; export declare const MessageActionsContext: React.Context<{ onForkChat?: () => void | boolean | Promise; } | null>; /** * Restore rewrites the working tree, so only offer it when the server actually * has a checkpoint for this turn. Auto-checkpointing skips turns that started * from a dirty tree or a non-git cwd; gating on Code mode alone put a * "Revert to here" item on turns where clicking it could do nothing. */ export declare function shouldOfferRestore(args: { devMode: boolean | undefined; isComplete: boolean; isLast: boolean; runId: string | undefined; checkpointRunIds: ReadonlySet | undefined; }): boolean; /** * Live yields put the run id at `metadata.custom.runId`; server-persisted * messages put it at `metadata.runId`. */ export declare function assistantMessageRunId(message: unknown): string | undefined; export declare function MessageBranchPicker(): React.JSX.Element; export declare function MessageActionsMenu({ showRevert, onRevert, }?: { showRevert?: boolean; onRevert?: () => void; }): React.JSX.Element; export declare function UserMessage(): React.JSX.Element | null; export declare function messageTextFromContent(content: unknown): string; export declare function latestUserMessageText(messages: readonly unknown[]): string; export declare function userMessageTextBeforeAssistant(messages: readonly unknown[], assistantMessageId: string): string; export declare function assistantMessageHasUnresolvedTool(content: unknown): boolean; export declare function assistantMessageHasCompletedCustomUi(content: unknown): boolean; export declare function assistantMessageHasCustomUi(content: unknown): boolean; export declare function computeActiveTailToolCallId(content: ContentPart[] | undefined, { chatRunning, isLast }: { chatRunning: boolean; isLast: boolean; }): string | null; export declare function shouldShowAssistantMessageFooter({ isLast, chatRunning, hasRenderableContent, statusIsTerminal, hasUnresolvedTool, }: { isLast: boolean; chatRunning: boolean; hasRenderableContent: boolean; statusIsTerminal: boolean; hasUnresolvedTool?: boolean; }): boolean; /** * Server-authoritative "a run for this thread is still active and running". * Local `chatRunning` dips to not-running at every chunk boundary and transport * re-attach while the turn is alive server-side, so it cannot decide on its own * that the agent stopped. */ export declare const ServerRunActiveContext: React.Context; export declare function shouldShowMissingFinalResponse({ isCurrentTurnRunning, serverRunActive, statusIsTerminal, hasAssistantText, hasUnresolvedTool, hasCompletedCustomUi, }: { isCurrentTurnRunning: boolean; serverRunActive?: boolean; statusIsTerminal: boolean; hasAssistantText: boolean; hasUnresolvedTool: boolean; hasCompletedCustomUi?: boolean; }): boolean; export declare function useSettledFlag(active: boolean, delayMs: number): boolean; export declare function shouldShowAssistantWorkSummary({ isLast, isComplete, hasCollapsibleWork, hasUnresolvedTool, }: { isLast: boolean; isComplete: boolean; hasCollapsibleWork: boolean; hasUnresolvedTool: boolean; }): boolean; export declare function isCollapsibleAssistantWorkPart(part: { type?: string; toolName?: string; chatUI?: unknown; mcpApp?: unknown; }): boolean; export declare function getAssistantToolSummaryInfo(parts: readonly { type?: string; toolCallId?: string; toolName?: string; args?: Record; chatUI?: unknown; mcpApp?: unknown; }[]): { startIndex: number; hiddenToolCount: number; }; export declare function AssistantMessage(): React.JSX.Element | null; export declare function RunningActivityStatus({ label }: { label: string; }): React.JSX.Element; export declare function ThinkingIndicator({ label, }?: { label?: string; }): React.JSX.Element; export {}; //# sourceMappingURL=message-components.d.ts.map