DSH Hub
dsh-turn-rewind cover

Anionex/dsh-turn-rewind

dsh-turn-rewind

UIWeb UI119 GitHub stars· updated 2026-09-26

DSH — rewind conversation and workspace state, powered by a persistent Change Ledger

Install

npx @deepseek-ai/dsh plugin --profile web add @anionex/dsh-turn-rewind

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-turn-rewind DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-turn-rewind.svg)](https://dshhub.dev/plugins/dsh-turn-rewind)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from Anionex/dsh-turn-rewind, cleaned of badges and images.

DSH Turn Rewind

中文说明

Message-anchored project-file recovery for DeepSeek Harness, with an option to restart from the restored request.

Turn Rewind is the user-facing feature, repository, and Profile Bundle name. Change Ledger is the durable restore engine underneath it: the ctx.changeLedger service, on-disk format, and storage path keep that name because they describe the reusable snapshot and recovery layer rather than the Web action alone.

Change Ledger gives a DSH session an explicit safety boundary around workspace mutations:

create restore point
        ↓
agent / user / external tools modify the worktree
        ↓
preview exact path-level drift
        ↓
review a full or selective restore plan
        ↓
press the final restore button in the rewind dialog
        ↓
create rescue point → restore → verify

It never commits, stashes, resets, switches branches, edits the Git index, or decides automatically that a change should be reverted.

What's new

Most recent work first:

  • File rewind works in ordinary directories (0.3.0) — when the working directory is not a Git repository it is snapshotted as an ordinary directory (.git and node_modules excluded by default, plus an optional .dsh-rewindignore), so messages-only rewind is no longer the only option.
  • The fastest path is now the default (0.3.8) — the new auto mode uses Git-native checkpoints in a Git worktree (reusing the repository object database, so committed content is never stored twice) and the plugin's own store for ordinary directories.
  • Unchanged files are no longer re-read (0.3.5) — each workspace keeps a persistent path identity cache; a measured 20 000-file / 351 MB workspace dropped from 237 s to about 7 s per capture.
  • One oversized file no longer discards a whole checkpoint (0.3.3) — it is skipped and reported while the rest is still captured, and a restore never touches a path its checkpoint did not record, so a file that was too large then and small now is never deleted.
  • Checkpoint budget 5 s → 60 s, parallel capture (0.3.4) — a 5-second budget in a large directory could only ever report a skip.
  • Rewind button and messages-only fixes (0.2.2 / 0.2.3) — adapted to the DSH 0.1.2-alpha client hooks and restored the messages-only mode that the Host rejected.
  • Settings card matches the official cards (0.3.6 / 0.3.7) — one collapsed row that expands, consistent with every other plugin card.

Preview

Rewind appears as an icon-only third action under each user message, after its timestamp and native Copy action:

Opening it shows the affected files and offers three choices: restore the files and restart from before that message, restore only the files, or rewind only the messages and leave the files untouched:

Why it has a Change Ledger engine

A diff button can show current changes, but it does not own a durable restore lifecycle. Change Ledger owns:

  • content-addressed restore-point manifests;
  • Git worktree, HEAD, branch, and in-progress-operation fences;
  • stale-plan detection between review and mutation;
  • exact two-step confirmation plus DSH human approval;
  • automatic pre-restore rescue points;
  • post-restore hash verification;
  • rollback after a failed restore;
  • startup reconciliation of interrupted restore journals;
  • a public ctx.changeLedger service that other plugins can consume.

…

Related plugins