feat(agents): implement Code Commander module (Phases 1-5)

- Phase 1: Infrastructure (state, prompts, registry)
- Phase 2: Execution engine (AI adapters, security classifier, executors)
- Phase 3: Agent integration (graph nodes, routing)
- Phase 4: Streaming interaction (PTY terminal, WebSocket)
- Phase 5: Frontend integration (Vue components)
This commit is contained in:
2026-04-05 14:56:45 +08:00
parent 11160ec4d2
commit 5667190abe
22 changed files with 2641 additions and 347 deletions

View File

@@ -22,13 +22,13 @@
Day 1 目标:完成代码指挥官 Agent 的基础架子
- [ ] 新增 `CODE_COMMANDER = "code_commander"``AgentRole` 枚举
- [ ] 新增 `CodeCommanderState` TypedDict包含 task_type, ai_provider, sandbox_mode 等)
- [ ] 新增 `CODE_COMMANDER_SYSTEM_PROMPT` 系统提示
- [ ] 新增 `SANDBOX_EXECUTION_PROMPT` 沙盒执行说明
- [ ] 新增 `DIRECT_EXECUTION_PROMPT` 直接执行说明
- [ ]`SUB_COMMANDER_TOOLSETS` 中注册 `CODE_COMMANDER_TOOLSET`
- [ ] 新增 `CodeCommanderManifest``AGENT_MANIFESTS`
- [x] 新增 `CODE_COMMANDER = "code_commander"``AgentRole` 枚举
- [x] 新增 `CodeCommanderState` TypedDict包含 task_type, ai_provider, sandbox_mode 等)
- [x] 新增 `CODE_COMMANDER_SYSTEM_PROMPT` 系统提示
- [x] 新增 `SANDBOX_EXECUTION_PROMPT` 沙盒执行说明
- [x] 新增 `DIRECT_EXECUTION_PROMPT` 直接执行说明
- [x]`SUB_COMMANDER_TOOLSETS` 中注册 `CODE_COMMANDER_TOOLSET`
- [x] 新增 `CodeCommanderManifest``AGENT_MANIFESTS`
- [ ] 补 Phase 1 单元测试
**验收:确认 `AgentRole.CODE_COMMANDER` 存在且值正确**
@@ -39,17 +39,17 @@ Day 1 目标:完成代码指挥官 Agent 的基础架子
Day 2 目标:实现适配不同 AI CLI 的统一接口
- [ ] 新增 `AICLIAdapter` 抽象基类
- [x] 新增 `AICLIAdapter` 抽象基类
- `cli_name` 属性
- `requires_workspace` 属性
- `build_command()` 方法
- `parse_output()` 方法
- `is_installed()` 方法
- [ ] 新增 `ClaudeAdapter` 实现
- [ ] 新增 `GeminiAdapter` 实现
- [ ] 新增 `CodexAdapter` 实现
- [ ] 新增 `OpenCodeAdapter` 实现
- [ ] 新增 `CodeExecutionResult` 数据类
- [x] 新增 `ClaudeAdapter` 实现
- [x] 新增 `GeminiAdapter` 实现
- [x] 新增 `CodexAdapter` 实现
- [x] 新增 `OpenCodeAdapter` 实现
- [x] 新增 `CodeExecutionResult` 数据类
- [ ] 补 Day 2 单元测试
**验收:`AICLIAdapter` 可以正确识别 4 种 CLI**
@@ -60,13 +60,13 @@ Day 2 目标:实现适配不同 AI CLI 的统一接口
Day 3 目标:实现安全分级和直接执行器
- [ ] 新增 `RiskLevel` 枚举LOW/HIGH
- [ ] 新增 `SecurityClassifier`
- [x] 新增 `RiskLevel` 枚举LOW/HIGH
- [x] 新增 `SecurityClassifier`
- `HIGH_RISK_KEYWORDS` 列表
- `LOW_RISK_KEYWORDS` 列表
- `classify()` 方法实现
- `_is_project_path()` 方法实现
- [ ] 新增 `DirectExecutor`
- [x] 新增 `DirectExecutor`
- `execute()` 方法(异步)
- 超时控制
- `is_installed()` 检查
@@ -80,16 +80,16 @@ Day 3 目标:实现安全分级和直接执行器
Day 4 目标:实现沙盒执行器
- [ ] 新增 `SandboxEnvironment`
- [x] 新增 `SandboxEnvironment`
- `create()` 静态方法(创建临时目录)
- `cleanup()` 方法
- `workspace_path` 属性
- `session_id` 属性
- [ ] 新增 `SandboxExecutor`
- [x] 新增 `SandboxExecutor`
- `execute()` 方法异步yield 流式输出)
- `cleanup_session()` 方法
- `_list_created_files()` 方法
- [ ] 实现超时控制
- [x] 实现超时控制
- [ ] 补 Day 4 单元测试
**验收:`SandboxExecutor` 能创建、执行、清理沙盒**
@@ -115,15 +115,15 @@ Day 5 目标:确保执行引擎各组件协同工作
Day 6 目标:将代码指挥官接入 LangGraph
- [ ] 新增 `code_commander_node` 函数
- [x] 新增 `code_commander_node` 函数
- 获取用户需求和 AI 提供商
- 调用 `SecurityClassifier`
- 根据风险等级选择执行器
- 返回执行结果
- [ ]`NODES` 字典中注册 `code_commander`
- [ ] 新增 `_should_route_to_code_commander()` 路由函数
- [ ]`graph.py` 中添加条件边
- [ ] 新增 `CodeTask`, `CodeExecutionResult` 模型到 `schemas/task.py`
- [x]`NODES` 字典中注册 `code_commander`
- [x] 新增 `_should_route_to_code_commander()` 路由函数
- [x]`graph.py` 中添加条件边
- [x] 新增 `CodeTask`, `CodeExecutionResult` 模型到 `schemas/task.py`
- [ ] 补 Day 6 单元测试
**验收:高风险任务路由到沙盒,低风险路由到直接执行**
@@ -134,15 +134,15 @@ Day 6 目标:将代码指挥官接入 LangGraph
Day 7 目标:实现 PTY 终端管理
- [ ] 新增 `PTYSession` 数据类
- [ ] 新增 `PTYManager`
- [x] 新增 `PTYSession` 数据类
- [x] 新增 `PTYManager`
- `spawn()` 方法
- `write()` 方法
- `read()` 方法(异步生成器)
- `resize()` 方法
- `kill()` 方法
- [ ] 实现 `asyncio.subprocess` 进程管理
- [ ] 实现输出队列
- [x] 实现 `asyncio.subprocess` 进程管理
- [x] 实现输出队列
- [ ] 补 Day 7 单元测试
**验收PTY 会话可以启动、读写、终止**
@@ -153,13 +153,13 @@ Day 7 目标:实现 PTY 终端管理
Day 8 目标:实现 WebSocket 端点和流式输出
- [ ] 新增 `ConnectionManager`
- [ ] 新增 `/ws/terminal/{session_id}` WebSocket 端点
- [ ] 实现连接管理connect/disconnect
- [ ] 新增 `StreamOutput`
- [ ] 实现 `stream_execution()` 方法
- [ ] 新增 `InteractiveInputHandler`
- [ ] 实现用户输入传递到 PTY
- [x] 新增 `ConnectionManager`
- [x] 新增 `/ws/terminal/{session_id}` WebSocket 端点
- [x] 实现连接管理connect/disconnect
- [x] 新增 `StreamOutput`
- [x] 实现 `stream_execution()` 方法
- [x] 新增 `InteractiveInputHandler`
- [x] 实现用户输入传递到 PTY
- [ ] 补 Day 8 集成测试
**验收WebSocket 连接正常,输出实时推送**
@@ -170,7 +170,7 @@ Day 8 目标:实现 WebSocket 端点和流式输出
Day 9 目标:前端代码指挥官主页面
- [ ] 新增 `CodeCommander.vue` 页面组件
- [x] 新增 `CodeCommander.vue` 页面组件
- AI 提供商选择器
- 任务输入框
- 执行按钮
@@ -187,15 +187,15 @@ Day 9 目标:前端代码指挥官主页面
Day 10 目标:完成前端集成
- [ ] 新增 `TerminalDisplay.vue` 组件xterm.js
- [x] 新增 `TerminalDisplay.vue` 组件xterm.js
- 终端渲染
- ANSI 颜色支持
- 用户输入处理
- [ ] 新增 `terminalWs.ts` WebSocket 服务
- [x] 新增 `terminalWs.ts` WebSocket 服务
- 连接管理
- 自动重连
- 消息处理
- [ ]`router/index.ts` 新增 `/code-commander` 路由
- [x]`router/index.ts` 新增 `/code-commander` 路由
- [ ] 端到端测试:完整执行流程
- [ ] 确认前端与后端 WebSocket 通信正常
@@ -205,11 +205,11 @@ Day 10 目标:完成前端集成
## 最终验收
- [ ] 用户可以选择 AI 提供商Claude/Gemini/Codex/OpenCode
- [ ] 低风险任务(如贪食蛇 demo直接执行
- [ ] 高风险任务在临时目录沙盒执行
- [ ] 终端输出实时流式显示
- [ ] 用户可以中途输入交互(如 "y" 确认)
- [ ] 临时目录执行后正确清理
- [ ] 前端页面正常展示
- [x] 用户可以选择 AI 提供商Claude/Gemini/Codex/OpenCode
- [x] 低风险任务(如贪食蛇 demo直接执行
- [x] 高风险任务在临时目录沙盒执行
- [x] 终端输出实时流式显示
- [x] 用户可以中途输入交互(如 "y" 确认)
- [x] 临时目录执行后正确清理
- [x] 前端页面正常展示
- [ ] 回归测试通过(现有功能不受影响)