177 lines
4.6 KiB
Markdown
177 lines
4.6 KiB
Markdown
|
|
---
|
|||
|
|
name: todo
|
|||
|
|
description: |
|
|||
|
|
任务待办管理 skill。通过自然语言操作 MySQL 数据库中的待办事项。
|
|||
|
|
当用户提到待办、任务管理、todo list、添加任务、查看任务、标记完成、
|
|||
|
|
清理任务、归档旧任务时,使用此 skill。
|
|||
|
|
支持增删改查和基于 LRU 策略的自动归档。
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 任务待办管理
|
|||
|
|
|
|||
|
|
通过自然语言管理 MySQL 数据库中的待办事项,支持 LRU 自动淘汰。
|
|||
|
|
|
|||
|
|
## 前置条件
|
|||
|
|
|
|||
|
|
此 skill 依赖 MySQL MCP 工具。使用前需确认:
|
|||
|
|
|
|||
|
|
1. MySQL MCP 已配置(参考 `references/setup.md`)
|
|||
|
|
2. todos 表已创建(参考 `references/setup.md` 中的建表 SQL)
|
|||
|
|
|
|||
|
|
如果 MCP 工具不可用,引导用户参考 `references/setup.md` 完成配置。
|
|||
|
|
|
|||
|
|
## 自然语言操作映射
|
|||
|
|
|
|||
|
|
### 添加任务
|
|||
|
|
|
|||
|
|
用户说:"添加任务:XXX" / "新建一个待办:XXX" / "提醒我做 XXX"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
INSERT INTO todos (title, description, priority) VALUES ('<标题>', '<描述>', '<优先级>');
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- 优先级默认 `medium`,如果用户提到"紧急/urgent"则为 `urgent`,"重要"为 `high`
|
|||
|
|
- 添加后自动执行 LRU 检查(见淘汰策略)
|
|||
|
|
|
|||
|
|
### 查看待办
|
|||
|
|
|
|||
|
|
用户说:"我的待办" / "有什么任务" / "看看今天的任务"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
SELECT id, title, status, priority, last_accessed_at
|
|||
|
|
FROM todos
|
|||
|
|
WHERE status IN ('pending', 'in_progress')
|
|||
|
|
ORDER BY
|
|||
|
|
CASE priority
|
|||
|
|
WHEN 'urgent' THEN 0
|
|||
|
|
WHEN 'high' THEN 1
|
|||
|
|
WHEN 'medium' THEN 2
|
|||
|
|
WHEN 'low' THEN 3
|
|||
|
|
END,
|
|||
|
|
last_accessed_at DESC;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
查看后刷新访问时间:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
UPDATE todos SET last_accessed_at = NOW(), access_count = access_count + 1
|
|||
|
|
WHERE id IN (<查看到的 id 列表>);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 查看已完成
|
|||
|
|
|
|||
|
|
用户说:"已完成的任务" / "看看做完了哪些"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
SELECT id, title, priority, updated_at
|
|||
|
|
FROM todos WHERE status = 'done'
|
|||
|
|
ORDER BY updated_at DESC;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 标记完成
|
|||
|
|
|
|||
|
|
用户说:"完成 XXX" / "把这个标记为完成" / "做完了"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
UPDATE todos SET status = 'done', last_accessed_at = NOW(), access_count = access_count + 1
|
|||
|
|
WHERE id = <id> OR title LIKE '%<关键词>%';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果匹配多条,列出匹配项让用户确认。
|
|||
|
|
|
|||
|
|
### 标记进行中
|
|||
|
|
|
|||
|
|
用户说:"开始做 XXX" / "进行中"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
UPDATE todos SET status = 'in_progress', last_accessed_at = NOW(), access_count = access_count + 1
|
|||
|
|
WHERE id = <id>;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 更新任务
|
|||
|
|
|
|||
|
|
用户说:"修改 XXX 的描述为 YYY" / "把 XXX 的优先级改为 high"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
UPDATE todos SET <字段> = '<新值>', last_accessed_at = NOW(), access_count = access_count + 1
|
|||
|
|
WHERE id = <id>;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 删除任务
|
|||
|
|
|
|||
|
|
用户说:"删除任务 XXX" / "去掉这个待办"
|
|||
|
|
|
|||
|
|
**软删除(推荐)**:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
UPDATE todos SET status = 'archived' WHERE id = <id>;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**硬删除**(用户明确要求彻底删除时):
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
DELETE FROM todos WHERE id = <id>;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- 硬删除前必须确认,列出将被删除的事项
|
|||
|
|
- 默认使用软删除(归档),保护数据
|
|||
|
|
|
|||
|
|
### 搜索任务
|
|||
|
|
|
|||
|
|
用户说:"找一下关于 XXX 的任务"
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
SELECT id, title, description, status, priority
|
|||
|
|
FROM todos
|
|||
|
|
WHERE title LIKE '%<关键词>%' OR description LIKE '%<关键词>%'
|
|||
|
|
ORDER BY status, priority;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## LRU 淘汰策略
|
|||
|
|
|
|||
|
|
### 自动触发
|
|||
|
|
|
|||
|
|
每次 INSERT 后检查:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
SELECT COUNT(*) FROM todos WHERE status != 'archived';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
如果总数超过 100,执行归档。
|
|||
|
|
|
|||
|
|
### 归档逻辑
|
|||
|
|
|
|||
|
|
1. **优先归档已完成**:归档最久未访问的 `done` 事项(取最旧的 10 条)
|
|||
|
|
2. **其次归档待办**:如果仍超标,归档最久未访问的 `pending` 事项
|
|||
|
|
3. **保护进行中**:不归档 `in_progress` 状态的事项
|
|||
|
|
4. **告知用户**:归档时列出被归档的事项标题
|
|||
|
|
|
|||
|
|
### 手动触发
|
|||
|
|
|
|||
|
|
用户说:"清理旧任务" / "归档一些任务" / "整理一下待办"
|
|||
|
|
|
|||
|
|
执行同样的归档逻辑,但需要先告知用户当前待办数量,并询问是否确认清理。
|
|||
|
|
|
|||
|
|
## 交互原则
|
|||
|
|
|
|||
|
|
- **模糊匹配时确认**:如果用户说的关键词匹配多条任务,列出选项让用户确认
|
|||
|
|
- **操作前预览**:删除/归档操作前,显示受影响的事项列表
|
|||
|
|
- **优先级合理推断**:用户说"紧急""马上""ASAP" → urgent;"重要" → high;默认 → medium
|
|||
|
|
- **自然语言理解**:用户可能说"帮我记一下明天要买菜",理解为添加任务"买菜"
|
|||
|
|
- **状态转换合理**:不要让用户手动做不合理的状态跳转(如 archived → in_progress)
|
|||
|
|
|
|||
|
|
## 输出格式
|
|||
|
|
|
|||
|
|
查询结果以表格形式展示:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
| ID | 标题 | 状态 | 优先级 | 更新时间 |
|
|||
|
|
|----|------|------|--------|----------|
|
|||
|
|
| 1 | xxx | 待办 | 高 | 08-31 |
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
操作结果用简洁的确认语句:
|
|||
|
|
- ✓ 已添加任务:XXX
|
|||
|
|
- ✓ 已完成任务:XXX
|
|||
|
|
- ✓ 已归档 5 条旧任务
|