Community编程与开发github.com

GGGengXXX/make-dsh-better

在新机器上从版本锁定的清单中恢复用户的 DeepSeek Harness 插件集,使用桌面感知 CLI、可选配置文件与版本锁定的本地补丁。当用户表示在新机器上、想要恢复 DSH 插件或希望在其他地方复现当前 DSH 设置时使用。

make-dsh-better 是什么?

此技能旨在简化 DeepSeek Harness (DSH) 插件集的跨机器迁移过程。它通过一个版本锁定的清单文件 `plugins.json` 作为唯一真相源,确保在新机器上安装的插件版本和关键行为与源机器完全一致。技能支持桌面应用专用的 CLI 包装器,能够自动检测并使用正确的 DSH CLI 界面(如 Desktop 应用的 Electron 内嵌 CLI)。工作流程包括:读取清单、检测 CLI 和 DSH 版本、展示并确认安装计划、执行安装、可选应用本地补丁(如键盘快捷键和 Markdown 输入行为),最后引导用户重启或硬刷新。该技能还内置了安全的“捕获”功能,用于在源机器上更新清单,以及回滚和错误处理机制。主要平台为 DSH Desktop,但也通过 `--profile` 支持 web 和 tui 等其他配置文件。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GGGengXXX/make-dsh-better/tree/HEAD/skills/dsh-plugin-bootstrap

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

DSH 插件引导

在新机器上恢复一个已知良好的 DeepSeek Harness (DSH) 插件集。

真相源是 plugins.json:每个插件都固定到精确版本,并附有说明和可选的安装后配置。脚本无需用户记住包名即可复现设置。

用户故事

我换了一台新机器。我想让 DSH 安装我在另一台机器上使用的所有插件,版本相同,关键行为也相同。

将本技能传输到新机器

规范的公开副本位于:

https://github.com/GGGengXXX/make-dsh-better

在新机器上:

git clone https://github.com/GGGengXXX/make-dsh-better.git
mkdir -p ~/.agents/skills
cp -R make-dsh-better/skills/dsh-plugin-bootstrap ~/.agents/skills/

如果你已经克隆了仓库,只需复制技能目录。然后启动一个新的 DSH 会话。DSH 在 ~/.agents/skills/<名称>/SKILL.md 下发现技能;该技能显示为 dsh-plugin-bootstrap。如果该技能已存在于该目录中,则跳过复制。

工作副本是编辑的真相源;更改后重新复制。

本技能的功能

  1. 读取 plugins.json(版本锁定的插件列表)。
  2. 检测正确的 DSH CLI。desktop 配置文件由桌面应用保留,因此技能优先使用应用捆绑的 CLI 包装器,而非 PATH 上的通用 dsh。
  3. 检查 DSH 版本与清单是否匹配,并在不匹配时发出警告/阻止。
  4. 显示安装/更新/跳过计划,请求确认,然后使用 dsh plugin --profile <配置文件> add <名称>@<版本> 安装每个插件。
  5. 可选地应用配置文件级别的 dsh-browser-cdp 配置(Chrome 路径 + --headless)到 cordis.patch.yml。
  6. 验证每个插件既是依赖项又是选定的包。
  7. 可选地应用两个版本锁定的本地补丁:

它不复制密钥、API 密钥、会话、工作区文件或整个 ~/.dsh 目录。

用户调用此技能时的工作流程

从技能目录(包含此 SKILL.md 的目录)开始工作。

1. 在修改任何内容之前进行检查

node scripts/install.mjs --profile desktop --dry-run

向用户展示计划。如果计划需要安装或更新任何内容,请在未使用 --dry-run 运行之前请求明确确认。

如果用户的目标不是桌面应用,请传递实际的配置文件(例如 --profile web 或 --profile tui)。对于非桌面配置文件,PATH 上的普通 dsh 就足够了;脚本会自动处理。

2. 安装

node scripts/install.mjs --profile desktop --yes

有用的标志:

标志含义
--dry-run打印计划;不更改任何内容
--yes / -y非交互式确认
--jsonstdout 输出机器可读摘要(日志转到 stderr)
--no-config不修改 cordis.patch.yml
--skip <pkg>跳过一个插件(可重复)
--strict要求精确的 DSH 版本匹配
--allow-dsh-mismatch即使 major.minor 不同也继续
--dsh-cli <path>显式指定 CLI 路径
--manifest <path>使用另一个清单

该脚本是幂等的:已安装在固定版本并作为包选中的插件将被跳过。

3. 应用可选的本地补丁

仅在用户希望从源机器获得精确的关键行为时:

node scripts/apply-patches.mjs --profile desktop --dry-run
node scripts/apply-patches.mjs --profile desktop --yes

这会修改 node_modules/ 下已安装的第三方文件。如果版本不匹配,除非使用 --force,否则会拒绝操作,并保留 .bak-<时间戳> 副本。告知用户这是一个本地补丁,未来的插件更新可能会覆盖它;更新后,重新运行补丁脚本或在该插件的设置中设置行为。

--only keyboard 和 --only markdown 用于限制补丁范围。

4. 重启 / 刷新

安装插件后,告知用户重启 DeepSeek Harness(或在 macOS 上使用 Cmd+Shift+R 硬刷新 Web UI)。客户端包按页面加载缓存;普通刷新可能不够。

5. 验证

安装程序会打印一个验证表。如果某个插件显示 FAIL,请检查:

  • 配置文件的 package.json 依赖项和 dsh.profile.bundles;
  • 该包的版本是否与正在运行的 DSH 版本兼容;
  • 插件管理器日志位于 ~/.dsh/profiles/<配置文件>/.plugin-manager/logs/ 下。

更新清单(在源机器上捕获)

当用户在其主机器上安装/移除插件时,刷新清单:

node scripts/capture.mjs --profile desktop --dry-run   # 预览
node scripts/capture.mjs --profile desktop             # 写入 plugins.json

这会读取配置文件的选定包,记录每个包的已安装版本,并保留现有的 note 字段。之后提交/推送技能目录(或将其复制到新机器)。

桌面配置文件规则

通用 DSH CLI 会故意拒绝 --profile desktop:

error: profile "desktop" is managed exclusively by the Electron application

改用桌面应用的 CLI 包装器:

/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh

install.mjs 会在 macOS 上自动找到它。在其他平台上,或者如果应用在其他位置,请设置 DSH_CLI 或传递 --dsh-cli。

清单格式

plugins.json:

{
  "schemaVersion": 1,
  "targetProfile": "desktop",
  "dshVersion": "0.2.1-rc.2",
  "plugins": [
    { "name": "@scope/plugin", "version": "1.2.3", "note": "why it is here" }
  ],
  "config": {
    "dsh-browser-cdp": {
      "chromePath": "auto",
      "runtimeArgs": "--headless"
    }
  },
  "localPatches": [
    { "package": "dsh-keyboard-shortcut", "version": "0.2.0", "description": "..." }
  ]
}
  • dshVersion 是捕获清单时的版本。相同的 major.minor 允许带有警告;不同的 major.minor 需要 --allow-dsh-mismatch。
  • targetProfile 只是默认值;--profile 会覆盖它。
  • config.dsh-browser-cdp.chromePath: "auto" 使安装程序探测常见的 Chrome/Chromium/Edge/Brave 位置。如果探测失败,请设置显式路径。
  • localPatches 仅供人类参考;安装程序不会自动应用它。请显式运行 apply-patches.mjs。

包含的插件集(捕获于 2026-10-24)

插件版本作用
@flyer103/dsh-side-chat0.6.0原生右侧栏侧边对话
dsh-browser-cdp1.6.0通过 Chrome/CDP 的代理浏览器;无头监视面板
dsh-keyboard-shortcut0.2.0Enter=换行,Cmd/Ctrl+Enter=发送
dsh-markdown-bubble0.1.5Markdown 渲染的用户消息
dsh-markdown-input0.2.0-alpha.20实时 Markdown 编辑器(alpha)
dsh-better-sidebar0.28.0文件树 + 可编辑 CodeMirror + Git/任务/终端(重量级)

注意:

  • dsh-markdown-input 是 alpha 版本;如果其编辑器接管行为异常,请在设置 → 插件中禁用它。
  • dsh-better-sidebar 很重且包含自己的侧边聊天;它可以与 @flyer103/dsh-side-chat 共存,但用户会看到两个侧边聊天入口点。决定保留哪一个。
  • 内置的文件和文档预览是 DSH 本身的一部分;它们不在此清单中,无需安装。

安全

  • 第三方 DSH 插件在进程内运行,可以使用用户的权限执行。仅从用户信任的清单安装。
  • 精确版本已固定。不要静默地将其替换为 latest。
  • 本地补丁修改 node_modules;它们是可选的、版本锁定的、有备份且可逆的(恢复 .bak 文件或重新安装插件)。
  • 作为“安装插件”的一部分,不要复制 ~/.dsh/.credentials.yaml、会话日志或工作区文件。

故障排除

症状修复
profile "desktop" is managed exclusively…使用桌面应用 CLI 包装器或 DSH_CLI;见上文
Could not find a dsh CLI安装 DSH Desktop,或传递 --dsh-cli /path/to/dsh
profile "desktop" is not initialized打开 DSH Desktop 一次,以便创建 ~/.dsh/profiles/desktop
ECONNRESET / fetch failed重试;安装程序会自动重试一次;检查网络/代理/注册表
插件已安装但 UI 未变化重启 DSH 或硬刷新(Cmd+Shift+R);客户端包已缓存
插件已安装但未激活确认它存在于 dsh.profile.bundles 中;插件管理器的 add 通常会将追加进去
dsh-markdown-input 编辑器缺失检查设置 → 插件;alpha 插件;硬刷新;检查控制台中的插槽/编辑器错误
dsh-better-sidebar/侧边聊天冲突两者均可启动;选择一个侧边聊天入口或移除一个插件
补丁显示 already-patched符合预期;该文件已具有目标行为
补丁显示 skipped — version …清单/插件版本已更改;在使用 --force 前审查新版本

文件

文件用途
SKILL.md本工作流程
plugins.json版本锁定的插件清单
scripts/install.mjs试运行/安装/验证
scripts/capture.mjs从实时配置文件刷新清单
scripts/apply-patches.mjs可选的本地关键行为补丁
patches/README.md补丁原理和手动回退方法

相关技能