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.

Buttons — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-buttons

Buttons

DeepSeek Harness plugin: pick Sessions in the sidebar and delete them for good — one row or a whole selected group — together with their log, projection cache and workspace registration. Arabic and English UI.

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-buttons@0.1.1
READMECompatibilityVersions

Compatibility and provenance

Buttons is published as dsh-buttons and currently resolves to version 0.1.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
10/16/2026

Versions

0.1.1stable
10/8/2026
0.1.0stable
10/8/2026

Related plugins

Loading related plugins…

Latest
0.1.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
53.2 kB
Files
9
Surface
web
License
MIT
Source
npm
GitHub
★ 0
Weekly downloads
506
Security scan
✓ v0.1.1 scan passed
Last push
10/8/2026
View source ↗Project homepage ↗
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

Related plugins

More verified plugins in productivity-workflow.

Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Deepseek Ipptdeepseek-ipptiPolloWork PPT Studio and its curated slide templates as a native DeepSeek Harness conversation view.Codex Ui@michengai/dsh-codex-uiDSH Codex UI — 为 DeepSeek Harness Web 提供 Codex 风格侧栏、工作区会话树、全局搜索和轮次导航 · A Codex-style sidebar, workspace session tree, global search, and turn navigation for DSH WebRemotedsh-remoteRemote-work assistant for DeepSeek Harness: connect SSH (password/key/agent/keyboard-interactive/proxy jump), pick a remote workspace, operate on it with 22 rw_* tools (incl. rw_edit/rw_stat/rw_mkdir/rw_remove/rw_move/rw_forward), conflict-aware mirror sy

README

dsh-buttons

Extra buttons for the DeepSeek Harness sidebar. The first one deletes Sessions for good — one row, or a whole selected group.

بالعربي: بلِجن لـ DeepSeek Harness يضيف زر حذف المحادثة نهائياً على صف المحادثة، مع تحديد جماعي: تختار كذا محادثة وتنحذف كلها بتأكيد واحد. الواجهة عربية أولاً (تتبع لغة الواجهة). الحذف نهائي — ما في سلة ولا رجعة.

DSH has no per-Session delete. The ACP agent advertises sessionCapabilities: { close, list, resume } — no delete — and the workspace controller only archives, pins and reorders. The sidebar's Session row menu therefore offers Rename, Fork, Pin and Archive, and nothing that removes the stored conversation. Archived Sessions are hidden, never deleted: the log stays in ~/.dsh/sessions/… forever.

This plugin adds the missing action as a client plugin — no app patch, no app.asar edit:

HalfFileWhat it does
Hostindex.jsregisters POST /api/session.delete on the authenticated Connection
Hostlib/delete-session.jsremoves the Session directory, its projection cache and its registry entry
Browserlib/client.jsadds a pick button and two menu entries to the Session row, a counting bar, and the confirmation dialogs
Toolrepair-registry.mjsdrops registry entries whose Session files are gone

Install

Pick one, then restart DSH (the profile's plugin graph is composed at host startup, so a page refresh alone is not enough).

# 1. from npm (recommended)
dsh plugin --profile desktop add dsh-buttons

# 2. from a GitHub tarball (no npm account, no git on PATH needed)
dsh plugin --profile desktop add https://github.com/qusaykhadour/dsh-buttons/archive/refs/heads/main.tar.gz

# 3. from a folder you already have
dsh plugin --profile desktop add link:C:\path\to\dsh-buttons

Replace desktop with your profile name (web, tui, …). The GUI does the same thing: Settings → Plugins → Plugin Manager accepts the same spec.

Two ways to delete

One Session — the row's "…" menu → Delete session → a confirmation naming it.

A group — the checklist button on row hover, or the menu's Select for bulk delete, marks Sessions. A floating bar counts them ("3 sessions selected") and offers Delete selected (N) / Clear selection. One confirmation lists the picked titles and one Delete permanently (N) button; the deletions then run one by one with progress ("Deleted 4 of 9…"), and any failure is listed by title and reason (running now · locked · files already gone · host unreachable).

While anything is picked, every delete entry point acts on the picked set: the row menu's own delete item becomes Delete selected (N) too, so opening a row menu can never quietly delete one Session out of a group.

Selection is plugin state: the sidebar is untouched, no row is restyled, and nothing is written to disk until the deletion runs. Archived and grouped rows carry the same two actions, so a Session can be picked from either filter.

What is removed

For sessionId:

  1. ~/.dsh/sessions/<workspace-slug>/<sessionId>/ — the stored log (every slug that holds the id, so a Session registered under two workspaces goes entirely);
  2. ~/.dsh/storages/session_projcache/sessions/<sessionId>.json — the title / projection cache;
  3. the id inside ~/.dsh/storages/workspace.json — sessionIds, pinnedSessionIds, archivedSessionIds, rewritten atomically.

The dialog archives the Session first (through the app's own workspace controller) so the row leaves the sidebar before its log disappears; a refusal there is not fatal.

There is no trash and no undo. The confirmation dialog says so.

Safety rules

  • the id must match ^[A-Za-z0-9][A-Za-z0-9._-]{6,79}$ — no separators, no .., so no request can reach outside sessions/;
  • every path is re-checked to be inside <dshHome>/sessions before removal;
  • a Session the host currently holds open is refused (409 session-active);
  • a log file locked by a running app is reported as 409 file-locked instead of being half-deleted;
  • deleting the Session you are talking in fails on the same lock — close it first.

Ghost rows, and the repair tool

Archiving is what the running app remembers: it keeps its own registry in memory and can write a deleted id back into archivedSessionIds, which then renders as an archived row that cannot be opened. To reconcile the file with the disk, run (with DSH closed, so the app cannot overwrite the repair):

node repair-registry.mjs            # dry run: shows what would change
node repair-registry.mjs --apply    # backs up workspace.json, then rewrites it

Test

npm test
# or run the two suites directly:
node test\delete-session.test.mjs
node test\client-bundle.test.mjs

The first suite builds a throwaway DSH home and asserts the three artefacts are gone, that a neighbouring Session survives, that an unknown id reports not-found, and that traversal-shaped ids are rejected. The second loads the browser half against a stubbed module loader, React and primitives, then checks that apply() registers all five slot entries with unique ids, that the pick button, the counting bar and the bulk dialog render the picked state, and that a row menu follows the picked set.

node --test test/ also works, except inside the DSH file sandbox: the runner spawns child processes with piped stdio, which the sandbox refuses. Run the two files directly there.

Compatibility

Tested against the DSH 0.2.0-rc.2 desktop runtime (client packages 0.2.0-rc.2) on Windows 11 with Node 24.

No peerDependencies are declared — the same choice the dsh-arabic plugin makes — so the installer never refuses a newer DSH. The trade-off is honest: DSH is pre-release, and if the sidebar slot names (sidebar.workspaces.session.menu.item, sidebar.workspaces.session.row.action, shell.overlay) or the UI primitives change, the buttons may stop rendering until this plugin is updated. Nothing else in DSH breaks; disable the plugin from Settings → Plugins, or use the app's own recovery entry "Disable third-party plugins, back up profile patch, and restart".

Limits

  • The sidebar may keep a row until the next page refresh if the workspace controller still holds the Session in memory.
  • Sessions whose files another process keeps open (a second DSH instance) are refused, not forced.

License

MIT — see LICENSE.