🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

技能导入管理器 saitamahang/dsh-skill-importer

DeepSeek Harnessv0.2.6
saitamahang28 天前有提交已提供中文文档扫描:含敏感能力

把技能管理带进 DeepSeek Harness Web UI。

31.5/100
综合分
2
GitHub 星标
110
npm 周下载
—/5
用户评分

数据截至 2026/10/8 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-skill-importer
npm 源 · dsh-skill-importer 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · skill
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.1-rc.5 下真实安装成功,但当前 dsh 已更新至 0.2.2-rc.1,本站尚未在新版下复验
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/30·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 28 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-skill-importer @ 0.2.6
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/15 20:02:37

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 76 处,展示前 39 条)
  • 写入本地文件
    lib/index.js:181
    mkdirSync(directory, { recursive: true });
  • 写入本地文件
    lib/index.js:184
    writeFileSync(temporary, normalized, "utf8");
  • 写入本地文件
    lib/index.js:185
    renameSync(temporary, file);
  • 读取本地文件
    lib/index.js:191
    if (!existsSync(root)) return;
  • 读取本地文件
    lib/index.js:192
    for (const entry of readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    lib/index.js:197
    if (existsSync(candidate)) file = candidate;
  • 读取本地文件
    lib/index.js:201
    const { frontmatter } = parseSkillFile(readFileSync(file, "utf8"));
  • 读取本地文件
    lib/index.js:274
    if (existsSync(directory)) {
  • 删除本地文件
    lib/index.js:275
    rmSync(directory, {
  • 读取本地文件
    lib/index.js:282
    if (existsSync(flat)) {
  • 删除本地文件
    lib/index.js:283
    rmSync(flat);
  • 写入本地文件
    lib/index.js:433
    mkdirSync(root, { recursive: true });
  • 写入本地文件
    lib/index.js:447
    writeFileSync(skillFile, normalizeSkillText(readFileSync(skillFile, "utf8")), "utf8");
  • 写入本地文件
    lib/index.js:449
    mkdirSync(staging, { recursive: false });
  • 删除本地文件
    lib/index.js:461
    for (const { backup } of backups) rmSync(backup, {
  • 删除本地文件
    lib/index.js:467
    rmSync(staging, {
  • 删除本地文件
    lib/index.js:471
    if (existsSync(finalDirectory) && backups.length > 0) rmSync(finalDirectory, {
  • 发起网络请求
    lib/index.js:577
    response = await fetch(current, {
  • 发起网络请求
    lib/index.js:720
    const response = await fetch(REGISTRY_URL, {
  • 写入剪贴板
    lib/client.js:306
    await navigator.clipboard.writeText(updateStatus.command);
  • 发起网络请求
    lib/client.js:2766
    response = await fetch(path, body === void 0 ? void 0 : {
  • 写入本地文件
    src/server.ts:134
    mkdirSync(directory, { recursive: true })
  • 写入本地文件
    src/server.ts:137
    writeFileSync(temporary, normalized, 'utf8')
  • 写入本地文件
    src/server.ts:138
    renameSync(temporary, file)
  • 读取本地文件
    src/server.ts:151
    if (!existsSync(root)) return
  • 读取本地文件
    src/server.ts:152
    for (const entry of readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    src/server.ts:157
    if (existsSync(candidate)) file = candidate
  • 读取本地文件
    src/server.ts:163
    const { frontmatter } = parseSkillFile(readFileSync(file, 'utf8'))
  • 读取本地文件
    src/server.ts:240
    if (existsSync(directory)) {
  • 删除本地文件递归
    src/server.ts:241
    rmSync(directory, { recursive: true, force: true })
  • 读取本地文件
    src/server.ts:245
    if (existsSync(flat)) {
  • 删除本地文件
    src/server.ts:246
    rmSync(flat)
  • 写入本地文件
    src/server.ts:424
    mkdirSync(root, { recursive: true })
  • 写入本地文件
    src/server.ts:435
    writeFileSync(skillFile, normalizeSkillText(readFileSync(skillFile, 'utf8')), 'utf8')
  • 写入本地文件
    src/server.ts:437
    mkdirSync(staging, { recursive: false })
  • 删除本地文件递归
    src/server.ts:446
    for (const { backup } of backups) rmSync(backup, { recursive: true, force: true })
  • 删除本地文件递归
    src/server.ts:449
    rmSync(staging, { recursive: true, force: true })
  • 删除本地文件递归
    src/server.ts:450
    if (existsSync(finalDirectory) && backups.length > 0) rmSync(finalDirectory, { recursive: true, force: true })
  • 发起网络请求
    src/server.ts:566
    response = await fetch(current, { redirect: 'manual', signal: AbortSignal.timeout(15_000) })
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-api-workspace-controller@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-workspace
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 导入技能
  • 校验技能
  • 管理并迁移技能

导入、校验、管理并迁移 DeepSeek Harness(DSH)、Claude Code、Codex 等 AI 编程智能体的技能。

v0.2.62026-10-08
适配 DSH 0.2.0-rc.2 / 0.2.1-alpha.1。 · 更新客户端服务注入、会话接口、目录选择接口和图标。 · /skills 使用新版原生弹窗搜索与焦点管理,移除旧的 DOM 焦点补丁。 · 恢复 DSH 原生技能来源,保留插件的技能选择与原子删除能力。 · 修正 npm 预发布依赖范围,更新中英文安装要求。 验证:构建、批量导入、原子删除、版本检测、技能列表和有效技能测试通过;npm 打包检查通过。 安装:npx @deepseek-ai/dsh plugin --profile web add dsh-skill-importer@0.2.6 Requires DSH 0.2.0-rc.2 or newer. Updated client service integration and native skill command handling for DSH 0.2; corrected prerelease dependency ranges. Build and all automated regression checks passed.
v0.2.52026-08-31
DSH alpha 兼容性更新:调整客户端服务访问,恢复 Lexical 编辑器里技能 token 的原子删除与导航,稳定 /skills 的键盘焦点和回车选择,恢复按 Escape 后的编辑器焦点,默认选中第一个技能,并稳定选中后的插入。完整构建与测试套件均通过。
v0.2.42026-08-25
· Highlights · Manage skills across every registered workspace and all four writable DSH roots: project .dsh/skills, project .agents/skills, global ~/.dsh/skills, and global ~/.agents/skills. · Choose an install workspace and root from the redesigned priority-aware location dialog. · Keep composer and /skills catalogs isolated to the current session workspace, with DSH-compatible duplicate-name precedence and clear source labels. · Refresh the composer picker on open, synchronize while visible, and avoid stale-list or empty-state flicker. · Continue showing readable skills when one protected directory returns a filesystem permission error. · 更新内容 · 支持管理全部已注册工作区及四个 DSH 可写技能目录。 · 新增带优先级提示的工作区与安装目录选择界面。 · 会话下拉和 /skills 严格按当前工作区加载,并按 DSH 原生优先级处理同名技能。 · 修复技能删除、切换项目后的同步延迟、旧列表闪烁及空列表入口消失问题。 · 单个目录权限异常时继续展示其他可读取技能。 · Upgrade npx @deepseek-ai/dsh plugin --profile web add dsh-skill-importer@0.2.4 Restart DSH Web after upgrading.
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
把技能管理带进 DeepSeek Harness Web UI。 在 DeepSeek Harness、Claude Code、Codex 等 AI 编程 Agent 之间导入、校验、去重和迁移技能。 无需会话、不耗模型 Token、没有审批往返,导入后立即可用。 English · 简体中文 · 安装 · 工作原理 · 开发 你的技能库,一键即达 dsh-skill-importer 是 DeepSeek Harness(dsh)的轻量技能管理插件。它把技能变成 Web UI 的一等公民:从本地或 URL 导入 Markdown、查看每一份已安装副本,并在输入框中自然调用,全程不打断工作流。 | 导入 | 管理 | 调用 | | 上传 SKILL.md、粘贴 URL,或从 Claude Code、Codex 等 Agent 的技能目录完整迁移。 | 按项目和全局目录分组查看,每个副本都能独立删除。 | 使用输入框选择器、运行 /skills,或直接输入 /skill-name。 | 实际使用效果 | /skills 命令 | 输入框技能选择器 | | 无需离开输入框,直接从命令面板选择技能。 | 从输入框下方打开技能库,一键插入所选技能。 | 为高速工作流而生 - 无需 Agent 或会话 — host 进程直接写入技能文件。
展开完整文档(README 剩余 1 节)
把技能管理带进 DeepSeek Harness Web UI。
在 DeepSeek Harness、Claude Code、Codex 等 AI 编程 Agent 之间导入、校验、去重和迁移技能。
无需会话、不耗模型 Token、没有审批往返,导入后立即可用。

English · 简体中文 · 安装 · 工作原理 · 开发

你的技能库,一键即达

dsh-skill-importer 是 DeepSeek Harness(dsh)的轻量技能管理插件。它把技能变成 Web UI 的一等公民:从本地或 URL 导入 Markdown、查看每一份已安装副本,并在输入框中自然调用,全程不打断工作流。

| 导入 | 管理 | 调用 |
| 上传 SKILL.md、粘贴 URL,或从 Claude Code、Codex 等 Agent 的技能目录完整迁移。 | 按项目和全局目录分组查看,每个副本都能独立删除。 | 使用输入框选择器、运行 /skills,或直接输入 /skill-name。 |

实际使用效果

| /skills 命令 | 输入框技能选择器 |
| 无需离开输入框,直接从命令面板选择技能。 | 从输入框下方打开技能库,一键插入所选技能。 |

为高速工作流而生

- 无需 Agent 或会话 — host 进程直接写入技能文件。
- 零模型 Token — 导入过程不会进入模型上下文。
- 即时发现 — 文件落盘后由 harness watcher 热刷新。
- 工作区感知 — 项目技能始终写入当前注册工作区。
- 中英双语 — UI 文案自动跟随 harness 语言。
- 安全边界清晰 — 固定技能目录、256 KB 限制、同源 POST 校验。

带完整预检的批量迁移

第三个导入入口支持选择 ~/.claude/skills、~/.codex/skills 或其他 .agents/skills 目录。写入前会扫描并校验每个 SKILL.md,同时完整保留技能的 scripts、references、assets 等资源;不合规项只展示错误,绝不会写入目标目录。

目标中存在同名技能时默认跳过。用户可逐项勾选「替换」,检查新增、替换和跳过数量后再确认。每个技能先复制到目标根目录下的临时目录;替换时会暂存旧版本,交换失败自动回滚。扫描结果只能提交一次、十分钟后过期,并在提交时重新核对源内容摘要。

三种自然的技能入口

1. 输入框选择器 — 点击权限模式旁边的 pill,按名称搜索并选中。
2. /skills 命令 — 像使用 /model 一样打开技能命令面板。
3. 直接调用 — 输入 /skill-name,继续你的工作。

三种入口最终都会在输入框填入同一个高亮的 /name 手势;发送后由 dsh 原生流程注入技能指令。

安装

首次安装

npx @deepseek-ai/dsh plugin --profile web add dsh-skill-importer@latest

插件通过 dsh.bundle 自动注册到 Web profile,无需手动修改 cordis.patch.yml。

安装完成后重启 dsh Web:

npx @deepseek-ai/dsh web

更新到最新版

已安装用户执行同一条命令即可更新:

npx @deepseek-ai/dsh plugin --profile web add dsh-skill-importer@latest

更新只会替换插件包,不会删除 .dsh/skills、.agents/skills、~/.dsh/skills 或 ~/.agents/skills 中的技能。更新后请重启 dsh Web。

查看 npm 上的最新版本:

npm view dsh-skill-importer version

查看 Web profile 中已安装的插件:

npx @deepseek-ai/dsh plugin --profile web list

新版本的安全等待期

DSH profile 使用 pnpm 管理插件。pnpm 会按 minimumReleaseAge 暂缓安装刚发布的版本;在等待期内,@latest 可能仍解析到上一个已成熟版本。这是供应链保护机制,不是下载失败。推荐等待 profile 配置的时间窗口结束后,再执行上面的 @latest 命令。

0.x 版本还遵循特殊的 semver 范围:例如 ^0.1.2 不包含 0.2.0。跨 minor 更新时可在等待期结束后明确指定目标版本:

npx @deepseek-ai/dsh plugin --profile web add dsh-skill-importer@X.Y.Z

如果已经核验该版本并且必须立即安装,可在 $DSH_HOME/profiles/web/pnpm-workspace.yaml 中为这个精确版本添加临时信任例外,再执行精确版本命令:

minimumReleaseAgeExclude:
- dsh-skill-importer@X.Y.Z

将两处 X.Y.Z 替换为同一个目标版本。这会绕过该版本的供应链等待期,不建议把包名永久加入例外列表。版本成熟后可以删除这条例外。

打开 设置 → 技能,选择 Markdown 文件、粘贴 URL,或通过「批量导入」迁移其他 Agent 的完整技能目录,再选择目标范围。文件系统 watcher 发现后,技能会立即出现。

需要 DeepSeek Harness >= 0.2.0-rc.2。

旧配置导致重复插件

如果启动时报错 duplicate loader entry id: skill-importer,说明 profile 中还保留了旧版手动配置。请从 $DSH_HOME/profiles/web/cordis.patch.yml 删除手动添加的 skill-importer 条目,再重启 dsh Web。当前版本会自动注册,不需要保留该条目。

工作原理

dsh 的 client→host RPC 是固定白名单,没有文件写入通道。本插件使用 dsh-host-webserver 提供的官方 ctx.webServer.register 扩展点,在 harness 自身服务器上注册同源 /skill-importer/* 路由。

Markdown 文件或 URL │ 同源 fetch ▼ /skill-importer/import │ host 文件系统写入 ▼ <skill-root>/<name>/SKILL.md │ watcher 事件 ▼ skills/change → 热刷新

所有 POST 路由都会校验 Origin,仅接受 loopback 来源(127.0.0.1 或 localhost)。写入范围固定为四个 DSH 默认可写目录:

| 可写目标顺序 | 范围 | 目录 |
| 1/4 | DSH 项目 | .dsh/skills |
| 2/4 | 通用项目 | .agents/skills |
| 3/4 | DSH 全局 | ~/.dsh/skills |
| 4/4 | 通用全局 | ~/.agents/skills |

数字越小优先级越高,这里仅比较四个可写导入目标。DSH 配置的 customSkillDirs 在完整发现顺序中位于项目与全局目录之间,但由于没有统一的写入位置,不作为插件导入目标;Bundled 技能属于 DSH 随附内容,也不允许插件覆盖。

开发

npm install
npm run build

| 模块 | 源码 |
| Host 插件与路由注册 | src/index.ts |
| 文件系统、URL 导入与 HTTP 逻辑 | src/server.ts |
| Host/client 共享类型 | src/types.ts |
| 浏览器插件与 /skills 命令 | src/client/index.ts |
| 输入框技能选择器 | src/client/SkillsPicker.tsx |
| 设置页 | src/client/SkillImporterSection.tsx |

路由一览:GET /skill-importer/health · GET /skill-importer/list · POST /skill-importer/import · POST /skill-importer/import-url · POST /skill-importer/delete · POST /skill-importer/batch/scan · POST /skill-importer/batch/commit

本地源码安装

npm install
npm run build
dsh plugin --profile web add /path/to/dsh-skill-importer

如果没有全局 dsh 命令,可将最后一行替换为 npx @deepseek-ai/dsh plugin --profile web add /path/to/dsh-skill-importer。插件会自动注册,随后重启 dsh Web 即可。

注意事项

- 单个导入文件最大 256 KB。
- 批量导入接受任意 Agent 中名为 skills 的目录(例如 .claude/skills、.codex/skills、项目自定义的 agent/skills)或其中的单个技能目录;每次最多扫描 200 个技能,单个技能最多包含 2,000 个文件和 10 MB 资源,不接受符号链接。
- URL 导入仅支持 HTTPS,并拒绝本机、私有网络、链路本地和保留地址;每次重定向都会重新校验。.md 会原样保留,HTML 页面仅做轻量正文提取,因此推荐使用 Markdown 直链。
- 导入后列表会短暂轮询(每 2 秒一次,最多 20 秒);外部改动可点击 刷新 立即同步。

License

基于 MIT License 开源。
预览分享卡片长什么样 ↓saitamahang/dsh-skill-importer
分享 · DeepSeek Harness Hub
saitamahang/dsh-skill-importer

把技能管理带进 DeepSeek Harness Web UI。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部