# 前端组件审查报告

**审查人**: 庞统（副军师）🐦
**日期**: 2026-05-19
**审查范围**: `src/frontend/src/` 全部 TSX/TS 文件 vs 设计文档

---

## 一、Tab/页面对照

### App.tsx TAB_DEFS（实际代码，store.ts L129-L142）

| # | key | label | icon | 对应组件 | 设计文档规划 | 状态 |
|---|-----|-------|------|---------|------------|------|
| 1 | `tasks` | 任务看板 | 📜 | EdictBoard | ✅ frontend-redesign-v2.6 §P1, topic9 §D9-3 | ✅ 一致 |
| 2 | `mail` | 飞鸽传书 | ✉️ | MailPanel | ❌ 设计文档无独立 Mail Tab（v2.7 新增，设计文档未更新） | ✅ 超前实现（合理） |
| 3 | `court` | 军议大厅 | 🏛️ | CourtDiscussion | ✅ topic9 §D9-3 "军议大厅→合并到评论线程" → 保留为独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 4 | `monitor` | 编排调度 | 🔌 | MonitorPanel | ✅ topic9 §D9-3 "编排调度→合并到任务看板" → 保留独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 5 | `agents` | 将军总览 | 🤺 | OfficialPanel | ✅ topic9 §D9-3 "将军总览→合并到全局监控" → 保留独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 6 | `models` | 模型配置 | 🤖 | ModelConfig | ✅ topic9 §D9-3 合并到系统配置 → 保留独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 7 | `skills` | 技能配置 | 🎯 | SkillsConfig | ✅ topic9 §D9-3 合并到系统配置 → 保留独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 8 | `sessions` | 传令巡哨 | 🔭 | SessionsPanel | ✅ topic9 §D9-3 "会话监控→合并到全局监控" → 保留独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 9 | `usage` | 花费总览 | 💰 | UsagePanel | ❌ 设计文档未规划此 Tab | ✅ 超前实现 |
| 10 | `archives` | 奏折阁 | 📜 | MemorialPanel | ✅ topic9 §D9-3 "奏折阁→合并到产出档案" → 保留独立 Tab | ⚠️ 设计建议合并但代码保留 |
| 11 | `templates` | 任务模板 | 📋 | TemplatePanel | ❌ 设计文档未规划此 Tab | ✅ 超前实现 |
| 12 | `settings` | 系统设置 | ⚙️ | SettingsPanel | ✅ frontend-redesign-v2.6 §P4, topic9 §D9-3 | ✅ 一致 |

### 设计文档规划但代码未实现

| 设计文档页面 | 位置 | 状态 |
|------------|------|------|
| AI Briefing / AI 晨报 | topic7 §D7-5, topic9 §D9-6, frontend-redesign-v2.6 §P5 | ❌ 未实现（MorningPanel.tsx 存在但 Tab 中未注册，TabKey 类型中也未包含 `morning`） |
| Command Palette (⌘K) | topic7 §D9-7 | ⚠️ GlobalSearch.tsx 存在但未在 App.tsx 中使用/注册 |
| 产出档案 | topic9 §D9-3 | ❌ 未实现为独立 Tab（archives/MemorialPanel 是旧版归档视图） |

### 总结

- **设计建议 5 页精简**（topic9 D9-3）→ **代码实际 12 Tab**
- 代码保留了 v1.0 的完整 Tab 结构，未按设计文档精简合并
- 新增了 `mail`、`usage`、`templates` 三个设计文档未规划的 Tab
- `morning` Tab 有组件（MorningPanel.tsx 418行）但未注册到 TAB_DEFS

---

## 二、组件功能审查

### EdictBoard (文件: components/EdictBoard.tsx, 482行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 顶部统计 4 格（活跃/完成/失败/审查） | topic9 §3.2 "顶部统计（4格）" | ✅ 已实现 | L398-L415, 4个统计卡片 |
| 5 步线性状态管线（pending→claimed→working→review→done） | topic9 §2.2, §3.2 | ✅ 已实现 | L10-L15 PIPELINE_STEPS |
| 8 状态全覆盖（含 failed/blocked/cancelled 旁路） | topic9 §2.2 司马懿 P1 评审 | ✅ 已实现 | L17-L20 PIPELINE_ORDER 含全部11状态 |
| 任务卡片（ID+标题+状态标签+Agent+优先级+管线） | topic9 §3.2 "任务卡片" | ✅ 已实现 | L135-L220 TaskCard |
| 筛选栏两行布局（第1行归档控制+第2行状态筛选+搜索） | v2.8 §3.1 | ✅ 已实现 | L420-L458 两行筛选 |
| 卡片快捷按钮（最多3个，按状态动态显示） | v2.8 §3.2 "卡片按钮（最多3个）" | ✅ 已实现 | L226-L241 CARD_ACTIONS |
| 子 Task 进度指示器（■■□□□ 2/5 + 当前 Stage） | v2.7 §1.6, §2.1 | ✅ 已实现 | L203-L213 subtaskIndex + 进度条 |
| 一键归档 | v2.8 §2.2 | ✅ 已实现 | L440-L452 |
| 项目下拉在筛选栏 | v2.8 §3.1 "项目下拉移入筛选栏" | ❌ 未实现（项目下拉仍在 Header） | App.tsx L87-L99 项目下拉在 hdr-r 中 |
| DAG 拓扑视图 | topic7 §D7-6 "全局层", topic9 §D9-5 | ❌ 未实现 | 无 React Flow 依赖 |
| 评论线程（卡片级别） | topic9 §D9-8 | ❌ 未实现（评论仅在 TaskModal 中） | EdictBoard 无评论入口 |

### TaskModal (文件: components/TaskModal.tsx, 521行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 4 Tab 布局（总览/产出/审查/经验） | topic9 §3.3 "4 Tab 布局" | ✅ 已实现 | L287-L293 tabs 定义 |
| 基本信息展示 | topic9 §3.3 Tab1 | ✅ 已实现 | L315-L321 描述展示 |
| 状态操作按钮（基于 VALID_TRANSITIONS 守卫） | topic9 §2.3, v2.8 §3.2 "Modal 完整按钮" | ⚠️ 部分实现 | L141-L168 StatusButtons 渲染按钮但**未绑定实际点击处理函数**（按钮无 onClick） |
| 11 状态转换表（含 paused/escalated/waiting_human） | v2.8 §1.2 "完整状态转换表" | ✅ 已实现 | L23-L35 VALID_TRANSITIONS 含11个状态 |
| 事件时间线 | topic9 §3.3 "事件时间线" | ✅ 已实现 | L170-L195 EventTimeline |
| 评论/交接（6种类型：handoff/progress/review/rebuttal/debate/observation） | topic9 §3.3 "评论/交接" | ✅ 已实现 | L37-L44 COMMENT_TYPE_LABEL, L374-L402 评论展示 |
| 决策记录 | topic9 §3.3 "决策记录" | ✅ 已实现 | L404-L421 |
| 产出物列表 | topic9 §3.3 Tab2 | ✅ 已实现 | L423-L442 |
| 审查记录（APPROVE/REJECT + 置信度 + 轮次） | topic9 §3.3 Tab3 | ✅ 已实现 | L444-L474 |
| 经验沉淀（best_practice/pitfall/environment 彩色边框） | topic9 §3.3 Tab4 | ✅ 已实现 | L476-L499 |
| Checkpoint 面板（waiting_human 状态触发） | v2.8 §四 "Checkpoint 机制" | ✅ 已实现 | L363-L371 CheckpointPanel 条件渲染 |
| v2.7 子 Task 面板（Stage 进度条 + 子 Task 列表） | v2.7 §2.2 父子关系 | ✅ 已实现 | L152-L196 SubtaskPanel |
| 用户评论输入 | topic9 §D9-8 "用户可以直接在评论线程中发言" | ❌ 未实现 | 评论区域仅展示，无输入框 |
| 乐观锁（expected_version） | topic9 §D9-10 "乐观锁" | ❌ 未实现 | 无 version 字段处理 |
| 来源标识（source: 'dashboard'） | topic9 §D9-10 "来源标识" | ❌ 未实现 | 操作请求无 source 字段 |

### CheckpointPanel (文件: components/CheckpointPanel.tsx, 357行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 三种 Checkpoint 类型（验证/决策/执行） | v2.8 §4.2 | ✅ 已实现 | 三种渲染分支 |
| verify 类型：自动核验 + 人工核验 + 双按钮审批 | v2.8 §4.2 "验证" | ✅ 已实现 | approve/reject API 调用 |
| decision 类型：多方案并排 + 利弊 + 推荐 | v2.8 §4.2 "决策" | ✅ 已实现 | options 渲染 |
| action 类型：分步打勾 + 命令行 | v2.8 §4.2 "执行" | ✅ 已实现 | steps + command |
| API 对接（checkpoints CRUD） | v2.8 §4.5 | ✅ 已实现 | fetch 调用 checkpoints API |

### ArtifactPanel (文件: components/ArtifactPanel.tsx, 185行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 产出物列表展示 | topic9 §3.3 Tab2 | ✅ 已实现 | |
| 产出物预览/下载 | v2.8 §M3 "Artifact" | ⚠️ UI 存在但 API 返回空 | api.ts artifactPreview/artifactDownloadUrl 返回空/false |

### MailPanel (文件: components/MailPanel.tsx, 215行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 邮件列表展示 | v2.7 新增功能 | ✅ 已实现 | fetch `/api/mail` |
| 邮件详情查看 | v2.7 新增功能 | ✅ 已实现 | fetch `/api/mail/{id}` |
| 标记已读/未读 | v2.7 新增功能 | ✅ 已实现 | PATCH is_read |
| 发送邮件 | — | ❌ 未实现 | 无发送 UI |

### MonitorPanel (文件: components/MonitorPanel.tsx, 503行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| Agent 状态展示 | topic9 §D9-5 "Agent 状态面板" | ✅ 已实现 | |
| DAG 拓扑可视化 | topic7 §D7-6, topic9 §D9-5 | ❌ 未实现 | 无 React Flow |
| Gateway 健康检查 | topic9 §D9-5 | ✅ 已实现 | api.agentsStatus() |
| Agent 唤醒按钮 | — | ✅ 已实现 | api.agentWake() |

### GlobalSearch (文件: components/GlobalSearch.tsx, 104行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| ⌘K 快捷键触发 | topic7 §D9-7 "Command Palette" | ⚠️ 组件存在但未注册 | App.tsx 未引用 GlobalSearch |
| 模糊搜索任务+Agent | topic7 §D9-7 | ✅ 已实现 | 搜索逻辑完整 |

### CourtDiscussion (文件: components/CourtDiscussion.tsx, 774行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 议题创建 | v1.0 功能迁移 | ✅ 已实现 | api.courtDiscussStart() |
| 多轮讨论 | v1.0 功能迁移 | ✅ 已实现 | api.courtDiscussAdvance() |
| 讨论结论 | v1.0 功能迁移 | ✅ 已实现 | api.courtDiscussConclude() |

### MorningPanel (文件: components/MorningPanel.tsx, 418行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 新闻采集展示 | topic7 §D7-5 "定时摘要" | ✅ 已实现（组件存在） | |
| 订阅配置 | — | ✅ 已实现 | SubConfigPanel |
| AI Briefing 自动生成 | topic9 §D9-6, frontend-redesign-v2.6 §P5 | ⚠️ 仅新闻展示，无 AI 摘要生成 | 无 AI 生成逻辑 |

### UsagePanel (文件: components/UsagePanel.tsx, 172行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| Token 消耗归因（按 Agent） | 无设计文档 | ✅ 超前实现 | 基于 officialsData 聚合 |
| 总消耗统计 | 无设计文档 | ✅ 超前实现 | |

### NotificationCenter (文件: components/NotificationCenter.tsx, 73行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 铃铛 UI | frontend-redesign-v2.6 §P6 | ⚠️ 占位（App.tsx 中仅一个 button，未引入 NotificationCenter 组件） | App.tsx L83 按钮 + title="通知中心（v2.7）" |
| 4 级分组通知 | topic7 §D7-2 | ❌ 未实现 | |
| SSE 实时推送 | topic9 §4.3 "SSE 事件推送" | ❌ 未实现 | 仍用 HTTP 5s 轮询 |

### SettingsPanel (文件: components/SettingsPanel.tsx, 293行)

| 功能点 | 设计文档位置 | 代码实现状态 | 证据 |
|--------|------------|------------|------|
| 项目管理（创建/删除） | frontend-redesign-v2.6 §P4 | ✅ 已实现 | |
| 系统配置 | topic9 §D9-3 | ✅ 已实现 | |

---

## 三、状态管理对照

### store.ts V2Task 类型 vs 设计文档

| 字段 | store.ts (L11-L42) | 设计文档位置 | 一致性 |
|------|-------------------|------------|--------|
| `status` 11 个枚举值 | `'pending'\|'claimed'\|'working'\|'review'\|'paused'\|'escalated'\|'waiting_human'\|'done'\|'failed'\|'blocked'\|'cancelled'` | v2.8 §1.2 (11个状态) | ✅ 完全一致 |
| `priority: number` | number 类型 | topic9 §2.4 (P0修复: string→number) | ✅ 一致 |
| `parent_task` | `string \| null` | v2.7 §2.1 | ✅ 一致 |
| `depends_on` | `string \| null` | v2.7 §2.1 | ✅ 一致 |
| `stages_json` | `string` | v2.7 §2.1 | ✅ 一致 |
| `stage` | `string \| null` | v2.7 §2.1 | ✅ 一致 |
| `archived` | `number` | v2.8 §2.1 | ✅ 一致 |
| `escalated` | `number` | v2.8 §1.3 (废弃字段,保留兼容) | ✅ 一致 |
| `risk_level` | `string \| null` | topic9 §2.1 | ⚠️ 设计文档为枚举 `'low'\|'standard'\|'high'\|'critical'`，代码为 `string \| null` |
| `must_haves` | `string \| null` | ❌ 设计文档无此字段 | ⚠️ 超前（代码有，设计未记录） |
| `estimated_duration_minutes` | `number \| null` | ❌ 设计文档无此字段 | ⚠️ 超前 |

### PIPE 定义（store.ts L50-L57）

| 代码 PIPE（7步） | 设计文档管线（topic9 §2.2 5步线性） | 一致性 |
|-----------------|----------------------------------|--------|
| created → planning → challenge → assigned → executing → reviewing → done | pending → claimed → working → review → done | ❌ **不一致** |
| 代码 PIPE 保留旧版 Edict 7步管线 | 新设计是 5步线性管线 | |

**说明**: store.ts 的 PIPE 用于旧版 Task 适配（Edict 模式），EdictBoard.tsx 使用自己的 PIPELINE_STEPS（5步），TaskModal.tsx 使用 VALID_TRANSITIONS（11状态）。三套管线并存，需注意一致性。

### 状态筛选按钮

| 代码（EdictBoard L361-L374） | 设计文档（v2.8 §3.1 第2行） | 一致性 |
|------------------------------|---------------------------|--------|
| all/pending/claimed/working/review/paused/escalated/waiting_human/done/failed/blocked/cancelled (12个) | all/pending/claimed/working/review/paused/escalated/waiting_human/done/failed/blocked/cancelled (12个) | ✅ 完全一致 |

---

## 四、API 调用对照

### 前端 api.ts 调用 vs 后端实际路由

| 前端方法 | 调用端点 | 后端路由（topic9 §4.4） | 状态 |
|---------|---------|----------------------|------|
| `api.liveStatus()` | `/api/projects` + `/api/daemon/status` + `/api/projects/{pid}/tasks` | ✅ 已有 | ✅ 对接 |
| `api.createTask()` | `POST /api/projects/{pid}/tasks` | ✅ 已有 | ✅ 对接 |
| `api.taskAction()` | `POST /api/projects/{pid}/tasks/{tid}/status` | ✅ 已有 | ✅ 对接 |
| `api.reviewAction()` | `POST /api/projects/{pid}/tasks/{tid}/reviews` | ✅ 已有 | ✅ 对接 |
| `api.taskProgress()` | `GET /api/projects/{pid}/tasks/{tid}/progress` | ❌ 设计有但后端未实现 | ⚠️ 前端调用，后端可能404 |
| `api.listSubtasks()` | `GET /api/projects/{pid}/tasks?parent_task={pid}` | ⚠️ 后端是否有此查询参数？ | ⚠️ 需确认 |
| CheckpointPanel | `GET/POST /api/projects/{pid}/tasks/{tid}/checkpoints` | v2.8 §4.5 | ✅ 对接 |
| MailPanel | `GET /api/mail`, `GET/PATCH /api/mail/{id}` | v2.7 新增 | ✅ 对接 |
| `api.courtDiscussStart/Advance/Conclude` | 前端调用但 api.ts 返回 `{ ok: false, error: 'Not implemented' }` | ❌ 后端未实现 | ⚠️ UI存在但无功能 |
| `api.artifacts()` | 返回空 `{ ok: true, deliverable: null, nodes: [] }` | ❌ 后端未实现 | ⚠️ 占位 |
| `api.humanInput()` | 返回空 `{ ok: true, active: false }` | ❌ 后端未实现 | ⚠️ 占位 |
| `api.agentConfig()` | 返回空 `{ agents: [], knownModels: [] }` | ❌ v2.6 暂无 | ⚠️ 占位 |
| `api.setModel/setDispatchChannel/agentWake` | 返回 `{ ok: false, error: 'Not implemented' }` | ❌ 未实现 | ⚠️ 占位 |
| `api.morningBrief/morningConfig` | 返回空数据 | ⚠️ Mock | ⚠️ 占位 |

---

## 五、超前实现清单

> 代码已实现但设计文档中未记录的功能

| # | 功能 | 文件 | 说明 |
|---|------|------|------|
| 1 | **飞鸽传书 Tab（MailPanel）** | MailPanel.tsx (215行) | v2.7 新增但设计文档 topic9 未更新 Tab 列表 |
| 2 | **花费总览 Tab（UsagePanel）** | UsagePanel.tsx (172行) | 设计文档未规划此 Tab |
| 3 | **任务模板 Tab（TemplatePanel）** | TemplatePanel.tsx (232行) + store.ts TEMPLATES | 设计文档未规划此 Tab |
| 4 | **新建军令 Modal（CreateTaskModal）** | App.tsx L135-L198 | 设计文档有提及（v2.8 §3.3 title可选）但未详细设计 UI |
| 5 | **V2Task.must_haves 字段** | store.ts L31 | 设计文档无此字段 |
| 6 | **V2Task.estimated_duration_minutes 字段** | store.ts L33 | 设计文档无此字段 |
| 7 | **旧版 Edict 7步 PIPE 兼容** | store.ts L50-L57 | 保留了旧版管线兼容逻辑 |
| 8 | **项目自动选择逻辑** | store.ts loadLive | 自动选择第一个项目 |
| 9 | **全局搜索 GlobalSearch** | GlobalSearch.tsx (104行) | 设计为 D9-7 Command Palette，代码已实现但未注册 |
| 10 | **MorningPanel（AI晨报）** | MorningPanel.tsx (418行) | 组件已实现但未注册到 TAB_DEFS |
| 11 | **ArtifactList** | ArtifactList.tsx (71行) | 独立产出物列表组件 |
| 12 | **ConfirmDialog** | ConfirmDialog.tsx (36行) | 通用确认对话框 |
| 13 | **Toaster** | Toaster.tsx (16行) | Toast 通知组件 |

---

## 六、缺口清单

> 设计文档已设计但代码未实现的功能

| # | 功能 | 设计文档位置 | 优先级 | 说明 |
|---|------|------------|--------|------|
| 1 | **页面精简为 5 Tab** | topic9 §D9-3, frontend-principles §页面对照 | P1 | 设计要求10→5页，代码仍保留12 Tab |
| 2 | **DAG 拓扑视图** | topic7 §D7-6, topic9 §D9-5 | P1 | 需要 React Flow，未实现 |
| 3 | **Command Palette (⌘K)** | topic7 §D9-7 | P2 | GlobalSearch 存在但未集成 |
| 4 | **SSE 实时推送** | topic9 §4.3, frontend-principles "Phase 3" | P2 | 仍用 HTTP 5s 轮询 |
| 5 | **通知中心完整实现** | frontend-redesign-v2.6 §P6, topic7 §D7-2 | P1 | 仅有铃铛占位按钮，无面板 |
| 6 | **AI Briefing 自动生成** | topic9 §D9-6, frontend-redesign-v2.6 §P5 | P3 | MorningPanel 存在但未注册；AI 摘要生成未实现 |
| 7 | **用户评论输入** | topic9 §D9-8 "用户可以直接在评论线程中发言" | P1 | TaskModal 评论区仅展示，无输入框 |
| 8 | **乐观锁 (expected_version)** | topic9 §D9-10 | P2 | 操作请求无 version 字段 |
| 9 | **来源标识 (source: 'dashboard')** | topic9 §D9-10 | P2 | 操作请求无 source 字段 |
| 10 | **TaskModal 状态按钮未绑定点击** | topic9 §3.3 "状态操作" | P0 | StatusButtons 组件渲染了按钮但**没有 onClick 处理** |
| 11 | **项目下拉移入筛选栏** | v2.8 §3.1 | P1 | 项目下拉仍在 Header |
| 12 | **Artifact 文件预览/下载** | v2.8 §M3 | P2 | API 返回空，前端仅占位 |
| 13 | **产出档案 Tab** | topic9 §D9-3 | P2 | 设计有但未实现（archives 是旧版归档） |
| 14 | **推送级别 4 级分组** | topic7 §D7-2 | P3 | 未实现 |
| 15 | **Agent 主动汇报（WebChat 推送）** | topic7 §D7-5 | P3 | 前端无此逻辑（依赖后端+OpenClaw） |
| 16 | **`GET /tasks/{tid}/progress` 后端 API** | v2.7 §2.2 | P1 | 前端调用但后端可能未实现 |
| 17 | **`GET /tasks/{tid}/experiences` 后端 API** | topic9 §4.2 API-3 | P1 | 后端未实现 |

---

## 七、关键发现

### 🔴 P0 关键问题

1. **TaskModal StatusButtons 无 onClick 绑定**（TaskModal.tsx L141-L168）
   - 渲染了状态操作按钮但未绑定实际处理函数，用户点击无响应
   - 设计文档 topic9 §3.3 明确要求"按钮（基于守卫）"

2. **三套管线并存**
   - store.ts PIPE: 旧版 Edict 7步（created→planning→...→done）
   - EdictBoard.tsx PIPELINE_STEPS: 新版 5步（pending→claimed→working→review→done）
   - TaskModal.tsx VALID_TRANSITIONS: 新版 11状态转换表
   - 建议统一，清理旧版 PIPE

### 🟡 P1 重要问题

3. **Tab 数量未按设计精简**：设计要求 5 页，代码实际 12 Tab。合并方案未执行。
4. **DAG 拓扑未实现**：这是设计文档的核心差异化功能。
5. **通知中心仅占位**：SSE + 通知面板未对接。
6. **用户评论输入缺失**：TaskModal 中无法输入评论。
7. **`taskProgress` API 前端调用但后端可能未实现**：会导致 404。

### 🟢 P2 改进建议

8. GlobalSearch 组件已实现，建议集成 ⌘K 快捷键注册。
9. MorningPanel 组件已实现，建议注册到 TAB_DEFS 或替代 AI Briefing。
10. 项目下拉建议从 Header 移到 EdictBoard 筛选栏（v2.8 §3.1）。
11. 乐观锁和来源标识建议在对接后端操作 API 时一并实现。

---

## 八、文件清单

| 文件 | 行数 | 主要功能 |
|------|------|---------|
| App.tsx | ~200 | 主布局 + Header + Tab 路由 + CreateTaskModal |
| store.ts | ~420 | Zustand 全局状态 + PIPE + 模板 + 轮询 |
| api.ts | ~350 | API 层（v2.6 适配 + 类型定义） |
| EdictBoard.tsx | 482 | 任务看板（卡片 + 筛选 + 管线） |
| TaskModal.tsx | 521 | 任务详情（4 Tab） |
| CheckpointPanel.tsx | 357 | Checkpoint 三类型面板 |
| CourtDiscussion.tsx | 774 | 朝堂议政 |
| SkillsConfig.tsx | 649 | 技能配置 |
| MonitorPanel.tsx | 503 | 编排调度 |
| SessionsPanel.tsx | 358 | 传令巡哨 |
| MorningPanel.tsx | 418 | AI 晨报（未注册 Tab） |
| MailPanel.tsx | 215 | 飞鸽传书 |
| MemorialPanel.tsx | 284 | 奏折阁 |
| OfficialPanel.tsx | 258 | 将军总览 |
| SettingsPanel.tsx | 293 | 系统设置 |
| ArtifactPanel.tsx | 185 | 成果物面板 |
| ModelConfig.tsx | 196 | 模型配置 |
| TemplatePanel.tsx | 232 | 任务模板 |
| UsagePanel.tsx | 172 | 花费总览 |
| GlobalSearch.tsx | 104 | 全局搜索（未注册） |
| NotificationCenter.tsx | 73 | 通知中心（未集成） |
| ArtifactList.tsx | 71 | 产出物列表 |
| ConfirmDialog.tsx | 36 | 确认对话框 |
| Toaster.tsx | 16 | Toast 组件 |
| CourtCeremony.tsx | 51 | 朝堂仪式动画 |
| time.ts | — | 时间工具 |
| **总计** | **~6248** | |
