dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Unofficial session dashboard plugin for DeepSeek Harness — all sessions, task progress, waiting states, background jobs & token KPIs on one page in the web GUI
Unofficial third-party plugin — not affiliated with, sponsored, or endorsed by DeepSeek AI.
Session Dashboard for DeepSeek Harness — every session, task progress, waiting-for-approval states, background jobs and token/KPI metrics on one page, injected straight into the harness web GUI. No separate server or page.
pendingInteraction; errors come from crashed producer jobs--dsw-*) — light/dark theme for free; respects prefers-reduced-motionThe package is a profile bundle: it declares dsh.bundle.patch, so the harness CLI installs it and stacks its patch layer automatically — no manual cordis.patch.yml edits.
From a local checkout (no npm publish needed):
# run from this repo's directory
dsh plugin --profile web add .
# or from anywhere, with an absolute path
dsh plugin --profile web add C:/path/to/dsh-dashboard
From GitHub (pnpm git install of the prebuilt lib/):
dsh plugin --profile web add github:jinhun-tqtteam/dsh-dashboard
From npm (once published):
dsh plugin --profile web add @jinhun-tqtteam/dsh-dashboard
The command adds the package as a profile dependency, appends it to dsh.profile.bundles (its dsh.bundle.patch declares the loader entry), and restarts pick it up.
Copy the package folder (with the prebuilt lib/) into the profile's plugin store and register the loader entry by hand:
<profile>/web/node_modules/@jinhun-tqtteam/dsh-dashboard
Add to <profile>/web/cordis.patch.yml:
- insert:
- id: dsh-dashboard
name: "@jinhun-tqtteam/dsh-dashboard"
The loader entry
namemust exactly equal the bundle's registered id (the package name). The client module graph rejects a bundle that registers a different id.
Plugin-set changes need a harness restart; bundle-only changes reach the graph via a browser refresh.
| Action | How |
|---|---|
| Open the dashboard | Dashboard button in the sidebar footer (or the rail icon when collapsed) |
| Pin the live summary | Sticky pin button |
| Open a session | single-click a row |
| Session details | double-click a row, press D, or single-click in the sticky |
| Filter | click the KPI tiles or the status chips |
| Close | Esc (closes the detail drawer first, then the panel) |
| Toggle notifications | the bell in the panel header or sticky header (dot: green = banners granted, amber = blocked) |
The first bell click warms the audio context, asks for window-notification permission and starts a keep-alive so background tabs never silence alerts.
If the bell dot stays amber:
The package registers one host-side plugin (an empty apply, purely to appear in the Loader) and one client bundle served at /plugins/@jinhun-tqtteam/dsh-dashboard/client.js. The bundle registers itself through window.__ModuleLoader__.load in the lazy-CJS shape the DSH client module system expects, mounts three shell.overlay entries (panel, sticky, notifications) plus one sidebar.footer.action entry (the trigger), and receives the openSession descriptor through the standard inject mechanism.
src/ is the source of truth; lib/ is committed so the manual copy install works without a build step.
npm install
npm run build # esbuild src/ -> lib/client.js (ModuleLoader CJS shape)
npm run smoke # structural checks: bundle shape, slot registration, exports
The build fails if the bundle comes out suspiciously small. CI runs build + smoke on Ubuntu, Windows and macOS.
See CONTRIBUTING.md for the full contribution guide.
| Symptom | Fix |
|---|---|
bundle ... loaded without registering "<id>" in the log | The loader entry name and the package name differ — make them identical |
| Trigger button missing | The loader entry was not composed in yet — restart the harness after editing cordis.patch.yml |
| Panel opens but is empty | Sessions appear once the host publishes them; make sure at least one session exists |
| No sound while the tab is unfocused | Toggle the bell once per page load (it enables the keep-alive + audio warm-up) |
MIT © Tran Quang Tien