fix: 修复 MCP 服务器禁用状态下的操作选项

- 问题 2.1: 禁用的服务器不再显示'查看工具'选项,避免用户查看空工具列表
- 问题 2.2: 禁用的服务器不再显示'重新连接'选项,保持逻辑一致性
- 改进:根据服务器状态动态生成可用操作列表
- 改进:启用/禁用选项始终显示,方便用户切换状态
This commit is contained in:
LaZzyMan 2026-03-09 10:59:20 +08:00
parent d63798cc0d
commit 41bb300542
2 changed files with 1001 additions and 23 deletions

View file

@ -4,7 +4,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
import { useState } from 'react';
import { useState, useMemo } from 'react';
import { Box, Text } from 'ink';
import { theme } from '../../../semantic-colors.js';
import { useKeypress } from '../../../hooks/useKeypress.js';
@ -34,29 +34,45 @@ export const ServerDetailStep: React.FC<ServerDetailStepProps> = ({
const statusColor = server ? getStatusColor(server.status) : 'gray';
const actions = [
{
key: 'view-tools',
get label() {
return t('View tools');
},
value: 'view-tools' as const,
},
{
key: 'reconnect',
get label() {
return t('Reconnect');
},
value: 'reconnect' as const,
},
{
// 根据服务器状态动态生成可用操作
const actions = useMemo(() => {
const result: Array<{
key: string;
label: string;
value: ServerAction;
}> = [];
if (!server) {
return result;
}
// 只在服务器未禁用且有工具时显示"查看工具"选项
if (!server.isDisabled && (server.toolCount ?? 0) > 0) {
result.push({
key: 'view-tools',
label: t('View tools'),
value: 'view-tools',
});
}
// 只在服务器未禁用且已断开连接时显示"重新连接"选项
if (!server.isDisabled && server.status === 'disconnected') {
result.push({
key: 'reconnect',
label: t('Reconnect'),
value: 'reconnect',
});
}
// 始终显示启用/禁用选项
result.push({
key: 'toggle-disable',
get label() {
return server?.isDisabled ? t('Enable') : t('Disable');
},
value: 'toggle-disable' as const,
},
];
label: server?.isDisabled ? t('Enable') : t('Disable'),
value: 'toggle-disable',
});
return result;
}, [server]);
useKeypress(
(key) => {