前言¶
DeepSeek Harness(DSH)里,斜杠 /name 同时承担宿主命令与用户可调用 skill 两类入口。命令和 skill 共用同一套触发字符,在 composer 里选条目、手打 token、以及后续注入逻辑都挤在同一条管线上。若希望 skill 有独立手势、又不改宿主对 / 的语义,dsh-skill-dollar 在客户端与宿主两侧各加一层桥接:composer 里用 $ 打开 skill 菜单并插入 $skill-name,宿主在 agent/pre-step 识别该 token 后,按与 /name 相同的方式解析 skill 并注入 <skill_content>。
下面介绍插件定位、能力边界、安装步骤与典型用法;事实以 GitHub 仓库 README 与 package.json 为准。
这是什么¶
dsh-skill-dollar 由维护者 d0ublecl1ck 发布,在 SkillHub 目录中归类为客户端插件。一句话:用 $name 手势调用 DSH skill,与 / 命令路径不冲突;composer 补全、模糊排序、键盘选择与宿主侧确定性注入,与内置 / skill 路径对齐,并尽量实现 composer 里「蓝色文本引用」与 / 同等展示(详见下文 Blue text-ref 一节)。
仓库版本(package.json):0.2.0,许可证 MIT。dsh.compatibility.dshReleases 标明与 0.1.5-rc.3、0.1.7-rc.2 兼容。
核心功能¶
客户端:$ 触发 skill 菜单¶
client.js 在触发字符 $ 下注册候选源,数据源为会话 skill 目录(skills/list)。在 composer 输入 $ 会打开常规定时菜单(标题为 “Skills” / “技能”)。候选排序规则(资料原文):名称前缀匹配优先,其次名称子串、名称子序列,再才是仅描述匹配;同分时优先最近选用过的 skill,其次选用频次,最后按宿主顺序。选中一行会在草稿中插入字面量 $skill-name(含尾随空格)。
菜单选手打 $name 走同一套草稿文本桥接,与内置 slash 管线一致。
宿主:识别 $name 并注入 skill 内容¶
index.js 监听 agent/pre-step,在用户消息中识别以空白为边界的 $name token,经 skills 服务解析,并追加与 dsh-tool-skill 对 /name 处理字节级相同的 canonical <skill_content> 块。
与 DSH 核心的衔接方式(客户端)¶
@deepseek-ai/dsh-client-ui-input-trigger 的 detectTrigger 硬编码为 '/' | '@';插件通过 dsh.client.inject 声明依赖该模块,在工厂中 require 并 patch InputTriggerController.prototype.track。存在活跃的 $query token 时,合成 trigger: '$' 的命中,复用控制器的 reduce / fetchCandidates / refreshHeaders 与 '$' roster,从而复用 MenuView 与键盘仲裁,而不 fork 核心包。无 $ token 时仍走原始 track,/ 与 @ 行为不变。
Blue text-ref:$ 与 / 的展示对齐¶
composer 的蓝色「引用」样式来自 @deepseek-ai/dsh-client-ui-conversation 的纯文本扫描;其 token 正则原先只覆盖 / 与 @。插件在宿主侧通过包装 ClientModuleRegistry.bundleResource,在 serving 时改写 bundle 中的扫描规则(将 TEXT_REF_RE 扩展为包含 $,并对 $ 应用与 / 相同的结束边界规则)。DSH Desktop 内 bundle 位于带完整性校验的 app.asar,不宜直接改磁盘文件;运行时 patch 即为此场景设计。较旧宿主(bundle revision 由内容推导、无法仅靠内存 salt bust 缓存,如资料所述 DSH 0.1.5 及更早的 npx dsh web)可改用仓库内 patch-core.mjs 对磁盘 bundle 做一次性同类替换。
若缺少 clientModules 服务(较旧 DSH),资料说明插件会打 hint,$ 菜单与宿主注入仍可用,仅蓝色引用装饰可能不完整。
安装与启用¶
插件目录即仓库根目录。安装到 profile(以 web 为例):
dsh plugin --profile web add /absolute/path/to/dsh-skill-dollar
dsh --profile web --dump-config
dsh plugin 会转发到 profile 内的 pnpm 并重建 dsh.profile.bundles。之后需重启 web 应用:宿主在启动时 compose 客户端模块 manifest,运行中的 dsh web 必须重启后才会加载 client.js。
DSH Desktop 使用独立的 harness home(macOS 上为 ~/Library/Application Support/dsh-desktop/harness),并在 profiles/.generations/live/ 下以内容寻址 generation 快照插件。因此:在 ~/.dsh/profiles/web 的 link: 安装不会进入 Desktop;运行中的 Desktop 仍使用启动时的 generation,修改插件后需在 Desktop profile 中 reinstall/update,并用 Cmd/Ctrl+Shift+R(Restart Harness)或退出重开以加载新 generation。资料注明装饰由插件宿主侧在 boot 时应用,无需手改 app bundle 内文件。
仓库本地自检(无需外部工具):
node --test
node check-core-surface.mjs
node --test 覆盖 transform、drift guard、registry hook、排序等;check-core-surface.mjs 在 DSH 核心锚点漂移时非零退出。浏览器侧验证:打开 web app,在 composer 输入 $,确认 skill 菜单出现且选中后能加载 skill。
较旧宿主上的 legacy 磁盘 patch(按需):
node patch-core.mjs
node patch-core.mjs --check
node patch-core.mjs --file <client.js>
DSH 升级到 0.1.7+ 且运行时 served patch 已生效时,资料说明通常无需重复执行 patch-core.mjs。
典型用法¶
- 按上文将插件加入目标 profile(或 DSH Desktop 的 generation),重启 harness / web。
- 在 composer 输入
$,从「Skills / 技能」菜单中选择条目;或直接在消息中手打$your-skill-name(token 以空白为边界)。 - 发送消息后,宿主在 pre-step 解析
$name并注入与/name等价的 skill 内容块。
与 / 的区别仅在于手势与菜单触发字符:/ 仍留给命令与原有 skill 路径;skill 的并行入口为 $。
适用场景与注意¶
适合谁:经常在 DSH composer 里调用 user-invocable skill,又希望与 / 宿主命令在输入习惯上分开的开发者;需要在 web 与 Desktop 上尽量保持 skill 补全与引用高亮一致的用户。
运行与信任边界:插件以当前 DSH 进程权限运行;宿主侧会 hook 模块 serving、监听 agent 生命周期并改写客户端 bundle 字节。安装前应阅读 源码 与 MIT 许可证,确认与自身安全策略一致。
维护与漂移:客户端 patch 与宿主扫描依赖 DSH 核心中的字面锚点;核心重构可能导致 check-core-surface.mjs 失败或运行时 warning。资料说明客户端在 controller 形态变化时会打 console error,宿主在 reference scan 不匹配时会 per-bundle warn 一次,但手打 $name 的注入路径仍可工作。
生态说明:DSH 社区插件目录 hosted 于 SkillHub 等独立站点,与 DeepSeek / 幻方无官方从属关系;本文介绍的是社区插件 dsh-skill-dollar,非官方应用商店条目。
链接¶
- SkillHub 目录页:https://www.skillhub.cn/plugins/d0ublecl1ck/dsh-skill-dollar
- GitHub:https://github.com/d0ublecl1ck/dsh-skill-dollar
经过上面的步骤,你可以在保留 / 命令语义的前提下,用 $name 走同一套 skill 目录、菜单与注入逻辑,并在较新宿主上通过运行时 bundle patch 尽量获得与 / 一致的 composer 引用展示。