← 返回列表
✓ 可直接安装
⏪ dsh-checkpoint-rewind
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node ^22.19.0 || >=24.0.0);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/16 · 已提供中文文档
Claude Code /rewind 用于 DeepSeek Harness —— 在每次变更前进行 git 优先的工作区快照,在回合边界进行会话分叉,一次性 /rewind 恢复。一个 dsh-plugin 能力接缝。
综合分
43.2
GitHub 分
43.2
用户评分
—
★ Stars
17
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-checkpoint-rewindnpm 包 dsh-checkpoint-rewind 已校验归属本仓库,走 npm 安装最省事
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-checkpoint-rewind @ 0.6.11
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/17 16:25:07
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-attachment@deepseek-ai/dsh-brand@deepseek-ai/dsh-code-runtime@deepseek-ai/dsh-commands@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-projection用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
⏪ dsh-checkpoint-rewind
- 1024 商店渠道:先执行一次 npm i -g dsh1024,然后执行 dsh1024 plugin --profile web add dsh-checkpoint-rewind(计入 deepseek1024.com 安装排名)。
Gitee
统一的 DeepSeek Harness 检查点——会话 + 工作区 + 配置三态快照,一键回滚。
Claude Code Checkpoints 的等价实现,以能力接缝插件的形式构建:每次变更前捕获,用一条经批准的命令恢复三种状态中的任意一种。
官方仓库。 这是 dsh-checkpoint-rewind 唯一的官方仓库,由 PerryLink 维护。其他账号下的同名仓库均无关联。
License
DSH plugin
dsh-doctor
Node
CI
Version
npm version
npm downloads
English · 简体中文 · Español · Português · हिन्दी
兼容性
| 层面 | 状态 |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.5-rc.2(GitHub tag,2026-09-11 验证;npm 固定 0.1.5-rc.2,peer 为 >=0.1.2-rc.1 =0.1.5-alpha.1 =24.0.0 |
| 平台 | 全部(宿主命令 + 监听器;可选通过 settings 能力提供 Settings 页面时间线) |
| 模型 | 任意(无模型调用——快照和恢复均为确定性操作) |
你将获得
dsh-checkpoint-rewind 捕获一个三态统一检查点——工作区、会话游标和插件配置——并通过一条经批准的命令恢复其中一个或全部三个:
1. 三态记录——每个检查点存储工作区状态(git 树 SHA,或副本清单)、会话事件游标(seq + 回合边界)以及配置快照,并按来源打标签(manual / auto / guard / mutation)。
2. 四种捕获触发方式——在每个变更型工具之前(fs/write-intent、fs/edit-intent、tools/pre-execute)、按自动间隔(autoCheckpoint,默认每步)、手动(/checkpoint 和 checkpoint 工具),以及作为每次回退前的守卫。
3. git 优先的提供器——git stash create / commit-tree 生成未被引用的快照对象,绝不触碰你的工作树、索引或历史;恢复仅针对工作树且路径显式。非 git 目录(以及未出生 HEAD 的仓库)降级为带硬链接复用的增量 copy 提供器。
4. 一次性回滚——/rewind workspace|session|config|all 恢复所选状态;preview 是只读的影响报告,diff 比较两个检查点,clear 删除它们(本会话;clear --all 跨所有会话和工作区)。
5. 种子重放的会话回滚——会话回滚通过官方 sessions.create 种子 API 将事件重放到检查点边界,并写入新的子会话;原会话保留其完整历史。
6. 设置页面时间线——Plugins → Checkpoints 标签页渲染会话的检查点,并带有成对的行级差异。
为什么还需要另一个回退插件?
| 插件 | 卖点 | 恢复文件? | 回退会话? |
|---|---|---|---|
| dsh-checkpoint-rewind(本插件) | git 对象快照 + 三态回滚 + 一次性恢复 | ✅ 完整工作区状态 | ✅ 种子重放子会话 |
| Anionex/dsh-turn-rewind | 每次变更增量的持久化变更账本 | ✅ 通过重放逆向增量 | ✅ 其自有账本模型 |
| LingLambda/dsh-undo | 纯上下文回滚到上一个完成的步骤 | ❌ | ✅ 仅上下文 |
| Mongfayi/dsh-recall | 消息撤回(移除一个回合及其之后的所有内容) | ❌(明确不支持) | ✅ 回合移除 |
一句话概括区别:dsh-checkpoint-rewind 在每次变更前用无副作用的 git 原语捕获工作区状态,并把“回到第 N 步”变成一条经批准的命令——先守卫检查点,其次恢复文件,再次恢复配置,最后重放会话,每个阶段都有日志。 没有会漂移的增量记账,没有消息级编辑(那属于另一个插件),没有跨设备同步。
快速开始
1. 将插件包安装到你的 profile
dsh plugin --profile web add "github:PerryLink/dsh-checkpoint-rewind#main"
或从 npm 安装(已发布的版本)
dsh plugin --profile web add dsh-checkpoint-rewind
2. 重启并验证该行
dsh --profile web --dump-config | grep -A4 'id: checkpoint-rewind'
检查点通过 storageDomain 服务持久化。插件在没有它的情况下也能挂载,且从不阻塞配置文件启动——此时检查点/回退命令会返回一个结构化错误,指明需要添加的确切行。只需组合一次存储栈即可启用检查点:
- insert:
- id: checkpoint-rewind-storage
name: '@deepseek-ai/dsh-storage'
- id: checkpoint-rewind-storage-json
name: '@deepseek-ai/dsh-storage-json'
config:
root: !!js dshHomePath('checkpoint-rewind/storage')
- id: checkpoint-rewind-storage-domain
name: '@deepseek-ai/dsh-storage-domain'
config:
backend: json
该包是纯 ESM,无需构建步骤——index.mjs 和 lib/ 即为发布的产物。工作区变更现在会自动创建检查点;运行 /rewind 即可列出它们:
rewind: 3 checkpoints (newest last):
#a1b2c3d4 · (git) · turn 2 step 1 · 2026-08-14 12:00:01 (3 min ago) · trigger: bash · 4 files · 1.2 MiB
#b2c3d4e5 · (git) · turn 2 step 3 · 2026-08-14 12:00:41 · trigger: str_replace_editor · 2 files · 310 KiB
#c3d4e5f6 · (copy) · turn 3 step 1 · 2026-08-14 12:01:10 · trigger: write · 1 file · 90 KiB
run "/rewind " to restore files and fork the session from that checkpoint
可通过检查点的唯一 id 前缀、步骤编号或 latest 来定位它:
/rewind b2c3d4e5
/rewind step 2
/rewind latest
/rewind preview b2c3d4e5 # read-only: show which files would change, touch nothing
/rewind workspace b2c3d4e5 --files src/a.ts,src/b.ts # selective restore: only these files (approval-gated)
/rewind clear # confirmed deletion of this session's checkpoints (files untouched)
/rewind clear --all # confirmed deletion across ALL sessions and workspaces (files untouched)
preview 通过相同的定位方式解析,并打印影响,而不会请求确认或写入任何内容。--files 仅通过相同的需审批事务恢复指定的文件(未知路径会失败关闭;它与 workspaceRestore: reset-hard 不兼容,并在 selectiveRestore: false 时被禁用)。
安装与卸载
- git 渠道(最新的 main):dsh plugin --profile web add "github:PerryLink/dsh-checkpoint-rewind#main" —— 纯 ESM,无需 prepare 或 allowBuilds 步骤。
- npm 渠道(已发布的版本):dsh plugin --profile web add dsh-checkpoint-rewind。
- tarball 渠道:在本仓库中运行 npm pack,然后运行 dsh plugin --profile web add ./dsh-checkpoint-rewind-.tgz。
- 存储栈(检查点所必需,挂载时可选用):@deepseek-ai/dsh-storage + @deepseek-ai/dsh-storage-json(配置 root)+ @deepseek-ai/dsh-storage-domain(配置 backend: json)—— 参见快速开始;即使没有它们,插件仍可挂载,且每条命令都会说明修复方法。
- 卸载:dsh plugin --profile web remove dsh-checkpoint-rewind — 快照文件会保留,直到你删除 $DSH_HOME/dsh-checkpoint-rewind;git 对象会被垃圾回收。
配置
所有可调项都是 Schemastery Config 字段(可从 cordis.yml 更改)。没有任何硬编码。提供程序选项(gitBin、snapshotDir、excludeGlobs、verifyByHash)在使用时从实时配置中读取,因此 cordis.yml 的更改无需重启即可生效。
| 键 | 默认值 | 含义 |
|---|---|---|
| enabled | true | 总开关;false 会完全移除命令、监听器和提供程序 |
| provider | auto | 快照提供程序:auto(可用时用 git,否则用 copy)· git · copy |
| gitBin | git | Git 可执行文件路径 |
| snapshotDir | $DSH_HOME/dsh-checkpoint-rewind(当 $DSH_HOME 未设置时回退到 ~/.dsh/dsh-checkpoint-rewind) | copy 提供程序快照的根目录 |
| maxSnapshots | 50 | 每个会话保留的检查点数量(最先修剪最旧的) |
| maxSnapshotBytes | 536870912(512 MiB) | 全局增量字节软配额(每个活跃会话的最新快照始终保留) |
| pruneOnTurnEnd | true | 在一轮结束时运行配额修剪 |
| mutationTools | ['bash','write','edit','str_replace_editor','pwsh','terminal_send'] | 在 tools/pre-execute 时被视为会修改状态的工具 |
| excludeGlobs | ['node_modules','.git','.dsh','dist','build'] | copy 提供程序跳过的 glob 模式 |
| confirmVia | auto | 确认渠道:auto(优先 userQuestions)· userQuestions · approval |
| listLimit | 10 | 裸 /rewind 显示的检查点数量 |
| preRewindCheckpoint | warn | 恢复前的保护检查点:warn · require · off |
| verifyByHash | false | copy 提供程序的内容哈希比较和恢复验证 |
| autoCheckpoint.enabled | true | 在 step/start 时自动进行间隔快照 |
| autoCheckpoint.intervalMinutes | 0 | 间隔;0 = 每一步 |
| workspaceRestore | restore | 工作区回滚:restore(安全覆盖)· reset-hard(CC 风格,需选择启用) |
| diffRenderer | pairwise | 设置页面差异渲染器:pairwise(行级文本)· side-by-side(按文件双列) |
| selectiveRestore | true | 按文件选择性恢复(/rewind … --files)以及面板的按文件复选框 + 大小总计 |
| promptSection | true | 注入一段简短的角色声明提示部分 |
| checkpointTool | true | 注册 checkpoint 模型工具 |
- insert:
- id: checkpoint-rewind
name: dsh-checkpoint-rewind
config:
provider: auto
maxSnapshots: 50
maxSnapshotBytes: 536870912
pruneOnTurnEnd: true
confirmVia: auto
preRewindCheckpoint: warn
工具与界面
| 界面 | 类型 | 备注 |
|---|---|---|
| /rewind | 命令 | [workspace\|session\|config\|all] \|latest> · diff · preview · clear [--all] |
| /checkpoint | 命令 | [note \|list\|diff ] — 捕获手动检查点 |
| checkpoint | 工具 | 捕获带可选备注的手动检查点 |
| fs/write-intent · fs/edit-intent · tools/pre-execute | 监听器 | 变更前捕获(前置透传;绝不抢占策略槽位) |
| session/event | 监听器 | 轮次/步骤跟踪、自动间隔、边界回填、轮次结束清理 |
| checkpoints 投影 | 会话投影 | 从会话日志折叠出的时间线条带 |
| 设置页时间线 | 客户端 | Plugins → Checkpoints 标签页,支持成对(diffRenderer)差异和按文件选择性恢复(selectiveRestore) |
安全模型
- Git 历史不可触碰。 git 提供程序仅运行白名单中的无副作用原语——stash create、commit-tree、restore --worktree、ls-tree、diff-tree、ls-files、status、rev-parse、cat-file -e——由运行时断言强制执行,并且对象引用在传递给 git 之前会验证为十六进制 ID(被篡改的记录无法注入 git 选项)。默认不执行 reset --hard,不执行 clean,绝不修改索引/历史(见下文 workspaceRestore)。
- 覆盖式回滚,绝不删除。 恢复仅覆盖已捕获的文件,并且 git 提供程序恢复显式路径(git restore … -- . 会删除检查点之后被 git add 的文件)。检查点之后创建的文件(未跟踪或已暂存)会被报告并保留在原处。
- 不通过链接写入,不进行路径穿越。 复制提供程序在将检查点引用拼接到快照目录路径之前会对其进行验证,并拒绝通过已成为符号链接的目标(或祖先)进行恢复——因此恢复永远不会跟随链接离开工作区。
- 恢复需要批准。 覆盖用户文件始终通过确认接缝进行,并采用 ask 语义;缺失、抛出异常或回答否的应答者默认失败关闭。/rewind preview 是首先检查影响范围的只读方式。
- 回退是可逆的。 在恢复之前,一个保护检查点会捕获当前状态;恢复该保护检查点即可撤销回退。当无法捕获保护检查点时,preRewindCheckpoint: require 会中止回退。
- 固定顺序事务。 先保护,其次工作区,再次配置,最后会话重放;每个阶段都会记录日志;恢复失败时,文件、检查点和会话均保持原样。
- workspaceRestore: 'reset-hard' 等效于 CC 且需主动启用。 它运行 git reset --hard (分支头移动到快照提交;快照前的历史仍可通过 reflog 恢复;未跟踪文件不受影响)。默认关闭。
- 模型可见 ⟺ 已记录。 用户或模型看到的一切都从 command/run + command/done(以及一旦宿主知晓它们后的 checkpoint/ 事件)加上持久化的 checkpoints 域重建。
工作原理
capture ── fs/write-intent · fs/edit-intent · tools/pre-execute(前置,透传)
── step/start 自动间隔 ── /checkpoint · checkpoint 工具 ── pre-rewind 守卫
│
▼ ProviderRegistry.resolve(auto) → git: stash create / commit-tree
│ copy: 增量目录 + 硬链接
▼
checkpoints 存储域(SQLite 行 / JSON 文件) + checkpoint/ 事件(自适应门控)
/rewind ── 确认(userQuestions / approval,fail-closed)──▶ 守卫 checkpoint
├─ workspace: provider.restore(ref) (restore | reset-hard)
├─ config: settings 命名空间回写(持久化)
└─ session: sessions.create(seed replay) → 新的子会话(原会话不受影响)
完整决策记录、事件词汇表以及 provider 接缝契约:ARCHITECTURE.md。
会话事件(rc.2 说明)
该插件将 checkpoint/snapshot、checkpoint/bound、checkpoint/prune 和 checkpoint/rewind 声明为仅记录日志的 SessionEventMap 成员。Harness rc.2 没有插件事件注册接口,并且 Session.append 不会打上 ignorable 信封(其第三个参数是 surface intent,而非 options),因此追加未知类型会导致会话在重新加载时无法读取。因此,该插件通过一个自适应门控进行追加:一个运行时探测(在一个分离的、永不持久化的会话存储上)检测宿主的 append 是否会打上 ignorable 信封——在 rc.2 上门控保持关闭;在支持它的宿主上,checkpoint/ 事件会自动以 ignorable: true 追加。在此之前,权威审计链是 command/run + command/done(harness 已知)加上持久化的 checkpoints 存储域。
Web UI 锚点
该插件在命令结果中返回新的会话 id(session: ),Web shell 可以导航到那里。会话投影单元 checkpoints 已交付:只要 ctx.sessionProjections 存在,该插件就通过 ctx.inject 注册该单元(将 checkpoint/snapshot|bound|prune|rewind 折叠为一个整值列表)——在 rc.2 宿主上它保持为空列表,直到某个 harness 构建交付 checkpoint/ 词汇表或 ignorable 信封,然后无需任何插件改动即可填充。
FAQ
这会取代 git 吗? 不会——它在可用之处使用 git。在 git 仓库中,你可以获得字节级精确、去重的快照对象,而无需触碰历史;在任何其他目录中,copy provider 用普通文件做同样的事。常规提交仍然是你的长期历史。
为什么默认不用 git reset --hard? 因为销毁状态不是安全网的职责。该插件默认只创建未被引用的对象,并执行仅限工作树、路径明确的恢复,因此一次糟糕的回退永远不会丢失历史、索引或检查点之后创建的文件。reset-hard 可通过 workspaceRestore: 'reset-hard' 使用,供明确想要与 CC 行为一致的用户使用。
检查点可以恢复多久? git-provider 快照上不持有任何 ref。按设计,它们是不被引用的 stash create/commit-tree 对象,而 discard 只删除记录,将对象本身留给 git gc。有两个相互独立的因素限制了检查点实际可恢复的时长:插件自身的配额修剪(maxSnapshots,每个会话默认保留 50 个;maxSnapshotBytes,默认 512 MiB 的全局软配额,在捕获时通过 pruneAll() 强制执行,并在回合结束时清扫),以及宿主仓库的 git gc。在 git 的默认设置下,未被引用的对象会一直保留,直到自动 gc 运行,而且即便那时,也只有早于 gc.pruneExpire(默认 2 周)的对象会被修剪。手动执行 git gc --prune=now、激进的 repack、filter-repo 或全新克隆都可能立即丢弃它们。现在会预先检测被修剪的对象:git provider 在恢复前探测快照对象(git cat-file -e),当对象缺失时会明确报错,而不是静默地什么都不恢复;并且 doctor 遍历会检查每条检查点记录以探测对象是否存在,并为无法恢复的记录打上标记(列表中显示 [UNRESTORABLE: object missing])。doctor 遍历已实现并经过测试,但尚未接入恢复路径(恢复尚未参考 unrestorable 标记;跟踪于 discussion #13)。
我可以回退到回合中间的某一步吗? 文件恢复是精确到步骤的(/rewind step = 最接近且 ≤ N 的快照)。然而,会话重放遵循 harness 的重放粒度:子会话会被播种到检查点的回合边界。
如果没有人能回答确认会怎样? 不会触碰任何东西——插件会故障关闭(unavailable/rejected),保留检查点,并返回解释性错误。在 rc.2 上使用 confirmVia: approval 时,消息会提示挂载 userQuestions,因为 approval 需要一个打开的回合,而命令在回合之间运行。
我可以撤销一次回退吗? 可以——每次批准的回退都会先捕获回退前状态的保护检查点;结果会打印 rewind guard: ,而 /rewind 会恢复该状态。
如何指定检查点? 唯一 id 前缀(列表中的 8 字符短 id 即可)、/rewind step 、/rewind latest、/rewind clear 删除此会话的检查点,以及 /rewind clear --all 删除所有会话和工作区中的检查点(不触碰文件)。/rewind preview 使用相同的指定方式,在不更改任何内容的情况下显示影响。
preview 做什么——又不做什么? 它会解析检查点,然后运行一次只读比较:哪些文件会被覆盖(或重新创建),哪些已经匹配,以及哪些在检查点之后创建的文件会被保留在原处。它从不提示、从不写入、从不分叉,也不记录任何 checkpoint/rewind 事件——审批门只在真正的 /rewind 上运行。
演示
一次真实组装的无头集成运行(npm run test:integration)驱动完整流程:智能体跨两个回合修改文件,然后 /rewind preview 以只读方式检查影响(无确认门、无写入),而 /rewind 恢复文件并将会话重放到一个新的子会话中。该运行会断言文件内容、重放的子上下文、守卫检查点,以及检查点之后创建的文件得以保留——对 copy 和 git 两种提供方流程均如此(git 流程还会断言 HEAD 和 reflog 未被改动)。驱动程序位于 test/integration/rewind-headless.mjs。
权限与数据
- 权限:工作坊清单声明了 workspace:read、workspace:write、git:read、git:write、snapshot-storage:write、session-log:read、settings:write 和 network:none。
- 数据:检查点记录存放在 checkpoints 存储域中(SQLite 行或 JSON 文件);copy 快照存放在 snapshotDir 下。完全本地——无网络、无凭据。该域以双版本方式打开:0.4.x 时代的介质(域 v1)以兼容模式打开,该模式保持旧记录可读,并以 v2 形态存储新捕获,因此升级插件绝不会使现有介质成为孤儿。
- 会话日志:checkpoint/ 事件通过自适应门追加;权威审计链是 command/run + command/done 加上持久域。
安全边界
- Git 历史不可触碰。 白名单中的无副作用原语;reset --hard 仅在可选的 workspaceRestore: 'reset-hard' 模式背后。绝不使用 git clean。
- 覆盖式回滚,绝不删除。 恢复仅覆盖已捕获的文件;检查点之后创建的文件会被报告并保留在原处。
- 不通过链接写入,无路径遍历。 Copy ref 被验证为快照 id;恢复拒绝跟随符号链接离开工作区。
- 恢复需要审批。 缺失或拒绝的应答者会以失败关闭。
- 回退是可逆的。 首先捕获回退前状态的守卫检查点。
已知限制
- 在 rc.2 上,checkpoint/ 会话事件被自适应门抑制;审计链依靠 command/run + command/done 加上存储域,直到宿主提供词汇表或 ignorable 信封。
- confirmVia: approval 需要一个打开的回合,而命令在回合之间运行——在 rc.2 上挂载 userQuestions(或设置 confirmVia: userQuestions)。
- 会话回滚会创建一个从检查点边界播种的新的子会话;它绝不会重写或截断原始会话。
- workspaceRestore: 'reset-hard' 会将分支头移动到快照提交;它默认关闭。
- 在任何已关闭轮次之前捕获的检查点没有重放边界——此时会话回滚会创建一个具有空上下文的新的子会话。
故障排除
| 症状 | 原因 / 修复 |
|---|---|
| /rewind 提示 rewind cancelled: no confirmation answerer | 未挂载 userQuestions/approval 通道——插件会失败关闭。请在 Web UI 中运行(或挂载一个 question provider);confirmVia 选择通道。 |
| /rewind 提示 approval requires an open turn … | 命令在轮次之间运行,而审批需要一个轮次——请挂载 userQuestions 或设置 confirmVia: userQuestions。 |
| rewind: checkpoint registry unavailable | checkpoints 存储域无法打开。要么 storageDomain 服务未被组合(从快速开始中添加存储栈行:@deepseek-ai/dsh-storage + @deepseek-ai/dsh-storage-json,配置 root,以及 @deepseek-ai/dsh-storage-domain,配置 backend: json),要么后端报错;请检查 harness 日志。 |
| 某个检查点列为 fork: pending (turn not closed) | 其轮次尚无 turn/end;文件仍可恢复,但会话重放会等待该轮次关闭。 |
| files restored … but the session was NOT replayed | 事务的会话阶段失败(没有已关闭的边界,或重放被拒绝)。文件保持已恢复状态;使用打印出的 rewind guard: 来撤销。 |
| rewind: aborted — the pre-rewind guard checkpoint could not be captured | preRewindCheckpoint: require 因守卫捕获失败而拒绝了回滚;请修复存储(或设置 warn/off)。 |
| 即使目录是一个仓库,某个检查点仍列为 (copy) | 未出生的 HEAD(没有初始提交):git 快照原语需要 HEAD,因此插件会降级为 copy,直到第一次提交。 |
| 无头运行中出现 MISSING_CREDENTIAL | 与本插件无关:模型提供方未配置 DEEPSEEK_API_KEY。 |
| 快照存储不断增长 | 修剪会在每次快照后以及 turn/end 时运行(pruneOnTurnEnd);请降低 maxSnapshots / maxSnapshotBytes,运行 /rewind clear,或在卸载后删除 $DSH_HOME/dsh-checkpoint-rewind。 |
开发
npm install # peer deps: @deepseek-ai/dsh-session@0.1.2-rc.1, schemastery, zod
npm test # node --test test/*/.test.mjs (provider suites incl.)
npm run test:integration # assembled-headless verification (test/integration/)
无构建步骤:纯 ESM——index.mjs/lib/ 即为发布的产物。
主题
deepseek-harness、dsh、dsh-plugin、rewind、checkpoint、snapshot、session-replay、session-fork、config-restore、workspace-safety、undo、cordis-plugin
贡献者
- @PerryLink — 创建者与维护者:三态检查点模型、git/复制提供者接缝、三阶段回退事务、设置页面时间线、文档、CI/CD 与发布。
- @tmpdot(rmUnlucky)— v1-medium 双版本兼容性(#8)、惰性 storageDomain 解析(#9)、检查点去重回复提示(#10),以及 $DSH_HOME 未设置时快照目录的 bug 报告(#4)。
- @shipinliang — 检查点面板接口契约报告:limit 参数上缺失的 acceptsUndefined(#5)以及 #deps 私有字段代理失败(#6)。
- @hwz1456 — Web 配置文件检查点捕获报告(#3)。
- @Andiii208 — plugin_check 发布规范报告(#2)。
- @alexchenzl(Ashu)— DSH 目录收录邀请(#7)。
PerryLink DSH 插件家族
本项目是由 PerryLink 维护的 40 个 DeepSeek Harness 插件之一。如果这个插件对你有帮助,其他的很可能也会:
| 插件 | 一句话简介 |
|---|---|
| dsh-auto-review | 审批链上的第二模型自动审查,默认故障关闭 | |
| dsh-background-agents | 持久化后台子代理,带 Web UI 侧边栏、消息传递与中断 | |
| dsh-budget | DeepSeek Harness 的成本治理:预算、碳排与延迟集于一个面板。 | |
| dsh-claude-move | 将 Claude Code 会话、记忆、技能与 CLAUDE.md 迁移到 DSH | |
| dsh-click | DeepSeek Harness 的跨平台原生桌面控制——Windows 优先。 | |
| dsh-composer-history | Web 输入框的终端风格输入历史:方向键、Ctrl+R 搜索 | |
| dsh-data-quality | 数据集质量检查与引用交叉核对(此处消费的可选数值桥接) | |
| dsh-defend | DeepSeek Harness 的提示注入、越狱与密钥泄露防御。 | |
| dsh-doublecheck | 工程纪律守卫:需求拷问、测试门禁、对抗性审查 | |
| dsh-draw | DeepSeek Harness 的统一静态图像生成路由。 | |
| dsh-fast | DeepSeek Harness 的只读性能诊断。 | |
| dsh-fund-research | 中国公募基金的确定性研究报告 | |
| dsh-github | 面向 DSH 的 GitHub PR/issue 集成,所有写入操作均需审批 | |
| dsh-industry-research | 行业研究编排,通过本插件的 ctx.researchReport.assemble 封存其交付物 | |
| dsh-library | 面向 DeepSeek Harness 的本地文档知识库。 | |
| dsh-local-ai | 面向 DeepSeek Harness 的本地模型(Ollama)集成。 | |
| dsh-lsp-actions | 基于语言服务器的 LSP 诊断、格式化、补全、代码操作与重命名 | |
| dsh-mask | PII 脱敏中间件:在模型边界匿名化,在展示层还原 | |
| dsh-mcp-panel | 只读 MCP 运行时面板:/mcp 命令 + 设置标签页,展示状态、工具与错误 | |
| dsh-memento | 需审批的跨会话记忆:ctx.memory 接缝 + SQLite + memory 工具 | |
| dsh-observe | 面向 DeepSeek Harness 的 OpenTelemetry 与 Langfuse 可观测性导出器。 | |
| dsh-output-styles | 等效于 Claude Code outputStyles 的运行时样式切换 | |
| dsh-reach | 多渠道审批/提问桥接:微信/Telegram/飞书,会话控制台 | |
| dsh-permission-rules | Claude Code 风格的声明式 allow/deny/ask 权限规则,带审计 | |
| dsh-personal-directive | 带顶栏开关的个人指令注入器(框架版) | |
| dsh-plugin-guide | 以按需智能体技能形式提供的插件开发知识库 | |
| dsh-plugin-doctor | 面向 DSH 插件的零依赖静态 + 沙箱冒烟检测器 | |
| dsh-research-report | 可验证的研究报告引擎:内容寻址的证据账本与封存版本 | |
| dsh-score | 面向 DeepSeek Harness 插件的多维度质量评分。 | |
| dsh-session-pin | 在 Web 侧边栏中固定会话,并保持持久排序 | |
| dsh-session-sync | 面向 DeepSeek Harness 的跨设备会话同步——你的会话存储的专用 git 镜像。 | |
| dsh-skill-pack-security | 安全审计技能包:密钥扫描、依赖与供应链审查 | |
| dsh-talk | DeepSeek Harness 的语音优先会话循环:与它对话,听它回答。 | |
| dsh-test-drive | 面向 DeepSeek Harness 插件的隔离式安装与冒烟测试试驾。 | |
| dsh-ticktick | TickTick/滴答清单任务桥接:会话头部面板 + 11 个工具 |
| dsh-translate | 面向 DeepSeek Harness 的厂商参数转换与确定性 JSON 修复。 | |
| dsh-wechat | 微信 ↔ DSH 桥接(腾讯 iLink 机器人):文本/图片/文件/语音,在聊天中审批 |
| dsh-autotier | 自动的强/廉价模型层级路由,具备确定性风险防护和 /tier 命令 | |
| dsh-catalog | PerryLink 系列的 DSH Desktop Market 标准目录源 | |
| dsh-cert-mcp | 只读 MCP 服务器,公开认证注册表:等级、快照和五维证据 | |
| dsh-kit | 一条命令即可安装核心系列组件的入门包 | |
| dsh-plugin-certification | 社区认证注册表,具备可复现校验的等级和徽章 | |
| dsh-plugin-kit | 面向 PerryLink DSH 插件的共享零运行时依赖工具包 | |
| dsh-plugin-portal | 零依赖静态门户,将整个插件系列渲染为一个页面 | |
| dsh-plugin-upgrade-015 | 合并的 0.1.3-alpha.1 → 0.1.5-rc.1 升级通道卡片,外加零依赖接缝扫描器 | |
| dsh-team-rooms | 跨会话团队房间:共享消息总线、任务板和时线 | |
从 DSH Desktop Market 安装
所有 PerryLink 插件均可在内置的 DSH Desktop Market 中浏览:Market → Sources → add source → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选择它。安装仍需经过 Market 的 npm 身份验证和你的确认。
许可证
Apache License 2.0 © 2026 dsh-checkpoint-rewind 贡献者扫码进群