READMESource: master@712f2365
番茄时钟 dsh-pomodoro-card
DeepSeek Harness 插件:在会话输入框下方的环境栏(conversation.composer.dock)里常驻一个番茄钟,
用圆环倒计时显示当前阶段,提供专注 / 短休息 / 长休息三段循环。
功能
- 三段循环:专注 → 短休息 → 专注 …,每完成 4 个专注进入一次长休息(次数可调)。
- 倒计时圆环:点击圆环开始 / 暂停 / 继续;圆环随剩余时间收缩,颜色随阶段变化 (专注番茄红、短休息绿、长休息蓝)。
- 阶段操作:重置本阶段(回到完整时长)、跳过本阶段(不计入完成数)、打开设置。
- 进度提示:阶段名 + 当前循环内的圆点进度(● ● ○ ○)。
- 今日统计:按本地日期统计当日完成的专注数,跨天自动归零。
- 可调设置:专注 / 短休息 / 长休息时长(分钟)、长休息间隔(个番茄)、 自动开始下一阶段、完成提示音、系统通知;支持一键恢复默认。
- 刷新不丢:用绝对结束时间写入
localStorage,刷新或重开页面后继续倒计时; 同一 Harness 窗口内的多个会话共享同一个计时器。 - 提示:阶段完成时用 Web Audio 播放三音提示;开启系统通知后,阶段完成会发桌面通知 (首次开启时向浏览器申请权限)。
目录结构
pomodoro-timer/
├── package.json # bundle 清单:dsh.bundle / dsh.client 声明
├── cordis.patch.yml # 把插件挂进 profile 的插入补丁
├── index.js # Host 半边(空实现,计时器完全在 Client 侧)
├── client.js # Client 模块:计时状态机 + 输入框下方 dock 组件
├── locale/
│ ├── en.json # 插件市场上的英文标题 / 描述
│ └── zh.json # 插件市场上的中文标题 / 描述
├── icon.svg # 插件图标(插件包)
├── icon.png # 市场条目图标(GitHub 托管的 PNG)
├── test/
│ └── run-tests.mjs # 无浏览器 / 无 React 依赖的行为测试
├── LICENSE # MIT
├── MARKETPLACE.md # 上架到 DSH 插件市场的步骤
└── README.md
安装
插件通过 Harness 的插件管理器以本地 bundle 安装(在 profile 的 node_modules 中以 symlink 链接本目录):
- 在本会话中,让代理执行:
plugin_manager(action: "install_bundle", target: "<本目录的绝对路径>") - 或在 Harness 的插件管理界面里选择「从本地目录安装」,指向本目录。
安装完成后输入框下方会出现番茄钟;如果没出现,刷新一次 Web 界面。
上架到插件市场(让其他人也能在 Discover 里搜到)的步骤见 MARKETPLACE.md。
使用
| 操作 | 行为 |
|---|---|
| 点击圆环 | 开始倒计时 / 暂停 / 继续 |
| ↺ | 重置当前阶段到完整时长(不改变已完成数) |
| ⏭ | 跳过当前阶段,不计入完成数 |
| ⚙ | 展开 / 收起设置(Esc 收起) |
设置项:
- 专注时长 / 短休息 / 长休息:1–120 / 1–60 / 1–120 分钟。
- 长休息间隔:每完成几个专注进入长休息,1–8 个。
- 自动开始下一阶段:关闭后,每个阶段结束会停在待开始状态,需手动点圆环。
- 完成提示音:用 Web Audio 合成三音提示,不依赖音频文件。
- 系统通知:需要浏览器授权;如果之前拒绝过,按设置面板里的提示到站点设置中重新允许。
其他行为:
- 跳过专注不会增加「今日完成」和循环圆点。
- 专注完成时计数 +1,并按长休息间隔决定下一阶段;休息结束回到专注。
- 关闭自动开始后,阶段结束会显示下一阶段的完整时长并等待手动开始。
数据
- 存储键:
dsh:pomodoro:timer:v1(localStorage)。 - 内容:当前阶段、运行状态、绝对结束时间、暂停剩余时长、已完成专注数、今日统计、设置。
- 清除该键即可恢复默认状态;设置面板中的「恢复默认」只重置设置项。
开发
- 纯 Client 模块,无需构建:
client.js里嵌入 React(require('react'))、字典和样式, 以window.__ModuleLoader__.load({ id, factory })注册,然后在conversation.composer.dock槽位注册组件。 - 修改后无需重装(profile 里是指向本目录的 symlink),刷新 Web 界面即可;
若改了
package.json里的 name /dsh清单,需要重新安装一次。 - 计时器逻辑在 store 中以 250ms 的 ticker 驱动,只在显示秒数变化 / 阶段切换时通知订阅者,
每次动作和阶段切换时落盘,不会每秒写
localStorage。 - 主题使用 Harness 的
--dsw-alias-*设计令牌;番茄红 / 绿 / 蓝只作为计时器本身的识别色。
测试
npm test # 等价于 node test/run-tests.mjs
测试不需要浏览器或 React:test/run-tests.mjs 用 node:vm 伪造 window(内存
localStorage、可手动推进的假时钟、捕获的定时器、假的 document)加载真实
client.js,注入一个极小的 React hook 垫片,覆盖开始/暂停/重置/跳过、阶段切换、
长休息轮转、跨天统计、刷新恢复、设置夹取与落盘、以及组件的渲染与交互。
No comments yet. Be the first to write one.