import type { DesktopIpcClient } from "./desktop-ipc-client.js"; import { type DesktopModelSettings, type DesktopObserveTarget, type DesktopSnapshot, type DesktopThreadIdentity } from "./desktop-types.js"; export type DesktopPermissionMode = "read-only" | "default" | "full-access"; export interface DesktopModelSelection { model: string; reasoningEffort: string; collaborationMode?: "plan" | "default"; } export interface DesktopSessionControlDependencies { observe(identity: DesktopThreadIdentity): Promise; readModelSettings(identity: DesktopThreadIdentity, target: DesktopObserveTarget): Promise; updateSettings(identity: DesktopThreadIdentity, options: Parameters[0]): ReturnType; interruptTurn(identity: DesktopThreadIdentity, options: Parameters[0]): ReturnType; sleep?(ms: number): Promise; randomUUID?(): string; observationAttempts?: number; } /** Settings affect one idle native conversation; effective snapshots, not acknowledgements, prove success. */ export declare function createDesktopSessionControls(deps: DesktopSessionControlDependencies): { permissionOptions: (identity: DesktopThreadIdentity) => Promise<{ scope: string; current: DesktopPermissionMode | null; defaults_changed: boolean; settings: { activePermissionProfile: { id: string; extends?: string | null; } | null | undefined; approvalPolicy: string | Record | undefined; approvalsReviewer: string | undefined; sandboxPolicy: Record | undefined; runtimeWorkspaceRoots: string[] | undefined; } | undefined; applies_to: string; choices: { id: DesktopPermissionMode; mode: DesktopPermissionMode; label: "Default" | "Full Access" | "Read Only"; description: string; }[]; }>; setPermissions: (identity: DesktopThreadIdentity, mode: DesktopPermissionMode) => Promise<{ scope: string; defaults_changed: boolean; requested: { mode: DesktopPermissionMode; }; applied: boolean; do_not_retry: boolean; outcome: string; effective: { mode: DesktopPermissionMode; }; } | { scope: string; defaults_changed: boolean; requested: { mode: DesktopPermissionMode; }; applied: boolean; do_not_retry: boolean; outcome: string; error_code: string; } | { scope: string; defaults_changed: boolean; requested: { mode: DesktopPermissionMode; }; applied: boolean; do_not_retry: boolean; outcome: string; effective: { mode: DesktopPermissionMode; }; applies_to: string; settings: { activePermissionProfile: { id: string; extends?: string | null; } | null | undefined; approvalPolicy: string | Record | undefined; approvalsReviewer: string | undefined; sandboxPolicy: Record | undefined; runtimeWorkspaceRoots: string[] | undefined; } | undefined; }>; modelOptions: (identity: DesktopThreadIdentity) => Promise<{ scope: string; current: { model: string | null; reasoning_effort: string | null; collaboration_mode: string | null; }; model_provider: string | null | undefined; catalog_available: boolean; selection_mode: string; collaboration_modes: string[]; limitations: string[]; }>; setModel: (identity: DesktopThreadIdentity, selection: DesktopModelSelection) => Promise<{ scope: string; defaults_changed: boolean; requested: { model: string; reasoning_effort: string; collaboration_mode?: "default" | "plan" | undefined; }; applied: boolean; do_not_retry: boolean; outcome: string; effective: { model: string | null; reasoning_effort: string | null; collaboration_mode: string | null; }; } | { scope: string; defaults_changed: boolean; requested: { model: string; reasoning_effort: string; collaboration_mode?: "default" | "plan" | undefined; }; applied: boolean; do_not_retry: boolean; outcome: string; error_code: string; }>; interrupt: (identity: DesktopThreadIdentity, expectedTurnId: string) => Promise<{ error_code?: undefined; native_turn_id: string; interrupted: boolean; state: import("./desktop-types.js").DesktopTurnStatus; outcome: string; do_not_retry: boolean; } | { native_turn_id: string; interrupted: boolean; state: string; outcome: string; do_not_retry: boolean; error_code: string; }>; };