自动保存文件改动快照,一键回滚到任意历史版本
27.5/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add DfsyJian/dsh-snapshot该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 80 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/8) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 13 条)
- 发起网络请求src/client/update-check.ts:41
const response = await fetch(LATEST_URL) - 删除本地文件src/rollback.ts:215
if (current !== null) await unlink(target.displayPath) - 写入本地文件src/snapshot-store.ts:87
await mkdir(this.dir(), { recursive: true }) - 写入本地文件src/snapshot-store.ts:88
await appendFile(this.file(), `${JSON.stringify(full)}\n`, 'utf8') - 删除本地文件递归src/snapshot-store.ts:110
await rm(this.dir(), { recursive: true, force: true }) - 写入本地文件src/snapshot-store.ts:128
await writeFile(this.file(), `${kept.join('\n')}\n`, 'utf8') - 读取本地文件src/snapshot-store.ts:141
const text = await readFile(this.file(), 'utf8') - 写入本地文件src/snapshot-store.ts:153
await writeFile(this.file(), `${lines.slice(-max).join('\n')}\n`, 'utf8') - 读取本地文件src/snapshot-store.ts:167
const entries = await readdir(this.root(), { withFileTypes: true }).catch(() => []) - 删除本地文件递归src/snapshot-store.ts:201
await rm(this.dirOf(sessionId), { recursive: true, force: true }) - 读取本地文件src/snapshot-store.ts:239
const text = await readFile(join(this.root(), sessionId, STORE_FILE), 'utf8') - 写入本地文件src/snapshot-store.ts:247
await writeFile(join(this.root(), sessionId, STORE_FILE), `${lines.join('\n')}\n`, 'utf8') - 读取本地文件src/snapshot-store.ts:254
await access(path)
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-commands@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-sidebar@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-commands@deepseek-ai/dsh-fs给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 自动保存文件快照
- 一键回滚历史版本
- 侧边栏时间线
DeepSeek Harness 插件:自动文件快照,带侧边栏时间线和设置卡片
README
由 DeepSeek 最新模型翻译生成自动快照、一键回滚的 DeepSeek Harness(DSH)Web 插件。
Agent 每次 write/edit 前自动保存目标文件内容,经 shell 执行删除(如 Remove-Item、rm)时也先保存被删文件内容,支持 /rollback 命令恢复到任意历史快照(类似 Trae 的 Checkpoint 能力)。
附带侧边栏 “快照时间线” 面板与 设置页配置卡片。
功能
每次 write/edit 前自动快照目标文件内容;agent 经 shell 执行删除(如 Remove-Item、rm)时,先快照被删文件的内容再放行。所有快照追加进该会话的 snapshots.jsonl。同一用户消息引发的所有快照自动归为一组:时间线以「对话」为单位显示一行,撤回一行即整体还原该对话产生的全部修改。
界面操作
- 快照时间线侧边栏底部「快照」按钮点击打开面板,列出当前会话的快照历史。
- 一行 = 一次对话:同一条用户消息引发的多次写入/编辑/删除合并为一行,显示该消息的预览与「创建/修改/删除」统计(如 创建 ×2 · 修改 ×1,只列出出现的类型;按文件数统计,同一文件多次写入只计一次);仅改动一个文件时附上文件路径。
- 点击某行即整体撤回该对话产生的全部修改(撤回前自动记录当前状态,支持再次撤回)。
展开完整文档(README 剩余 1 节)
自动快照、一键回滚的 DeepSeek Harness(DSH)Web 插件。 Agent 每次 write/edit 前自动保存目标文件内容,经 shell 执行删除(如 Remove-Item、rm)时也先保存被删文件内容,支持 /rollback 命令恢复到任意历史快照(类似 Trae 的 Checkpoint 能力)。 附带侧边栏 “快照时间线” 面板与 设置页配置卡片。 功能 每次 write/edit 前自动快照目标文件内容;agent 经 shell 执行删除(如 Remove-Item、rm)时,先快照被删文件的内容再放行。所有快照追加进该会话的 snapshots.jsonl。同一用户消息引发的所有快照自动归为一组:时间线以「对话」为单位显示一行,撤回一行即整体还原该对话产生的全部修改。 界面操作 - 快照时间线侧边栏底部「快照」按钮点击打开面板,列出当前会话的快照历史。 - 一行 = 一次对话:同一条用户消息引发的多次写入/编辑/删除合并为一行,显示该消息的预览与「创建/修改/删除」统计(如 创建 ×2 · 修改 ×1,只列出出现的类型;按文件数统计,同一文件多次写入只计一次);仅改动一个文件时附上文件路径。 - 点击某行即整体撤回该对话产生的全部修改(撤回前自动记录当前状态,支持再次撤回)。 - 撤回某一对话后,其后的历史默认一并折叠(由 collapseOnRollback 控制)。 - 悬浮在行上可查看该对话涉及每个文件的「创建/修改/删除」路径明细;悬浮在时间上可查看完整时间。 - 面板底部左下角为「检查更新」入口(探测 npm 最新版本),右下角显示插件版本号。 - 头部「清空」按钮可二次确认后删除全部快照。 - /rollback 选择面板在输入框直接输入 /rollback 即可弹出可搜索的选择面板(交互与 /model 一致),无需记忆子命令: - 顶部为「清空快照」命令项,二次确认后删除该会话全部快照。 - 下方每个快照一行「撤回至快照 #N」,副行显示时间与「创建/修改/删除」的文件路径明细;输入序号、文件名或操作类型可即时过滤。 - 选中任意撤回项后先弹出风险确认条,确认后才执行回滚。 - 配置卡片设置页「插件配置」中的 snapshot 卡片。布尔字段为二态开关,数字字段留空或点击「恢复默认」即可回退,改动即时生效。 命令操作 输入 /rollback 弹出选择面板;以下为完整的子命令语法: /rollback list # 列出快照历史(每次对话一行) /rollback --yes # 整体撤回指定对话产生的全部修改(撤回前先记录当前状态,可再撤回) /rollback --call --yes # 按工具调用撤回单个快照 /rollback clear --yes # 清空该会话全部快照 安装 插件通过 dsh plugin 命令安装进 profile(dsh web 对应 web profile),自动写入依赖与 bundle 列表,无需手动编辑: dsh plugin --profile web add dsh-snapshot 💡 没有全局 dsh 命令怎么办? 未安装全局 CLI 时,可直接使用 npx 执行: npx @deepseek-ai/dsh plugin --profile web add dsh-snapshot # 安装插件到 web profile npx @deepseek-ai/dsh web # 启动 dsh web 注意:dsh plugin 内部会调用 pnpm 安装依赖,请确保机器已安装 pnpm。 装完重启 dsh web 即可。 dsh plugin 会自动把 dsh-snapshot 写入 profile 的 dependencies 与 dsh.profile.bundles,并通过 cordis.patch.yml 将 snapshot 注入配置树。 本地开发时可构建源码目录,用 link: 依赖指向 profile 目录以替代 registry 版本(见开发)。 更新 dsh plugin add 对已存在的依赖不会自动升级,升级需在 profile 目录显式指定新版本: cd ~/.dsh/profiles/web pnpm add dsh-snapshot@ ⚠️ 注意:更新后需完全退出 dsh web 再重启,并在浏览器 Ctrl+Shift+R 硬刷新(清除浏览器 bundle 缓存,否则旧文案不会更新)。 用法 见上方 命令操作 与 界面操作。 配置(均可选,零配置可用) | 配置项 | 默认值 | 说明 | | enabled | true | 总开关,关闭后不再捕获新的写入/编辑/删除,已有快照保留(回滚仍可用) | | storeDir | $DSH_HOME/snapshots | 快照存储根目录,每会话一个子目录 | | maxRetain | 100 | 每会话最大保留条数,0 为不限 | | maxProjectRetain | 100 | 项目级总量控制:同一工作区(会话 cwd)所有会话共享该配额,超限按捕获时间最旧优先清理,0 为不限 | | pruneOrphans | true | 孤儿清理:某会话所属工作区目录已不存在时,自动删除该会话全部快照(不可回滚,仅占空间),false 为保留 | | collapseOnRollback | true | 撤回后折叠时间线:撤回某次对话会同时清除该对话及之后的所有记录(含回滚记录),列表只保留撤回点之前的历史;false 则保留后续快照与回滚记录 | 配置可通过以下两种方式之一进行。 方法一:设置页(配置表单) dsh 客户端设置页的「插件配置」会显示 snapshot 卡片,在表单内可直接修改上表各项。保存后经宿主 settings 服务写入 ~/.dsh/settings.yaml 的 snapshot: 段。 ℹ️ 表单不可用? 卡片是否可编辑取决于宿主的命名空间白名单(dsh-host-apiproxy 的 WEB_SETTINGS_NAMESPACES)。 目前 npm 发布版宿主暂未包含 snapshot 白名单,因此会显示“表单不可用”;本地 harness master 源码构建已包含该命名空间,可直接编辑。npm 版用户需等待新版宿主发布,期间请使用方法二。 方法二:修改配置文件 不经过设置页,直接编辑配置文件,以下两种位置任选其一: 位置 1: ~/.dsh/settings.yaml 的 snapshot: 段(与设置页写入同一位置) snapshot: storeDir: D:\xiangmu\test\1 collapseOnRollback: true 位置 2: profile 的 cordis.yml(如 web profile 对应 ~/.dsh/profiles/web/cordis.yml) plugins: snapshot: storeDir: D:\xiangmu\test\1 改完重启 dsh web 生效。 开发 pnpm install && pnpm typecheck && pnpm build pnpm build 会依次运行 tsc(服务端逐文件编译)与 tsdown(浏览器端打成单个 lib/client.js,由 loader 模块表加载)。 - 类型与构建完全自包含:所有 @deepseek-ai/ SDK 包(含 react)在 devDependencies 中显式声明并解析自 npm registry,tsconfig 不引用任何 harness 源码 checkout。 - 运行时依赖:@deepseek-ai/schemastery、@deepseek-ai/dsh-settings(与 @deepseek-ai/cordis)以 peer 形式声明,由 harness 宿主提供;其余 @deepseek-ai/ 均为 import type,编译后擦除。client bundle 仅 external react、@deepseek-ai/dsh-client-runtime/client(快照存储引擎)与 @deepseek-ai/dsh-client-ui-primitives(图标组件,运行时均由 loader 模块表提供),其余全部内联。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
DfsyJian/dsh-snapshot
自动保存文件改动快照,一键回滚到任意历史版本
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目