# Phase 1：基础设施

日期：2026-04-04
状态：待实施

---

## 1. 本阶段目的

新增代码指挥官 Agent 的基础架子，包括：
- State 定义（角色、状态）
- Prompt 模板
- 工具注册
- Agent 注册

---

## 2. 详细任务

### 2.1 State 定义

**文件**: `backend/app/agents/state.py`

```python
# 新增 AgentRole
class AgentRole(str, Enum):
    # ... 现有角色 ...
    CODE_COMMANDER = "code_commander"

# 新增 CodeCommanderState
class CodeCommanderState(TypedDict):
    task_type: str                          # "demo" | "project" | "modification"
    ai_provider: str                        # "claude" | "gemini" | "codex" | "opencode"
    sandbox_mode: bool                      # True = 沙盒执行，False = 直接执行
    workspace_path: str | None              # 临时工作目录
    execution_session_id: str | None       # PTY 会话 ID
```

### 2.2 Prompt 模板

**文件**: `backend/app/agents/prompts.py`

```python
# 代码指挥官系统提示
CODE_COMMANDER_SYSTEM_PROMPT = """你是一个代码指挥官，负责协调 AI 写代码助手。

你的职责：
1. 接收用户选择的 AI 提供商（Claude/Gemini/Codex/OpenCode）
2. 接收用户的写代码需求
3. 进行安全分级判定
4. 路由到合适的执行器

安全分级规则：
- 低风险：demo、示例、贪食蛇游戏等独立项目
- 高风险：修改现有项目、涉及 Jarvis 项目、路径操作等

执行模式：
- 直接执行：低风险任务，直接运行
- 沙盒执行：高风险任务，在临时目录隔离执行"""

# 沙盒执行说明
SANDBOX_EXECUTION_PROMPT = """将在隔离的临时目录中执行任务。
任务完成后，工作目录会被保留供下载。"""

# 直接执行说明
DIRECT_EXECUTION_PROMPT = """将直接执行任务。
如果需要交互，请等待用户输入。"""
```

### 2.3 工具注册

**文件**: `backend/app/agents/tools/__init__.py`

```python
# 新增工具集
CODE_COMMANDER_TOOLSET = {
    "code_commander": [
        "execute_code_task",
        "get_execution_status",
        "send_interactive_input",
        "download_workspace",
        "cleanup_workspace",
    ]
}

# 在 SUB_COMMANDER_TOOLSETS 中添加
SUB_COMMANDER_TOOLSETS: dict[str, list[str]] = {
    # ... 现有工具集 ...
    "code_commander": CODE_COMMANDER_TOOLSET["code_commander"],
}
```

### 2.4 Agent 注册

**文件**: `backend/app/agents/registry/builtins.py`

```python
# 新增 CodeCommanderManifest
CodeCommanderManifest = AgentManifest(
    id="code_commander",
    name="代码指挥官",
    description="协调 AI 写代码助手的指挥官",
    system_prompt=CODE_COMMANDER_SYSTEM_PROMPT,
    role=AgentRole.CODE_COMMANDER,
    sub_commanders=[],  # 代码指挥官没有子指挥官
    tools=["execute_code_task", "get_execution_status", 
           "send_interactive_input", "download_workspace", "cleanup_workspace"],
    permission_class=PermissionClass.HIGH,  # 需要较高权限
    side_effect_scope=SideEffectScope.WORKSPACE,
    supports_retry=True,
    idempotent=False,
    safe_for_parallel_use=False,
    requires_confirmation=True,
)

# 注册到 AGENT_MANIFESTS
AGENT_MANIFESTS: dict[str, AgentManifest] = {
    # ... 现有 agent ...
    "code_commander": CodeCommanderManifest,
}
```

---

## 3. 核心文件清单

| 文件 | 操作 | 说明 |
|------|------|------|
| `state.py` | 修改 | 新增 `CODE_COMMANDER` 角色和 `CodeCommanderState` |
| `prompts.py` | 修改 | 新增三个 prompt 常量 |
| `tools/__init__.py` | 修改 | 新增工具集注册 |
| `registry/builtins.py` | 修改 | 新增 `CodeCommanderManifest` |

---

## 4. 验收标准

- [ ] `AgentRole.CODE_COMMANDER` 存在且值正确
- [ ] `CODE_COMMANDER_SYSTEM_PROMPT` 包含完整指令
- [ ] 工具集已注册且可通过 `SUB_COMMANDER_TOOLSETS` 访问
- [ ] `CodeCommanderManifest` 已注册且包含所有必要字段

---

## 5. 依赖关系

```
本阶段 → Phase 2（执行引擎）
       → Phase 3（Agent 集成）
```

本阶段是后续所有阶段的基础。
