import { type TerminalControlRef } from "./terminal-control-ref.js"; import type { CodexPermissionSurface } from "./codex-permission-surface.js"; export interface TerminalPermissionControlProfile { readonly agentVersion: string; readonly behaviorProfile: string; readonly scope: "current_session"; } /** Permission writes have their own reviewed UI contract, separate from reads/model control. */ export declare function terminalPermissionControlProfileFor(version: string): TerminalPermissionControlProfile | undefined; export declare function terminalPermissionControlBindingToken(value: { terminalId: string; terminalControl: TerminalControlRef; pid: number; workspace: string; processUuid: string; processBirth: string; agentVersion: string; behaviorProfile: string; }): string; export interface TerminalPermissionChoice { readonly id: string; readonly label: string; readonly description: string; } export interface TerminalPermissionCatalog { readonly agent: "codex"; readonly agentVersion: string; readonly behaviorProfile: string; readonly scope: "current_session"; readonly current: string; readonly choices: readonly TerminalPermissionChoice[]; readonly catalogFingerprint: string; } export interface TerminalPermissionSwitchResult { readonly outcome: "changed" | "already_effective" | "uncertain"; readonly requested: { readonly mode: string; }; readonly effective?: { readonly mode: string; }; readonly scope: "current_session"; readonly defaultsChanged: false; readonly doNotRetry: boolean; readonly reason?: string; } export interface TerminalPermissionStatus { readonly threadId: string; readonly mode: string; } export type PermissionCapture = { readonly state: "idle" | "command" | "bare_command" | "blocked"; readonly fingerprint: string; } | Extract; export interface TerminalPermissionControlPorts { capture(): Promise; inspectStatus(): Promise; input(action: "command" | "Up" | "Down" | "C-m" | "Escape" | "C-u", expected: PermissionCapture): Promise; sleep(milliseconds: number): Promise; } /** A transport failure may have delivered input; no cleanup or retry follows it. */ export declare class TerminalPermissionInputUncertainError extends Error { readonly doNotRetry = true; } export declare function permissionModeFromStatus(value: string): string | undefined; export declare function discoverTerminalPermissionOptions(profile: TerminalPermissionControlProfile, ports: TerminalPermissionControlPorts): Promise; export declare function switchTerminalPermissions(profile: TerminalPermissionControlProfile, mode: string, expectedCatalogFingerprint: string, ports: TerminalPermissionControlPorts): Promise;