refactor(agent): 将 Summary Model 改造为内置 Sub Agent

- 扩展 AgentMode 类型添加 'internal' 模式
- 新增 summary agent preset (claude-3-5-haiku)
- AgentRegistry 添加 getInternal/listInternalAgents 方法
- CompressionManager 添加 setSummaryModelFromAgentConfig
- Agent 构造函数改用 Registry 配置初始化 Summary 模型
- 清理旧的 SummaryConfig 配置系统
- UI AgentsPanel 分离显示 System/Preset/Custom agents
- UI AgentEditor 为 internal agent 显示简化编辑界面
This commit is contained in:
2025-12-14 22:12:36 +08:00
parent e97daaa0eb
commit c307cd3a7c
20 changed files with 339 additions and 594 deletions
@@ -14,7 +14,7 @@ import {
describe('Agent Presets - 预设 Agent', () => {
describe('presetAgents 集合', () => {
it('包含所有预设 Agent', () => {
expect(Object.keys(presetAgents)).toHaveLength(6);
expect(Object.keys(presetAgents)).toHaveLength(7); // includes summary agent
});
it('包含 general Agent', () => {
@@ -67,7 +67,7 @@ describe('Agent Presets - 预设 Agent', () => {
it('返回正确数量', () => {
const names = getPresetAgentNames();
expect(names).toHaveLength(6);
expect(names).toHaveLength(7); // general, explore, code-review, frontend, backend, vision, summary
});
});
@@ -192,9 +192,9 @@ describe('Agent Presets - 预设 Agent', () => {
});
});
it('mode 值是 subagent 或 primary', () => {
it('mode 值是有效的 AgentMode', () => {
Object.entries(presetAgents).forEach(([name, agent]) => {
expect(['subagent', 'primary'], `${name} mode 无效`).toContain(agent.mode);
expect(['subagent', 'primary', 'all', 'internal'], `${name} mode 无效`).toContain(agent.mode);
});
});
});
@@ -38,6 +38,7 @@ vi.mock('ai', () => ({
vi.mock('../../../src/agent/index.js', () => ({
agentRegistry: {
get: vi.fn(),
getInternal: vi.fn(() => null), // Returns null by default - no summary agent configured
},
AgentExecutor: vi.fn().mockImplementation(() => ({
execute: vi.fn().mockResolvedValue({