/**
 * §25 — Per-turn enrichment input shapes mirrored from
 * `backend/agent/prompts/build_llm_messages.py:FocusedRange / RangeRestriction`.
 *
 * The host attaches these on every submit; the embedded runtime renders each
 * present field into a `TextContent` block on the user `AgentMessage`.
 * See `shortcutXL/docs/migration/archive/section_25_human_turn_enrichments/spec.md`.
 */
/**
 * The sheet, range, or chart focus captured from the user's current spreadsheet click/selection.
 * Mirrors backend `FocusedRange` TypedDict.
 *
 * Sub-shapes (per `_construct_human_prompt:601-628`):
 * - sheet-only: `range` is empty/whitespace.
 * - range without data: `range` is set, `data` is null/empty.
 * - range with data: both `range` and `data` are set.
 * - chart appended at end of focus_text when `chartName` is set.
 */
export interface FocusedRange {
    sheet: string;
    range: string;
    data?: string | null;
    chartName?: string | null;
}
/**
 * A range the user has explicitly selected with specific editing constraints.
 * Mirrors backend `RangeRestriction` TypedDict.
 *
 * `mode` values: `'restricted'` (forbids edits outside the range) or
 * `'enhanced'` (provides as primary context, edits allowed). Defaults to
 * `'enhanced'` when absent (backend `_construct_human_prompt:588`).
 *
 * **Heterogeneous-mode behavior:** if multiple restrictions are passed with
 * different `mode` values, the FIRST element's mode applies to the entire
 * rendered block. Backend behavior — see §25 spec § Simplifying assumptions #7b.
 */
export interface RangeRestriction {
    sheet: string;
    range: string;
    mode?: 'enhanced' | 'restricted';
    data?: string | null;
}
/** Type guard: is the input a valid FocusedRange? */
export declare function isFocusedRange(value: unknown): value is FocusedRange;
/** Type guard: is the input a valid RangeRestriction? */
export declare function isRangeRestriction(value: unknown): value is RangeRestriction;
//# sourceMappingURL=user-turn-enrichments.d.ts.map