前言¶
在 DSH 里开发或调试智能体时,技能往往来自多处:项目内的 .dsh、用户侧的 .agents、bundle 内置条目,还有运行时产生的虚拟项。目录一长,很难一眼分清某条技能从哪来、当前是否会对模型或 / 菜单生效。若要在不删文件的前提下临时关掉某个技能,通常只能改配置或挪文件,操作成本高,也不便于对比前后行为。
下面介绍维护者 GnepNus 发布的 dsh-skills-panel-toggle(社区目录分类为 admin-security)。它在 Harness Web UI 左侧提供技能面板,列出当前会话可见的技能,并支持逐个禁用或启用;状态写在 profile 目录内,不改动磁盘上的技能描述文件。
这是什么¶
dsh-skills-panel-toggle 是一个面向 Web profile 的 DSH 插件(npm 包名 dsh-skills-panel-toggle,当前版本 1.0.0,许可证 MIT)。一句话定位:侧边栏面板,浏览当前 scope 下的全部技能,并用开关控制是否在模型技能目录与用户 / 调用路径中可见。
插件以 bundle 形式分发,依赖 DSH >= 0.2.2-rc.1,并假定 profile 已挂载技能注册表(ctx.skills,来自 @deepseek-ai/dsh-skill)与 Web 服务器。DeepSeek Harness 生态以「一切皆插件」为思路;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
列表与过滤¶
从 Web UI 左侧边栏的技能图标打开面板。每一行展示:
- 技能名称;
- 发现来源(如
project · .dsh、user · .agents、bundled等); - 路由描述、说明文案;
- 技能说明文件的绝对路径(描述下方等宽小字,悬停标题可看完整路径;无对应文件的虚拟或运行时条目不显示路径);
- 仅限单一界面时的
用户/模型标记; - 启用 / 禁用开关。
面板顶部搜索框可按名称和描述过滤。
禁用与启用的效果¶
禁用某个技能会从两处消费注册表的视图中移除:
@deepseek-ai/dsh-tool-skill面向模型的技能目录——agent 看不到也无法通过skill工具加载;/菜单与字面量/name调用——用户也无法直接调用。
重新启用后,在下一次目录刷新时恢复。磁盘上的技能文件不会被修改;被禁用的名称记录在插件自己的状态文件中。
实现要点(便于排障)¶
main槽位键skills-panel负责页面;匹配的sidebar.panellist提供侧边栏图标。- Host 提供同源 API:
GET /skills-panel/api/state、POST /skills-panel/api/toggle,并拒绝服务不认可的对端请求。 - 列表读取活跃会话所见 scope:优先活跃根 agent 的 scope,否则默认预设的常驻 scope。技能 provider 挂在 agent 预设 scope 内部,因此仅靠 Host 全局 provider 读不到目录,也无法单独遮蔽某个名称。
- 禁用名单持久化为 profile 目录下的
skills-panel/state.json,并保存渲染隐藏条目所需的描述与调用标志。 - 对每个活跃 agent(含激活后新建的),插件在该 agent 的 context 注册技能提供者(候选排序
0,两种调用策略均关闭),遮蔽层优先于 agent 预设 provider;agent 或插件卸载时释放注册。
安装与启用¶
需要已安装 dsh >= 0.2.2-rc.1。在 Web 场景下,对 web profile 执行官方安装命令:
dsh plugin --profile web add git+https://github.com/GnepNus/dsh-skills-panel-toggle.git
也可在 Web UI 打开 Plugins → Add plugin,填入同一 Git 地址(同样支持 tarball 和本地路径),安装完成后点击 Enable now。插件管理器会把 dsh-skills-panel-toggle 加入该 profile 的 bundle 列表并实时生效。
安装成功后,左侧边栏会出现技能图标;点击即可打开面板。
典型用法¶
- 确认当前 profile 已启用本插件,且挂载了
ctx.skills与 Web 服务。 - 打开 Harness Web UI,点击左侧技能图标进入面板。
- 用搜索框定位目标技能,核对来源与说明文件路径(如有)。
- 关闭开关以禁用;观察下一次目录刷新后,模型侧与用户侧是否均无法使用该技能。
- 需要恢复时重新打开开关;通过面板 API 路径切换会立即生效。
若没有 profile 目录,面板仍可列出技能,但无法持久化开关状态。
适用场景与注意¶
适合谁: 需要在本地或团队 Web Harness 中清点技能来源、对比 bundle 与项目技能,或在不改仓库文件的前提下临时屏蔽某技能(例如验证「去掉某 skill 后 agent 行为」)的开发者与管理员。
运行与信任边界: 插件以当前 DSH 进程权限运行,并读写 profile 目录下的状态文件。安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认与自身安全策略一致。
已知限制(摘自 README):
- 面板反映的是某一种会话组合的目录(活跃根 agent,或无活跃会话时的默认预设);仅由其他预设挂载的技能,需在该预设成为活动会话预设后才会出现。
- 开关作用于运行中会话的下一次目录刷新,不会改变当前步已组好的目录。
- 若直接改
skills-panel/state.json或手工重新启用,需插件重新加载后 provider 才能感知;通过 API 则立即生效。
上游在 node test/host.test.mjs 与 node test/client.test.mjs 中覆盖目录列举、遮蔽优先级、持久化与鉴权等路径;完整行为以仓库 README 与测试为准。
结尾¶
dsh-skills-panel-toggle 把「当前能看见哪些技能、从哪里来的、是否对模型和用户可调」集中到一个 Web 侧边栏,用开关完成软禁用,适合调试与治理并重的 Harness 使用方式。