dsh-inherit
English | 中文
导入智能体设置 —— 在「设置 → 通用设置」新增一行"导入智能体设置",弹出带遮罩的居中卡片,从 Claude Code / Cursor / Codex / cc-switch 一键导入 MCP 服务器与 Skills 到 DeepSeek Harness。
> 开发者预览(0.1.0)。社区插件,MIT 协议,与 DeepSeek 无隶属关系。
为什么
Codex CLI 自带 /import,能把 Claude Code / Cursor 的配置一键导进 Codex;DSH 一直缺这个等价物。本插件补上:通用设置里的一行 → 居中弹窗 → 每个来源卡右侧滑动开关(开=变亮选中,关=灰暗排除)→ 展开勾选类别 → 先预演、后确认写入。
特性
- 来源自动检测 —— 扫描
~/.claude、~/.cursor、~/.codex以及 cc-switch(~/.cc-switch/cc-switch.db,用 Node 内置 sqlite 直读),报告各工具装了什么。 - 多来源开关选择 —— 每个来源卡一个 toggle;关=排除,开=包含。默认全开 = 一键全导。
- 类别勾选 —— 每个来源下:MCP 服务器、Skills;指令/memory/模型供应商按能力级检测如实标注(DSH 原生读
CLAUDE.md/AGENTS.md;记忆由匹配到能力的社区插件注入——不写死任何插件名,fork 或换名也能命中)。 - 两步安全 —— 先预演(dry-run 报告,不写文件),看清单后确认写入。
- MCP → 官方组合层 —— 服务器以
@deepseek-ai/dsh-mcp-client行写入 profile 的cordis.patch.yml(无管理插件 / Hanihahaha 式 UI 插件 / 未来官方 UI 通用);~/.dsh/mcp.json(zebbkira 式 UI)为 auto 检测的备选落点。 - Skills →
~/.dsh/skills—— SKILL.md 目录复制(幂等,已存在跳过)。 - 自动备份 —— 每次写入前目标文件留
.bak-<时间戳>。 - 能力级提示 —— 如"记忆:未检测到处理该能力的插件;本插件不导入此项" / "模型路由:由已加载插件「dsh-cc-switch」处理"。
来源 × 类别矩阵
| 来源 | MCP | Skills | 指令 | 模型供应商 | 记忆 | 会话 |
|---|---|---|---|---|---|---|
| Claude Code | ✅ | ✅ | ℹ️ 原生读取 | — | ℹ️ 由桥插件 | ⛔ |
| Cursor | ✅ | ✅ | ℹ️ | — | ℹ️ | ⛔ |
| Codex | ✅ (TOML) | ✅ | ℹ️ 原生读取 | — | ℹ️ | ⛔ |
| cc-switch | ✅ (sqlite) | ✅ | — | ℹ️ 由切换插件 | ℹ️ | ⛔ |
- ✅ 可导入 · ℹ️ 检测+提示(本插件不导入) · ⛔ 不支持
安装
# 从 npm(发布后)
dsh plugin --profile web add dsh-inherit
# 或本地目录
dsh plugin --profile web add "D:\path\to\dsh-inherit"然后打开 设置 → 通用设置 → 导入智能体设置。
包声明了 dsh.bundle.patch + dsh.client,dsh plugin add 会把它 reconcile 进 profile 的 dsh.profile.bundles 层,浏览器半区由 /plugins/dsh-inherit/client.js 提供。新 bundle 延迟后热挂载;host 模块代码改动需重启 dsh web。
使用
1. 设置 → 通用设置 → 导入智能体设置。 2. 弹窗列出检测到的来源,每卡右侧开关(默认全开)。 3. 展开来源卡 → 勾选类别(MCP / Skills …)。 4. 导入所选(预演) —— 看 dry-run 报告(已导入 / 跳过 / 说明)。 5. 确认写入 —— 正式落盘(先备份)。
架构
双面插件(一个 bundle 行 + dsh.client 声明)
├─ lib/index.js host 半区 — /api/dsh-inherit/sources + /api/dsh-inherit/run(loopback 护栏)
├─ lib/import.js 纯业务 — 来源扫描、多格式解析(mcpServers JSON、Codex TOML、
│ cc-switch sqlite)、MCP→patch / Skills→~/.dsh/skills
└─ lib/client.js browser 半区 — settings.general.item 行 → 居中 Modal → 开关卡片 →
类别勾选 → 预演 → 确认路由 loopback-only;写入前自动 .bak 备份;导入幂等(同名服务器/Skills 跳过)。
同类社区插件对比
- dsh-import(cms19859230182-lang)—— Claude/Codex/Cursor 的 MCP + rules + hooks,设置一级页(settings.section)。无 cc-switch、无 Skills 复制、单选来源。
- dsh-movein(sjh9714,0.3.x)—— 目前最成熟的搬家工具:CLI + 工具、默认预演、
doctor+restore、凭证安全(${VAR}→!!js process.env.VAR)。聚焦 Claude Code。
本插件差异化:通用设置内行、多来源开关、cc-switch sqlite 全量来源(providers/MCP/skills/prompts,目前没人做)、Skills 复制、能力级插件检测。暂不迁移 hooks / 斜杠命令 / 会话——那些请配 dsh-claude-move / dsh-chat-import。
已知限制
- MCP 凭据(env/headers)明文写入
cordis.patch.yml/~/.dsh/mcp.json,注意文件权限;${VAR}引用尚未转成!!js process.env.VAR(dsh-movein 做了,注意源配置里的明文 token)。 - 服务器名须
[A-Za-z0-9_-]{1,32}且全局唯一;sse/wstransport 跳过并告警。 - 暂无
doctor/restore命令——回滚靠.bak文件手动处理。 - 客户端为手写 lazy-CJS bundle(无构建步骤),仅依赖
react与slots客户端服务。
开发
node --check lib/import.js && node --check lib/index.js && node --check lib/client.js
# 来源扫描 + dry-run 导入(不写文件):
node --experimental-sqlite -e "
import('./lib/import.js').then(m => {
console.log(JSON.stringify(m.detectSources(), null, 1).slice(0, 2000))
console.log(JSON.stringify(m.runImport([{source:'claude-code',categories:['mcp']}],{target:'patch',dryRun:true}), null, 1).slice(0, 800))
})"协议
MIT