← 返回知识库
# 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`