470 lines
24 KiB
Markdown
470 lines
24 KiB
Markdown
---
|
||
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`
|