WorkBuddy 同款技能选择器:输入框旁 ⚡ 按钮弹出全部技能列表,支持搜索与最近/常用排序,点选即插入官方 `/技能名` 手势,随消息发出自动加载执行。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-skill-picker
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:a735624258/dsh-skill-picker
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
技能记不住名字?官方
/补全靠前缀记忆,装了几十个技能谁记得住? 本插件让技能看得见、翻得到、选得快——点一下 ⚡,全部技能带描述排在你面前,搜索、点选、插入,随消息发出自动加载。
DSH Web GUI 的技能选择器:在输入框(composer)工具行右侧加一个按钮,点开可以搜索并点选已安装的技能,选中后把官方 /技能名 手势插入发送框——随消息一起发出,DSH 原生机制就会自动加载该技能并执行。WorkBuddy 式"把技能写进发送框"的交互,DeepSeek Harness 复刻版。
English: A skill picker for the DSH Web GUI — a button in the composer's right tool row opens a searchable list of installed skills; picking one inserts the official /skill-name gesture into the draft, so DSH's native user-invocation path loads the skill with your message.
为什么用它(vs 官方 / 补全)
官方内置了 / 技能补全,但它是记忆驱动的——你得先记得技能名,打 / + 前缀才能过滤出来。技能一多就抓瞎:
官方 / 补全 |
dsh-skill-picker | |
|---|---|---|
| 触发 | 输入框打 / |
输入框旁 ⚡ 按钮 |
| 查找方式 | 前缀记忆驱动,忘了名字就找不到 | 全列表浏览 + 关键字搜索,忘了名字也能翻到 |
| 排序 | 固定 | 最近使用置顶、常用靠前 |
| 描述可见 | 精简 | 完整描述一眼看全 |
记得名字用官方,忘了名字用本插件——两者互补,可同时使用。
特性
- ⚡ 一键弹出全部技能(闪电图标,人人看得懂)
- 🔍 实时搜索(技能名 / 描述都搜)
- 🧠 最近使用置顶、常用靠前的智能排序(WorkBuddy 同款)
- 📋 直接扫描
~/.dsh/skills(官方技能 provider 同源目录,标准安装即用) - 🧩 插入官方
/技能名手势,加载/执行走 DSH 原生机制,零 agent 侧改动 - 🎨 跟随 Web UI 主题(CSS 变量),浅色/深色自适应
- 📦 纯 client + host 双半插件,无第三方运行时依赖
安装
# 方式一:GitHub 克隆 + link(推荐,无需发布 npm)
git clone https://github.com/a735624258/dsh-skill-picker.git
dsh plugin --profile web add link:/path/to/dsh-skill-picker
# 方式二:Git 依赖直装
dsh plugin --profile web add "github:a735624258/dsh-skill-picker"
# 方式三:发布到 npm 后(预构建安装,体验最佳)
dsh plugin --profile web add dsh-skill-picker
注:目前尚未发布 npm(
npm view dsh-skill-picker会 404),请用方式一或方式二。 若dsh命令因 PowerShell 执行策略被拒(File ... cannot be loaded),用:powershell -ExecutionPolicy Bypass -Command "dsh plugin --profile web add link:C:\path\to\dsh-skill-picker"
重启 dsh web(或刷新页面加载新 bundle)后生效。
用法
- 打开任一会话,在输入框工具行右侧找到**⚡ 按钮**
- 点击弹出技能列表(可输入关键字过滤)
- 点选技能 → 发送框自动出现
/技能名 - 继续输入你的话并发送——DSH 会识别
/技能名手势,自动加载该技能并按其指令执行
示例:点选 duo-xuan-pi-gai 后发送框变为 /duo-xuan-pi-gai 帮我批改多选,发送后技能自动加载。
原理
DSH 的 dsh-tool-skill 在 agent/pre-step 阶段扫描用户消息中的 /kebab-case-name 手势(SKILL_GESTURE 正则),命中后把对应技能内容作为 skill-invocation 注入对话——即"用户消息里写 /技能名 就会自动加载技能"是官方既有能力,只是没有 UI。
本插件只补 UI 一层:
[client] ⚡ 按钮 → fetch('/dsh-skill-picker/skills')
↓
[host] 扫描用户级 $DSH_HOME/skills + 项目级 <cwd>/.dsh/skills 等 → 技能目录(name + description)
↓
[client] 点选 → inputActions.setDraft(draft + '/技能名 ')
↓
[DSH] agent/pre-step 识别手势 → 自动加载技能 → 执行
- client 半:注册到官方
conversation.input.right插槽(composer 工具行、发送按钮左侧的控件位),技能列表优先走官方宿主 skills API(connection.api.skills.list——与 DSH 内置/补全同源,会话作用域,自动含用户级/项目级技能),失败时回退到 host 扫描路由;插入文本走框架输入机的inputActions.setDraft(单一路径,撤销/草稿持久化自动处理);最近/常用排序存 localStorage
与官方 / 补全的关系
DSH 官方已内置技能补全:在输入框输入 / 会弹出技能菜单,按前缀过滤(如输入 /sk 列出 skill 开头的技能)。本插件不替代它,而是补上官方方案的盲区:
官方 / 补全 |
dsh-skill-picker | |
|---|---|---|
| 触发 | 输入框打 / |
输入框旁 ⚡ 按钮 |
| 查找方式 | 前缀记忆驱动——需要先记得技能名才能打出来 | 全列表浏览 + 关键字搜索——忘了名字也能翻到 |
| 排序 | 固定顺序 | 最近使用置顶、常用靠前(localStorage) |
| 适合场景 | 记得名字的老手 | 技能多、记不全名字、想翻着选的人 |
一句话:记得名字用官方,忘了名字用本插件。两者互补,可同时使用。
兼容性与注意事项
- 技能来源:优先走官方宿主 skills API(
connection.api.skills.list——与 DSH 内置/补全完全同一个数据源,会话作用域,自动覆盖用户级~/.dsh/skills、项目级<workspace>/.dsh/skills、<workspace>/.agents/skills等全部官方目录);官方 API 不可用时自动回退到内置扫描(用户级 + 项目级目录)。两条路都支持DSH_HOME环境变量。 - 暂不扫描:
~/.agents/skills与自定义技能目录(customSkillDirs配置)——需要的话欢迎 PR。 - 失败保护:client 端用
ctx.slots.inject(等conversation.input.right插槽声明存在才注册,插槽缺失时静默跳过,不会拖垮启动);host 端路由 try/catch,扫描目录不存在时返回空列表而非报错。 - 依赖版本:按 DSH
0.1.0-rc.6API 编写(cordis 4 / web profile 标准装配)。如遇 DSH 大版本更新导致 API 变化,插件会以启动日志的插件错误提示为准,卸载dsh plugin --profile web remove dsh-skill-picker即可回退。
开发
# 安装依赖(提供 esbuild)
npm install
# 构建(源码 src/ → 产物 lib/;client 半自动包 __ModuleLoader__ 握手)
npm run build
# 安装到 web profile(link 模式,改源码即生效)
dsh plugin --profile web add link:$PWD
# 语法自检(产物)
node --check lib/index.js
node --check lib/client.js
⚠️ 改完源码必须
npm run build:lib/client.js是构建产物,ESM 源码不能直接作 为 client bundle 加载——DSH web shell 要求 client bundle 以window.__ModuleLoader__.load({ id, factory })的 CJS 握手格式注册,否则启动报loaded without registering "dsh-skill-picker" via __ModuleLoader__.load。 构建脚本(build.mjs)会通过 esbuild 的 banner/footer 自动注入这段握手。
目录结构:
dsh-skill-picker/
├── package.json # dsh.bundle.patch + dsh.client 声明 + build script
├── cordis.patch.yml # bundle patch:把插件行插入 web profile
├── build.mjs # esbuild 构建:host ESM + client CJS(__ModuleLoader__握手)
├── src/
│ ├── index.js # host 半源码:/dsh-skill-picker/skills 路由 + prompt section
│ └── client/
│ └── index.jsx # client 半源码:conversation.input.right 插槽组件
├── lib/ # 构建产物(勿手改,`npm run build` 生成)
│ ├── index.js
│ └── client.js
└── README.md
依赖
- host:
@deepseek-ai/cordis、@deepseek-ai/dsh-host-webserver、@deepseek-ai/dsh-skill、@deepseek-ai/dsh-system-prompt - client:
@deepseek-ai/dsh-client-runtime、@deepseek-ai/dsh-client-ui-slots、react
License
MIT
链接
同类插件
zhu1090093659/dsh-web-ui#packages/dsh-web-ui-all★ 3059
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
omdsh-dev/DSH-better-sidebar★ 1447
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
ccch1mneyyy/dsh-TUI★ 1404
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
omdsh-dev/dsh-at-file★ 242
Codex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
huiliyi37/dsh-tianshu-tui★ 181
DeepSeek Harness 的终端 UI(TUI)。
Nagi-ovo/dsh-visualize★ 139
对话内生成式 UI:模型把交互式 HTML 卡片直接画进会话流,带流式预览与沙箱渲染。