From e929d7e34915595ca9ae30c96034f36cc5a4a6cb Mon Sep 17 00:00:00 2001 From: James Brunton Date: Fri, 5 Sep 2025 16:05:18 +0100 Subject: [PATCH] Initial working version of automation support --- .../tools/automate/AutomationCreation.tsx | 4 +- .../automate/AutomationCreationEnhanced.tsx | 244 ++++++++++++++++++ .../automate/DefinitionBasedToolConfig.tsx | 62 +++++ .../EnhancedToolConfigurationModal.tsx | 176 +++++++++++++ frontend/src/data/toolsTaxonomy.ts | 3 + .../src/data/useTranslatedToolRegistry.tsx | 61 ++--- .../tools/automate/useAutomateOperation.ts | 7 +- .../tools/automate/useAutomationExecutor.ts | 79 ++++++ .../automate/useEnhancedAutomationForm.ts | 159 ++++++++++++ frontend/src/utils/automationExecutor.ts | 93 ++++++- .../src/utils/automationExecutorEnhanced.ts | 151 +++++++++++ 11 files changed, 990 insertions(+), 49 deletions(-) create mode 100644 frontend/src/components/tools/automate/AutomationCreationEnhanced.tsx create mode 100644 frontend/src/components/tools/automate/DefinitionBasedToolConfig.tsx create mode 100644 frontend/src/components/tools/automate/EnhancedToolConfigurationModal.tsx create mode 100644 frontend/src/hooks/tools/automate/useAutomationExecutor.ts create mode 100644 frontend/src/hooks/tools/automate/useEnhancedAutomationForm.ts create mode 100644 frontend/src/utils/automationExecutorEnhanced.ts diff --git a/frontend/src/components/tools/automate/AutomationCreation.tsx b/frontend/src/components/tools/automate/AutomationCreation.tsx index 5dfdc0468..ab936289e 100644 --- a/frontend/src/components/tools/automate/AutomationCreation.tsx +++ b/frontend/src/components/tools/automate/AutomationCreation.tsx @@ -12,7 +12,7 @@ import { } from '@mantine/core'; import CheckIcon from '@mui/icons-material/Check'; import { ToolRegistry } from '../../../data/toolsTaxonomy'; -import ToolConfigurationModal from './ToolConfigurationModal'; +import EnhancedToolConfigurationModal from './EnhancedToolConfigurationModal'; import ToolList from './ToolList'; import IconSelector from './IconSelector'; import { AutomationConfig, AutomationMode, AutomationTool } from '../../../types/automation'; @@ -216,7 +216,7 @@ export default function AutomationCreation({ mode, existingAutomation, onBack, o {/* Tool Configuration Modal */} {currentConfigTool && ( - void; + onComplete: (automation: AutomationConfig) => void; + toolRegistry: ToolRegistry; +} + +/** + * Enhanced automation creation component that works with both definition-based and legacy tools + */ +export default function AutomationCreationEnhanced({ + mode, + existingAutomation, + onBack, + onComplete, + toolRegistry +}: AutomationCreationEnhancedProps) { + const { t } = useTranslation(); + + const { + automationName, + setAutomationName, + automationDescription, + setAutomationDescription, + automationIcon, + setAutomationIcon, + selectedTools, + addTool, + removeTool, + updateTool, + hasUnsavedChanges, + canSaveAutomation, + getToolName, + getAutomatableTools, + isToolAutomatable + } = useEnhancedAutomationForm({ mode, existingAutomation, toolRegistry }); + + const [configModalOpen, setConfigModalOpen] = useState(false); + const [configTool, setConfigTool] = useState(null); + + const automatableTools = getAutomatableTools(); + const definitionBasedCount = automatableTools.filter(tool => tool.hasDefinition).length; + const legacyCount = automatableTools.filter(tool => tool.hasLegacySettings).length; + + const handleToolConfig = (tool: AutomationTool) => { + setConfigTool(tool); + setConfigModalOpen(true); + }; + + const handleConfigSave = (parameters: unknown) => { + if (configTool) { + updateTool(configTool.id, { + parameters: parameters as Record, + configured: true + }); + } + setConfigModalOpen(false); + setConfigTool(null); + }; + + const handleConfigCancel = () => { + setConfigModalOpen(false); + setConfigTool(null); + }; + + const handleSave = () => { + const automation: AutomationConfig = { + id: existingAutomation?.id || `automation-${Date.now()}`, + name: automationName, + description: automationDescription, + icon: automationIcon, + operations: selectedTools.map(tool => ({ + operation: tool.operation, + parameters: tool.parameters + })), + createdAt: existingAutomation?.createdAt || new Date().toISOString(), + updatedAt: new Date().toISOString() + }; + onComplete(automation); + }; + + return ( + <> + + {/* Info about tool types */} + } color="blue"> + + {t('automate.enhanced.info', + 'Enhanced automation now supports {{definitionCount}} definition-based tools and {{legacyCount}} legacy tools.', + { definitionCount: definitionBasedCount, legacyCount: legacyCount } + )} + + + + {/* Automation Details */} + + + {mode === AutomationMode.EDIT + ? t('automate.edit.title', 'Edit Automation') + : t('automate.create.title', 'Create New Automation') + } + + + + setAutomationName(e.target.value)} + required + /> + + + +