更新时间:2026-02-24
当前版本已经实现一个可运行的“对话任务看板”基线,核心目标是:
| 路径 | 职责 |
|---|---|
task-board/server.js |
Node 原生 HTTP 服务,提供静态资源与任务 CRUD API,持久化到 tasks.json |
task-board/public/index.html |
页面结构:顶部工具栏、侧边统计、SVG 画布、节点详情弹窗 |
task-board/public/app.js |
前端状态管理、树布局计算、SVG 绘制、节点交互、导出逻辑 |
task-board/public/styles.css |
低饱和粉色主题、状态色、连线样式、执行中虚线旋转动画、响应式布局 |
hooks/task-board-realtime/HOOK.md |
Hook 元数据,声明监听的 OpenClaw 事件 |
hooks/task-board-realtime/handler.js |
对话到任务节点的实时同步逻辑(含去重、补偿扫描、会话收尾) |
task-board/.sync-state.json |
Hook 同步状态(会话映射、计数器、已处理消息索引) |
task-board/tasks.json |
看板任务数据文件 |
服务:task-board/server.js
http + fs,无额外框架。字段(标准化后):
id:timestamp-random 形式字符串。name:节点名称,最长 120。parentId:父节点 id,根节点为 null。status:pending | in-progress | completed | bug。createdAt / updatedAt:ISO 时间。startTime / endTime:可选 ISO 时间。plannedApproach:计划说明(最多 2000)。bugDetails:Bug 终止说明(最多 2000)。notes:补充信息(最多 3000)。GET /api/tasks:返回任务列表。POST /api/tasks:创建任务(校验父节点存在)。PUT /api/tasks/:id:更新任务(校验状态、时间、父子环)。DELETE /api/tasks/:id:级联删除该节点及全子树。detectCycle)。in-progress 无 startTime 时自动填充。completed/bug 无 endTime 时自动填充。入口:task-board/public/app.js
linksLayer(连线)+ nodesLayer(节点)。buildTreeLayout 把数据组织成树:createdAt 排序。createdAt 排序。x 由深度决定,y 通过 DFS 叶子递增并把父节点放在子树中线。fitView 自动适配到当前节点包围盒。styles.css 的 :root 变量定义。pending 灰粉、in-progress 粉、completed 绿、bug 红粉。progress-ring 使用 stroke-dasharray + stroke-dashoffset 动画旋转虚线。入口:hooks/task-board-realtime/handler.js
HOOK.md 当前声明:
message:receivedmessage:sentagent:bootstrapcommand:newcommand:resetcommand:stopsessionKey 维护一个根节点(Conversation)。/new 和 /reset 时把当前会话根节点置为 completed,下次消息再开新根。sessionId,会从 ~/.openclaw/agents/<agent>/sessions/sessions.json 反查。sessionId.jsonl 与 sessionId-topic-*.jsonl 中选择最近修改的文件。sessionKey::messageId,无 messageId 时使用内容+时间 hash。task-board/.sync-state.json 保存:sessions:会话到根节点映射。counters:会话根节点编号计数。messages:已处理消息索引(防重复写入)。maxRememberedMessages 控制消息去重索引上限。parentId,缺少对“对话维度”的一级索引接口。conversationId -> nodes[] 与全量任务存储分离。GET /api/conversations 与 GET /api/tasks?conversationId=...。layout engines:tree(兼容模式)+ thought-chain(新模式)可切换。stepType, confidence, evidenceRef)。如果后续要拆目录,建议以 backend/, frontend/, sync-hook/, docs/ 四层分离,先保证 API 与布局引擎可独立迭代。