diff --git a/ccw/frontend/src/locales/en/index.ts b/ccw/frontend/src/locales/en/index.ts
index e4a6d32a..303ecbca 100644
--- a/ccw/frontend/src/locales/en/index.ts
+++ b/ccw/frontend/src/locales/en/index.ts
@@ -24,6 +24,7 @@ import cliManager from './cli-manager.json';
import cliMonitor from './cli-monitor.json';
import mcpManager from './mcp-manager.json';
import codexlens from './codexlens.json';
+import apiSettings from './api-settings.json';
import theme from './theme.json';
import executionMonitor from './execution-monitor.json';
import cliHooks from './cli-hooks.json';
@@ -82,6 +83,7 @@ export default {
...flattenMessages(cliMonitor, 'cliMonitor'),
...flattenMessages(mcpManager, 'mcp'),
...flattenMessages(codexlens, 'codexlens'),
+ ...flattenMessages(apiSettings, 'apiSettings'),
...flattenMessages(theme, 'theme'),
...flattenMessages(cliHooks, 'cliHooks'),
...flattenMessages(executionMonitor, 'executionMonitor'),
diff --git a/ccw/frontend/src/locales/zh/index.ts b/ccw/frontend/src/locales/zh/index.ts
index 517d57fd..339587de 100644
--- a/ccw/frontend/src/locales/zh/index.ts
+++ b/ccw/frontend/src/locales/zh/index.ts
@@ -24,6 +24,7 @@ import cliManager from './cli-manager.json';
import cliMonitor from './cli-monitor.json';
import mcpManager from './mcp-manager.json';
import codexlens from './codexlens.json';
+import apiSettings from './api-settings.json';
import theme from './theme.json';
import executionMonitor from './execution-monitor.json';
import cliHooks from './cli-hooks.json';
@@ -82,6 +83,7 @@ export default {
...flattenMessages(cliMonitor, 'cliMonitor'),
...flattenMessages(mcpManager, 'mcp'),
...flattenMessages(codexlens, 'codexlens'),
+ ...flattenMessages(apiSettings, 'apiSettings'),
...flattenMessages(theme, 'theme'),
...flattenMessages(cliHooks, 'cliHooks'),
...flattenMessages(executionMonitor, 'executionMonitor'),
diff --git a/ccw/frontend/src/pages/ApiSettingsPage.tsx b/ccw/frontend/src/pages/ApiSettingsPage.tsx
index f9520b9a..d203cc12 100644
--- a/ccw/frontend/src/pages/ApiSettingsPage.tsx
+++ b/ccw/frontend/src/pages/ApiSettingsPage.tsx
@@ -7,14 +7,10 @@ import { useState, useMemo } from 'react';
import { useIntl } from 'react-intl';
import {
Server,
- Link,
- Database,
- Layers,
- Settings as SettingsIcon,
RefreshCw,
} from 'lucide-react';
-import { Card } from '@/components/ui/Card';
import { Button } from '@/components/ui/Button';
+import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/Tabs';
import {
ProviderList,
ProviderModal,
@@ -30,20 +26,10 @@ import {
} from '@/components/api-settings';
import { useProviders, useEndpoints, useModelPools, useCliSettings } from '@/hooks/useApiSettings';
import { useNotifications } from '@/hooks/useNotifications';
-import { cn } from '@/lib/utils';
// Tab type definitions
type TabType = 'providers' | 'endpoints' | 'cache' | 'modelPools' | 'cliSettings';
-// Tab configuration
-const TABS: { value: TabType; icon: React.ElementType }[] = [
- { value: 'providers', icon: Server },
- { value: 'endpoints', icon: Link },
- { value: 'cache', icon: Database },
- { value: 'modelPools', icon: Layers },
- { value: 'cliSettings', icon: SettingsIcon },
-];
-
export function ApiSettingsPage() {
const { formatMessage } = useIntl();
const { showNotification } = useNotifications();
@@ -192,52 +178,6 @@ export function ApiSettingsPage() {
}
};
- // Render the active tab's main content
- const renderMainContent = () => {
- switch (activeTab) {
- case 'providers':
- return (
-