dsh-health-reminder
A flat monochrome health-reminder plugin for DSH Web: scheduled drink/movement reminders, one-click check-in, drinking achievements, daily health score and 14-day trend.
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 17, 2026
- Updated
- Aug 17, 2026
Introduction
dsh-health-reminder
DSH(DeepSeek Harness)Web 健康提醒插件:在工作时段内按固定间隔提醒喝水,提供「喝了喝了」一键打卡、累计喝水成就、天统计与健康得分、近 14 天趋势曲线。提醒弹窗为绿色卡通风格(水滴吉祥物摇摆、弹跳入场),悬浮球可拖拽摆放。
特性
- ⏰ 可设置提醒间隔(1–480 分钟,默认 60),提醒词轮换;
- ✍️ 可设置提醒词:设置页按行编辑文案列表(也支持 localStorage 覆盖);
- 🕘 仅在工作时段内提醒(默认 9–22 点,可设),非工作时段自动顺延到下一工作时段起点;
- 🖥️ 页面可见时右下角弹出绿色卡通横幅(水滴吉祥物摇摆、弹跳入场,20 秒自动消失,可点 ✕ 关闭);
- 🥤 横幅提供「喝了喝了」按钮:点击触发水花迸溅 + 弹跳打卡动画并记录一次喝水,实时更新今日次数与成就;
- 🏆 成就系统:按累计喝水次数解锁 11 个成就(第一口水 → 海神波塞冬),横幅实时显示当前成就与下一成就进度,解锁瞬间弹出庆祝动画(水滴粒子彩带 + 弹跳成就卡,统计页成就卡片同步光晕脉冲);统计页有「成就」卡片与完整成就区(已解锁/未解锁);
- 🔔 页面在后台时改为任务栏标题闪烁(
💧 该喝水啦 …),回到页面后自动补显横幅——切到别的窗口也不会漏掉; - 🔇 可选轻提示音(Web Audio 合成,无需音频文件,可在设置中关闭);
- 🧩 多标签页去重:同时打开多个 DSH 页面时,同一提醒只弹一次(localStorage 协调);工作时长通过 leader 心跳只由前台可见的标签页累计;
- 📊 统计面板:今日工作时长 / 喝水(含目标)/ 健康得分(0–100)与等级;近 14 天趋势曲线(柱:喝水 · 线:健康得分 · 虚线:喝水目标);
- 🏠 悬浮球(角标实时显示今日得分)一键打开「统计 / 设置」面板,支持鼠标拖拽移动位置(自动保存,刷新后保持)。
安装(一次性)
# 在插件源码目录(含 package.json 的 D:\dsh\plugin\dsh-health-reminder)之外执行:
dsh plugin --profile web add "link:D:/dsh/plugin/dsh-health-reminder"
然后在 C:\Users\<你>\.dsh\profiles\web\cordis.patch.yml 追加:
- id: health-reminder
name: dsh-health-reminder
最后重启 dsh web(dsh web),插件即生效。
使用
- 页面左下角出现 💧 悬浮球(角标为今日健康得分),点击打开面板;
- 统计页:今日工作时长、喝水(含目标)、健康得分与等级、当前成就卡片;下方为成就区(累计喝水次数解锁全部成就)与近 14 天趋势曲线;底部有「清空历史统计」;
- 设置页(精简):提醒间隔、工作时段、喝水目标、提示音开关、提醒词(可在其中写运动提醒),保存后立即生效;可恢复默认。
配置(可选)
默认配置如下;除了在面板中修改,也可以在 DSH 页面按 F12 打开控制台执行(刷新页面生效):
localStorage.setItem("dsh.healthReminder", JSON.stringify({
intervalMinutes: 60, // 提醒间隔(分钟,1–480)
startHour: 9, // 工作时段开始(小时,24 小时制)
endHour: 22, // 工作时段结束(小时,需晚于开始)
sound: true, // 是否播放提示音
waterGoal: 8, // 每日喝水目标(次,1–20),也是成就参考线
messages: [ // 提醒词列表(轮换使用,可在其中写运动提醒)
"💧 该喝水啦!起身接杯温水,小口慢饮~",
"🥤 水分补充时间到,喝口水再继续",
],
}));
恢复默认:localStorage.removeItem("dsh.healthReminder") 后刷新页面,或在设置页点击「恢复默认」。
成就系统
按累计喝水次数永久解锁(跨天累加),解锁时弹提示,横幅与成就区实时展示:
| 次数 | 成就 | 次数 | 成就 |
|---|---|---|---|
| 1 | 💧 第一口水 | 25 | 🚿 移动喷泉 |
| 3 | 🫗 小水花 | 35 | 🌊 水漫金山 |
| 5 | 🥤 水分子 | 50 | 🏊 人形泳池 |
| 8 | 🪣 小水桶 | 80 | 🐳 蓝鲸化身 |
| 12 | 🐃 水牛 | 120 | 👑 海神波塞冬 |
| 18 | 🐘 大水牛 |
健康得分算法(0–100)
| 维度 | 满分 | 规则 |
|---|---|---|
| 喝水 | 60 | 达目标(waterGoal)即满分,按比例折算 |
| 工作时长 | 40 | ≤ 8 小时满分;每超出 2 小时扣 10 分(久坐惩罚),最低 0 |
等级:≥90 优秀 🌟 · ≥75 良好 👍 · ≥60 及格 🙂 · <60 加油 💪
工作原理
- 插件包同时包含 host 侧(
lib/index.js,一个极简 cordis 插件,作为载体)与 browser 侧(lib/client.js,手写的 client bundle); - dsh 启动时
dsh-client-modules扫描到package.json中的dsh.client声明,自动把exports["./client"]注入 web 页面; - 浏览器侧按 cordis 插件形态挂载:
setInterval每 15–30 秒检查一次(随间隔自适应),到点且在工作时段内则触发提醒;页面卸载/插件重载时自动清理; - 天统计按日期写入
localStorage:dsh.healthReminder.daily.<YYYY-MM-DD>={water, reminders, workMinutes};多标签页通过dsh.healthReminder.leader心跳选主,只有前台可见的标签页累计工作时长;成就基于全部天记录water之和实时计算。
数据存储
所有数据仅保存在浏览器 localStorage,不会上传:
| 键 | 内容 |
|---|---|
dsh.healthReminder | 用户配置(间隔 / 时段 / 目标 / 提示音 / 提醒词) |
dsh.healthReminder.daily.<日期> | 每日统计(喝水 / 提醒 / 工作时长) |
dsh.healthReminder.leader | 多标签页工作时长心跳 |
dsh.healthReminder.dockPos | 悬浮球位置 |
dsh.healthReminder.lastFired | 提醒去重时间戳 |
在设置页可「恢复默认」(清配置)与「清空历史统计」(清天记录)。
目录结构
dsh-health-reminder/
├── package.json # dsh.client 声明 + exports
├── lib/
│ ├── index.js # host 侧载体插件
│ ├── index.d.ts # 类型声明
│ └── client.js # browser 侧全部逻辑(核心)
├── verify-client.cjs # 行为验证脚本(node verify-client.cjs)
├── LICENSE # MIT 许可证
└── README.md
测试
node verify-client.cjs