DeepSeek Harness 插件:一键就地回退对话到任意更早的用户消息。
64/100
综合分
231
GitHub 星标
6,356
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:engines.node 要求 >=24.9.0,不满足 Node 22.19.0。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SiriLee/dsh-rewind该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · vision
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装engines.node 要求 >=24.9.0,不满足 Node 22.19.0
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-rewind-plugin @ 0.19.1
✗Node 引擎要求 >=24.9.0 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 02:37:33
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 87 处,展示前 28 条)
- 删除本地文件src/index.ts:228
await rm(capture.backup.file, { force: true }) - 写入本地文件src/index.ts:374
await copyFile(target.displayPath, staged) - 读取本地文件src/index.ts:375
const st = await stat(staged) - 读取本地文件src/index.ts:378
const source = await stat(target.displayPath).catch(() => undefined) - 删除本地文件src/index.ts:390
await rm(staged, { force: true }) - 删除本地文件src/index.ts:812
outcome = await store.restoreAfter(agent.session.id, plan.targetSeq, path => unlink(path)) - 读取本地文件src/snapshot-cleanup.ts:130
const raw = JSON.parse(await readFile(path, 'utf8')) as { lastSweepAt?: unknown } - 写入本地文件src/snapshot-cleanup.ts:141
await mkdir(dirname(path), { recursive: true }) - 写入本地文件src/snapshot-cleanup.ts:142
await writeFile(tmp, JSON.stringify({ lastSweepAt: ms }), 'utf8') - 写入本地文件src/snapshot-cleanup.ts:143
await rename(tmp, path) - 读取本地文件src/snapshot.ts:413
const sizes = await Promise.all([stat(aPath), stat(bPath)]) - 读取本地文件src/snapshot.ts:435
const st = await stat(path) - 读取本地文件src/snapshot.ts:463
await stat(path) - 读取本地文件src/snapshot.ts:469
return (await readFile(path)).toString('utf8') === source.text - 写入本地文件src/snapshot.ts:479
await copyFile(path, dest) - 读取本地文件src/snapshot.ts:480
const st = await stat(dest) - 读取本地文件src/snapshot.ts:487
const source = await stat(path).catch(() => undefined) - 写入本地文件src/snapshot.ts:532
await writeFile(tmp, JSON.stringify(data), 'utf8') - 写入本地文件src/snapshot.ts:534
await rename(tmp, file) - 写入本地文件src/snapshot.ts:1193
await mkdir(dir, { recursive: true }) - 写入本地文件src/snapshot.ts:1294
if (source.kind === 'blob') await copyFile(source.path, tmp) - 写入本地文件src/snapshot.ts:1295
else if (source.kind === 'text') await writeFile(tmp, source.bytes) - 删除本地文件src/snapshot.ts:1373
if (content.staged !== undefined) await rm(content.staged.file, { force: true }) - 删除本地文件递归src/snapshot.ts:2399
await rm(this.anchorDir(sessionId, seq), { recursive: true, force: true }) - 删除本地文件src/snapshot.ts:2428
await rm(file, { force: true }) - 删除本地文件src/snapshot.ts:2481
await rm(file, { force: true }) - 删除本地文件递归src/snapshot.ts:2483
await rm(join(sessionDir, RESCUE_DIR, safeFileId(journalOpIdOf(name))), { recursive: true, force: true }) - 删除本地文件递归src/snapshot.ts:2571
if (!dryRun) await rm(full, { recursive: true, force: true })
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
⚠ 该插件运行需访问外部网络 / 远程 API,部署在国内无外网环境时可能无法正常使用。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cosmokit@deepseek-ai/dsh-agent@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-commands@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-input-trigger@deepseek-ai/dsh-client-ui-plugin-manager给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
6 张 · 点击查看大图功能亮点
- 同窗口对话回退
- 不新建分支
- 工作区备份还原
DSH 插件:在同一个窗口里轻松回退对话,从不新建分支;自带轻量工作区备份,回退时一并还原文件(Claude Code /rewind 语义)。
最近更新
在 GitHub 查看全部 →v0.19.12026-10-26
· [0.19.1] - 2026-10-26
适配 DSH >=0.2.1-rc.1 =0.2.1-rc.1 <0.3.0-0。
· 新功能
· 现在支持日语(日本語)。宿主命令文案、客户端浮层和设置卡片、插件卡片元数据都跟随宿主语言;此前只有中文和英文。DSH 本身不带日语,需安装日语语言包(如 @fang2hou/dsh-locale-ja)才能选用。(#61)@2001Y @SiriLee
完整更新日志:
v0.19.02026-10-24
· [0.19.0] - 2026-10-24
适配 DSH >=0.2.1-rc.1 =0.2.1-rc.1 <0.3.0-0 已支持
· 改进
· 撤回隐藏不再依赖 DOM。撤回的节点在 Chat 快照计算顺序之前就标记为 visibility: 'hidden',因此它们不会进入顺序、不会被挂载,按行设置 style.display 的隐藏路径也删掉了;对话记录、分组和已加载轮次导航因此保持一致。刷新是增量的:只有命令节点变化时才重新计算撤回区间;区间不变时,只重新推导变化的节点和受影响的 Turn 过程摘要,只有区间变化时才全量重建——长会话不再每走一步就重扫一遍。节点仍留在快照里,所以输入框回填不受影响。右侧栏仍由宿主的 turnOutline 提供数据,因此完全撤回的 Turn 显示为未加载标记。(#58)@SiriLee
· 杂项
· 移除公开的客户端隐藏约定(破坏性变更)。dsh-rewind-plugin/client 不再导出 hiddenSeqsOf / targetSeqOfArgs / HiddenChat,撤回节点也不再带 data-dsh-rewind-hidden;如果有第三方插件或脚本依赖这些入口,从本版本起没有替代方案。新的隐藏机制是私有接缝,不对第三方作任何承诺。(#59)@SiriLee
完整变更日志:
v0.18.12026-10-24
· [0.18.1] - 2026-10-24
适配 DSH >=0.2.1-rc.1 =0.2.1-rc.1 <0.3.0-0。
· 改进
· 回退浮层现在与宿主的轮次用量面板一致:沿用该面板的边框和字号,页面滚动、窗口缩放时保持锚定(底部放不下就翻到上方),模式步骤去掉单独的取消页脚,只留目标预览,文件模式改名为「回退会话和文件」,每条提示保持一行。@SiriLee
· 回退按钮的提示现在与相邻的复制操作一致:两个 ↶ 按钮都改用宿主 Tooltip(底部方向)渲染,不再用原生 title,悬停填充只在支持悬停的设备上生效。@SiriLee
完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-rewind
DeepSeek Harness 插件:一键就地回退对话到任意更早的用户消息。
同窗口内完成,不新建分支、不换窗口,可一并还原工作区文件——即完整的 Claude Code /rewind 语义。
回退到更早的消息,可选一并还原文件
刻意聚焦、保持极简,只做一件事:就地回退到任意远的用户消息,还能顺手还原改过的文件。
- 就地消息回退——目标消息及其之后的内容同时从模型上下文和渲染对话中撤回,目标消息文本自动回填输入框。始终在原会话内完成,不新建分支、不残留副本。
- 轻量备份还原——对齐 Claude Code:追踪写类工具编辑过的文件,回退时一并还原,已跟踪文件的外部变更也能还原。局部追踪、写前备份、不变不存,不依赖 git。
- 安全保障——会话日志仅追加回退标记,从不删改;文件备份与还原经安全加固;完备测试,随 DSH 升级长期维护。安全模型:SECURITY.md。
效果预览
每条用户消息的操作行都有一个 ↶ 回退 按钮。点击后弹出模式选择浮层——「仅回退对话」或「回退对话和文件」,后者会先展示文件变更清单再确认。还可以通过 /rewind 和 /undo 命令便捷地选择和回退。
展开完整文档(README 剩余 1 节)
dsh-rewind DeepSeek Harness 插件:一键就地回退对话到任意更早的用户消息。 同窗口内完成,不新建分支、不换窗口,可一并还原工作区文件——即完整的 Claude Code /rewind 语义。 回退到更早的消息,可选一并还原文件 刻意聚焦、保持极简,只做一件事:就地回退到任意远的用户消息,还能顺手还原改过的文件。 - 就地消息回退——目标消息及其之后的内容同时从模型上下文和渲染对话中撤回,目标消息文本自动回填输入框。始终在原会话内完成,不新建分支、不残留副本。 - 轻量备份还原——对齐 Claude Code:追踪写类工具编辑过的文件,回退时一并还原,已跟踪文件的外部变更也能还原。局部追踪、写前备份、不变不存,不依赖 git。 - 安全保障——会话日志仅追加回退标记,从不删改;文件备份与还原经安全加固;完备测试,随 DSH 升级长期维护。安全模型:SECURITY.md。 效果预览 每条用户消息的操作行都有一个 ↶ 回退 按钮。点击后弹出模式选择浮层——「仅回退对话」或「回退对话和文件」,后者会先展示文件变更清单再确认。还可以通过 /rewind 和 /undo 命令便捷地选择和回退。 用户消息旁的 ↶ 回退按钮模式选择浮层 「回退对话和文件」影响清单 /rewind 候选面板 安装 确认本机 DSH 版本后,在 Release 找到适配的插件版本。 命令行: dsh plugin --profile <name> add dsh-rewind-plugin@<版本> 图形界面:侧栏「插件」页 →「添加插件」→ 填 dsh-rewind-plugin@<版本> → 安装 → 重启 DSH。 图片仅为示例,请以实际适配版本号为准。 [!WARNING] npm 上的 dsh-rewind 属于其他作者,请用 dsh-rewind-plugin 安装。 使用 1. 在对话中找到要回退的那条用户消息,或输入 /rewind(或其别名 /undo)打开候选列表选择。 2. 选中它。 小浮层提供两种模式——「仅回退对话」或「回退对话和文件」。 3. 回退立即生效:对话回到目标消息当时的样子,目标消息的文本自动回填输入框——改完直接重发。 键盘操作:候选列表与模式浮层均支持 ↑↓ 移动、Enter 确认、Esc 取消/返回。 边界说明 - 回退内容完整保存——被撤回的内容仍在日志中,可在「轨迹」面板查看;也可禁用插件让它们重新显示(仅界面)。 - 回退无法原地撤销——但可以先禁用插件让被撤回的内容重新显示,再在回退前的位置上点「在新对话中分支」,新会话的上下文即可包含这些内容。 - 插话也能回退——模型尚未读取的 steering 插话消息,同样可作为回退目标,不会打断当前生成。 - 回退已读消息会打断当前正在运行的回合——确保回退的安全执行。 存储管理 快照备份(默认开启):用于文件还原;可在本插件的配置卡片中关闭。关闭后不再创建新的快照,关闭期间的文件改动无法还原。快照存储于 <dsh home>/rewind-snapshots/(默认 ~/.dsh/rewind-snapshots/)。手动删除该目录仅清除文件备份,对话回退不受影响,插件可自动重建。 快照自动清理(默认关闭):把长期不活跃的会话快照整目录移除,不影响活动会话与对话日志。可在配置卡片查看与配置(自动清理开关、失活天数),也可用 /snapshot-auto-cleanup 命令查看、设置和运行。详见:快照自动清理。 卸载 卸载插件 dsh plugin --profile <name> remove dsh-rewind-plugin 如需同时删除本地数据 rm -rf <dsh home>/rewind-snapshots rm <dsh home>/snapshot-cleanup-last-sweep.json 本插件的配置项保存在当前配置档的配置文件 cordis.patch.yml 中。如需彻底清理,可手动删除对应条目。 本插件的作用 相较于默认行为,本插件带来的变化: | 维度 | 默认行为 | 本插件 | | 对话回退 | 新建分支对话 | 就地回退——不用新建会话分支、不切窗口,也不产生残留会话副本,回退更便捷 | | 文件还原 | 手动还原 / Git 管理 | 一键还原——写前轻量备份,回退对话时可选一并还原文件,贴合智能体工作流 | | 还原依赖 | 常依赖 Git 仓库或完整快照引擎 | 无依赖——不依赖 Git 仓库,也不要求是代码项目,普通目录即可用 | 原理 整套设计只有两条主线,核心哲学朴素却克制:对话部分「只遮蔽、不删除」,使用 DSH 原生的「隐藏 + 替换」机制;文件部分「局部追踪,写前轻量备份」,参考 Claude Code 的检查点语义。 1. 对话回退:一次「遮蔽」,而不是「删除」 append-only 是铁律:会话日志只追加、从不改写——这是可审计与信息安全的地基。回退从不动历史,它只做一步:往日志末尾追加一条 “空消息”标记,把目标消息及其之后的全部内容「遮蔽 + 替换」掉,让模型和界面都只看得到目标之前的部分。 - 同一份日志——只在当前会话的日志做简单追加,不新建会话、不新建分支,因此不会留下残留和副本; - 标记是规范的——采用与官方 /compact 相同的「隐藏 + 替换」:/compact 把一段历史压缩成摘要,/rewind 则换成一条“空消息”标记。由于其规范性,DSH 的日志重放、压缩、续接检查都能正确识别它,绝不会把它误认为真实对话; - 替换内容无感——模型对标记忽略、无感(实测验证)。配合插件对界面显示的处理,模型和你看到的对话就是目标消息当时的样子; - 记录完整保留——因为是「遮蔽」而非「删除」,被撤回的内容完整留在日志里,可审计、可追溯,原则上也能手动恢复。 设计点睛:整个对话回退就是一条追加。它确定、可审计,且因为日志从未被破坏,回溯是「干净的」——用最小的动作,实现最完整的语义。 2. 文件还原:轻量检查点,「写前备份」 文件部分对齐 Claude Code 的检查点语义——局部追踪、写前备份 + 每条消息重扫已跟踪文件,而不是整树快照。这项取舍既省空间,又更完整: - 写前备份:只追踪写类工具(write、edit),写前备份原内容,并记录、追踪被处理的文件——从不备份整个工作区,因此轻量;单个文件过大时不备份。 - 外部变更也追:每条用户消息边界,插件重新检查所有已跟踪文件——命令执行、手动修改等外部变更同样被记录,回退时一并还原。这让「轻量」却不「残缺」。 - 不变不存:记录只在有变化时发生——消息边界重扫时无变更的不备份(不留记录);写前备份时若与前一条记录一致,只存指向它的链接(ref)而非复制内容。 - 还原准确:以备份为唯一标准,对照真实磁盘,只动真正不一致的文件;备份逐字节存储。还原结果与备份一致,无“幽灵影响”。但存在限制:文件回退的追踪边界。 - 安全与完整性:路径经安全化处理,绝不越出备份根目录;符号/硬链接跳过,避免透过一次还原误伤同名的另一份文件;单个文件失败绝不中止整轮还原;备份与还原日志均原子写落盘(跨重启仍在),断电或崩溃后的半还原可续做或回滚。 设计点睛:这套检查点的「轻」,来自只记录被工具动过、且确实变化的文件——写前备份保证可还原,不变不存与存链接压掉重复;还原时再对照真实磁盘,只动不一致的文件。 明确不做的事 本插件刻意保持轻量、聚焦「对话回退」这一件事,以下场景不属于它的职责: - 整树 / Git 级快照——只跟踪写类工具编辑 + 已跟踪文件的外部改动,从未被工具碰过的文件不还原。需要工作树级的完整快照回退时,请交给更专业的快照工具(git)。 - 子代理的编辑——不追踪,子代理会话内也不提供回退(同 Claude Code):子代理运行在自己的会话里,其备份无法由父会话的回退还原,因此也不会为子会话保留备份。 - fork / 分支回退——DSH 已内置「在新对话中分支」,不重复造轮子。 兼容性 - Node.js >=24.9.0。 - 支持的 DSH 版本由 package.json 的 engines.dsh 声明。 - 兼容性定义、验证方法与版本对齐详见 docs/compat/audit.md。 [!WARNING] 本项目与 DeepSeek Harness 均处于开发者预览阶段。可复现环境请 pin 精确版本,并阅读上述行为说明。 已知问题 1. 导出的日志是完整内容——/export 导出整个会话日志(原始 JSONL),包含已撤回的内容;本插件无法改动导出。 2. 轻量文件回退存在代价——特定情况可能无法回退所有修改。行为与 Claude Code 一致。详见:文件回退的追踪边界。 3. 轮次导航保留已回退轮次——右侧轮次导航为已回退轮次保留「未加载」刻度,悬浮可预览已撤回内容。仅显示差异,无功能影响。 4. 较远回退可能显示空白——回退目标早于已加载的历史时,对话区会显示空白;需点击「加载更早」往前翻,才能看到历史对话。 [!NOTE] 本插件提供浏览器端诊断输出;详见 浏览器诊断。 安全 本插件只向会话日志追加回退标记事件,从不删除或改写已记录的历史。工作区文件仅在「回退对话和文件」时被改写,备份存储于 <dsh home>/rewind-snapshots/;还原以备份为唯一来源。不触碰你的 git 仓库,无网络请求,不访问任何凭据。对长期不活跃的会话,另有默认关闭的快照自动清理可整目录移除其快照,不影响活动会话与对话日志。完整安全模型:SECURITY.md。 开发 npm install # devDeps 来自 npm registry npm run check # 一键全检:typecheck + test + build + verify:host + pack --dry-run npm run typecheck # tsc 三面编译(host + client + client-test) npm test # vitest:全部单元与兼容性测试套件 npm run build # esbuild:lib/index.js(host ESM)+ lib/client.js(loader 闭包)+ .d.ts node scripts/verify-host.mjs # 端到端验证构建产物 prepack 在打包前执行完整构建,所以 npm pack / npm publish 总会产出完整的 lib/。请从 npm 或打好的 tarball 安装——git 检出的源码里没有构建好的 lib/。 维护者:模块地图与 harness 接口参考见 docs/harness-reference.md 贡献指南:CONTRIBUTING.md 发布 通过 GitHub Actions Trusted Publishing(OIDC,无存储 NPM_TOKEN)发布:推送 v<版本> tag,CI 即带 Sigstore provenance 发布。 npm version patch && git push origin <branch> --tags 一次性 npm 侧配置与完整流程:见 docs/release/release.md。 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SiriLee/dsh-rewind
DeepSeek Harness 插件:一键就地回退对话到任意更早的用户消息。
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,359已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,514已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,289已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,675已汉化DSH
71.2
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,522已汉化DSH
71