前言¶
在 DSH 环境下,管理工作区内的日程与待办需要兼顾会话上下文与数据持久化。dsh-calendar-todo 插件通过将日历应用绑定到 DSH 文件夹,并补丁浏览器与 Bash 的时区采样,解决了跨时区计算与 UI 联动的痛点。
核心定位¶
DSH Web 插件:按文件夹组织的日历 + 待办应用。它支持 iCal 导入(如 Google Calendar)、双向联动的小日历界面,以及一套完整的对话工具集。
安装与启用¶
使用官方安装命令:
dsh plugin --profile web add dsh-calendar-todo
# 或
dsh plugin --profile web add https://github.com/qschen86/dsh-calendar-todo/releases/download/v0.2.0/dsh-calendar-todo-0.2.0.tgz
安装后,侧边栏会出现 📅 图标。点击进入日历模式,浏览器端与宿主端会自动进行布局补丁。
数据与工作区绑定¶
插件运行在一个文件夹上下文中:
- 默认路径:首次进入未配置时,自动创建 ~/.dsh/calendar-todo。
- 数据文件:dsh-calendar-todo.json,存储日历、待办及外部日历数据。
- 会话管理:该文件夹被注册为 workspace,对话内容归档于 ~/.dsh/sessions。日历模式下的对话列表会自动过滤为该文件夹的会话。
界面布局¶
日历模式采用专用布局,侧边栏图标显示“今日 X”计数。
- 左侧(精简对话):320px 宽度,仅保留当前会话的消息列表与输入框,其他会话管理功能移至设置。
- 中间(时间轴):按时间排序展示待办与日程,支持月份分组。进入时自动定位到今天。
- 顶部待办条:横向排列无时间的待办,支持优先级(高/中/低)、分类标签、置顶。点击可切换完成状态。
- 右侧(小日历):与时间轴双向联动,滚动列表时高亮日期,点击日期定位列表。
外部日历支持¶
通过 iCal 源支持 Google Calendar 等外部日历。
- 配置:在设置面板添加 ICS 地址(如 Google 日历的 webcal 链接)。
- 同步:默认 60 分钟间隔,支持手动立即同步。
- 重复规则:RRULE(如 DAILY)仅存储一次,查询时按需展开。
- 筛选:时间轴顶部可按来源(本地/外部/特定标签)筛选。
对话工具集成¶
插件提供 5 个核心工具,可直接在对话中使用:
calendar_todo_query:查询待办/日程,支持按 source 筛选。calendar_todo_add:新增待办(无时间),模型自动判断优先级与分类。calendar_todo_add_event:新增日程(带时间),用于“X 分钟后提醒”等场景。calendar_todo_update:标记完成或修改属性(优先级/分类/置顶)。calendar_todo_delete:删除条目。
判定逻辑:模型根据内容判断是日程还是待办。若意图不明确,通过卡片询问用户确认。
时区处理¶
插件强制使用 UTC+8(Asia/Shanghai):
- 浏览器端:补丁 Intl.DateTimeFormat.prototype.resolvedOptions,使浏览器上报东八区时区。
- 服务端:Bash 命令前置 export TZ=Asia/Shanghai,防止模型使用系统时间计算相对时间。
提醒机制¶
带时间的日程支持提醒:
- 会话内:在绑定工作区的会话中发送消息。
- Telegram:通过 dsh-telegram-bridge 插件发送通知(需配置 bot token 与授权 chat)。
配置参数¶
可通过环境变量调整默认行为:
- DSH_CALENDAR_TODO_SYNC_INTERVAL:同步间隔(分钟,默认 60)。
- DSH_CALENDAR_TODO_LOOKBACK_DAYS / DSH_CALENDAR_TODO_LOOKAHEAD_DAYS:重复日程展开窗口(默认 90 / 365)。
- DSH_CALENDAR_TODO_REMIND_MINUTES:提醒提前分钟数(默认 5)。
注意事项¶
- 依赖
dsh-client-ui-layout和dsh-workspace-dock进行布局补丁。 - 卸载不删除数据,数据存储在绑定文件夹与插件目录中。
- License: MIT。
总结¶
dsh-calendar-todo 是一个将日历功能深度集成到 DSH 工作流中的插件。它通过文件夹绑定、双向联动 UI 和对话工具,解决了日程管理的分散问题,并强制统一了时区计算逻辑。
链接:GitHub