import type { ExecutionBoundaryAdapter } from "./execution-boundary-adapter.js"; import type { ProviderDirectoryList, ProviderFileDeleteOptions, ProviderFileDeleteResult, ProviderFileMkdirOptions, ProviderFileMkdirResult, ProviderFileRenameOptions, ProviderFileRenameResult, ProviderFileStat, ProviderFileWriteOptions, ProviderFileWriteResult } from "@termfleet/core/contracts/files.js"; import type { AgentSessionReadResult } from "@termfleet/core/internal/agent-session-tail.js"; import type { AgentSessionDetails } from "@termfleet/core/internal/agent-session.js"; import type { AttentionRequest, AttentionUrgency, CooperativeSignalEvent, LifecycleSnapshot } from "@termfleet/core/internal/session-lifecycle.js"; import type { ProviderAccessAttribution } from "@termfleet/core/teams/provider-access-token.js"; import type { Bounds, OrphanSessionPruneResult, ProviderFilesystem, ProviderHealth, ProviderKind, ProviderSettingsUpdateResult, ProviderSnapshot, ProviderWindow, SendInputResult, TerminalEffect, TerminalEffectKind, TerminalThemeProfile, WindowCloseResult, WindowCommand, WindowCreateResult, WindowLaunchFailure, WindowLaunchFailureMarkResult, WindowMoveResult, WindowRenameResult, WindowReplaceResult } from "@termfleet/core/types.js"; import { type AgentWindowCreateOptions, type AgentWindowCreateResult } from "@termfleet/core/internal/agent-launch.js"; type ProviderObservation = Omit; export type WindowMutation = { id: number; bounds: Bounds; }; export type WindowCreateOptions = { command?: WindowCommand; cwd?: string; filesystemId?: string; kind?: "terminal" | "folder" | "file" | "iframe"; name?: string; path?: string; terminalId?: string; src?: string; transport?: "preview" | "tunnel"; }; export type ProviderSettingsUpdate = { terminalThemeProfile?: TerminalThemeProfile; }; export type ProviderDriver = { readonly kind: ProviderKind; initialize(): void | Promise; getHealth(): ProviderHealth; getPortholeUpstream?(): string | undefined; getBrowserCdpUpstream?(terminalId: string): string | undefined; activateWindow?(id: number): { activated: boolean; } | Promise<{ activated: boolean; }>; getLifecycle(): LifecycleSnapshot | Promise; getSnapshot(): ProviderObservation | Promise; getFilesystems(): ProviderFilesystem[]; getWindows(lifecycle: LifecycleSnapshot): ProviderWindow[]; getMaxSessionCount?(): number; getMaxWindowCount?(): number; getTrackedWindowCount?(): number; getDisplayBounds(): Bounds; createWindow(options?: WindowCreateOptions): WindowCreateResult | Promise; moveWindow(mutation: WindowMutation): WindowMoveResult; closeWindow(id: number): WindowCloseResult; renameWindow?(options: { id: number; name: string; }): WindowRenameResult; markWindowLaunchFailure?(options: { id: number; launchFailure: WindowLaunchFailure; }): WindowLaunchFailureMarkResult; noteAgentSessionId?(options: { terminalId: string; agentSessionId: string; }): void; noteAgentLaunch?(options: { agent: AgentWindowCreateOptions["agent"]; agentCwd?: string; agentSessionId: string; terminalId: string; }): void; listPersistedAgentWindows?(): { agent: AgentWindowCreateOptions["agent"]; agentCwd?: string; agentSessionId: string; bounds: Bounds; id: number; terminalId: string; }[]; noteControlSession?(options: { cwd?: string; terminalId: string; }): void; isControlTerminal?(terminalId: string): boolean; isControlWindow?(id: number): boolean; disposeOwnedSessions?(): void; reapEndedSessions?(lifecycle: LifecycleSnapshot, thresholdMs: number, nowMs: number): void; pruneOrphanSessions?(): OrphanSessionPruneResult; recordCooperativeSignal?(options: { atMs: number; event: CooperativeSignalEvent; sessionId: string; }): void; updateProviderSettings?(settings: ProviderSettingsUpdate): ProviderSettingsUpdateResult; resizeDisplay(bounds: Bounds): Bounds; captureTerminal(options: { preserveEscapes?: boolean; terminalId: string; lines?: number; }): string | Promise; getAgentSession?(options: { cwd?: string; sessionId: string; }): AgentSessionDetails | Promise; getAgentSessionTailed?(options: { cwd?: string; sessionId: string; }): Promise; interruptTerminal?(options: { terminalId: string; }): void | Promise; sendTerminalInput(options: { terminalId: string; data: string; deadlineMs?: number; submitMode?: "retry" | "single"; }): SendInputResult | Promise; setTerminalEffect(options: { durationMs?: number; kind: TerminalEffectKind; terminalId: string; }): TerminalEffect; deleteFileByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileDeleteResult; listDirectoryByFilesystem(options: { filesystemId: string; path: string; }): ProviderDirectoryList; makeDirectoryByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileMkdirResult; readFileByFilesystem(options: { filesystemId: string; length?: number; offset?: number; path: string; }): Buffer; renameFileByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileRenameResult; statFileByFilesystem(options: { filesystemId: string; path: string; }): ProviderFileStat; writeFileByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileWriteResult; deleteFile(options: ProviderFileDeleteOptions): ProviderFileDeleteResult; listDirectory(options: { terminalId: string; path: string; }): ProviderDirectoryList; makeDirectory(options: ProviderFileMkdirOptions): ProviderFileMkdirResult; readFile(options: { terminalId: string; path: string; }): Buffer; renameFile(options: ProviderFileRenameOptions): ProviderFileRenameResult; statFile(options: { terminalId: string; path: string; }): ProviderFileStat; writeFile(options: ProviderFileWriteOptions): ProviderFileWriteResult; }; export type ShellReadiness = { capture: string; ready: boolean; waitMs: number; }; export declare function shellReadinessHint(readiness: ShellReadiness | undefined): string | undefined; type InternalAgentLaunchOptions = AgentWindowCreateOptions & { adoptWindow?: { bounds: Bounds; id: number; terminalId: string; }; }; export declare class ProviderEngine { readonly driver: ProviderDriver; private readonly epoch; private readonly instanceId; private readonly executionBoundaryAdapter; private readonly providerBaseUrl; private readonly attentionRequests; private readonly remoteInputRecords; private readonly scratchDirectoryByTerminalId; private harnessClient; private harnessClientRan; private readonly harnessSessions; private readonly harnessRuntimesByWindow; private readonly harnessSessionByTerminal; private readonly harnessWindowMissingSince; private lastSignature; private launchAttemptCount; private launchFailureCount; private pendingAgentLaunchCount; private revision; constructor(driver: ProviderDriver, options?: { executionBoundaryAdapter?: ExecutionBoundaryAdapter; instanceId?: string; providerBaseUrl?: string; }); getProviderBaseUrl(): string | undefined; initialize(): Promise; adoptPersistedAgents(): Promise<{ adopted: number; skipped: number; failed: number; }>; updateSession(agentSessionId: string, patch: { title?: string; }): Promise<{ agentSessionId: string; title: string | null; }>; getHealth(): ProviderHealth; getPortholeUpstream(): string | undefined; getBrowserCdpUpstream(terminalId: string): string | undefined; getSnapshot(): Promise; getLifecycle(): Promise; private mergeAttentionRequests; private mergeLifecycleAttentionRequests; recordAttentionRequest(agentSessionId: string, request: { detail?: string; reason: string; urgency: AttentionUrgency; }, nowMs: number): AttentionRequest; clearAttentionRequest(agentSessionId: string): void; private mergeRemoteInputAttributions; recordRemoteInputAttribution(terminalId: string, source: ProviderAccessAttribution | string | undefined, nowMs?: number): void; private pruneExpiredRemoteInputAttributions; getWindows(lifecycle: LifecycleSnapshot): ProviderWindow[]; getDisplayBounds(): Bounds; getFilesystems(): ProviderFilesystem[]; createWindow(options?: WindowCreateOptions): Promise; createAgentWindow(rawOptions: InternalAgentLaunchOptions): Promise; private createAgentWindowWithinCapacity; private findResumeWindow; private durableSessionTitle; private resumeCwdFallback; private attemptAgentLaunch; private reconcileFreshCodexLaunch; private acquireLaunchWindow; private writeAgentPromptFile; private prepareGrokLaunch; private prepareSupercodeLaunch; private prepareHarnessLaunch; private bootstrapAgentSession; private failResumedWindow; private failRetryableHangMidRetry; private failSessionCollision; private failTerminalLaunch; private completeLaunchSuccess; private recordResolvedAgentLaunch; private resolveProviderCwd; private cwdResolves; moveWindow(mutation: WindowMutation): WindowMoveResult; renameWindow(options: { id: number; name: string; }): WindowRenameResult; replaceWindow(id: number): Promise; setTerminalEffect(options: { durationMs?: number; kind: TerminalEffectKind; terminalId: string; }): TerminalEffect; closeWindow(id: number): WindowCloseResult; activateWindow(id: number): Promise<{ activated: boolean; }>; disposeOwnedSessions(): void; private closeHarnessSession; private closeOrphanHarnessSessions; markControlSession(options: { cwd?: string; terminalId: string; }): { marked: boolean; }; isControlWindow(id: number): boolean; reapEndedSessions(lifecycle: LifecycleSnapshot, thresholdMs: number, nowMs: number): void; pruneOrphanSessions(): OrphanSessionPruneResult; recordCooperativeSignal(options: { atMs: number; event: CooperativeSignalEvent; sessionId: string; }): void; updateProviderSettings(settings: ProviderSettingsUpdate): ProviderSettingsUpdateResult; resizeDisplay(bounds: Bounds): Bounds; captureTerminal(options: { preserveEscapes?: boolean; terminalId: string; lines?: number; }): Promise; getAgentSession(options: { cwd?: string; sessionId: string; }): Promise; getAgentSessionMedia(options: { cwd?: string; index: number; sessionId: string; }): Promise<{ data: Buffer; mediaType: string; } | undefined>; getAgentSessionTailed(options: { cwd?: string; sessionId: string; }): Promise; interruptTerminal(options: { terminalId: string; }): void | Promise; sendTerminalInput(options: { terminalId: string; data: string; deadlineMs?: number; submitMode?: "retry" | "single"; viaSession?: boolean; }): SendInputResult | Promise; private flushHarnessComposition; private sendHarnessTurn; interruptHarnessSession(agentSessionId: string): Promise; deleteFile(options: ProviderFileDeleteOptions): ProviderFileDeleteResult; deleteFileByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileDeleteResult; listDirectory(options: { terminalId: string; path: string; }): ProviderDirectoryList; listDirectoryByFilesystem(options: { filesystemId: string; path: string; }): ProviderDirectoryList; makeDirectory(options: ProviderFileMkdirOptions): ProviderFileMkdirResult; makeDirectoryByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileMkdirResult; readFile(options: { terminalId: string; path: string; }): Buffer; readFileByFilesystem(options: { filesystemId: string; length?: number; offset?: number; path: string; }): Buffer; renameFile(options: ProviderFileRenameOptions): ProviderFileRenameResult; renameFileByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileRenameResult; statFile(options: { terminalId: string; path: string; }): ProviderFileStat; statFileByFilesystem(options: { filesystemId: string; path: string; }): ProviderFileStat; writeFileByFilesystem(options: Omit & { filesystemId: string; }): ProviderFileWriteResult; writeFile(options: ProviderFileWriteOptions): ProviderFileWriteResult; private prepareSupercodeHome; private assertNoSessionIdCollision; private bootstrapAgentLaunch; private waitForAgentShell; private waitForClaudeFirstResponse; private withRevision; } export declare function windowSignature(windowInfo: ProviderWindow): Record; export {};