import type { ApprovalDecision } from '@shared/domain/approval'; import type { SidecarCapabilities, InteractionMode, MessageMode, QuotaSnapshot } from '@shared/contracts/sidecar'; import type { PatternDefinition, ReasoningEffort } from '@shared/domain/pattern'; import type { ProjectRecord } from '@shared/domain/project'; import type { QuerySessionsInput, SessionQueryResult } from '@shared/domain/sessionLibrary'; import type { SessionEventRecord } from '@shared/domain/event'; import type { TerminalExitInfo, TerminalSnapshot } from '@shared/domain/terminal'; import type { LspProfileDefinition, McpServerDefinition, SessionToolingSelection, AppearanceTheme, } from '@shared/domain/tooling'; import type { WorkspaceState } from '@shared/domain/workspace'; import type { ChatMessageAttachment } from '@shared/domain/attachment'; export interface CreateSessionInput { projectId: string; patternId: string; } export interface SavePatternInput { pattern: PatternDefinition; } export interface SendSessionMessageInput { sessionId: string; content: string; attachments?: ChatMessageAttachment[]; messageMode?: MessageMode; } export interface CancelSessionTurnInput { sessionId: string; } export interface ResolveSessionApprovalInput { sessionId: string; approvalId: string; decision: ApprovalDecision; alwaysApprove?: boolean; } export interface ResolveSessionUserInputInput { sessionId: string; userInputId: string; answer: string; wasFreeform: boolean; } export interface UpdateSessionModelConfigInput { sessionId: string; model: string; reasoningEffort?: ReasoningEffort; } export interface DuplicateSessionInput { sessionId: string; } export interface BranchSessionInput { sessionId: string; messageId: string; } export interface SetSessionMessagePinnedInput { sessionId: string; messageId: string; isPinned: boolean; } export interface RegenerateSessionMessageInput { sessionId: string; messageId: string; } export interface EditAndResendSessionMessageInput { sessionId: string; messageId: string; content: string; attachments?: ChatMessageAttachment[]; } export interface RenameSessionInput { sessionId: string; title: string; } export interface SetSessionPinnedInput { sessionId: string; isPinned: boolean; } export interface SetSessionArchivedInput { sessionId: string; isArchived: boolean; } export interface SetPatternFavoriteInput { patternId: string; isFavorite: boolean; } export interface SaveMcpServerInput { server: McpServerDefinition; } export interface SaveLspProfileInput { profile: LspProfileDefinition; } export type DiscoveredToolingResolution = 'accept' | 'dismiss'; export interface RescanProjectConfigsInput { projectId: string; } export interface RescanProjectCustomizationInput { projectId: string; } export interface ResolveProjectDiscoveredToolingInput { projectId: string; serverIds: string[]; resolution: DiscoveredToolingResolution; } export interface SetProjectAgentProfileEnabledInput { projectId: string; agentProfileId: string; enabled: boolean; } export interface ResolveWorkspaceDiscoveredToolingInput { serverIds: string[]; resolution: DiscoveredToolingResolution; } export interface UpdateSessionToolingInput extends SessionToolingSelection { sessionId: string; } export interface UpdateSessionApprovalSettingsInput { sessionId: string; autoApprovedToolNames?: string[]; } export interface SetSessionInteractionModeInput { sessionId: string; mode: InteractionMode; } export interface DismissSessionPlanReviewInput { sessionId: string; } export interface DismissSessionMcpAuthInput { sessionId: string; } export interface StartSessionMcpAuthInput { sessionId: string; } export interface DeleteSessionInput { sessionId: string; } export interface ResizeTerminalInput { cols: number; rows: number; } export interface SetTerminalHeightInput { height?: number; } export type UpdateStatusState = 'idle' | 'checking' | 'available' | 'downloading' | 'downloaded' | 'error'; export interface UpdateDownloadProgress { bytesPerSecond: number; percent: number; total: number; transferred: number; } export interface UpdateStatus { state: UpdateStatusState; version?: string; releaseDate?: string; releaseNotes?: string; downloadProgress?: UpdateDownloadProgress; error?: string; } export interface ElectronApi { describeSidecarCapabilities(): Promise; refreshSidecarCapabilities(): Promise; loadWorkspace(): Promise; addProject(): Promise; removeProject(projectId: string): Promise; resolveWorkspaceDiscoveredTooling(input: ResolveWorkspaceDiscoveredToolingInput): Promise; refreshProjectGitContext(projectId?: string): Promise; rescanProjectConfigs(input: RescanProjectConfigsInput): Promise; rescanProjectCustomization(input: RescanProjectCustomizationInput): Promise; resolveProjectDiscoveredTooling(input: ResolveProjectDiscoveredToolingInput): Promise; setProjectAgentProfileEnabled(input: SetProjectAgentProfileEnabledInput): Promise; savePattern(input: SavePatternInput): Promise; deletePattern(patternId: string): Promise; saveMcpServer(input: SaveMcpServerInput): Promise; deleteMcpServer(serverId: string): Promise; saveLspProfile(input: SaveLspProfileInput): Promise; deleteLspProfile(profileId: string): Promise; updateSessionTooling(input: UpdateSessionToolingInput): Promise; updateSessionApprovalSettings(input: UpdateSessionApprovalSettingsInput): Promise; createSession(input: CreateSessionInput): Promise; duplicateSession(input: DuplicateSessionInput): Promise; branchSession(input: BranchSessionInput): Promise; setSessionMessagePinned(input: SetSessionMessagePinnedInput): Promise; renameSession(input: RenameSessionInput): Promise; setSessionPinned(input: SetSessionPinnedInput): Promise; setSessionArchived(input: SetSessionArchivedInput): Promise; deleteSession(input: DeleteSessionInput): Promise; regenerateSessionMessage(input: RegenerateSessionMessageInput): Promise; editAndResendSessionMessage(input: EditAndResendSessionMessageInput): Promise; sendSessionMessage(input: SendSessionMessageInput): Promise; cancelSessionTurn(input: CancelSessionTurnInput): Promise; resolveSessionApproval(input: ResolveSessionApprovalInput): Promise; resolveSessionUserInput(input: ResolveSessionUserInputInput): Promise; setSessionInteractionMode(input: SetSessionInteractionModeInput): Promise; dismissSessionPlanReview(input: DismissSessionPlanReviewInput): Promise; dismissSessionMcpAuth(input: DismissSessionMcpAuthInput): Promise; startSessionMcpAuth(input: StartSessionMcpAuthInput): Promise; updateSessionModelConfig(input: UpdateSessionModelConfigInput): Promise; querySessions(input: QuerySessionsInput): Promise; selectProject(projectId?: string): Promise; selectPattern(patternId?: string): Promise; selectSession(sessionId?: string): Promise; setPatternFavorite(input: SetPatternFavoriteInput): Promise; setTheme(theme: AppearanceTheme): Promise; setTerminalHeight(input: SetTerminalHeightInput): Promise; setNotificationsEnabled(enabled: boolean): Promise; setMinimizeToTray(enabled: boolean): Promise; checkForUpdates(): Promise; installUpdate(): Promise; describeTerminal(): Promise; createTerminal(): Promise; restartTerminal(): Promise; killTerminal(): Promise; writeTerminal(data: string): void; resizeTerminal(input: ResizeTerminalInput): void; openAppDataFolder(): Promise; resetLocalWorkspace(): Promise; getQuota(): Promise>; onTerminalData(listener: (data: string) => void): () => void; onTerminalExit(listener: (info: TerminalExitInfo) => void): () => void; onWorkspaceUpdated(listener: (workspace: WorkspaceState) => void): () => void; onSessionEvent(listener: (event: SessionEventRecord) => void): () => void; onUpdateStatus(listener: (status: UpdateStatus) => void): () => void; onTrayCreateScratchpad(listener: () => void): () => void; } export interface RendererSelectionState { selectedProject?: ProjectRecord; selectedPattern?: PatternDefinition; }