Repository navigation
Releases: 2026heshao/dsh-armory
Release list
dsh-armory v1.9.2
dsh-armory v1.9.2
专家从「一次性的会话身份」升级为 WorkBuddy 式的随时挂 / 换 / 摘。
专家:任何会话都能挂、能换、能取消
1.9.1 及之前,在会话里点专家会撞上宿主的硬规则:agent-preset/locked —— 预设只在空白会话可换(因为预设决定工具目录与提示词结构,中途更换会破坏前后一致)。于是已经聊了一半的会话挂不上专家,换专家更是无路可走。
这一版改了实现路径:人设与预设是两件事。
- 预设(preset)管的是整个会话身份:工具目录 + 提示词结构,因此宿主锁得对;
- 人设(persona)只是一段提示词 section。
dsh-persona自己的注释就写明它是 scope-only 的——挂进某个 agent 预设时只遮蔽「那一个会话」的部署人设;dsh-subagent给子会话装人设用的也是同一条路。
于是新增一条宿主通道,把专家人设作为本会话作用域的 deployment:persona-prefix section 注入:
- 不受
agent-preset/locked限制:会话已开过口也能挂、能换、能摘; - 只影响这一个会话,不动工具目录、不写任何持久化配置(摘掉即恢复默认人设);
- 反复点不同专家 = 直接替换,Host 侧先撤旧的再装新的,不再是一次性。
交互上:
- 点一个专家 → 挂上(提示「✓ 已挂到当前会话」);
- 再点另一个 → 直接换掉(提示「已替换原专家」);
- 点 chip 的 × → 立刻取消(提示「✓ 已取消本会话的专家」),之后还能再挂;
- 空白会话且该专家已被召唤时,优先走预设通道(连工具目录一起接管,语义更彻底);其余情况自动退化到人设通道。两条路覆盖了全部情形,所以「换专家」永远有出路。
状态显示也以宿主为唯一真源:组件重挂或切换会话时会向 Host 对账一次,因此通过预设选择器等其他入口挂上的专家,chip 同样会如实显示。
修复
- 召唤菜单里为「会话已开始」准备的那个「带某专家新建会话」按钮已移除——不再需要另起会话,直接在当前会话换即可。
工程
- 新增
test/session-persona.mjs并纳入npm test:用替身宿主钉住这条通道的关键不变量——section 名/order 必须与dsh-persona同款(同名才遮蔽)、同一会话可反复替换且旧 section 必被撤销、取消幂等、会话之间互不影响、死会话记录被回收、错误全部可读不静默,以及契约三处同步(Host method / typert / client descriptor,漏一处这条通道就恒 404——这是本项目踩过的坑)。 - 现有门槛(专家市场写链、一键升级判据、两组真机验证)不变,
npm test现在跑 5 组。
升级方式
# npm 安装
dsh plugin --profile <你的 profile> update dsh-armory
# 或在面板顶部的更新提示条上点「升级」(仅 registry 安装会显示按钮)
# 本地 file:/link: 安装(如插件开发者)
cd <你的 checkout> && git pull # 然后重启 DSH重启后在任意会话(包括已经聊了很久的)里点输入框工具行右侧的看板图标 → 专家,点一个即可挂上;再点别的直接换;点 chip 上的 × 取消。
dsh-armory v1.9.1
dsh-armory v1.9.1
修复 1.9.0 里三个用户可见的缺陷,并把「一键升级」的安全判据从宿主并不存在的字段换成真实来源。
如果你在 1.9.0 里点过专家召唤、见过菜单闪退或页面抖一下,这一版就是冲它们来的。
修复:专家召唤后挂载报「Unknown agent preset」
症状:召唤专家成功,但在会话输入框菜单里点专家挂载时红字报
挂载失败:Unknown agent preset: wbexpert-<plugin>。
根因:召唤写进 ~/.dsh/profiles/<profile>/cordis.patch.yml 的那一行是顶层裸条目。
宿主的补丁算法(applyEntryPatches)只认两种顶层指令——{id} 覆盖已有行、{insert} 插入新行。
裸插件条目被当成「覆盖 id = preset-wbexpert-… 的行」,目标不存在 → 打一条
patch: entry … not found 警告后整条跳过,预设从未注册,agentPresets.select() 自然找不到它。
(面板里的 MCP 行一直没这个问题,因为 MCP 写链始终包在 - insert: 里。)
修复:召唤行改写为规范的 - insert: 指令;同时自动迁移旧格式——升级后你已有的那行会被
就地改写成新格式(不必送还重召唤),写链仍保留注释与 !!js 行。
修复:会话已开始时专家无路可走
宿主硬规则:预设只在空白会话里可换(agent-preset/locked,因为预设决定工具目录与提示词结构,
中途更换会破坏前后一致)。1.9.0 遇到这种情况只给一句红字,等于死路。
现在提示条下方多一个按钮:带「某专家」新建会话 —— 自动新建空白会话 → 立即挂上该专家 →
跳转过去,一次点击完成,人设全程接管。
修复:召唤菜单两处体验问题
- 鼠标一过「技能」菜单就没了:开合判定原先挂在每个分类行上,而菜单顶部的提示条不属于任何行,
鼠标移进提示区就被判成「离开」。现在开合收归整个菜单,只有真正离开才关。 - 提示条让菜单变高时页面抖一下:菜单原先是绝对定位,变高时会撑动会话的滚动区。现在改为
视口浮层(position: fixed,按图标实测坐标定位),菜单再高页面也不动。
安全:一键升级不再可能覆盖本地安装
问题:1.9.0 的「一键升级」靠 listBundles() 返回行的 source 字段判断插件是不是 npm 装的,
而宿主根本不返回这个字段——判断恒为「是 npm 装的」。于是以 file: / link: 本地安装的用户
(插件开发者、从源码装的用户)一旦点「升级」,宿主执行的 pnpm add dsh-armory@^x 会把本地副本
替换成 npm 包,本地改动随之丢失。
修复:新增宿主接口 installInfo,直接读 profile package.json 里本插件那一行的真实 spec,
按前缀分类(registry / file / link / git / remote / path)。只有确认是 registry 安装才显示「升级」
按钮;本地安装与来源不明(新客户端配旧宿主)一律只提示、不写盘——宁可少一个按钮,也不做
可能毁掉用户环境的写操作。提示条也如实说明原因(「本地安装(file),请手动更新后重启」)。
工程:测试与 CI
- 新增 CI(
.github/workflows/ci.yml):push 到 main 与每个 PR 跑与发版逐字相同的门槛。
此前只有 tag 触发的release.yml,README 却声称「CI(push 到 main / PR)跑同一条门槛」——现在
这句话是真的。 npm test修好了:它以前是node --test,在没有node_modules的环境必然红(yaml解析不到),
而且会把test/migrate-profile-patch.mjs这类有副作用的迁移脚本当测试文件执行。现在改为显式
白名单入口test/run-all.mjs,跑三组:专家市场写链(33 断言)、一键升级判据(含本地安装必须被拒
的回归)、真实 profile 数据的真机验证。- 发版契约钉成断言:
package.json版本必须等于lib/whats-new.js的最后一条、且
.github/release-notes/v<版本>.md存在——以前这两条写在注释里号称由某个测试文件保证,而那个文件
并不存在。 - 文档口径修正:删掉
test/package-contract.test.mjs、npm test含「真机集成用例」、
pnpm install --frozen-lockfile(本仓库没有 lockfile)等失效描述,并在发布流程里写清
「两条工作流门槛必须逐字一致,改一处要改另一处」。
升级方式
# npm 安装
dsh plugin --profile <你的 profile> update dsh-armory
# 或在面板顶部的更新提示条上点「升级」(仅 registry 安装会显示按钮)
# 本地 file:/link: 安装(如插件开发者)
cd <你的 checkout> && git pull # 然后重启 DSH从 dsh-skill-mcp-board(1.9.0 之前的旧名)升级的用户,见
安装与升级。
dsh-armory v1.9.0
dsh-armory v1.9.0
npm 包名由
dsh-skill-mcp-board更名为dsh-armory(GitHub 仓库同步改名)。
老用户升级:dsh plugin --profile web remove dsh-skill-mcp-board后
dsh plugin --profile web add dsh-armory(或直接在 dsh-market 搜 armory 安装)。
入口偏好、悬浮按钮位置、更新提示状态自动迁移,无需重新设置。
专家直连(1.9.0 主题)
- 看板新增独立分类「专家」——直读 WorkBuddy 专家中心官方分发(429 位专家 / 15 个行业分类,ETag 缓存本地),分类筛选 + 关键词搜索 + 详情弹层(召唤前看人设正文、捆绑技能、「试试这样问」)。
- 召唤 = 往 profile 补丁写入一条独立 Agent 预设(标准工具/规划/压缩/委派原样保留,仅 persona 换成专家人设全文);新建会话选「WorkBuddy 专家 · …」即专家接管。多个专家可共存;写入走文件锁 + 版本校验 + 原子写,其余条目、注释与
!!js表达式原样保留。 - 挂载:输入框「@」召唤菜单点专家即可挂到当前会话;会话已开始(locked)时提供「带「专家」新建会话」一键路径(新建 → 选预设 → 自动跳转)。
- 捆绑技能:召唤时可勾选一并安装——本机 WorkBuddy 缓存完整就整目录复制到
~/.agents/skills/(即刻被发现),无缓存按 CDN 的 SKILL.md 兜底并如实标注来源。 - 送还 = 摘除预设与对应技能目录(热加载,无需重启)。团队型专家暂只读展示。
- 召唤菜单:技能 →
/技能名(真实调起 slash gesture)、MCP → 点名mcp__server__*工具前缀、专家 → 预设说明句;最近使用置顶(带「最近」徽章),120ms 出场动画(prefers-reduced-motion降级),fixed 定位实测视口坐标(越界自动翻转,页面零跳动)。
修复
- 专家召唤预设不注册(
Unknown agent preset: wbexpert-*):patch 顶层裸条目改为insert指令(宿主 applyEntryPatches 只认两种顶层指令),旧格式读出可识别、摘除可清理、写入自动迁移。 - 会话已开始时挂专家报
agent-preset/locked只给提示不给出口:新增「带「专家」新建会话」按钮。 - 挂专家失败静默:结果直接渲染在菜单内(成功绿色 ✓ / 失败红色,真实报错透出)。
- 「@」召唤菜单悬停误关(防抖上移到菜单根)与打开/变高时页面滚动跳动(fixed 定位 + 实测坐标)。
- 工具裁缝 404:Remote 描述符在 typert/client 两侧补齐(宿主方法自 1.7.0 起健在)。
- 专家市场搜索全库化(搜索词非空时忽略分类限定)+ 分页 60/页。
更名与迁移
- 包名 / bundle id / 侧栏入口(「技能 · MCP · 专家」)/ 更新检查仓库与环境变量(
DSH_ARMORY_DISABLE_UPDATE_CHECK)全部切换到 dsh-armory;更新检查 URL 修复为指向本仓库(此前 fork 残留指向上游,提示条永远看不到本插件的新版本)。 - localStorage 键自动迁移(
dsh-skill-mcp-board*→dsh-armory*):入口偏好、悬浮按钮位置、更新提示已读状态、whats-new 已读版本全部保留。
v1.8.2 · 军械库四合一:MCP / 技能 / 工具裁缝 / 三大市场
本版亮点
四个看板,一个入口:MCP 管理 · 技能管理 · 工具裁缝 · 市场直连。
市场(本版核心)
- WorkBuddy 连接器:直读官方分发源,316 个连接器(可装 242 个,CLI/鉴权型如实标注「仅展示」)
- SkillHub 技能:19 万+ 技能,搜索/排序/分页,逐文件 sha256 校验后装进
~/.agents/skills/,即刻生效 - 内置精选:47 个一手核实的 MCP 服务,分类 + 「只要免密钥」筛选
工具裁缝
- 扫描本机会话日志:每个工具的调用次数 / 错误率 / P50·P95 延迟 / Schema 上下文开销
- 死工具清单一键禁用(复用官方写链,随时可恢复)
修复
- 市场搜索框重做:胶囊造型 + 内嵌放大镜 + 一键清空
- 技能搜索「点按钮无反应」「输入不实时生效」两处缺陷(输入即搜,550ms 防抖,回车立即搜)
安装
dsh plugin --profile web add github:2026heshao/dsh-skill-mcp-board重启 DSH 即生效。桌面端把 --profile web 换成 --profile desktop。
技能版权归原作者所有;WorkBuddy / SkillHub 为第三方接口,字段可能随上游改版变化。