Files

80 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 独立任务看板 PRD
## 目标
为 cc-web 增加一个与现有聊天功能解耦的任务看板。只有显式开启“加入任务看板”的会话才参与状态跟踪;Agent 可通过 MCP 主动上报,cc-web 生命周期 Hook 在缺少上报时提供保守兜底。完成状态与软归档分离。
## 用户场景
1. 用户从普通聊天页开启“加入任务看板”,该会话立即出现在看板。
2. 用户从任务看板创建会话,新会话默认开启任务跟踪。
3. 用户查看系统固定状态列,并新增、编辑、排序或停用自定义状态。
4. Agent 调用状态 MCP 上报处理中、等待用户、阻碍、完成或自定义状态。
5. Agent 没有上报时,cc-web 根据 turn 生命周期和结构化事件更新基础状态或标记“未上报”。
6. 用户手动归档已完成任务;以后可取消归档。归档不删除会话。
## 功能要求
### 任务跟踪开关
- 普通新对话默认 `taskTracking.enabled=false`。
- 从任务看板创建的会话默认 `true`。
- 关闭开关后不进入看板、不运行自动分类;保留已有状态用于审计。
- Agent 不能通过状态 MCP 偷偷开启、关闭或归档任务。
### 状态
- 系统固定状态 ID:`unassigned`、`in_progress`、`waiting_user`、`blocked`、`completed`。
- 系统 ID 和语义不可删除;展示名称、颜色、顺序允许配置。
- 自定义状态必须映射到一个系统 `baseStatus`,并包含名称、说明、颜色、顺序和启用状态。
- 删除仍被任务引用的自定义状态前必须指定迁移目标。
- 状态优先级:用户操作 > MCP 明确上报 > 生命周期 Hook > 默认状态。
### MCP
- `ccweb_task_status_list`:读取当前会话是否启用跟踪及可用状态定义。
- `ccweb_task_update`:当前来源会话上报 `statusId`、`reason`、`summary`、`progress`。
- 跟踪关闭时 `ccweb_task_update` 返回 `task_tracking_disabled`,不得自动加入看板。
- 不提供 Agent 归档 MCP。
### 生命周期 Hook
- 使用 cc-web 内部事件,不修改用户 `.codex/hooks.json`。
- 处理 `turn_started`、`user_input_requested`、`turn_completed`、`turn_failed`、`user_message_received`。
- `turn_started` 可进入处理中;结构化用户输入进入等待用户;失败进入阻碍。
- `turn_completed` 不等于任务完成。若本轮没有 MCP 上报,保留业务状态并标记 `reportingStatus=missing`。
- 已归档会话收到新用户消息时自动取消归档并进入处理中。
### 看板
- 提供独立任务看板视图,不替换现有聊天页与会话列表。
- 支持搜索、会话/Agent 筛选、优先级筛选、横向状态列、归档视图和状态管理面板。
- 卡片点击打开原会话;运行态和任务态分开显示。
- 支持桌面横向看板和窄屏横向滚动,不破坏现有响应式布局。
### 归档
- 归档使用 `archivedAt`/`archivedBy` 软标记,不移动或删除会话文件。
- 用户可手动归档/取消归档。
- 自动归档策略保留扩展点,本期不默认启用定时归档。
## 非目标
- 不修改 Codex Hook 配置。
- 不把所有历史对话自动加入任务池。
- 不从自由文本强行推断任务完成。
- 不删除、移动或迁移现有会话文件。
- 不在三个并行实现对话中修改中心接线文件。
## 验收标准
1. 现有普通会话默认不出现在任务看板。
2. 开关启用后会话可进入看板,关闭后立即退出但状态保留。
3. 系统状态存在,自定义状态可创建、编辑、排序、停用并安全迁移。
4. 两个 MCP 工具可发现、可调用,并遵守来源会话和开关边界。
5. cc-web 生命周期事件正确驱动基础状态,且不会把 turn 完成误判为任务完成。
6. 归档不删除会话,重新发消息可恢复。
7. 前端视图与现有 cc-web 风格一致,桌面和窄屏可用。
8. `node --check`、新模块单元测试和 `timeout 60s npm run regression` 全部通过。
9. 隔离测试服务完成真实浏览器验收;生产服务仅在重启门禁通过后重启。