Skip to content
dsh-market Browse plugins GitHub 中文

HrxSpace/dsh-session-sweeper

Scan, view, and safely clean local AI terminal session histories (Claude Code, Codex CLI, WorkBuddy, DSH) from a settings card — quarantine-first with SHA-256 manifests, one-click restore, audit log, and phrase-confirmed hard delete.

Stars ★ 0 Category Sessions & Messages Listed 2026-09-07 npm dsh-session-sweeper

Install

Inside DeepSeek Harness, with dsh-market

dsh plugin --profile web add dshmarket

Or from the command line

dsh plugin --profile web add dsh-session-sweeper

Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.

Screenshots

README

中文说明

Scan, view, and safely clean local AI terminal session histories — Claude Code, Codex CLI, WorkBuddy, and DSH itself — from a dedicated card in the DSH Web UI (Settings → 会话清道夫 / Session Sweeper).

Screenshots

Session list Message preview
Recycle bin Settings

What it does

  • Scan every supported source under your home directory and list sessions with title, project, message count, size, and last-active time.
  • View session contents (user/assistant messages, tool calls) in a paged preview — including DSH logs stored as concatenated zstd frames.
  • Clean selected sessions. The default action is quarantine: the whole artifact (file, or session directory for DSH) is moved into a recycle directory with a manifest recording the original path and a SHA-256 per file. One click restores a batch byte-for-byte.
  • Hard delete is available but requires typing the confirmation phrase DELETE; it leaves an audit tombstone only.

Data safety model

Guard Behavior
Quarantine-first Default clean moves artifacts to ~/.hist-sweeper/recycle/<batchId>/ — always restorable
Active guard Sessions modified within guardHours (default 24) are skipped unless you explicitly include them
Current session The session served by the running DSH process is never cleanable
Lock detection Files that cannot be opened are skipped without aborting the batch
Audit log Every operation is appended to ~/.hist-sweeper/recycle/log.jsonl and shown in the Recycle tab
Scope Touches nothing besides session artifacts — never configs, credentials, memory, or todos

Install

From a packed tarball (no build scripts, lib/ is prebuilt and committed):

dsh plugin --profile web add ./dsh-session-sweeper-1.0.0.tgz

From git (lib/ is committed, so no prepare build permission is needed):

dsh plugin --profile web add github:HrxSpace/dsh-session-sweeper

Restart dsh web afterwards and open Settings → Session Sweeper.

Configuration

Both options can be overridden on the plugin row in your profile's cordis.patch.yml:

Option Default Meaning
guardHours 24 Active-guard window in hours
recycleDir ~/.hist-sweeper/recycle Quarantine destination

Test hooks (not for daily use): DSH_SWEEPER_HOME / DSH_SWEEPER_RECYCLE redirect the scanned home and recycle root — used by the test suite to run against synthetic trees.

Uninstall

dsh plugin --profile web remove dsh-session-sweeper

The recycle directory and audit log survive uninstalling (they are your recovery path); delete ~/.hist-sweeper manually once you no longer need them.

Permissions & network

  • Reads: ~/.claude/projects/**, ~/.codex/sessions/** (incl. archived_sessions), ~/.workbuddy/projects/**, ~/.dsh/sessions/**
  • Writes: only the recycle directory
  • Serves a same-origin-only JSON API (/sweeper/api/*) on the DSH web server; cross-origin requests are rejected
  • No network access, no lifecycle scripts, zero runtime dependencies beyond node builtins (react is provided by the DSH client runtime)

Development

# build (any tsdown ≥0.22 works; lib/ output is committed)
npx tsdown

# tests (node:test + tsx, zero package installs)
node --import tsx/esm --test tests/sweeper.test.ts

# dev instance with the local build overlaid
pnpm dsh --profile web --patch ./cordis.dev.yml --port 3180 --no-open

License

MIT

Content from the project README on GitHub ↗

Comments

Comments live in GitHub Discussions. Sign in with GitHub to post or react.