From f9c03b349e2b0b38b91d3bd8e37fca05a3e7a7a9 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Tue, 19 May 2026 22:24:38 +0800 Subject: [PATCH] auto-sync: 2026-05-19 22:24:38 --- docs/review/frontend-audit.md | 332 ++++++++++++++++++++++++++++++++++ scripts/e2e-prepare.sh | 0 scripts/e2e-restore.sh | 0 3 files changed, 332 insertions(+) create mode 100644 docs/review/frontend-audit.md mode change 100644 => 100755 scripts/e2e-prepare.sh mode change 100644 => 100755 scripts/e2e-restore.sh diff --git a/docs/review/frontend-audit.md b/docs/review/frontend-audit.md new file mode 100644 index 0000000..6ce2b0b --- /dev/null +++ b/docs/review/frontend-audit.md @@ -0,0 +1,332 @@ +# 前端组件审查报告 + +**审查人**: 庞统(副军师)🐦 +**日期**: 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** | | diff --git a/scripts/e2e-prepare.sh b/scripts/e2e-prepare.sh old mode 100644 new mode 100755 diff --git a/scripts/e2e-restore.sh b/scripts/e2e-restore.sh old mode 100644 new mode 100755