DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

dsh-helper-plugin-notify-away

Helper Plugin Notify Away

dsh 插件:当你在查看其他位置时,会话完成后显示 Cursor 风格的系统通知。查看该会话时保持静默。通过 link: 或 github: 安装。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:x102201/dsh-helper-plugin-notify-away#d43c61146a7f6cd8f5991a91e951741f30c8d0a9
README兼容性版本

兼容性与来源证明

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

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

版本

0.1.0stable
2026/9/20

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/20
查看源码 ↗
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 和进程生命周期管理Im@xmanrui/dsh-im将十一种 IM 渠道和一个公网 AI Office 接入本地 DeepSeek Harness。Pocketdsh-pocket把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。DSCODE@toddzheng024/dscode-bundle完整的 DeepSeek 编码代理,支持持久化 shell、Ultra 协作和自动权限审查。

README

dsh-helper-plugin-notify-away

English | 中文

A system-notification plugin for DeepSeek Harness (dsh), modeled on Cursor's agent toast: stay silent while you watch the session that just finished, and raise an OS notification when you have switched away.

Why it exists: a long dsh turn is easy to miss if you have gone to another window. The Web UI already shows a green "done" dot in the sidebar when you are looking at it. This plugin covers the other case — you are not looking — with a browser Notification that becomes a Windows / macOS system banner on http://127.0.0.1.

How it feels: start a task, switch to another app or tab. When the root session goes idle, a toast named after that session appears. Click it to focus the Web UI and open that session. If you were already watching that session, nothing is raised.

watching this session, window focused     silent
other window / hidden tab / other session  system notification

Install (one line):

dsh plugin --profile web add link:/absolute/path/to/dsh-helper-plugin-notify-away
dsh plugin --profile web add github:x102201/dsh-helper-plugin-notify-away

What it does

PieceBehavior
Completion edgeFires when a listed session's running bit flips to idle. The first observation only records the bit, so a session already idle at load never toasts.
Away gateSilent only while you are looking at that session: the page is visible, the window is focused, and list.current matches. Hidden tab, unfocused window, or a background session finishing → toast.
Root sessionsSubagent rows (origin: 'subagent' or a parentId) are ignored, so parallel children do not flood the tray.
PermissionAsked on the first click or keystroke, not while you are away (Safari only grants gesture-bound requests).
DedupEach toast is tagged notify-away:<sessionId>, so a repeat replaces the previous instead of stacking.
ClickFocuses the window and calls ctx.sessions.open(sessionId).

The plugin writes no session-event vocabulary of its own. It only reads the same sessions-list snapshot the sidebar reads.

Install

Both installation styles are supported. The package ships plain ESM plus one ModuleLoader client factory (no build step, no runtime dependencies), so nothing has to be compiled or allowlisted by pnpm at install time.

Prerequisite: dsh plugin forwards its arguments to pnpm, so pnpm must be on PATH (corepack enable pnpm provides it). Without it the CLI prints pnpm not found on PATH and exits 127.

1. From a local checkout (link:)

dsh plugin --profile web add link:/absolute/path/to/dsh-helper-plugin-notify-away
  • The path must be absolute, or relative to the directory you run the command from (the CLI anchors relative link:/file: specs to your invoking directory, not to the profile).
  • link: symlinks the checkout, so edits to index.js/client.js/lib/*.js take effect on the next dsh web restart with no reinstall.

2. From a Git host (github:)

dsh plugin --profile web add github:<owner>/<repo>
  • The repository root must be this package (the directory holding package.json and cordis.patch.yml).
  • Pin a revision when you want reproducibility: github:<owner>/<repo>#<tag-or-commit>.
  • Because there is no prepare/postinstall script, pnpm never asks you to allowlist a build.

What happens underneath

dsh plugin ... add forwards to pnpm inside $DSH_HOME/profiles/web, then reconciles the profile manifest: because this package declares dsh.bundle.patch, its name is appended to dsh.profile.bundles automatically. On the next boot that bundle's patch layer adds one host row:

- insert:
    - id: notify-away
      name: ./index.js      # anchored to the patch file, so any install layout works

package.json's dsh.client declaration is what makes the Web UI scan this package and serve ./client as a ModuleLoader bundle. The host row exists so that scan has an active Loader entry, and so config is validated at boot.

Restart the profile to mount it:

dsh web            # alias of: dsh --profile web

Grant the browser notification permission the first time the page asks (your first click or keystroke). On macOS, also allow the browser in System Settings → Notifications.

Try the host row without installing

examples/standalone.patch.yml anchors ../index.js to the patch file, so a bare checkout can mount the host row:

dsh --profile web --patch <checkout>/examples/standalone.patch.yml

The browser half still needs the package resolvable as dsh-helper-plugin-notify-away (a link: install), because dsh.client is discovered from the package manifest.

Verify the install

# the composed config tree should contain the notify-away row:
dsh --profile web --dump-config | grep -A2 notify-away

Then start a task in the Web UI, switch to another window, and wait for idle: a system notification titled with the session name should appear. Stay on that session with the window focused: nothing should appear.

Uninstall

dsh plugin --profile web remove dsh-helper-plugin-notify-away

Configuration

All keys are optional; an empty mapping uses the defaults. Config is validated at load: unknown keys and wrong types fail boot instead of being ignored.

- id: notify-away
  config:
    onlyWhenAway: true
    includeSubagents: false
    body: Task finished.
KeyTypeDefaultMeaning
onlyWhenAwaybooleantrueSuppress the toast while you are looking at the session that just finished.
includeSubagentsbooleanfalseAlso toast when a child agent goes idle.
titlestring(session display title)Optional static toast title.
bodystringTask finished.Toast body copy.

A patch replaces the targeted row's whole config mapping; omitted keys fall back to the defaults. Put overrides in the profile's cordis.patch.yml, or see examples/profile-patch.yml.

The host row validates these keys so a typo fails at boot. The browser half currently uses the same defaults (it cannot read host-row config without an RPC). Leave the mapping empty unless you are pinning the documented defaults on purpose.

How it works

sessions.list snapshot  ──►  running → idle edge
                                    │
                         shouldNotify(away || current !== sessionId)
                                    │
                         browser Notification  ──►  OS banner
                                    │
                         click  ──►  window.focus + sessions.open
  • Away is a page fact. document.visibilityState === 'hidden' or !document.hasFocus(). There is no host-side focus signal.
  • The client bundle is a factory, not an ESM graph. The Web UI loads client.js through window.__ModuleLoader__.load. Relative ./lib/ imports would not resolve, so client.js inlines the policy that lib/policy.js tests.
  • No install-time build. link: and github: therefore behave the same: the host imports only node: and relative paths, and there is no prepare/postinstall script for pnpm to allowlist.

Limits

  • Completions only. Waiting-for-approval / ask_user_question toasts are not in this version.
  • Browser-owned permission: if the prompt is denied, the plugin is silent for that origin.
  • Cancelling a running turn also goes idle, so a cancelled task still triggers a "finished" toast.
  • The host-row config mapping is validated but not yet pushed to the browser half.

Compatibility

Written against dsh 0.1.5-rc.2. Seams used:

SeamUse
Host row name: ./index.js + dsh.bundle.patchlink: / github: install
package.json dsh.client (platform: web, inject: [@deepseek-ai/dsh-client-runtime])Web UI scans and serves ./client
Client inject: ['sessions']ctx.sessions.list snapshot + ctx.sessions.open
Browser Notification APIOS banner on the Web UI origin

Test

npm test              # node --test
npm run test:direct   # single process (sandboxes that block child processes)

Layout

index.js                     Cordis host plugin: config validation + ready log
client.js                    ModuleLoader factory: away gate + Notification
cordis.patch.yml             bundle patch: insert the host row
lib/config.js                config schema and defaults
lib/policy.js                pure shouldNotify / running→idle fold (tested)
examples/                    profile overlay and standalone host-row overlay
scripts/run-tests.mjs        single-process test runner
test/                        config, policy, package shape, host wiring, client factory
test-support/harness.mjs     fake Cordis ctx and sessions list
README.md / README.zh.md     this document, both languages

License

MIT.