久坐提醒鲸鱼(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 只接受页面自己的同源 fetchSec-Fetch-Site: same-origin 或 Origin 与 Host 一致);无这两个头的 curl/脚本会被拒绝。同一进程 5 秒内最多查一次。
  • 优先用进程内 fetchGET https://api.deepseek.com/user/balance;若运行环境没有 fetch,再 spawn node -e,Key 走 stdin,不出现在命令行。

实现说明

  • 这是一个静态 bundle 插件(由动态 code.client/code.host 插件改造而来):
    • Host 半边 src/host.js:提供 POST /api/sedentary-whale/balance 余额查询路由。
    • Client 半边 src/client.jswindow.__ModuleLoader__.load({id, factory}) 格式的客户端 bundle,注册进 shell.overlay 悬浮层 Slot;无构建步骤,源码即产物。
  • 鲸鱼采用官方 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 侧 slotsshell.overlay 座位)。专注/休息用墙钟时间轴,每秒刷新显示(effect 内清理)。
  • 偏好记忆走 localStoragedsh.sedentaryWhale.minutes / .restMinutes / .pos / .enabled / .visible / .color / .stats);进行中的一轮走 sessionStoragedsh.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.patchcordis.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),无构建步骤,源码即产物。