Skip to content

dsh-desktop-notifications

Verified

@lingxiaott/dsh-desktop-notifications Β· v0.1.0 Β· MIT

Desktop-notification capability seam for the DeepSeek Harness: a DesktopNotificationSink Service Definition, the event-driven Consumer that turns session/job events into privacy-safe native notifications, and the live settings that gate them. Community-pu

Install

dsh plugin add @lingxiaott/dsh-desktop-notifications

Confirm the layer applied with dsh --profile default --dump-config β€” see the install guide.

Source

Creators

Readme

@lingxiaott/dsh-desktop-notifications

Desktop notifications for the DeepSeek Harness: the DesktopNotificationSink Service Definition a desktop shell provides, the event-driven Consumer plugin that turns session/job events into native notifications, and the live settings that gate them. The package is environment-agnostic β€” it never imports Electron β€” so the host tree, a desktop shell, and tests share the one contract.

This is the community-published build of the fork package packages/interaction/desktop-notifications, published under the @lingxiaott scope because the @deepseek-ai scope belongs to upstream. The Electron desktop app is the reference sink provider.

What it does

The Consumer subscribes the authoritative in-process session/event stream and the jobs registry β€” never the network downlink β€” and raises a privacy-safe native banner when:

  • A user-initiated turn closes β€” success on completed, failure on error/max-tokens. Only turns the user actually opened notify; queued follow-ups, goals, scheduling, and subagent sessions do not.
  • A background job settles β€” completed/failed.
  • An approval is requested β€” always notifies, even while the window is focused, because an approval blocks the turn until a human decides.

Copy is generic and privacy-safe: a banner names the kind of event, never the prompt, tool arguments, or model text, because OS notification centers persist banners beyond the app's lifetime. Copy renders in English or Chinese from the sink's locale.

Important: this is a capability seam, not a standalone notifier

The package ships no notification backend. It no-ops unless the host shell fills the optional desktopNotifications context slot (DESKTOP_NOTIFICATIONS_KEY) with a DesktopNotificationSink before the config tree mounts:

  • notify(notification) raises one native banner and must not throw.
  • isFocused() reports whether the desktop window has focus (suppresses completion banners while the user is already watching).
  • focus() reveals and focuses the window (the click-to-focus affordance).
  • locale selects the copy language ('en' | 'zh').

A web or headless composition mounts no sink, and the Consumer is an inert no-op there.

Install

This is a standard dsh bundle (it declares dsh.bundle). Install it into a profile with the dsh CLI:

dsh plugin --profile <name> add @lingxiaott/dsh-desktop-notifications

Or consume it as a normal npm dependency and mount it from your own overlay patch:

- insert:
    - id: desktop-notifications
      name: '@lingxiaott/dsh-desktop-notifications'

Settings

Seven live gates under the dsh-desktop-notifications namespace, all defaulting on, hot-reloaded through the settings seam: notifyOnTurnCompletion, notifyOnTurnFailure, notifyOnJobCompletion, notifyOnJobFailure, notifyOnApproval, notifyOnQuestion, and silentWhenFocused. The last suppresses only turn/job completion banners while focused; approval and question requests always notify. notifyOnQuestion is reserved for deferred question wiring and currently gates nothing.

License

MIT