import { useState, useEffect, useMemo } from 'react'; import { toast } from 'sonner'; import { Terminal, Eye, Trash2 } from 'lucide-react'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { Textarea } from '@/components/ui/textarea'; import { Slider } from '@/components/ui/slider'; import { Switch } from '@/components/ui/switch'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'; import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@/components/ui/accordion'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Card } from '@/components/Card'; import { useSettings } from '@/state/useSettings'; import { useUserState } from '@/state/useUserState'; import { useClaudeModels, useOpenCodeModels, useVisibleClaudeModels, useVisibleOpenCodeModels, } from '@/state/useModels'; import type { UserSettings } from '@/state/types/user-settings'; export const AISettings = () => { const [mainTab, setMainTab] = useUserState('ai-settings-tab', 'chat-defaults'); return (
Chat Defaults Model Visibility
); }; const ChatDefaultsSection = () => { const { settings, saveSettings } = useSettings(); const claudeModels = useVisibleClaudeModels(); const openCodeModels = useVisibleOpenCodeModels(); const [isSaving, setIsSaving] = useState(false); const [model, setModel] = useState(settings.chat.defaultModel); const [systemPrompt, setSystemPrompt] = useState(settings.chat.systemPrompt); const [temperature, setTemperature] = useState(settings.chat.temperature); const [defaultPwd, setDefaultPwd] = useState(settings.chat.defaultPwd); useEffect(() => { setModel(settings.chat.defaultModel); setSystemPrompt(settings.chat.systemPrompt); setTemperature(settings.chat.temperature); setDefaultPwd(settings.chat.defaultPwd); }, [settings]); const allModels = useMemo( () => [ ...claudeModels.map((m) => ({ ...m, provider: 'Claude' })), ...openCodeModels.map((m) => ({ ...m, provider: m.provider ?? 'OpenCode' })), ], [claudeModels, openCodeModels], ); const handleSave = async () => { if (isSaving) return; setIsSaving(true); try { const isOpenCode = openCodeModels.some((m) => m.id === model); const defaultProvider = isOpenCode ? ('opencode' as const) : ('claude' as const); const updated: UserSettings = { ...settings, chat: { defaultProvider, defaultModel: model, systemPrompt, temperature, defaultPwd }, }; await saveSettings(updated); toast.success('Chat defaults saved'); } catch { toast.error('Failed to save settings'); } finally { setIsSaving(false); } }; return (