{"_id":"@dachengge/dsh-skill-catalog","_rev":"2-873dd8fa3394e943980c64476ea2b55d","name":"@dachengge/dsh-skill-catalog","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@dachengge/dsh-skill-catalog","version":"0.1.0","keywords":["dsh","dsh-plugin","skill","catalog","harness"],"author":{"url":"赵成成","name":"成哥聊AI"},"license":"Apache-2.0","_id":"@dachengge/dsh-skill-catalog@0.1.0","maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"6f012188439c3de038e25828cf5421f4eb44c079","tarball":"https://registry.npmjs.org/@dachengge/dsh-skill-catalog/-/dsh-skill-catalog-0.1.0.tgz","fileCount":11,"integrity":"sha512-KMDA/9pYJYsB8Rg57bFnPA1cRuN4Nd4HspEIptcLTWKU2V6gA7Ff2rPLOpbiJlbFtScqtgbx4H6rrjJXdw7htQ==","signatures":[{"sig":"MEQCIGhFqKfdrXLA4Oti9EaHCYe8R25KSL1+YVsah5Zx2BXNAiBzjJUmY6Y8EMOBIm8v+Y6cjPpYxeDpLa8pxsviTmsI9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":587730},"main":"./lib/index.js","type":"module","engines":{"node":">=22.19"},"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json","./dsh.plugin.json":"./dsh.plugin.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"ce8a3c426a1c87bd43a20407e183744a20df2695","_npmUser":{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"},"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/skill-catalog"},"_npmVersion":"11.6.2","description":"DSH 技能总览插件：设置页「技能总览」面板 + DSH 端口上的完整看板（/skills）。实时扫描 ~/.agents/skills，展示用途/触发词/边界/正文骨架/关联模型/验证级别。","directories":{},"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/dsh-skill-catalog_0.1.0_1789113873389_0.6149465314602294","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"_id":"@dachengge/dsh-skill-catalog@0.1.1","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"dist":{"shasum":"a75476bf50396dedba4a05c32f4487589632abd5","tarball":"https://registry.npmjs.org/@dachengge/dsh-skill-catalog/-/dsh-skill-catalog-0.1.1.tgz","fileCount":11,"integrity":"sha512-VezktXGnQfV97SsFzt+MAJSTlZXZ0Jb2XLe/EjWfKExs34CPhSwhm7vr8XDcB0H9O/BylpBDTCKtX+hOtsv3hQ==","signatures":[{"sig":"MEQCIG1Ad67mrE6JQLa49ec9t9p9oO/DjluvtYHXlFC20myQAiBjWao1MuE/E5VEqT4t8/3oq8X4dvqzoo2QZK8cA1kxmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCh7Vci7xmgQHcokLzN5SeJvJGSNSVgQlpK2auRALxc8wIgDJg9R34HIWBk77Wck0K1NBk6B/DSbgjVcXAtx8UyJCA="}],"unpackedSize":588916},"main":"./lib/index.js","name":"@dachengge/dsh-skill-catalog","type":"module","author":{"url":"赵成成","name":"成哥聊AI"},"engines":{"node":">=22.19"},"exports":{".":"./lib/index.js","./client":"./lib/client.js","./package.json":"./package.json","./dsh.plugin.json":"./dsh.plugin.json","./cordis.patch.yml":"./cordis.patch.yml"},"gitHead":"29f4a4ac9c17cd8804f142779a25aca439f39137","license":"Apache-2.0","version":"0.1.1","_npmUser":{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"},"homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","keywords":["dsh","dsh-plugin","skill","catalog","harness"],"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/skill-catalog"},"_npmVersion":"11.6.2","description":"DSH 技能总览插件：设置页「技能总览」面板 + DSH 端口上的完整看板（/skills）。实时扫描 ~/.agents/skills，展示用途/触发词/边界/正文骨架/关联模型/验证级别。","directories":{},"maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"_nodeVersion":"25.2.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-skill-catalog_0.1.1_1789114908298_0.37312063706567056"}}},"time":{"created":"2026-09-11T08:04:33.272Z","modified":"2026-09-11T08:21:48.597Z","0.1.0":"2026-09-11T08:04:33.535Z","0.1.1":"2026-09-11T08:21:48.397Z"},"bugs":{"url":"https://github.com/IdeoAllen/dsh-plugin/issues"},"author":{"url":"赵成成","name":"成哥聊AI"},"license":"Apache-2.0","homepage":"https://github.com/IdeoAllen/dsh-plugin#readme","keywords":["dsh","dsh-plugin","skill","catalog","harness"],"repository":{"url":"git+https://github.com/IdeoAllen/dsh-plugin.git","type":"git","directory":"packages/skill-catalog"},"description":"DSH 技能总览插件：设置页「技能总览」面板 + DSH 端口上的完整看板（/skills）。实时扫描 ~/.agents/skills，展示用途/触发词/边界/正文骨架/关联模型/验证级别。","maintainers":[{"name":"chengchengzhao","email":"chengchengzhao16@gmail.com"}],"readme":"# @dachengge/dsh-skill-catalog\n\nDSH 第三个自定义插件 —— **技能总览**。与 `@dachengge/dsh-cost-manager`（费用与余额）、\n`@dachengge/dsh-session-manager`（会话管理）出自同一套写法，界面与配色保持一致。\n\n## 提供什么\n\n| 入口 | 说明 |\n| --- | --- |\n| **运维看板 → 技能总览 页签** | `/board#skills`。运维看板由 cost-manager 提供，一条细页签栏 + iframe：**费用与余额 / 会话管理 / 技能总览**。切页签只切 display，iframe 不卸载，各页自动刷新继续跑。 |\n| **设置页 → 技能总览** | 面板形式，嵌在 DSH GUI 里，跟随 DSH 主题（浅色/深色自动适配）。**自适应卡片列表**，不是多列表格。 |\n| **`/skills`** | 完整看板（独立整页，与另两个看板的深色风格一致） |\n\n三个插件在设置页的排列顺序：**费用与余额（45）→ 会话管理（46）→ 技能总览（47）**。\n\n> 本插件**不单独占用侧边栏入口** —— 侧边栏「运维看板」按钮即可进入技能总览页签，\n> 避免出现一个按钮 + 一个裸链接并排的样式不一致（上一版的问题）。\n\n### 新增页签只改一处\n\n`工具/cost-manager/dsh-plugin/lib/board.js` 顶部的 `TABS` 数组：\n\n```js\nconst TABS = [\n  { id: 'cost',   title: '费用与余额', url: '/cost',   hint: '…' },\n  { id: 'dshm',   title: '会话管理',   url: '/dshm',   hint: '…' },\n  { id: 'skills', title: '技能总览',   url: '/skills', hint: '…' },\n]\n```\n\n页签栏、iframe、红点预检、localStorage 记忆、`#hash` 深链全部由这段配置驱动。\n\n## 展示什么\n\n- **是什么**：技能名 + 分类 + 来源（自建/上游）\n- **干什么用**：解析后的用途描述\n- **怎么用**：正文骨架（标题层级）+ 正文预览（截断到 2600 字符）\n- **触发条件**：触发词 chip\n- **什么时候别用**：边界声明\n- **关联模型**：从正文识别的模型（附用途注释）\n- **验证级别**：V0/V1/V2/V3 + 验证证据\n- **指标**：正文长度、描述长度、是否超目录注入上限、缺失依赖\n\n## 关键设计\n\n### 数据实时，不是快照\n\nhost 半区**每次请求现算**：直接扫 `~/.agents/skills/*/SKILL.md`，\n再尝试合并 `工具/skill-registry/registry.json` 补充验证字段。\n\n**所以技能一改，刷新页面就是最新的**，不存在构建产物陈旧的问题。\n注册表找不到也能正常工作，只是少了验证级别（界面会标注\"未找到\"）。\n\n### 显示\"无触发词\"不代表不会被调用\n\nDSH **没有触发词机制**——它把 `name + description` 注入上下文，由模型按语义判断是否加载。\n触发词只是写在描述里的示例。面板里对没有触发词的技能会明确说明这一点。\n\n### 描述长度纪律\n\nDSH 注入的 description 上限 **500 字符**（超出截断为前 497 + `...`）。\n`stats.truncated` / `stats.boundaryAtRisk` 会把超长和\"边界会被截断\"的技能数报出来 ——\n边界声明若落在 497 之后，模型根本看不到，等于白写。\n\n## 路由（挂在 DSH 自身端口上）\n\n```\nGET /skills                    完整看板页面\nGET /skills/api/catalog        实时技能目录（JSON）\nGET /skills/api/skill?name=    单个技能详情\nGET /skills/api/health         自检（技能数/注册表/页面是否就绪）\n```\n\n## 安装\n\nprofile 的 `package.json`：\n\n```json\n\"dependencies\": {\n  \"@dachengge/dsh-skill-catalog\": \"link:C:/Users/43594/Desktop/harness中心/工具/skill-catalog/dsh-plugin\"\n},\n\"dsh\": { \"profile\": { \"bundles\": [ \"...\", \"@dachengge/dsh-skill-catalog\" ] } }\n```\n\n`node_modules/@dachengge/dsh-skill-catalog` 需为 **Junction** 指向该目录（与另两个 `@dachengge` 插件同款）。\n\n改完 **必须重启 DSH**：`bundles` 是启动时组装的，\n`patchReload: \"live\"` 只对 `cordis.patch.yml` 的热更新生效。\n\n校验：`dsh --profile web --dump-config`（退出码 0 即组合成功）。\n\n## 维护\n\n渲染器**随包一起发布**，所以仓库是自包含的 —— 重建看板不需要作者本机的工具目录：\n\n```bash\nnode tools/build-html.mjs    # 渲染 技能总览.html\nnode tools/verify-html.mjs   # 静态校验（不需要浏览器）\nnode sync-core.mjs           # 复制进 lib/core/web/index.html\n```\n\n`tools/build-html.mjs` 按这个顺序找数据：\n\n1. 设了 `DSH_SKILL_CATALOG_DIR` → 用那个目录（作者的开发工作区在那里放预生成的\n   `catalog.json`，由 skill-registry 工具链产出，字段更全）；\n2. 否则**回退到本包自己的 `lib/catalog.js`**，它现场扫 `~/.agents/skills`。\n   不需要任何预生成数据文件，所以刚 clone 下来也能渲染成功 —— 只是技能数比装满的机器少。\n\n`sync-core.mjs` 只复制 HTML；host 半区会把页面里的 `./catalog.json`\n改写成 `/skills/api/catalog`，从而自动走真实时数据。页面**不缓存**，\n所以改完 HTML 刷新页面即可，不用重启 DSH。\n\n## 与社区插件 `@linxin666/dsh-client-ui-skill-explorer` 共存\n\n两个插件**定位不同、可以并存**，但有一处会互相影响，必须知道。\n\n| | 本插件（skill-catalog） | skill-explorer |\n| --- | --- | --- |\n| 定位 | **展示层**（是什么/怎么用/触发条件/关联模型/验证级别） | **管理层**（启用·禁用 / 创建 / 删除） |\n| 入口 | 运维看板第三页签 · 设置页面板 · `/skills` | 侧边栏「技能中心」 |\n| 写操作 | 无（只读） | 改写 frontmatter / 创建 / 移入 `.trash` |\n\n### ⚠️ 启停会作废验证结论\n\nskill-explorer 的「启用/禁用」是**改写 `SKILL.md` frontmatter 的\n`disable-model-invocation`** —— 那是真实修改技能文件。\n\n而本插件读的注册表用**内容哈希绑定验证结论**：文件一改，\n`V2 已验证` 会自动作废并降回 `V0`，下次 `scan` 会显示\n「验证作废：正文已变更」。\n\n**这不是 bug，是设计如此**（验证只对当时那份正文有效）。操作建议：\n\n```bash\n# 用 skill-explorer 做过启停/创建/删除之后\nnode 工具/skill-registry/refresh.mjs\n```\n\n跑一次让注册表重新对齐即可。\n\n### 遥测差异\n\n- 本插件：**零外发请求**（`verify-html.mjs` 有校验项守着这条）\n- skill-explorer：每个 UTC 日向 `dsh-market.com` 发一次匿名安装心跳\n  （仅 localStorage 随机 ID + 包名）\n\n## 已知边界\n\n- 设置面板最多显示前 150 个技能（超出提示用完整看板）\n- 正文预览截断到 2600 字符（完整内容看 `SKILL.md`）\n- 注册表路径按：环境变量 `DSH_SKILL_REGISTRY` → 插件相对路径 → 常见工作区路径 依次探测\n","readmeFilename":"README.zh.md"}