DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Plugin Kegel — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
P

dsh-plugin-kegel

Plugin Kegel

DeepSeek Harness 的凯格尔提醒器:带有引导式收缩/放松组的间隔计时器——对话左上角显示一个标签,侧边栏中提供完整面板。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:jueshali/dsh-plugin-kegel#245ec2f8aeb7b02e87ad5bf61a27cd07d1539559
README兼容性版本
The panel mid-set: a five-second squeeze, rep 1 of 10, settings expanded

兼容性与来源证明

Plugin Kegel 以 dsh-plugin-kegel 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/9

版本

0.1.0stable
2026/10/9

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/9
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Ab Chartdsh-ab-chart带有绘制其调用的浏览器卡片的图表渲染工具,封装在一个可发布的插件包中Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义

README

dsh-plugin-kegel

English | 中文

A Kegel (pelvic-floor) reminder for DeepSeek Harness — an interval timer that nudges you once an hour and then guides a set of squeeze/release reps with audio cues.

It is a reminder, not medical advice and not a training log. Go at a comfortable pace and stop if anything hurts.

┌ sidebar ────────────┐   ┌ panel ────────────────────────────────────┐
│  ⏱ Kegel reminder    │ → │  Next reminder in 42:15   ◔ progress ring │
│  ⚙ Plugins           │   │  [Do a set now] [Restart timer]           │
└─────────────────────┘   │  3 sets today · 30 reps   /  settings     │
                          └───────────────────────────────────────────┘

┌ conversation header ──────────────────────────────────────────────┐
│ (◔ 42:15 ·) ▶ ↗     Session title …                               │
└───────────────────────────────────────────────────────────────────┘
       │       │ └ open the full panel
       │       └ do a set now (hidden while a set is running)
       └ click = the current phase's main action
         (waiting → start · squeezing → pause/resume)

The panel mid-set: a five-second squeeze, rep 1 of 10, settings expanded

The full panel mid-set (Chinese UI — the plugin ships both zh and en dictionaries).

The chip sits in the window-drag band of the conversation header, so it carries its own -webkit-app-region: no-drag, written as .kg_chip.kg_chip to outrank the host's [data-window-drag] rule regardless of stylesheet order — otherwise a click would drag the window.

Install

Requires a DSH build with the web surface (@deepseek-ai/dsh-base + @deepseek-ai/dsh-web-app profile bundles). Developed and verified against 0.2.0-rc.2.

# From GitHub, through the plugin manager (installs the bundle and selects it):
plugin_manager install_bundle github:jueshali/dsh-plugin-kegel

You can also paste github:jueshali/dsh-plugin-kegel into the Plugins page in the sidebar, or, after an npm release, plugin_manager install_bundle dsh-plugin-kegel.

The plugin is a bundle: installing it adds dsh-plugin-kegel to dsh.profile.bundles, and its cordis.patch.yml inserts the one loader row the plugin needs. To uninstall:

plugin_manager remove_bundle dsh-plugin-kegel
Manual install (no package manager)

Clone the repository anywhere, then make the package resolvable from your profile and add it to the profile's bundle list:

// <profile>/package.json
{
  "dependencies": { "dsh-plugin-kegel": "link:/absolute/path/to/dsh-plugin-kegel" },
  "dsh": { "profile": { "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-plugin-kegel"] } }
}

No build step is needed — the browser half is committed as lib/client.js.

How it works

       interval elapses        "Start set"
wait ──────────────────► due ─────────────► squeeze #1 ─► release #1 ─► … ─► squeeze #N
  ▲                      │                                                      │
  │                      │ snooze 5 min                                         │ set done
  │                      └──────────────────────────► wait ◄────────────────────┘
  └───────────────────────────────────────────────────┘
  • wait — a countdown to the next reminder; it starts ticking as soon as the plugin mounts.
  • due — time is up: an audio cue plus an optional desktop notification. It waits for you to start or snooze; it does not auto-run the guided set by default, so a reminder that fires while you are away cannot silently "complete" itself and reset your clock. Turn on Start a set automatically when due if you want full automation.
  • squeeze / release — the guided set, with a different cue per transition (rising two-tone for squeeze, a low tone for release, a three-note flourish when the set completes).
  • A set that finishes credits itself, notifies you with the next reminder time, and immediately starts the next interval.
  • If the interval elapsed while the page was closed you get one reminder when you come back, not a backlog.
  • Countdowns are deadline-based (endAt timestamps), so a throttled background tab cannot make them drift; the state is mirrored into localStorage (dsh.kegel.v1) so a refresh never loses it.

Settings

SettingDefaultRange
Reminder interval (min)601–480
Reps per set101–50
Squeeze (seconds)51–60
Release (seconds)51–60
Start a set automatically when dueoffon/off
Audio cuesonon/off
Desktop notificationoffon/off

Today's set/reps counters reset with the calendar day.

Slots it occupies

SlotKindContent
mainkeyed, key kegelthe full panel
sidebar.panellistlist, id kegelthe sidebar icon; the id matches the main key, so the icon opens that panel
conversation.header.leadingsingle, rootthe header chip described above

Development

lib/index.js       node half  — an empty apply(); its only job is to exist as a loader row
lib/client.js      browser half — the whole UI, hand-written as a lazy-CJS bundle
cordis.patch.yml   the bundle patch that inserts the loader row
test/smoke.mjs     offline test: no browser, no DSH, ~60 assertions
node test/smoke.mjs     # syntax + contract + state machine + rendering, all stubbed

test/smoke.mjs reproduces the two contracts the shell enforces — the bundle shape (window.__ModuleLoader__.load({ id, factory }), side effects deferred to materialization) and the plugin body (apply(ctx) + inject) — then drives the reminder engine on a controlled clock and renders every component with a stub React. CI runs it on Node 18/20/22.

Two things worth knowing before you edit this

  1. The browser half is the package's client half. @deepseek-ai/dsh-client-modules scans enabled loader entries for packages declaring dsh.client.platform === "web", resolves exports["./client"], and serves it from /plugins/<package name>/client.js. The bundle's id must equal the package name. It only requires react, which the shell seeds, so the package has no runtime dependencies and no build step — edit lib/client.js directly.
  2. Editing lib/client.js is not enough on its own. The node half snapshots the bundle bytes at compose time, so a page refresh still serves the old code. To pick up a change, make the loader re-process the row — toggle the plugin off and on (plugin_manager set_plugin include:ui-kegel enabled=false, then enabled=true), or restart DSH. The client HMR chain then pushes the new module to the browser, usually without a manual refresh.

License

MIT