// src/main/ipc/voice-action-handlers.ts // Phase 13.3: OS 자동화 IPC 핸들러 import { ipcMain } from 'electron' import { IPC_CHANNELS } from '@d3ro/core/ipc-channels' import { ErrorCode, ipcSuccess, ipcError } from '@d3ro/core/errors' import { getVoiceActionService } from '../services/VoiceActionService' import { getLogger } from '../services/LoggerService' import type { VoiceActionExecuteParams } from '@d3ro/core/types' const logger = getLogger('voice-action-handlers') export function registerVoiceActionHandlers(): void { ipcMain.handle( IPC_CHANNELS.VOICE_ACTION.EXECUTE, async (_event, params: VoiceActionExecuteParams) => { try { await getVoiceActionService().execute(params.text) return ipcSuccess(undefined) } catch (err) { const msg = err instanceof Error ? err.message : String(err) logger.error('Voice action failed:', msg) return ipcError(ErrorCode.VoiceActionExecutionFailed, msg) } }, ) ipcMain.handle(IPC_CHANNELS.VOICE_ACTION.GET_PRESETS, async () => { try { return ipcSuccess(getVoiceActionService().getPresets()) } catch (err) { const msg = err instanceof Error ? err.message : String(err) return ipcError(ErrorCode.UnknownError, msg) } }) ipcMain.handle(IPC_CHANNELS.VOICE_ACTION.GET_HISTORY, async () => { try { return ipcSuccess(getVoiceActionService().getHistory()) } catch (err) { const msg = err instanceof Error ? err.message : String(err) return ipcError(ErrorCode.UnknownError, msg) } }) ipcMain.handle(IPC_CHANNELS.VOICE_ACTION.CLEAR_HISTORY, async () => { try { getVoiceActionService().clearHistory() return ipcSuccess(undefined) } catch (err) { const msg = err instanceof Error ? err.message : String(err) return ipcError(ErrorCode.UnknownError, msg) } }) ipcMain.handle(IPC_CHANNELS.VOICE_ACTION.SET_ENABLED, async (_event, params: { enabled: boolean }) => { try { getVoiceActionService().setEnabled(params.enabled) return ipcSuccess(undefined) } catch (err) { const msg = err instanceof Error ? err.message : String(err) return ipcError(ErrorCode.UnknownError, msg) } }) ipcMain.handle(IPC_CHANNELS.VOICE_ACTION.IS_ENABLED, async () => { try { return ipcSuccess(getVoiceActionService().isEnabled) } catch (err) { const msg = err instanceof Error ? err.message : String(err) return ipcError(ErrorCode.UnknownError, msg) } }) }