From 7724b49ec4dfe01acdcc50deabfa264acf06f47b Mon Sep 17 00:00:00 2001 From: May Date: Mon, 2 Jun 2025 23:29:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mcp=20uv&bun=20installation=20status=20i?= =?UTF-8?q?con=20in=20nav=20bar=20not=20updated=20after=E2=80=A6=20(#6654)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: mcp uv&bun installation status icon in nav bar not updated after installed Signed-off-by: aprilandjan --- .../settings/MCPSettings/InstallNpxUv.tsx | 13 +++++++----- src/renderer/src/store/mcp.ts | 20 +++++++++++++++++-- src/renderer/src/types/index.ts | 2 ++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/renderer/src/pages/settings/MCPSettings/InstallNpxUv.tsx b/src/renderer/src/pages/settings/MCPSettings/InstallNpxUv.tsx index 0da94f76af..d5c4389c47 100644 --- a/src/renderer/src/pages/settings/MCPSettings/InstallNpxUv.tsx +++ b/src/renderer/src/pages/settings/MCPSettings/InstallNpxUv.tsx @@ -1,5 +1,7 @@ import { CheckCircleOutlined, QuestionCircleOutlined, WarningOutlined } from '@ant-design/icons' import { Center, VStack } from '@renderer/components/Layout' +import { useAppDispatch, useAppSelector } from '@renderer/store' +import { setIsBunInstalled, setIsUvInstalled } from '@renderer/store/mcp' import { Alert, Button } from 'antd' import { FC, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -13,8 +15,10 @@ interface Props { } const InstallNpxUv: FC = ({ mini = false }) => { - const [isUvInstalled, setIsUvInstalled] = useState(true) - const [isBunInstalled, setIsBunInstalled] = useState(true) + const dispatch = useAppDispatch() + const isUvInstalled = useAppSelector((state) => state.mcp.isUvInstalled) + const isBunInstalled = useAppSelector((state) => state.mcp.isBunInstalled) + const [isInstallingUv, setIsInstallingUv] = useState(false) const [isInstallingBun, setIsInstallingBun] = useState(false) const [uvPath, setUvPath] = useState(null) @@ -22,14 +26,13 @@ const InstallNpxUv: FC = ({ mini = false }) => { const [binariesDir, setBinariesDir] = useState(null) const { t } = useTranslation() const navigate = useNavigate() - const checkBinaries = async () => { const uvExists = await window.api.isBinaryExist('uv') const bunExists = await window.api.isBinaryExist('bun') const { uvPath, bunPath, dir } = await window.api.mcp.getInstallInfo() - setIsUvInstalled(uvExists) - setIsBunInstalled(bunExists) + dispatch(setIsUvInstalled(uvExists)) + dispatch(setIsBunInstalled(bunExists)) setUvPath(uvPath) setBunPath(bunPath) setBinariesDir(dir) diff --git a/src/renderer/src/store/mcp.ts b/src/renderer/src/store/mcp.ts index 88e49226a4..4894d93474 100644 --- a/src/renderer/src/store/mcp.ts +++ b/src/renderer/src/store/mcp.ts @@ -3,7 +3,9 @@ import Logger from '@renderer/config/logger' import type { MCPConfig, MCPServer } from '@renderer/types' export const initialState: MCPConfig = { - servers: [] + servers: [], + isUvInstalled: true, + isBunInstalled: true } const mcpSlice = createSlice({ @@ -30,6 +32,12 @@ const mcpSlice = createSlice({ if (index !== -1) { state.servers[index].isActive = action.payload.isActive } + }, + setIsUvInstalled: (state, action: PayloadAction) => { + state.isUvInstalled = action.payload + }, + setIsBunInstalled: (state, action: PayloadAction) => { + state.isBunInstalled = action.payload } }, selectors: { @@ -40,7 +48,15 @@ const mcpSlice = createSlice({ } }) -export const { setMCPServers, addMCPServer, updateMCPServer, deleteMCPServer, setMCPServerActive } = mcpSlice.actions +export const { + setMCPServers, + addMCPServer, + updateMCPServer, + deleteMCPServer, + setMCPServerActive, + setIsBunInstalled, + setIsUvInstalled +} = mcpSlice.actions // Export the generated selectors from the slice export const { getActiveServers, getAllServers } = mcpSlice.selectors diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index cb62285be6..0f66da2014 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -600,6 +600,8 @@ export interface GetMCPPromptResponse { export interface MCPConfig { servers: MCPServer[] + isUvInstalled: boolean + isBunInstalled: boolean } interface BaseToolResponse {