Skip to content

Releases

v0.3.0 技能分类分组(≤10 类、可折叠)+ 自动生成带路径的技能索引 MD

Choose a tag to compare

@lnyuqian lnyuqian released this 07 Oct 06:58

技能列表按能力分类(≤10 类、可折叠),并自动生成带路径的技能索引 MD 文档。

新增

  • 能力分类(≤10 类):扫描时按有序规则给每个技能归入一个能力类别(飞书 / Lark、
    DSH / 插件、检索 / 抓取、图像 / 视觉、视频 / 音频、文档 / 表格、内容 / 发布、
    自动化 / n8n、开发 / 环境、其他)。规则先匹配技能名(前缀 + 关键词),名字未命中才用
    「描述专用别名」兜底;cli / git / search 这类通用词不参与描述兜底,避免抢走技能。
  • 面板分类分组 + 折叠:技能页签按分类分组,每个分类头可点击折叠 / 展开
    (▸/▾ + 分类名 + 数量);折叠状态按设备存 localStorage
    (dsh-skill-sidebar:cats:v1,默认全部展开)。搜索在各分类内生效、空分类不显示、
    置顶仍排在各分类最前。客户端自带一份与宿主一致的分类兜底规则,服务端未给
    category(实时目录条目、或尚未重启的旧宿主)时就地判定,分组始终成立。
  • 技能索引 MD 文档(自动同步):每次扫描后重写 skills.md(与 skills.json 同目录,
    默认 ~/.dsh/storages/dsh-skill-sidebar/skills.md):按分类分组,每行给出
    /技能名 调用语法、一句话能力与 SKILL.md 的绝对路径;启动命中缓存时也会重写。
  • 接口:/skillpanel/skills 与 /skillpanel/skills/refresh 新增 categories
    (分类显示顺序)与 docPath;每个技能条目新增 path 与 category。
  • 系统规则:~/.dsh/AGENTS.md 新增「四、技能索引文档」——需要找技能 / 快速调用 /
    查技能路径时,先读该文档再决定调用哪个技能。

实测

真实技能根目录扫描:94 个技能 / 9 个非空分类(飞书 / Lark 27、检索 / 抓取 37、
开发 / 环境 7、图像 / 视觉 6、内容 / 发布 5、DSH / 插件 3、文档 / 表格 3、自动化 / n8n 3、
视频 / 音频 3、其他 0)。

测试

  • test-host.mjs:68 项 —— 路径捕获与存在性、分类取值与「≤10 类」上限、skills.md
    内容(技能名 / 路径 / 分类标题 / 确定性重渲染)、路由新增字段、分类规则样例。
  • test-client.mjs:分类分组与计数、折叠 / 展开与 localStorage 记忆、默认展开、
    合并时继承服务端 category / path、搜索过滤后空分类隐藏、分类兜底规则样例。

升级

  • Web profile:重新执行 dsh plugin --profile web add <tgz 或 link:...> 后重启 dsh web 并硬刷新。
  • 桌面版:link 安装改代码后重启桌面版即可(宿主半部是模块级加载,不随页面刷新热更新;
    客户端半部按 Ctrl+R 即可生效)。

v0.2.3 技能面板图标换成素材库图标(斜杠 + 火花)

Choose a tag to compare

@lnyuqian lnyuqian released this 07 Oct 06:20

技能面板图标换成用户选定的素材图标。

变更

  • 图标换用素材库图标:标签头 chip、面板标题、「开始」指南页胶囊三处使用的图标,
    改为 assets/skill-panel.svg —— 取自用户图标素材库的「技能 1.svg」(斜杠 + 两颗火花)。
  • 该素材是 1024 单位的填充图标,因此内联时保留原 viewBox(0 0 1024 1024)并以
    currentColor 填充,明暗主题下自动跟随文字色;不再是之前的 24 单位描边图标,
    描边属性(strokeWidth / strokeLinecap / strokeLinejoin)一并移除。
  • 契约测试同步更新:断言 viewBox、fill="currentColor"、单条 path。

验证

  • assets/skill-panel.svg 与 lib/client.js 内联的 path 数据与源文件逐字节一致(946 字符、3 段子路径)。
  • node --check lib/client.js、node test-client.mjs、node test-host.mjs 全部通过。
  • 该图标在 16px chip 尺寸下仍清晰可辨(已按 16 / 24 / 32 / 48px 渲染核对)。

v0.2.2 自带 SVG 图标 / 隐藏关闭 X(常开)/ 自动打开更稳

Choose a tag to compare

@lnyuqian lnyuqian released this 07 Oct 01:31

面板外观与默认行为三项调整(客户端侧):

变更

  • 自带 SVG 图标:不再借用官方 IconSkillOutline16,改为插件自己的四角星火花图标
    (assets/skill-panel.svg,客户端内联为 currentColor 描边 SVG,自动跟随明暗主题)。
    标签头 chip、面板标题与「开始」指南页胶囊三处同时生效;随之去掉已无用的
    @deepseek-ai/dsh-client-ui-primitives 依赖。
  • 隐藏关闭按钮(常开):新增一条作用域受限的 CSS ——
    [data-dockkit-tab]:has([data-dsh-skills-chip]) [data-dockkit-tab-close]{display:none!important}。
    官方侧边栏的标签元素带 data-dockkit-tab、其关闭按钮带 data-dockkit-tab-close,
    而本插件的 chip 带 data-dsh-skills-chip,因此只隐藏技能面板自己的关闭 X,
    其他标签页的关闭按钮不受影响。纯 CSS 规则,标签重渲染后自动生效。
  • 默认自动打开:AUTO_OPEN 仍为 true(每个新会话打开一次),重试窗口由 25 次放宽到
    60 次(250ms 起、400ms 间隔,约 24 秒),桌面版冷启动较慢时也不会错过打开时机。

测试

test-client.mjs 新增 6 项契约断言(chip 标记、自绘 SVG、标题文本、常开规则及其作用域),
并移除官方 primitives 桩;node --check、test-client、test-host 全部通过。

安装

# Web profile
dsh plugin --profile web add link:<本包绝对路径>

桌面版(Electron 独占 desktop profile)用桌面自带 CLI 载体安装,见 README。

v0.2.1 — 去掉开发机路径,文档与说明改为平台无关

Choose a tag to compare

@lnyuqian lnyuqian released this 12 Sep 07:39

[0.2.1] - 2026-09-12

可移植性修正:去掉源码里只对开发机成立的绝对路径,并把文档与发布说明改成与机器、与平台无关的表述。

修复

  • 服务端不再写死某台机器的绝对路径:lib/index.js 里的请求跟踪日志原先硬编码到一个开发机路径,
    现已改为默认关闭 —— 只有显式设置环境变量 DSH_SKILL_SIDEBAR_TRACE=<绝对文件路径> 才会写入。
    该写入本来就在 try/catch 中(在别的机器上只会静默失败、不影响功能),但把绝对路径留在已发布的包
    既不合适,也会让人误以为插件依赖它。现在未设置该变量时不产生任何文件系统写入。

变更

  • README 的安装示例改为通用写法(link:<本包绝对路径>),不再出现某一台机器的具体路径;
    并新增「平台支持」一节。
  • CHANGELOG 的实测清单与升级指引改为与机器无关的表述:profile 补丁路径统一写作
    $DSH_HOME/profiles/web/cordis.patch.yml(Windows 默认 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml),
    不再描述某次实测的条目数量等本机细节。

平台支持

平台 状态
Windows 11 ✅ 已验证(DSH 0.1.5-rc.1)
macOS ⚠️ 未测试

插件只用 Node 的跨平台 API(node:path 的 join()、node:os 的 homedir())以及
DSH_HOME / DSH_AGENTS_HOME / DSH_SKILL_DIRS / DSH_SKILL_CACHE_DIR 等环境变量来定位文件,
不含平台专有路径,也不假设路径分隔符。客户端部分只在浏览器中运行,与操作系统无关。
升级到本版本无需改动配置:行为与 0.2.0 相同,只是不再有那个硬编码路径。

v0.2.0 — 迁移到 DSH 官方右侧边栏

Choose a tag to compare

@lnyuqian lnyuqian released this 12 Sep 07:31

[0.2.0] - 2026-09-12

重大更新:从第三方 dsh-better-sidebar 面板迁移到 DSH 官方右侧边栏。

DSH 0.1.5-rc.1 起官方自带可停靠标签页的右侧边栏
(@deepseek-ai/dsh-client-ui-sidebar-right),任何包都能通过公开的两段式接口往里注册标签类型。
本次把「技能」标签整体搬到官方侧边栏,并去掉了对第三方 betterSidebar 服务的依赖。

⚠️ 破坏性变更

  • 不再注册到 dsh-better-sidebar:插件不再调用 ctx.betterSidebar.registerTab,
    插件级 inject 中也不再有 betterSidebar。使用了第三方右侧面板的 DSH 里,技能标签不会再出现在那个面板。
  • dsh.client.inject 改绑官方包:由 dsh-better-sidebar 改为
    @deepseek-ai/dsh-client-ui-sidebar-right。该字段是 boot graph 的包依赖边,
    因此升级后必须重启 dsh web(只改 lib/client.js 则硬刷新即可,见下方「升级指引」)。
  • 对 DSH 版本有要求:需要 Web 端已内置 @deepseek-ai/dsh-client-ui-sidebar-right 的 DSH
    (0.1.5-rc.1 及以上)。更早的版本没有官方侧边栏,本插件无法注册。
  • 两个右侧面板不能同时启用:官方侧边栏与 dsh-better-sidebar 同时启用时会互相重叠 ——
    better-sidebar 的隐藏 Explorer 行会拦截官方面板上按钮的指针事件(实测「复制」按钮点不动),
    官方侧边栏因此无法正常使用。必须停用其中一个(推荐停用 better-sidebar,见「升级指引」)。
  • 官方默认页会改变:官方规则是「已注册的指南条目恰好只有一个时直接打开那个页面,否则打开『开始』指南页」。
    本插件新增了一个指南条目,因此官方登记的条目数从 1 变 2,空面板的默认页由「工作区文件」变为「开始」指南页。
    两者都能从指南页一键进入。

新增

  • 官方两段式注册:先在 ctx.sidebarRightTabs.register 声明页面类型
    (id: 'dsh-skill-sidebar'、kind: 'skills'、priority: 'extension'、title、guide),
    再在 keyed 座位 sidebar.right.pane.tab 与 sidebar.right.pane.tab.title 下以该 id 注册主体与标签头。
    实现路径与官方 @deepseek-ai/dsh-client-ui-sidebar-files 完全一致。
  • 指南页入口:类型自带一个 guide 条目(order: 20、标题「技能」、一行描述、官方技能图标
    IconSkillOutline16),官方「开始」指南页出现「技能」胶囊,点击即以 replaceTab 打开技能页。
  • 标签头座位:注册 sidebar.right.pane.tab.title,标签 chip 上显示技能图标 + 标签文字。
  • 有界重试的自动打开:官方侧边栏默认折叠且为空,且 ctx.sidebarRight.openTab
    在没有挂载的会话座位时会抛错(它不会往没人画的面板里写)。因此按会话做有界重试
    (250ms 起、最多 25 次),成功后本次页面加载内不再重复打开,用户手动关闭后也尊重其选择。
  • 生命周期接入:主体的 30 秒后台轮询改为由 useTabInfo().tab.visible 控制,
    并叠加 tab.signal.aborted 作为退出条件,标签关闭或插件卸载时能干净停下。
  • 可断言的 DOM 标记:主体根元素带 data-dsh-skill-sidebar="body",便于验证与排障。

变更

  • 组件契约适配:主体组件从 betterSidebar 的 props 形态切到官方座位形态 ——
    useTabInfo().tab.visible 取代 props.visible;sessionId 取代 props.scope.sessionId;
    ctx 改由座位的 inject 工厂提供。
  • test-client.mjs 重写:从「模块加载器格式 + 纯函数」扩展到完整契约测试 ——
    类型声明、两个座位的注册与 key、inject 列表、自动打开的重试与去重、主体在
    useTabInfo() 下的渲染,以及原有的合并/置顶/缓存等纯函数用例。
  • README 增补:新增「与官方侧边栏的契约」表(id / kind / 优先级 / 指南条目 / 座位 / 两面 inject)
    与默认页变化的说明。
  • cordis.patch.yml 注释同步为官方侧边栏口径。

移除

  • ctx.betterSidebar.registerTab 注册路径与 betterSidebar 依赖。
  • 隐藏标签关闭 × 的 better-sidebar 专用 DOM hack
    ([data-dsh-better-sidebar] [title="技能"] > button:last-child{display:none}):
    停用 better-sidebar 后该选择器必然失效,官方标签的关闭规则由官方统一管理。

修复

  • 测试脚本的相对导入路径:test-client.mjs 与 test-host.mjs 原先按
    ./dsh-skill-sidebar/lib/*.js 解析,在插件目录内直接运行会 ERR_MODULE_NOT_FOUND
    (相对导入以文件自身目录为基准,与 cwd 无关)。改为 ./lib/*.js 后,
    在插件目录内即可 node test-client.mjs / node test-host.mjs。

验证

两套测试均通过:

node test-client.mjs   # ALL CLIENT CHECKS PASSED
node test-host.mjs     # ALL CHECKS PASSED

并在真实 DSH Web GUI(默认地址 http://127.0.0.1:3080)逐项实测通过:

  • 标签确实渲染在官方面板内([data-dsh-skill-sidebar="body"] 位于 [data-sidebar-right-panel],
    且不在 [data-dsh-better-sidebar] 内);
  • 技能列表正常列出,条目数与页脚「本机 / 实时」诊断行一致;
  • 搜索过滤、无匹配提示、清空恢复;
  • 置顶排到最前并落 localStorage(dsh-skill-sidebar:pins:v1)、取消置顶恢复字典序;
  • 复制把 /技能名 写入剪贴板并显示对勾反馈;
  • 悬停弹出完整描述浮层,移开后消失;
  • 刷新按钮「刷新中… → 刷新」往返并且列表保持;
  • 点标签条的 + 打开指南页,官方「工作区文件」胶囊与本插件的「技能」胶囊并列出现。

升级指引

  1. 更新插件源码(或重装 link: 依赖)。

  2. 确认 DSH Web 端已内置官方侧边栏(DSH 安装目录下的
    node_modules/@deepseek-ai/dsh-client-ui-sidebar-right 存在)。

  3. 停用第三方 dsh-better-sidebar(可逆,别卸载):在 profile 的 patch 层
    cordis.patch.yml 中按行 id 禁用 —— 即 $DSH_HOME/profiles/web/cordis.patch.yml
    (Windows 默认 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml),行 id 取自该插件的 bundle patch:

    - id: better-sidebar
      disabled: true

    改完先校验 YAML 能解析,再重启 —— profile patch 语法错误会让宿主起不来。

  4. 重启 dsh web:dsh.client.inject 是 boot graph 的依赖边,只有重启才会重新组合。
    重启后硬刷新页面(Ctrl/Cmd+Shift+R)。

  5. 若仍需第三方右侧面板提供的其他能力(Office 查看器、终端、浏览器视图等),
    不要停用它 —— 改为让本插件与它共存,但要接受两个右侧面板重叠、点击被拦截的问题。

回滚:删掉上面那两行 patch 并重启即可恢复 dsh-better-sidebar;
把 lib/client.js 与 package.json 回退到 v0.1.0 并重启即可退回第三方面板版。