// src/main/ipc/chain-handlers.ts // Phase 10.4: Multi-LLM Chain IPC 핸들러 import { ipcMain } from 'electron' import { IPC_CHANNELS } from '@d3ro/core/ipc-channels' import { ipcSuccess, ipcError, ErrorCode, D3ROError } from '@d3ro/core/errors' import { getChainService } from '../services/ChainService' import type { CreateChainParams, UpdateChainParams, DeleteChainParams, ExecuteChainParams } from '@d3ro/core/types' export function registerChainHandlers(): void { ipcMain.handle(IPC_CHANNELS.CHAIN.GET_ALL, async () => { return ipcSuccess(getChainService().getAll()) }) ipcMain.handle( IPC_CHANNELS.CHAIN.CREATE, async (_event, params: CreateChainParams) => { try { const result = getChainService().create(params) return ipcSuccess(result) } catch (err) { return ipcError( ErrorCode.ConfigWriteFailed, `Failed to create chain: ${err instanceof Error ? err.message : String(err)}` ) } } ) ipcMain.handle( IPC_CHANNELS.CHAIN.UPDATE, async (_event, params: UpdateChainParams) => { try { const result = getChainService().update(params) return ipcSuccess(result) } catch (err) { if (err instanceof D3ROError && err.code === ErrorCode.ChainNotFound) { return ipcError(ErrorCode.ChainNotFound, err.message) } return ipcError( ErrorCode.ConfigWriteFailed, `Failed to update chain: ${err instanceof Error ? err.message : String(err)}` ) } } ) ipcMain.handle( IPC_CHANNELS.CHAIN.DELETE, async (_event, params: DeleteChainParams) => { try { getChainService().delete(params.id) return ipcSuccess(undefined) } catch (err) { if (err instanceof D3ROError && err.code === ErrorCode.ChainNotFound) { return ipcError(ErrorCode.ChainNotFound, err.message) } return ipcError( ErrorCode.ConfigWriteFailed, `Failed to delete chain: ${err instanceof Error ? err.message : String(err)}` ) } } ) ipcMain.handle( IPC_CHANNELS.CHAIN.EXECUTE, async (_event, params: ExecuteChainParams) => { try { const result = await getChainService().execute(params.chainId, params.text) return ipcSuccess(result) } catch (err) { if (err instanceof D3ROError) { return ipcError(err.code, err.message) } return ipcError( ErrorCode.ChainExecutionFailed, `Chain execution failed: ${err instanceof Error ? err.message : String(err)}` ) } } ) }