dsh-ai-calendar:把 AI 智能日历嵌进 DeepSeek Harness 的插件

前言

做 Agent 的人大多遇到过两件事:一边是 Harness 里的对话和任务,一边是另一套日历 / 待办系统,两边的提醒和记录对不上。要么手动复制,要么写脚本同步。dsh-ai-calendar 处理的是后一种情况:它把一套日历界面直接嵌进 DeepSeek Harness 的侧栏,同时给 Agent 暴露一组日历工具,并且把日历自带的 AI 助手换成 Harness 已配置的 DeepSeek 路由,不再单独申请 key。

下面介绍这个插件是什么、怎么装、怎么用、有哪些坑。

这是什么

dsh-ai-calendar 是 dengyinxi100-crypto 维护的 DeepSeek Harness 插件,npm 包名 dsh-ai-calendar,仓库 dengyinxi100-crypto/ai-calendar-deepseek-harness。当前版本 1.2.1,许可证为 UNLICENSED(非开源许可,使用前需自行确认授权范围)。

它解决三件事:

  1. 在 Harness 侧栏增加「日历」入口,主区域嵌入完整日历界面;
  2. 挂一个可拖拽、可缩放的定时任务浮窗,不打开日历面板也能收到提醒;
  3. 给 Agent 注册一组日历工具,并让 AI 直接执行新建 / 修改 / 删除记录。

日历自身的多模型 AI 助手被替换为 Harness 里已配置的模型,按 token 计费,不额外填 key。

安装与启用

前置要求:Node.js ≥ 20,DeepSeek Harness(含 Web GUI),以及能编译或下载 better-sqlite3 的平台。

方式一,直接在 Harness 的插件管理里安装,填 npm 包名:

dsh-ai-calendar

也可以填本地目录:

file:F:/path/to/dsh-ai-calendar

方式二,手动装进 profile:

cd ~/.dsh/profiles/desktop
pnpm add dsh-ai-calendar

然后确认 package.json 的 dsh.profile.bundles 里包含 dsh-ai-calendar。

装完必须重启一次 DeepSeek Harness,侧栏才会出现「日历」。原因是宿主插件模块只在启动时加载一次,插件升级后也要重启才生效;client / shim 部分刷新页面即可。

侧栏面板与定时任务浮窗

侧栏出现「日历」入口,未完成任务数用小徽标显示。点击后主区域嵌入完整日历,包含月视图、时间线、任务看板、日志四种视图。面板顶部显示当日消耗,形如 DeepSeek API · 付费 · 今日 ¥0.0000 / 0 tok,悬停可看到总计、调用次数、输入输出 token。

左下角挂一个定时任务浮窗,可拖动、右下角可缩放,位置和尺寸会记住。浮窗显示到点提醒(红色强调条加「到点」胶囊)、接下来 4 条提醒、未完成任务数,点条目直接跳到日历面板。提醒到点自动弹出并高亮 2.6 秒,× 或日历面板里「主题设置 → 悬浮窗」开关都能关掉。浮窗不依赖日历面板是否打开:只要 Harness 开着,它每 15 秒轮询一次后端。

Agent 日历工具

插件注册了 6 个工具:

工具 作用
calendar_status 后端状态、端口、数据路径、记录总数
calendar_list_logs 按日期区间、是否周期、是否任务查询
calendar_create_log 新建日志或任务
calendar_update_log 修改已有记录
calendar_delete_log 删除记录
calendar_summarize 读真实日志后让 DeepSeek 生成中文总结

Agents 在任务里可以直接调用这些工具管理日历数据,不需要走 HTTP 接口自行拼装。

AI 接管

AI 接管走 /api/ai/chat:插件把用户消息连同数据库摘要(总量、今天与之后的量、最近记录含 id)一起喂给模型。模型返回 {"reply": "...", "ops": [...]},插件真正执行 create / update / delete,再按执行结果回一句人话。

回复下方有一行淡灰色标注,形如 模型 deepseek-official/deepseek-flash · 入 N / 出 M tokens · ¥0.0000。界面不显示 SQL、provider id 或技术细节。

配置

全部可选,通过环境变量传入。

变量 默认 说明
DSH_CALENDAR_ROOT / DSH_CALENDAR_APP_ROOT 包内 rsc/ 覆盖日历前端与后端所在目录,开发时指向源码项目
DSH_CALENDAR_DB 后端脚本旁的 calendar.db 数据库文件路径,升级前建议指向固定目录
DSH_CALENDAR_PORT 3001 后端端口
DSH_CALENDAR_AI_MODEL 跟随 Harness 路由 强制指定模型名
DSH_CALENDAR_PRICE_INPUT_PER_M 2 输入单价(元 / 百万 token),仅用于估算显示
DSH_CALENDAR_PRICE_OUTPUT_PER_M 8 输出单价(元 / 百万 token)

数据与备份

日历数据存在后端 SQLite,默认位置是后端脚本同目录的 calendar.db,发布包内即 rsc/server/calendar.db。插件会显式把 DB_PATH 传给后端,原因是后端 bundle 里的写法为 DB_PATH || <后端脚本目录>/calendar.db;一旦后端脚本被搬走(例如打包进插件包),不显式传参就会凭空生成一个空库,看起来像数据被清空。

Harness 侧的用量账本存在浏览器 localStorage 的 dsh_ai_calendar_usage_v1,按天累计、保留 30 天。诊断日志在 %TEMP%/dsh-ai-calendar/diag.log,其中 backend:db-path 事件记录实际使用的数据库路径。

升级或重装插件前,建议备份 calendar.db(连同 -wal / -shm 一起复制),或把 DSH_CALENDAR_DB 指向固定目录。

常见问题

侧栏没有「日历」:检查 profile 的 dsh.profile.bundles 是否包含 dsh-ai-calendar,然后重启 Harness。

面板里空白:多半是静态资源路径问题。插件会在响应时注入 <base href="/dsh-calendar/app/">,构建产物里不要自带 <base href="/">。

提示「日历服务没能启动」:端口 3001 被占用,或 better-sqlite3 原生模块没装好。装好后点「刷新」,或先手动跑:

node rsc/server/index.cjs

改了日历源码但界面没变:发布包内的 rsc/ 是构建快照。重新构建应用后要同步(scripts/package-plugin.mjs 仅仓库内开发者可用);开发时可以直接用 DSH_CALENDAR_ROOT=F:/AI calendar 指向源码项目。

用量每次重启清零:新版已改为 localStorage 账本,不再清零。若仍看到 0,请确认页面已刷新到最新 client 版本。

适用场景与注意

适合需要在 Harness 里统一管理任务、日志和提醒,并希望 Agent 能读写日历数据的开发者。

三点注意:

  1. 插件以当前 dsh 进程权限运行,安装前应检查其源码与许可证,尤其是 UNLICENSED 的授权范围;
  2. 日历数据落在插件自带的 SQLite,升级或重装前应备份;
  3. 插件自带的辅助脚本(scripts/smoke.mjs、scripts/package-plugin.mjs 等)不进发布包,本地开发时需自行准备。

小结

dsh-ai-calendar 的价值在于把日历界面、定时提醒和 Agent 工具收敛进 Harness 一处,AI 部分复用已有的 DeepSeek 路由。

  • 目录页:https://www.skillhub.cn/plugins/dengyinxi100-crypto/ai-calendar-deepseek-harness
  • GitHub:https://github.com/dengyinxi100-crypto/ai-calendar-deepseek-harness
羽毛球分组比赛记分
小程序二维码

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

小夜