type Row = Record; export interface ConversationRoutingIdentityOptions { /** @deprecated A configured scan home is not physical process evidence and is ignored. */ defaultCodexHome?: string; } export interface ConversationRouteAssociation { terminalId: string; nativeId: string; threadId: string; codexHome: string; evidence: "resolved_native_identity" | "visible_status_card" | "closed_status_inspection"; } type RejectedProof = { status: "unavailable" | "conflict" | "ambiguous"; reason: string; }; export type ConversationRouteProof = { status: "exact"; association: ConversationRouteAssociation; } | RejectedProof; /** Legacy terminal IDs name the same exact provider, agent, endpoint and process. */ export declare function canonicalTerminalRouteId(value: string): string; export declare function terminalRouteIdsMatch(left: unknown, right: string): boolean; /** Link only fresh physical identity evidence. A same-cwd or resume command match never participates. */ export declare function associateConversationRoutes(terminals: readonly Row[], nativeRows: readonly Row[], options?: ConversationRoutingIdentityOptions): { associations: ConversationRouteAssociation[]; unassociated: { terminalId: string; reason: string; }[]; }; /** Native-offline fallback still requires the exact fresh terminal thread and home. * This proves identity only; dispatch certainty and terminal input safety remain separate gates. */ export declare function proveNativeTerminalRoute(nativeId: string, terminal: Row, options?: ConversationRoutingIdentityOptions): ConversationRouteProof; /** Multiple exact aliases are useful for List but cannot select a fallback terminal implicitly. */ export declare function resolveNativeTerminalRoute(nativeId: string, terminals: readonly Row[], options?: ConversationRoutingIdentityOptions): ConversationRouteProof; /** The closed inspection transaction is internal evidence, never a user-supplied routing hint. */ export declare function withClosedStatusInspection(before: Row, after: Row, observation: Row): Row; export {};