DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

Qing45 /

Qing45/dsh-body-clock

Verified

A draggable floating window for DeepSeek Harness: random meals, water and standing reminders with a 3-second chime.

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHubProject homepage
READMESource: main@4baf6fdd

身体时钟 · Body Clock

A draggable floating window for DeepSeek Harness with three tabs — meals, water, standing. It picks breakfast, lunch and dinner at random, counts water cups and standing breaks, and plays a distinct 3-second chime when a reminder is due. Collapses to a 32px ball.

DeepSeek Harness Web 界面里的一个可自由拖动的悬浮窗:帮你决定今天吃什么,顺便管住喝水和站起来。

功能

  • 悬浮在界面之上,按住标题栏即可随意拖动;位置会被记住。
  • 每次打开 DSH / 重启后都以最小的悬浮球形式出现(不会自动弹出大窗口),点一下才展开。 收起状态下到点提醒也不会自动展开大窗口:晃的就是那颗小圆球本身,晃完圆球留着红色光圈、 球里换成对应提醒的图标(🍽️ 吃饭 / 💧 喝水 / 🧍 站立,细节放在悬停提示里),点一下展开才算读过。
  • 展开后顶层三个 tab:🍽️ 吃饭、💧 喝水、🧍 站立(吃饭 tab 里面才是早饭 / 午饭 / 晚饭)。
  • 早饭 / 午饭 / 晚饭三个分类,每类每天 3 次「帮我决定」机会,跨天自动重置。
  • 随机时不重复(一圈抽完才重新开始)。
  • 候选食物可随时添加、删除,默认各带一份常见清单。
  • 收起后变成一颗正圆小悬浮球(32px,只有饭点图标,不显示剩余次数),也可拖动,悬停时微微放大; 点一下重新展开,键盘 Tab 聚焦后按回车 / 空格也能打开。
  • 吃饭提醒:点标题栏的 ⏰ 打开设置,可为早/中/晚饭分别设定时间(默认 07:30 / 12:00 / 18:30), 时间为 24 小时制,分成「时」「分」两个输入框(小时 0–23、分钟 0–59,直接键入即可)。 在小时和分钟之间用 Tab 切换不会误提交;点别处或按回车才生效;格式不对会提示并保留原值,不会出现 AM/PM。 到点后浮窗会晃动约 6 秒并弹出提醒;收起时晃动的是最小图标本身,不会自动展开, 图标会留着红色标记直到你点开它。 每天每个饭点只提醒一次,提醒后有 30 分钟宽限窗口(例如 12:05 打开页面仍会收到午饭提醒)。 编辑设置期间暂停提醒,点「完成」后才按新时间开始计时(避免一边输入时间一边被晃)。 改时间会让该饭点重新生效(当天还能在新时间再提醒一次);设置页会标记「已提醒」, 底部还有「重置今天的提醒」可以手动允许今天再次提醒。 设置里有「试一下晃动」按钮可以先看效果。
  • 喝水提醒:💧 喝水 tab 里记录今天的杯数(默认目标 8 杯、每杯 250ml),支持 「喝了一杯」(会把下次提醒推后一个间隔)、「撤销一杯」、「稍后 30 分钟」、「今天暂停」。 设置页顶部再分「🍽️ 吃饭提醒 / 💧 喝水提醒」两段:喝水段可设开关、活跃时段 (默认 09:00–21:00,同样是「时」「分」双输入框)、提醒间隔(默认 60 分钟,1–240;想快速看效果可设成 1)、 每日目标杯数(1–24)。达到目标或过了结束时间当天就不再提醒。 喝水到点时:展开状态窗口晃动 + toast「该喝水啦 · 3/8 杯」;收起状态只有小圆球晃动,球变成 💧 并带蓝色光圈,点开直接进喝水 tab 并清掉标记。
  • 站立提醒(久坐提醒):🧍 站立 tab 记录今天已站次数(默认每天 6 次),可设活跃时段 (默认 09:00–21:00)、提醒间隔(默认 45 分钟)、站立时长(默认 3 分钟)。 到点后点「现在站一下」进入倒计时(大号 mm:ss + 进度条,倒计时结束自动算一次), 也可以「完成」提前结束或「跳过」不计次;另有「稍后 10 分钟」「今天暂停」、「重置今天的站立」。 到达每日次数或过了结束时间当天就不再提醒。
  • 三种提醒到点时的规则:谁的计划时间更早谁先提醒(同一时刻按 吃饭 > 喝水 > 站立), 一次只晃一个,下一个至少隔 1 分钟;另外两个 tab 会留小圆点提示未读。 小球图标与颜色对应提醒类型:🍽️ 吃饭(红圈)、💧 喝水(蓝圈)、🧍 站立(绿圈); 同时未读时显示最新那个,其余留在各自 tab 的小圆点上。 提醒在窗口展开时也会留下未读标记:切到别的 tab 时对应 tab 出现小圆点,收起后小球照样显示该图标。
  • 提醒音效:三种提醒到点时会连续响约 3 秒(每 0.5 秒一轮、共 6 轮),音色各不相同—— 吃饭 660→880(中音上行)、喝水 990→1320(高音)、站立 880→660(中音下行),与晃动同时发生。 默认开启,可在提醒设置的「吃饭提醒」段用「提醒音效」开关关闭;点旁边的「试听」会依次播放这三种音色(每种约 1 秒); 首次在 DSH 里点击或按键时会解锁音频(浏览器自动播放策略),之后即使你没在操作窗口,到点提醒也能出声; 系统静音或没有音频设备时自动静默,只剩晃动,不影响提醒本身——此时点「试听」会明确提示原因。
  • 统一窗口高度、不出滚动条:吃饭 / 喝水 / 站立 / 提醒设置四个视图共用一个高度, 基准是吃饭面板的最高内容高度(实测 597px,取 600px),切 tab 不再上下跳动。 窗口高度由吃饭面板实测内容决定:内容更多或宿主字体更高时会自动增高(只增不减), 所以正常使用不会出现滚动条;内容少的视图(喝水、站立、倒计时)垂直居中,设置页顶部对齐。 只有「候选食物多到超过屏幕高度」这种物理上限才会在面板内滚动;窗口贴底/视口变矮时按可用高度收缩(最矮 305px)。
  • 饭票视觉语言:决定结果是一张「今日饭票」——宋体票面、票号 NO.01、餐盘承托 emoji、 虚线撕口(两侧半圆缺口)和一枚旋转的红色印章;抽中时票面滑入 260ms、餐盘轻弹、印章盖下, 减少动态效果的系统设置下这些动画会自动关闭。标题栏是齿孔点 + 虚线,分段控件用「墨底反白」的票根样式, 候选食物是方签(抽中的带红点),设置页用虚线分区、已提醒标记也做成小红章。
  • 配色与排版:表面、文字、边框全部沿用 Harness 的主题变量(--dsw-alias-*),自动跟随深色 / 浅色主题。 三个模块各有一个强调色——吃饭暖红 #c62b3a、喝水蓝 #1a6ab5、站立绿 #1a7f4f——只用于主操作、 当前选择和状态标记(tab 下划线、进度点、未读光圈、开关),不再使用任何渐变; 面板与它对应的设置页共享同一个强调色。正文最小 12px、控件最小 24px 点击区, 浅色与深色下的文字对比度都 ≥ 4.5:1。

结构

文件 作用
cordis.patch.yml Bundle patch:把 Host 侧插件行插进 profile 配置树
index.js Host 侧(无状态;界面全部在浏览器端)
client.js 浏览器端:注册 shell.overlay 槽位里的悬浮窗
locale/*.json 插件管理器里显示的名称与说明(zh / en)
icon.svg 插件图标(原创)

安装

dsh plugin add dsh-body-clock                      # 来自 npm
dsh plugin add github:Qing45/dsh-body-clock        # 或直接从仓库

也可以在 Harness 的插件管理里从插件市场一键安装,装完刷新页面。

本地开发时用目录链接:

dsh plugin --profile <profile> add link:/Users/yang/Documents/DSH/吃什么插件/dsh-body-clock

测试

npm test            # 等价于 node test/run-tests.mjs
  • 89 项断言,零依赖:用假的 React、假的 window(localStorage / 定时器 / 视口)在 Node 里加载 client.js, 再把内部的纯函数(时间解析、排期、到点判断)暴露出来单测。
  • 覆盖范围:
    • 时间:24 小时制解析、时:分 双输入框提交、非法值回退;
    • 输入法:中文选词时的 Enter(isComposing / keyCode 229)不会被当成确认;
    • 音效:三段提示音的音符数与兜底、音效开关的默认值与非法值修复;
    • 吃饭:30 分钟宽限、每天一次、改时间重新生效、按最早到点排序;
    • 喝水:目标/间隔/暂停/暂停恢复/跨天清零/长时间缺席只补一次;
    • 站立:间隔排期、倒计时自动计数、「完成」计数、「跳过」不计、暂停/稍后;
    • 界面:小球三态图标与颜色(🍽️/💧/🧍)、三层 tab、三个面板、设置三段表单、 键盘打开与拖拽记忆位置、未读圆点;
    • 引擎:三种提醒排队(最早到点优先,同时刻 吃饭 > 喝水 > 站立)、60 秒节流、 不开窗打扰、打开才确认、设置编辑期间静默;
    • 数据:五个 localStorage key 的写入、损坏数据兜底、locale 中英对齐 (含源码里每个 t('…') 字面量是否存在)、包文件完整性。

数据

候选食物、抽取次数与窗口位置保存在浏览器 localStorage:

  • dsh-body-clock:data:v2 — 食物清单 / 次数 / 今日结果
  • dsh-body-clock:ui:v1 — 悬浮球位置 / 当前分类 / 顶层 tab(展开状态不持久化,启动固定为收起)
  • dsh-body-clock:reminders:v1 — 吃饭提醒开关、三个饭点时间、今天已提醒过的饭点、提醒音效开关
  • dsh-body-clock:water:v1 — 喝水:今日杯数、上次喝水时间、下次提醒时间、暂停状态、喝水设置
  • dsh-body-clock:stand:v1 — 站立:今日次数、站立倒计时、下次提醒时间、暂停状态、站立设置

设计 / 视觉自检

外观改动可以离线验证,不需要装进 Harness:同工作区的 preview/ 里有一套零依赖的预览与审计工具, 它用假的 React 把 client.js 里真实的组件渲染成 HTML,所以预览不会与真实界面脱节。 (preview/ 属于开发辅助,不在本仓库内。)

许可证

MIT

—/ 5

No ratings yet

Verified DSH bundle

Commit 4baf6fdd2e82

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout