---
status: active
date: 2026-06-19
type: feat
origin: docs/brainstorms/2026-06-18-chat-area-vi-redesign-requirements.md
---

# feat: 聊天主区 VI 重梳与新功能适配 — 实施计划（执行中 / 复审版）

---

## Summary

本计划承接 [聊天主区 VI 重梳需求文档](docs/brainstorms/2026-06-18-chat-area-vi-redesign-requirements.md)，目标是把需求中的设计令牌、消息视觉范式、右屏 Tab 面板、@team / @board 消息适配以及 Preview 静态样例全部落地。

**当前进展（截至复审时点）：**

- `U1. 补齐设计令牌与主题映射` 已完成：`tokens.css` 与 `theme.ts` 新增 `--radius-card`、`--font-mono`、`--accent-team*`、`--accent-board*`、`--shadow-card` 等；关键组件已使用语义 token。
- `U2. 消息模型与分发器对齐后端事件` 已完成：`IChatMessage` 扩展了 `plan_phases`、`error_detail`、`board_conclusion` 等字段；`useMessageRenderer.ts` 已新增 `team_plan`、`board_banner`、`board_conclusion`、`error` 等路由；`chat.ts` 已调整 `board_started` / `board_concluded` 事件推送。
- `U3. TeamPlanCard 视觉升级` 已完成：蓝色顶条、阶段时间线、进度条、状态图标就位。
- `U4. Board 复杂消息组件群` 已完成：`BoardBannerCard.vue`、`BoardRoundCard.vue`、`BoardConclusionCard.vue` 已新建/升级；`Scene4BoardDiscussion.vue` 已加入 banner、多轮发言、小结、结论的完整示例。
- `U5. ErrorCard 重试与渲染集成` 已完成：ErrorCard 支持重试事件，`useMessageRenderer.ts` 已路由 error 类型。
- `U6. ChatInput 交互补全` 已完成：拖拽上传浮层、清空按钮、专家团/私董会语义色按钮就位。
- `U7. 右屏 Tab 面板内容补全` **部分完成**：Tab bar 与「监控」内容已就位，但「技能 / 系统 / 知识库」三个 Tab 的内容尚未根据 `activeTab` 切换渲染。

**剩余工作：**

- `U7` 完成：实现 `SkillsTab` / `SystemTab` / `KnowledgeTab` 三个子组件，并在 `SystemMonitorPanel.vue` 中按 `activeTab` 切换。
- `U7` 结对代码审查。
- `U8` Preview 样例场景精修。
- `U8` 结对代码审查。
- `U9` BoardMeetingModal VI 适配收尾。
- `U9` 结对代码审查。
- `U10` 质量门与后端回归测试。

**执行纪律：** 每个开发单元完成后，启动一个子 agent 进行结对代码审查；审查通过后再进入下一单元。全部完成后统一跑 `vue-tsc --noEmit` / `npm run build` / `pytest` 并修复问题。

---

## Problem Frame

聊天主区既要承载普通对话（user / assistant 文本），也要承载越来越复杂的 AI 运行态：专家团计划、私董会多轮讨论、工具调用链、错误恢复。现有实现已经把这些类型拆成独立组件，但：

1. 视觉语言与需求文档仍有偏差（TeamPlanCard 缺少进度条、BoardRoundCard 缺少紫色边框与角色标签、ErrorCard 缺少重试）；
2. 消息分发器没有为 `error`、`board_started`、`board_conclusion`、`plan_update` 等类型预留专属渲染路径；
3. 右屏 `SystemMonitorPanel` 只有「监控」有内容，「技能 / 系统 / 知识库」尚未接入；
4. 部分设计令牌（`--radius-card`、`--font-mono`）和交互细节（拖拽上传、清空输入、按钮语义色）尚未补齐。

---

## Requirements Traceability

| 需求来源 | 本计划覆盖范围 |
|---|---|
| §2 Color System | 补齐 `--radius-card`、`--font-mono`，深色模式同步，移除硬编码旧色 |
| §3.1 整体布局 | ChatView max-width 已居中；右屏折叠由 `RightPanel` 负责，本计划补 Tab 内容 |
| §3.2 消息类型表 | 为 `team_plan`、`board_banner`、`board_speech`、`board_summary`、`board_conclusion`、`error` 补齐/升级组件与分发 |
| §3.3 关键交互 | ChatInput 拖拽浮层、清空按钮、按钮语义色；ErrorCard 重试；ToolCallCard 默认收起已具备 |
| §4 Right Panel | SystemMonitorPanel 增加「技能 / 系统 / 知识库」可切换内容 |
| §5 Input Area | 专家团/私董会按钮着色、拖拽上传、清空 |
| §6.3 Mockup 6 场景 | 调整 Scene1/4/5，使预览更接近需求图 |

---

## Key Technical Decisions

1. **继续沿用 `MessageShell` + `useMessageRenderer` 分发架构。** 复杂消息统一走 `ChatMessage` 分发，不在 `ChatView` 里写大量 `v-if`。
2. **扩展 `IChatMessage` 模型承载复杂消息字段。** 新增 `plan_phases`、`error_detail`、`board_conclusion`，让后端事件可以无损透传到组件层，而不是把所有状态塞进 `content`。
3. **Board 顶部 Banner 用消息流中的 `milestone` 卡片表达。** `board_started` 事件进入聊天列表时渲染为 `BoardBannerCard`，关闭原来的纯文本 `milestone` fallback；`board_concluded` 渲染为 `BoardConclusionCard`。
4. **右屏 Tab 内容复用现有 store 与组件，但做紧凑版。** 避免把完整 `SkillsView` / `KnowledgeBaseView` 的页面级 padding 和 header 搬进侧边栏；新建 `SkillsPanel` / `KnowledgePanel` / `SystemPanel` 只保留核心列表/指标。
5. **所有新增/修改组件必须先过 `vue-tsc --noEmit`。** 由于前端没有单元测试，类型检查 + 构建即主要质量门。
6. **每个单元完成后启动结对审查子 agent。** 审查范围：类型安全、Vue 范式、设计令牌使用、边界条件处理；审查通过后再进入下一单元。

---

## Implementation Units

### U1. 补齐设计令牌与主题映射

**Goal:** 让需求文档 §2 中新增的 `--radius-card`、`--font-mono` 等令牌就位，并清理组件中残留的硬编码色值。

**Requirements:** §2.1 / §2.2 / §2.4 / §2.5

**Dependencies:** 无

**Files:**
- `src/agentkit/server/frontend/src/styles/tokens.css`
- `src/agentkit/server/frontend/src/styles/theme.ts`
- `src/agentkit/server/frontend/src/components/chat/BoardMeetingModal.vue`
- `src/agentkit/server/frontend/src/components/layout/SystemMonitorPanel.vue`

**Approach:**
- 在 `:root` 与 `[data-theme="dark"]` 中新增 `--radius-card: 12px` 和 `--font-mono: 'SF Mono', 'Fira Code', ...`。
- `theme.ts` 的 `Card` / `Modal` 组件 token 优先读取 `--radius-card`。
- 将 `BoardMeetingModal.vue` 中硬编码的 `rgba(142, 68, 173, ...)` 与 `rgba(99, 102, 241, ...)` 替换为 `--accent-board-soft` / `--accent-board-bg`。
- 将 `SystemMonitorPanel.vue` 中硬编码的健康色 `#22c55e`、错误色 `#ef4444` 替换为语义令牌。

**Test scenarios:**
- `vue-tsc --noEmit` 通过。
- 在浏览器开发者工具中检查 `:root` 包含 `--radius-card` 与 `--font-mono`。
- 深色模式下 `--accent-board-soft` 为带透明度的紫色。

**Verification:** 类型检查通过；浏览器 computed styles 可见新增令牌；BoardMeetingModal 选中态背景不再出现旧紫色。

**Pair review:** 由子 agent 检查 token 命名一致性、深色模式同步、是否仍有遗漏硬编码色值。

---

### U2. 消息模型与分发器对齐后端事件

**Goal:** 让 `useMessageRenderer` 能正确识别 `error`、`board_started`、`board_conclusion`、`plan_update` 等消息类型，并给组件传递结构化数据。

**Requirements:** §3.2 / §6.1

**Dependencies:** U1

**Files:**
- `src/agentkit/server/frontend/src/api/types.ts`
- `src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts`
- `src/agentkit/server/frontend/src/components/chat/messages/index.ts`
- `src/agentkit/server/frontend/src/components/chat/ChatMessage.vue`
- `src/agentkit/server/frontend/src/stores/chat.ts`
- `src/agentkit/server/frontend/src/components/chat/messages/BoardBannerCard.vue`（已新建）
- `src/agentkit/server/frontend/src/components/chat/messages/BoardConclusionCard.vue`（已新建）

**Approach:**
- 在 `IChatMessage` 中新增可选字段：`plan_phases?: ITeamPlanPhase[]`、`error_detail?: string`、`board_conclusion?: IBoardConcludedData`。
- 扩展 `MessageViewType` 为 `'user' | 'assistant' | 'team_plan' | 'board_banner' | 'board_speech' | 'board_summary' | 'board_conclusion' | 'milestone' | 'error'`。
- `resolveMessageType` 按 `message_type` 返回 `team_plan`（`plan_update`）、`board_banner`（新增 `board_started`）、`board_conclusion`、`error`（新增 `error`）。
- `team_plan` 分支从 `message.plan_phases` 取阶段，而不是从 `tool_calls` 映射（当前实现是错误映射）。
- `chat.ts` 中 `board_started` 不再推送纯文本 `milestone`，而是推送 `message_type: 'board_started'` 的消息；`board_concluded` 推送 `message_type: 'board_conclusion'` 并带上 `board_conclusion` 数据。
- `error` 分支对应后端 `error` 事件或本地把 `status === 'error'` 的消息路由到 `ErrorCard`。

**Test scenarios:**
- Happy path: `plan_update` 消息渲染 `TeamPlanCard` 且阶段名称正确。
- Happy path: `board_started` 渲染 `BoardBannerCard`，显示主题、专家 chips、轮次。
- Happy path: `board_conclusion` 渲染 `BoardConclusionCard`，展示共识 / 分歧 / 建议。
- Error path: 后端 `error` 事件渲染 `ErrorCard` 并带重试按钮。
- Edge case: `message.plan_phases` 为空时 `TeamPlanCard` 不崩溃。

**Verification:** 在 Preview Scene3/4/6 中可见正确渲染；`vue-tsc` 无新增类型错误。

**Pair review:** 由子 agent 检查类型定义完整性、分发器分支覆盖、`chat.ts` 事件转换是否遗漏字段。

---

### U3. TeamPlanCard 视觉升级

**Goal:** 让专家团计划 card 符合需求图：蓝色顶条、Lead 头像、阶段时间线、进度条、状态图标。

**Requirements:** §3.2 Team Plan Card 图示

**Dependencies:** U2

**Files:**
- `src/agentkit/server/frontend/src/components/chat/messages/TeamPlanCard.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene3TeamPlan.vue`

**Approach:**
- 顶部增加 4px 高的 `--accent-team` 顶条，左侧显示 Lead 头像 + 「专家团计划」标签 + 完成计数。
- 阶段列表使用相对时间线：每个阶段左侧圆点/状态图标（● 执行中、○ 待执行、✓ 完成、✕ 失败），下方可展开专家子步骤（预留 `result` / `milestone` 字段）。
- 底部增加进度条：`completed / total` 百分比，用 `--accent-team` 填充。
- 颜色统一使用 `--accent-team*` 系列，不再使用默认 Ant Design 紫色。

**Test scenarios:**
- Happy path: 3 个阶段中 1 个运行、2 个待执行，进度条显示 33%。
- Edge case: 所有阶段失败，进度条为 0%，状态图标全为错误色。
- Edge case: 阶段名超长时显示 `text-overflow: ellipsis`。

**Verification:** Preview Scene3 与需求图一致；无类型错误。

**Pair review:** 由子 agent 检查样式 token 使用、进度计算正确性、状态图标映射。

---

### U4. Board 复杂消息组件群

**Goal:** 补齐私董会所需的 `BoardBannerCard`、`BoardRoundCard` 紫色边框样式、`BoardConclusionCard`。

**Requirements:** §3.2 Board Banner / Board Round Card / board_conclusion

**Dependencies:** U2

**Files:**
- `src/agentkit/server/frontend/src/components/chat/messages/BoardBannerCard.vue`（已新建）
- `src/agentkit/server/frontend/src/components/chat/messages/BoardRoundCard.vue`
- `src/agentkit/server/frontend/src/components/chat/messages/BoardConclusionCard.vue`（已新建）
- `src/agentkit/server/frontend/src/components/chat/messages/index.ts`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene4BoardDiscussion.vue`

**Approach:**
- `BoardBannerCard`：跨整行 card，顶部 4px `--accent-board` 条，显示 🏛️ 私董会主题、专家 emoji chips、主持人标签、当前轮次 / 最大轮次进度条。
- `BoardRoundCard`：外层包裹增加左侧 3px `--accent-board` 边框、`--accent-board-soft` 背景；header 显示专家头像 chip、第 N 轮、角色标签（主持/专家）。
- `BoardConclusionCard`：跨整行 card，紫色渐变顶条，内部展示「共识」「分歧」「决策建议」三个区块；默认折叠分歧与建议，点击展开。
- 导出到 `messages/index.ts`；更新 Preview Scene4 包含 banner + 3 轮发言 + 小结 + 结论。

**Test scenarios:**
- Happy path: banner 显示主题、专家、主持人、轮次进度。
- Happy path: 专家发言 card 左侧紫边，主持人 meta 带「主持」标签。
- Happy path: 结论 card 默认展开共识，折叠分歧/建议，点击可展开。
- Edge case: 结论数据为空时隐藏对应区块。

**Verification:** Preview Scene4 完整呈现 banner、发言、小结、结论；`vue-tsc` 通过。

**Pair review:** 由子 agent 检查紫色 token 一致性、BoardRoundCard 结构与需求图差异、折叠状态实现。

---

### U5. ErrorCard 重试与渲染集成

**Goal:** 错误 card 支持重试操作，并能在消息流中正确触发。

**Requirements:** §3.2 error / §3.3 错误重试

**Dependencies:** U2

**Files:**
- `src/agentkit/server/frontend/src/components/chat/messages/ErrorCard.vue`
- `src/agentkit/server/frontend/src/components/chat/helpers/useMessageRenderer.ts`
- `src/agentkit/server/frontend/src/components/chat/ChatMessage.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene6Error.vue`
- `src/agentkit/server/frontend/src/stores/chat.ts`

**Approach:**
- `ErrorCard` 增加 `onRetry` prop / `emit('retry')`，在 card 底部显示「重试」按钮。
- `ChatMessage` 监听 retry 事件，调用 `chatStore.resendLastUserMessage()` 或类似 action；若不存在则新增该 action：取当前对话最后一条 user 消息重新发送。
- `useMessageRenderer` 对 `message_type === 'error'` 或 `status === 'error'` 的消息渲染 `ErrorCard`。
- Preview Scene6 的 ErrorCard 带重试按钮，点击后触发重发模拟。

**Test scenarios:**
- Happy path: 点击 ErrorCard「重试」重新发送最后一条 user 消息。
- Error path: 对话中没有 user 消息时重试按钮禁用或不显示。
- Edge case: 连续多次重试不追加重复占位消息。

**Verification:** Scene6 可交互；类型检查通过。

**Pair review:** 由子 agent 检查重试逻辑幂等性、空消息边界、事件冒泡处理。

---

### U6. ChatInput 交互补全

**Goal:** 完成输入区的语义色按钮、拖拽上传浮层、清空按钮。

**Requirements:** §5.2 / §5.3

**Dependencies:** U1

**Files:**
- `src/agentkit/server/frontend/src/components/chat/ChatInput.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene1Welcome.vue`

**Approach:**
- 「专家团」按钮默认/悬停使用 `--accent-team`；「私董会」按钮默认/悬停使用 `--accent-board`；图标尺寸保持 14px。
- 在 textarea 区域监听 `dragenter` / `dragover` / `dragleave` / `drop`，放下文件时显示「拖放以附加」半透明浮层并调用现有 `handleFileChange` 逻辑。
- 在 footer 增加「清空」按钮，点击后 `inputText = ''` 并清空已选附件 pills。
- Preview Scene1 的输入框预填文本改为 `@team:tech_lead,frontend_engineer,backend_engineer 设计一个用户认证系统`。

**Test scenarios:**
- Happy path: 拖拽文件到输入区出现浮层，松开后文件被引用到输入框。
- Happy path: 点击清空后输入框与附件 pills 清空。
- Edge case: 非文件拖拽（如文本）不触发上传浮层。

**Verification:** 浏览器手动验证；`vue-tsc` 通过。

**Pair review:** 由子 agent 检查拖拽事件处理是否健壮、清空是否同时清理附件、按钮语义色是否正确。

---

### U7. 右屏 Tab 面板内容补全

**Goal:** SystemMonitorPanel 的「技能 / 系统 / 知识库」三个 Tab 有真实内容。

**Requirements:** §4.1 / §4.3

**Dependencies:** 无

**Files:**
- `src/agentkit/server/frontend/src/components/layout/SystemMonitorPanel.vue`
- `src/agentkit/server/frontend/src/stores/skills.ts`
- `src/agentkit/server/frontend/src/stores/knowledge.ts`
- `src/agentkit/server/frontend/src/components/skills/SkillCard.vue`
- `src/agentkit/server/frontend/src/components/kb/SearchTest.vue`
- `src/agentkit/server/frontend/src/api/system.ts`（已新建）

**Approach:**
- 保持 Tab bar 与切换逻辑不变，把当前监控内容拆到 `MonitorTab` 子组件。
- 新增 `SkillsTab`：使用 `useSkillsStore` 拉取技能列表，以紧凑列表展示技能名 + 描述 + 状态，点击展开 `SkillDetail`；复用 `SkillCard` 但减少 padding。
- 新增 `SystemTab`：展示当前 `resources`（CPU / 内存 / 磁盘）与服务健康检查，避免重复监控 Tab 的 4 个 metric card。
- 新增 `KnowledgeTab`：使用 `useKnowledgeStore` 拉取 sources，展示知识库源列表，并在底部嵌入 `SearchTest` 做检索测试。
- 激活 Tab 的下划线颜色改为 `--accent-team`。

**Test scenarios:**
- Happy path: 切换到「技能」Tab 可见技能列表，点击技能弹出详情。
- Happy path: 切换到「系统」Tab 可见资源使用率与服务状态。
- Happy path: 切换到「知识库」Tab 可见源列表与检索测试入口。
- Error path: API 失败时显示友好错误提示。

**Verification:** 在 `/agent/chat` 打开右屏切换 4 个 Tab；`vue-tsc` / `npm run build` 通过。

**Pair review:** 由子 agent 检查 store 使用是否引入重复请求、Tab 切换状态、API 错误处理。

---

### U8. Preview 样例场景精修

**Goal:** 让 6 个 Preview 场景与需求文档 §6.3 一一对应，便于视觉 review。

**Requirements:** §6.3

**Dependencies:** U2 / U3 / U4 / U5 / U6

**Files:**
- `src/agentkit/server/frontend/src/components/preview/ChatPreviewShell.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene1Welcome.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene3TeamPlan.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene4BoardDiscussion.vue`
- `src/agentkit/server/frontend/src/components/preview/scenes/Scene5ToolCall.vue`

**Approach:**
- Scene1：顶部 hero + 4 能力提示 + 预填 `@team:...` 的输入框。
- Scene3：使用升级后的 `TeamPlanCard`，第 1 阶段 running、专家子项展开。
- Scene4：包含 `BoardBannerCard`、3 轮不同专家发言、1 个小结、1 个 `BoardConclusionCard`。
- Scene5：展示嵌套 2 层 tool call，状态点变化（running → completed / error）。
- ChatPreviewShell：场景切换按钮增加键盘左右箭头监听，方便演示。

**Test scenarios:**
- Happy path: 6 个场景全部可切换且无 console error。
- Happy path: Scene4 的 banner 与结论 card 完整渲染。
- Edge case: 快速切换场景不残留上一个场景的滚动位置（滚动容器复位）。

**Verification:** `/agent/preview` 可完整演示 6 个场景；构建通过。

**Pair review:** 由子 agent 检查 mock 数据类型与真实接口是否一致、场景切换是否健壮。

---

### U9. BoardMeetingModal VI 适配

**Goal:** 私董会 Modal 使用新的紫色语义令牌，移除旧 `#8E44AD` 与 indigo 硬编码。

**Requirements:** §6.1

**Dependencies:** U1

**Files:**
- `src/agentkit/server/frontend/src/components/chat/BoardMeetingModal.vue`

**Approach:**
- 选中态背景改为 `--accent-board-bg` / `--accent-board-soft`。
- 选中边框使用 `--accent-board`。
- 主持人标签颜色从 Ant Design `purple` 改为自定义 Tag，背景 `--accent-board-soft`、文字 `--accent-board`。
- hover 边框改为 `--color-primary`（近黑）。

**Test scenarios:**
- Happy path: 选中专家后卡片边框为紫色，主持人卡片背景为浅紫色。
- Edge case: 深色模式下紫色令牌仍可见。

**Verification:** 在 ChatInput 打开「私董会」Modal 验证；`vue-tsc` 通过。

**Pair review:** 由子 agent 检查是否仍有遗漏硬编码色值、深色模式表现。

---

### U10. 质量门与后端回归

**Goal:** 确保前端类型安全、构建成功，后端单元测试不回归。

**Requirements:** §8.1 完成定义

**Dependencies:** U1-U9

**Files:**
- `src/agentkit/server/frontend/package.json`
- `src/agentkit/server/routes/chat.py`（仅验证上传接口未破坏）
- `src/agentkit/server/routes/experts.py`（仅验证专家列表未破坏）

**Approach:**
- 在前端目录运行 `npx vue-tsc --noEmit`。
- 运行 `npm run build`。
- 在仓库根目录运行 `ruff check src/` 与 `ruff format src/`。
- 运行 `python3 -m pytest tests/unit/ -x -q`；若 `test_rewoo_agent_yaml_loads` 失败则按已知问题跳过。
- 修复所有阻塞性错误后重新跑门。

**Test scenarios:**
- `vue-tsc --noEmit` 通过。
- `npm run build` 生成 `src/agentkit/server/static/` 且无报错。
- `pytest tests/unit/ -x -q` 通过（允许跳过已知失败）。
- `ruff check src/` 通过。

**Verification:** 三个命令均返回 0（或 pytest 仅因已知用例跳过）。

**Pair review:** 由子 agent 检查类型错误修复是否引入新的运行时问题、构建产物是否正常。

---

## Scope Boundaries

### In Scope

- 聊天主区 VI 令牌补齐与深色模式同步。
- `ChatMessage` 分发器与 `IChatMessage` 模型扩展。
- `TeamPlanCard`、`BoardBannerCard`、`BoardRoundCard`、`BoardConclusionCard`、`ErrorCard` 的升级/新建。
- `ChatInput` 的拖拽上传、清空、语义色按钮。
- `SystemMonitorPanel` 的「技能 / 系统 / 知识库」Tab 内容。
- `ChatPreviewView` 6 个样例场景精修。
- `BoardMeetingModal` VI 适配。
- 质量门（vue-tsc / build / ruff / pytest）。
- 每个开发单元后的结对代码审查。

### Out of Scope

- 侧边栏 `ChatSidebar`、顶部 `TopNav`、抽屉布局改造。
- 移动端响应式优化。
- 实际 WebSocket 数据流改造（仅前端渲染层适配）。
- 可访问性（a11y）专项审计。
- 虚拟滚动、消息懒加载等性能优化。
- 消息编辑 / 分支对话（Trae 范式）。

### Deferred to Follow-Up Work

- UserBubble / AssistantText 的 hover 操作条（编辑/复制/重新生成/反馈）—— 需求 §3.3 提到，但本期以复杂事件 card 和右屏为主，可在后续 PR 补齐。
- 流式光标竖线动画 —— 当前使用 `a-spin` 占位，后续可替换为闪烁竖线。

---

## Risks & Dependencies

| 风险 | 等级 | 缓解措施 |
|---|---|---|
| 扩展 `IChatMessage` 会影响现有对话持久化格式 | 中 | 新增字段均为 optional；后端返回 JSON 不校验未知字段时无影响。 |
| `SystemMonitorPanel` 嵌入完整 Skills/KB 组件可能触发重复请求 | 中 | 使用 store 缓存，Tab 切换不重新 fetch；`onMounted` 仍负责首次加载。 |
| Preview Scene 精修引入新的假数据类型与真实后端不一致 | 低 | Preview 明确为静态 mockup，不依赖真实 WebSocket。 |
| 后端 `pytest` 已有已知失败 `test_rewoo_agent_yaml_loads` | 低 | 按项目规则跳过该用例。 |
| 多单元改动叠加导致类型错误难以定位 | 中 | 每单元独立跑 `vue-tsc --noEmit`，不累积错误。 |

---

## Open Questions

以下问题来自需求文档 §9，实施前按默认值处理，后续可再调整：

1. **Q1** `@team` 蓝 vs `@board` 紫：保持当前分配（蓝=协作，紫=深度）。
2. **Q2** 流式光标：保持当前 spin 占位，竖线动画 deferred。
3. **Q3** 私董会按钮文字：保持「私董会」。
4. **Q4** 专家团按钮文字：保持「专家团」。
5. **Q5** 消息引用：本期不做。

---

## Success Criteria

- [x] `tokens.css` + `theme.ts` 新增令牌就位。
- [x] `BoardBannerCard` / `BoardRoundCard` / `BoardConclusionCard` 结构与样式就位。
- [ ] `/agent/preview` 6 个场景全部可见且可交互。
- [ ] 无硬编码旧色残留（U1、U9 收尾）。
- [ ] `vue-tsc --noEmit` 与 `npm run build` 通过。
- [ ] `ruff check src/` 通过。
- [ ] `pytest tests/unit/ -x -q` 通过（允许跳过已知失败）。
- [ ] 右屏 4 个 Tab 都有内容。
- [ ] ErrorCard 支持重试。
- [ ] 每个开发单元都经过子 agent 结对审查并确认无阻塞问题。

---

## Sources & Research

- Origin: [docs/brainstorms/2026-06-18-chat-area-vi-redesign-requirements.md](docs/brainstorms/2026-06-18-chat-area-vi-redesign-requirements.md)
- Local patterns: `src/agentkit/server/frontend/src/components/chat/messages/`, `src/agentkit/server/frontend/src/components/layout/RightPanel.vue`
