番茄钟盲盒 · Pomodoro Blind Box
在 DeepSeek Harness 的输入框下方放一个番茄钟。每完成一个专注段,就开一个盲盒;15 件藏品、4 个稀有度,还有一本可以翻的图鉴。
一个 DeepSeek Harness Web UI 插件:纯前端、无依赖、无构建步骤、无网络请求。计时和收集进度只存在浏览器的 localStorage 里。
功能
- 番茄钟:专注 15 / 25 / 45 / 60 分钟,短休息与长休息 3 / 5 / 10 / 15 分钟;开始、暂停、继续、跳过、重置。
- 长休息节奏:每完成 4 个专注段自动进入一次长休息(时长可配)。
- 盲盒:只有真正走完的专注段才会发盒;跳过不会。开箱有摇晃、开盖、物件弹出的动画,并适配
prefers-reduced-motion。 - 15 件藏品 / 4 个稀有度:普通 60%、稀有 25%、史诗 12%、传说 3%;档位内等概率。每次独立抽取,重复是正常的。
- 图鉴:设置面板里的 5×3 网格,已收集的亮起并按稀有度着色;点格子查看名称、稀有度和描述,未发现的显示为锁定;集齐 15 件后显示「已集齐」,开箱卡也会带上「图鉴已集齐」。
- 双语与主题:中英文词典;颜色、圆角、阴影全部走 Harness Theme token,跟随明暗主题。
- 持久化:计时之外的设置、统计、图鉴和未领取的盲盒都存在
localStorage;刷新页面不会丢收集进度。
安装
需要已安装 DeepSeek Harness(Web UI)。先把本仓库克隆或下载到本地一个固定目录:
git clone https://github.com/WU55UY/dsh-pomodoro-box.git
然后:
- 打开 Harness 的 设置 → 插件,选择安装 Bundle / Install bundle。
- 目标选择刚克隆下来的
dsh-pomodoro-box文件夹(绝对路径)。 - 在插件列表里启用 Pomodoro Blind Box。
- 输入框下方出现
🍅 番茄钟 25:00 专注一栏即可使用;如果没出现,刷新一次页面。
这是一个本地 Bundle:package.json 里的 dsh.bundle.patch 把插件行插入当前 profile,dsh.client 把 client.js 作为 Web Client module 下发。包名保持为 @local/dsh-pomodoro-box,不需要发布到 npm。
需要支持 Client module 的 DSH 版本;插件注册在
conversation.composer.dock和shell.overlay两个 Slot 上。
使用
| 操作 | 说明 |
|---|---|
| 点计时 chip | 开始 / 暂停 / 继续 |
| ⏭ | 跳过当前阶段(不发盲盒) |
| ⟳ | 重置回专注起点 |
| ⚙ | 打开时长设置和图鉴 |
| 专注自然走完 | 弹出盲盒卡片:收下 或 先收起来(收起并把计时器折叠成小胶囊) |
盲盒卡片可以用 Esc 关闭;设置面板点击外部或按 Esc 也会收起。折叠后点胶囊即可恢复。
稀有度与概率
| 稀有度 | 出现概率 | 件数 | 档位内单件概率 |
|---|---|---|---|
| 普通 Common | 60% | 6 | 10% |
| 稀有 Rare | 25% | 4 | 6.25% |
| 史诗 Epic | 12% | 3 | 4% |
| 传说 Legendary | 3% | 2 | 1.5% |
先抽稀有度,再在该档位内等概率抽一件。没有保底、不去重,所以连抽重复很正常。按当前权重模拟,集齐 15 件大约需要 90 个番茄钟(中位数),平均约 109 个。
数据与隐私
所有数据都在本机浏览器里,键名 dsh.pomodoro-box.v1:
{
"version": 2,
"settings": { "focus": 25, "shortBreak": 5, "longBreak": 15 },
"stats": { "total": 12, "boxes": 12, "owned": ["coffee", "star"] },
"pending": {
"id": 12,
"itemId": "star",
"tier": "legendary",
"newItem": true,
"openedAt": 1760000000000
}
}
pending 为 null 表示没有待领取的盒;owned 是已收集的物品 id,按发现顺序排列。插件不发送任何网络请求,也不读取 Harness 的会话内容。
想重置收集进度,在 DevTools 控制台执行:
localStorage.removeItem('dsh.pomodoro-box.v1')
然后刷新页面。
开发
没有构建步骤:client.js 就是最终产物,由 Host 作为 Client module 直接下发。
pomodoro-box/
├── package.json Bundle 清单:dsh.bundle.patch + dsh.client
├── cordis.patch.yml 插入插件行(id: pomodoro-box)
├── index.js Host 半边,目前不需要做任何事
├── client.js 全部 UI 与状态机(单文件 Client module)
├── locale/
│ ├── zh.json 插件列表里的标题/描述 + 词典
│ └── en.json
└── icon.svg 插件图标(原创 SVG)
几个容易踩的点:
client.js必须调用window.__ModuleLoader__.load({ id: '@local/dsh-pomodoro-box', factory }),id与包名一致;React 从共享模块表require('react')取,不写 JSX/TypeScript。client.js里的EN/ZH是运行时词典;locale/*.json是 Host 在插件列表里读取的元数据和同一份词典。两边要同步改。- 修改
client.js后,在插件管理里禁用再启用该插件即可让页面拿到新代码;如果 HMR 正在运行也可能自动生效。 - 主题只用
--dsw-alias-*token 和插件私有的--dsh-pomo-*变量;新增颜色请先确认 token 存在。 - 新增文件时记得加进
package.json的files。
English
Pomodoro Blind Box is a DeepSeek Harness Web UI plugin that puts a focus timer under the composer. Every completed focus session opens one blind box; there are 15 collectible items across 4 rarities (60% / 25% / 12% / 3%), and a 5×3 collection gallery in the settings panel. Skipping a session never grants a box.
- Install: clone the repo, then install the folder as a bundle in Harness (Settings → Plugins → Install bundle) and enable Pomodoro Blind Box.
- Data: everything lives in
localStorageunderdsh.pomodoro-box.v1; the plugin makes no network requests. - Dev: no build step.
client.jsis loaded as a Client module viawindow.__ModuleLoader__; keep the runtimeEN/ZHdictionaries in sync withlocale/*.json.
No comments yet. Be the first to write one.