dsh-session-vault
A DeepSeek Harness settings plugin. It lists and deletes sessions the sidebar hides: archived sessions, or blank sessions whose log has no turn/start. A session whose log cannot be read is listed too, marked “Unreadable” — this page is the only surface left that can remove it. Subagent sessions are excluded.
- Stars
- 0
- Language
- JavaScript
- Created
- Sep 4, 2026
- Updated
- Sep 7, 2026
Introduction
dsh-session-vault
English | 中文
A DeepSeek Harness settings plugin. It lists and deletes sessions the sidebar hides: archived sessions, or blank sessions whose log has no turn/start. A session whose log cannot be read is listed too, marked “Unreadable” — this page is the only surface left that can remove it. Subagent sessions are excluded.
Deleting a session:
- disposes any live agent / session so the next flush cannot rewrite the files and so
@mentions no longer list it - removes the JSONL session directory (
$DSH_HOME/sessions/.../<session-id>/) - drops the id from workspace
sessionIdsand the globalarchivedSessionIdsset
The settings nav label follows the product locale: 「归档」 in Chinese, “Archive” in English. The list can be filtered by kind and date, and is paginated.
This plugin does not create a directory under $DSH_HOME and does not write a settings namespace.
Install
dsh plugin --profile web add dsh-session-vault
From a local checkout:
dsh plugin --profile web add /path/to/dsh-session-vault
Restart dsh web, then open Settings.
Usage
- The session you are currently viewing cannot be deleted; switch away first.
- A
runningsession is refused. - Deletion asks for confirmation and cannot be undone.
Develop
npm install
npm test
npm install builds the browser bundle (client/client.js). After changing files under client/, run npm run build:client and refresh dsh web.
Uninstall
dsh plugin --profile web remove dsh-session-vault
Restart dsh web.
Limits
- Requires the JSONL persistence backend (
dsh webdefault). Delete refuses any backend whoselocate()does not answerkind: 'jsonl'with a session-owned directory, so a store with no per-session files (SQLite) or a shared artifact is never removed. - Deletes go through Connection RPC with
authority: loopback, so only the local settings page can call them. - One
vault.deletecall accepts at most 200 ids. - Removing an id from the archive ledger has no published API upstream (
archiveSessionships without a counterpart), solib/registry-compat.jswritesWorkspaceRegistrystate directly. That write does not run on the registry's own operation queue: a workspace mutation landing in the same instant is reported asregistry-unsupportedrather than silently overwritten. A DSH build that changes those internals fails loud instead of leaving a deleted session archived.