Files

4.0 KiB
Raw Permalink Blame History

独立任务看板 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 偷偷开启、关闭或归档任务。

状态

  • 系统固定状态 IDunassignedin_progresswaiting_userblockedcompleted
  • 系统 ID 和语义不可删除;展示名称、颜色、顺序允许配置。
  • 自定义状态必须映射到一个系统 baseStatus,并包含名称、说明、颜色、顺序和启用状态。
  • 删除仍被任务引用的自定义状态前必须指定迁移目标。
  • 状态优先级:用户操作 > MCP 明确上报 > 生命周期 Hook > 默认状态。

MCP

  • ccweb_task_status_list:读取当前会话是否启用跟踪及可用状态定义。
  • ccweb_task_update:当前来源会话上报 statusIdreasonsummaryprogress
  • 跟踪关闭时 ccweb_task_update 返回 task_tracking_disabled,不得自动加入看板。
  • 不提供 Agent 归档 MCP。

生命周期 Hook

  • 使用 cc-web 内部事件,不修改用户 .codex/hooks.json
  • 处理 turn_starteduser_input_requestedturn_completedturn_faileduser_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. 隔离测试服务完成真实浏览器验收;生产服务仅在重启门禁通过后重启。