Anchors an approve/answer bubble to each DSH Web sidebar session row — one-click handling of authorization, questions, plan reviews and blocked goals without opening the conversation.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:wydddddcool/dsh-hover-approve
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Why
DSH conversations regularly need you to stop and act: approve a file write, answer a question, confirm a plan, check why a goal got blocked. The built-in panel makes you open the conversation and scroll to act — switching back and forth breaks your flow.
This plugin keeps the interaction at the session's list row: a bubble pops up anchored to the row, a tail line and dot point at which session is waiting, and you approve / reject / answer right in the bubble — no need to open the conversation.
Features
In action
Real DSH Web UI (bubble anchored to the session row, tail line + dot pointing at the session):


- Auto-appears, no hover needed: anchored to the session row — you always know which session is waiting;
- Complete information: plain-language action labels (bash → "run terminal command", write → "write file"), highlighted file path, command collapsed to one line (click to expand), agent note shown prominently;
- Dismiss by clicking outside: click anywhere outside (or the ×) — it stays closed for this round and reappears on the next interaction;
- Follows the list: bubble and tail track the row on scroll / re-render; concurrent interactions anchor to their own rows, offset horizontally;
- Archived sessions stay quiet: archived conversations never get a bubble; archiving / unarchiving takes effect immediately (already-shown bubbles close at once).
Install
Quick install (recommended):
dsh plugin --profile web add https://github.com/wydddddcool/dsh-hover-approve
One command installs the dependency and registers the bundle (applies cordis.patch.yml automatically); restart dsh web afterwards.
You can also install manually in your profile (e.g. ~/.dsh/profiles/web):
# 1. Add to package.json dependencies:
# "dsh-hover-approve": "https://github.com/wydddddcool/dsh-hover-approve"
# 2. Add "dsh-hover-approve" to dsh.profile.bundles (applies cordis.patch.yml)
pnpm install
# 3. Restart dsh web
Local development can use a file: path dependency; note pnpm copies file: deps, so re-sync after editing:
cp <src>/lib/client.js ~/.dsh/profiles/web/node_modules/dsh-hover-approve/lib/client.js
Relationship with DSH
This is a community plugin (not an official product) for DeepSeek Harness Web. It reads session state through the official client injection (ctx.sessions / ctx.workspaces / ctx.locale) and answers through the official PendingWait.respond() channel — the same server-side path and audit trail as the in-conversation panel. Responses are bound to the approvalId captured at display time: if the request is replaced or already handled, sending is refused, so you can never approve something you didn't see. Tested against dsh 0.1.0-rc.6 (uses pendingInteraction / projectionValues / sessions.open / PendingWait).
Testing
npm install # first time: installs jsdom
npm test # 16 cases: four modes, archive filtering, answer encoding, state switching, retry, viewport clamping, teardown
CI (GitHub Actions) runs the tests on every push.
Limitations
- The command line only shows when a running call matches
callId(bash-like tools); other tools show only the action type and note — same as the built-in panel. - Row→session mapping matches by title scoring (exact match first); heavily duplicated titles could mis-anchor in rare cases.
- The bubble depends on the built-in list DOM structure (
[role="treeitem"]). If DSH changes that structure, the bubble may silently stop working (no errors) until adapted.
License
MIT License. DeepSeek is a trademark of DeepSeek AI; this is an independent community project, not affiliated with or endorsed by DeepSeek.
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 4634
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 2203
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 1996
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
omdsh-dev/dsh-at-file★ 391
Codex-style `@file` mentions: search workspace files in the composer and attach their contents to prompts.
omdsh-dev/dsh-genui★ 223
Interactive UI components rendered inline in replies: layout, charts, forms, quizzes, mermaid, 3D scenes, and an action event loop back to the model.
huiliyi37/dsh-tianshu-tui★ 215
A terminal UI (TUI) for DeepSeek Harness.