import type { Express } from "express"; import type { Server } from "http"; export interface WebUiServerController { expressApp: Express; httpServer: Server; getPort: () => number | null; getOpenCodePort: () => number | null; isReady: () => boolean; restartOpenCode: () => Promise; stop: (options?: { exitProcess?: boolean; forceCloseConnections?: boolean }) => Promise; } export interface StartWebUiServerOptions { port?: number; host?: string; attachSignals?: boolean; exitOnShutdown?: boolean; uiPassword?: string | null; sessionIndexDbPath?: string | null; transcriptCacheDbPath?: string | null; messageQueueDbPath?: string | null; messageQueueAttachmentRoot?: string | null; /** * Optional process-local lock for settings persistence (Electron in-process). * When provided, every settings write/migrate joins this exclusive chain so * concurrent desktop writers cannot clobber sibling fields in settings.json. */ settingsPersistLock?: (work: () => Promise | T) => Promise; } export declare function startWebUiServer( options?: StartWebUiServerOptions ): Promise; export declare function gracefulShutdown(options?: { exitProcess?: boolean; forceCloseConnections?: boolean }): Promise; export declare function setupProxy(app: Express): void; export declare function restartOpenCode(): Promise; export declare function parseArgs(argv?: string[]): { port: number; host?: string; uiPassword: string | null; };