dsh-calendar-todo

前言

在 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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜