From 270f49a4a63bdb4604e4775fe7cb9ea295d990e8 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 12 May 2026 11:36:57 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E6=81=A2=E5=A4=8D=20Claude=20Desktop=20?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E5=8A=9F=E8=83=BD=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 Claude Desktop 的 Prompts、Skills、Sessions 映射到 Claude Code 配置 - 恢复 Claude Desktop 顶部功能按钮组 - 继续复用统一 MCP 面板入口 --- src/App.tsx | 373 ++++++++++++++++++++++++++-------------------------- 1 file changed, 190 insertions(+), 183 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index aa278081a..5afdcfd44 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -165,6 +165,8 @@ function App() { const queryClient = useQueryClient(); const [activeApp, setActiveApp] = useState(getInitialApp); + const sharedFeatureApp: AppId = + activeApp === "claude-desktop" ? "claude" : activeApp; const [currentView, setCurrentView] = useState(getInitialView); const [settingsDefaultTab, setSettingsDefaultTab] = useState("general"); const [isAddOpen, setIsAddOpen] = useState(false); @@ -210,16 +212,16 @@ function App() { useEffect(() => { if ( currentView === "sessions" && - activeApp !== "claude" && - activeApp !== "codex" && - activeApp !== "opencode" && - activeApp !== "openclaw" && - activeApp !== "gemini" && - activeApp !== "hermes" + sharedFeatureApp !== "claude" && + sharedFeatureApp !== "codex" && + sharedFeatureApp !== "opencode" && + sharedFeatureApp !== "openclaw" && + sharedFeatureApp !== "gemini" && + sharedFeatureApp !== "hermes" ) { setCurrentView("providers"); } - }, [activeApp, currentView]); + }, [sharedFeatureApp, currentView]); const [editingProvider, setEditingProvider] = useState(null); const [usageProvider, setUsageProvider] = useState(null); @@ -273,14 +275,14 @@ function App() { currentView === "openclawAgents"); const { data: openclawHealthWarnings = [] } = useOpenClawHealth(isOpenClawView); - const hasSkillsSupport = activeApp !== "claude-desktop"; + const hasSkillsSupport = sharedFeatureApp !== "openclaw"; const hasSessionSupport = - activeApp === "claude" || - activeApp === "codex" || - activeApp === "opencode" || - activeApp === "openclaw" || - activeApp === "gemini" || - activeApp === "hermes"; + sharedFeatureApp === "claude" || + sharedFeatureApp === "codex" || + sharedFeatureApp === "opencode" || + sharedFeatureApp === "openclaw" || + sharedFeatureApp === "gemini" || + sharedFeatureApp === "hermes"; const { addProvider, @@ -911,7 +913,7 @@ function App() { ref={promptPanelRef} open={true} onOpenChange={() => setCurrentView("providers")} - appId={activeApp} + appId={sharedFeatureApp} /> ); case "hermesMemory": @@ -921,14 +923,18 @@ function App() { setCurrentView("skillsDiscovery")} - currentApp={activeApp === "openclaw" ? "claude" : activeApp} + currentApp={ + sharedFeatureApp === "openclaw" ? "claude" : sharedFeatureApp + } /> ); case "skillsDiscovery": return ( ); case "mcp": @@ -950,7 +956,12 @@ function App() { ); case "sessions": - return ; + return ( + + ); case "workspace": return ; case "openclawEnv": @@ -1163,7 +1174,9 @@ function App() {

{currentView === "settings" && t("settings.title")} {currentView === "prompts" && - t("prompts.title", { appName: t(`apps.${activeApp}`) })} + t("prompts.title", { + appName: t(`apps.${sharedFeatureApp}`), + })} {currentView === "skills" && t("skills.title")} {currentView === "skillsDiscovery" && t("skills.title")} {currentView === "mcp" && t("mcp.unifiedPanel.title")} @@ -1376,170 +1389,164 @@ function App() { compact={isToolbarCompact} /> - {activeApp !== "claude-desktop" && ( -
- - - {activeApp === "hermes" ? ( - <> - - - - - - ) : activeApp === "openclaw" ? ( - <> - - - - - - - ) : ( - <> - - - - - - )} - - -
- )} +
+ + + {activeApp === "hermes" ? ( + <> + + + + + + ) : activeApp === "openclaw" ? ( + <> + + + + + + + ) : ( + <> + + + + + + )} + + +