dsh-archived-sessions
An "Archived sessions" page in the DeepSeek Harness settings — reopen the sessions the sidebar hides.
🌐 中文 · English
A DSH plugin adding an Archived sessions page to the Settings panel: it lists every session in the registry-global archive set (normally hidden from the sidebar grouping surfaces and search), and clicking a row reopens that session and closes the settings panel.
🎯 Archiving shouldn't be a one-way door — every archived session stays one click away.
ContentsWhy
In DSH 0.1.0-rc.6 archiving is one-way: workspace.archiveSession moves a
session into the registry-global archive set, all grouping surfaces and search
hide it, and this version ships no unarchive API. This plugin closes that
gap — session logs and workspace accounting survive archiving, so an archived
session can always be reopened from here.
Install
From GitHub (recommended):
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:hashdiana/dsh-archived-sessions
From a local checkout:
npx -p @deepseek-ai/dsh dsh plugin --profile web add <path-to-this-repo>
Restart the target profile afterwards. The plugin is a pure client plugin: an
empty host half plus a browser half registering one settings.section entry.
(lib/ build artifacts are committed, so Git installs never build.)
Develop
pnpm install
pnpm typecheck # tsc -b
pnpm build # tsc -b && tsdown → lib/index.js (host) + lib/client.js (browser)
pnpm test # vitest run --pool=threads
- The client bundle is emitted as
window.__ModuleLoader__.load({id, factory})by tsdown; CSS Modules go through lightningcss hashing plus<style data-plugin>injection. - After changing sources, run
pnpm buildand commitlib/(Git installs use the committed artifacts; they do not build).
Architecture
- Seam:
settings.section(list slot; typed bydsh-client-ui-settings, declared at runtime by ui-settings-general), entryid=archived-sessions,order=100, thunkedlabel: () => t('nav')— the shell re-resolves it on every locale revision, so language switches apply automatically. - Data:
ctx.workspaces.list(WorkspaceListState.archivedSessionIds, in archive order) andctx.sessions.list(SessionListState.byIdfor titles, timestamps, running state), passed into the component through the register inject factory and subscribed viauseSyncExternalStore. - Behavior: clicking a row calls
ctx.sessions.open(id)plus the section owner'sclose(); archived sessions stay in the session list store, so they open directly.
Verification matrix
pnpm typecheck/pnpm build/pnpm test- Fresh scratch profile:
dsh plugin --profile <scratch> add github:hashdiana/dsh-archived-sessions→dsh --profile <scratch> --dump-configmust show thedsh-archived-sessionslayer - GUI: open Settings in a web profile → the nav shows Archived sessions → archive a session and it appears in the list → click to reopen
License
MIT
No comments yet. Be the first to write one.