diff --git a/package.json b/package.json index 97537f883f..062dfb420b 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "scripts": { "start": "electron-vite preview", "dev": "dotenv electron-vite dev", - "dev:main": "dotenv electron-vite dev --watch", "debug": "electron-vite -- --inspect --sourcemap --remote-debugging-port=9222", "build": "npm run typecheck && electron-vite build", "build:check": "yarn lint && yarn test", diff --git a/src/renderer/src/components/Popups/agent/AgentModal.tsx b/src/renderer/src/components/Popups/agent/AgentModal.tsx index 8dec33d0ee..9358167778 100644 --- a/src/renderer/src/components/Popups/agent/AgentModal.tsx +++ b/src/renderer/src/components/Popups/agent/AgentModal.tsx @@ -1,6 +1,5 @@ import { Button, - Chip, cn, Form, Input, @@ -11,7 +10,6 @@ import { ModalHeader, Select, SelectedItemProps, - SelectedItems, SelectItem, Textarea, useDisclosure @@ -20,6 +18,7 @@ import { loggerService } from '@logger' import type { Selection } from '@react-types/shared' import ClaudeIcon from '@renderer/assets/images/models/claude.png' import { getModelLogo } from '@renderer/config/models' +import { permissionModeCards } from '@renderer/constants/permissionModes' import { useAgents } from '@renderer/hooks/agents/useAgents' import { useApiModels } from '@renderer/hooks/agents/useModels' import { useUpdateAgent } from '@renderer/hooks/agents/useUpdateAgent' @@ -30,6 +29,7 @@ import { AgentType, BaseAgentForm, isAgentType, + PermissionMode, Tool, UpdateAgentForm } from '@renderer/types' @@ -110,25 +110,41 @@ export const AgentModal: React.FC = ({ agent, trigger, isOpen: _isOpen, o } }, [agent, isOpen]) - const availableTools = useMemo(() => agent?.tools ?? [], [agent?.tools]) - const selectedToolKeys = useMemo(() => new Set(form.allowed_tools), [form.allowed_tools]) + const selectedPermissionMode = form.configuration?.permission_mode ?? 'default' - useEffect(() => { - if (!availableTools.length) { + const onPermissionModeChange = useCallback((keys: Selection) => { + if (keys === 'all') { + return + } + + const [first] = Array.from(keys) + if (!first) { return } setForm((prev) => { - const validTools = prev.allowed_tools.filter((id) => availableTools.some((tool) => tool.id === id)) - if (validTools.length === prev.allowed_tools.length) { + const parsedConfiguration = AgentConfigurationSchema.parse(prev.configuration ?? {}) + const nextMode = first as PermissionMode + + if (parsedConfiguration.permission_mode === nextMode) { + if (!prev.configuration) { + return { + ...prev, + configuration: parsedConfiguration + } + } return prev } + return { ...prev, - allowed_tools: validTools + configuration: { + ...parsedConfiguration, + permission_mode: nextMode + } } }) - }, [availableTools]) + }, []) // add supported agents type here. const agentConfig = useMemo( @@ -197,45 +213,6 @@ export const AgentModal: React.FC = ({ agent, trigger, isOpen: _isOpen, o })) }, []) - const onAllowedToolsChange = useCallback( - (keys: Selection) => { - setForm((prev) => { - if (keys === 'all') { - return { - ...prev, - allowed_tools: availableTools.map((tool) => tool.id) - } - } - - const next = Array.from(keys).map(String) - const filtered = availableTools.length - ? next.filter((id) => availableTools.some((tool) => tool.id === id)) - : next - - return { - ...prev, - allowed_tools: filtered - } - }) - }, - [availableTools] - ) - - const renderSelectedTools = useCallback((items: SelectedItems) => { - if (!items.length) { - return null - } - return ( -
- {items.map((item) => ( - - {item.data?.name ?? item.textValue ?? item.key} - - ))} -
- ) - }, []) - const addAccessiblePath = useCallback(async () => { try { const selected = await window.api.file.selectFolder() @@ -433,25 +410,34 @@ export const AgentModal: React.FC = ({ agent, trigger, isOpen: _isOpen, o )}