How to use dsh-notifier
DSH Unified Notification & Remote Control Plugin: A single notify() API integrates with 27 push channels, while sending approvals, questions, and conversations from mobile back to desktop. Long-running tasks use automatic heartbeat with one-click stop support.
This article is auto-derived from indexed fields (wiki / faq / compatibility_json), not freshly AI-generated.
This article is derived from the plugin's already-indexed fields (wiki / faq / compatibility_json / readme), not freshly generated by AI. Source field is noted at the end of each section.
Quick start
dsh-notifier
— source: plugin_wiki.wiki_content
Install & verify
dsh plugin --profile web add dsh-notifier
Run the command above in your DSH Web Profile. Then enable the plugin in the plugin list.
— source: plugins.install
Key points
-
- id: dsh-notifier
-
- type: telegram
-
- type: dingtalk
-
- type: bark
-
- id: dsh-notifier
— source: plugin_wiki.readme_en (fallback readme_raw)
FAQ
What needs to be done first after installation to receive notifications?
In the profile's cordis.patch.yml, add channels to the dsh-notifier line's config, and configure at least one channel's credentials (webhook, bot token, etc.); when no channel is configured, the plugin only subscribes to events without acting (won't report an error).
How to send approvals back from phone to desktop?
Enable the inbound section and configure at least one inbound channel (telegram/feishu/qq/wxpusher/wechat/dingtalk). After configuration, give the agent a whitelist user (first in YAML write allowUsers or use /pair pairing code at runtime); then click a button or reply 1/2 in the channel's private chat to make a decision.
How to control notification frequency?
Three dimensions: the events section controls host events (turnStart is off by default, longRunning/stall are on by default); debounceMs controls trailing edge merging for the same conversation round (default 10 seconds); graceSeconds controls the idle grace period (default 0). The three can be used in combination.
How to know if a long-running task is still alive when it seems unresponsive?
longRunning (first heartbeat at 15 minutes, another every 15 minutes) and stall (suspected stuck after 10 minutes without events) are enabled by default. Notification cards on Telegram/Feishu channels have a one-click stop button that cancels the turn when clicked.
Can other plugins use this notification system?
Yes. Inject the notifier service (ctx.inject(['notifier'], …)) to call push(), or subscribe to dsh-notifier/sent event to listen to each broadcast result. By default, it throttles 10 times per minute per source; when quota is exhausted, it returns a structured skipped result without throwing an error.
Is the web admin console secure?
The host is hardcoded to 127.0.0.1 and never binds to a public network (not configurable). The token is auto-generated on first startup and printed to stdout once; after restart it's verified using SHA-256 hash; when admin.token is explicitly configured, it takes precedence. Remote access requires users to set up their own reverse proxy.
Will state data be preserved after uninstallation?
state.json stays in $HOME/dsh-notifier/ (stateDir can be changed), recording whitelist, pairing codes, ledger, etc. Uninstalling the plugin won't automatically clear the disk; it can continue to be used after reinstalling; to completely clean up, manually delete the directory.
What happens when channel quota is exhausted or the network is down?
Each channel has independent circuit breaking (short retry backoff); when the circuit breaking threshold is not reached, it retries in stages; when the threshold is exhausted, the entire channel is skipped and the host continues running. The ledger records failure counts without affecting pushes to other channels.
— source: plugin_wiki.faq_json
Compatibility
- DSH: 0.1.0-rc.6
- Node: >=22
— source: plugin_wiki.compatibility_json
Pitfalls
Review the upstream repo before installing. This guide is auto-derived from indexed fields and may lag the latest release. If anything contradicts the official docs, treat the upstream source as authoritative.
— source: general rule