import { normalizeAgentSessionKey } from '@runtime/lib/models'; import type { GatewayEvent, GatewayRpcParams } from './types'; import * as chatHandlers from './handlers/chat'; import * as providerHandlers from './handlers/provider'; import * as skillHandlers from './handlers/skills'; type GatewayBroadcast = (event: GatewayEvent) => void; export function dispatchGatewayRpcMethod( method: string, params: unknown, broadcast: GatewayBroadcast, ): { handled: boolean; result?: unknown } { switch (method) { case 'chat.send': return { handled: true, result: chatHandlers.handleChatSend( params as GatewayRpcParams['chat.send'], broadcast, ), }; case 'chat.history': return { handled: true, result: chatHandlers.handleChatHistory( params as GatewayRpcParams['chat.history'], ), }; case 'chat.abort': return { handled: true, result: chatHandlers.handleChatAbort( params as GatewayRpcParams['chat.abort'], broadcast, ), }; case 'session.list': return { handled: true, result: chatHandlers.handleSessionList(), }; case 'session.delete': { const request = params as GatewayRpcParams['session.delete']; if (normalizeAgentSessionKey(request.sessionKey).endsWith(':main')) { return { handled: true, result: { success: false }, }; } return { handled: true, result: chatHandlers.handleSessionDelete(request), }; } case 'provider.list': return { handled: true, result: providerHandlers.handleProviderList(), }; case 'provider.getDefault': return { handled: true, result: providerHandlers.handleProviderGetDefault(), }; case 'skills.status': return { handled: true, result: skillHandlers.handleSkillsStatus(), }; case 'skills.update': return { handled: true, result: skillHandlers.handleSkillsUpdate( params as GatewayRpcParams['skills.update'], broadcast, ), }; case 'skills.install': return { handled: true, result: skillHandlers.handleSkillsInstall( params as GatewayRpcParams['skills.install'], broadcast, ), }; default: return { handled: false }; } }