Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/main/presenter/sqlitePresenter/tables/conversations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 '[]';
`
}
Expand All @@ -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<CONVERSATION_SETTINGS> = {}): Promise<string> {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
}
}
Expand Down Expand Up @@ -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
}
}))
Expand Down
16 changes: 11 additions & 5 deletions src/renderer/src/components/mcpToolsList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

// 处理单个服务开关状态变化
Expand Down
16 changes: 15 additions & 1 deletion src/renderer/src/stores/mcp.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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 {
Expand Down