---
name: sub_agent_python_rewrite
description: 当需要了解子智能体当前实现、修改子智能体代码、或排查子智能体相关问题时，应该索引本记忆
---

# 子智能体现状（Python 主进程内协程）

## 核心变更

子智能体已经从 **Node.js 子进程**（`easyagent/src/batch/index.js`）彻底改为 **Python 主进程内协程**。

## 代码位置

所有子智能体专用代码集中在 `modules/sub_agent/` 包内：

```
modules/sub_agent/
├── __init__.py      # 导出 SubAgentManager
├── manager.py       # 任务调度、创建、终止、状态查询
├── task.py          # LLM 循环、模型调用、工具执行驱动
├── toolkit.py       # 8 个工具定义、工具结果格式化、模型配置解析
├── prompts.py       # 用户消息和系统提示词构建
├── tools.py         # search_workspace、read_mediafile 本地实现
├── state.py         # 状态加载、保存、刷新、超时、僵尸清理 Mixin
├── stats.py         # 统计摘要与结果消息组装 Mixin
└── creation.py      # 创建参数校验、任务 ID 生成、交付目录解析 Mixin
```

## 执行机制

- 子智能体作为 `asyncio.Task` 在独立的后台事件循环线程中运行（避免与 Flask-SocketIO threading 模式冲突）。
- 所有实际工具调用都通过 `WebTerminal.handle_tool_call()` 执行，因此**自然复用主进程的宿主机沙箱 / Docker 容器链路**。
- 子智能体自身不再被整体沙箱限制网络（因为它需要调用模型 API），网络调用走 `utils.api_client.DeepSeekClient`。
- 权限固定为 `unrestricted`，但工具执行本身受主进程沙箱/容器/审批链路约束。

## 模型配置

- 子智能体模型独立配置，不跟主模型合并。
- 配置文件：`~/.astrion/astrion/config/sub_agent_models.json`（由 `SUB_AGENT_MODELS_CONFIG_FILE` 指定）。
- 默认读取该文件中的 `default_model` 和 `models` 列表。

## 可用工具（8 个）

1. `read_file` - 读取/搜索/抽取文件
2. `write_file` - 创建或覆盖文件（支持 append）
3. `edit_file` - 精确字符串替换，支持 `replacements` 数组和 `replace_all`
4. `run_command` - 执行命令（走主进程沙箱/容器）
5. `web_search` - 网络搜索
6. `extract_webpage` - 网页内容提取
7. `search_workspace` - 工作区搜索
8. `read_mediafile` - 读取图片/视频文件（base64 返回）

## easyagent/ 目录状态

- `easyagent/` 是旧的 Node.js 子智能体实现，目前**暂时保留但已不再使用**。
- 主项目 Python 代码没有任何地方引用 `easyagent/`。
- 是否删除待后续决策。

## 入口点

- 主项目创建子智能体：`modules.sub_agent.manager.SubAgentManager.create_sub_agent()`
- `core/main_terminal.py` 中通过 `SubAgentManager.set_terminal(self)` 注入 WebTerminal 引用。

## 回归测试

- 测试脚本：`test/test_sub_agent_regression.py`
- 覆盖：write_file、edit_file（多处替换 + replace_all）、search_workspace、read_mediafile、terminate

## 已删除/清理的内容

- `config/sub_agent.py` 中已删除 `SUB_AGENT_HOST_NETWORK_PERMISSION` 临时配置。
- `easyagent/src/batch/index.js` 已删除（旧子进程入口）。
- `AGENTS.md` 和 `CLAUDE.md` 中关于子智能体的描述已更新为当前实现。
