Repository navigation
Releases
Releases · yingtianlan/dsh-tauri-turnrewind
v0.3.1 — 目标选择抛错不再卡死撤销占用
每次 Agent 改动自动建立私有快照,/undo 预览红绿 diff 并回滚本轮文件——卡内确认、冲突检测,不动你的 Git 历史。
本次更新(v0.3.1)
- 修复:目标选择抛错不再卡死撤销占用。 目标选择阶段会先占用 workspace,但该占用位于执行段的
try/finally之外;账本探测抛错(SQLITE_BUSY/IOERR)时占用不会释放,导致该工作区之后所有/undo都被拒绝("another undo is already running"),并且新 turn 会静默跳过快照(TURNREWIND_WORKSPACE_BUSY),直到 Host 重启。现在抛错会先释放占用与 pending plan claim 再抛出,并补了回归测试。 - 同步桌面端最新一批审查修复:账本四处
ROLLBACK加保护(BEGIN IMMEDIATE失败不再掩盖原始错误、不跳过恢复围栏写入)、HTTP 请求体改 Buffer 累积(避免多字节 UTF-8 被分块截断)、retention 在 rename 失败时回滚账本、跨进程锁只删自己 token 的锁、git 缺失(ENOENT)不落缓存、弹窗关闭恢复焦点、purge CLI 拒绝畸形--home、轮询失败预算计入非 404 的 HTTP 错误、恢复面板按钮失败后可重试、macOS 大小写敏感卷不再折叠 workspace key。 package.json键序修正(pnpm lint通过)。
主要能力
- 两阶段
/undo:先出预览卡(每个文件的红绿 diff、+x -y徽标、文件清单),卡内 ✓ / ✗ 确认或取消;计划 5 分钟过期,过期只锁执行、不抹账本记录。 - 冲突保护:恢复前比对当前文件与 turn 完成时的快照,发现变化即拒绝覆盖并给出冲突 diff;
--skip-conflicts(只恢复无冲突文件)与--force(强制覆盖)可控放行。 - 快照链自愈:私有快照仓库被删/损坏,或 alternates 借用的对象被源仓库
git gc --prune=now回收,都会自动降级重建基线,旧 turn 标记为死快照跳过。 - 并发与恢复:跨进程 workspace 锁、
needs-recovery恢复围栏与应用内恢复面板、/undo --doctor只读诊断、账本quick_check+ 每日滚动备份。 - 零侵入:不修改用户项目的 HEAD、分支、index、stash 或提交历史;ignore 语义(
.gitignore/.git/info/exclude/ global excludes /.gitattributes)完全委托源仓库。
安装
- 桌面版内置:DeepSeek Harness Desktop 已随包分发,下载即用,无需手动配置。
- npm:
npm i dsh-tauri-turnrewind(需要 Node >= 22.15,并配合 DSH Desktop 使用)。
使用
/undo # 预览并确认回滚当前会话最近一个可恢复 turn
/undo <turn-id> # 指定 turn
/undo --dry-run # 只分类不写盘
/undo --doctor # 只读诊断
限制与注意
- 实验功能:恢复路径直接使用 Node/Git,尚未接入受控的宿主 sandbox/Tauri bridge,请在可丢弃的工作区先行试用。
- 工作区必须位于 Git worktree(OpenCode 风格);非 Git 目录显式禁用(turn 记为
skipped)。 /undo --redo暂时禁用(底层加固代码保留但未开放)。- 单文件恢复上限 64 MB。
- 数据位于
$DSH_HOME(ledger.sqlite与snapshots/);清除某个 workspace 的 rewind 数据可用purge-workspace.mjs。