🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

技能用量面板 Doctor-Pan-code/dsh-useof-skill-panel

DeepSeek Harness
Doctor-Pan-code19 天前有提交已提供中文文档扫描:含敏感能力

统计每轮对话调用的技能,并可直接装卸更新

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Doctor-Pan-code/dsh-useof-skill-panel
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/03·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 19 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 84 处,展示前 43 条)
  • 读取本地文件
    src/index.js:275
    if (!existsSync(file)) return
  • 读取本地文件
    src/index.js:276
    const parsed = JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    src/index.js:289
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    src/index.js:290
    writeFileSync(file, `${JSON.stringify(Object.fromEntries(translations), null, 2)}\n`, 'utf8')
  • 读取本地文件
    src/index.js:392
    if (!existsSync(file)) return ''
  • 读取本地文件
    src/index.js:393
    const match = new RegExp(`^${key}:[ \\t]*(.+)$`, 'm').exec(readFileSync(file, 'utf8'))
  • 读取本地文件
    src/index.js:406
    if (!existsSync(file)) return ''
  • 读取本地文件
    src/index.js:407
    const source = readFileSync(file, 'utf8')
  • 读取本地文件
    src/install.js:544
    if (localTree.length === 2 && (isAbsolute(localTree[0]) || existsSync(localTree[0]))) {
  • 读取本地文件
    src/install.js:557
    if (isAbsolute(raw) || existsSync(raw)) {
  • 读取本地文件
    src/install.js:654
    for (const entry of readdirSync(dir, { recursive: true, withFileTypes: true })) {
  • 写入本地文件
    src/install.js:657
    chmodSync(join(entry.parentPath ?? dir, entry.name), 0o666)
  • 删除本地文件递归
    src/install.js:667
    rmSync(dir, { recursive: true, force: true, maxRetries: 3, retryDelay: 120 })
  • 读取本地文件
    src/install.js:686
    for (const entry of readdirSync(tmpdir(), { withFileTypes: true })) {
  • 读取本地文件
    src/install.js:690
    if (now - statSync(dir).mtimeMs < maxAgeMs) continue
  • 写入本地文件
    src/install.js:755
    mkdirSync(skillsRoot, { recursive: true })
  • 读取本地文件
    src/install.js:764
    const exists = (name) => existsSync(join(skillsRoot, name))
  • 写入本地文件
    src/install.js:802
    mkdirSync(dirname(to), { recursive: true })
  • 写入本地文件
    src/install.js:805
    renameSync(from, to)
  • 写入本地文件
    src/install.js:813
    renameSync(staging, to)
  • 写入本地文件
    src/install.js:999
    mkdirSync(trashRoot, { recursive: true })
  • 删除本地文件递归
    src/install.js:1000
    rmSync(backup, { recursive: true, force: true })
  • 删除本地文件递归
    src/install.js:1002
    rmSync(target, { recursive: true, force: true })
  • 删除本地文件递归
    src/install.js:1303
    rmSync(stage, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    src/install.js:1419
    const child = spawn(gitBinary, ['--version'], { stdio: 'ignore', windowsHide: true })
  • 执行外部命令来自配置/变量
    src/install.js:1442
    child = spawn(cmd, args, { cwd, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] })
  • 删除本地文件递归
    src/install.js:1591
    rmSync(stage, { recursive: true, force: true })
  • 删除本地文件递归
    src/install.js:1679
    rmSync(target, { recursive: true, force: true })
  • 发起网络请求
    lib/client.js:5448
    response = await fetch(path, {
  • 发起网络请求
    lib/client.js:5465
    response = await fetch(path, { headers: { accept: 'application/json' }, cache: 'no-store' })
  • 发起网络请求
    lib/client.js:5489
    response = await fetch(url, { headers: { accept: 'application/json' }, cache: 'no-store' })
  • 写入剪贴板
    lib/client.js:6164
    navigator.clipboard.writeText(text).then(() => finish(true), () => finish(false))
  • 读取本地文件
    src/provenance.js:90
    entries = readdirSync(current, { withFileTypes: true })
  • 读取本地文件
    src/provenance.js:104
    info = statSync(full)
  • 读取本地文件
    src/provenance.js:122
    digest = hashText(readFileSync(full))
  • 写入本地文件
    src/provenance.js:242
    writeFileSync(staging, serializeRecord(record), 'utf8')
  • 写入本地文件
    src/provenance.js:243
    renameSync(staging, file)
  • 删除本地文件
    src/provenance.js:246
    rmSync(staging, { force: true })
  • 读取本地文件
    src/provenance.js:292
    if (!existsSync(file)) return null
  • 发起网络请求
    src/client/api.js:273
    response = await fetch(path, {
  • 发起网络请求
    src/client/api.js:290
    response = await fetch(path, { headers: { accept: 'application/json' }, cache: 'no-store' })
  • 发起网络请求
    src/client/api.js:314
    response = await fetch(url, { headers: { accept: 'application/json' }, cache: 'no-store' })
  • 写入剪贴板
    src/client/install.js:202
    navigator.clipboard.writeText(text).then(() => finish(true), () => finish(false))
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

每轮对话都审计 DeepSeek Harness 的技能,外加应用内技能管理器。基于 dsh-echocat-skill-panel 分支,去掉了输入框条。

README

由 DeepSeek 最新模型翻译生成
dsh-useof-skill-panel 本仓库是 dsh-echocat-skill-panel 的 fork,署名与出处保留。 与原版同时安装、互不干扰,功能上唯一的区别是删掉了输入框上方那条摘要横栏(conversation.input.dock)——组件与注册一并删除,所以那条横栏根本不会被挂载。 面板、侧边栏入口、装卸面板、背景/主题、宿主侧全部与原版逐字一致。 代价只有一个:原横栏是唯一能往输入框里插入 /技能名 的位置,所以一键插入技能名的功能没有了。 要看那条横栏,启用原版(dsh-echocat-skill-panel@5.1.3)即可 —— 两个插件可以并存。 v5.1.4 · DSH Desktop Beta 的 cordis 插件:统计每轮对话用到了哪些 skill,并让你在应用里直接装卸、更新它们。 判定不依赖模型自觉 —— 插件从会话事件流推导本轮调了哪些 skill(模型自动、你手动 /name、或一个都没用),模型忘了说也照样报。 面板 两个界面共用一份数据: | 位置 | 说明 | | 左栏图标 | 常驻入口,点它在中间打开面板(sidebar.panellist,order 60) | | 中栏面板 | 完整报告 + skill 目录(main) | 与原版的可视差异:本 fork 只注册上面两个座位。
展开完整文档(README 剩余 1 节)
dsh-useof-skill-panel

本仓库是 dsh-echocat-skill-panel 的 fork,署名与出处保留。
与原版同时安装、互不干扰,功能上唯一的区别是删掉了输入框上方那条摘要横栏(conversation.input.dock)——组件与注册一并删除,所以那条横栏根本不会被挂载。
面板、侧边栏入口、装卸面板、背景/主题、宿主侧全部与原版逐字一致。

代价只有一个:原横栏是唯一能往输入框里插入 /技能名 的位置,所以一键插入技能名的功能没有了。
要看那条横栏,启用原版(dsh-echocat-skill-panel@5.1.3)即可 —— 两个插件可以并存。

v5.1.4 · DSH Desktop Beta 的 cordis 插件:统计每轮对话用到了哪些 skill,并让你在应用里直接装卸、更新它们。

判定不依赖模型自觉 —— 插件从会话事件流推导本轮调了哪些 skill(模型自动、你手动 /name、或一个都没用),模型忘了说也照样报。

面板

两个界面共用一份数据:

| 位置 | 说明 |
| 左栏图标 | 常驻入口,点它在中间打开面板(sidebar.panellist,order 60) |
| 中栏面板 | 完整报告 + skill 目录(main) |

与原版的可视差异:本 fork 只注册上面两个座位。原版的第三个座位——输入框上方的摘要横栏——已整体移除。

一键安装

把作者给的地址整个粘进来就行:

https://github.com/owner/repo/tree/main/skills/my-skill

仓库主页、仓库里的文件夹链接、SKILL.md 链接、zip 直链、owner/repo、SSH 地址都认 —— host 自己判断该克隆还是该下载,分支与子目录从地址里解析,不用你填三个框。也可以上传 .md/.zip,或直接粘贴整篇 SKILL.md。

同名不会静默覆盖:先备份再替换。装错了能删,删掉的进备份目录,永不硬删。

安装面板

背景自定义(4.4)

面板可以有背景。报告右上角的「背景自定义」打开一张设置面板,左侧是实时预览,改一下看一眼,不满意随时取消 —— 预览、取消、恢复默认是三件不同的事,不会"改了就算数"。

背景自定义

- 四类样式:液态、柔和渐变、纯色、本地图片;六套低饱和预设(柔柔银蓝、珍珠白、紫棠、暖砂灰、深色金属、青瓷)直接挑一个开始。
- 每个滑块都真的作用于背景:主色 / 辅助色 / 高光色,明暗、亮度、饱和度、对比、金属高光、柔化、遮罩、速度、形变、指针反馈 —— 而不适用的选项会隐藏,不是摆在那里让你调了没反应。
- 图片在本机处理:接受 JPG/PNG/WebP(上限 8 MB),在本机缩到长边 1920 以内,支持铺满裁切 / 完整显示 / 拉伸与位置。图片和设置单独存在客户端数据库里,不上传、不改动 skill 数据、不碰宿主配置。
- 只影响当前客户端:设置跨本插件的各个表面共享、刷新后保留,但不宣称跨设备同步 —— 因为它确实不跨。
- 静态模式下背景不持续渲染;隐藏、卸载和系统"减少动态"仍然照常生效。

装了之后能更新(4.0)

问题:3.0 把地址用一次就丢了(git 克隆还会被删掉)。作者发了修复,你无从判断新旧,只能删了重装 —— 而删除是移动到备份。

做法:安装时把来源写进该 skill 自己的 .echocat.json:地址、分支、子目录、安装时的 commit、以及一份内容指纹。于是:

- 卡片上多一行来源。远端有新 commit 时标成「可更新」,点两下即替换,旧版本先进备份。
- 判断只跑一次 git ls-remote,不重新下载内容;来源固定在某 commit 上时不会被误报成"有新版"。
- 你手改过这个 skill 的文件时,确认文案会明说"更新会覆盖它们" —— 这是唯一会丢改动的场景。
- 手工装的、或 2.x/3.0 装的 skill 没有这条记录,卡片上给一个「标记来源」,填一次地址即纳入更新。
- 中文显示名不受影响:更新沿用你为该 skill 设的 display-name-zh。

界面

- 宽度跟着界面缩放:面板的宽度由宿主自己的输入框宽度推导(--dsh-composer-card-max-width 减 16px),永远比输入框窄,并且和输入框共享同一条中轴 —— 宽窗口、窄窗口、嵌入式布局都对。
- 一套完整的设计语言:四个表面台阶(画布 / 卡片 / 抬升 / 下沉)、一个强调色(靛蓝,只用于主操作、选中和"有东西可做")、五级字阶(10.5 → 26px,字号越大字距越紧)、三级投影(每级两层低透明度叠加),发丝线用 color-mix 从墨色推导。
- 1006 条具名调整:239 项行为打磨(polish.js)+ 767 项设计重做(design.js),全部是带名字和理由的数据记录,样式表由它们生成,测试逐条核对真的生效。
- 插件自己也能检查更新:面板头部有一组按钮 —— 「检查更新」问 npm 与 GitHub 谁更新(10 分钟缓存,只有点击才联网),旁边是 GitHub 发布页跳转。查到新版本时按钮带强调色和一个小圆点,头部还会直接写出「可更新 x.y.z」;"查不到"和"已是最新"是两句不同的话。
- skill 名字一行显示全:卡片是三行结构(名字行 / 说明 / 按钮行)。名字独占整行并且会换行、不会被省略号截断 —— 之前它和六个按钮抢一行,长名字只剩几个字符加省略号。
- 每个 skill 一个开关:停用会把目录移出 DSH 监视的 skills 目录 —— 模型真的加载不到它,而文件一个不少,随时一键启用回来。已启用与已停用分两组列出,停用的卡片仍可改名、查来源、更新、删除。
- 深浅两套都验过:深色盘同时挂在系统偏好与应用内主题两条信号上;所有文字色都按 WCAG 算过对比度(正文 18.2:1、次级 6.4:1、元数据 5.3:1)。
- prefers-reduced-motion、prefers-reduced-transparency、窄屏布局各自有覆盖。
- 改界面的做法:node tools/preview.mjs 渲染真实面板并截图,加 --measure 打印计算样式 —— 先看见,再改。

原版横栏那一行的四个计数器,随横栏一起移除了;计数仍然在面板里。

中文显示

中文名写进该 skill 自己的 meta.yaml(display-name-zh),面板就按中文显示。安装时能填,装完在卡片上随时能改,留空则清除。

/名字 手势仍然走 ASCII 代号,两者互不干扰。

安装

GitHub 源码(拿到的是完整包):

git clone https://github.com/Doctor-Pan-code/dsh-useof-skill-panel.git
cd dsh-useof-skill-panel
npm install # 只装两个 optional peer,运行时并不需要

然后把仓库目录接进你的 profile(<DSH_HOME> 默认是 ~/.dsh):

1) 在 <DSH_HOME>/profiles/<你的 profile>/package.json 的 dependencies 里加: "dsh-useof-skill-panel": "link:<本仓库的绝对路径>"
2) 在同文件的 dsh.profile.bundles 数组里加: "dsh-useof-skill-panel"
3) 再 pnpm install 一次

cordis.patch.yml 已经随包提供,bundles 里声明它就会自动挂载 —— 不需要手写 patch 行。

两个 peerDependencies(@deepseek-ai/dsh-llm、@deepseek-ai/schemastery)标了 optional:由 DSH 运行时提供,npm 不会自己去下载一份来顶替宿主的那份。

装完必须重启 DSH Desktop Beta。 host 半侧在 boot 时快照进内存,而客户端 bundle 每次开页面会重新拉取 —— 所以只改客户端刷新页面就够,改了 host 必须重启。

手动安装的四步、卸载回滚,以及五条会让应用起不来的硬性约束都在 安装说明.md。

更多

每轮结束弹一次系统原生通知;给没中文的 skill 自动翻译并缓存;深色主题;宿主不允许写入时自动变只读并说明原因;全部配置项 —— 见 安装说明.md。

架构与实现要点、安装引擎的四条安全规矩、宽度为什么用百分比而不是像素、停用为什么是"移出目录"而不是改名、1006 条调整为什么是生成的、设计重做是怎么"先看见再改"的、来源记录为什么放在 skill 目录里、版本比较为什么不能拿字符串比、为什么"声明进了样式表"不等于"规则能命中元素"(4.0.1 整页空白 bug 的教训)、踩过的坑(宿主语义令牌不能当视觉令牌用、逗号选择器不能共享组合符、min-height:0 会架空粘底页脚、CSS 注释里的反引号会截断样式表……)—— 见 docs/设计要点.md。

开发

node tools/build-client.mjs # 生成 lib/client.js(改了 src/client/ 就必须跑)
npm test # 十四个套件,1520 项断言
node tools/preview.mjs # 渲染真实面板并截图(浅色 + 深色)
node tools/preview.mjs --measure # 打印关键元素的计算样式
node tools/check-width-live.mjs # 真 Chrome 量宽度(改了宽度规则就跑)

lib/client.js 是入库的构建产物(目标机器没有工具链,lib/ 必须一起提交)。改了 src/client/ 就要在同一个 commit 里重建它,漏了 test/client-bundle.mjs 会在门里失败。

运行时没有任何依赖;@deepseek-ai/dsh-llm 与 @deepseek-ai/schemastery 是 host 提供的 peer。

相对上游的改动

本 fork 与 dsh-echocat-skill-panel@5.1.3 的差异只有一处功能改动,为了能与原版同时安装,另有一组标识符改名:

| 项 | 上游 | 本 fork |
| 座位 | 三个(含输入框上方横栏) | 两个(main + sidebar.panellist) |
| 目录 / 包名 / bundle id | dsh-echocat-skill-panel | dsh-useof-skill-panel |
| loader entry id | skill-report | skill-report-use |
| 客户端面板 key | skill-report | skill-report-use |
| HTTP 路由 | /api/skill-report/ | /api/skill-report-use/ |
| CSS 标记 | data-plugin="dsh-echocat-skill-panel" | data-plugin="dsh-useof-skill-panel" |
| 状态目录 | ~/.dsh/skill-report/ | ~/.dsh/skill-report-use/ |

保留上游原样的两处:写在每个 skill 目录里的来源记录文件名 .echocat.json(它是数据格式不是身份标识,改名会让已装用户的历史记录失效),以及 src/release.js 里的版本检查地址(仍指向上游的 npm 包与 GitHub 发布页 —— 本 fork 未发布到 npm)。

许可

MIT,见 LICENSE。Copyright (c) 2026 dsh-skill-report contributors.
预览分享卡片长什么样 ↓Doctor-Pan-code/dsh-useof-skill-panel
分享 · DeepSeek Harness Hub
Doctor-Pan-code/dsh-useof-skill-panel

统计每轮对话调用的技能,并可直接装卸更新

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部