docs/archives/103-desktop-architecture/ipc-refactor-plan.md
解决当前底层 fetch 代理方案因模拟不完善导致的脆弱性和兼容性问题。建立一个稳定、可维护、职责清晰的桌面端应用架构,将主进程作为后端服务提供者,渲染进程作为纯粹的前端消费者。
fetch 代理,切换到高层服务接口代理core 包isRunningInElectron 和 fetch 注入)main.jsrequire('@prompt-optimizer/core') 直接消费 core 包LLMService 等核心服务main.js 中的服务提供一个适合 Node.js 环境的存储方案MemoryStorageProviderapi-fetch 代理main.js 和 preload.js 中建立基于 ILLMService 公共方法的高层 IPC 接口testConnection, sendMessageStream)core 包中创建一个 ElectronLLMProxy 类ILLMService 接口window.electronAPI.llm.* 调用 IPC 接口useServiceInitializer.tsLLMService 实例或 ElectronLLMProxy 代理实例底层代理的脆弱性:
fetch 代理导致 AbortSignal、Headers 等对象在跨IPC传输时出现序列化和实例类型不匹配的问题关注点分离违反:
维护困难:
// main.js
const { LLMService, StorageProvider } = require('@prompt-optimizer/core');
class MainProcessServices {
constructor() {
this.storageProvider = new NodeStorageProvider();
this.llmService = new LLMService(this.storageProvider);
}
async testConnection(config) {
return await this.llmService.testConnection(config);
}
async sendMessageStream(messages, config, onChunk) {
return await this.llmService.sendMessageStream(messages, config, onChunk);
}
}
const services = new MainProcessServices();
// IPC 处理器
ipcMain.handle('llm:testConnection', async (event, config) => {
return await services.testConnection(config);
});
ipcMain.handle('llm:sendMessageStream', async (event, messages, config) => {
// 处理流式响应的特殊逻辑
});
// ElectronLLMProxy.ts
export class ElectronLLMProxy implements ILLMService {
async testConnection(config: LLMConfig): Promise<boolean> {
return await window.electronAPI.llm.testConnection(config);
}
async sendMessageStream(
messages: Message[],
config: LLMConfig,
onChunk: (chunk: string) => void
): Promise<string> {
return await window.electronAPI.llm.sendMessageStream(messages, config, onChunk);
}
}
// useServiceInitializer.ts
export function useServiceInitializer() {
const isElectron = typeof window !== 'undefined' && window.electronAPI;
if (isElectron) {
return {
llmService: new ElectronLLMProxy(),
storageProvider: new ElectronStorageProxy()
};
} else {
return {
llmService: new LLMService(new WebStorageProvider()),
storageProvider: new WebStorageProvider()
};
}
}
任务状态: 📋 计划阶段
优先级: 高
最后更新: 2025-07-01