import type { ExecutorKind } from "./executors.js"; import { type TerminalModelControlResidualKind } from "./terminal-model-control.js"; import { type TerminalModelControlBehaviorProfile } from "./terminal-model-control-profile.js"; import { type ModelControlActionPolicyDecision } from "./terminal-model-control-action-policy.js"; import type { TerminalControlRef } from "./terminal-control-ref.js"; export interface ModelControlSafetyFacts { readonly exactTerminalRow: boolean; readonly terminalId?: string; readonly processState?: string; readonly terminalControl?: TerminalControlRef; readonly agent?: ExecutorKind; readonly pid?: number; readonly processUuid?: string; readonly processBirth?: string; readonly agentVersion?: string; readonly behaviorProfile?: TerminalModelControlBehaviorProfile; readonly nativeAuthority: { readonly kind: "exact_session"; readonly ordinaryBindingToken: string; } | { readonly kind: "verified_zero_rollout"; } | { readonly kind: "unavailable"; }; readonly modelControlSupported: boolean; readonly approvalScanned: boolean; readonly approvalBlocked: boolean; readonly terminalHasInteraction: boolean; readonly terminalHasBlockingTurn: boolean; readonly hasOrphanedDispatch: boolean; readonly surface: { readonly kind: "idle_empty"; readonly screenState?: string; } | { readonly kind: "residual"; readonly residualKind: TerminalModelControlResidualKind; readonly residualFingerprint: string; readonly activityState?: string; } | { readonly kind: "unavailable"; }; } export type ModelControlAvailabilityDecision = { readonly availability: "unavailable"; readonly reason: "invalid_subject" | "transport_unavailable" | "unsupported_profile" | "blocked" | "native_identity_unavailable" | "surface_unavailable"; } | { readonly availability: "open_from_empty"; readonly authority: "native_session" | "zero_rollout_physical"; readonly terminalId: string; readonly expectedBindingToken: string; } | { readonly availability: "residual_continuation"; readonly terminalId: string; readonly expectedBindingToken: string; readonly repairBindingToken: string; } | { readonly availability: "repair_only"; readonly terminalId: string; readonly expectedBindingToken: string; }; /** * The single model-control availability policy shared by read-only projection * and mutation preparation. It grants no durable authority: execution must * independently sample these facts again while holding the terminal lock. */ export declare function decideModelControlAvailability(facts: ModelControlSafetyFacts): ModelControlAvailabilityDecision; /** Bind one already-decided semantic action to its current private authority. */ export declare function materializeModelControlAvailability(facts: ModelControlSafetyFacts, policy: ModelControlActionPolicyDecision): ModelControlAvailabilityDecision;