import type { NegotiationAction, NegotiationConsultationReason, NegotiationProtocolVersion, NegotiationSeat } from "../../shared/schemas/negotiation-state.schema.js"; export type { NegotiationConsultationReason } from "../../shared/schemas/negotiation-state.schema.js"; /** Independent rollout modes for IND-508's deterministic consultation policy. */ export type NegotiationConsultationPolicyMode = "off" | "shadow" | "on"; /** The only data the policy may inspect: action/role enums and routing coordinates. */ export interface ConsultationEligibilityInput { protocolVersion: NegotiationProtocolVersion; seat: NegotiationSeat; isOpeningTurn: boolean; isFinalTurn: boolean; screenedOut: boolean; action: NegotiationAction; ownSuggestedRole: "agent" | "patient" | "peer" | undefined; priorActions: readonly NegotiationAction[]; previouslyConsulted: boolean; hasExactResumeCoordinate: boolean; lifecycleValid: boolean; } export interface ConsultationEligibility { eligible: boolean; reason?: NegotiationConsultationReason; } /** * Read the centralized consultation-policy switch. Invalid, absent, and empty * values deliberately roll back to off. */ export declare function negotiationConsultationPolicyMode(): NegotiationConsultationPolicyMode; /** * Pure IND-508 eligibility policy. It intentionally never sees user text, * evaluator output, profiles, IDs, prompts, or messages; only safe protocol * enums and the exact binding/lifecycle booleans supplied by the graph. */ export declare function assessConsultationEligibility(input: ConsultationEligibilityInput): ConsultationEligibility; /** Fixed source-safe inputs that still traverse the existing questioner guard. */ export declare function consultationPromptFor(reason: NegotiationConsultationReason): { disclosureSubject: string; draftQuestion: string; };