import type { VisionClawConfig } from "../config/types.js";
import type { CommandMessage } from "../channels/interface.js";
import type { FastResponse } from "./fast-responder.js";
import type { VersionCheckResult } from "../utils/version-check.js";
import type { PendingUpgradeInfo, PendingRestartInfo } from "../config/index.js";
import type { SessionMode } from "./mailbox.js";
/**
 * Format the current wall-clock time with full date, long time, and timezone.
 * Used at the top of each wake/interrupt/post-compaction/calendar/auto-
 * screenshot context block so the agent always has an authoritative "now"
 * even though the system prompt is time-agnostic (to allow aggressive
 * subprocess pre-warming).
 *
 * Exported so every user-visible context message uses the same format —
 * this matters because the LLM picks up "now" from the most recent
 * timestamp it sees, and inconsistent formats reduce cache hits.
 */
export declare function formatNowWithTz(): string;
/**
 * A content block in a multimodal user message.
 * Matches the Anthropic Messages API content block types.
 */
export type ContentBlock = {
    type: "text";
    text: string;
} | {
    type: "image";
    source: {
        type: "base64";
        media_type: "image/png" | "image/jpeg" | "image/gif" | "image/webp";
        data: string;
    } | {
        type: "url";
        url: string;
    };
};
/**
 * Screenshot reference — always a raw base64-encoded PNG.
 */
export interface ScreenshotRef {
    base64: string;
}
/**
 * Build the context message injected on each agent wake.
 * Returns a multimodal content block array. Each message's text and image
 * attachments are kept adjacent so the model can associate them correctly.
 * All images are resized to fit Claude's vision constraints.
 */
export declare function buildWakeContext(options: {
    config: VisionClawConfig;
    trigger: "heartbeat" | "message";
    messages: CommandMessage[];
    calendarSummary: string;
    screenshot?: ScreenshotRef;
    versionUpdate?: VersionCheckResult;
    activeSession?: SessionMode;
    sessionMemos?: string | null;
    codingSessionStatus?: string | null;
    justOnboarded?: boolean;
    justUpgraded?: PendingUpgradeInfo | null;
    justRestarted?: PendingRestartInfo | null;
    voiceFollowups?: string | null;
    realtimeActiveSession?: string | null;
}): Promise<ContentBlock[]>;
/**
 * Build context for an interrupt message — a new user message that arrives
 * while the agent is already processing. Lighter than a full wake context
 * (no screenshot or calendar). Each message's text and attachments are kept
 * adjacent.
 */
export declare function buildInterruptContext(options: {
    messages: CommandMessage[];
}): Promise<ContentBlock[]>;
/**
 * Build an interrupt context that includes the fast responder's briefing.
 * The primary agent sees what the user said AND what was already replied,
 * so it can decide whether to follow up or skip.
 */
export declare function buildInterruptWithBriefing(options: {
    messages: CommandMessage[];
    fastResponse: FastResponse;
}): ContentBlock[];
/**
 * Build a fresh context after compaction. Returns multimodal blocks.
 */
export declare function buildPostCompactionContext(options: {
    config: VisionClawConfig;
    calendarSummary: string;
    pendingMessageCount: number;
}): ContentBlock[];
//# sourceMappingURL=context.d.ts.map