dsh-delete-chat
在设置页中归档、恢复并删除会话。
安装
dsh plugin --profile web add dsh-delete-chat
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-delete-chat
A DeepSeek Harness session manager: a settings page that lists every session and lets you archive (hide), unarchive (restore), and permanently delete sessions.
一个 DeepSeek Harness 会话管理插件:在设置页中列出全部会话,并支持归档(隐藏)、取消归档(恢复显示)与永久删除会话。
What it does / 功能
- List every session with its title, working directory, and creation time, split into archived and active groups.
- Archive a session to hide it from the sidebar. The log is kept, so archiving is fully reversible.
- Unarchive a session to make it visible again.
- Delete a session permanently: removes its persistence log file, then detaches it from workspace accounting and from the archive set.
Install / 安装
dsh plugin --profile web add dsh-delete-chat
The package declares dsh.bundle.patch, so the command installs it and reconciles it into dsh.profile.bundles — no profile file editing. Restart dsh web to mount it.
Usage / 使用
Open Settings → 会话管理 (Session Manager).
Safety / 安全边界
- Archive is not delete. Archiving only hides a session; its log stays on disk and
取消归档restores it. - Live sessions cannot be deleted. A running session's delete button is disabled, and the host refuses the call even if it is reached directly.
- Delete is permanent and two-step. The first click shows the exact file path that will be removed; only a second click deletes anything.
- Only the session's own artifact is touched. The host resolves the path through
sessionPersistence.locate(), refuses anything whose filename is notsession.jsonl*, and refuses backends that expose no per-session artifact (for example a SQLite store). - Sandbox-aware. Session files live under
$DSH_HOME/sessions, outside the workspace. If the host's shell sandbox denies the removal, the plugin surfaces that denial instead of forcing it, and the file can be deleted by hand. - Search index. A deleted session disappears from the session list immediately; a full-text search index may keep a stale row until the next DSH restart, which is the documented reconciliation point.
Architecture / 结构
One dual-face package:
Piece · File · Role
Host plugin · lib/index.js · apply(ctx) provides the delChat service
Host manifest · lib/typert.host.js · the ./typert Typert contribution that exposes delChat over the gateway
Browser plugin · lib/client.js · the settings.section page, mounted through exports["./client"]
Mount · cordis.patch.yml · one insert row: del-chat → dsh-delete-chat
The browser half reaches the host through remote.delChat.. The host half imports no @deepseek-ai/ runtime package — it reads the host process's own services with ctx.get(...) and binds itself to the gateway with a hand-written typertRemote binding, so no code-generation step is needed to build this plugin.
Exposed Remote methods:
delChat.list() → { sessions: [...] }
delChat.archive({ sessionId }) → { archivedSessionIds: [...] }
delChat.unarchive({ sessionId }) → { archivedSessionIds: [...] }
delChat.inspectDelete({ sessionId })→ { deletable, reason, path, dir }
delChat.deleteSession({ sessionId })→ { path }
Development / 开发
npm install npm run build # esbuild → lib/index.js, lib/typert.host.js, lib/client.js npm test # structural validation of both halves
npm run build writes the published artifacts:
lib/index.js— the host plugin, bundled to ESM.lib/typert.host.js— copied verbatim fromsrc/typert.host.js.lib/client.js— the browser bundle wrapped in thewindow.__ModuleLoader__.load({ id, factory })envelope the DSH client module system executes, withreactleft external for the shell's static module table.
npm test imports the built host half against a mock Cordis context (exports, provided service, typertRemote binding, manifest shape) and executes the built browser bundle against a fake window.__ModuleLoader__ plus a react shim, asserting the registration id, the exports, the Remote descriptors, and the settings.section registration.
License
MIT
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:2,最后更新 2026-09-12