打包插件与设置,换机预览后批量还原
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add huihui0927/dsh-config-sync该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 28 处,展示前 25 条)
- 读取本地文件lib/index.js:329
names = await readdir(dir) - 读取本地文件lib/index.js:336
const info = await stat(join(dir, n)) - 读取本地文件bin/dsh-config-sync.mjs:215
names = await readdir(dir) - 读取本地文件bin/dsh-config-sync.mjs:223
const info = await stat(join(dir, n)) - 读取本地文件lib/archive.js:129
const data = await readFile(file.absolute) - 读取本地文件lib/archive.js:143
const buffer = data ?? await readFile(absolute) - 写入本地文件lib/archive.js:190
await mkdir(dirname(output), { recursive: true }) - 读取本地文件lib/archive.js:192
const archiveBytes = (await readFile(output)).length - 写入本地文件lib/archive.js:438
await mkdir(restorePoint, { recursive: true }) - 读取本地文件lib/archive.js:439
for (const entry of await readdir(profileDir, { withFileTypes: true })) { - 写入本地文件lib/archive.js:442
await copyFile(join(profileDir, entry.name), join(restorePoint, entry.name)) - 写入本地文件lib/archive.js:445
await writeFile( - 写入本地文件lib/archive.js:462
await mkdir(dirname(record.target), { recursive: true }) - 写入本地文件lib/archive.js:463
await writeFile(record.target, data) - 读取本地文件lib/archive.js:575
for (const entry of await readdir(dshHome, { withFileTypes: true }).catch(() => [])) { - 读取本地文件lib/inventory.js:168
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件lib/inventory.js:208
info = await stat(absolute) - 读取本地文件lib/inventory.js:246
raw = await readFile(file, 'utf8') - 读取本地文件lib/inventory.js:290
parsed = JSON.parse(await readFile(join(pkgDir, 'package.json'), 'utf8')) - 读取本地文件lib/inventory.js:350
entries = await readdir(profileDir, { withFileTypes: true }) - 读取本地文件lib/inventory.js:387
entries = await readdir(dshHome, { withFileTypes: true }) - 写入本地文件lib/zip.js:119
const stream = createWriteStream(outPath) - 读取本地文件lib/zip.js:142
const info = await stat(entry.path) - 读取本地文件lib/zip.js:152
data = await readFile(entry.path) - 读取本地文件lib/zip.js:275
const buffer = await readFile(zipPath)
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-config-sync
把本机 DSH(DeepSeek Harness)的全部插件与设置备份成一个可移植的 .zip,再批量同步到下一台电脑。
📖 日常操作请看 使用说明.md——按「照着做」的口径编写,含换电脑完整流程、回退步骤和常见问题。本文档偏设计与实现。
它解决什么问题
换电脑时,DSH 的环境散落在很多地方:profile 里装了哪些插件、每个插件的版本、cordis.patch.yml 里的配置覆盖、插件自己写的数据、全局工作区设置……手工搬极易漏项,而漏掉一处就可能让新电脑上的 DSH 起不来。
这个插件把这些收拢成一个文件,并保证还原过程可预览、可回退。
核心设计取舍
| 决策 | 原因 |
| 不备份 node_modules | 插件本体有几百 MB,且完全可由 package.json + pnpm-lock.yaml 复现。归档只记录版本,还原时重装,新电脑得到的是干净正确的依赖树。 |
| 不备份运行时/Electron/日志/缓存 | 这些属于机器而非用户,是可重建的。把 Windows 运行时拷到新装环境正是「还原把好环境弄坏」的典型原因。 |
| 凭据默认不含,且永不明文 | .credentials.yaml 和 workbuddy-vault/ 里是 API key 和登录 token。
展开完整文档(README 剩余 1 节)
dsh-config-sync 把本机 DSH(DeepSeek Harness)的全部插件与设置备份成一个可移植的 .zip,再批量同步到下一台电脑。 📖 日常操作请看 使用说明.md——按「照着做」的口径编写,含换电脑完整流程、回退步骤和常见问题。本文档偏设计与实现。 它解决什么问题 换电脑时,DSH 的环境散落在很多地方:profile 里装了哪些插件、每个插件的版本、cordis.patch.yml 里的配置覆盖、插件自己写的数据、全局工作区设置……手工搬极易漏项,而漏掉一处就可能让新电脑上的 DSH 起不来。 这个插件把这些收拢成一个文件,并保证还原过程可预览、可回退。 核心设计取舍 | 决策 | 原因 | | 不备份 node_modules | 插件本体有几百 MB,且完全可由 package.json + pnpm-lock.yaml 复现。归档只记录版本,还原时重装,新电脑得到的是干净正确的依赖树。 | | 不备份运行时/Electron/日志/缓存 | 这些属于机器而非用户,是可重建的。把 Windows 运行时拷到新装环境正是「还原把好环境弄坏」的典型原因。 | | 凭据默认不含,且永不明文 | .credentials.yaml 和 workbuddy-vault/ 里是 API key 和登录 token。归档是会被拷到 U 盘和网盘的文件,默认排除;显式要求时用 AES-256-GCM 加密成独立成员。 | | 还原默认只预览 | 写入前必须先看到「会改哪些文件、会增删哪些插件」。加 apply: true 才真正执行。 | | 应用前自动做还原点 | 每次写入前把当前 profile 配置快照到带时间戳的目录,误操作可退回。 | | 目标有额外插件时拒绝执行 | 避免「同步一次,把本机独有的插件配置弄丢」。需显式 overwritePlugins: true。 | 安装 插件目录:D:\Dsh\Sync\dsh-config-sync D:\Dsh\resources\runtime\cli\bin\dsh.cmd plugin --profile desktop add D:\Dsh\Sync\dsh-config-sync 装完需要重启 DSH 才会注册工具。 该命令要写 C:\Users\ThinkPad\.dsh\profiles\desktop(在工作区之外),在受限沙箱下会报 EPERM,需要一次完全权限。 用法 在 DSH 会话里(推荐) 装好后直接对 agent 说,例如: - 「看看我这台电脑现在有哪些插件和设置」→ dsh_config_status - 「把插件和设置备份出来」→ backup_dsh_config - 「把这个备份还原到新电脑」→ restore_dsh_config 五个工具: | 工具 | 作用 | | dsh_config_status | 看现状:装了哪些插件、各类设置文件数量、备份会包含什么 | | backup_dsh_config | 生成备份归档(支持 dryRun 预览) | | restore_dsh_config | 预览/应用还原 | | verify_dsh_config | 校验归档完整性(逐个成员核对 sha256) | | list_dsh_backups | 列出已有归档 | 命令行(DSH 起不来时用这个) $cli = "D:\Dsh\resources\runtime\cli\bin\dsh.cmd" # 仅用于装插件 node D:\Dsh\Sync\dsh-config-sync\bin\dsh-config-sync.mjs <命令> 看现状 node bin\dsh-config-sync.mjs status 备份(默认不含凭据和会话) node bin\dsh-config-sync.mjs backup --output D:\backup\dsh.zip 备份并加密包含登录凭据 node bin\dsh-config-sync.mjs backup --output D:\backup\dsh.zip --categories profile-config,home-config,plugin-state,credentials --password 你的口令 校验 node bin\dsh-config-sync.mjs verify --input D:\backup\dsh.zip 还原:默认只预览 node bin\dsh-config-sync.mjs restore --input D:\backup\dsh.zip --profile desktop 确认后真正写入 node bin\dsh-config-sync.mjs restore --input D:\backup\dsh.zip --profile desktop --apply 换电脑的完整流程 旧电脑 node bin\dsh-config-sync.mjs backup --output D:\dsh-backup.zip 新电脑(先装好 DSH 本体) 1. 校验归档,确认传输没损坏 node bin\dsh-config-sync.mjs verify --input D:\dsh-backup.zip 2. 预览:看清楚会写入什么、插件增删情况 node bin\dsh-config-sync.mjs restore --input D:\dsh-backup.zip --profile desktop 3. 应用 node bin\dsh-config-sync.mjs restore --input D:\dsh-backup.zip --profile desktop --apply 4. 安装插件(归档不含 node_modules,第 3 步会打印完整命令) D:\Dsh\resources\runtime\cli\bin\dsh.cmd plugin --profile desktop add dsh-pet@0.3.7 D:\Dsh\resources\runtime\cli\bin\dsh.cmd plugin --profile desktop add dsh-mnemon@0.5.29 …按第 3 步输出的清单逐个装 5. 重启 DSH。 备份类别 | 类别 | 默认 | 内容 | | profile-config | ✅ | package.json、pnpm-lock.yaml、cordis.yml、cordis.patch.yml 等 | | home-config | ✅ | storages/workspace.json、telemetry/ 等全局设置 | | plugin-state | ✅ | 各插件在 DSH_HOME 下的状态目录 | | credentials | ❌ | 登录凭据,需 password,AES-256-GCM 加密 | | sessions | ❌ | 会话记录,体积大 | 安全说明 - 明文凭据从不进入归档。代码里有一条独立防线:任何成员名命中凭据模式都会直接报错中止,而不是默默写进去。 - workbuddy-vault/ 存的是明文 token,它在 plugin-state 里会被自动排除并给出提示——这是实测发现的真实风险点。 - 加密用 scrypt(N=2¹⁵)派生密钥 + AES-256-GCM,口令错误或归档被篡改都会解密失败,不会还原出似是而非的内容。 - 忘记口令 = 凭据无法恢复,需要在新电脑重新登录。 测试 powershell node --test test/ # 或直接:node test/sync.test.mjs 覆盖 ZIP 往返与损坏检测、加密往返与错误口令、清单排除规则、凭据隔离、预览不落盘、还原点、篡改检测和 CLI。 在受限沙箱里,涉及子进程的 4 个 CLI 用例会因 spawn EPERM 跳过——那是沙箱禁止管道 stdio,不是插件缺陷。 目录结构 dsh-config-sync/ ├── bin/dsh-config-sync.mjs # 独立 CLI(DSH 起不来时的救援通道) ├── lib/ │ ├── index.js # 插件入口,注册 5 个工具 │ ├── inventory.js # 决定备份什么(核心策略所在) │ ├── archive.js # 备份 / 预览 / 还原 / 校验 │ ├── crypto.js # 口令加密 │ └── zip.js # 零依赖 ZIP 读写 ├── test/sync.test.mjs └── cordis.patch.yml 零运行时依赖:ZIP 和加密都用 Node 内置模块实现,避免在"正在修环境"的机器上还要先装依赖。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
huihui0927/dsh-config-sync
打包插件与设置,换机预览后批量还原
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9