fix(openclaw): add openclaw to all Record<AppId, T> usages

Expand McpApps interface, APP_IDS, APP_ICON_MAP, enabledCounts
initializers, and test mock data to include the openclaw key,
resolving TypeScript errors after AppId union was extended.
This commit is contained in:
Jason
2026-02-07 14:49:15 +08:00
parent a33f8fe973
commit 182015264c
6 changed files with 24 additions and 8 deletions

View File

@@ -66,6 +66,7 @@ const McpFormModal: React.FC<McpFormModalProps> = ({
codex: boolean;
gemini: boolean;
opencode: boolean;
openclaw: boolean;
}>(() => {
if (initialData?.apps) {
return { ...initialData.apps };
@@ -75,6 +76,7 @@ const McpFormModal: React.FC<McpFormModalProps> = ({
codex: defaultEnabledApps.includes("codex"),
gemini: defaultEnabledApps.includes("gemini"),
opencode: defaultEnabledApps.includes("opencode"),
openclaw: defaultEnabledApps.includes("openclaw"),
};
});

View File

@@ -56,7 +56,7 @@ const UnifiedMcpPanel = React.forwardRef<
}, [serversMap]);
const enabledCounts = useMemo(() => {
const counts = { claude: 0, codex: 0, gemini: 0, opencode: 0 };
const counts = { claude: 0, codex: 0, gemini: 0, opencode: 0, openclaw: 0 };
serverEntries.forEach(([_, server]) => {
for (const app of APP_IDS) {
if (server.apps[app]) counts[app]++;

View File

@@ -53,7 +53,7 @@ const UnifiedSkillsPanel = React.forwardRef<
const installFromZipMutation = useInstallSkillsFromZip();
const enabledCounts = useMemo(() => {
const counts = { claude: 0, codex: 0, gemini: 0, opencode: 0 };
const counts = { claude: 0, codex: 0, gemini: 0, opencode: 0, openclaw: 0 };
if (!skills) return counts;
skills.forEach((skill) => {
for (const app of APP_IDS) {

View File

@@ -1,6 +1,11 @@
import React from "react";
import type { AppId } from "@/lib/api/types";
import { ClaudeIcon, CodexIcon, GeminiIcon } from "@/components/BrandIcons";
import {
ClaudeIcon,
CodexIcon,
GeminiIcon,
OpenClawIcon,
} from "@/components/BrandIcons";
import { ProviderIcon } from "@/components/ProviderIcon";
export interface AppConfig {
@@ -10,7 +15,7 @@ export interface AppConfig {
badgeClass: string;
}
export const APP_IDS: AppId[] = ["claude", "codex", "gemini", "opencode"];
export const APP_IDS: AppId[] = ["claude", "codex", "gemini", "opencode", "openclaw"];
export const APP_ICON_MAP: Record<AppId, AppConfig> = {
claude: {
@@ -52,4 +57,12 @@ export const APP_ICON_MAP: Record<AppId, AppConfig> = {
badgeClass:
"bg-indigo-500/10 text-indigo-700 dark:text-indigo-300 hover:bg-indigo-500/20 border-0 gap-1.5",
},
openclaw: {
label: "OpenClaw",
icon: <OpenClawIcon size={14} />,
activeClass:
"bg-rose-500/10 ring-1 ring-rose-500/20 hover:bg-rose-500/20 text-rose-600 dark:text-rose-400",
badgeClass:
"bg-rose-500/10 text-rose-700 dark:text-rose-300 hover:bg-rose-500/20 border-0 gap-1.5",
},
};

View File

@@ -288,6 +288,7 @@ export interface McpApps {
codex: boolean;
gemini: boolean;
opencode: boolean;
openclaw: boolean;
}
// MCP 服务器条目v3.7.0 统一结构)

View File

@@ -86,7 +86,7 @@ let mcpConfigs: McpConfigState = {
id: "sample",
name: "Sample Claude Server",
enabled: true,
apps: { claude: true, codex: false, gemini: false, opencode: false },
apps: { claude: true, codex: false, gemini: false, opencode: false, openclaw: false },
server: {
type: "stdio",
command: "claude-server",
@@ -98,7 +98,7 @@ let mcpConfigs: McpConfigState = {
id: "httpServer",
name: "HTTP Codex Server",
enabled: false,
apps: { claude: false, codex: true, gemini: false, opencode: false },
apps: { claude: false, codex: true, gemini: false, opencode: false, openclaw: false },
server: {
type: "http",
url: "http://localhost:3000",
@@ -131,7 +131,7 @@ export const resetProviderState = () => {
id: "sample",
name: "Sample Claude Server",
enabled: true,
apps: { claude: true, codex: false, gemini: false, opencode: false },
apps: { claude: true, codex: false, gemini: false, opencode: false, openclaw: false },
server: {
type: "stdio",
command: "claude-server",
@@ -143,7 +143,7 @@ export const resetProviderState = () => {
id: "httpServer",
name: "HTTP Codex Server",
enabled: false,
apps: { claude: false, codex: true, gemini: false, opencode: false },
apps: { claude: false, codex: true, gemini: false, opencode: false, openclaw: false },
server: {
type: "http",
url: "http://localhost:3000",