81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
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),
|
|
};
|
|
default:
|
|
return { handled: false };
|
|
}
|
|
}
|