插件目录 / Developer / dsh-archived-conversation
dsh-archived-conversation
已验证 · 实测可装 Li-canghai
功能简介
Developer 类别的 DeepSeek Harness 插件。
可用 — 实测通过,早期项目
Developer 类别的 DeepSeek Harness 插件。 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-archived-conversation
简体中文 | English
An archived-conversation manager plugin for DeepSeek Harness (DSH). It adds a Settings → 已归档 (Archived) page where archived conversations can be searched, browsed by project, unarchived, or deleted.
DSH already ships the archive capability (right-click a conversation in the left sidebar → Archive; the conversation disappears from the workspace view and its id is written to archivedSessionIds in ~/.dsh/storages/workspace.json). But DSH currently has no management UI for archived conversations and no unarchive / delete entry point — this plugin fills that gap.
Features
- Grouped by project — reuses DSH's workspace info to group archived conversations under their owning project.
- Instant search — filters archived conversations by title, project name, or session ID in the browser, without additional session-log reads.
- Unarchive — removes the id from
archivedSessionIds; the conversation returns to its original position in its workspace. - Delete — detaches from the workspace, drops from the archive set, and removes the on-disk session directory (irreversible).
- Auto-refreshes every 20 seconds and immediately whenever the window regains focus.
How it works
- Pure ESM, zero runtime dependencies (Node built-ins only), same shape as
dsh-mcp-manager. - Client: registers the "已归档" tab via the
settings.sectionslot, rendered withreact.createElement(no JSX, no bundler). - Host: mounts the
/archived-conversation/api/*same-origin JSON API viactx.webServer.register. - Performance: each refresh performs one parallel
statper archived log and reuses workspace/file metadata; title-cache hits skip header reads, while concurrent refreshes share one list rebuild. - Reuses DSH's own services; never parses the session file format:
ctx.workspaceRegistry— the authority on archive state and project membership.ctx.sessionPersistence.readFrom— reads each archived session's log and folds its lastsession/titleevent (the same logic as DSH's own "title" projection unit;sessionQuery.readTitleSnapshotsis unreliable for cold persisted sessions).ctx.webServer— mounts the management API.
- Guard rails: mutation requests require a same-origin Origin, JSON Content-Type, and loopback Host; a running session is queued instead of torn down mid-turn. An idle attached session is released, then deleted.
- Title lookup is compatible with DSH
0.1.2-alpha.1: it uses onlycachedSnapshot(header), then one persistence read. It does not callcoldSnapshot(id), whose signature changed in that release.
Install / Update
Requires DeepSeek Harness and pnpm on PATH (dsh plugin forwards to it).
Install:
dsh plugin --profile web add dsh-archived-conversation@latest
If dsh is not on PATH:
npx -y --package @deepseek-ai/dsh dsh plugin --profile web add dsh-archived-conversation@latest
Update:
dsh plugin --profile web update dsh-archived-conversation@latest
Then restart dsh --profile web and reload the page. The plugin self-activates through dsh.bundle.patch; no manual cordis.patch.yml edits needed. This plugin has no native build scripts, so pnpm approve-builds is not required.
If pnpm 11 reports minimum release age (the version is younger than 24h), pin the exact version:
dsh plugin --profile web add dsh-archived-conversation@0.2.4
GitHub Release tarball (prebuilt, no npm):
dsh plugin --profile web add https://github.com/Li-canghai/dsh-archived-conversation/releases/latest/download/dsh-archived-conversation.tgz
Usage
- In the left sidebar, right-click any conversation → Archive (provided natively by DSH).
- Open Settings → 已归档: browse by project or search by title, project name, or session ID.
- For each matching conversation you can:
- Unarchive — return it to its original workspace position.
- Delete — remove it permanently (confirmation dialog; irreversible).
API
| Method | Path | Description |
|---|---|---|
| GET | /archived-conversation/api/ping |
Liveness probe (no Origin required) |
| GET | /archived-conversation/api/list |
Archived conversations grouped by project (no Origin required) |
| POST | /archived-conversation/api/:id/unarchive |
Unarchive (same-origin Origin + JSON Content-Type + loopback Host) |
| DELETE | /archived-conversation/api/:id |
Delete (same-origin Origin + JSON Content-Type + loopback Host) |
Layout
dsh-archived-conversation/
package.json # dsh.client.inject + dsh.bundle.patch
cordis.patch.yml # plugin row (activated by bundle.patch)
lib/index.js # host: API + archive-state read/write
lib/client.js # client: Settings "已归档" UI
README.md / README.zh-CN.md / LICENSE
Verification
No build step. After installing into a live web profile, open Settings → 已归档 in the browser. Host liveness: GET /archived-conversation/api/ping.
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-archived-conversation」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
该插件是 GitHub 源码(未发 npm)——直接从仓库装:
Web profile:
dsh plugin --profile web add github:Li-canghai/dsh-archived-conversation Headless(CLI)profile:
dsh plugin --profile headless add github:Li-canghai/dsh-archived-conversation 实测报告
验证通过:从 GitHub 源码完成 L1 安装 + L2 加载 + L3 运行(dsh 0.1.0-rc.6)。