export type HighlightLevel = "critical" | "important" | "note";
export type ProcessedAction = "wrote-episode" | "skipped";
export interface Highlight {
    id: string;
    timestamp: string;
    level: HighlightLevel;
    tag: string;
    note: string;
}
export interface ProcessedMark {
    id: string;
    processedAt: string;
    action: ProcessedAction;
    detail?: string;
}
export interface WriteHighlightInput {
    tag: string;
    note: string;
    level: HighlightLevel;
}
/**
 * Append a highlight to the plan-scoped `.indusk/highlights.jsonl` queue.
 * Called by the working agent (via the `highlight` MCP tool) at trigger
 * points — brief accepted, ADR accepted, correction confirmed, retro
 * lesson, manual `/highlight` flag. The eval agent reads these later
 * and turns them into structured Graphiti episodes.
 *
 * The ID is `h-{YYYYMMDD}-{seq}` where `seq` is a 3-digit counter that
 * resets daily. The timestamp is ISO 8601 UTC.
 */
export declare function writeHighlight(projectRoot: string, input: WriteHighlightInput): Highlight;
/**
 * Return all highlights whose IDs don't yet appear in the processed log.
 * Used by the eval agent (via the `highlights_unprocessed` MCP tool) to
 * find highlights that haven't been written to Graphiti yet.
 */
export declare function readUnprocessedHighlights(projectRoot: string): Highlight[];
/**
 * Mark a highlight as processed. Called by the eval agent (via the
 * `highlight_mark_processed` MCP tool) after handling a highlight —
 * either writing a structured Graphiti episode (`wrote-episode`) or
 * deciding the highlight doesn't warrant a new episode (`skipped`).
 *
 * The operation is idempotent by design — appending a processed mark
 * for an already-processed ID just adds a duplicate entry, and
 * `readUnprocessedHighlights` uses a Set so duplicates don't matter.
 */
export declare function markProcessed(projectRoot: string, id: string, action: ProcessedAction, detail?: string): ProcessedMark;
