← 返回知识库 # 5号 任务看板升级 — 需求说明书 > 版本:v1 > 下发对象:@trae > 发起人:hermes --- ## 一、背景与目的 ### 1.1 现在有什么 - 5号 已有看板 web 页面(http://localhost:18900/kanban/),标题"🐜 蚂蚁帝国 · 统一看板" - 看板服务端 `/usr/local/bin/kanban-server.py`(514 行 Python) - 数据存储 `/data/kanban/tasks.json` - 已有 GDrive 同步代码(`scan_gdrive_tasks`/`write_gdrive_file`/`merge_tasks`),当前默认关闭 - Google Drive TaskBoard 目录结构已标准化: ``` /mnt/gdrive/TaskBoard/ ├── 01_任务投递/ ← 新任务 .md 文件 ├── 02_执行中/ ← 认领后移过来 ├── 03_已完成/ ← 完成后移过来 ├── 04_各分身状态/ ← 各 Agent 心跳 ├── 05_经验库/ ← 参考文档 └── 06_路由配置/ ← 规则 ``` - Agent 写 .md 文件到 `/root/taskboard/` → rclone 每5分钟同步到 Google Drive ### 1.2 要解决什么问题 1. **看板数据孤岛** — 当前看板数据在 `/data/kanban/tasks.json`,Agent 的 .md 任务文件在 `/root/taskboard/`,两套数据不同步 2. **Agent 写任务看不到** — 云端 Agent 写了 .md 任务卡片后,人要在看板上立刻看见 3. **看板上操作不回写** — 人在看板上改了状态,Agent 那边不知道 4. **Agent 状态不可见** — 各 Agent 在忙什么、在线还是离线,看板看不到 ### 1.3 实现目标 **一条线打通**: ``` Agent 写 .md → Google Drive → 看板 web 页面自动展示 人看板操作 → 回写 .md → Agent 读到 ``` ## 二、功能需求 ### 2.1 看板数据源切换(核心) **当前**:数据源是 `/data/kanban/tasks.json` **改为**:数据源是 `/mnt/gdrive/TaskBoard/` 下的 .md 文件 **注意**:飞书桥接(kanban_feishu_bridge.py)已对接 kanban API,所以只要看板数据源切到 GDrive,桥接自动跟着同步到飞书,不需要改桥接脚本。 | 看板列 | 对应目录 | |:-------|:---------| | 📥 待处理 | `01_任务投递/` | | 🔄 执行中 | `02_执行中/` | | ✅ 已完成 | `03_已完成/` | 每个 .md 文件 = 一张看板卡片。看板页面直接读 .md 文件渲染。 ### 2.2 .md 任务卡片解析 ```markdown # 任务标题 ## 基本信息 - 发起人:hermes/trae/codex/boss - 负责人:@trae / @hermes / @codex - 优先级:P0/P1/P2 - 创建时间:YYYY-MM-DD HH:mm ## 任务描述 ... ``` 看板从 .md 提取: - 标题 → 卡片标题 - 负责人 → 卡片标签(颜色区分) - 优先级 → 优先级标记(P0 红色、P1 黄色、P2 灰色) - 发起人 → 来源标记 - 文件名中的 `@负责人` → 路由标签 ### 2.3 看板页面展示 保留现有暗色主题风格,优化: | 元素 | 说明 | |:-----|:------| | 列标题 | 显示该列任务数量 | | 卡片 | 标题、负责人标签(彩色)、优先级标记、时间 | | 悬浮效果 | 鼠标悬停显示完整描述 | | 刷新按钮 | 手动重新扫描 GDrive | | 统计栏 | 总计任务数、各状态分布 | ### 2.4 看板操作回写 在看板上操作(拖动卡片改变状态)时,同步修改 .md 文件的位置: ``` 人在看板把卡片从"待处理"拖到"执行中" → 对应 .md 文件从 01_任务投递/ 移到 02_执行中/ → Agent 下次读目录就知道状态变了 ``` ### 2.5 Agent 状态展示 读取 `04_各分身状态/` 目录下的文件,在页面顶部显示: ``` 🟢 @hermes 工作中 🔴 @trae 离线 🟡 @knowledge-miner 空闲 ``` 状态判定规则: - 状态文件 5 分钟内更新过 → 🟢 工作中 - 状态文件 30 分钟内更新过 → 🟡 空闲 - 状态文件超过 30 分钟 → 🔴 离线 ### 2.6 API 保持兼容 现有 API 接口必须保留: | 接口 | 方法 | 用途 | |:-----|:----|:------| | `/kanban/` | GET | 看板页面(HTML) | | `/kanban/report` | POST | Agent 提交任务(JSON) | | `/kanban/api/tasks` | GET | 获取任务列表(JSON) | Agent 提交任务时,同时写入 .md 文件到 `01_任务投递/`。 ## 三、约束条件 1. **不改 Agent 侧行为** — Agent 还是只读写 .md 文件,不看板 API 2. **性能** — 看板页面加载 < 2 秒(GDrive 同步有延迟正常,但页面响应要快) 3. **兼容** — 保留 `/data/kanban/tasks.json` 的旧数据,迁移完成后可删除 4. **不引入新依赖** — 用 Python 标准库 + 已有依赖 ## 四、验收标准 - [ ] 看板页面展示 `01_任务投递/` 中的 .md 文件为"待处理"卡片 - [ ] 看板页面展示 `02_执行中/` 中的 .md 文件为"执行中"卡片 - [ ] 看板页面展示 `03_已完成/` 中的 .md 文件为"已完成"卡片 - [ ] 卡片显示标题、负责人标签(@xxx 彩色)、优先级(P0/P1/P2 颜色标记) - [ ] 页面顶部显示各 Agent 在线状态(🟢🟡🔴) - [ ] 手动刷新按钮有效 - [ ] `POST /kanban/report` 新提交的任务出现在看板和 `01_任务投递/` 中 - [ ] 不存在 .md 文件时的页面友好提示 - [ ] 页面加载时间 < 2 秒 ## 五、已有资源 - 5号服务器,Ubuntu - 看板服务:`/usr/local/bin/kanban-server.py`(514 行)监听 `127.0.0.1:18900` - nginx 已反代:`/kanban/` → `127.0.0.1:18900` - GDrive 挂载:`/mnt/gdrive/`(rclone fuse,读写) - TaskBoard 目录:`/mnt/gdrive/TaskBoard/` - 本地同步目录:`/root/taskboard/` - 现有 cron:每5分钟 `rclone sync /root/taskboard/ xinan-gdrive:TaskBoard`