import type { ControlResult } from './control-result.js'; import type { PluginRouteCallResult } from '@dsh-remote/protocol'; import type { AcpVirtualWorkspaceView } from './acp/virtual-harness.js'; import type { HarnessMode } from './harness-target.js'; import type { ConnectedRemote, HostAuthorizationControl, RemoteDeviceView, RemoteDirectoryListing, RemoteWorkspaceSelection, RemoteWorkspaceView } from './client-runtime-contract.js'; import type { CodexVirtualWorkspaceView } from './codex/virtual-harness.js'; import type { RemoteFileViewerEndpoint } from './file-viewer-contract.js'; import { LoopbackPreview } from './loopback-preview.js'; import type { OAuthProvider } from './server-api.js'; import { ClientServerApi } from './server-api.js'; /** Collaborates with one ClientModeRuntime; never creates a second session or connection state. */ export interface ClientControlContext { readonly detailedStatus: () => Promise>; readonly devices: () => Promise; readonly server: ClientServerApi; readonly authorizeClientWithAccount: (email: string, password: string) => Promise; readonly startClientOAuthQrLogin: (provider: OAuthProvider) => Promise; readonly pollClientOAuthQrLogin: (qrId: string) => Promise; readonly activeRemote: () => ConnectedRemote | undefined; preview: LoopbackPreview | undefined; readonly listRemoteDirectory: (targetDeviceId: string, path?: string, signal?: AbortSignal) => Promise; readonly listRemoteWorkspaces: (targetDeviceId: string, signal?: AbortSignal) => Promise; readonly listCodexWorkspaces: (targetDeviceId: string, signal?: AbortSignal) => Promise; readonly openRemoteWorkspace: (targetDeviceId: string, path: string, signal?: AbortSignal) => Promise>; readonly openCodexWorkspace: (targetDeviceId: string, workspaceId: string, signal?: AbortSignal) => Promise>; readonly createCodexWorkspace: (targetDeviceId: string, path: string, signal?: AbortSignal) => Promise>; readonly listCursorWorkspaces: (targetDeviceId: string, signal?: AbortSignal, backend?: "cursor" | "antigravity" | "pi" | "opencode" | "claude") => Promise; readonly openCursorWorkspace: (targetDeviceId: string, workspaceId: string, signal?: AbortSignal, backend?: "cursor" | "antigravity" | "pi" | "opencode" | "claude") => Promise>; readonly createCursorWorkspace: (targetDeviceId: string, path: string, signal?: AbortSignal, backend?: "cursor" | "antigravity" | "pi" | "opencode" | "claude") => Promise>; readonly consumeWorkspaceSelection: (selection: RemoteWorkspaceSelection) => Record; readonly callRemoteFileViewer: (endpoint: RemoteFileViewerEndpoint, payload: unknown, signal?: AbortSignal) => Promise; readonly activeCodexRemote: () => ConnectedRemote | undefined; readonly requireLocalCodex: () => Required>; readonly localCodexAvailable: () => boolean; readonly pluginRoute: (route: string, body: unknown, signal: AbortSignal) => Promise; readonly openCodexStream: (payload: unknown, signal?: AbortSignal) => Promise; readonly nextCodexFrames: (payload: unknown, signal?: AbortSignal) => Promise; readonly closeCodexStream: (payload: unknown) => Promise; readonly host: HostAuthorizationControl | undefined; readonly setHostAuthorization: (enabled: boolean) => Promise; readonly setMode: (mode: HarnessMode, targetDeviceId?: string, signal?: AbortSignal) => Promise>; } export declare class ClientControl { private readonly context; constructor(context: ClientControlContext); handleControl(endpoint: string, payload: unknown, signal: AbortSignal): Promise>; } //# sourceMappingURL=client-control.d.ts.map