diff --git a/frontend/src/components/ai/AIMCPClientInstallPanel.tsx b/frontend/src/components/ai/AIMCPClientInstallPanel.tsx index 5a9c330..34bca87 100644 --- a/frontend/src/components/ai/AIMCPClientInstallPanel.tsx +++ b/frontend/src/components/ai/AIMCPClientInstallPanel.tsx @@ -7,10 +7,10 @@ import { buildRemoteMCPClientQuickStart, isMCPClientKey, isRemoteMCPClientStatus, - REMOTE_MCP_PARAMETER_GUIDES, type MCPClientKey, } from '../../utils/mcpClientInstallStatus'; import type { OverlayWorkbenchTheme } from '../../utils/overlayWorkbenchTheme'; +import AIMCPRemoteQuickStartPanel from './AIMCPRemoteQuickStartPanel'; import { getMCPClientDetectionSummary, getMCPClientInstallStateLabel, @@ -296,173 +296,12 @@ const AIMCPClientInstallPanel: React.FC = ({ )} {remoteQuickStart && ( -
-
- {remoteQuickStart.displayName} 远程 MCP 快速配置 -
-
- 下面分别给云端 Agent、无 GUI/CLI 场景和 Windows GoNavi 使用。云端只保存 MCP URL 和 Bearer Token,不保存数据库账号密码;默认 schema-only 只暴露结构工具。 -
-
- {REMOTE_MCP_PARAMETER_GUIDES.map((item) => ( -
-
-
- {item.title} -
- - {item.required ? '必填' : '可选'} - -
-
- 应填:{item.fill} -
-
- 示例:{item.example} -
-
- 避免:{item.avoid} -
-
- ))} -
-
-
-
- 配置到云端 Agent -
- - {remoteQuickStart.configJson} - -
-
-
- 无 GUI / CLI 生成配置 -
- - {remoteQuickStart.configCommand} - -
- 用于生成可粘贴到 {remoteQuickStart.displayName} 的远程 MCP 配置,不会读取或输出数据库密码。 -
-
-
-
- Windows 启动 GoNavi MCP HTTP -
- - {remoteQuickStart.launchCommand} - -
- 独立二进制:{remoteQuickStart.standaloneCommand} -
-
-
-
-
-
验证顺序
-
- {remoteQuickStart.verificationSteps.map((item) => ( -
- {item} -
- ))} -
-
-
-
安全边界
-
- {remoteQuickStart.securityNotes.map((item) => ( -
- {item} -
- ))} -
-
-
-
+ )}
CLI 检测:{selectedIsRemoteClient diff --git a/frontend/src/components/ai/AIMCPRemoteQuickStartPanel.test.tsx b/frontend/src/components/ai/AIMCPRemoteQuickStartPanel.test.tsx new file mode 100644 index 0000000..faf7ab0 --- /dev/null +++ b/frontend/src/components/ai/AIMCPRemoteQuickStartPanel.test.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import { renderToStaticMarkup } from 'react-dom/server'; +import { describe, expect, it } from 'vitest'; + +import { buildRemoteMCPClientQuickStart } from '../../utils/mcpClientInstallStatus'; +import { buildOverlayWorkbenchTheme } from '../../utils/overlayWorkbenchTheme'; +import AIMCPRemoteQuickStartPanel from './AIMCPRemoteQuickStartPanel'; + +describe('AIMCPRemoteQuickStartPanel', () => { + it('renders remote MCP bridge parameters and safe launch snippets for cloud agents', () => { + const quickStart = buildRemoteMCPClientQuickStart({ + client: 'openclaw', + displayName: 'OpenClaw', + }); + + const markup = renderToStaticMarkup( + , + ); + + expect(markup).toContain('OpenClaw 远程 MCP 快速配置'); + expect(markup).toContain('公网/隧道 URL'); + expect(markup).toContain('Bearer Token'); + expect(markup).toContain('配置到云端 Agent'); + expect(markup).toContain('无 GUI / CLI 生成配置'); + expect(markup).toContain('Windows 启动 GoNavi MCP HTTP'); + expect(markup).toContain('"type": "streamable-http"'); + expect(markup).toContain('GoNavi.exe mcp-server remote-config --client openclaw'); + expect(markup).toContain('gonavi-mcp-server http --addr 127.0.0.1:8765'); + expect(markup).toContain('默认 --schema-only 不注册 execute_sql'); + expect(markup).not.toContain('password'); + }); +}); diff --git a/frontend/src/components/ai/AIMCPRemoteQuickStartPanel.tsx b/frontend/src/components/ai/AIMCPRemoteQuickStartPanel.tsx new file mode 100644 index 0000000..5099398 --- /dev/null +++ b/frontend/src/components/ai/AIMCPRemoteQuickStartPanel.tsx @@ -0,0 +1,171 @@ +import React from 'react'; + +import { + REMOTE_MCP_PARAMETER_GUIDES, + type RemoteMCPClientQuickStart, +} from '../../utils/mcpClientInstallStatus'; +import type { OverlayWorkbenchTheme } from '../../utils/overlayWorkbenchTheme'; + +interface AIMCPRemoteQuickStartPanelProps { + quickStart: RemoteMCPClientQuickStart; + darkMode: boolean; + overlayTheme: OverlayWorkbenchTheme; + cardBorder: string; +} + +interface RemoteCommandCardProps { + title: string; + children: React.ReactNode; + darkMode: boolean; + overlayTheme: OverlayWorkbenchTheme; + cardBorder: string; +} + +const remoteCodeStyle = (overlayTheme: OverlayWorkbenchTheme): React.CSSProperties => ({ + display: 'block', + marginTop: 8, + fontFamily: 'var(--gn-font-mono)', + fontSize: 11, + color: overlayTheme.titleText, + whiteSpace: 'pre-wrap', + overflowWrap: 'anywhere', +}); + +const RemoteCommandCard: React.FC = ({ + title, + children, + darkMode, + overlayTheme, + cardBorder, +}) => ( +
+
+ {title} +
+ {children} +
+); + +const AIMCPRemoteQuickStartPanel: React.FC = ({ + quickStart, + darkMode, + overlayTheme, + cardBorder, +}) => ( +
+
+ {quickStart.displayName} 远程 MCP 快速配置 +
+
+ 下面分别给云端 Agent、无 GUI/CLI 场景和 Windows GoNavi 使用。云端只保存 MCP URL 和 Bearer Token,不保存数据库账号密码;默认 schema-only 只暴露结构工具。 +
+
+ {REMOTE_MCP_PARAMETER_GUIDES.map((item) => ( +
+
+
+ {item.title} +
+ + {item.required ? '必填' : '可选'} + +
+
+ 应填:{item.fill} +
+
+ 示例:{item.example} +
+
+ 避免:{item.avoid} +
+
+ ))} +
+
+ + + {quickStart.configJson} + + + + + {quickStart.configCommand} + +
+ 用于生成可粘贴到 {quickStart.displayName} 的远程 MCP 配置,不会读取或输出数据库密码。 +
+
+ + + {quickStart.launchCommand} + +
+ 独立二进制:{quickStart.standaloneCommand} +
+
+
+
+
+
验证顺序
+
+ {quickStart.verificationSteps.map((item) => ( +
+ {item} +
+ ))} +
+
+
+
安全边界
+
+ {quickStart.securityNotes.map((item) => ( +
+ {item} +
+ ))} +
+
+
+
+); + +export default AIMCPRemoteQuickStartPanel;