Browse every message you sent in the current session: full-history listing with newest-first sort, text filter, one-click copy, and jump to a message (auto-loads earlier history when the target is not yet loaded).
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-history
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:chenproton/dsh-history
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
DSH web plugin: quickly view, search, and jump to all the messages you sent in a long conversation.
中文 | English
Features
- Full history — lists every message you sent in the current session, including pages not yet loaded into the conversation window and history shadowed by compaction.
- One-click jump — click a message for fully automatic positioning: auto-loads earlier history if the target is not yet loaded, waits for rendering if needed, then smooth-scrolls + flashes the highlight and closes the panel.
- Sort toggle — newest-first by default; one click to switch between "newest first / oldest first".
- Text filter — live filtering by message text.
- One-click copy — a copy button on every row copies the full message text.
- Fast startup — the full list is prefetched in the background when you enter a session, so the panel opens instantly; the host side keeps a cache.
🚀 Install
Prerequisite: DSH installed and working (dsh web runs).
# 1. Install the plugin
dsh plugin --profile web add dsh-history@latest
# 2. Automatically restart the service (the script ships with the plugin — no download needed)
bash ~/.dsh/profiles/web/node_modules/dsh-history/restart-dsh-web.sh
After that, "我的消息 (N)" ("My Messages (N)") appears above the input box in every session — no manual action required.
FAQ
dsh plugin --profile web update dsh-history
# or install the latest directly
dsh plugin --profile web add dsh-history@latest
Then run bash ~/.dsh/profiles/web/node_modules/dsh-history/restart-dsh-web.sh (or hard-refresh the browser).
dsh plugin --profile web add github:chenproton/dsh-history#main
# or the full URL form
dsh plugin --profile web add https://github.com/chenproton/dsh-history.git#main
Then run bash ~/.dsh/profiles/web/node_modules/dsh-history/restart-dsh-web.sh the same way. This channel uses the committed build artifacts directly — no local build needed.
To debug local changes or follow a dev branch, point the dependency at a local clone and build it yourself:
# 1. Clone and build
git clone https://github.com/chenproton/dsh-history.git ~/Code/dsh-history
cd ~/Code/dsh-history && pnpm install && pnpm build
# 2. Point the dependency at the local clone
# Edit dependencies in ~/.dsh/profiles/web/package.json:
# "dsh-history": "link:<absolute path to the clone>"
# 3. Append the mount row to ~/.dsh/profiles/web/cordis.patch.yml:
# - insert:
# - id: dsh-history
# name: 'dsh-history'
# 4. Install in the profile directory
cd ~/.dsh/profiles/web && pnpm install
# 5. Restart to apply (the script lives in the clone)
bash ~/Code/dsh-history/restart-dsh-web.sh
Updating: git pull && pnpm install && pnpm build → bash ~/Code/dsh-history/restart-dsh-web.sh.
Switching back to the npm channel: change the dependency back to "dsh-history": "^0.1.20", run pnpm install, and remove the manual mount row (to avoid double-mounting).
Prerequisite: DSH with plugin-registry integrated (the
dsh registrycommand exists). Enabling both channels at once double-mounts (two Node halves, two panels).
git clone https://github.com/chenproton/dsh-history.git && cd dsh-history
pnpm install && pnpm build
node scripts/package-registry.mjs # assemble registry/ staging (manifest + artifacts + README, not committed)
dsh registry install ./registry # install (disabled by default)
dsh registry enable dsh-external/dsh-history
bash restart-dsh-web.sh # automatically restart to apply
Updating: git pull && pnpm install && pnpm build → node scripts/package-registry.mjs → dsh registry uninstall/install/enable → bash restart-dsh-web.sh. Remove the other channel's mount before switching.
It is a one-click restart script shipped with the plugin: it detects the deployment method and restarts DSH Web so the plugin takes effect —
- managed by systemd (
dsh-web.service) → runssystemctl restart(clean, single instance); - otherwise finds the running
dsh webprocess and restarts it with its original arguments (nohup); - starts fresh with
dsh webif no process is found.
No such file or directory means the script is not in your current shell directory — use the full path, or copy it first:
# Use the script inside the installed package directly (full path, works from any directory)
bash ~/.dsh/profiles/web/node_modules/dsh-history/restart-dsh-web.sh
# Or copy it to your current directory
cp ~/.dsh/profiles/web/node_modules/dsh-history/restart-dsh-web.sh ~/restart-dsh-web.sh
bash ~/restart-dsh-web.sh
# Or download from the repo when the package is not installed
curl -O https://raw.githubusercontent.com/chenproton/dsh-history/main/restart-dsh-web.sh
bash restart-dsh-web.sh
Options: -n previews the commands to run (dry-run), -p PID targets a specific process, -l FILE sets the log file.
Safe to ignore. DSH provides @deepseek-ai/* and react at runtime through its own module table — no need to reinstall them in the profile (official plugins show the same warnings).
- Make sure you restarted the service (
restart-dsh-web.sh) or hard-refreshed the browser (Cmd/Ctrl+Shift+R); - Check the plugin is in the bundle:
dsh.profile.bundlesin~/.dsh/profiles/web/package.jsonshould containdsh-history; - Still stuck? Report the output of
dsh plugin --profile web listin an issue.
Usage
- Click "我的消息 (N)" ("My Messages (N)") above the input box (N = total messages you've sent in the current session).
- The panel expands: search box + sort toggle + message list (timestamp + text preview + status tag).
- Status tags:
- 可定位 / Locatable (green) = already in the loaded window → click auto-scrolls + highlights.
- 未加载 / Not loaded (grey) = in earlier history → click auto-loads earlier history and locates it.
- 定位中… / Locating… (yellow) = loading / waiting for render to locate the message.
- The
⧉copy button on each row copies the full text (turns into✓for 1.4s, then restores).
Changelog
v0.1.20
- Docs: added this English README.en.md, cross-linked with the Chinese README; shipped in the npm package and the registry staging.
v0.1.19
- Code cleanup: extracted pure helpers into
src/client/util.ts, slimmed the component file and unified repeated logic — no behavior change (internal refactor).
v0.1.18
- Fix: clicking a "可定位" (locatable) message no longer relies on async
scrollIntoView; it now positions the conversation scrollport directly (getBoundingClientRect-centered), scrolling synchronously and reliably regardless of panel state.
v0.1.17
- Fix: the restart script now auto-cleans stray dsh web processes holding the port (identifies processes whose cmdline matches
dsh weband stops them), then verifies with an HTTP health check; non-dsh processes are never mis-killed.
v0.1.16
- Fix: restart script upgrade — port-conflict diagnostics and an HTTP health check (no longer trusts
is-active, which reports active the instant the process forks but can still crash right after).
v0.1.15
- Fix: the restart script polls for service activation for up to 30s (instead of a fixed 3s, for slow cold starts) and dumps
systemctl status+ journal logs on failure.
v0.1.14
- Docs: install section simplified to the recommended npm path; GitHub / source / registry / script / peer-warning topics all moved into a collapsible FAQ.
v0.1.11
- Added the
restart-dsh-web.shcompanion script: one-command service restart after install/update. Auto-detects the deployment (systemd service / bare process restart / fresh start), with-ndry-run,-p PID,-l LOG.
v0.1.9
- Install options expanded: GitHub direct install, source-link install, and plugin-registry channels (with
scripts/package-registry.mjsand a registry-specific client bundle).
v0.1.7
- UX: clicking a message now auto-locates fully — loads earlier history when the node isn't loaded; waits for rendering (up to 1.5s retries) when the node is loaded but not yet in the DOM, then scrolls + highlights + closes. Rows show "定位中… / Locating…" during the process; only genuine failures surface a notice.
v0.1.5
- Performance/stability: full history now reads the session's in-memory log first (no persistence read, no replay validation), falling back to the full log read only for inactive sessions — greatly reducing "请求超时 / request timeout" occurrences.
- Timeout raised to 15s for very large sessions.
- UX: notices moved to the top of the panel with a highlighted background, always visible.
v0.1.3
- Stability: 15s fetch timeout with a "重试 / Retry" button on failure.
- Stability: auto-load paging capped at 30 pages to prevent pathological loops.
- Performance: bounded caches on both client and host sides.
- UX: copy feedback restores after 1.4s; same-day messages show time only (
HH:mm). - UX: huge histories render only the latest 200 rows with a hint;
Esccloses the panel; keyboard-accessible rows (Enter/Space) and aria-labels.
v0.1.1
- Performance: prefetch the full message list in the background on session entry — panel opens instantly.
- Host-side 5s per-session cache.
v0.1.0
- First release: full-history listing, one-click jump + highlight, auto-load earlier history, newest/oldest sort toggle, text search, one-click copy.
License
MIT
Links
More in this category
Anionex/dsh-turn-rewind★ 77
Rewind conversation and workspace state, powered by a persistent Change Ledger.
Nwflower/dsh-chat-import★ 57
Import full-fidelity chat histories from 13 coding agents (Claude Code, Codex, ChatGPT, Cursor, Gemini, opencode, and more) as resumable DeepSeek Harness sessions, with reverse export back to Claude Code.
whyihaveyou/dsh-suite#plugin-session-export★ 39
Export the append-only session log as human-readable Markdown or HTML, grouped by trajectory source.
Chinesezjc/dsh-interconnect★ 30
Cross-instance message and event handoff between DSH instances via an interconnect server.
Moeblack/dsh-message-edit★ 30
Branch-based message editing, reroll, retry, and a version timeline.
hellodigua/dsh-share★ 23
Share your conversations with one click.