
DSH Archive Manager
☆ 0A minimal DeepSeek Harness Web plugin that lists archived sessions and permanently deletes an archived session directory after explicit confirmation.
Get this plugin
Review the source, then continue to the publisher.
dsh plugin add dsh-archive-manager@latestAbout this plugin
Source snapshot 8/13/2026dsh-archive-manager
A minimal out-of-tree DeepSeek Harness Web Cordis plugin that permanently deletes the on-disk session directory of an archived session from the sidebar.
It does not modify the DSH core installation or any profile configuration.
The only durable effect on $DSH_HOME is the intended one: after the user
confirms, it deletes the selected session directory under
$DSH_HOME/sessions. No other DSH durable state (workspace registry,
projection cache, shared attachments) is written. The host half owns one HTTP
route; the client half adds a sidebar footer action that lists archived
sessions and deletes them after an explicit second confirmation.
What it does
- Host half (
index.js) registersPOST /archive-manager/delete. - Client half (
client.js) registers asidebar.footer.actionlist entry (id: archive-manager,order: 80). Wide mode shows the label已归档 N; the narrow rail shows only the archive icon. - The modal lists only the ids in the workspace registry's
archivedSessionIdsthat also have a session summary in the client session baseline, displayingdisplayTitle(or the id),cwd, andupdatedAt. - Each row has a trash button. Deleting requires a clear second confirmation stating that the session directory will be permanently deleted and cannot be restored.
- Deleting issues a same-origin
POST /archive-manager/deleteand, on success, refreshes bothsessionsandworkspaces. A local deleted-id set hides the row even though the archived marker is intentionally left intact.
Install
This is an out-of-tree plugin: place it on disk and install it into the
existing web profile.
Option A — install from GitHub
dsh plugin --profile web add "github:zimixvx/dsh-archive-manager"
Option B — install from a local path
With the plugin directory at D:\Code\DeepseekHarness\plugins\dsh-archive-manager:
dsh plugin --profile web add "D:\Code\DeepseekHarness\plugins\dsh-archive-manager"
Then add the plugin to the web profile's bundle list in
$DSH_HOME/profiles/web/package.json:
{
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"dsh-archive-manager": "file:D:/Code/DeepseekHarness/plugins/dsh-archive-manager"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-archive-manager"
]
}
}
}
The exact dependencies entry is written by dsh plugin --profile web add;
only the bundles list needs the manual addition.
The plugin's cordis.patch.yml (declared via dsh.bundle.patch) inserts the
host row:
- insert:
- id: archive-manager
name: dsh-archive-manager
Restart
A running process does not pick up new bundle rows, so restart the web profile:
dsh web
After a page refresh, the sidebar footer shows the archive-management action.
Safety and limitations
- Only archived sessions. The route refuses any id not present in
workspaceRegistry.archivedSessionIds. - Live sessions are refused — checked before the persistence lookup and
again immediately before the
rm, with HTTP409. - Raw-artifact backend required. The persistence backend must advertise
supportsRawArtifacts === trueand alocate()returning{ kind: 'jsonl', path }. Otherwise the route answers501. - Deletes the session directory only.
rm(dirname(location.path), { recursive: true, force: false })removes the directory that holds the session's JSONL log (and any session-local files inside it). It does not modify the workspace registry, the archived markers, the projection cache, or content-addressed attachments (which live in a separate shared store and are shared across sessions). - Stale archived markers. After a successful delete, the archived marker in
archivedSessionIdsremains by design (removing it would mutate the registry). Because the panel only lists archived ids that still have a session summary, and the physical deletion removes that summary, the leftover marker does not reappear after a page reload. A local deleted-id set also hides the row immediately even if the follow-up refresh fails. - Not reversible. The deletion is a recursive
rmwithforce: false. There is no trash or restore path.
Uninstall
Remove dsh-archive-manager from the profile's dsh.profile.bundles (and from
dependencies), then restart. The plugin adds no durable state of its own, so
there is nothing else to clean up.
License
MIT — see LICENSE.