diff --git a/docs/design/v2.8-changelog.md b/docs/design/v2.8-changelog.md new file mode 100644 index 0000000..016715e --- /dev/null +++ b/docs/design/v2.8-changelog.md @@ -0,0 +1,59 @@ +# v2.8+ 变更记录 + +> 日期:2026-05-20 +> 作者:庞统 + +## 项目下拉改造 + +### 项目发现 +- 自动扫描 `~/.openclaw/sanguo_projects/sanguo_*` 目录(`discover_sanguo_projects()`) +- 启动时扫描 + 注册到 registry(`source: sanguo_projects_scan`) +- 下拉菜单:📋全部任务 / 📝一般任务(`_general`)/ 正式项目 / ➕新建 + +### 项目 CRUD +| 操作 | API | 说明 | +|------|-----|------| +| 自动发现 | 启动时自动 | 扫描 sanguo_projects 目录 | +| 手动创建 | `POST /api/projects` | 填写 id + name | +| 归档 | `POST /api/projects/{id}/archive` | status→archived,不显示 | +| 删除 | `DELETE /api/projects/{id}` | status→deleted(逻辑删除,不物理删) | +| 修改 | `PATCH /api/projects/{id}` | 更新 name/description | +| 移动任务 | `POST /api/projects/{id}/tasks/{tid}/move` | 跨项目移动任务 | + +### 项目状态 +- `active` → 正常显示 +- `archived` → 不显示(归档) +- `deleted` → 不显示(逻辑删除) +- 两个状态独立,不重叠 + +### 特殊项目 +| ID | 用途 | 显示 | +|----|------|------| +| `_general` | 一般任务(无归属) | 下拉菜单 + 看板 | +| `_mail` | 邮件系统 | 独立 Tab | + +## 轮询 → SSE 改造 + +### 改造前(轮询) +- 每 5-30 秒 `loadAll()` → `loadLive()` + `loadProjects()` + `loadV2Tasks()` +- 全量替换 `v2tasks` 数组 → 卡片全部重渲染 → 闪屏 + 输入失焦 + +### 改造后(SSE + 轻量轮询) +- **轮询**:只刷 `loadLive()`(ticker 数据),10-30 秒间隔 +- **SSE**:监听 `/api/events`,收到 `task_updated`/`task_completed`/`task_failed` 时只更新单个任务 +- **任务列表**:首次加载 / 切项目 / 手动刷新时才全量拉 +- **输入保护**:有输入焦点时跳过轮询,blur 2s 后补刷 + +## 铃铛通知中心 + +### 对接设计文档(topic7-9) +- 按推送级别分组(🔴🟡🟢🔵) +- 每条通知:时间 + 级别图标 + 内容摘要 + 关联任务链接 +- 展开操作按钮(查看任务 / 标记已读) +- 全部已读 +- 数据来源:未读邮件 + SSE 实时事件 + +## TaskModal 项目归属选择器 + +- 任务详情页显示当前所属项目 +- 下拉选择可移动任务到其他项目(调用 move API)