dsh-armory 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -2,13 +2,10 @@
2
2
 
3
3
  [中文](README.md) | English
4
4
 
5
- > **The all-in-one control board for DeepSeek Harness**: MCP servers · Skills · Experts · Plugins · tool-usage ledger · four markets (WorkBuddy connectors ×316 / curated built-ins ×47 / SkillHub skills ×190k+ / WorkBuddy experts ×429, plus CodeBuddy official plugins and the DSH community list), with browsing, search, one-click install and one-click summon.
6
- > This project is a fork of [Imzl-zl/dsh-mcp-manager-ui](https://github.com/Imzl-zl/dsh-mcp-manager-ui) (MIT, the original covered MCP only); this repo is [2026heshao/dsh-armory](https://github.com/2026heshao/dsh-armory),
7
- > upgraded from a pure MCP panel into a **MCP + Skills (with custom suites) + Experts + Plugins + Markets + Tool Tailor** board.
5
+ > **The all-in-one control board for DeepSeek Harness**: MCP servers · skills · experts · plugins · tool-usage ledger · four markets — browse, search, install and summon in one place.
6
+ > Forked from [Imzl-zl/dsh-mcp-manager-ui](https://github.com/Imzl-zl/dsh-mcp-manager-ui) (MIT) and extended into a full armory.
8
7
  >
9
- > **New in v2.0.0**: a Plugins page with three sources, one-click MCP OAuth authorization, credential prompts before install, an install-state ledger, and six categories for the skill board. See the [changelog](.github/release-notes/v2.0.0.md).
10
- > **New in v2.1.0**: community plugins now render their README in place (fetched on demand, cached to disk for 7 days, `javascript:` pseudo-links downgraded to plain text), and two long-standing traps are fixed — the instant-open snapshot no longer shadows the real list, and update probing no longer reports failures on machines where the primary source is unreachable. See the [changelog](.github/release-notes/v2.1.0.md).
11
- > **New in v2.2.0**: bundle skills into custom suites and expand the whole set as `/name` tokens from the composer menu; uninstall installed skills from the board (with source/path guards) and watch counts refresh live after market installs; the Tool Tailor gains a sampled "wire tax" trend so you can tell whether a registry change actually took effect; SkillHub's downloads sort falls back to in-page sorting because the upstream hangs. See the [changelog](.github/release-notes/v2.2.0.md).
8
+ > **New in v2.3.0**: the Tool Tailor gains a skill ledger that shows which skills were actually used and which were registered but never called. See the [changelog](.github/release-notes/v2.3.0.md).
12
9
 
13
10
  <p align="center">
14
11
  <a href="https://github.com/2026heshao/dsh-armory/stargazers"><img src="https://img.shields.io/github/stars/2026heshao/dsh-armory?style=social" alt="stars"></a>
@@ -37,7 +34,7 @@ Restart DSH, then open **Skills · MCP · Experts** from the global panel list a
37
34
  |---|---|
38
35
  | MCP config means hand-editing YAML with no feedback on whether it connects | Visual panel: status, tool schemas, enable/disable, reconnect — global & per-project scopes, project changes apply to live sessions instantly |
39
36
  | Installing skills means hunting for `SKILL.md` repos everywhere | **Direct markets**: SkillHub (190k+ skills), WorkBuddy connectors (316), 47 first-party-verified built-ins — search, filter, one-click install with per-file sha256 verification |
40
- | Every MCP's tool descriptions eat context tokens; zero-use tools sit there for free | **Tool Tailor**: scans local session logs for call counts / errors / latency per tool; prune dead tools with one click |
37
+ | Every MCP's tool descriptions eat context tokens; zero-use tools sit there for free | **Tool Tailor**: scans local session logs for per-tool call counts / errors / latency, plus a skill-level usage ledger; prune dead tools with one click |
41
38
  | Migrating from Claude/Cursor/VS Code means copying config by hand | Detects local configs from 11 clients and imports them with a preview |
42
39
  | OAuth-protected or key-protected servers and plugins just fail, with no hint why | **Plugin market** (CodeBuddy official + DSH community list) with per-entry source and installability, **one-click MCP OAuth** (RFC 9728 → 8414 → 7591 → 7636 PKCE → 8707, three callback fallbacks ending at "paste a token"), and a **credential prompt before install** that fills `${...}` placeholders so the server works on first connect |
43
40
 
@@ -77,6 +74,8 @@ Transport, connection parameters, call timeout and config source at a glance; be
77
74
 
78
75
  Four metric cards for the 30-day window (total calls / tools seen / zero-call MCP tools / overall error rate), one row per tool with calls, errors, error rate, Schema context tax and last use, and a persistent tailor suggestion at the bottom. Shows all tools with real call counts by default; "zero-call only (N)" narrows the view. Below the cards sits a **second trend**: the tool list actually sent to the model in every request (`request/header`), sampled per day, together with "how many times that list changed inside the window" and the timestamp of the latest one. When local logs are shorter than the selected window, the note bar says so plainly ("window N days, calls I could read span only M days"), so "this number hasn't moved in days" is attributable on screen instead of looking like a broken ledger:
79
76
 
77
+ Below the tool table is a new **skill ledger**: calls are grouped by the skill name in the `skill` tool's arguments, with calls / errors / last use per skill, and registered skills that were never invoked are added as zero-call rows — so it is obvious which skills are registered but unused. Calls whose arguments carry no skill name are counted separately on screen; when the registry is unavailable, the panel lists only skills seen in logs instead of faking a zero.
78
+
80
79
  ![Tool Tailor ledger](docs/images/tool-ledger.png)
81
80
 
82
81
  ### Experts — summoned list
@@ -223,6 +222,16 @@ No. Global edits only rewrite the entries declared by `@deepseek-ai/dsh-mcp-clie
223
222
  **Does uninstalling remove my configured MCPs?**
224
223
  No. Uninstalling the plugin leaves existing `@deepseek-ai/dsh-mcp-client` rows in the profile untouched.
225
224
 
225
+ ## Interface language
226
+
227
+ The plugin ships Chinese (source language) and English:
228
+
229
+ - **Precedence**: `localStorage['dsh-armory.locale']` (explicit override) -> DSH Settings -> General language -> `navigator.language` -> `zh-CN`.
230
+ - **Fallback**: `zh*` renders Chinese, `en*` renders English. Other languages (`ja`, `de`, `fr`, ...) have no translation yet and fall back to English instead of showing Chinese to users who cannot read it.
231
+ - **Covered**: panel UI, buttons / dialogs / empty states, the post-upgrade "What changed" body and where-to-find hints, and the built-in MCP catalog summaries / access notes / auth notes / category labels.
232
+ - **Not translated**: third-party content such as connectors, skills, experts, and community READMEs stays in the publisher's original language.
233
+ - **Force English**: run `localStorage['dsh-armory.locale'] = 'en-US'` in DevTools and reload; delete the key to follow the DSH language again. The host language is honored even on a Chinese OS (the panel no longer depends on the browser locale).
234
+
226
235
  ## Compatibility
227
236
 
228
237
  | Item | Verified |
package/README.md CHANGED
@@ -2,13 +2,10 @@
2
2
 
3
3
  中文 | [English](README.en.md)
4
4
 
5
- > **DeepSeek Harness 的一体化管理看板**:MCP 服务器 · 技能 · 专家 · 插件 · 工具使用账本 · 四大市场(WorkBuddy 连接器 316 个 / 内置精选 47 个 / SkillHub 技能 19 万+ / WorkBuddy 专家 429 位 / CodeBuddy 官方插件 + DSH 社区清单),浏览、搜索、一键安装、一键召唤。
6
- > 本项目 fork 并改写自 [Imzl-zl/dsh-mcp-manager-ui](https://github.com/Imzl-zl/dsh-mcp-manager-ui)(MIT,原项目仅 MCP 管理),现仓库为 [2026heshao/dsh-armory](https://github.com/2026heshao/dsh-armory),
7
- > 从纯 MCP 管理面板升级为 **MCP + 技能(含自定义套件)+ 专家 + 插件 + 市场 + 工具账本** 看板。
5
+ > **DeepSeek Harness 的一体化管理看板**:MCP · 技能 · 专家 · 插件 · 工具账本 · 四大市场,浏览、搜索、一键安装、一键召唤。
6
+ > fork 自 [Imzl-zl/dsh-mcp-manager-ui](https://github.com/Imzl-zl/dsh-mcp-manager-ui)(MIT),现已扩展为完整军械库。
8
7
  >
9
- > **v2.0.0 起**:新增「插件」页(三个来源)、MCP OAuth 一键授权、安装凭据引导、安装状态账本、技能看板六大分类。详见 [更新日志](.github/release-notes/v2.0.0.md)。
10
- > **v2.1.0 起**:社区插件点开即可就地读 README(按需拉取 + 7 天落盘缓存 + `javascript:` 伪协议链接降级),并修掉「秒开快照顶掉真实目录」「更新探测误报失败」两处。详见 [更新日志](.github/release-notes/v2.1.0.md)。
11
- > **v2.2.0 起**:技能可以打包成「自定义套件」,召唤菜单点一次即展开为整组 `/name`;Skill 看板支持卸载已安装技能,市场装 / 卸后角标与列表实时刷新;工具裁缝新增按天采样的「真实下发税」趋势,能直接看出改注册表有没有生效;SkillHub 下载量排序改为页内本地排序,修掉上游挂起导致的空白。详见 [更新日志](.github/release-notes/v2.2.0.md)。
8
+ > **最新 v2.3.0**:工具裁缝新增「技能账本」,直接看出哪些技能真被用过、哪些注册了却一次没调用。详见 [更新日志](.github/release-notes/v2.3.0.md)。
12
9
 
13
10
  <p align="center">
14
11
  <a href="https://github.com/2026heshao/dsh-armory/stargazers"><img src="https://img.shields.io/github/stars/2026heshao/dsh-armory?style=social" alt="stars"></a>
@@ -37,7 +34,7 @@ dsh plugin --profile web add github:2026heshao/dsh-armory
37
34
  |---|---|
38
35
  | MCP 配置要手改 YAML,改完不知道连没连上 | 可视化面板:状态、工具 Schema、启停、重连,全局与项目双作用域,项目级改完即对存活会话生效 |
39
36
  | 装技能要去各处翻 `SKILL.md` 仓库 | **市场直连**:SkillHub 19 万+ 技能、WorkBuddy 316 个连接器、47 个一手核实的内置服务,搜索/筛选/一键安装,逐文件 sha256 校验 |
40
- | 每个 MCP 的工具描述都在吃上下文 token,零调用的工具白白占位 | **工具裁缝**:扫描本机会话日志统计每个工具的调用/错误/延迟,死工具清单一键禁用 |
37
+ | 每个 MCP 的工具描述都在吃上下文 token,零调用的工具白白占位 | **工具裁缝**:扫描本机会话日志统计每个工具的调用/错误/延迟,并给出技能维度的使用账本;死工具清单一键禁用 |
41
38
  | 从 Claude/Cursor/VS Code 迁移要逐条抄配置 | 自动检出 11 种客户端的本机配置,预览后一键导入 |
42
39
  | 插件散在宿主自带、CodeBuddy 官方、社区清单三处,格式与可装性各不相同 | **插件页**:三个来源并进一个可搜索目录并标明可装性,安装统一走宿主 `pluginManager`,装完明确提示需重启 |
43
40
  | 远端 MCP 要 OAuth,而官方 client 只认静态 headers,只能手搓 token | **一键授权**:按 RFC 9728/8414/7591/7636/8707 走完发现 → 注册 → PKCE → 回调 → 换 token,回调通道三级降级(loopback / 粘贴回调地址 / 手贴 token),到期自动刷新 |
@@ -63,6 +60,8 @@ dsh plugin --profile web add github:2026heshao/dsh-armory
63
60
 
64
61
  30 天窗口四张指标卡(调用总次数 / 出现过的工具 / 零调用 MCP 工具 / 整体错误率),逐工具列出调用、错误、错误率、Schema 上下文税与最后使用时间,底部常驻裁缝建议。默认显示全部工具与真实调用次数,需要时点「只看零调用(N)」收窄。指标卡下方是**第二条趋势**:按天采样日志里每次请求真实下发的工具清单(`request/header`)并算出它的税,同时给出「窗口内下发清单变过几次」和最近一次的时间;说明栏还会在本机日志短于所选窗口时直接印出「窗口 N 天,读到的调用记录只跨 M 天」,让「数字几天没变」这件事在屏幕上就能归因:
65
62
 
63
+ 工具表下方新增**技能账本**:按 `skill` 工具调用参数里的技能名统计调用 / 错误 / 最后使用,并把当前注册表中零调用的技能补成 0 行——哪些技能注册了却一次没被调用,一眼可见。参数里没有技能名的调用单独计数上屏;注册表不可用时只列出日志里出现过的技能,不伪造 0。
64
+
66
65
  ![工具裁缝账本](docs/images/tool-ledger.png)
67
66
 
68
67
  ### 专家 — 已召唤清单
@@ -238,6 +237,16 @@ dsh plugin --profile web remove dsh-armory
238
237
  **卸载后我配置的 MCP 会消失吗?**
239
238
  卸载插件不会删除 profile 里已有的 `@deepseek-ai/dsh-mcp-client` 条目;项目的 `.dsh/mcp.json` 也留在原处(它本来就是普通 JSON 文件)。
240
239
 
240
+ ## 界面语言
241
+
242
+ 插件提供中文(源语言)与英文两种界面:
243
+
244
+ - **优先级**:`localStorage['dsh-armory.locale']`(显式覆盖)→ DSH「设置 → 通用」里的语言 → 浏览器 `navigator.language` → `zh-CN`。
245
+ - **回落规则**:`zh*` 显示中文,`en*` 显示英文;其他语言(`ja` / `de` / `fr` 等)目前没有译文,统一回落英文,而不是把中文丢给看不懂的用户。
246
+ - **覆盖范围**:面板 UI、按钮 / 对话框 / 空状态、升级后的「本次更新」正文与功能指路,以及内置 MCP 目录的摘要 / 接入说明 / 认证说明 / 分类标签。
247
+ - **不翻译**:连接器、技能、专家、社区 README 等第三方内容保持发布方原文。
248
+ - **强制英文**:在 DevTools 执行 `localStorage['dsh-armory.locale'] = 'en-US'` 后刷新;删除该键即重新跟随 DSH 语言。宿主设置的英文在中文系统上同样生效(不再依赖浏览器语言)。
249
+
241
250
  ## 兼容性
242
251
 
243
252
  | 项目 | 已验证 |
@@ -252,20 +261,20 @@ dsh plugin --profile web remove dsh-armory
252
261
 
253
262
  ```sh
254
263
  npm install --no-save yaml@2 eslint@9 # 测试与风格检查的唯一裸依赖(运行依赖全部由宿主提供)
255
- npm test # 全 40 套件(与 CI / 发版门槛同一条)
264
+ npm test # 全 42 套件(与 CI / 发版门槛同一条)
256
265
  npm run lint # ESLint:no-undef / no-unused-vars / no-empty 等
257
266
  npm run test:e2e # 可选:用宿主补丁算法验证专家预设进入组合树
258
267
  dsh --profile web --dump-config # 看 profile 的有效配置
259
268
  dsh web # 起 Web 做真实操作验证
260
269
  ```
261
270
 
262
- `npm test` 跑的是 `test/run-all.mjs`,依次执行 **40** 个独立套件(各自是独立 node 进程,任一非零退出即整体失败)。套件是显式白名单而非 `node --test` 自动发现——`test/` 下还有带副作用的迁移脚本与需要宿主模块的端到端脚本,自动发现会误跑。
271
+ `npm test` 跑的是 `test/run-all.mjs`,依次执行 **42** 个独立套件(各自是独立 node 进程,任一非零退出即整体失败)。套件是显式白名单而非 `node --test` 自动发现——`test/` 下还有带副作用的迁移脚本与需要宿主模块的端到端脚本,自动发现会误跑。
263
272
 
264
273
  | 分组 | 套件 | 覆盖 |
265
274
  | --- | --- | --- |
266
275
  | 账本与配置层 | `tool-ledger` `mcp-config` | 工具账本的 zstd/缓存/尺寸闸门;MCP 配置归一化与 patch 往返 |
267
276
  | 契约与入口 | `contract-consistency` `client-entry` `host-import-sources` | 面板可调方法必须在 typert 声明 / client 契约数组 / 宿主方法集三处同时存在;三个入口「全关」不可表达;VS Code `${input:}` 降级 |
268
- | 客户端质量 | `client-i18n` `i18n-coverage` `error-boundary-copy` `persona-truncate` `tailor-window` | 中文皆包 `t()`;en-US 字典双向差集;崩溃详情可复制;persona 4000 预览阈值;工具裁缝时间窗四档 |
277
+ | 客户端质量 | `client-i18n` `i18n-coverage` `whats-new-i18n` `mcp-catalog-i18n` `error-boundary-copy` `persona-truncate` `tailor-window` | 中文皆包 `t()`;en-US 字典双向差集与 zh/非 zh 回落;更新日志与内置目录英文覆盖逐条对齐(含缺译文回落);崩溃详情可复制;persona 4000 预览阈值;工具裁缝时间窗四档 |
269
278
  | 工具裁缝趋势(2.2.0) | `tailor-timeline` `tailor-tax-ui` `tailor-cache-line` | 真实下发税的时间维度与跨度归因(无线上数据必须为 null 而非 0);裁缝新字段在界面上的接线(vm 真跑源码片段);账本缓存行只剩读数(「清空缓存」按钮已删,钉住不许复活) |
270
279
  | 自定义套件(2.2.0) | `suites-registry` `suites-client` | 整集合覆盖 / 幂等 / 拒绝与截断两态;id 归属契约(保存后不分裂)、引用套件展开为多个 `/name`、三级写通道降级 |
271
280
  | 技能集合(2.2.0) | `skill-remove` `skill-refresh` | 卸载来源白名单与路径边界(根自身 / `..` 穿越 / 跨来源根 / 符号链接只删链接);装 / 卸后角标与看板实时刷新、乱序回包守卫 |