import type { AriaNode } from './aria-node.js'; export type { AriaNode }; /** * Roles that carry no information on their own. A node of one of these roles * is removed and its children are hoisted into its parent when it also has no * name, no text and no state flags — this is the single largest size win, and * it is exactly what the MCP snapshot cannot do. */ export declare const SNAPSHOT_NOISE_ROLES: ReadonlySet; export interface SnapshotPruneResult { readonly nodes: readonly AriaNode[]; /** Nodes removed by the drop+hoist pass. */ readonly droppedNodes: number; /** True when at least one node's children were replaced by a `…` marker. */ readonly depthCapped: boolean; /** True when the node cap stopped emission and the `[N more nodes]` marker was appended. */ readonly nodeCapped: boolean; } /** Prune `nodes` under the three caps. Deterministic: the same tree in, the same tree out. */ export declare function pruneAriaSnapshot(nodes: readonly AriaNode[]): SnapshotPruneResult; /** * Render the pruned tree as one line per node: `- ""` plus inline * state flags and (for links / inputs) `url` / `placeholder` truncated to 80 * chars. Names are JSON-quoted, so a name containing a newline cannot break the * one-line-per-node contract. */ export declare function renderSnapshot(nodes: readonly AriaNode[]): string;