sustain-todo v1.0.2
持续待办管理系统,提供智能分类、自动提醒、重复任务和夜间免打扰功能。
何时使用
- 用户说"添加待办"、"提醒我"、"做个任务"
- 用户问"今日待办"、"今天有什么事"、"查看所有任务"
- 用户说"完成了"、"标记完成"、"搞定"
- 用户说"每天提醒我"、"每周重复"、"每月自动"
- 用户问"有什么逾期任务"、"有哪些待办"
- 用户设置"夜间不提醒"、"免打扰"
功能说明
1. 添加待办任务
使用 scripts/todo_manager.py 中的 add_todo() 函数:
from todo_manager import add_todo
# 基本用法 - 不重复
add_todo(title="开会", description="项目讨论", category=None, due_datetime="今天 14:00", repeat_type="none")
# 每天重复
add_todo(title="健身", description="30分钟", "健康", "今天 18:00", repeat_type="daily")
# 每周重复
add_todo(title="写周报", "每周一次", "工作", "今天 17:00", repeat_type="weekly")
# 每月重复
add_todo(title="交水电费", "每月自动", "生活", "今天 20:00", repeat_type="monthly")
# 自动分类
add_todo(title="买牛奶") # 自动分类为"购物"
重复类型说明:
- none - 不重复(默认)
- daily - 每天重复
- weekly - 每周重复
- monthly - 每月重复
支持的时间描述:
- "今天 14:00"、"明天 9点"、"后天 10:30"
- "周一 14:00"、"周三下午3点"
- "2小时后"、"30分钟后"
自动分类规则:
- 工作:会议、报告、邮件、文档、项目、代码、bug、需求
- 学习:学习、阅读、课程、练习、考试、论文
- 健康:运动、健身、跑步、体检、就医
- 购物:买、购买、下单、快递、购物
- 生活:家务、清洁、做饭、缴费、预约
2. 查看待办任务
使用 list_todos() 函数:
from todo_manager import list_todos
# 今日待办
today_todos = list_todos("today")
# 所有待办
all_todos = list_todos("all")
# 逾期任务
overdue = list_todos("overdue")
# 已完成
completed = list_todos("completed")
输出示例:
今日待办(3项):
O 写周报 - 工作 - 17:00 | 重复: weekly
O 健身 - 健康 - 18:00 | 重复: daily
O 买牛奶 - 购物 | 无截止时间
3. 完成任务
使用 complete_todo() 函数:
from todo_manager import complete_todo
# 标记完成
success = complete_todo(task_id)
注意: 重复任务标记为完成后,当天不再提醒,但会在次日自动重新激活。
4. 夜间免打扰
使用 is_night_time() 和 set_night_mode() 函数:
from todo_manager import is_night_time, set_night_mode, get_night_mode
# 检查是否在免打扰时段
if is_night_time():
print("当前处于夜间免打扰时段,不发送提醒")
# 查看设置
config = get_night_mode()
# 返回: {"enabled": True, "start": "22:00", "end": "08:00"}
# 修改设置
set_night_mode(enabled=True, start="23:00", end="07:00")
set_night_mode(enabled=False)
工作流程
用户说"添加待办"
- 解析用户输入,提取任务标题、描述、截止时间
- 如果有"每天/每周/每月"关键词,设置 repeat_type
- 调用
add_todo()添加任务 - 返回确认信息
示例:
- 用户:"每天提醒我健身"
- 回复:"已添加待办:健身(健康),每天 18:00 重复"
- 用户:"每周写周报"
- 回复:"已添加待办:写周报(工作),每周重复"
用户说"查看待办"
- 判断查看类型(今日/全部/逾期/已完成)
- 调用
list_todos()获取任务 - 按分类和截止时间排序显示
示例:
- 用户:"今日待办"
- 回复:
今日待办(3项):
○ 写周报 - 工作 - 17:00
○ 健身 - 健康 - 18:00
○ 买牛奶 - 购物
用户说"完成任务"
- 根据任务标题或ID找到对应任务
- 调用
complete_todo()标记完成 - 返回确认信息
示例:
- 用户:"完成了健身"
- 回复:"已将'健身'标记为完成(今天不再提醒)"
用户说"夜间不提醒"
- 调用
set_night_mode()修改设置 - 返回确认信息
示例:
- 用户:"开启夜间免打扰"
- 回复:"已开启夜间免打扰(22:00-08:00),此期间不会发送提醒"
提醒逻辑
每小时静默后台检查
调用 check_and_remind() 函数,这是后台静默检查器,每小时自动调用:
from todo_manager import check_and_remind, is_night_time
# 获取需要提醒的任务
tasks_to_remind = check_and_remind()
if tasks_to_remind:
print(f"[提醒] 你有 {len(tasks_to_remind)} 项任务需要关注:")
for task in tasks_to_remind:
print(f" - {task['title']} [{task['category']}]")
else:
print("所有任务已完成,无需提醒")
提醒规则:
- 当天未完成任务:每个整点自动提醒
- 逾期任务:每个整点自动提醒
- 夜间免打扰时段(默认 22:00-08:00):不发送提醒
- 任务标记为完成后:当天停止提醒
重复任务提醒
daily- 每天 00:00 自动重新激活,继续整点提醒weekly- 每周一 00:00 自动重新激活monthly- 每月1日 00:00 自动重新激活
数据存储
所有数据存储在 ~/.workbuddy/skills/todo-remind/data/todos.db(SQLite 数据库)中,包含两个表:
todos: 待办任务(包含 repeat_type 重复类型)settings: 用户设置(如夜间免打扰配置)
数据持久化保存,重启后不丢失。
使用示例
from todo_manager import add_todo, list_todos, complete_todo, check_and_remind, is_night_time
# 添加每天重复的任务
add_todo("晨跑", "5公里", "健康", "07:00", repeat_type="daily")
# 添加每周重复的任务
add_todo("团队周会", "讨论进度", "工作", "周一 10:00", repeat_type="weekly")
# 添加每月重复的任务
add_todo("交房租", "每月15号", "生活", "15 09:00", repeat_type="monthly")
# 查看今日待办
today = list_todos("today")
for todo in today:
print(f"{todo['title']} - {todo['category']} - {todo['due_datetime']}")
# 标记完成
complete_todo(1)
# 后台静默检查(每小时调用一次)
tasks = check_and_remind()
if tasks and not is_night_time():
for task in tasks:
print(f"提醒:{task['title']}")