DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-notify-tray

Notify Tray

DeepSeek Harness 通知 + 状态栏插件:任务完成、需要输入、需要选择时弹系统通知(macOS / Windows / Linux);macOS 与 Linux(含 UOS、Deepin、麒麟)状态栏常驻小图标,显示任务进度与花费。Windows 没有状态栏,只弹通知。

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-notify-tray@0.1.7
README兼容性版本

兼容性与来源证明

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

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

版本

0.1.7stable
2026/10/29
0.1.6stable
2026/10/28
0.1.5stable
2026/10/27
查看其余 3 个版本收起版本
0.1.4stable
2026/10/27
0.1.3stable
2026/10/25
0.1.2stable
2026/10/25

相关插件

正在加载相关插件…

最新版
0.1.7
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
377.3 kB
文件数
30
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 6
周下载
0
最近提交
2026/10/29
查看源码 ↗
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 使用完整桌面界面),通过一次性令牌和 rRemote Bridge@linxin666/dsh-remote-bridgeDSH 远程桥接:主机端通过唯一且精确的 /ios/v1 WebSocket 路由提供协议 v1——会话列表、历史记录基线、提示、包含工具活动的实时回合增量、中断以及进程内代理审批——连接到通过一次性配对的设备Ds Botds-botDS Bot:DeepSeek Harness 的一组长期运行的 Bot,支持主 Bot、Bot 间消息和群聊Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:27 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel/You.com 无需密钥;通过 MCP 支持 Zhihu 全局/站内搜索,以及 Perplexity/SerpBase/DeepSeek(官方 + 原生工具/搜索)/Baidu/Kimi/Aliyun/Douba)

README

dsh-notify-tray

English | 简体中文

A notification + status-bar plugin for DeepSeek Harness (DSH). Works on macOS, Windows and Linux. It is one npm package that adapts to the OS it is installed on: macOS / Linux get notifications plus the status-bar whale; Windows has no status bar, so it gets notifications only, and its settings page shows no status-bar options.

  • System notifications — when a task finishes, fails, needs approval, needs you to pick an option, or waits for your input, you get a native notification written in the voice of a little whale (e.g. "🐳 All done! 'Write the weekly report' is finished — come check it out"). Clicking a notification jumps straight to the session. Each session keeps a single notification (a new one replaces the old); a "needs you" notification is taken back once you answer or approve; and when several tasks finish within a few seconds, the first shows at once and the rest fold into one "n more done".
  • Status-bar whale (macOS / Linux) — a small whale lives in your status bar and tells you what's going on through its posture. The drop-down menu lists running tasks, items waiting for you, today's usage and recently finished tasks; click any entry to open that session.
  • Settings page — every option can be changed directly on the DSH Plugins page (only the options your OS can use are shown), including the API price of the model you're currently using and the plan you subscribe to (Kimi / GLM / OpenCode / MiMo / Gemini / Grok / Claude / GPT / MiniMax / DeepSeek or custom). Balance and remaining quota are fetched automatically where the provider exposes an API; anything else can be filled in by hand.

The four whale states

What the whale is doingMeaning
Resting quietlyIdle
Blowing bubbles (animated)A task is running
A ! bubbleSomething is waiting for you (approval / choice / input)
A × bubbleA task just failed (shown for 10 minutes by default)
OSNotificationsStatus-bar whaleStatus-bar options on the settings page
macOSNotification CenterMenu-bar icon following the menu-bar colour, with a label such as Pending 1 / Running 2All (show/hide, label style, today's spend in the label, failure hold time)
Linux (UOS / Deepin / Kylin / KDE …)freedesktop notificationsSystem-tray icon, colour-coded (🔵 idle / running, 🟠 waiting for you, 🔴 just failed)Show/hide, failure hold time
WindowsToast notificationsNone (Windows has no status bar)None

Installation

The plugin is published on npm as dsh-notify-tray. Installing from npm needs nothing beyond DSH itself — no Git required.

⚠️ To get the latest release, include the version number, e.g. dsh-notify-tray@0.1.7 (the latest version is listed on npm). DSH installs plugins with pnpm, whose supply-chain policy (minimumReleaseAge) won't auto-install a release that is still inside its waiting period. With a bare dsh-notify-tray you may get an older version (e.g. 0.1.0). If an older version is already installed, remove it first, then install with the version number.

Option 1 — from inside DSH (recommended) Open DSH Plugins → Add plugin, type dsh-notify-tray@0.1.7 (with the version number) into the input box and click Install.

Option 2 — command line

# Desktop app (the dsh command bundled with the app); include the version to get the latest
dsh plugin --profile desktop add dsh-notify-tray@0.1.7
# Or the web / CLI profile
dsh plugin --profile web add dsh-notify-tray@0.1.7

Option 3 — from the Git repository (latest unreleased code)

Paste https://github.com/ROYLeXJ/dsh-notify-tray.git into Plugins → Add plugin, or run dsh plugin --profile desktop add https://github.com/ROYLeXJ/dsh-notify-tray.git. You can also clone the repo and install from a local directory: dsh plugin --profile desktop add /path/to/dsh-notify-tray.

This route requires Git; without it you'll see ERR_PNPM_GIT_RESOLVE_FAILED … 'git' is not recognized as an internal or external command. On Windows install Git from https://git-scm.com/download/win (the defaults are fine) and restart DSH; on macOS run git --version once in Terminal and follow the prompt to install the command-line tools.

Restart DSH after installing. The version on the plugin page is the one installed; the latest is listed on npm.

Got an older version? Most often this is pnpm's minimumReleaseAge described above: a new release is only auto-installed after a waiting period, and the install message says releases younger than the required age are not installed automatically. Remove the plugin, then install with the version number:

dsh plugin --profile desktop remove dsh-notify-tray
dsh plugin --profile desktop add dsh-notify-tray@0.1.7

Also, when the official npm registry is unreachable, DSH falls back to the npmmirror registry, which syncs a little later, so a just-published release may take a few minutes to appear there.

To update: include the version here too — dsh plugin --profile desktop remove dsh-notify-tray, then dsh plugin --profile desktop add dsh-notify-tray@<new version>. To uninstall: dsh plugin --profile desktop remove dsh-notify-tray.

Configuration

Every option can be changed on DSH's Plugins → Whale Notify Station page, or written into the profile's cordis.patch.yml. The page's first screen holds only the everyday options (which events notify, sound, the status-bar whale, a today's-spend card, your plan and its quota lookup); notification channel, spend method, custom prices, exchange rate and refresh intervals sit under a folded Advanced section at the bottom, tagged with how many of them you have changed.

- id: notify-tray
  config:
    channel: auto            # auto | client | system | both | off
    notifyInput: true
    spendSource: auto        # auto | balance | estimate
    planProvider: kimi       # provider of your plan, see the table below
    planId: cn-pro           # preset plan ID; leave empty for "manual"
    planApiKeyEnv: KIMI_CODE_TOKEN
    prices:                  # optional: price per million tokens, keyed by "provider/model", model ID or prefix
      deepseek-flash: { input: 2, cacheRead: 0.04, output: 8 }

Notifications & status bar

OptionDefaultDescription
notifyCompleted / notifyFailed / notifyApproval / notifyChoice / notifyInputall onToggle each of the five notification kinds
channelautoauto: the DSH window shows the notification when one is open, otherwise the OS does
suppressWhenFocusedtrueDon't notify while you're looking at that session (switch to another app and you will be)
soundtruePlay a sound with system notifications (macOS chime, Windows toast sound, Linux where the desktop supports it)
traytrueShow the status-bar icon (macOS / Linux, takes effect as soon as you save; ignored on Windows). After Hide status-bar icon in the tray menu, Show the status-bar icon again on the settings page brings it back without restarting DSH
titleStyletextWhat to show next to the whale in the macOS menu bar: text (Pending 1 / Running 2), count (numbers only), icon (whale only)
showSpendInTitlefalseAppend today's spend to the macOS menu-bar label
errorHoldMinutes10How many minutes the icon stays red / shows the × after a task fails (macOS / Linux)

Spend & pricing

OptionDefaultDescription
spendSourceautoUse the DeepSeek account balance when available, otherwise estimate from prices. In auto, while balance drops lag behind the DeepSeek models' estimate (the platform bills with a delay) the estimate is shown until the balance catches up; other providers' models are always added as an estimate
currencyCNYDisplay currency
balancePollMinutes5How often (minutes) to refresh the DeepSeek account balance
priceSourceautoWhich price to estimate with: auto (price table → custom price → DSH's built-in model catalog → plugin's built-in prices → a bundled models.dev snapshot), catalog, custom
customInput / customCacheRead / customOutputemptyCustom price per million tokens; leave empty to disable
customPriceCurrencyCNYCurrency of the custom price
exchangeRate7.21 USD = ? CNY; catalog prices are in USD and converted when displaying CNY
prices{}Per-model price table, highest priority

The Current API price section shows the model you're using (provider / model) and its catalog price. DSH's pi-ai adapter ships a model catalog (Claude, GPT, Gemini, Grok, Groq, Kimi, GLM, MiMo, MiniMax, OpenCode Go, DeepSeek, …); the plugin reads it directly and falls back to its built-in prices, then a models.dev price snapshot bundled with each release, or your custom price when a model is missing. It is found automatically for the desktop app and for dsh web (global npm installs such as ~/.npm-global or %APPDATA%\npm on Windows, pnpm, and nodes installed by nvm / fnm / volta; as a last resort the plugin asks npm root -g). If it isn't there at startup, the plugin looks again every 10 minutes. If the settings page still says it wasn't found, set the DSH_NOTIFY_TRAY_PI_AI environment variable to the DSH install directory (e.g. ~/.npm-global/lib/node_modules/@deepseek-ai/dsh) and restart. A one-click Copy catalog price into custom price lets you tweak from the catalog value.

Plans

OptionDefaultDescription
planProvidernonenone / custom / deepseek / kimi / glm / opencode / mimo / gemini / grok / claude / gpt / minimax
planIdemptyPreset plan ID (pick it from the drop-down on the settings page; name, price, period, currency and quota description are filled in automatically)
planName / planPrice / planPeriod / planCurrency / planQuotapresetEach can be overridden; leave empty to use the preset
planBalanceemptyPlan / prepaid balance (manual; leave empty when it can be fetched)
planRemainingemptyRemaining quota, e.g. 68% or 1200 requests (a manual value takes precedence over the API)
planResetAtemptyNext reset time (manual)
planApiKeyEnvemptyAPI key reference used for quota lookups — an environment-variable name, the same one DSH's Models page uses when it saves a key. The plugin only reads it when querying quota
planQuotaUrlpresetQuota endpoint; leave empty for the preset
planAutoQuotatruePoll the endpoint automatically when there is one
quotaPollMinutes10Quota refresh interval (minutes)

Built-in plan presets (prices are the list prices at the time of writing and may change — all editable):

ProviderPresetsFetched automatically
DeepSeekPay-as-you-goAccount balance GET /user/balance
KimiMembership Go / Plus / Pro / Max / Ultra (CN ¥49–1399, intl. $19–199), legacy Kimi Code, Moonshot pay-as-you-goKimi Code quota GET api.kimi.com/coding/v1/usages (needs the Kimi Code OAuth token, not a Moonshot API key); Moonshot balance
GLMCoding Plan Lite / Pro / Max (CN ¥118 / 538 / 1078, Z.ai $18 / 80 / 168)5-hour and weekly credits GET /api/monitor/usage/quota/limit
OpenCodeGo $10, Go Plus $40, Zen pay-as-you-goNo public endpoint
MiMoToken Plan Lite / Standard / Pro / Max (¥39 / 99 / 329 / 659)No API-key endpoint (console cookie only)
GeminiGoogle AI Plus / Pro / Ultra, API pay-as-you-goNone
GrokSuperGrok Lite / Standard / Plus / Heavy, API pay-as-you-goKey validation only (GET /v1/api-key), no balance
ClaudePro / Max 5x / Max 20x / Team, API pay-as-you-goNo endpoint for regular keys
GPTChatGPT Go / Plus / Pro 5x / Pro 20x / Business, API pay-as-you-goNo endpoint for regular keys
MiniMaxM Plan Go / Explore / Build (CN ¥49 / 119 / 469, intl. $22 / 55 / 132), legacy Coding Plan5-hour window remaining GET /v1/coding_plan/remains

Anything that can't be fetched can be typed in by hand; empty fields are simply hidden. On macOS / Linux the status-bar menu shows balance and plan on one row (余额 ¥… · provider 剩 …); its submenu lists the DeepSeek balance, plan name and price, remaining quota and reset time, a Refresh quota action and the usage page. The full details returned by the endpoint are on the settings page. The menu has one level of submenus, at most 6 rows each and 24 characters per row, so Windows / Linux trays no longer cut it off at the screen edge.

Notes

  • When notifications fire — a task that runs to completion counts as completed; an error, hitting the token limit or being blocked counts as failed; stopping a task yourself doesn't notify. For ask_user_question, questions with options and plan approvals count as needs a choice, questions without options as needs input; tool approvals count as needs approval. Only top-level sessions are tracked — sub-agents don't get their own notifications.
  • How spend is computed — when signed in with a DeepSeek account, today's spend is accumulated from drops in the account balance (top-ups don't count as negative spend; the platform bills with a delay, so in auto the estimate stands in until the balance catches up). In parallel, it's estimated from each provider/model route's tokens × unit price (price sources described under priceSource above); the Today submenu breaks it down per model (top 3). The ledger lives in ~/.dsh/storages/dsh-notify-tray/ledger.json and keeps 31 days.
  • DeepSeek off-peak prices — DeepSeek's listed prices are peak prices (Beijing time, weekdays 9–12 and 14–18). Tokens used outside those hours are estimated at half price; prices you type yourself (price table or custom price) are used as they are.
  • Clicking a notification / the status-bar icon / "Open DeepSeek Harness" in the menu — brings up the desktop app when there is one, otherwise (dsh web) opens the web UI in the browser. Browser notifications require granting notification permission first.
    • With the default channel: auto and a DSH window open, notifications come from the window, and clicking one jumps to its session on every OS.
    • macOS system notifications (dsh web, or channel: system) are sent with osascript, which can't tell DSH which session was clicked. Install terminal-notifier (brew install terminal-notifier) and the plugin uses it automatically: clicking the notification opens the session, and an answered question's notification is taken back.
    • Windows toasts can only launch the app, so the window that comes forward within a minute of a toast opens that toast's session. Windows won't let a background process pull a visible window that is behind another one to the front (see #4); a minimized window is restored.

Development

npm install
npm test                      # node --test
node scripts/demo.mjs         # walk a demo-only whale through every state (macOS menu bar)
node scripts/demo.mjs --live  # drive the real whale (DSH must be idle); restored afterwards
node scripts/demo.mjs --all   # also show "needs approval" / "failed"

Layout:

PathPurpose
lib/index.jsHost half: session tracking, spend ledger, plan / quota polling, tray driver, OS-notification fallback, GET notify-tray/state API
lib/client.jsBrowser half: native notifications from the DSH window and the settings page
lib/tray/Status-bar drivers (macOS helper via assets/tray-darwin.js, Linux StatusNotifierItem over D-Bus)
lib/catalog.js / lib/pricing.js / lib/quota.jsPlan presets, price resolution, provider quota endpoints
lib/voice.js / lib/whale.jsNotification copy in the whale's voice; icon rendering
locale/Plugin title / description in en and zh
reference/DSH type declarations and example bundles used while developing

Requires Node ≥ 20. Linux uses dbus-next for the tray.

Known limitations

  • Verified on macOS, Windows and Linux (Linux verified under the web profile: notifications and the system tray).

License

MIT © ROYLeXJ