From d204655d54945ba8629803de0e6bc0978b10f162 Mon Sep 17 00:00:00 2001 From: hllshiro <40970081+hllshiro@users.noreply.github.com> Date: Tue, 5 Aug 2025 12:48:11 +0800 Subject: [PATCH] fix: fixed dirty data problems fixed the old session tool error caused by fixed the problem that the tool list was not reset when creating a new session --- .../sqlitePresenter/tables/conversations.ts | 15 +++++++++++---- src/renderer/src/components/mcpToolsList.vue | 16 +++++++++++----- src/renderer/src/stores/mcp.ts | 16 +++++++++++++++- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/main/presenter/sqlitePresenter/tables/conversations.ts b/src/main/presenter/sqlitePresenter/tables/conversations.ts index 8d1337251..1b58cbc53 100644 --- a/src/main/presenter/sqlitePresenter/tables/conversations.ts +++ b/src/main/presenter/sqlitePresenter/tables/conversations.ts @@ -79,6 +79,7 @@ export class ConversationsTable extends BaseTable { } if (version === 3) { return ` + --- 添加 enabled_mcp_tools 字段 ALTER TABLE conversations ADD COLUMN enabled_mcp_tools TEXT DEFAULT '[]'; ` } @@ -88,12 +89,18 @@ export class ConversationsTable extends BaseTable { ALTER TABLE conversations ADD COLUMN thinking_budget INTEGER DEFAULT NULL; ` } + if (version === 5) { + return ` + -- 回滚脏数据 enabled_mcp_tools + UPDATE conversations SET enabled_mcp_tools = NULL WHERE enabled_mcp_tools = '[]'; + ` + } return null } getLatestVersion(): number { - return 4 + return 5 } async create(title: string, settings: Partial = {}): Promise { @@ -133,7 +140,7 @@ export class ConversationsTable extends BaseTable { 1, settings.artifacts || 0, 0, // Default is_pinned to 0 - settings.enabledMcpTools ? JSON.stringify(settings.enabledMcpTools) : '[]', + settings.enabledMcpTools ? JSON.stringify(settings.enabledMcpTools) : 'NULL', settings.thinkingBudget !== undefined ? settings.thinkingBudget : null ) return conv_id @@ -184,7 +191,7 @@ export class ConversationsTable extends BaseTable { providerId: result.providerId, modelId: result.modelId, artifacts: result.artifacts as 0 | 1, - enabledMcpTools: getJsonField(result.enabled_mcp_tools, []), + enabledMcpTools: getJsonField(result.enabled_mcp_tools, undefined), thinkingBudget: result.thinking_budget !== null ? result.thinking_budget : undefined } } @@ -316,7 +323,7 @@ export class ConversationsTable extends BaseTable { providerId: row.providerId, modelId: row.modelId, artifacts: row.artifacts as 0 | 1, - enabledMcpTools: getJsonField(row.enabled_mcp_tools, []), + enabledMcpTools: getJsonField(row.enabled_mcp_tools, undefined), thinkingBudget: row.thinking_budget !== null ? row.thinking_budget : undefined } })) diff --git a/src/renderer/src/components/mcpToolsList.vue b/src/renderer/src/components/mcpToolsList.vue index 120bb02f9..0936aa16c 100644 --- a/src/renderer/src/components/mcpToolsList.vue +++ b/src/renderer/src/components/mcpToolsList.vue @@ -34,16 +34,22 @@ const getTools = (serverName: string) => { // 获取每个mcp服务的可用工具数量 const getEnabledToolCountByServer = (serverName: string) => { - const enabledTools = chatStore.chatConfig.enabledMcpTools ?? [] const serverTools = mcpStore.tools.filter((tool) => tool.server.name === serverName) - return serverTools.filter((tool) => enabledTools.includes(tool.function.name)).length + if (chatStore.chatConfig.enabledMcpTools) { + const enabledTools = chatStore.chatConfig.enabledMcpTools + return serverTools.filter((tool) => enabledTools.includes(tool.function.name)).length + } + return serverTools.length } // 获取可用工具总数 const getTotalEnabledToolCount = () => { - const enabledMcpTools = chatStore.chatConfig.enabledMcpTools || [] - const filterList = mcpStore.tools.filter((item) => enabledMcpTools.includes(item.function.name)) - return filterList.length + if (chatStore.chatConfig.enabledMcpTools) { + const enabledMcpTools = chatStore.chatConfig.enabledMcpTools + const filterList = mcpStore.tools.filter((item) => enabledMcpTools.includes(item.function.name)) + return filterList.length + } + return mcpStore.tools.length } // 处理单个服务开关状态变化 diff --git a/src/renderer/src/stores/mcp.ts b/src/renderer/src/stores/mcp.ts index c544e3b21..76f0bcb68 100644 --- a/src/renderer/src/stores/mcp.ts +++ b/src/renderer/src/stores/mcp.ts @@ -1,4 +1,4 @@ -import { ref, computed, onMounted } from 'vue' +import { ref, computed, onMounted, watch } from 'vue' import { defineStore } from 'pinia' import { usePresenter } from '@/composables/usePresenter' import { MCP_EVENTS } from '@/events' @@ -521,9 +521,23 @@ export const useMcpStore = defineStore('mcp', () => { } } + // 监听活动线程变化,处理新会话的默认工具状态 + const handleActiveThreadChange = () => { + watch( + () => chatStore.getActiveThreadId(), + (newThreadId, oldThreadId) => { + // 从有活动线程切换到无活动线程(新会话页面) + if (oldThreadId && !newThreadId && config.value.mcpEnabled && tools.value.length > 0) { + chatStore.chatConfig.enabledMcpTools = undefined + } + } + ) + } + // 立即初始化 onMounted(async () => { await init() + handleActiveThreadChange() }) return {