import React, { useState, useEffect } from 'react'; import { Button } from './ui/button'; import { Input } from './ui/input'; import { ScrollArea } from './ui/scroll-area'; import { Badge } from './ui/badge'; import { X, Plus, Settings, Shield, AlertTriangle, Moon, Sun } from 'lucide-react'; import { useTheme } from '../contexts/ThemeContext'; function ToolsSettings({ isOpen, onClose }) { const { isDarkMode, toggleDarkMode } = useTheme(); const [allowedTools, setAllowedTools] = useState([]); const [disallowedTools, setDisallowedTools] = useState([]); const [newAllowedTool, setNewAllowedTool] = useState(''); const [newDisallowedTool, setNewDisallowedTool] = useState(''); const [skipPermissions, setSkipPermissions] = useState(false); const [isSaving, setIsSaving] = useState(false); const [saveStatus, setSaveStatus] = useState(null); const [projectSortOrder, setProjectSortOrder] = useState('name'); // Common tool patterns const commonTools = [ 'Bash(git log:*)', 'Bash(git diff:*)', 'Bash(git status:*)', 'Write', 'Read', 'Edit', 'Glob', 'Grep', 'MultiEdit', 'Task', 'TodoWrite', 'TodoRead', 'WebFetch', 'WebSearch' ]; useEffect(() => { if (isOpen) { loadSettings(); } }, [isOpen]); const loadSettings = () => { try { // Load from localStorage const savedSettings = localStorage.getItem('claude-tools-settings'); if (savedSettings) { const settings = JSON.parse(savedSettings); setAllowedTools(settings.allowedTools || []); setDisallowedTools(settings.disallowedTools || []); setSkipPermissions(settings.skipPermissions || false); setProjectSortOrder(settings.projectSortOrder || 'name'); } else { // Set defaults setAllowedTools([]); setDisallowedTools([]); setSkipPermissions(false); setProjectSortOrder('name'); } } catch (error) { console.error('Error loading tool settings:', error); // Set defaults on error setAllowedTools([]); setDisallowedTools([]); setSkipPermissions(false); setProjectSortOrder('name'); } }; const saveSettings = () => { setIsSaving(true); setSaveStatus(null); try { const settings = { allowedTools, disallowedTools, skipPermissions, projectSortOrder, lastUpdated: new Date().toISOString() }; // Save to localStorage localStorage.setItem('claude-tools-settings', JSON.stringify(settings)); setSaveStatus('success'); setTimeout(() => { onClose(); }, 1000); } catch (error) { console.error('Error saving tool settings:', error); setSaveStatus('error'); } finally { setIsSaving(false); } }; const addAllowedTool = (tool) => { if (tool && !allowedTools.includes(tool)) { setAllowedTools([...allowedTools, tool]); setNewAllowedTool(''); } }; const removeAllowedTool = (tool) => { setAllowedTools(allowedTools.filter(t => t !== tool)); }; const addDisallowedTool = (tool) => { if (tool && !disallowedTools.includes(tool)) { setDisallowedTools([...disallowedTools, tool]); setNewDisallowedTool(''); } }; const removeDisallowedTool = (tool) => { setDisallowedTools(disallowedTools.filter(t => t !== tool)); }; if (!isOpen) return null; return (
Tools that are automatically allowed without prompting for permission
Quick add common tools:
Tools that are automatically blocked without prompting for permission
"Bash(git log:*)" - Allow all git log commands"Bash(git diff:*)" - Allow all git diff commands"Write" - Allow all Write tool usage"Read" - Allow all Read tool usage"Bash(rm:*)" - Block all rm commands (dangerous)