dsh-sessions-rm
Manifest validSession management for DeepSeek Harness (DSH).
@temoa/dsh-sessions-rm
Session management for DeepSeek Harness (DSH): a settings page that lists every historical session and physically deletes a session's log directory (irreversible, type-to-confirm, with an audit trail).
English | 中文
Features
- Settings → Session Management — an additive
settings.sectionpage (no shipped UI is replaced). - Session list — title, relative time, status badges (running / persisted), blank vs untitled distinction.
- Type-to-confirm delete — a modal dialog shows the session and an irreversible warning; you must type 确认删除 before the confirm button becomes clickable (guards against accidental deletes). Esc / backdrop / cancel close it.
- Physical deletion — the Host locates the log via
sessionPersistence.locate()and deletes the whole session directory (log + session-owned artifacts) directly through Nodefs— no shell or sandbox involved, consistent across platforms. - Audit trail — every delete request (success or failure) appends one JSON line to
~/.dsh/sessions-rm.log(time / sessionId / title / ok / path or error). - Theme-aware — follows light / dark / system via official theme tokens.
Install
Option A — install as a package (dsh plugin add), no --patch needed
Install straight from GitHub — pnpm pins the package by commit with a full integrity hash:
dsh plugin --profile web add git+https://github.com/Temoa/dsh-sessions-rm.git
Because the package declares dsh.bundle.patch (cordis.patch.yml), the reconciler appends it to the profile's dsh.profile.bundles automatically — the plugin mounts at the PROFILE level and is active for every session on that profile. The client half is discovered through dsh.client (exports["./client"]) and the Host Remote manifest through exports["./typert"] (registered by dsh-typert-loader); no manual patch file is needed.
To uninstall: dsh plugin --profile web remove @temoa/dsh-sessions-rm.
After changing plugin code, fully restart the harness — modules are cached per process URL.
Option B — install from source (local development)
git clone git+https://github.com/Temoa/dsh-sessions-rm.git
cd dsh-sessions-rm
dsh web --patch ./cordis.patch.yml
Dependencies
The package declares no dependencies — runtime imports (@deepseek-ai/cordis, @deepseek-ai/dsh-typert-protocol, @deepseek-ai/dsh-home-paths, zod) are provided by the DSH installation. Two ways to make them resolvable:
- Symlink DSH's
node_modulesinto the plugin directory (recommended, offline):ln -s /path/to/dsh/node_modules node_modules - Or run
npm installin the plugin directory if the@deepseek-ai/*packages are available on your registry.
Usage
Open Settings → Session Management: pick a session, click 删除 (Delete), type 确认删除 in the dialog, then confirm. The row disappears, the sidebar hides the session immediately (archived), the log directory is physically removed, and one line is appended to ~/.dsh/sessions-rm.log.
How it works
- Host —
lib/index.jsregistersctx.sessionRm(aTypertRemoteServicesubclass) exposinglist/delete.lib/typert.host.jsis the Typert manifest (exports["./typert"]) auto-registered bydsh-typert-loader;api-gatewayroutessessionRm/*wire calls to the service methods. - Client —
lib/client.js(a factory-form CJS bundle built byscripts/build-client.jsfromsrc/client.js) registers matching descriptors viactx.remote.$mount()and callsctx.remote.sessionRm.list()/delete(). - Delete pipeline — reject running agents →
workspaceRegistry.archiveSession()(sidebar hides instantly via the archive set) →sessionPersistence.locate()→ Nodefsdelete → append audit line. - Pure JS + hand-written decorator marking —
@Remoteis a TS decorator; this project reuses the officialRemote()decorator by constructing a decorator context manually (seeaddRemoteinlib/index.js), so no TS toolchain is needed.
Configuration
None — the plugin is intentionally configuration-free. All behavior is fixed by design.
Development
npm run build:client # node scripts/build-client.js → lib/client.js
npm test # node test/index.mjs — manifest/bundle structure checks
Tests cover: Host service class shape, Typert manifest structure (package/face/codecs/invocations), and client bundle format.
Boundaries
- Running sessions cannot be deleted — DSH has no public API to dispose a live agent; deleting a running session's log would corrupt the runtime.
- Deleting is irreversible — log and artifacts are permanently removed. The archive step hides the session from the sidebar immediately; the in-memory record disappears after a restart.
- Path self-validation — the delete target is derived from
sessionPersistence.locate()and validated to be an absolute path; no external input is accepted. Deletion and audit writes run directly through Nodefs, independent of the shell or the deployment sandbox boundary (the Windows profile mounts the pwsh executor, and the sandbox is unusable whendsh webstarts from a drive root). - User-role semantics — the settings page is an additive UI; it never replaces shipped surfaces and reads no model context.
License
MIT
Comments
Loading…
Similar plugins
by DM-Odyssey
dsh Session Manager(会话管理插件)
★ 0
MIT
JavaScript
Aug 19, 2026
dsh plugin --profile web add @dm-odyssey/dsh-session-managerby TheM14
DeepSeek Harness 已归档会话管理与新预设续接插件。Archived-session management and preset continuation plugin for DeepSeek Harness.
★ 0
↓ 238/wk
MIT
JavaScript
Aug 21, 2026
dsh plugin --profile web add dsh-session-cleanerby imrascal
DeepSeek Harness归档会话管理插件
★ 4
MIT
JavaScript
Sep 26, 2026
dsh plugin --profile web add @imrascal/dsh-archiveby baixianger
Same-process session-to-session messaging plugin for DeepSeek Harness
★ 3
↓ 176/wk
MIT
JavaScript
Sep 14, 2026
dsh plugin --profile web add dsh-bridgeby xingyingyuzhui
Layered session permissions for DeepSeek Harness. 官方 ∩ Agent ∩ 本会话。
★ 0
MIT
JavaScript
Sep 15, 2026
dsh plugin --profile web add dsh-session-permissionsby GooDAnDReaDY
Session management for the DeepSeek Harness sidebar: pin and label conversations, search their contents, jump by keyboard, read and export archived transcripts
★ 0
↓ 275/wk
MIT
JavaScript
Sep 26, 2026
dsh plugin --profile web add @goodandready/dsh-session-control