Files
my-skills/todo/references/setup.md
T
wonder be7720e732 feat: 初始化 skills 仓库,添加 wiki 和 todo 两个 skill
- 添加 wiki skill:文档站管理,支持向 MkDocs 文档站添加/更新技术文档
  - SSH 连通性检查脚本
  - 文章模板参考(标准格式:摘要→核心概念→详解→代码→陷阱→练习题)
  - mkdocs.yml 导航结构参考
- 添加 todo skill:任务待办管理,通过自然语言操作 MySQL 待办事项
  - LRU 淘汰策略(基于 last_accessed_at)
  - MySQL MCP 配置指南及建表 SQL
  - 自然语言到 SQL 的映射规则
- 添加 README.md 说明文档
2026-08-31 10:30:53 +08:00

113 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Todo Skill 环境配置指南
## 1. 安装 MySQL MCP Server
推荐使用 `@benborla29/mcp-server-mysql`(支持读写操作)。
### 配置方式
在项目的 `.mcp.json` 文件中添加(或在 `~/.claude.json` 中配置):
```json
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": ["-y", "@benborla29/mcp-server-mysql"],
"env": {
"MYSQL_HOST": "<替换为你的主机地址>",
"MYSQL_PORT": "<替换为你的端口,默认 3306>",
"MYSQL_USER": "<替换为你的用户名>",
"MYSQL_PASSWORD": "<替换为你的密码>",
"MYSQL_DATABASE": "<替换为你的数据库名>"
}
}
}
}
```
### 验证 MCP 可用
配置完成后重启 Claude Code,然后尝试:
- 列出数据库中的表
- 执行一条简单查询
如果 MCP 工具可用,会看到 `mysql` 相关的工具。
---
## 2. 创建 todos 表
在目标数据库中执行以下 SQL:
```sql
CREATE TABLE IF NOT EXISTS todos (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(500) NOT NULL COMMENT '任务标题',
description TEXT COMMENT '任务描述',
status ENUM('pending', 'in_progress', 'done', 'archived') NOT NULL DEFAULT 'pending' COMMENT '状态: pending-待办, in_progress-进行中, done-已完成, archived-已归档',
priority ENUM('low', 'medium', 'high', 'urgent') NOT NULL DEFAULT 'medium' COMMENT '优先级: low-低, medium-中, high-高, urgent-紧急',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
last_accessed_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后访问时间(LRU 淘汰依据)',
access_count INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '访问次数',
INDEX idx_status (status),
INDEX idx_lru (last_accessed_at),
INDEX idx_priority_status (priority, status),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='待办事项表,支持 LRU 淘汰策略';
```
### 字段说明
| 字段 | 类型 | 说明 |
|------|------|------|
| id | BIGINT UNSIGNED | 自增主键 |
| title | VARCHAR(500) | 任务标题,必填 |
| description | TEXT | 任务描述,可选 |
| status | ENUM | 状态:pending / in_progress / done / archived |
| priority | ENUM | 优先级:low / medium / high / urgent |
| created_at | DATETIME | 创建时间,自动填充 |
| updated_at | DATETIME | 更新时间,自动刷新 |
| last_accessed_at | DATETIME | 最后访问时间,每次查看/更新时刷新 |
| access_count | INT UNSIGNED | 访问计数,每次访问 +1 |
---
## 3. LRU 淘汰策略
### 原理
基于 `last_accessed_at` 字段实现 LRU(Least Recently Used)淘汰:
- 每次查看、更新 todo 时,刷新 `last_accessed_at` 为当前时间,`access_count` +1
- 当待办事项总数超过阈值(默认 100 条非 archived 记录)时,自动触发归档
- 归档优先级:先归档最久未访问的 `done` 事项,再归档最久未访问的 `pending` 事项
### 归档 SQL
```sql
-- 查询非 archived 的事项总数
SELECT COUNT(*) FROM todos WHERE status != 'archived';
-- 归档最久未访问的已完成事项(取最旧的 10 条)
UPDATE todos
SET status = 'archived'
WHERE status = 'done'
ORDER BY last_accessed_at ASC
LIMIT 10;
-- 如果仍然超标,归档最久未访问的待办事项
UPDATE todos
SET status = 'archived'
WHERE status = 'pending'
ORDER BY last_accessed_at ASC
LIMIT 10;
```
### 触发时机
- 每次 INSERT 新事项后,检查总数是否超标
- 用户主动要求"清理"或"归档旧任务"时
- 不会自动归档 `in_progress` 状态的事项(保护正在做的任务)