import { type IControllerToolCall, type IControllerToolExecution } from './interfaces.js'; /** * Structural equality for two JSON values. * * Tool payloads are JSON on both sides of the comparison, so key order carries no meaning and * reference identity carries none either. `JSON.stringify` would be wrong for the same reason — * it makes key order significant — and Node's `isDeepStrictEqual` is unavailable in the browser, * where the same rule has to hold. */ export declare const controllerJsonValuesEqual: (leftArg: unknown, rightArg: unknown) => boolean; /** * Whether a durable tool call from the transcript already carries everything a live snapshot of * the same call carries. This is what lets a receiver drop the live snapshot and render the * transcript alone; while it is false the snapshot has to stay, because dropping it would lose * state the transcript has not caught up with yet. * * Both the controller — deciding whether a message page already represents a live execution — * and the web client — deciding whether a live overlay may retire — ask exactly this question, * so they ask it through one implementation. The rule is deliberately conservative: an unproven * difference keeps the live snapshot rather than dropping observed state. */ export declare const controllerLiveToolExecutionIsCovered: (executionArg: IControllerToolExecution, toolCallArg: IControllerToolCall | undefined) => boolean;