export type AuthType = 'PASSWORD' | 'PRIVATE_KEY' export type ConnectionSetupMode = 'NONE' | 'PASSWORD_BOOTSTRAP' export type SessionTreeNodeType = 'folder' | 'connection' export type SessionTreeSortMode = 'manual' | 'nameAsc' export type WorkspaceLayout = 'split' | 'terminal' | 'sftp' export interface LoginResponse { token: string username: string displayName: string passwordChangeRequired: boolean } export interface CurrentUser { username: string displayName: string passwordChangeRequired?: boolean } export interface Connection { id: number name: string host: string port: number username: string authType: AuthType createdAt: string updatedAt: string } export interface ConnectionCreateRequest { name: string host: string port?: number username: string authType?: AuthType password?: string privateKey?: string passphrase?: string setupMode?: ConnectionSetupMode bootstrapPassword?: string } export interface SessionTreeNodePayload { id: string type: SessionTreeNodeType name: string parentId: string | null order: number connectionId?: number expanded?: boolean createdAt: number updatedAt: number } export interface SessionTreeLayoutPayload { nodes: SessionTreeNodePayload[] sortMode?: SessionTreeSortMode } export interface SftpFileInfo { name: string directory: boolean size: number mtime: number } export interface UploadTask { taskId: string status: 'queued' | 'running' | 'success' | 'error' progress: number transferredBytes: number totalBytes: number filename: string error?: string createdAt: number startedAt: number finishedAt: number } export interface RemoteTransferTask { taskId: string status: 'queued' | 'running' | 'success' | 'error' | 'cancelled' progress: number transferredBytes: number totalBytes: number error?: string createdAt: number startedAt: number finishedAt: number } export interface BatchCommandResult { connectionId: number connectionName: string success: boolean output: string | null error: string | null durationMs: number } export interface BatchCommandResponse { command: string total: number successCount: number failureCount: number results: BatchCommandResult[] } export interface MonitorMetrics { cpuUsage?: number | null memTotal?: number | null memUsed?: number | null memUsage?: number | null diskUsage?: number | null load1?: number | null cpuCores?: number | null uptime?: string | null } export interface WorkspaceTab { id: number name: string connection: Connection } export interface TransferTaskItem { id: string label: string status: 'queued' | 'running' | 'success' | 'error' | 'cancelled' progress: number message: string taskId?: string } export interface TransferTaskGroup { id: string mode: 'LOCAL_TO_MANY' | 'REMOTE_TO_MANY' title: string status: 'queued' | 'running' | 'success' | 'error' | 'cancelled' progress: number createdAt: string items: TransferTaskItem[] }