import { useRef } from 'react'; import { KeyRoundIcon } from 'lucide-react'; import { AuthType, AgentCapabilities } from 'librechat-data-provider'; import { useFormContext, Controller, useWatch } from 'react-hook-form'; import { Checkbox, HoverCard, CircleHelpIcon, HoverCardContent, HoverCardPortal, HoverCardTrigger, } from '@librechat/client'; import type { AgentForm } from '~/common'; import { useLocalize, useCodeApiKeyForm } from '~/hooks'; import ApiKeyDialog from './ApiKeyDialog'; import { ESide } from '~/common'; export default function Action({ authType = '', isToolAuthenticated = false }) { const localize = useLocalize(); const methods = useFormContext(); const { control, setValue } = methods; const apiKeyButtonRef = useRef(null); const { onSubmit, isDialogOpen, setIsDialogOpen, handleRevokeApiKey, methods: keyFormMethods, } = useCodeApiKeyForm({ onSubmit: () => { setValue(AgentCapabilities.execute_code, true, { shouldDirty: true }); setTimeout(() => apiKeyButtonRef.current?.focus(), 100); }, onRevoke: () => { setValue(AgentCapabilities.execute_code, false, { shouldDirty: true }); setTimeout(() => apiKeyButtonRef.current?.focus(), 100); }, }); const runCodeIsEnabled = useWatch({ control, name: AgentCapabilities.execute_code }); const isUserProvided = authType === AuthType.USER_PROVIDED; const handleCheckboxChange = (checked: boolean) => { if (isToolAuthenticated) { setValue(AgentCapabilities.execute_code, checked, { shouldDirty: true }); } else if (runCodeIsEnabled) { setValue(AgentCapabilities.execute_code, false, { shouldDirty: true }); } else { setIsDialogOpen(true); } }; return ( <>
( )} />
{isUserProvided && ( )}

{localize('com_agents_code_interpreter')}

); }