Bundle
dsh-claude-migrator
Claude → DeepSeek Harness (DSH) 配置迁移插件:把 .claude/skills、.claude/rules、.mcp.json、CLAUDE.md 拖入插件目录即自动加载为 DSH 能力,内置完整看板(skills / rules / MCP / 连接状态)。
- Source
- huanghouchun
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 11 days ago
Readme
# dsh-claude-migrator
> **中文** · [English](./README_EN.md)
**Claude → DeepSeek Harness (DSH) 配置迁移插件(通用示范模板)**
把 Claude 的配置(`.claude/skills`、`.claude/rules`、`.mcp.json`、`CLAUDE.md`)从**用户主目录**与**项目根**自动加载为 DSH 能力,零拖动、零配置;内置完整看板(Skills / Rules / MCP 服务器 / 连接状态),支持浅色/深色主题自适应。
> 本仓库是一个**干净的可发布模板**:不携带任何具体项目的 skills/rules/MCP,你 fork 后放入自己的配置即可发布。
---
## ✨ 功能
| 能力 | 说明 |
|------|------|
| **Skills 自动加载** | 用户 `~/.agents/skills`、`~/.claude/skills` + 项目根 `.claude/skills` + `.dsh/dsh-claude-migrator/skills/` 的 `SKILL.md` 直接进 DSH skill 注册表,模型按 `whenToUse` 自动加载 |
| **Rules 自动转换** | `.claude/rules/*.md` 自动转为 skill(`whenToUse` 保留 `paths` 路径语义) |
| **MCP 真实连接** | 用户/项目/插件三级的 `.mcp.json` 在启动时**动态注册为 dsh-mcp-client 实例**(真实连接 + 自动重连),密钥 `${VAR}` 占位符自动展开环境变量 |
| **CLAUDE.md 原生支持** | 无需处理:DSH 的 `dsh-agent-instructions` 默认加载(候选 `AGENTS.md`/`CLAUDE.md`) |
| **工作区隔离** | skill 唤醒走 provider 机制:按当前会话工作区隔离,项目级 `.claude/skills` 可正常使用且**不跨项目串扰** |
| **完整看板** | 侧边栏「CLAUDE 配置中心」入口 + 工作区「⋯」菜单:Skills / Rules / MCP 列表 + 连接状态(🟢已连接 / 🟡连接中 / ⚪禁用) |
| **来源标识** | 每个 skill/rule/MCP 卡片带「全局 / 项目 / 插件」徽标,一眼看清配置来自哪一层 |
| **点击工作区切换** | 面板跟随当前工作区自动切换,切换项目后看板实时刷新 |
| **可折叠区块** | Skills / Rules / MCP 三个区块独立折叠(默认收起,刷新后保留手动状态) |
| **主题自适应** | 颜色走 `--dsh-cm-*` CSS 变量,随 `body[data-ds-dark-theme]` 自动切换深/浅色 |
---
## 📦 安装
```sh
# 本地 link 安装(开发调试,改动实时生效)
dsh plugin --profile web add "link:<本插件绝对路径>"
# 发布到 npm 后
dsh plugin --profile web add dsh-claude-migrator
```
装完**重启 `dsh web`** 生效。验证:
```sh
dsh --profile web --dump-config | grep -i "claude-migrator"
# 应看到 dsh-claude-migrator 插件行
```
---
## 🚀 快速开始
1. **项目根原有配置直接生效**:`.claude/`、`.mcp.json`、`CLAUDE.md` 无需移动任何文件。
2. **全局配置自动合并**:用户主目录的 `~/.agents/skills`、`~/.claude/skills`、`~/.dsh/dsh-claude-migrator/` 自动进入看板与注册表。
3. **查看效果**:侧边栏「**CLAUDE 配置中心**」入口打开看板,查看 Skills / Rules / MCP 列表与连接状态(区块可折叠、来源徽标可辨层级)。
### 配置层级一览
| 层级 | 位置 | 说明 |
|------|------|------|
| **用户全局级** | `~/.agents/skills`、`~/.claude/skills`、`~/.dsh/dsh-claude-migrator/` | 本机所有项目共享 |
| **workspace 项目级** | 项目根 `.claude/`、`.mcp.json`、`.dsh/dsh-claude-migrator/` | 每个项目各自的配置,按工作区隔离 |
| **插件级** | 插件目录 `skills/`、`import/` | 随插件分发 / 发布自带 |
---
## 🧩 配置一个 MCP
`.mcp.json` 放在项目根(或 `~/.dsh/dsh-claude-migrator/.mcp.json` 全局),服务器在启动时自动注册为真实连接:
```json
{
"mcpServers": {
"my-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "my-mcp-package"],
"env": { "MY_API_KEY": "${MY_API_KEY}" }
}
}
}
```
- `${VAR}` 占位符自动展开为**系统环境变量**(如 `${ZHIPU_KEY}`)。
- 未设置密钥的服务器自动跳过注册,不阻塞 DSH 启动。
- 连接状态看板里实时展示(🟢 已连接 / 🟡 连接中 / ⚪ 禁用)。
---
## 📁 目录结构
```
dsh-claude-migrator/
├── package.json # dsh.bundle.patch → cordis.patch.yml;exports "." / "./client"
├── cordis.patch.yml # 插件行 + MCP 配置模板(注释)
├── src/index.js # host 端:扫描 skills/rules/mcp + 动态注册 MCP + /api/dsh-claude-dashboard
├── status/client.js # browser 端:侧边栏「CLAUDE 配置中心」看板 UI
├── skills/ # 随插件分发的 skill 放这里
├── import/ # 拖入 Claude 配置的入口目录(含 README 说明)
├── README.md # 本文件(中文)
├── README_EN.md # 英文版
└── USAGE.md # 使用指南:三级配置区、新增 skill、配置 MCP
```
---
## ❓ 常见问题
| 问题 | 说明 |
|------|------|
| 新增 skill 后模型看不到? | ① 目录名用 kebab-case、SKILL.md 含 `name`/`description`;② 只扫一层目录;③ 改完重启 `dsh web` |
| MCP 一直「连接中」? | ① 检查对应环境变量是否设置;② 密钥/地址是否正确;③ 看日志确认重连状态 |
| 不同项目配置互相串扰? | 不会:skill 按工作区隔离唤醒,看板按当前工作区显示 |
| 插件改了源码不生效? | `link:` 方式改动实时可见;`file:` 方式会复制一份,需重新 `dsh plugin add` |
---
## 🗑️ 卸载
```sh
dsh plugin --profile web remove dsh-claude-migrator
```
---
## 📚 文档
- **[USAGE.md](USAGE.md)** — 详细使用:三级配置区、如何新增 skill、如何配置 MCP
## 📄 许可
[MIT](./LICENSE)
Install
dsh plugin --profile web add github:huanghouchun/dsh-claude-migrator
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-claude-migrator from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.