跳到主内容

dsh-skill-picker

21Star1Fork2Issue0Watching

DSH Web 技能选择器,在输入框旁加 ⚡ 按钮,一键搜索/点选已安装技能并把官方 `/技能名` 手势插入发送框。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科

安装

命令web profile
$ dsh plugin --profile web add dsh-skill-picker

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 a735624258/dsh-skill-picker:先查看仓库 https://github.com/a735624258/dsh-skill-picker 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

DSH Web GUI 的技能选择器,在输入框工具行右侧加一个 ⚡ 按钮,点开可以搜索并点选已安装的全部技能,自动把官方 /技能名 文本插入发送框——消息发出后由 DSH 原生机制加载并执行。

核心能力

  • 在会话输入框工具行(发送按钮左侧)注入一个 ⚡ 按钮,点击弹出可搜索的技能列表弹窗
  • 弹窗内按「最近使用优先 → 使用次数 → 名称字母序」智能排序,支持关键字模糊搜索(同时匹配技能名与描述)
  • 选中技能后把 /技能名 (含末尾空格)追加到当前草稿末尾,自动补分隔;插入文本走官方输入契约,撤销与草稿持久化由宿主处理
  • 改造官方 / 补全:输入 / 直接列出全部技能(无前缀也能翻),输入关键字用模糊搜索;按相同使用规则排序,与 ⚡ 面板共享一份排序逻辑
  • 技能列表数据源优先走官方宿主 skills API(与 DSH 自带 / 补全完全同源、会话作用域),不可用时自动回退到插件内置目录扫描
  • 弹窗样式跟随 Web UI 主题(CSS 变量),浅色/深色自适应;点击弹窗外区域自动关闭

技术实现

  • 语言: JavaScript(host 端 ESM + client 端 JSX/React 18)
  • 关键依赖: @deepseek-ai/dsh-host-webserver(host 路由注册)+ @deepseek-ai/dsh-client-runtime 与 @deepseek-ai/dsh-client-ui-slots(client 插槽与运行时)+ react ^18.2.0(弹窗 UI)+ fuzzysort(构建时打进 client bundle 的模糊搜索)
  • 架构模式: 双半部(host + client)Cordis 插件;通过 cordis.patch.yml 把插件 ID 插入 web profile 层栈,host 端注册 /dsh-skill-picker/skills JSON 路由与系统提示片段,client 端通过 conversation.input.right 插槽与 inputTriggers 注册源挂载 UI 与改造 / 触发器;client bundle 必须以 window.__ModuleLoader__.load({ id, factory }) CJS 握手格式注册(由 build.mjs 的 esbuild banner/footer 自动注入)
  • 入口文件: src/index.js(host,编译产物 lib/index.js,ESM)+ src/client/index.jsx(client,编译产物 lib/client.js,CJS)

适用场景

在 DSH Web 装了几十个技能、但记不清或记不全名字时,避免在输入框里反复试错 /xxx 前缀。点 ⚡ 浏览/搜索列表,按最近使用和常用度找到目标技能,一键把官方 /技能名 手势写进草稿,特别适合技能量大、跨项目切换工作区、希望「看着选」而不是「背着用」的用户。

前置依赖与兼容性

依赖最低版本说明
DSH^0.1.0-rc.6通过 peerDependencies 显式声明 @deepseek-ai/cordis / @deepseek-ai/dsh-host-webserver / @deepseek-ai/dsh-client-runtime / @deepseek-ai/dsh-client-ui-slots / @deepseek-ai/dsh-client-locale / @deepseek-ai/dsh-skill / @deepseek-ai/dsh-system-prompt;dsh.client.platform 固定为 web,仅 web profile 扫描
客户端契约官方 web client⚡ 按钮依赖 slots.inject(在 conversation.input.right 插槽)、connection.api.skills.list(技能数据源)、inputActions.setDraft(写入草稿)、sessions.list(跟踪工作区路径)、inputTriggers(改造 / 补全)
Node.js未声明源码未声明 engines;构建脚本 build.mjs 显式以 node22 为构建目标,运行时由宿主 DSH Node 版本决定
平台macOS / Windows / Linux纯客户端 UI 与 Node 端 fs 目录扫描,跨平台无差异;扫描路径均尊重 DSH_HOME 环境变量
原生模块无仅使用 Node.js 内置 node:fs/promises / node:os / node:path,无 node-gyp 编译依赖

安装方式

dsh plugin --profile web add github:a735624258/dsh-skill-picker

配置项

本插件无需额外配置。安装后重启 dsh web 并刷新浏览器即在输入框工具行出现 ⚡ 按钮。源码中未发现 Schema、process.env 读取(仅读取 DSH_HOME 用于定位用户技能目录)或用户级配置入口;行为由插件内置默认值与宿主 Web UI 主题自动决定。

常见问题

Q: 安装后输入框旁没有出现 ⚡ 按钮怎么办?

A: 必须用 dsh --profile web 安装(命令带 --profile web),安装后重启 dsh web 进程并刷新浏览器。package.json 里 dsh.client.platform 固定为 web,只有 web profile 会扫描并加载这个 client bundle。

Q: ⚡ 按钮和 DSH 自带的 / 补全有什么区别?能同时用吗?

A: 可以同时用。官方 / 补全是「前缀记忆驱动」——必须先打 /+ 前缀才能过滤;⚡ 按钮是「全列表浏览 + 关键字模糊搜索」,并且按最近使用/常用频率排序。两种交互最终都把 /技能名 文本插入草稿,由同一套原生机制加载。

Q: 选好技能后是如何被 DSH 加载并执行的?

A: 本插件只负责把 /技能名 文本写入草稿框,并不直接调用任何 agent。消息发出后由 DSH 官方 agent/pre-step 阶段的 SKILL_GESTURE 正则扫描用户消息中的 /kebab-case-name 手势,命中后把对应技能内容作为 skill-invocation 注入对话,由模型按技能指令执行。

Q: 安装了很多技能后,怎么快速找到常用那几个?

A: 每次点选技能都会被记录到浏览器 localStorage(key dsh-skill-picker:usage),含使用次数与最近使用时间戳;弹窗默认按「最近使用优先 → 使用次数 → 名称字母序」排序,搜索框在此基础上再做关键词模糊匹配。

Q: 哪些技能会被列出来?是不是和 DSH 内置补全一致?

A: 优先走官方宿主 skills API(connection.api.skills.list,与 DSH 内置 / 补全同源,会话作用域,自动覆盖用户级与项目级全部技能);官方 API 不可用时回退到插件内置目录扫描——扫描 $DSH_HOME/skills、<workspace>/.dsh/skills、<workspace>/.agents/skills,都尊重 DSH_HOME 环境变量。

Q: 改完源码直接重启为什么没生效?

A: lib/client.js 是构建产物,DSH web shell 要求它以 window.__ModuleLoader__.load({ id, factory }) 的 CJS 握手格式注册。改完 src/ 后必须执行 npm run build 重新生成 lib/,否则 web shell 启动时会报 loaded without registering "dsh-skill-picker" via __ModuleLoader__.load。

Q: 输入框里已经写了别的话,再点 ⚡ 会不会把之前内容覆盖掉?

A: 不会覆盖。插件会读取当前草稿内容(优先 input.draft,回退到 useInput 状态机),把 /技能名 追加到草稿末尾,自动补一个空格做分隔;如果草稿为空或结尾已经是空格/换行则不重复加分隔符。

上手难度

入门 — 安装一条命令、重启 web 一次即可使用,无 Schema、无环境变量、无需选择工作模式;默认行为覆盖 90% 用法,进阶用户可在浏览器 localStorage 中清空 dsh-skill-picker:usage 重置使用排序。

已知问题与限制

  • 内置目录扫描的 host 端回退路径不扫描用户级 ~/.agents/skills,只扫 <workspace>/.agents/skills;自定义技能目录(DSH_HOME/customSkillDirs 配置)同样不在扫描范围内——需要扫描这些目录的话欢迎 PR(README.md:96 / src/index.js:88-94)
  • 「最近使用/常用」排序存浏览器 localStorage(key dsh-skill-picker:usage),清缓存、隐私模式、换浏览器都会重置;多端不会同步(src/client/index.jsx:25-46)
  • lib/client.js 是构建产物,源码改动必须 npm run build,ESM 源码直接作为 client bundle 加载会导致 web shell 启动失败并报 __ModuleLoader__.load 握手错误(README.md:117-121 / build.mjs:11-13)
  • host 端系统提示片段向模型宣告「输入框旁有技能按钮」,依赖 DSH systemPrompt 服务;老版本 DSH 缺少该服务时插件仍可加载 UI,但模型不会自动理解「用户说『技能选择器/选个技能』即指本插件」的语义(src/index.js:26,119-123)
  • 技能数据优先走 connection.api.skills.list 官方 RPC;在某些 DSH 早期版本里该 RPC 可能未挂载,会自动回退到 host 内置扫描,回退路径不包含官方 provider 的全部分层(src/client/index.jsx:192-215)

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/a735624258/dsh-skill-picker)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录