import { ArrowLeft, RefreshCw, Settings } from 'lucide-react'; import type React from 'react'; import { useEffect, useState, useCallback } from 'react'; import { Badge } from './ui/badge'; import { Button } from './ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'; import { ScrollArea } from './ui/scroll-area'; import { Separator } from './ui/separator'; interface ModelConfig { provider: string; modelId: string; maxTokens: number; temperature: number; } interface ConfigData { models?: { main?: ModelConfig; research?: ModelConfig; fallback?: ModelConfig; }; global?: { defaultNumTasks?: number; defaultSubtasks?: number; defaultPriority?: string; projectName?: string; responseLanguage?: string; }; } interface ConfigViewProps { sendMessage: (message: any) => Promise; onNavigateBack: () => void; } export const ConfigView: React.FC = ({ sendMessage, onNavigateBack }) => { const [config, setConfig] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const loadConfig = useCallback(async () => { setLoading(true); setError(null); try { const response = await sendMessage({ type: 'getConfig' }); setConfig(response); } catch (err) { setError('Failed to load configuration'); console.error('Error loading config:', err); } finally { setLoading(false); } }, [sendMessage]); useEffect(() => { loadConfig(); }, [loadConfig]); const modelLabels = { main: { label: 'Main Model', icon: '🤖', description: 'Primary model for task generation' }, research: { label: 'Research Model', icon: '🔍', description: 'Model for research-backed operations' }, fallback: { label: 'Fallback Model', icon: '🔄', description: 'Backup model if primary fails' } }; return (
{/* Header */}

Task Master Configuration

{/* Content */}
{loading ? (
) : error ? (
{error}
) : config ? (
{/* Models Section */} AI Models Models configured for different Task Master operations {config.models && Object.entries(config.models).map(([key, modelConfig]) => { const label = modelLabels[key as keyof typeof modelLabels]; if (!label || !modelConfig) return null; return (
{label.icon}

{label.label}

{label.description}

Provider: {modelConfig.provider}
Model: {modelConfig.modelId}
Max Tokens: {modelConfig.maxTokens.toLocaleString()}
Temperature: {modelConfig.temperature}
); })}
{/* Task Defaults Section */} {config.global && ( Task Defaults Default values for new tasks and subtasks
Default Number of Tasks {config.global.defaultNumTasks || 10}
Default Number of Subtasks {config.global.defaultSubtasks || 5}
Default Priority {config.global.defaultPriority || 'medium'}
{config.global.projectName && ( <>
Project Name {config.global.projectName}
)} {config.global.responseLanguage && ( <>
Response Language {config.global.responseLanguage}
)}
)} {/* Info Card */}

To modify these settings, go to{' '} .taskmaster/config.json {' '} and modify them, or use the MCP.

) : (
No configuration found. Please run `task-master init` in your project.
)}
); };