DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

dsh-mama-cheer

Mama Cheer

键盘快捷键,可将鼓励性消息注入正在运行的 dsh-TUI 对话:工具正在执行时进行引导;模型仅流式输出文本时中断并发送消息

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

npx -y @deepseek-ai/dsh plugin --profile web add github:VviLliAm-qwq/dsh-mama-cheer#cd9b4c92fc50617dfa573e60f9fa7ca3efd09ae1
README兼容性版本

兼容性与来源证明

Mama Cheer 以 dsh-mama-cheer 发布,当前版本为 0.2.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

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

版本

0.2.1stable
2026/9/16
0.2.0stable
2026/9/13

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rPocketdsh-pocket把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。DSCODE@toddzheng024/dscode-bundle完整的 DeepSeek 编码代理,支持持久化 shell、Ultra 协作和自动权限审查。

README

dsh-mama-cheer

A keyboard shortcut that drops one short, configurable encouraging message into the live conversation of dsh-TUI — without leaving the terminal and without waiting for the current turn to end.

press ctrl+alt+m  →  the message reaches the model at the earliest legal moment

What it actually does

A model request already in flight cannot be appended to: the request has left the process and the stream is one-way. There are exactly two places a new user message can reach the model, and this plugin picks between them per keypress:

Model stateDeliveryWhat the model sees
idleAgent.followupa normal next turn
running, a tool call is in flightAgent.steerthe message at the next step boundary — no interrupt, the running tool finishes untouched
running, only streaming textAgent.cancel({ keepInbox: true }) + followupthe half-written answer is kept (interrupted: true) and the model reads the message in the new turn immediately

The middle row is the point of the default smart policy: interrupting a tool call leaves a durable tool call aborted before dispatch record and the host's own "interrupted by user" notice, while interrupting a text stream costs almost nothing. Only the third row ever interrupts. always and never are one setting away if you disagree with that judgement.

Two facts this design rests on, both read from the shipped code and one of them verified locally:

  • An interrupt does not discard the generated text. dsh-agent-loop commits the partial answer as an assistant/message with interrupted: true on the model-visible surface, so it stays in the conversation and in the next request.
  • Agent.cancel() is called with keepInbox: true, the same option the host's own Ctrl+Enter path uses, so messages you already queued are not dropped.

Install

dsh plugin --profile dsh-tui add dsh-mama-cheer

Then restart the TUI with /restart.

Local checkout during development:

dsh plugin --profile dsh-tui add file:C:\path\to\dsh-mama-cheer

The installer hard-links the package's files list into the profile, so after adding a new module under lib/ you must remove and re-add — running add again prints "Already up to date" and changes nothing.

Compatibility

ItemValue
Hostdsh-TUI 0.10.1-era seams: tuiShortcuts, tuiSettingsSections, tuiToast, plus the public ctx.agents registry
ManifestmanifestVersion 0.15, host facet only, no permissions requested
RuntimeNode `^22.19
PlatformsThe delivery path is platform-neutral (it drives the agent inbox). The toast feedback needs a TUI notification sink; without one it degrades to log-only.

Every host service is optional and retried until it is ACTIVE: a missing seam disables exactly that one capability (no shortcut, no settings card, or no toast) and never the boot.

Configuration

Every key has a default; a missing key means "no behaviour change", never a failed boot.

KeyDefaultMeaning
text妈妈加油!Text delivered to the model
comboctrl+alt+mShortcut to register; must carry ctrl or alt (the host refuses modifier-less and reserved combos)
interruptModesmartsmart = interrupt only while no tool is in flight · always = interrupt whenever the model is running · never = never interrupt, always steer
displaytoasttoast = transient notice, message stays out of the transcript · none = completely silent · bubble = the message appears as a normal user message
toastMs3000Toast lifetime (host clamps to 500–12000 ms)
keepInboxtruePreserve already-queued messages across an interrupt
retryMs / retryLimit400 / 50Readiness retry cadence and budget (composition-only; not shown in the settings screen)

Settings screen

All six user-facing keys are also editable in /settings (section Mama Cheer), with zh/en labels, hints and select options:

/settings → Mama Cheer
  Cheer message                 [text]
  Shortcut                      [text]
  Interrupt policy              [select: Smart | Always interrupt | Never interrupt]
  Display                       [select: Toast | Silent | User message]
  Toast lifetime (ms)           [number]
  Keep my queued messages       [boolean]

Values are read live on every keypress — no restart, no rebind dance:

  • the composition entry is the base layer and the settings layer is merged on top at press time;
  • changing Shortcut rebinds immediately (the stale binding is disposed first, so the old combo stops firing);
  • the two feedback toasts are zh/en pairs like the rest of the copy, resolved against the language /lang mirrors into the dsh-tui settings namespace (the settings card's own labels are localized by the host).

Known limitations

  • The interrupt notice row cannot be changed or removed. It is a host-owned projection (dsh-adapter/channel/projection.js) and the renderer seam forbids shadowing built-in event types. It appears only when the policy actually interrupts.
  • A custom transcript row is not possible in this build. The renderer seam expects a plugin to append a log-only session event, but Session.append() has no way to set the ignorable: true envelope marker that the persistence contract requires for out-of-repo event types. Measured locally: an unknown non-ignorable event makes the session log unreadable on the next load (SessionFormatUnsupportedError, "refusing to interpret the log"). This plugin therefore never writes session events of its own.
  • Keyboard only in the plain chat state. While a picker, dialog or scene is open, the keyboard belongs to that overlay and the shortcut does not match.
  • Targeting is heuristic. One window normally means one live agent; with several live agents the plugin prefers a running one, then the session whose events were seen most recently.
  • Headless hosts have no keyboard and no toast sink. The message path still works; the feedback does not.

Release and versioning

  • Repository: VviLliAm-qwq/dsh-mama-cheer
  • Published to npm as dsh-mama-cheer (--access public --provenance).
  • Releases are tag-driven: pushing a v* tag runs .github/workflows/release.yml, which re-runs the full verification, checks that the tag equals the package.json version, and publishes. No long-lived npm token is stored — the workflow exchanges its OIDC token through npm trusted publishing.
  • SemVer; CHANGELOG.md records every version, and the manifest version moves with the package version.

Verification

npm run verify                       # encoding + manifest + tests + pack layout
node --test                          # 35 tests: entry export shape, placement matrix, delivery, settings wiring, shortcut readback
node tools/probe-plugin.mjs <dir>    # headless real composition; exit 0 and "shortcut registered ..."

Probe output on a passing run:

seams settings=1 sections=1 shortcuts=0 agents=1 toast=0
settings namespace dsh-mama-cheer registered
settings section registered
shortcut registered ctrl+alt+m (confirmed by the host registry)
ready after 2 attempt(s)
VERDICT: PASS — the plugin applied and its registrations were accepted

shortcut registered <combo> is a verified claim, not an echo of the call. The host answers every refusal path — an unparsable combo, a reserved built-in, a duplicate, malformed options — with a no-op disposer, so the plugin reads its own registration back through the host's list() and only logs registered once the combo is really in the registry:

  • that line, and nothing weaker, is what says the key works. Its absence, or a shortcut refused <combo> (reserved, malformed, or duplicate) line, means the keypress will never reach the plugin — the readiness loop keeps retrying a refused combo until its retryLimit budget runs out;
  • on a host that serves no usable list() the binding cannot be confirmed: the plugin logs shortcut <combo> is UNVERIFIED, keeps whatever binding it may hold, and does not claim success.

The first-tick refusal followed by a successful retry is the documented seam behaviour, not a defect — and that retry now only stops at a confirmed registration.

Design notes

  • The entry module (lib/index.js) re-exports exactly name, Config, apply. Extra symbols change how the loader wraps the activation, and every seam registration is then refused with requires a live Cordis activation context — the plugin looks half-alive.
  • Optional services are read strictly first, then loosely, and every registration is retried until the provider is ACTIVE.
  • No permissions are requested: the plugin intercepts nothing, observes nothing, and stores nothing outside its own log file (~/.dsh-tui/dsh-mama-cheer.log, capped at 64 KB, not written under node --test).
  • A failing keypress is contained: it logs and toasts instead of throwing, so it can never take the keyboard down for other bindings.
  • src/ is intentionally absent — the plugin is plain ESM with no build step, so the published lib/ is the source of truth.

License

MIT