feat(agent): 移除control_node实例化,新增系统节点命名与人设管理前端
当前阶段只保留regulatory+consciousness两个系统节点,control_node代码保留但不再实例化。 系统节点新增display_name字段支持自定义显示名称,前端新增人设管理Tab支持模板CRUD。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -51,15 +51,17 @@ export function WorkerIndividualSettings() {
|
||||
const providersList = Object.values(provRes.data.provider_list || {}) as Provider[];
|
||||
const defaultProvider = providersList.length > 0 ? providersList[0].provider_title : '';
|
||||
const sysNodesData = sysRes.data.system_nodes || [];
|
||||
const defaultSysNodes = ['regulatory_node', 'consciousness_node', 'control_node'];
|
||||
const defaultSysNodes = ['regulatory_node', 'consciousness_node'];
|
||||
|
||||
setSystemNodes(defaultSysNodes.map(nodeName => {
|
||||
const found = sysNodesData.find((n: any) => n.node_name === nodeName);
|
||||
return {
|
||||
agent_id: nodeName, agent_name: nodeName, agent_type: 'System Node',
|
||||
display_name: found?.display_name || '',
|
||||
provider_title: found?.provider_title || defaultProvider,
|
||||
model_id: found?.model_id || '',
|
||||
tools: found?.tools ? JSON.stringify(found.tools) : '[]',
|
||||
custom_system_prompt: found?.custom_system_prompt || '',
|
||||
is_system: true
|
||||
};
|
||||
}));
|
||||
@@ -109,7 +111,9 @@ export function WorkerIndividualSettings() {
|
||||
individual_name: editData.agent_name,
|
||||
provider_title: editData.provider_title,
|
||||
model_id: editData.model_id,
|
||||
tools: JSON.parse(editData.tools || '[]')
|
||||
tools: JSON.parse(editData.tools || '[]'),
|
||||
custom_system_prompt: (editData as any).custom_system_prompt || null,
|
||||
display_name: (editData as any).display_name || null
|
||||
});
|
||||
} else {
|
||||
const payload = {
|
||||
@@ -184,7 +188,10 @@ export function WorkerIndividualSettings() {
|
||||
<div className="w-7 h-7 rounded-lg bg-accent-light flex items-center justify-center">
|
||||
<Bot size={14} className="text-accent" />
|
||||
</div>
|
||||
<span className="font-medium text-text-primary text-xs">{w.agent_name}</span>
|
||||
<div className="flex flex-col">
|
||||
<span className="font-medium text-text-primary text-xs">{w.display_name || w.agent_name}</span>
|
||||
{w.display_name && <span className="text-[10px] text-text-muted">{w.agent_name}</span>}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td className="px-5 py-3">{getTypeBadge(w.agent_type, true)}</td>
|
||||
@@ -228,9 +235,13 @@ export function WorkerIndividualSettings() {
|
||||
<form onSubmit={handleModalSave} className="p-5 space-y-4">
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label className="block text-xs font-semibold text-text-secondary mb-1.5 uppercase tracking-wider">{t('agent.name')}</label>
|
||||
<input type="text" required value={editData.agent_name || ''} onChange={(e) => setEditData({...editData, agent_name: e.target.value})}
|
||||
className="w-full px-3 py-2 bg-bg-input border border-border-primary rounded-xl text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent/20 focus:border-accent" disabled={(editData as any).is_system} />
|
||||
<label className="block text-xs font-semibold text-text-secondary mb-1.5 uppercase tracking-wider">{(editData as any).is_system ? t('agent.displayName') : t('agent.name')}</label>
|
||||
<input type="text" required={!(editData as any).is_system} value={(editData as any).is_system ? ((editData as any).display_name || '') : (editData.agent_name || '')} onChange={(e) => {
|
||||
if ((editData as any).is_system) setEditData({...editData, display_name: e.target.value} as any);
|
||||
else setEditData({...editData, agent_name: e.target.value});
|
||||
}}
|
||||
placeholder={(editData as any).is_system ? editData.agent_name : ''}
|
||||
className="w-full px-3 py-2 bg-bg-input border border-border-primary rounded-xl text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-accent/20 focus:border-accent" />
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-xs font-semibold text-text-secondary mb-1.5 uppercase tracking-wider">{t('agent.type')}</label>
|
||||
@@ -267,6 +278,14 @@ export function WorkerIndividualSettings() {
|
||||
})()}
|
||||
</div>
|
||||
</div>
|
||||
{(editData as any).is_system && (
|
||||
<div>
|
||||
<label className="block text-xs font-semibold text-text-secondary mb-1.5 uppercase tracking-wider">{t('agent.customPrompt')}</label>
|
||||
<textarea value={(editData as any).custom_system_prompt || ''} onChange={(e) => setEditData({...editData, custom_system_prompt: e.target.value} as any)} rows={3}
|
||||
placeholder={t('agent.customPromptPlaceholder')}
|
||||
className="w-full px-3 py-2 bg-bg-input border border-border-primary rounded-xl text-sm text-text-primary font-mono focus:outline-none focus:ring-2 focus:ring-accent/20 focus:border-accent" />
|
||||
</div>
|
||||
)}
|
||||
{!(editData as any).is_system && (
|
||||
<>
|
||||
<div>
|
||||
|
||||
Reference in New Issue
Block a user