From 327a78f1cb071554d772c0e80374e32c1f8b4acf Mon Sep 17 00:00:00 2001 From: Syngnat Date: Tue, 9 Jun 2026 18:44:39 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(ai-mcp):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=20Windows=20=E5=AE=8C=E6=95=B4=E5=91=BD=E4=BB=A4=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ai/AIMCPServerCard.test.tsx | 4 +- .../components/ai/AIMCPServerGuidePanel.tsx | 4 +- frontend/src/utils/mcpCommandDraft.test.ts | 39 +++++++++ frontend/src/utils/mcpCommandDraft.ts | 81 ++++++++++++++++--- frontend/src/utils/mcpServerGuidance.test.ts | 8 +- frontend/src/utils/mcpServerGuidance.ts | 4 +- 6 files changed, 122 insertions(+), 18 deletions(-) diff --git a/frontend/src/components/ai/AIMCPServerCard.test.tsx b/frontend/src/components/ai/AIMCPServerCard.test.tsx index 94b2570..765c75a 100644 --- a/frontend/src/components/ai/AIMCPServerCard.test.tsx +++ b/frontend/src/components/ai/AIMCPServerCard.test.tsx @@ -48,6 +48,8 @@ describe('AIMCPServerCard', () => { expect(markup).toContain('固定'); expect(markup).toContain('直接粘贴完整命令'); expect(markup).toContain('自动拆分到下方字段'); + expect(markup).toContain('$env:KEY=VALUE;'); + expect(markup).toContain('set KEY=VALUE &&'); expect(markup).toContain('每个参数单独录入一个标签'); expect(markup).toContain('每行一个 KEY=VALUE'); expect(markup).toContain('没有等号或 key 含空格的行不会保存'); @@ -63,6 +65,6 @@ describe('AIMCPServerCard', () => { expect(markup).toContain('稍宽松 45 秒'); expect(markup).toContain('慢启动 60 秒'); expect(markup).toContain('node server.js --stdio'); - expect(markup).toContain('OPENAI_API_KEY=... uvx mcp-server-fetch --stdio'); + expect(markup).toContain('$env:GITHUB_TOKEN=...; uvx mcp-server-github --stdio'); }); }); diff --git a/frontend/src/components/ai/AIMCPServerGuidePanel.tsx b/frontend/src/components/ai/AIMCPServerGuidePanel.tsx index d8ec568..8739191 100644 --- a/frontend/src/components/ai/AIMCPServerGuidePanel.tsx +++ b/frontend/src/components/ai/AIMCPServerGuidePanel.tsx @@ -157,7 +157,7 @@ const AIMCPServerGuidePanel: React.FC = ({
只有一条完整命令?
- 直接粘贴完整命令,GoNavi 会自动拆成“启动命令 / 命令参数 / 环境变量”三块,适合你只拿到 README 里的一整行示例时快速录入。 + 直接粘贴完整命令,GoNavi 会自动拆成“启动命令 / 命令参数 / 环境变量”三块;支持 Unix 的 KEY=VALUE,也支持 Windows PowerShell 的 $env:KEY=VALUE; 和 cmd 的 set KEY=VALUE && 写法。
= ({ ? parsedCommandDraft.ok && parsedCommandDraft.draft ? `将解析为:命令 ${parsedCommandDraft.draft.command},参数 ${parsedCommandDraft.draft.args.length} 个,环境变量 ${Object.keys(parsedCommandDraft.draft.env).length} 个。` : parsedCommandDraft.error - : '支持带引号路径、带空格参数,以及命令前缀的 KEY=VALUE 环境变量。'} + : '支持带引号路径、带空格参数,以及 KEY=VALUE / $env:KEY=VALUE; / set KEY=VALUE && 环境变量前缀。'}