DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Event Relay — DSH Plugin for DeepSeek Harness
← Plugins
E

dsh-event-relay

Event Relay

Event relay: one shared SSE channel pushing host-side events to subscribed browser surfaces. Frames carry an optional JSON payload — some plugins use it as a pure change signal (doorbell style, refetching their own truth), others consume the payload directly (notifications, kanban updates). Client o

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:joao-paulo-santos/dsh-event-relay#f8150cf25f322b8a4d0f0ef3ff8db5d86f2153dd
READMECompatibilityVersions

Description

Event relay: one shared SSE channel pushing host-side events to subscribed browser surfaces. Frames carry an optional JSON payload — some plugins use it as a pure change signal (doorbell style, refetching their own truth), others consume the payload directly (notifications, kanban updates). Client opens the stream with the union of subscribed topic prefixes (server-side filtering) and signals reconnects via __relay/open.

Compatibility and provenance

Event Relay is published as dsh-event-relay and currently resolves to version 0.3.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
8/26/2026

Versions

0.3.1stable
8/26/2026
0.3.0stable
8/25/2026
0.2.0stable
8/24/2026

Related plugins

Loading related plugins…

Latest
0.3.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 1
Weekly downloads
0
Last push
8/28/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in

README

dsh-event-relay

A DeepSeek Harness (DSH) plugin: install it into a profile alongside your own plugins.

Push from host to browser. The host can start a conversation; every other channel (fetch, RPC) requires the browser to ask first. If your plugin's UI should react the moment something happens host-side (a setting changed, a build finished, a notification arrived), this is that channel.

One shared SSE route (/relay/events) holds every subscriber's response open and streams JSON messages {"topic","payload"} as things happen. One connection per browser tab, no matter how many plugins subscribe.

Architecture

flowchart LR
    subgraph HOST["🖥️ Host, dsh-event-relay (host half)"]
        P["publish(topic, payload)"]
        N["notifyClients<br/>filter per client"]
        W[("/relay/events<br/>held-open responses")]
    end
    subgraph WIRE["⇄ SSE"]
        direction LR
        M["data: {topic, payload}<br/>...one message per event..."]
    end
    subgraph BROWSER["🌐 Browser tab, dsh-event-relay (client half)"]
        C["eventRelay service<br/>subscribe(topic, listener)"]
        S["notifyListeners<br/>fan-out per topic"]
        L1["plugin A listener"]
        L2["plugin B listener"]
        L3["plugin C listener"]
    end
    P --> N --> W
    W --> M
    M --> C
    C --> S
    S --> L1
    S --> L2
    S --> L3

Plugin value proposition

alternativefalls short
pollinglatency + waste (N fetches to learn "nothing changed")
refetch on focus/navigationfree and correct, but updates only when the user acts
your own EventSource/WebSocket per pluginthe browser caps ~6 connections/domain (HTTP/1.1); a few plugins permanently occupy them and every other request queues. This shared stream is one connection for the whole tab
host RPC (/api)request→response: the frontend can ask, but the host cannot interrupt

One direction, on purpose. Browser→host is transaction-shaped (command → reply): use plain HTTP (a route your host half registers) with status codes, validation, and error handling the stream doesn't have. Host→browser is notification-shaped: unpredictable moments, all tabs at once. Different jobs, different roads.

How to install

Requires a DeepSeek Harness checkout and a profile (here web):

# from the harness checkout
pnpm dsh plugin --profile web add /path/to/dsh-event-relay

# verify the profile still composes
pnpm dsh --profile web --dump-config

Then (re)start the harness; the host half loads at boot. Browser plugins consume the client service with ctx.get('eventRelay'), nothing to wire up beyond installing this package.

Producers (host plugins)

const relay = ctx.get('eventRelay')            // optional, degrade if absent
relay.publish('my-topic', payload)             // direct
ctx.on('my/event', (data) => relay.publish('my/event', data))   // mirror a Cordis event (do this in your plugin)

Consumers (browser bundles)

const relay = ctx.get('eventRelay')            // provided by this package's client half
const unsubscribe = relay.subscribe('kanban', (topic, payload) => { ... })
// or raw: new EventSource('/relay/events?topics=kanban,notifications')

payload in the callback is whatever the publisher passed. Apply it directly or ignore it and refetch your own truth, both are first-class styles.

Topic filtering: a subscription matches its exact topic and any child topic ('kanban' matches 'kanban/change'). The browser's connection URL carries the union of the tab's topics, so the server only sends what this tab listens for. When the last listener of the tab unsubscribes, the connection closes.

On every (re)open of the stream, subscribers of the synthetic topic __relay receive '__relay/open'. Consumers that apply state from messages use it to resynchronize: anything missed while the stream was down is recovered by one refetch.

Design

Transport, not a bus: Cordis events remain the host-side event system; this only carries messages across the plane boundary.

Payload is optional, not doorbell-only. Some plugins use the relay purely as a change signal, a topic-only message that tells them to refetch their own truth. Others consume the payload directly: the notifications demo pushes the notification itself, a kanban board pushes change messages. publish(topic, payload): send whatever is useful. Doorbells are one usage style, not the contract.

Liveness, not correctness: the relay may be absent, and a consumer should fall back to pull-on-focus (or pull on __relay/open) rather than depend on the stream for state. Route roots are composition-level contracts (/api, /plugins, /workspace-history, /notifications, /granular-settings are taken).

Debugging

The wire can be listened to from a terminal. Very useful to verify publishes end-to-end without a browser:

curl -N 'http://127.0.0.1:3080/relay/events'

Add ?topics=<prefixes> to mirror a client's filter; -N makes curl stream instead of buffering.

Dependencies

None

Plugins dependent on this

  • dsh-granular-settings publishes doorbell-only change notifications for its scoped settings platform

Related plugins

More verified plugins in integrations-communication.

Im@xmanrui/dsh-im把十一种 IM 渠道和公网 AI Office 接入本机 DeepSeek Harness。 Connect eleven IM channels and a public AI Office to a local DeepSeek Harness.DSCODE@toddzheng024/dscode-bundleA complete DeepSeek coding agent with persistent shell, Ultra collaboration and automatic permission review.Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseIm Connect@michengai/dsh-im-connectDeepSeek Harness IM assistant: connect a local agent to WeChat, WeCom, DingTalk, Feishu, QQ, and Telegram, with conversations and web tasks separated.