# dsh-inherit [English](README.md) | 中文 **导入智能体设置** —— 在「设置 → 通用设置」新增一行"导入智能体设置",弹出带遮罩的居中卡片,从 **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) | ✅ | — | ℹ️ 由切换插件 | ℹ️ | ⛔ | - ✅ 可导入 · ℹ️ 检测+提示(本插件不导入) · ⛔ 不支持 ## 安装 ```powershell # 从 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`/`ws` transport 跳过并告警。 - 暂无 `doctor` / `restore` 命令——回滚靠 `.bak` 文件手动处理。 - 客户端为手写 lazy-CJS bundle(无构建步骤),仅依赖 `react` 与 `slots` 客户端服务。 ## 开发 ```bash 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