4.0 KiB
4.0 KiB
独立任务看板 PRD
目标
为 cc-web 增加一个与现有聊天功能解耦的任务看板。只有显式开启“加入任务看板”的会话才参与状态跟踪;Agent 可通过 MCP 主动上报,cc-web 生命周期 Hook 在缺少上报时提供保守兜底。完成状态与软归档分离。
用户场景
- 用户从普通聊天页开启“加入任务看板”,该会话立即出现在看板。
- 用户从任务看板创建会话,新会话默认开启任务跟踪。
- 用户查看系统固定状态列,并新增、编辑、排序或停用自定义状态。
- Agent 调用状态 MCP 上报处理中、等待用户、阻碍、完成或自定义状态。
- Agent 没有上报时,cc-web 根据 turn 生命周期和结构化事件更新基础状态或标记“未上报”。
- 用户手动归档已完成任务;以后可取消归档。归档不删除会话。
功能要求
任务跟踪开关
- 普通新对话默认
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 配置。
- 不把所有历史对话自动加入任务池。
- 不从自由文本强行推断任务完成。
- 不删除、移动或迁移现有会话文件。
- 不在三个并行实现对话中修改中心接线文件。
验收标准
- 现有普通会话默认不出现在任务看板。
- 开关启用后会话可进入看板,关闭后立即退出但状态保留。
- 系统状态存在,自定义状态可创建、编辑、排序、停用并安全迁移。
- 两个 MCP 工具可发现、可调用,并遵守来源会话和开关边界。
- cc-web 生命周期事件正确驱动基础状态,且不会把 turn 完成误判为任务完成。
- 归档不删除会话,重新发消息可恢复。
- 前端视图与现有 cc-web 风格一致,桌面和窄屏可用。
node --check、新模块单元测试和timeout 60s npm run regression全部通过。- 隔离测试服务完成真实浏览器验收;生产服务仅在重启门禁通过后重启。