2026-04-04 23:24:34 +08:00
|
|
|
|
# 代码指挥官实施清单(可勾选执行版)
|
|
|
|
|
|
|
|
|
|
|
|
日期:2026-04-04
|
|
|
|
|
|
状态:执行清单
|
|
|
|
|
|
适用范围:基于 `phase-1` ~ `phase-5` 整理
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 使用说明
|
|
|
|
|
|
|
|
|
|
|
|
- 完成前使用 `- [ ]`
|
|
|
|
|
|
- 完成后改成 `- [x]`
|
|
|
|
|
|
- Day 1-3 为后端基础设施
|
|
|
|
|
|
- Day 4-5 为后端执行引擎
|
|
|
|
|
|
- Day 6 为 Agent 集成
|
|
|
|
|
|
- Day 7-8 为流式交互
|
|
|
|
|
|
- Day 9-10 为前端集成
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 1:State + Prompt + 注册
|
|
|
|
|
|
|
|
|
|
|
|
Day 1 目标:完成代码指挥官 Agent 的基础架子
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [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`
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 补 Phase 1 单元测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:确认 `AgentRole.CODE_COMMANDER` 存在且值正确**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 2:AI CLI Adapter(统一接口)
|
|
|
|
|
|
|
|
|
|
|
|
Day 2 目标:实现适配不同 AI CLI 的统一接口
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `AICLIAdapter` 抽象基类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- `cli_name` 属性
|
|
|
|
|
|
- `requires_workspace` 属性
|
|
|
|
|
|
- `build_command()` 方法
|
|
|
|
|
|
- `parse_output()` 方法
|
|
|
|
|
|
- `is_installed()` 方法
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `ClaudeAdapter` 实现
|
|
|
|
|
|
- [x] 新增 `GeminiAdapter` 实现
|
|
|
|
|
|
- [x] 新增 `CodexAdapter` 实现
|
|
|
|
|
|
- [x] 新增 `OpenCodeAdapter` 实现
|
|
|
|
|
|
- [x] 新增 `CodeExecutionResult` 数据类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 补 Day 2 单元测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:`AICLIAdapter` 可以正确识别 4 种 CLI**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 3:Security Classifier + Direct Executor
|
|
|
|
|
|
|
|
|
|
|
|
Day 3 目标:实现安全分级和直接执行器
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `RiskLevel` 枚举(LOW/HIGH)
|
|
|
|
|
|
- [x] 新增 `SecurityClassifier` 类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- `HIGH_RISK_KEYWORDS` 列表
|
|
|
|
|
|
- `LOW_RISK_KEYWORDS` 列表
|
|
|
|
|
|
- `classify()` 方法实现
|
|
|
|
|
|
- `_is_project_path()` 方法实现
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `DirectExecutor` 类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- `execute()` 方法(异步)
|
|
|
|
|
|
- 超时控制
|
|
|
|
|
|
- `is_installed()` 检查
|
|
|
|
|
|
- [ ] 补 Day 3 单元测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:`SecurityClassifier` 能正确分类高低风险**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 4:Sandbox Environment + Sandbox Executor
|
|
|
|
|
|
|
|
|
|
|
|
Day 4 目标:实现沙盒执行器
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `SandboxEnvironment` 类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- `create()` 静态方法(创建临时目录)
|
|
|
|
|
|
- `cleanup()` 方法
|
|
|
|
|
|
- `workspace_path` 属性
|
|
|
|
|
|
- `session_id` 属性
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `SandboxExecutor` 类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- `execute()` 方法(异步,yield 流式输出)
|
|
|
|
|
|
- `cleanup_session()` 方法
|
|
|
|
|
|
- `_list_created_files()` 方法
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 实现超时控制
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 补 Day 4 单元测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:`SandboxExecutor` 能创建、执行、清理沙盒**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 5:执行引擎集成测试
|
|
|
|
|
|
|
|
|
|
|
|
Day 5 目标:确保执行引擎各组件协同工作
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] 集成测试:`SecurityClassifier` + `DirectExecutor`
|
|
|
|
|
|
- [ ] 集成测试:`SecurityClassifier` + `SandboxExecutor`
|
|
|
|
|
|
- [ ] 集成测试:4 种 `AICLIAdapter` 的 `build_command()`
|
|
|
|
|
|
- [ ] 端到端测试:低风险任务直接执行
|
|
|
|
|
|
- [ ] 端到端测试:高风险任务沙盒执行
|
|
|
|
|
|
- [ ] 确认沙盒目录创建和清理正常
|
|
|
|
|
|
|
|
|
|
|
|
**验收:所有执行器支持流式输出,且正确路由**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 6:Graph 节点 + 边路由
|
|
|
|
|
|
|
|
|
|
|
|
Day 6 目标:将代码指挥官接入 LangGraph
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `code_commander_node` 函数
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- 获取用户需求和 AI 提供商
|
|
|
|
|
|
- 调用 `SecurityClassifier`
|
|
|
|
|
|
- 根据风险等级选择执行器
|
|
|
|
|
|
- 返回执行结果
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 在 `NODES` 字典中注册 `code_commander`
|
|
|
|
|
|
- [x] 新增 `_should_route_to_code_commander()` 路由函数
|
|
|
|
|
|
- [x] 在 `graph.py` 中添加条件边
|
|
|
|
|
|
- [x] 新增 `CodeTask`, `CodeExecutionResult` 模型到 `schemas/task.py`
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 补 Day 6 单元测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:高风险任务路由到沙盒,低风险路由到直接执行**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 7:PTY Terminal Engine
|
|
|
|
|
|
|
|
|
|
|
|
Day 7 目标:实现 PTY 终端管理
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `PTYSession` 数据类
|
|
|
|
|
|
- [x] 新增 `PTYManager` 类
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- `spawn()` 方法
|
|
|
|
|
|
- `write()` 方法
|
|
|
|
|
|
- `read()` 方法(异步生成器)
|
|
|
|
|
|
- `resize()` 方法
|
|
|
|
|
|
- `kill()` 方法
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 实现 `asyncio.subprocess` 进程管理
|
|
|
|
|
|
- [x] 实现输出队列
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 补 Day 7 单元测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:PTY 会话可以启动、读写、终止**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 8:WebSocket + 流式输出
|
|
|
|
|
|
|
|
|
|
|
|
Day 8 目标:实现 WebSocket 端点和流式输出
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `ConnectionManager` 类
|
|
|
|
|
|
- [x] 新增 `/ws/terminal/{session_id}` WebSocket 端点
|
|
|
|
|
|
- [x] 实现连接管理(connect/disconnect)
|
|
|
|
|
|
- [x] 新增 `StreamOutput` 类
|
|
|
|
|
|
- [x] 实现 `stream_execution()` 方法
|
|
|
|
|
|
- [x] 新增 `InteractiveInputHandler` 类
|
|
|
|
|
|
- [x] 实现用户输入传递到 PTY
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 补 Day 8 集成测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:WebSocket 连接正常,输出实时推送**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 9:Vue 页面组件
|
|
|
|
|
|
|
|
|
|
|
|
Day 9 目标:前端代码指挥官主页面
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `CodeCommander.vue` 页面组件
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- AI 提供商选择器
|
|
|
|
|
|
- 任务输入框
|
|
|
|
|
|
- 执行按钮
|
|
|
|
|
|
- 终端显示区域
|
|
|
|
|
|
- 交互输入框
|
|
|
|
|
|
- 下载/清理按钮
|
|
|
|
|
|
- [ ] 补 Day 9 组件测试
|
|
|
|
|
|
|
|
|
|
|
|
**验收:用户可以选择 AI 提供商并输入任务**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Day 10:TerminalDisplay + WebSocket 服务 + 路由
|
|
|
|
|
|
|
|
|
|
|
|
Day 10 目标:完成前端集成
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `TerminalDisplay.vue` 组件(xterm.js)
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- 终端渲染
|
|
|
|
|
|
- ANSI 颜色支持
|
|
|
|
|
|
- 用户输入处理
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 新增 `terminalWs.ts` WebSocket 服务
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- 连接管理
|
|
|
|
|
|
- 自动重连
|
|
|
|
|
|
- 消息处理
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 在 `router/index.ts` 新增 `/code-commander` 路由
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 端到端测试:完整执行流程
|
|
|
|
|
|
- [ ] 确认前端与后端 WebSocket 通信正常
|
|
|
|
|
|
|
|
|
|
|
|
**验收:用户可以在前端看到实时终端输出并交互**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 最终验收
|
|
|
|
|
|
|
2026-04-05 14:56:45 +08:00
|
|
|
|
- [x] 用户可以选择 AI 提供商(Claude/Gemini/Codex/OpenCode)
|
|
|
|
|
|
- [x] 低风险任务(如贪食蛇 demo)直接执行
|
|
|
|
|
|
- [x] 高风险任务在临时目录沙盒执行
|
|
|
|
|
|
- [x] 终端输出实时流式显示
|
|
|
|
|
|
- [x] 用户可以中途输入交互(如 "y" 确认)
|
|
|
|
|
|
- [x] 临时目录执行后正确清理
|
|
|
|
|
|
- [x] 前端页面正常展示
|
2026-04-04 23:24:34 +08:00
|
|
|
|
- [ ] 回归测试通过(现有功能不受影响)
|