跳过主要内容
D

ai-calendar-deepseek-harness

dengyinxi100-crypto/ai-calendar-deepseek-harness

把完整的日历应用嵌成侧栏面板,并在 DSH 页面上挂一个可拖动、可缩放的定时任务浮窗。注册六个 Agent 工具(状态、查询、新增、修改、删除、总结),读写同一个 SQLite 数据库。日历内的 AI 改走 DSH 已配置的 DeepSeek 路由,每条回复下方显示 token 用量与费用,并按天累计。

安装

dsh plugin --profile web add github:dengyinxi100-crypto/ai-calendar-deepseek-harness

README

dsh-ai-calendar

把 「AI 智能日历」 嵌进 DeepSeek Harness 的插件:侧栏多一个「日历」面板,主区域内嵌完整日历界面;同时给 Agent 注册一组日历工具,并挂一个可拖拽 / 可缩放的定时任务浮窗。

日历自己的多模型 AI 助手被替换成 Harness 已配置的 DeepSeek 路由——不额外填 key,直接用你 Harness 里的模型,按 token 计费。


功能

侧栏面板

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

定时任务浮窗

  • 挂在 Harness 页面左下角,可拖动、可拖拽右下角缩放,位置和尺寸会记住
  • 显示:到点提醒(红色强调条 + 「到点」胶囊)、接下来 4 条提醒、未完成任务数
  • 点条目直接跳到日历面板
  • 视觉沿用应用自己的任务卡(白底 / #2D3036 文字 / 16px 圆角 / 柔和投影)
  • 提醒到点自动弹出并高亮 2.6 秒;× 或日历「主题设置 → 悬浮窗」开关都能关掉
  • 不依赖日历面板是否打开:只要 Harness 开着就每 15 秒轮询一次

Agent 工具

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

AI 接管

  • /api/ai/chat:把用户消息连同数据库摘要(总量 + 今天 / 之后 + 最近记录含 id)一起喂给模型
  • 模型返回 {"reply": "...", "ops": [...]},插件真的执行 create / update / delete,再按执行结果回一句人话
  • 回复下方一行淡灰色标注:模型 deepseek-official/deepseek-flash · 入 N / 出 M tokens · ¥0.0000
  • 不显示 SQL、不显示 provider id、不显示技术细节

要求

  • Node.js ≥ 20
  • DeepSeek Harness(含 Web GUI)
  • 能编译或下载 better-sqlite3 的平台(Windows / macOS / Linux 主流版本都有预编译包)

安装

方式一:Harness 插件管理

在 Harness 的「插件」里安装本包(npm 包名 dsh-ai-calendar,或 git 地址):

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,侧栏就会出现「日历」。

宿主插件模块只在启动时加载一次,所以插件升级后必须重启 Harness 才会生效;client / shim 部分刷新页面即可。


配置

全部可选,通过环境变量:

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

数据

  • 日历数据存在后端 SQLite。默认位置是后端脚本同目录的 calendar.db(发布包内即 rsc/server/calendar.db),可用 DSH_CALENDAR_DB 指向别处
  • 后端 bundle 里写的是 DB_PATH || <后端脚本目录>/calendar.db,所以插件会显式把 DB_PATH 传给后端——否则一旦后端脚本被搬到别处(比如打包进插件包),就会凭空生成一个空库,看起来像数据被清空
  • 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/ 是构建快照。重新构建应用后要同步:

node scripts/package-plugin.mjs   # 仅仓库内开发者可用

开发时也可以直接用 DSH_CALENDAR_ROOT=F:/AI calendar 指向源码项目。

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


开发

插件本地开发时用到一些辅助脚本(按本机路径编写,不进发布包、也不进仓库):

脚本用途
scripts/smoke.mjs宿主侧冒烟:路由、静态、代理、AI 接管、6 个工具
scripts/smoke-client.mjs客户端契约 + 插槽注册 + SSR 渲染
scripts/package-plugin.mjs把前端 dist 与 server/index.cjs 内嵌进 rsc/
scripts/probe-*.mjs / verify-*.mjs各类端到端探针

仓库里只有可发布的运行时文件;要重新构建内嵌资源,请用本地的 package-plugin.mjs,或用 DSH_CALENDAR_ROOT 指向源码项目。

相关插件