import type { AgentMessage } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
import { type InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
/** Props for {@link MessageEntry}. */
export interface MessageEntryProps {
    /** The agent message to render. */
    readonly message: AgentMessage;
    /** Additional CSS class names for the root container. */
    readonly className?: string;
    /**
     * When provided on a `MESSAGE_HUMAN` entry, a hover-revealed "Edit" button
     * appears on the bubble. Clicking it invokes this callback — the session
     * chat uses it to stop the in-flight turn and pre-fill the composer with
     * this message for editing. Ignored for non-human messages.
     */
    readonly onEdit?: () => void;
    /**
     * Renders a `MESSAGE_AI` entry as a first-class plan document
     * ({@link PlanDocumentMessage}) instead of a chat bubble. Set by the thread
     * builder only on the NO-ARTIFACT fallback path: a completed Plan turn that
     * never published `plan.md` (older executions, failed upload) keeps its
     * plan inline — the message is the only copy of the plan. A turn that
     * published the artifact collapses the message into the compact plan card
     * instead (the document lives in the panel's plan tab). Ignored for non-AI
     * messages.
     */
    readonly isPlanDocument?: boolean;
    /**
     * The turn's interaction mode, stamped by the thread builder on the
     * synthetic prompt bubble (`MESSAGE_HUMAN`). Renders the
     * {@link InteractionModeBadge} for non-default modes (a "Plan" pill), so
     * the transcript reads unambiguously after mode switches. Ignored for
     * non-human messages.
     */
    readonly interactionMode?: InteractionMode;
}
/**
 * Renders a single message in the conversation thread.
 *
 * - `MESSAGE_HUMAN` — plain text with muted background
 * - `MESSAGE_AI` — markdown-rendered via Streamdown with block-level
 *   memoization and streaming-aware incomplete-syntax healing
 * - `MESSAGE_THINKING` — collapsible thinking block with subdued styling,
 *   collapsed by default showing a brief summary
 * - `MESSAGE_SYSTEM` — small muted text
 * - `MESSAGE_TOOL` / `UNSPECIFIED` — renders nothing (tool results are
 *   consumed by {@link ToolCallGroup})
 *
 * Wrapped in `React.memo` — structural sharing (T04) guarantees that
 * unchanged messages keep the same object reference, so completed
 * messages skip re-renders entirely during streaming.
 *
 * Purely presentational — no data fetching, no state.
 * All visual properties flow through `--stgm-*` tokens.
 *
 * @example
 * ```tsx
 * <MessageEntry message={agentMessage} />
 * ```
 */
export declare const MessageEntry: import("react").NamedExoticComponent<MessageEntryProps>;
//# sourceMappingURL=MessageEntry.d.ts.map