# 多智能体模式实现计划

> 实现顺序不作为严格 phase，而是按依赖关系自然推进。  
> 核心原则：完全隔离、复制改造、底层复用。

---

## 1. 目录与文件规划

### 1.1 后端代码

```
modules/multi_agent/
├── __init__.py
├── terminal.py                  # MultiAgentTerminal
├── manager.py                   # 多智能体会话与全局状态管理
├── agent_store.py               # 角色配置加载与保存
├── conversation_store.py        # 多智能体会话存储
├── message_router.py            # 消息路由与待处理队列
├── sub_agent_task.py            # MultiAgentSubAgentTask
├── sub_agent_manager.py         # MultiAgentSubAgentManager
├── prompts.py                   # prompt 模板
└── tools/
    ├── __init__.py
    ├── master_tools.py          # Team Leader 工具定义
    ├── agent_tools.py           # 子智能体工具定义
    └── tool_handlers.py         # 工具处理函数
```

### 1.2 前端代码

```
static/src/views/MultiAgentView.vue
static/src/components/multi-agent/
├── ChatPanel.vue
├── AgentList.vue
├── MessageBubble.vue
└── CreateAgentDialog.vue
```

### 1.3 设计文档

```
docs/multi_agent_mode/
├── 01_overview.md
├── 02_message_protocol.md
├── 03_tool_definitions.md
├── 04_message_routing.md
├── 05_data_model.md
├── 06_implementation_plan.md
└── 07_existing_code_analysis.md
```

### 1.4 数据目录

```
~/.astrion/astrion/host/mutiagents/
├── agents/
├── conversations/
└── state.json
```

---

## 2. 实现步骤

### Step 1：基础设施

1. 创建 `modules/multi_agent/` 包
2. 创建 `docs/multi_agent_mode/` 目录（已完成）
3. 创建 `~/.astrion/astrion/host/mutiagents/` 数据目录
4. 预置 4 个角色文件到 `agents/`

### Step 2：角色配置

1. 实现 `agent_store.py`
   - 加载角色 Frontmatter
   - 保存自定义角色
   - 列出所有角色
   - 构建完整 prompt（基础 prompt + 自定义 prompt）

2. 预置角色：
   - `ui-operator`
   - `full-stack-engineer`
   - `code-reviewer`
   - `researcher`

### Step 3：子智能体改造

1. 实现 `MultiAgentSubAgentTask`（继承 `SubAgentTask`）
   - 覆盖 `_run_loop`，使用多智能体工具列表
   - 覆盖系统提示词生成
   - 捕获 assistant 输出并转发到主智能体
   - 维护 `pending_messages` 队列
   - 维护 `pending_tool_calls` 等待列表
   - 支持 inline 消息注入
   - 支持自然结束（不依赖 finish_task）

2. 实现 `MultiAgentSubAgentManager`（继承 `SubAgentManager`）
   - 创建 `MultiAgentSubAgentTask` 实例
   - 管理所有子智能体状态
   - 提供查询活跃子智能体接口
   - 提供终止实例接口

### Step 4：消息路由

1. 实现 `message_router.py`
   - `route_message(target_agent_id, message)`
   - 根据目标状态选择 inline / 工具结果返回 / 触发新任务
   - 处理边界情况（最后一轮输出时收到消息）
   - 批量消费待处理消息

2. 实现消息格式化函数
   - `format_task_message(display_name, content)`
   - `format_output_message(display_name, content)`
   - `format_ask_message(display_name, content, message_id)`
   - `format_message_message(display_name, content, message_id)`
   - `format_answer_message(display_name, content, message_id)`

### Step 5：主智能体 Terminal

1. 实现 `MultiAgentTerminal`（基于 `MainTerminal` 复制）
   - 移除旧版子智能体工具
   - 添加多智能体专用工具
   - 使用 `MultiAgentSubAgentManager`
   - 使用 `MultiAgentConversationStore`
   - 实现 `answer_sub_agent_question` 等工具处理

2. 实现工具处理函数
   - `create_sub_agent`
   - `terminate_sub_agent`
   - `send_message_to_sub_agent`
   - `ask_sub_agent`
   - `answer_sub_agent_question`
   - `list_active_sub_agents`
   - `get_sub_agent_status`
   - `create_custom_agent`
   - `list_agents`

### Step 6：会话存储

1. 实现 `MultiAgentConversationStore`
   - 复制 `ConversationManager` 的 CRUD 逻辑
   - 数据目录指向 `~/.astrion/astrion/host/mutiagents/conversations/`
   - 保存主智能体对话
   - 保存每个子智能体对话

### Step 7：前端页面

1. 创建 `MultiAgentView.vue`
   - 类似现有 ChatView，但专门用于多智能体模式
   - 支持消息气泡按角色/类型渲染
   - 支持显示活跃子智能体列表
   - 支持创建子智能体

2. 创建组件
   - `MessageBubble.vue`：渲染统一消息格式
   - `AgentList.vue`：显示子智能体状态
   - `CreateAgentDialog.vue`：创建自定义角色

3. 添加路由 `/multiagent/new`

### Step 8：入口

1. 登录页添加「多智能体模式 beta」按钮
2. 点击后跳转到 `/multiagent/new`
3. 初始化 `MultiAgentTerminal`

### Step 9：联调测试

1. 测试创建子智能体
2. 测试子智能体自然输出转发
3. 测试 `send_message_to_sub_agent` 运行中引导
4. 测试 `ask_master` / `answer_sub_agent_question`
5. 测试 `ask_other_agent` / `answer_other_agent`
6. 测试子智能体对话持久化
7. 测试角色创建与保存

---

## 3. 代码隔离清单

| 现有文件 | 处理方式 |
|---------|---------|
| `core/main_terminal.py` | 复制为 `modules/multi_agent/terminal.py` |
| `core/main_terminal_parts/tools_definition/agent_tools.py` | 复制改造为 `modules/multi_agent/tools/master_tools.py` |
| `core/main_terminal_parts/tools_execution.py` | 复制需要的部分到 `modules/multi_agent/terminal.py` |
| `modules/sub_agent/manager.py` | 继承创建 `modules/multi_agent/sub_agent_manager.py` |
| `modules/sub_agent/task.py` | 继承创建 `modules/multi_agent/sub_agent_task.py` |
| `modules/sub_agent/toolkit.py` | 复制改造为 `modules/multi_agent/tools/agent_tools.py` |
| `modules/sub_agent/prompts.py` | 复制改造为 `modules/multi_agent/prompts.py` |
| `utils/conversation_manager/*.py` | 复制改造为 `modules/multi_agent/conversation_store.py` |
| `server/chat_flow.py` | 参考实现，为 `/multiagent` 创建新的 API 入口 |
| `server/chat_flow_task_support.py` | 参考 `inject_runtime_user_message` 实现多智能体消息注入 |
| `static/src/views/ChatView.vue` | 复制改造为 `static/src/views/MultiAgentView.vue` |

---

## 4. 复用点清单

| 能力 | 复用方式 |
|------|---------|
| 模型调用 | `DeepSeekClient` |
| 工具执行底层 | `WebTerminal.handle_tool_call` 的执行链路 |
| 文件/终端/搜索等工具 | 现有工具函数 |
| 沙箱/权限 | `evaluate_tool_permission` |
| 对话存储格式 | `ConversationManager` 的 JSON 结构 |
| 原子写入 | `_atomic_write_json` 模式 |
| 前端组件 | 复制 ChatView 改造 |

---

## 5. 风险与应对

| 风险 | 应对 |
|------|------|
| 子智能体消息丢失 | 待处理队列持久化 + 唯一 id + 消费确认 |
| 子智能体状态错乱 | 状态机清晰 + reconcile 机制 |
| 主智能体上下文爆炸 | 子智能体只汇报关键步骤，详细内容放文件 |
| 多实例并发冲突 | 每个实例独立上下文，独立存储 |
| 与现有代码耦合 | 严格隔离，复制改造 |

---

## 6. 验收标准

1. 登录页有「多智能体模式 beta」按钮
2. 点击后进入 `/multiagent/new`
3. 可以创建至少 2 个不同角色的子智能体
4. 子智能体输出自动显示在主对话中
5. Team Leader 可以运行中引导子智能体
6. 子智能体可以向 Team Leader 提问并收到回答
7. 子智能体可以向其他子智能体提问并收到回答
8. 子智能体对话完整保存，刷新后可恢复
9. 现有单智能体模式不受影响
