import { connectTerminalStream, createTerminalSession, resizeTerminal, updateTerminalAppearance, sendTerminalInput, closeTerminal, restartTerminalSession, forceKillTerminal, listTerminalShells, listTerminalSessions, touchTerminalSessions, } from '@openchamber/ui/lib/terminalApi'; import type { TerminalAPI, TerminalHandlers, CreateTerminalOptions, ResizeTerminalPayload, TerminalSession, ForceKillOptions, } from '@openchamber/ui/lib/api/types'; export const createWebTerminalAPI = (): TerminalAPI => ({ async listShells() { return listTerminalShells(); }, async listSessions(cwd: string) { return listTerminalSessions(cwd); }, async touchSessions(sessionIds: string[]) { await touchTerminalSessions(sessionIds); }, async createSession(options: CreateTerminalOptions): Promise { return createTerminalSession(options); }, connect(sessionId: string, handlers: TerminalHandlers) { const unsubscribe = connectTerminalStream( sessionId, handlers.onEvent, handlers.onError ); return { close: () => unsubscribe(), }; }, async sendInput(sessionId: string, input: string): Promise { await sendTerminalInput(sessionId, input); }, async resize(payload: ResizeTerminalPayload): Promise { await resizeTerminal(payload.sessionId, payload.cols, payload.rows); }, async updateAppearance(sessionId, appearance): Promise { await updateTerminalAppearance(sessionId, appearance); }, async close(sessionId: string): Promise { await closeTerminal(sessionId); }, async restartSession( currentSessionId: string, options: CreateTerminalOptions ): Promise { return restartTerminalSession(currentSessionId, { cwd: options.cwd ?? '', cols: options.cols, rows: options.rows, themeMode: options.themeMode, terminalBackground: options.terminalBackground, terminalForeground: options.terminalForeground, shell: options.shell, loginShell: options.loginShell, }); }, async forceKill(options: ForceKillOptions): Promise { await forceKillTerminal(options); }, });