DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

dsh-plugin-task-notify

Plugin Task Notify

长任务完成语音提醒插件:子任务完成响"嘟"、整轮完成响"叮",阈值/音量/多会话全局可配置(纯前端、零 host 改动)

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

npx -y @deepseek-ai/dsh plugin --profile web add github:DearMrChai/dsh-plugin-task-notify#078496b89d7c4200f95b5b02d41553034285f43f
README兼容性版本

兼容性与来源证明

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

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

版本

0.2.1stable
2026/9/14
0.2.0stable
2026/9/4

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rIm@xmanrui/dsh-im将十一种 IM 渠道和一个公网 AI Office 接入本地 DeepSeek Harness。DSCODE@toddzheng024/dscode-bundle完整的 DeepSeek 编码代理,支持持久化 shell、Ultra 协作和自动权限审查。Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理

README

dsh-plugin-task-notify

Long-task audio reminder for DeepSeek Harness — a short "beep" when a sub-agent finishes, a clear "ding" when the whole turn is done and you should come back. Pure browser-side; works with any AI provider.

DSH(DeepSeek Harness)长任务完成提醒:你发出消息不响;子任务(子代理)完成响一声"嘟";整轮任务跑完、该回来操作了,响一声"叮"(附带可选标题闪动 / TTS 播报)。纯浏览器端做提醒,和你用哪家 AI 模型无关。

Features / 特性

  • Beep on sub-task / 嘟(子任务完成): listens for sub-agent tool calls (subagent, subagent_fork, etc.) settling; plays a short beep per completion, with an automatic merge window for rapid consecutive ones.
  • Ding on turn end / 叮(整轮完成): starts a timer when the turn begins; if the turn runs past a configurable threshold (default 5 min), plays a rising two-tone ding when the agent returns idle — the signal to come back. Short turns stay silent.
  • Multi-session / 多会话全局: monitors all sessions by default; configurable to current session only.
  • Self-contained audio / 声音自包含: Web Audio API synthesis, no external assets; optional TTS via speechSynthesis (off by default) with customizable template — use {time} as a placeholder for the actual duration.
  • Two-half structure / 两个半结构: Host half registers the settings namespace; Client half runs the browser reminder.

Install / 安装

From the plugin market / 从插件市场安装

dsh plugin add dsh-plugin-task-notify

Restart dsh web and the settings card appears under Settings → Plugins.

Manual install / 手动安装

  1. Build (or use the pre-built lib/ artifacts):
    pnpm install && pnpm build
    

    The lib/ directory ships pre-built; only rebuild after modifying src/.

  2. Copy the whole package into the DSH profile:
    <dsh-home>/profiles/web/node_modules/dsh-plugin-task-notify/
    
  3. Add a cordis.patch.yml entry to the profile (the inject: [settings] line is required):
    - insert:
        - id: task-notify
          name: dsh-plugin-task-notify
          inject: [settings]
          config:
            enabled: true
            thresholdMinutes: 5
    
  4. Restart DSH. The settings card appears under Settings → Plugins.

⚠️ The inject: [settings] line is critical. Without it the cordis loader never waits for the settings service, so the host half's apply() runs but the namespace never registers — and the settings card silently does not appear. See Troubleshooting below.

Configuration / 配置项

FieldMeaningDefault
enabledMaster switchtrue
thresholdMinutesTurn-end ding threshold (minutes)5
subReminderEnabledSub-task beep switchtrue
mergeMsConsecutive sub-task merge window (ms)500
masterVolumeDing volume, 0..10.6
subVolumeBeep volume, 0..10.5
ttsEnabledTTS readout (default off)false
ttsTemplateTTS template, {time} = actual duration任务完成,用时约 {time} 分钟
titleFlashTitle-bar flash on turn endtrue
globalSessionsMonitor all sessionstrue
batchSingleBeepSingle beep per turn for all sub-tasksfalse

Sound trigger rules / 声音触发规则

  • You send a message: silent.
  • Sub-task completes: a sub-agent-family tool call disappears from runningCalls → short beep. Merge window deduplicates rapid completions; batchSingleBeep makes one beep per whole turn.
  • Turn ends: session goes from running to idle AND the timer ≥ threshold → rising two-tone ding + optional title flash + optional TTS using your custom template (with {time} replaced by actual duration).

Browser notes / 浏览器注意

  • Needs one user gesture (click/keypress) before audio plays — click the page or send a message first.
  • TTS may be throttled in background tabs; Web Audio beeps/dings are unaffected.
  • Stops when the page closes; DSH host keeps running but sound needs the browser open.

Compatibility / 兼容性

  • Targets DSH 0.1.0-rc.8 client contract (same baseline as dsh-plugin-agent-workflow).
  • Uses only public session snapshots (sessions.list, running, runningCalls) and standard settings slots.
  • Settings card staleness fix (0.2.1, 2026-09): the card now receives the live bound settings scope and subscribes to it, so saved values render immediately (the slot renderer caches a one-shot inject() snapshot forever).
  • DSH 0.1.2-rc.1 snapshot-shape fix (2026-09): the client notifier previously read snap.runningCalls / snap.turnTimings as flat fields, but on 0.1.2-rc.1 SessionSnapshot only exposes running (running-call tree / turn timings moved into the chat view views.get('chat')?.legacy). Reading the flat field threw TypeError: items is not iterable inside walk → every SessionTracker.adopt() died → trackers= 0 and the whole notifier was silent, with the error repeating on every sync. Fix: added runningCallsOf() / turnTimingsOf() adapters that read views.get('chat')?.legacy?.runningCalls first, fall back to the flat field, and degrade to empty on absence; walk now guards Array.isArray. On 0.1.2-rc.1 the turn-end "叮" works (it only needs running); the sub-agent "嘟" is a silent no-op there because the running-call tree is not reachable through sessions without the chat-view service.

Troubleshooting / 排坑

Card shows stale values right after Save (controls look like they "did not work" even though the settings file actually updated):

The DSH slot renderer caches each slot entry's inject() result per registration (dsh-client-ui-renderer cachedRootInject, a WeakMap keyed by the entry). The settings card therefore receives whatever the inject closure returned on first render, forever. The 0.2.0 card was injected a one-shot value snapshot, so after Save (which writes via the live scope.set) the card fell back to the frozen snapshot and displayed the pre-save state. Fix (0.2.1): the inject closure hands the card the live bound settings scope instead of a snapshot; the card subscribes to it (scope.subscribe + scope.getSnapshot().value) and re-reads after every settled write, so Save updates the card without a reload.

Settings card does not appear even though the plugin shows as mounted and active in the plugin list:

The cordis loader reads inject from the patch line only, not from the plugin module's export const inject. If the patch line omits inject: [settings], the host half's apply() runs but any async delay (like installSettingsSection) never fires — the settings namespace is never registered, and the card never appears. Fix: add inject: [settings] to the patch line and use synchronous ctx.settings.register() in apply().

License

MIT © DearMrChai