import { useEffect, useRef, useState } from 'react'; import { Form, Button } from 'antd'; import { useNavigate, useParams } from 'react-router-dom'; import { App as AntApp } from 'antd'; import { FileTextOutlined, SaveOutlined } from '@ant-design/icons'; import SkillEditor from '../../components/SkillEditor'; import ExternalToolEditor from '../../components/ExternalToolEditor'; import { useAgentEditor } from './hooks/useAgentEditor'; import { useIsMobile } from '../../hooks/useIsMobile'; import Header from './components/Header'; import PromptEditor from './components/PromptEditor'; import CapabilitySettings from './components/CapabilitySettings'; import PreviewPane from './components/PreviewPane'; import InitModal from './components/InitModal'; import AvatarSelector from './components/AvatarSelector'; import './AgentEditor.css'; import './styles/agent-editor-capability.css'; import './styles/agent-editor-panels.css'; import './styles/agent-editor-modal.css'; import './styles/agent-editor-h5.css'; export default function AgentEditor() { const { id } = useParams(); const isNew = !id; const navigate = useNavigate(); const { message } = AntApp.useApp(); const [form] = Form.useForm(); const [externalToolEditorOpen, setExternalToolEditorOpen] = useState(false); const [editingPluginId, setEditingPluginId] = useState(null); const { agent, saving, teams, models, autoSaveStatus, initModalOpen, setInitModalOpen, selectedAvatar, setSelectedAvatar, avatarSelectorOpen, setAvatarSelectorOpen, avatarUploading, agentName, setAgentName, skillEditorOpen, setSkillEditorOpen, editingSkillId, setEditingSkillId, refresh, handleInitConfirm, handleSave, beforeUploadKnowledge, beforeUploadInitAvatar, beforeUploadEditAvatar, handleAvatarSelect, handleDeleteKnowledge, handleDeleteSkill, handleDeletePlugin, liveAgent, currentName, markDirty, } = useAgentEditor({ id, isNew, form, message, navigate }); const isMobile = useIsMobile(); return ( <>
{ setEditingSkillId(null); setSkillEditorOpen(true); }} onEditSkill={(skillId) => { setEditingSkillId(skillId); setSkillEditorOpen(true); }} onDeleteSkill={handleDeleteSkill} onCreateExternalTool={() => { setEditingPluginId(null); setExternalToolEditorOpen(true); }} onEditExternalTool={(pluginId) => { setEditingPluginId(pluginId); setExternalToolEditorOpen(true); }} onDeleteExternalTool={handleDeletePlugin} markDirty={markDirty} isMobile={isMobile} />
{isMobile && (
{autoSaveStatus === 'saving' ? '正在保存...' : autoSaveStatus === 'dirty' ? '有未保存更改' : autoSaveStatus === 'error' ? '保存失败' : '已保存'}
)} {!isNew && ( <> { setSkillEditorOpen(false); setEditingSkillId(null); }} onSaved={refresh} /> plugin.id === editingPluginId)} onClose={() => { setExternalToolEditorOpen(false); setEditingPluginId(null); }} onSaved={refresh} /> )}
navigate('/agents')} onConfirm={handleInitConfirm} avatarUploading={avatarUploading} selectedAvatar={selectedAvatar} setSelectedAvatar={setSelectedAvatar} agentName={agentName} setAgentName={setAgentName} saving={saving} beforeUploadInitAvatar={beforeUploadInitAvatar} /> setAvatarSelectorOpen(false)} agent={agent} avatarUploading={avatarUploading} beforeUploadEditAvatar={beforeUploadEditAvatar} onAvatarSelect={handleAvatarSelect} /> ); }