猫猫久坐提醒 wangzhanchao883/dsh-no-long-sit
DeepSeek 客户端v0.1.3养只桌宠猫,到点催你起身走动喝水
30/100
综合分
0
GitHub 星标
260
npm 周下载
—/5
用户评分
数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/wangzhanchao883/dsh-no-long-sit.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 33 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-no-long-sit @ 0.1.3
✓Node 引擎要求 ^22.0.0 || >=24 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/8 09:41:54
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 14 处,展示前 14 条)
- 读取本地文件index.mjs:329
const data = readFileSync(join(ASSETS_DIR, rel)) - 发起网络请求client.js:117
const res = await fetch(`${API}/state`, { headers: { accept: "application/json" } }); - 发起网络请求client.js:126
const res = await fetch(`${API}/cases`, { headers: { accept: "application/json" } }); - 发起网络请求client.js:140
const res = await fetch(`${API}/choice`, { - 发起网络请求client.js:157
const res = await fetch(`${API}/refresh-cases`, { method: "POST", headers: { accept: "application/json" } }); - 发起网络请求client.js:272
artManifestLoading = fetch(artRel("pet-manifest.json"), { headers: { accept: "application/json" } }) - 读取本地文件lib/store.mjs:30
return JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件lib/store.mjs:39
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件lib/store.mjs:44
writeFileSync(tmp, text, 'utf8') - 写入本地文件lib/store.mjs:45
renameSync(tmp, file) - 删除本地文件lib/store.mjs:50
unlinkSync(tmp) - 写入本地文件lib/store.mjs:62
mkdirSync(dataDir(), { recursive: true }) - 写入本地文件lib/store.mjs:63
writeFileSync(logPath(), `${JSON.stringify({ at: new Date().toISOString(), ...entry })}\n`, { flag: 'a' }) - 读取本地文件lib/cases.mjs:28
const raw = JSON.parse(readFileSync(BUILTIN_FILE, 'utf8'))
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 久坐提醒
- 喝水提醒
- 可拖动桌宠
DeepSeek Harness 猫猫桌宠:先当久坐、喝水提醒用(可拖动、四态循环动画、真实案例、总结评价)。
README
由 DeepSeek 最新模型翻译生成dsh-no-long-sit · 猫猫桌宠(久坐提醒)
DeepSeek Harness 的桌宠:一只住在 Web GUI 角落的猫猫,可拖到任意位置,四个状态各有循环动画。
它现在最先给你干的一件事是久坐提醒——到点居中弹窗 + 三声滴滴喊你起来走动、喝口水;你说"再等会"它就掏出带真实来源的案例劝你;本次工作结束时给一份好/中/差评价。
后续会继续长功能,目标是做一只有用的桌宠。
English →
界面:右下角猫猫 + 居中提醒弹窗
功能
| 能力 | 说明 |
| 猫猫桌宠 | 右下角常驻,四个状态循环动画(趴着/起身/喝水/睡着);可拖到任意位置并记住;不透明度可调;素材缺失自动回落内置 SVG |
| 定时提醒 | 专注周期到点 → 居中弹窗(遮罩,无法忽略)+ 三声"滴滴滴"提示音,带休息倒计时 |
| 三按钮闭环 | 【休息好了】直接开下一轮专注 /【再等会】看案例、N 分钟后重弹 /【结束】出总结 |
| 伤害案例窗 | 内置 17 条真实案例(久坐 9 / 缺水 8),每次只挑 1 条久坐 + 1 条缺水展示并轮换,每条带来源媒体、发布日期、原文链接 |
| 休息结束 | 休息倒计时跑完 → 再响一次"滴滴滴" + 弹「回来干活」,点【开始干活】进下一轮;若一直没人点,超过等待上限自动开下一轮(默认 10 分钟,可设 0 关闭) |
展开完整文档(README 剩余 1 节)
dsh-no-long-sit · 猫猫桌宠(久坐提醒)
DeepSeek Harness 的桌宠:一只住在 Web GUI 角落的猫猫,可拖到任意位置,四个状态各有循环动画。
它现在最先给你干的一件事是久坐提醒——到点居中弹窗 + 三声滴滴喊你起来走动、喝口水;你说"再等会"它就掏出带真实来源的案例劝你;本次工作结束时给一份好/中/差评价。
后续会继续长功能,目标是做一只有用的桌宠。
English →
界面:右下角猫猫 + 居中提醒弹窗
功能
| 能力 | 说明 |
| 猫猫桌宠 | 右下角常驻,四个状态循环动画(趴着/起身/喝水/睡着);可拖到任意位置并记住;不透明度可调;素材缺失自动回落内置 SVG |
| 定时提醒 | 专注周期到点 → 居中弹窗(遮罩,无法忽略)+ 三声"滴滴滴"提示音,带休息倒计时 |
| 三按钮闭环 | 【休息好了】直接开下一轮专注 /【再等会】看案例、N 分钟后重弹 /【结束】出总结 |
| 伤害案例窗 | 内置 17 条真实案例(久坐 9 / 缺水 8),每次只挑 1 条久坐 + 1 条缺水展示并轮换,每条带来源媒体、发布日期、原文链接 |
| 休息结束 | 休息倒计时跑完 → 再响一次"滴滴滴" + 弹「回来干活」,点【开始干活】进下一轮;若一直没人点,超过等待上限自动开下一轮(默认 10 分钟,可设 0 关闭) |
| 总结评价 | 本次工作时长、完成专注轮数、成功中断次数、提醒触发次数、再等会次数、建议喝水次数 → 好/中/差 + 猫猫点评 |
| 设置面板 | 称呼、专注周期 30–90 分钟、休息周期 3–15 分钟、再等会间隔与上限、提示音开关与音量、桌宠不透明度、等待上限、评价阈值、悬浮宠物开关;带 「恢复默认值」 一键回退(两段确认) |
| 桌宠可拖动 | 按住猫猫拖到任意位置(自动夹在视口内),位置用 localStorage 记住;拖动不会误触菜单,单击才开菜单 |
| 计时权威在宿主 | 刷新页面/切标签不丢计时;多标签页不会各弹各的 |
默认:每 30 分钟专注 → 提醒 → 休息 5 分钟 → 回来确认 → 下一轮。
安装
桌面版(Electron):DSH_HOME 指向桌面数据目录 $env:DSH_HOME='D:\dsh-desktop-home\data' & '\resources\runtime\cli\bin\dsh.cmd' plugin --profile desktop add
Web 版 $env:DSH_HOME='C:\Users\\.dsh'
dsh plugin --profile web add dsh-no-long-sit
装完重启 DSH(bundle 层在启动期合成)。重启后右下角出现猫猫即表示加载成功。
设置项
设置 → 插件 → 猫猫 · 久坐提醒:
| 字段 | 默认 | 范围 | 含义 |
| address | 大人 | ≤24 字 | 猫猫对你的称呼(宿主没有统一的"用户称呼"字段,所以由插件自己持有) |
| focusMinutes | 30 | 30–90 | 专注周期(分钟) |
| breakMinutes | 5 | 3–15 | 休息周期(分钟) |
| snoozeMinutes | 5 | 1–15 | 点【再等会】后多久重新弹提醒(案例窗一关就立刻恢复提醒) |
| maxSnooze | 2 | 0–5 | 每轮最多"再等会"几次,超出记一次"未中断" |
| soundEnabled | 开 | — | 到点播放"滴滴滴"提示音(Web Audio 现场合成,不依赖素材;设置页可试听) |
| soundVolume | 0.6 | 0–1 | 提示音音量 |
| awaitReturnTimeoutMinutes | 10 | 0–60 | 「回来干活」最多等多久,超时自动开下一轮(0 = 一直等) |
| earlyBreakGuard | 开 | — | 休息没到点就点【休息好了】时,先软提示一次 |
| goodRatio / midRatio | 0.8 / 0.5 | 0–1 | 评价「好」/「中」所需的中断命中率 |
| caseRefreshEnabled | 开 | — | 启动后后台刷新案例库 |
| caseRefreshDelayMinutes | 10 | 1–120 | 启动后多久触发一次刷新 |
| showFloatingPet | 开 | — | 右下角常驻猫猫(可拖动,位置记忆在浏览器 localStorage) |
| petOpacity | 0.75 | 0.2–1 | 桌宠不透明度;0.75 = 25% 透明,设 1 完全不透明 |
| timeScale | 1 | 0.001–1 | 仅调试:把分钟压成秒(0.01 = 30 分钟变 18 秒) |
改完 ≤2 秒生效(宿主每 2 秒重读一次 settings.describe()),当前阶段会按新时长重锚。
工作原理
┌─ host 半身 index.mjs ──────────────────────────────┐ ┌─ client 半身 client.js ────────┐ │ 权威计时(1s tick)→ 状态机 focus/break/awaitReturn │ │ shell.overlay 浮层:猫猫 + │ │ 账本持久化 /data/dsh-no-long-sit/*.json │←→ │ 提醒窗 / 案例窗 / 总结窗 │ │ 案例库:assets/cases.json + 运行期缓存 + 后台刷新 │ │ 3s 轮询宿主状态,按钮 POST 动作 │ │ 路由 /dsh-no-long-sit/{state,choice,cases,refresh- │ │ 设置卡片 settings.section + │ │ cases,art}(自查跨源,白名单素材) │ │ ctx.configForms.get(id) │ └───────────────────────────────────────────────────┘ └────────────────────────────────┘
- 计时放宿主:浏览器计时刷新即丢、多标签页无去重机制,所以状态机与账本都在 host,前端只渲染与发动作。
- 不做 host→client 事件推送:DSH 没有给第三方插件的推送通道(转发事件白名单是官方封闭常量),所以前端用 3 秒轮询 + 本地 1 秒时钟算倒计时(宿主下发绝对时间戳,不用额外请求)。
- 持久化:/data/dsh-no-long-sit/state.json(同目录 .tmp + rename 原子替换,失败不阻塞插件)。
- 案例刷新:ctx.web.search() 拿来源 → ctx.llm.stream()(reasoningEffort:"off"、60s 超时)改写成短案例 → 只保留 url 出现在检索结果里的条目(防模型编造来源)→ 原子写盘;失败保留旧库并在设置页显示原因与上次成功时间。
已知限制
1. DSH 所有页面都关掉时不会再提醒(架构决定:没有页面可弹,宿主也没有面向浏览器的第三方推送通道)。
要系统级提醒得再加浏览器通知或独立桌面窗口,本期未做。
2. 提示音需要页面里有过一次用户交互(浏览器自动播放策略):正常使用 DSH 必然点过页面,插件会在第一次点击/按键时解锁音频。
若 DSH 窗口被最小化或标签页在后台,浏览器会节流定时器,弹窗与提示音可能迟到几秒(切回前台会立刻补一次状态)。
3. 案例后台刷新可能失败:桌面版搜索凭据顺序是「账号 token → DEEPSEEK_API_KEY」,且账号 token 只在会话活跃时可解析。失败时保留旧库并把原因写进设置页状态区,不会静默变成空列表。
4. 不统计真实喝水次数:程序无法感知你有没有喝水,按你的口径用"专注轮数"给出建议喝水次数。
5. 弹窗只在 DSH GUI 内(shell.overlay),不覆盖宿主设置弹窗之上(宿主设置面板 z-index 更高)。
开发
node --test # 40 项:状态机 / 配置 / 案例校验 / 路由鉴权与素材净化 / mock 宿主契约 / settings 同步
node --check index.mjs; node --check client.js
- lib/state.mjs 是纯函数状态机(零依赖,可单测);lib/config.mjs 是 schemastery schema。
- 前端是经典脚本(window.__ModuleLoader__.load + React.createElement),没有构建步骤,改完刷新页面即生效。
- 依赖:@deepseek-ai/schemastery 是唯一运行时依赖(peer)。本地 link: 开发时把它放进插件自己的 node_modules。
换猫猫素材
素材全部由 assets/pet-manifest.json 描述,换素材不用改代码:支持动图文件(WebP/GIF,当前形态)、帧序列(frames//-NN.png)与静态图(SVG/PNG)三种写法;清单缺失或某状态未定义时自动回落到内置猫猫 SVG。
当前装机素材:assets/anim/{idle,rise,drink,sleep}.webp —— 由用户的 512×512 透明 PNG 帧序列
(10 / 8 / 10 / 7 帧,fps 6 / 8 / 8 / 4)经「统一基线 → 缩到 256×256 → 合成为动图 WebP(q95)」流水线产出, 36 个文件 11.4 MB 压到 4 个文件 626 KB。
制作规格(画布、帧数、fps、命名、背景抠图要求)与现行装机素材对照见 docs/ART-SPEC.md;最省事的交付方式是给我 4 段纯色背景的 MP4(或直接给 512×512 透明 PNG 帧序列),我来抠图/抽帧/压缩装机。
验收记录(2026-09-30)
- 单测 40/40 通过(状态机 / 配置 / 案例校验 / 路由鉴权与素材净化 / mock 宿主契约 / settings 同步)。
- 隔离实例(桌面 runtime 0.2.0-rc.2,独立 DSH_HOME + 端口 3099)+ 无头 Chrome CDP 全流程:宠物渲染 → 专注到点居中弹窗(实测几何中心 = 视口中心)→【再等会】案例窗(1 条久坐 + 1 条缺水,轮换) → 关窗后提醒窗立刻恢复并继续倒计时 → 休息结束弹「回来干活」→【开始干活】进入下一轮(breaksTaken=1)。
- 提示音路径用音频探针实测(统计 createOscillator 调用):专注到点 +3、休息结束再 +3,两处都真的执行了。
- 设置生效链路:面板值 → profile patch → settings.describe() → 插件 ≤2s 生效(cfgSource=user)。
修复记录
| 日期 | 问题 | 根因 | 修复 |
| 09-30 | 到点没声音、弹窗被忽略 | 提示音从未实现;提醒窗是右下角贴边卡片 | Web Audio 现场合成三声"滴滴滴"(设置页可试听/调音量);提醒窗改为居中遮罩弹窗 |
| 09-30 | 看完案例后休息倒计时不再出现、跑完也不进下一轮 | 前端用 dismissedAt === phaseStartedAt 做永久屏蔽,点过一次【再等会】后整个阶段都不再弹窗 | 改为只由 snoozeUntil 控制;案例窗关闭时发 resume 立刻恢复提醒;休息结束时清空 snoozeUntil;另加「等待上限」兜底自动开下一轮 |
| 09-30 | 保存设置后整张卡片变空白,改过的值看着"改不回去" | form.subscribe() 的回调不带参数(store 只通知"变了"),旧代码把回调参数当新快照 → 快照被写成 undefined,全部字段渲染成空 | 回调里重新 getSnapshot(),并只接受有效快照;保存改为一次原子 mutate;新增「恢复默认值」与调试加速「一键刹车」 |
| 09-30 | 点「恢复默认值」后宿主仍按旧值跑 | 所有字段被 unset 后设置服务把 profile patch 里整条条目剪掉,宿主重读时"没有这一行"就直接 return → 配置停在上次的值 | 三档兜底:用户层非空用它 / 用户层清空但条目在 → 用 effective / 条目整条消失 → 回落 schema 默认值 |
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wangzhanchao883/dsh-no-long-sit
养只桌宠猫,到点催你起身走动喝水
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9