feat: overhaul task board and cross-conversation workflows
This commit is contained in:
42
.planning/2026-08-11-help/findings.md
Normal file
42
.planning/2026-08-11-help/findings.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# Findings & Decisions
|
||||
|
||||
## Requirements
|
||||
- 新增独立任务看板,不影响现有聊天、会话列表、MCP 和 Codex App 行为。
|
||||
- 普通对话默认不进入任务池;提供“加入任务看板”开关。
|
||||
- 支持系统固定状态与用户自定义状态。
|
||||
- Agent 可通过 MCP 主动上报;未上报时由 cc-web 生命周期 Hook 自动分类。
|
||||
- 归档由用户或服务端策略触发,不允许 Agent 隐式归档。
|
||||
- 三个实现对话完成后,必须由第四个集成对话统一接线和测试。
|
||||
- 集成测试通过且无其他 running 对话后才允许重启 cc-web。
|
||||
|
||||
## Research Findings
|
||||
- 当前会话列表只有运行态 isRunning,没有任务状态或归档字段。
|
||||
- cc-web 已能观察 turn started/completed、工具调用、用户输入等待和失败事件,可实现自身 Hook。
|
||||
- Codex Goal 只适用于 Codex App,不能作为跨 Agent 看板的唯一状态源。
|
||||
- 多个对话共享同一工作区,中心文件必须避免并发修改。
|
||||
- 项目必需命令是 `node --check` 与 `npm run regression`;不存在通用 lint/typecheck 脚本。
|
||||
- Trellis 任务已创建为 `.trellis/tasks/08-11-task-board` 并设为 current。
|
||||
- 共享数据、WebSocket、MCP、Hook 与文件所有权契约已写入该任务的 `info.md`。
|
||||
- 当前来源对话 ID 为 `56bb82c6-4fa3-4cb8-bb84-6969e6547d3a`,重启门禁只能排除该 ID。
|
||||
|
||||
## Technical Decisions
|
||||
| Decision | Rationale |
|
||||
|----------|-----------|
|
||||
| 系统状态使用稳定 ID,自定义状态映射到 baseStatus | 标签可编辑,同时保留自动化语义 |
|
||||
| taskTracking.enabled 控制是否进入任务池 | 关闭时不分类、不展示,也不等于归档 |
|
||||
| MCP、Hook、UI 共用一个任务状态服务 | 防止三套状态逻辑漂移 |
|
||||
| Hook 作为 MCP 缺失时的兜底,用户操作优先级最高 | 保证可控并降低误判影响 |
|
||||
| MCP 对话负责共享 TaskBoardService,Hook 对话只实现事件归约器 | 确保并行可实现且第四个对话可机械集成 |
|
||||
|
||||
## Issues Encountered
|
||||
| Issue | Resolution |
|
||||
|-------|------------|
|
||||
| 规划初始化目录名称不理想 | 继续复用,不影响功能代码与最终集成 |
|
||||
| 首次计划审查未通过 | 按四项阻断意见补齐契约、Trellis、测试和重启门禁后复审 |
|
||||
|
||||
## Resources
|
||||
- 参考图:sessions/_attachments/42432a7d-778d-4dca-8156-d5bd651d242d.png
|
||||
- 项目约束:AGENTS.md、.trellis/workflow.md
|
||||
- 前端实现对话:b94ec6fe-5438-48a3-9733-4028bfd9198f
|
||||
- MCP 实现对话:972a6903-4860-4558-9ab0-4e124bffa363
|
||||
- Hook 实现对话:27651660-a64d-4b01-8606-500468e9c599
|
||||
61
.planning/2026-08-11-help/progress.md
Normal file
61
.planning/2026-08-11-help/progress.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Progress Log
|
||||
|
||||
## Session: 2026-08-11
|
||||
|
||||
### Current Status
|
||||
- **Phase:** 4 - 集成返工:删除伪优先级并合并控制栏
|
||||
- **Started:** 2026-08-11
|
||||
|
||||
### Actions Taken
|
||||
- 已确认采用四个 cc-web 对话:前端、MCP、Hook、最终集成。
|
||||
- 已读取 planning-with-files、todo-list-csv、frontend-skill。
|
||||
- 已确定并行实现阶段不修改共享中心文件。
|
||||
- 已创建并启动 Trellis 任务 `08-11-task-board`。
|
||||
- 已写入 PRD、技术设计和并行集成契约。
|
||||
- 首次计划审查发现 4 个阻断问题,均已修正,等待复审。
|
||||
- 已通过 `ccweb_list_conversations` 记录当前来源对话 ID:`56bb82c6-4fa3-4cb8-bb84-6969e6547d3a`。
|
||||
- 计划第三次复审已通过,无阻断问题。
|
||||
- 已并行创建前端对话 `b94ec6fe-5438-48a3-9733-4028bfd9198f`,reply request `6f4c2836-f473-4cfe-97fa-fd3f58d356c4`。
|
||||
- 已并行创建 MCP 对话 `972a6903-4860-4558-9ab0-4e124bffa363`,reply request `c4c3b580-0678-4152-995c-9f6dcf7eebad`。
|
||||
- 已并行创建 Hook 对话 `27651660-a64d-4b01-8606-500468e9c599`,reply request `0997a46b-fe03-42cf-af1f-235a61aa5851`。
|
||||
- 三个 reply 均处于 waiting;首次 30 秒轮询尚无完成项。
|
||||
- `config/cross-conversation-replies.json` 因 requestReply 运行态自动更新,视为 cc-web 运行态记录,不由本任务手工修改。
|
||||
- 第二次轮询三路仍为 running;中心文件与功能白名单文件尚未出现写入,暂无冲突。
|
||||
- 第三次轮询三路仍为 running,子会话尚未持久化 assistant 终态消息,继续等待而不打断。
|
||||
- 三个 `codexapp-state.json` 持续刷新,说明 turn 仍有活动;会话 JSON 仍只含初始用户消息,尚未到终态持久化阶段。
|
||||
- 中断恢复后再次检查:三路 `turnStatus` 均为 `running`、`error=null`,没有等待用户输入;前端分支已开始落盘 `public/task-board.js`,其余分支仍在实现中。
|
||||
- 14:09 检查:前端与 Hook 已分别落盘 `public/task-board.js`、`lib/task-board-lifecycle.js`,仍在继续补齐模块和测试;MCP 分支仍运行且无错误,尚未返回终态。
|
||||
- 前端首轮在仅落盘 `public/task-board.js` 时异常提前结束:缺少 CSS、单测和最终说明,未计为通过。已向同一前端对话发送续做消息并成功恢复运行,没有新建替代对话。
|
||||
- 前端续做已补齐 `public/task-board.css`,正在编写契约单测;Hook 的模块与单测均已落盘并在自检;MCP 分支进入原子保存、回滚和状态错误码设计,三路仍无运行错误。
|
||||
- 一次 `ccweb_list_pending_replies` 监控调用在 60 秒后超时,已降级为读取本地会话运行态;实现本身无错误。前端三文件与 MCP 的 service/mcp 两文件均已落盘,MCP 单测尚待补齐。
|
||||
- MCP 分支已返回,且严格只新增 `lib/task-board-service.js`、`lib/task-board-mcp.js`、`scripts/task-board-service-unit.js`。主对话复验 3 个 `node --check` 和独立单测全部通过,MCP 分支验收通过。
|
||||
- 前端续做轮次已完整返回,严格只新增 `public/task-board.js`、`public/task-board.css`、`scripts/task-board-frontend-unit.js`。主对话复验语法和独立 MiniDOM 契约单测均通过,前端分支验收通过。
|
||||
- Hook 两个白名单文件的语法、独立单测,以及真实 service+lifecycle 跨模块冒烟均通过;但子对话仍处于运行态且未返回终态。尝试发送“停止修改并直接汇报”被 cc-web 以 `target_running` 拒绝,未打断其活动 turn。
|
||||
- Hook 收尾阶段持续高 token 运行且文件仍有变化;确认原生 `abort` 只中断目标 turn 后,定向结束该 Hook turn。会话与文件均保留,三路 pending reply 全部转为 ready。
|
||||
- 对 Hook 最终文件重新执行语法、独立单测和真实 service+lifecycle 跨模块冒烟,全部通过;三个独立实现分支正式验收完成,进入第四个集成对话阶段。
|
||||
- 已创建第四个集成对话 `c053ad60-c5d7-4480-a3ef-a118fa81b13d`,reply request `af555b18-177f-4d41-b2da-bb18e211e848`。中央接线文件仅由该对话独占,明确禁止重启生产服务和创建额外工作对话。
|
||||
- 集成对话已完成规划/契约及三个模块的第一轮阅读,继续核对独立单测与现有接线点;当前 `lastError=null`,尚未修改中央文件。
|
||||
- 集成对话已通过 codebase-memory 函数级定位并用 `rg` 交叉核验会话 IO、WebSocket 分发、Codex App 生命周期、MCP tools/list/call 及前端导航入口;仍处于只读设计阶段,中央文件保持未改。
|
||||
- 集成对话首轮在 `contextCompaction` 时空结束,未修改中央文件;已向同一对话续发精简指令并恢复运行,没有创建替代对话。续做轮次正在重载必要模块上下文,`lastError=null`。
|
||||
- 集成续做轮次完成服务端与生命周期入口核对后,已开始用 `FileChange` 修改 `server.js`;这是中央文件首次解冻写入,当前仍未启动或重启任何服务。
|
||||
- 集成对话已修改 `server.js`、`lib/ccweb-mcp-server.js`、`public/index.html`、`public/app.js`,完成生产服务实例、WS/MCP/生命周期桥接及前端面板/开关初步接入;主对话复验三份中央 JS 的 `node --check` 均通过,生产服务仍未重启。
|
||||
- 集成 turn 在文件稳定后出现无活动,已定向中断;cc-web 随后自动重新接管同一 Codex 线程并以新运行态继续,未新建对话。续跑已进入 `scripts/regression.js`,现有中央补丁全部保留。
|
||||
- 集成对话完成全部接线与专项修正:前端返工移除伪“新建任务”和刷新按钮、改为继承现有主题变量、将任务跟踪开关收敛为输入区上方 28px 透明单行;集成层仅删除 `public/app.js` 中失效的 `createSession` 适配器。
|
||||
- 语法检查、前端/服务与 MCP/生命周期独立单测、隔离集成测试、`timeout 60s npm run regression` 与 `git diff --check` 全部通过,完整回归输出 `Regression checks passed.`。
|
||||
- Firefox 153.0.3 已完成 washi/carbon、1440×900/500px 四组真实浏览器验收:主题色随主题切换,伪按钮数量为 0,跟踪开关可开关,状态管理、归档/恢复与窄屏横向滚动正常。
|
||||
- 浏览器与隔离服务已自然关闭,无端口或 WebDriver 残留;四个工作对话均已结束,准备执行生产重启门禁。
|
||||
- 用户提供真实页面截图后确认首轮视觉验收结论错误:任务跟踪控件虽为 28px,却在输入区上方独占一行;同时“会话优先级”没有任何生产写入入口,仅由测试夹具构造。已撤销 Phase 4/5 完成结论并中止生产重启。
|
||||
- 已退回原前端、状态服务和集成对话:前端删除 priority 全部界面/协议,服务删除无来源字段与过滤,集成负责把 `#task-tracking-control` 移入 `.chat-controls` 并重新执行真实浏览器验收。最终结论由主对话直接核对,不再以子对话口头报告代替验收。
|
||||
|
||||
### Test Results
|
||||
| Test | Expected | Actual | Status |
|
||||
|------|----------|--------|--------|
|
||||
| 工作区基线 | 识别已有改动并保护用户内容 | 初始化前 tracked worktree clean | PASS |
|
||||
| 集成语法与独立单测 | 中央 JS 语法及三个模块测试通过 | 全部退出码 0 | PASS |
|
||||
| 隔离集成与完整回归 | 集成链路和既有功能无回归 | `Task board integration checks passed.`;`Regression checks passed.` | PASS |
|
||||
| 真实浏览器验收 | 亮暗主题、桌面窄屏与核心交互通过 | Firefox 四组视口/主题证据通过 | PASS |
|
||||
|
||||
### Errors
|
||||
| Error | Resolution |
|
||||
|-------|------------|
|
||||
| init-session.sh 不支持 --help,误建规划目录 | 复用并改写为正式计划,未删除文件 |
|
||||
72
.planning/2026-08-11-help/task_plan.md
Normal file
72
.planning/2026-08-11-help/task_plan.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# Task Plan: 独立任务看板功能
|
||||
|
||||
## Goal
|
||||
在不破坏现有会话功能的前提下,实现可选加入任务池的任务看板、状态 MCP 与 cc-web 生命周期 Hook,并完成集成回归、视觉验收和安全重启。
|
||||
|
||||
## Current Phase
|
||||
Phase 4
|
||||
|
||||
## Phases
|
||||
|
||||
### Phase 1: 完成规划与基线检查
|
||||
- [x] 固化功能边界、共享接口和互斥文件范围
|
||||
- [x] 建立并审查执行计划与 TODO CSV
|
||||
- [x] 创建并启动 Trellis 任务,完成 PRD、技术设计与上下文配置
|
||||
- [x] 记录现有工作区与测试基线
|
||||
- **Status:** complete
|
||||
|
||||
### Phase 2: 并行完成三个独立实现对话
|
||||
- [x] 前端对话仅实现 `public/task-board.*` 与独立单测
|
||||
- [x] MCP 对话负责 `lib/task-board-service.js`、MCP 适配模块与独立单测
|
||||
- [x] Hook 对话仅实现生命周期模块与独立单测
|
||||
- **Status:** complete
|
||||
|
||||
### Phase 3: 汇总并审查三路产物
|
||||
- [x] 等待三个对话全部完成并收集回复
|
||||
- [x] 检查文件冲突、接口契约与独立性
|
||||
- **Status:** complete
|
||||
|
||||
### Phase 4: 创建集成对话并完成接线
|
||||
- [x] 创建第四个集成对话
|
||||
- [ ] 接入现有 server、MCP、WebSocket 与页面入口
|
||||
- [x] 保持普通对话默认不进入任务池
|
||||
- [ ] 删除无数据来源的会话优先级,并将跟踪开关并入现有会话控制栏
|
||||
- **Status:** in_progress
|
||||
|
||||
### Phase 5: 运行集成回归与视觉验收
|
||||
- [ ] 执行 `node --check`、三个独立单测和 `timeout 60s npm run regression`
|
||||
- [ ] 使用隔离测试服务和真实浏览器验证看板交互与响应式
|
||||
- [ ] 核对现有核心功能无回归
|
||||
- [ ] 由主对话对照真实页面亲自复核控制栏单行布局与功能来源
|
||||
- **Status:** pending
|
||||
|
||||
### Phase 6: 审核重启条件并重启服务
|
||||
- [ ] 调用 `ccweb_list_conversations(status=running)`,仅排除来源 ID `56bb82c6-4fa3-4cb8-bb84-6969e6547d3a`
|
||||
- [ ] 确认四个工作对话均 idle,且 pending replies 无 waiting/delivering
|
||||
- [ ] 满足条件后执行 pm2 restart ccweb --update-env
|
||||
- [ ] 完成服务健康检查
|
||||
- **Status:** pending
|
||||
|
||||
### Phase 7: 清理临时跟踪并交付
|
||||
- [ ] 完成最终变更审查与测试摘要
|
||||
- [ ] 同步并清理 TODO CSV
|
||||
- [ ] 交付功能、风险和验证结果
|
||||
- **Status:** pending
|
||||
|
||||
## Decisions Made
|
||||
| Decision | Rationale |
|
||||
|----------|-----------|
|
||||
| 三个实现对话只新增或修改各自边界内文件,中心文件由第四个集成对话统一修改 | 避免共享工作区并发写冲突 |
|
||||
| 使用 cc-web 自身生命周期事件,不自动注入用户 Codex Hook | 保持功能独立并避免污染项目配置 |
|
||||
| 任务跟踪默认关闭,从看板创建的会话默认开启 | 普通简单对话不进入任务池 |
|
||||
| 归档采用软归档,与任务状态分离 | 可恢复、可审计,不影响原会话历史 |
|
||||
| MCP 对话拥有共享 TaskBoardService;Hook 通过依赖注入调用它 | 消除两个后端对话重复实现状态模型的风险 |
|
||||
| 共享契约固定在 `.trellis/tasks/08-11-task-board/info.md` | 三个并行对话与第四个集成对话有同一事实来源 |
|
||||
|
||||
## Errors Encountered
|
||||
| Error | Resolution |
|
||||
|-------|------------|
|
||||
| init-session.sh 将 --help 当成任务名并创建 2026-08-11-help | 保留该目录并改写为本任务正式规划,避免未经确认删除或移动文件 |
|
||||
| 首次计划审查发现并行边界、共享服务、Trellis 和重启门禁不够具体 | 已补 PRD、技术契约、明确文件所有权、验证命令和会话检查入口 |
|
||||
| Hook 子对话收尾阶段长时间高 token 运行且不返回终态 | 独立测试通过后使用现有 WebSocket `abort` 仅中断该目标 turn;其最终文件随后重新验收通过 |
|
||||
| 首轮视觉验收只检查跟踪控件自身高度,未检查它是否占用独立行;同时未追查会话优先级的数据生产入口 | 判定首轮验收无效并中止重启;重新打开集成阶段,删除伪优先级并要求跟踪控件与既有会话控制同一行 |
|
||||
Reference in New Issue
Block a user