Introduction

If you use the DeepSeek Harness (DSH) Web GUI regularly, you may have encountered this situation: after archiving a session, it can no longer be found in the sidebar. While the underlying system indeed maintains a global archivedSessionIds collection, the official UI provides no entry point to view archived sessions, unarchive them, or even permanently delete a session. Simply hiding archived sessions from the list only makes them permanently unrecoverable at the GUI level. Deleting a session, on the other hand, requires cleaning up multiple independent storage layers in order—transcription directories, workspace ledgers, archive flags, and projection caches—where a wrong order will leave residual data.

dsh-archive-manager was written to fill this gap. Below is an introduction to its features, installation method, and typical usage.

What is it?

dsh-archive-manager (npm package name @gamegeek-saikel/dsh-archive-manager, current version 0.1.1) is an archived session management plugin for the DSH Web GUI, maintained by Saikel-Orado-Liu, licensed under MIT, and targeting the web platform. It provides four things:

  1. A “Show archived” view toggle to control whether archived sessions are displayed;
  2. Styling and protection for archived sessions: red titles, colored backgrounds, “Archived” badges, and protection against being opened;
  3. Unarchiving, which returns the session to its original workspace location;
  4. Permanent deletion of a session, cleaning up all related storage.

The entire plugin is delivered as a single npm package with zero modifications to the official package files. This will be elaborated on later.

Core Features

View Toggle. The “Show archived” option is stored in the same persistent storage dsh.workspace.view.v5 as grouping and sorting, so the selection remains after restarting the browser. Grouped lists, tiled lists, and search all share the same visibility derivation path, so the display and hiding of archived sessions is consistent across all interfaces.

Archive Styling and Protection. Archived rows are displayed with a red title, colored background, and “Archived” badge. Clicking an archived session does not open it but instead pops up a toast notification, and message sending is blocked. The row menu for archived rows only contains [Unarchive, Delete session].

Unarchiving. The archive operation never moves the session’s position in the workspace ledger, so unarchiveSession simply removes it from the global archivedSessionIds collection, and the session returns to its original workspace location. This operation is idempotent.

Permanent Deletion. deleteSession is executed serially in the registry’s operation queue, with a fixed order: flush → detach (session/disposed) → wait for projection cache write-behind to persist (whenIdle) → delete transcription directory → clear archive flag → remove workspace ledger → delete projection cache row → best-effort subagent cascade and overflow cleanup. Every step that can fail is idempotent and retryable, and retries can fix a semi-deleted state. Subagent cascade only affects sub-sessions with origin subagent; forked branches will not be cascade deleted.

Integration. The host side adds unarchiveSession / deleteSession and delete(id) / whenIdle() to subclasses of WorkspaceRegistry and SessionProjectionCache, exposing them as Typert Remote endpoints workspaceRegistry/unarchiveSession and workspaceRegistry/deleteSession, without affecting the legacy /api/workspace.* gateway. The client is a forked dsh-client-ui-workspace browser bundle, responsible for the view toggle, archived row styling, protected open behavior, row menu, confirmation dialogs, and toasts; the interface supports Simplified Chinese and English.

Delivery Form. These three implementations are packed into a single npm package as internal sub-modules (workspace, projcache, client). The official workspace, session-projection-cache, and ui-workspace lines are disabled via the root cordis.patch.yml, and corresponding workspace-archive-manager, session-projection-cache-archive-manager, and ui-workspace-archive-manager lines are inserted. The official package files undergo no modifications.

Regarding testing, the project has 22 test cases covering 4 node:test suites: host, client bundle, client remote, and installed copies.

Installation and Enablement

First, confirm that your Node version meets ^22.19.0 || >=24.0.0, then install via the DSH CLI:

npx @deepseek-ai/dsh plugin --profile web add @gamegeek-saikel/dsh-archive-manager

If you have already installed the DSH CLI globally, you can use dsh instead of npx @deepseek-ai/dsh.

During installation, the DSH CLI applies the package’s cordis.patch.yml, which is what was mentioned above: disabling the three official lines and inserting the three archive-manager lines. After installation completes, start DSH Web:

npx @deepseek-ai/dsh web

To rollback or uninstall:

npx @deepseek-ai/dsh plugin --profile web remove @gamegeek-saikel/dsh-archive-manager

Typical Usage

After installing and restarting DSH Web, you can verify the items on the interface one by one:

  1. Open the view options menu and find the “Show archived” item (separated by a separator) alongside grouping and sorting. Toggling it shows or hides archived sessions; this works for grouped lists, tiled lists, and search results.

  2. Archived rows are displayed with a red title and colored background, bearing an “Archived” badge. Clicking it does not open the session but pops up a toast: “This session is archived. Unarchive it to continue the conversation.”, and message sending remains blocked.

  3. The row menu for archived rows only contains [Unarchive, Delete session]. After selecting Unarchive, the session returns to its normal style, can be opened, and moves back to its original workspace location.

  4. The row menu for normal sessions gains a danger-styled “Delete session” item. Deletion uses a two-step confirmation dialog with the prompt text “This permanently deletes session … This cannot be undone.” After confirmation, the session is permanently removed; if a step fails during deletion, the dialog remains open and allows retry.

  5. When deleting the currently open session, the input field is grayed out, the session row disappears, and the UI does not crash.

After deletion is complete, you can verify the disk status: the ~/.dsh\sessions\…\session-<id>\ directory does not exist; global.archivedSessionIds in ~/.dsh\storages\workspace.json and the sessionIds of each workspace no longer contain that id; and that id is also not present in tables.sessions of ~/.dsh\storages\session_projcache.json.

Applicable Scenarios and Notes

The scenarios suitable for this plugin are clear: you have archived sessions in DSH Web and want to see them again in the GUI, restore them when necessary, or simply completely delete them to clean up disk residues. The deletion process is strict regarding order and idempotency; retries can fix a semi-deleted state, which is what distinguishes it from a “direct file modification” approach.

There are a few points to note before use:

  1. Deletion is a permanent operation and cannot be undone. The two-step design of the confirmation dialog is for this purpose, but it is still recommended to think carefully before proceeding.

  2. The plugin runs with the permissions of the current DSH process and can access session storage and related configurations. Before installing, please check the source code and license on the GitHub repository (this project is MIT) to ensure you accept the terms before installing.

  3. The Node version must meet ^22.19.0 || >=24.0.0.

  4. Subagent cascade deletion only covers sub-sessions with origin subagent; forked branches will not be cascade deleted, so you can rest assured when evaluating the impact of deletion.

Conclusion

dsh-archive-manager does not do complicated things, but it does them very conscientiously: it does not modify official package files, uses a single serialized deletion process to handle multiple storages, and each failed step is idempotent and retryable. For users who need to manage archived sessions in the DSH Web GUI, it fills in the missing pieces of the official UI.

The plugin is listed in the community plugin directory (an independent site, with no official affiliation to DeepSeek / Fangfang): https://www.skillhub.cn/plugins/Saikel-Orado-Liu/dsh-archive-manager . For source code and issue feedback, see GitHub: https://github.com/Saikel-Orado-Liu/dsh-archive-manager .