久坐提醒鲸鱼(Sedentary Whale Reminder)
August 24, 2026 · View on GitHub
一只悬浮在 DSH 页面上的鲸鱼,用于提醒你在连续专注工作后起身活动。

行为
- 状态机:未开始 / 专注中 / 休息中;面板里点「开始专注」才计时,选择时长不会自动开始;「重置」可随时清零进度回到未开始。
- 专注时长:预设 5 / 10 / 25 分钟(默认 25)或自定义(1–180);自定义通过弹窗 −/+ 微调。开始后本轮时长锁定,中途改胶囊只影响下一轮。
- 墙钟计时:按
Date.now()累计真实经过时间(发呆、短时间切标签也继续)。到点提醒「该起来活动一下啦」。刷新页面会从sessionStorage恢复本轮进度。 - 离开暂停:切走标签页超过 15 分钟视为离开,暂停并保留进度(不再整轮清零)。设置里隐藏鲸鱼也会暂停;休息中隐藏则冻结倒计时,再显示时继续。
- 休息循环:提醒后点「休息一下」进入休息(3 / 5 / 10 或自定义 1–60,默认 5,自定义刷新后会记住);倒计时结束后可开始下一轮,休息中也可随时「开始专注」提前继续。
- 稍后提醒:气泡里可点「再专注 5 分钟」顺延,或「休息一下」进入休息。
交互
| 操作 | 效果 |
|---|---|
| 拖动鲸鱼 | 移动位置(位置会记住) |
| 左键单击鲸鱼 | 头顶冒出文案气泡(约 2.5 秒消失;为区分双击会稍等一瞬) |
| 左键双击鲸鱼 | 开始 / 暂停本轮专注(不会先闪出单击文案) |
| 右键单击鲸鱼 | 打开 / 关闭「久坐提醒」面板 |
| 久坐提醒开关 | 开/关提醒;开时功能区丝滑展开(专注/休息时长 + 按钮),关时收起隐藏 |
| 开始专注 / 暂停 | 开始或暂停本轮专注(选择时长不会自动开始) |
| 重置 | 清零专注进度、回到「未开始」 |
| 专注时长胶囊 | 5 / 10 / 25 分钟或「自定义」(✏️ 表示可编辑);已设置的自定义直接显示分钟数(如 45分) |
| 休息时长胶囊 | 3 / 5 / 10 分钟或「自定义」(✏️),默认 5 |
| 自定义时长弹窗 | −/+ 步进微调 + 数字输入,取消 / 确定,Enter 确认 |
| 余额 ↻ | 查询 / 刷新 DeepSeek 余额(💰 DeepSeek 余额) |
| 点击空白处 | 关闭面板 |
| 设置 → 通用 → 悬浮鲸鱼 | 显示 / 隐藏鲸鱼(关时只留标题与开关;开时才出现说明、今日/累计统计、颜色)。隐藏时暂停计时;状态记忆,实时生效 |
余额查询
- 面板里「💰 DeepSeek 余额」一行点 ↻ 即查询 / 刷新;自动使用 DSH 已配置的
DEEPSEEK_API_KEY凭据(~/.dsh/.credentials.yaml)。Key 不写进代码、不进请求体、也不存浏览器。 - Host 只接受页面自己的同源
fetch(Sec-Fetch-Site: same-origin或 Origin 与 Host 一致);无这两个头的 curl/脚本会被拒绝。同一进程 5 秒内最多查一次。 - 优先用进程内
fetch打GET https://api.deepseek.com/user/balance;若运行环境没有fetch,再 spawnnode -e,Key 走 stdin,不出现在命令行。
实现说明
- 这是一个静态 bundle 插件(由动态
code.client/code.host插件改造而来):- Host 半边
src/host.js:提供POST /api/sedentary-whale/balance余额查询路由。 - Client 半边
src/client.js:window.__ModuleLoader__.load({id, factory})格式的客户端 bundle,注册进shell.overlay悬浮层 Slot;无构建步骤,源码即产物。
- Host 半边
- 鲸鱼采用官方 DeepSeek logo(path 取自
apps/web/public/favicon.svg),只保留鲸鱼本体、无进度环;颜色跟随主题:浅色模式下为黑色、深色模式下为白色(设置里也可指定黑/白/蓝)。闲置时起伏游动并掠过一层白光、偶尔冒泡;单击在水面漾开涟漪,双击有扎水再跃出的反馈。到点提醒时摆动更明显。动画不加额外颜色;系统「减少动态效果」时循环动画会停。久坐提醒开启时,鲸鱼头顶上方的倒计时胶囊显示状态(「未开始」/「暂停 mm:ss」/ 剩余时间mm:ss/ 到点变红「休息啦」/ 休息中「休 mm:ss」),面板打开、说话气泡或提醒气泡显示时隐藏。 - 「悬浮鲸鱼」显示 / 隐藏开关注册在 设置 → 通用(
settings.general.item行),状态存localStorage(key:dsh.sedentaryWhale.visible),通过自定义事件实时同步给鲸鱼;隐藏时暂停计时并display:none。开关关闭时设置项收成一行标题;打开后展开说明、今日/累计统计与颜色选择。关态开关用灰轨道提高对比,避免贴白底看不清。 - 深色模式兼容:跟随宿主
body[data-ds-dark-theme]自动切换,面板、气泡、胶囊、按钮、弹窗与文字均适配深色;颜色统一走--sw-*语义变量(优先复用宿主--dsw-alias-*主题 token,缺失时用内置深浅兜底值)。 - 面板(300px)为毛玻璃卡片 + 蓝色渐变点缀:久坐提醒标题行(⏱️ + 状态 + 开关)→ 功能区(专注/休息时长胶囊 + 重置/开始专注)→ 余额行;功能区用 class + transition 折叠动画,面板近鲸鱼端锚定(鲸鱼下方固定顶部、上方固定底部贴鲸鱼),开关切换不移位、不遮挡鲸鱼。
- 自定义时长弹窗遮罩只覆盖面板区域,不遮全屏。
- 依赖服务:Host 侧
webServer/credentials/shell(仅作无fetch时的 stdin 回退);Client 侧slots(shell.overlay座位)。专注/休息用墙钟时间轴,每秒刷新显示(effect 内清理)。 - 偏好记忆走
localStorage(dsh.sedentaryWhale.minutes/.restMinutes/.pos/.enabled/.visible/.color/.stats);进行中的一轮走sessionStorage(dsh.sedentaryWhale.session,关标签页即丢、刷新可恢复)。
安装
# 已发布到 npm(@yifanfff/dsh-client-ui-sedentary-whale)
dsh plugin --profile web add @yifanfff/dsh-client-ui-sedentary-whale
# 或从 GitHub 源码安装(按 tag 锁定版本,源码即运行代码,可完整审计)
dsh plugin --profile web add github:OnlyAPI/dsh-client-ui-sedentary-whale#v0.2.3
# 本地开发(源码目录以符号链接安装,改代码无需重装)
dsh plugin --profile web add link:D:/DevApps/AI-Ide/DeepSeek-harness/deepseek-plugins/sedentary-whale
# 重启 dsh web 后生效:页面右下角出现悬浮鲸鱼
- 包清单声明了
dsh.bundle.patch(cordis.patch.yml插入插件行)与dsh.client(web 平台、注入 runtime/layout),是官方 bundle 插件形态。 - 移除:
dsh plugin --profile web remove @yifanfff/dsh-client-ui-sedentary-whale。
限制
- 切标签少于 15 分钟仍按墙钟计入专注(人多半还坐在电脑前);超过 15 分钟才暂停。无法区分「去倒水」和「还在看别的窗口」。
- 皮肤/主题类全局样式需自行管理:本插件通过
<style data-plugin-css>注入自身样式,卸载时自动移除。
更新记录
v0.2.3
- 计时:改用墙钟。发呆或短时切标签继续累计;离开超过 15 分钟、或在设置里隐藏鲸鱼,改为暂停并保留进度(不再整轮清零)。刷新可恢复本轮;休息中隐藏会冻结倒计时,再显示继续。自定义休息 1–60 会记住;默认专注 25 分钟;开始后本轮时长锁定。
- 代码:时钟收成一份纯状态,界面只派生秒数;session 在状态变化、关页、切走标签时写入,不再每秒落盘。设置统计去掉轮询,重复的时长行/统计列抽成共用组件。
- 余额:只接受页面同源 fetch;不再从请求体读 Key;5 秒限流;Key 不进命令行(优先进程内 fetch,否则 stdin)。
- 设置:开关关闭只留标题,打开才出现说明、今日/累计统计和颜色。关态开关加深灰轨道,避免贴白底看不清。
- 交互 / 动画:双击开始/暂停不再闪单击文案。鲸鱼闲置起伏、掠光、气泡;单击涟漪、双击扎水。不加额外颜色。
v0.2.2
- 新增「悬浮鲸鱼」设置开关(设置 → 通用):可随时显示 / 隐藏鲸鱼,状态持久化、实时生效;设置行样式与系统内置设置项一致(标题 14px/400、hairline 分割线、深浅色自适应)。
- 倒计时胶囊移至鲸鱼头顶上方(不再遮挡身体);提醒气泡拉近鲸鱼。
v0.2.1
- 鲸鱼改为黑色(与 dsh 黑色鲸鱼一致),深色模式下自动切换为白色。
- 兼容深色模式:跟随宿主
body[data-ds-dark-theme]自动切换,面板、气泡、胶囊、按钮、弹窗与文字全部适配;颜色统一走插件自管的--sw-*语义变量(深浅两套内置值)。 - 修复浅色模式面板背景(颜色不再依赖宿主 token,恢复半透明白毛玻璃卡片);开关增加边框与关闭态对比度,浅色/深色下都清晰可辨。
v0.2.0
- 全新面板:久坐提醒(⏱️ 标题 + 状态 + 开关)→ 专注/休息时长 + 自定义弹窗 → 开始专注/暂停 + 重置 → DeepSeek 余额(💰),信息层级清晰。
- 自定义时长改为弹窗(−/+ 步进微调 + 数字输入,取消/确定,Enter 确认);自定义胶囊带 ✏️ 编辑标识,已设置后直接显示分钟数(如 45分)保持单行。
- 功能区折叠动画:开关打开时丝滑展开、关闭时收起;面板近鲸鱼端锚定,切换不移位、不遮挡鲸鱼。
- 新增「重置」按钮:清零专注进度回到「未开始」。
- 状态行与标题文字对齐;提醒关闭时不显示状态文案。
- 修复:休息自然结束回到「未开始」、闲置/切页重置等计时逻辑;清理调试日志与冗余代码。
v0.1.0
- 初始版本:悬浮鲸鱼(DeepSeek logo)常驻页面,可拖动并记忆位置。
- 左键点击冒出文案气泡,右键打开面板。
- 久坐提醒:预设 5 / 10 / 25 分钟(可自定义)专注计时,满时长弹气泡提醒「该起来活动一下啦」,支持稍后提醒。
- DeepSeek 余额查询(使用 DSH 配置的
DEEPSEEK_API_KEY,Key 不写入代码、不存浏览器)。 - 由动态插件重构为静态 bundle 插件(Host 路由 + Client bundle,
window.__ModuleLoader__.load),无构建步骤,源码即产物。