feat: 重构对话功能

This commit is contained in:
DEV_DSW
2026-04-14 17:02:20 +08:00
parent b3f07c4cfe
commit c61e41049f
53 changed files with 5200 additions and 1982 deletions

View File

@@ -0,0 +1,59 @@
import { BrowserWindow } from 'electron';
import { windowManager } from '@electron/service/window-service';
import logManager from '@electron/service/logger';
import type { GatewayEvent } from './types';
import * as chatHandlers from './handlers/chat';
import * as providerHandlers from './handlers/provider';
class GatewayManager {
private initialized = false;
async init(): Promise<void> {
if (this.initialized) return;
this.initialized = true;
logManager.info('GatewayManager initialized');
this.broadcast({ type: 'gateway:status', status: 'connected' });
}
async rpc(method: string, params: any): Promise<any> {
if (!this.initialized) {
await this.init();
}
logManager.info(`Gateway RPC: ${method}`, params);
switch (method) {
case 'chat.send':
return chatHandlers.handleChatSend(params, (event) => this.broadcast(event));
case 'chat.history':
return chatHandlers.handleChatHistory(params);
case 'chat.abort':
return chatHandlers.handleChatAbort(params, (event) => this.broadcast(event));
case 'session.list':
return chatHandlers.handleSessionList();
case 'provider.list':
return providerHandlers.handleProviderList();
case 'provider.getDefault':
return providerHandlers.handleProviderGetDefault();
default:
throw new Error(`Unknown gateway RPC method: ${method}`);
}
}
broadcast(event: GatewayEvent): void {
const mainWindow = BrowserWindow.getAllWindows().find(
(win) => windowManager.getName(win) === 'main'
);
if (mainWindow && !mainWindow.isDestroyed()) {
mainWindow.webContents.send('gateway:event', event);
}
}
reloadProviders(): void {
logManager.info('GatewayManager reloading providers');
// For now, providers are resolved on each chat.send call,
// so no in-memory cache to invalidate. Future: notify active sessions.
}
}
export const gatewayManager = new GatewayManager();