← 返回列表
未验证
@winterchenhuan/dsh-skills-viewer
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/25 · 已提供中文文档
DeepSeek Harness Web 的只读技能设置页面插件
综合分
29
GitHub 分
29
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add winterhuan/dsh-skills-viewer该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-invariants用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
@winterchenhuan/dsh-skills-viewer
DeepSeek Harness Web 的自定义技能列表设置页。它在 Settings 面板注册一个“技能”页面,通过既有 skill.list wire RPC 获取当前普通 session 的用户可调用技能目录,并以只读列表呈现。
安装
使用 Harness 插件命令安装到 Web profile(dsh 与 pnpm 都需在 PATH 中,dsh plugin 会把参数转发给 pnpm):
dsh plugin --profile web add -w @winterchenhuan/dsh-skills-viewer
dsh web --dump-config # 确认 skills-viewer 层已生效
dsh web # 启动 Web GUI
-w(--workspace-root)标志是必需的:Web profile 目录本身是一个 pnpm workspace 根(pnpm-workspace.yaml 内容为 packages: [.]),不加该标志时 pnpm 会以 ERR_PNPM_ADDING_TO_ROOT 拒绝 add。dsh plugin 会把参数原样转发给 pnpm,因此该标志会直接透传。
该包声明了 dsh.bundle,因此 dsh plugin add 会自动插入 skills-viewer row,不需要手动修改 profile 的 cordis.patch.yml。该包也声明了 dsh.client,Web host 会据此加载预构建的浏览器 bundle lib/client.js。
开发
本仓库独立可构建:所有 @deepseek-ai/* 类型从 npm 上的已发布包解析,typecheck、测试、构建都不需要 DeepSeek Harness 源码 checkout:
pnpm install
pnpm run typecheck
pnpm test
pnpm run build
把本地构建装进 profile:在任何装有 dsh 的机器上执行 dsh plugin --profile web add -w /path/to/dsh-skills-viewer——只有挂载这一步需要 Harness CLI(dsh plugin 把参数转发给 pnpm,-w 是必须的,因为 Web profile 目录本身是 pnpm workspace 根)。
移除方式:
dsh plugin --profile web remove @winterchenhuan/dsh-skills-viewer
组合
这是纯 UI 插件。node half 的 apply 为空;browser half 从 ./client 导出,经 dsh.client manifest 发现,并在 @deepseek-ai/dsh-client-runtime、@deepseek-ai/dsh-client-ui-settings、@deepseek-ai/dsh-client-locale 和 @deepseek-ai/dsh-api-remotes 可用后注入。它注入 slots、locale 和 connection,再通过 ctx.slots.inject('settings.section', ...) 注册一个 settings.section 列表项(id skills,order 90),因此不依赖 declaration 顺序。
页面行为
页面从 useSessions 标准 prop 读取当前 session id 和当前 subagent address。当前导航指向普通 session 时,它调用 connection.api.skills.list({ sessionId }) 获取目录。技能发现按 session 作用域解析:composition、cwd 和 preset layer 都会影响可见技能,因此页面会在当前 session 变化时重新获取。没有当前 session,或当前导航指向 subagent address 时,页面显示空态且不调用 skill.list。如果选中的 session 尚未在 Host 侧连接,页面会短暂自动重试,随后显示重试按钮,而不是直接暴露原始 session-not-found 诊断。
每条技能行展示:
- name — kebab-case 标识符(等宽字体)
- 模型不可调用徽章 — 当 disable-model-invocation: true 时显示
- description — 路由描述
- whenToUse — 可选的额外路由说明(斜体)
列表按技能名升序排列。搜索框按 name、description 或 whenToUse 过滤(不区分大小写);当搜索收窄结果时计数行显示 M of N,无匹配时显示占位提示。
已知限制与后续工作
- 不预览技能正文 — 页面只列出摘要;加载技能正文仍需使用面向模型的 skill 工具。未来的内联预览可以调用新的 preview RPC。
- 没有刷新按钮或推送失效 — 页面会在 session 变化时重新获取,但不会手动刷新,也不会订阅 skills/change。扫码进群