import type { ExecutorKind } from "./executors.js"; import { type TerminalModelControlBehaviorProfile } from "./terminal-model-control-profile.js"; import type { TerminalControlRef } from "./terminal-control-ref.js"; import type { TerminalModelControlResidualKind } from "./terminal-model-control.js"; export interface ModelControlActionPolicyFacts { 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 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 ModelControlActionPolicyDecision = { 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 availability: "residual_continuation"; readonly terminalId: string; } | { readonly availability: "repair_only"; readonly terminalId: string; }; /** * Decide model-control semantics without minting private authority. Execution * and List projection both re-observe the same safety facts; a separate * materializer binds an allowed decision to the current physical subject. */ export declare function decideModelControlActionPolicy(facts: ModelControlActionPolicyFacts): ModelControlActionPolicyDecision;