From cc4e67bd24e3391efdf0a33ce23e3df3327cfd27 Mon Sep 17 00:00:00 2001 From: digua Date: Sun, 14 Jun 2026 15:21:57 +0800 Subject: [PATCH] refactor(data): remove pluginCompute plugin-compute path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 图表已统一走缓存端点,pluginCompute 不再被任何调用方使用,移除其全链路实现。 pluginQuery 保留供消息浏览/搜索/分页与 session-index 等通用 SQL 访问。 - 删除 ElectronDataAdapter(已无覆写),electron registry 直接使用 FetchDataAdapter - 移除 IPC handler、preload API/类型、worker dispatch 与 workerManager 导出中的 pluginCompute Co-authored-by: Cursor --- apps/desktop/main/ipc/chat.ts | 8 -------- apps/desktop/main/worker/dbWorker.ts | 6 +----- apps/desktop/main/worker/workerManager.ts | 8 -------- apps/desktop/preload/apis/chat.ts | 7 ------- apps/desktop/preload/index.d.ts | 1 - src/services/data/electron.ts | 14 -------------- src/services/registry.ts | 4 ++-- 7 files changed, 3 insertions(+), 45 deletions(-) delete mode 100644 src/services/data/electron.ts diff --git a/apps/desktop/main/ipc/chat.ts b/apps/desktop/main/ipc/chat.ts index 903a8f53..ca1248e6 100644 --- a/apps/desktop/main/ipc/chat.ts +++ b/apps/desktop/main/ipc/chat.ts @@ -236,14 +236,6 @@ export function registerChatHandlers(ctx: IpcContext): void { } }) - /** - * 仅保留图表插件计算的 worker 卸载路径。 - * 其他数据查询已迁移到 HTTP,但这些计算会处理大数组,放在 renderer 会冻结 UI。 - */ - ipcMain.handle('chat:pluginCompute', async (_, fnString: string, input: unknown) => { - return worker.pluginCompute(fnString, input) - }) - // Session index and summary IPC handlers have been removed. // All session-index operations now go through shared HTTP routes // (FetchSessionIndexAdapter via /_web/sessions/* endpoints). diff --git a/apps/desktop/main/worker/dbWorker.ts b/apps/desktop/main/worker/dbWorker.ts index f1f7209e..01a073d0 100644 --- a/apps/desktop/main/worker/dbWorker.ts +++ b/apps/desktop/main/worker/dbWorker.ts @@ -217,12 +217,8 @@ const syncHandlers: Record any> = { executeRawSQL: (p) => executeRawSQL(p.sessionId, p.sql), getSchema: (p) => getSchema(p.sessionId), - // 插件系统 + // 通用 SQL 查询 pluginQuery: (p) => executePluginQuery(p.sessionId, p.sql, p.params), - pluginCompute: (p: { fnString: string; input: any }) => { - const fn = new Function('return ' + p.fnString)() - return fn(p.input) - }, // 会话索引 generateSessions: (p) => generateSessions(p.sessionId, p.gapThreshold), diff --git a/apps/desktop/main/worker/workerManager.ts b/apps/desktop/main/worker/workerManager.ts index e647536d..7592a592 100644 --- a/apps/desktop/main/worker/workerManager.ts +++ b/apps/desktop/main/worker/workerManager.ts @@ -257,14 +257,6 @@ export async function pluginQuery>( return sendToWorker('pluginQuery', { sessionId, sql, params }, 120000) } -/** - * 插件计算卸载(纯函数在 Worker 中执行) - * 超时设为 120s,因为计算密集型任务 + 排队等待可能较长 - */ -export async function pluginCompute(fnString: string, input: any): Promise { - return sendToWorker('pluginCompute', { fnString, input }, 120000) -} - // ==================== 导出的异步 API ==================== export async function getAvailableYears(sessionId: string): Promise { diff --git a/apps/desktop/preload/apis/chat.ts b/apps/desktop/preload/apis/chat.ts index 5f0d448b..bc051f4c 100644 --- a/apps/desktop/preload/apis/chat.ts +++ b/apps/desktop/preload/apis/chat.ts @@ -78,13 +78,6 @@ export const chatApi = { ): Promise<{ success: boolean; newMessageCount: number; error?: string }> => ipcRenderer.invoke('chat:incrementalImport', sessionId, filePath), - /** - * 图表插件计算会处理大量消息数组,Electron 下必须卸载到 worker, - * 避免 renderer 主线程同步执行造成窗口卡顿。 - */ - pluginCompute: (fnString: string, input: unknown): Promise => - ipcRenderer.invoke('chat:pluginCompute', fnString, input), - // ==================== Demo ==================== importDemo: ( diff --git a/apps/desktop/preload/index.d.ts b/apps/desktop/preload/index.d.ts index 58e393e0..ba8c3aa0 100644 --- a/apps/desktop/preload/index.d.ts +++ b/apps/desktop/preload/index.d.ts @@ -73,7 +73,6 @@ interface ChatApi { sessionId: string, filePath: string ) => Promise<{ success: boolean; newMessageCount: number; error?: string }> - pluginCompute: (fnString: string, input: unknown) => Promise importDemo: (locale: string) => Promise<{ success: boolean groupSessionId?: string diff --git a/src/services/data/electron.ts b/src/services/data/electron.ts deleted file mode 100644 index b83d7775..00000000 --- a/src/services/data/electron.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * ElectronDataAdapter — Electron 专用 DataAdapter - * - * 普通数据查询继续复用共享 HTTP 路由;计算密集型 pluginCompute - * 通过 Electron worker 执行,避免在 renderer 主线程同步阻塞图表交互。 - */ - -import { FetchDataAdapter } from './fetch' - -export class ElectronDataAdapter extends FetchDataAdapter { - async pluginCompute(fnString: string, input: unknown): Promise { - return window.chatApi.pluginCompute(fnString, input) - } -} diff --git a/src/services/registry.ts b/src/services/registry.ts index cbe0ff30..b2757178 100644 --- a/src/services/registry.ts +++ b/src/services/registry.ts @@ -65,8 +65,8 @@ export async function initServices(): Promise { * data/message/preferences/ai-streaming use Fetch/SSE; import stays on IPC. */ async function initElectronAdapters(): Promise { - const { ElectronDataAdapter } = await import('./data/electron') - registerAdapter('data', new ElectronDataAdapter()) + const { FetchDataAdapter } = await import('./data/fetch') + registerAdapter('data', new FetchDataAdapter()) const { ElectronImportAdapter } = await import('./import/electron') registerAdapter('import', new ElectronImportAdapter())