// src/main/ipc/instruction-handlers.ts import { ipcMain } from 'electron' import { IPC_CHANNELS } from '@d3ro/core/ipc-channels' import { ipcSuccess, ipcError, ErrorCode } from '@d3ro/core/errors' import { getCustomInstructionService } from '../services/CustomInstructionService' import type { CustomInstruction } from '@d3ro/core/types' export function registerInstructionHandlers(): void { ipcMain.handle(IPC_CHANNELS.INSTRUCTION.GET_ALL, async () => { return ipcSuccess(getCustomInstructionService().getAll()) }) ipcMain.handle(IPC_CHANNELS.INSTRUCTION.GET_BY_ID, async (_event, params: { id: string }) => { return ipcSuccess(getCustomInstructionService().getById(params.id)) }) ipcMain.handle( IPC_CHANNELS.INSTRUCTION.CREATE, async ( _event, params: { name: string; description: string; prompt: string; icon?: string } ) => { try { const result = getCustomInstructionService().create(params) return ipcSuccess(result) } catch { return ipcError(ErrorCode.ConfigWriteFailed, 'Failed to create instruction') } } ) ipcMain.handle( IPC_CHANNELS.INSTRUCTION.UPDATE, async (_event, params: { id: string; data: Partial }) => { try { const result = getCustomInstructionService().update(params.id, params.data) return ipcSuccess(result) } catch { return ipcError(ErrorCode.ConfigWriteFailed, 'Failed to update instruction') } } ) ipcMain.handle(IPC_CHANNELS.INSTRUCTION.DELETE, async (_event, params: { id: string }) => { const result = getCustomInstructionService().delete(params.id) if (!result) { return ipcError(ErrorCode.ConfigWriteFailed, 'Cannot delete builtin instruction') } return ipcSuccess(undefined) }) ipcMain.handle(IPC_CHANNELS.INSTRUCTION.REORDER, async (_event, params: { ids: string[] }) => { getCustomInstructionService().reorder(params.ids) return ipcSuccess(undefined) }) }