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

技能运维台 Wickaninnish/dsh-skill-manager

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

追踪技能使用热度,审阅并优化技能内容

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件
查看扫描证据(共 90 处,展示前 55 条)
  • 写入本地文件
    packages/dsh/src/coordinator.ts:97
    await mkdir(dirname(target), { recursive: true })
  • 读取本地文件
    packages/dsh/src/coordinator.ts:98
    await writeFile(target, await readFile(source))
  • 写入本地文件
    packages/dsh/src/coordinator.ts:98
    await writeFile(target, await readFile(source))
  • 读取本地文件
    packages/dsh/src/coordinator.ts:339
    const decision = await readFile(join(operation.root, '.skill-ops', 'proposals', operation.id, 'decision'), 'utf8').catch(() => undefined)
  • 读取本地文件
    packages/dsh/src/coordinator.ts:469
    const info = await lstat(path)
  • 读取本地文件
    packages/dsh/src/coordinator.ts:491
    const old = before.includes(file) ? await readFile(join(base, 'before', file)) : undefined
  • 读取本地文件
    packages/dsh/src/coordinator.ts:492
    const next = after.includes(file) ? await readFile(join(base, 'candidate', file)) : undefined
  • 写入本地文件
    packages/dsh/src/coordinator.ts:509
    await writeFile(join(base, 'decision'), 'rejected', { flag: 'wx' })
  • 写入本地文件
    packages/dsh/src/coordinator.ts:531
    await writeFile(join(base, 'decision'), 'approved', { flag: 'wx' })
  • 读取本地文件
    packages/dsh/src/coordinator.ts:541
    for (const entry of await readdir(candidate)) await rm(join(candidate, entry), { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/coordinator.ts:541
    for (const entry of await readdir(candidate)) await rm(join(candidate, entry), { recursive: true, force: true })
  • 写入本地文件
    packages/dsh/src/coordinator.ts:842
    await writeFile(file, replaceInstructionBody(current, gate.value.body), 'utf8')
  • 写入本地文件
    packages/dsh/src/coordinator.ts:888
    await writeFile(path, updateFrontmatterDescription(await readFile(path, 'utf8'), repair.suggestion), 'utf8')
  • 删除本地文件递归
    packages/dsh/src/coordinator.ts:972
    await rm(join(candidate, retired.relativeEntry), { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/coordinator.ts:1012
    await rm(join(candidate, a.relativeEntry), { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/coordinator.ts:1013
    await rm(join(candidate, b.relativeEntry), { recursive: true, force: true })
  • 读取本地文件
    packages/dsh/src/doctor.ts:13
    const pkg = JSON.parse(await readFile(require.resolve('@deepseek-ai/dsh-agent/package.json'), 'utf8'))
  • 读取本地文件
    packages/dsh/src/doctor.ts:26
    await access(root, constants.R_OK); await readdir(root)
  • 读取本地文件
    packages/dsh/src/doctor.ts:26
    await access(root, constants.R_OK); await readdir(root)
  • 读取本地文件
    packages/dsh/src/doctor.ts:27
    const path = await realpath(root)
  • 读取本地文件
    packages/dsh/src/evaluation.ts:109
    const raw = await readFile(path, 'utf8')
  • 读取本地文件
    packages/dsh/src/evaluation.ts:114
    before = await readFile(new URL('../examples/old/SKILL.md', import.meta.url), 'utf8')
  • 读取本地文件
    packages/dsh/src/evaluation.ts:115
    after = await readFile(new URL('../examples/new/SKILL.md', import.meta.url), 'utf8')
  • 读取本地文件
    packages/dsh/src/evaluation.ts:124
    const info = await lstat(path)
  • 读取本地文件
    packages/dsh/src/evaluation.ts:149
    const fixtures = JSON.parse(await readFile(new URL('../examples/answers.json', import.meta.url), 'utf8')) as Record<string, { before: string; after: s
  • 读取本地文件
    packages/dsh/src/files.ts:38
    if (!existsSync(root)) {
  • 读取本地文件
    packages/dsh/src/files.ts:43
    if (!statSync(root).isDirectory()) {
  • 读取本地文件
    packages/dsh/src/files.ts:53
    entries = readdirSync(root, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))
  • 读取本地文件
    packages/dsh/src/files.ts:65
    const target = statSync(full)
  • 读取本地文件
    packages/dsh/src/files.ts:78
    if (candidate === undefined || !existsSync(candidate)) continue
  • 读取本地文件
    packages/dsh/src/files.ts:80
    const stat = statSync(candidate)
  • 写入本地文件
    packages/dsh/src/transaction.ts:111
    await mkdir(target, { recursive: true })
  • 读取本地文件
    packages/dsh/src/transaction.ts:112
    for (const entry of await readdir(source, { withFileTypes: true })) {
  • 写入本地文件
    packages/dsh/src/transaction.ts:119
    await mkdir(dirname(targetPath), { recursive: true })
  • 读取本地文件
    packages/dsh/src/transaction.ts:120
    const bytes = await readFile(sourcePath)
  • 写入本地文件
    packages/dsh/src/transaction.ts:121
    await writeFile(targetPath, bytes, { flag: 'wx' })
  • 读取本地文件
    packages/dsh/src/transaction.ts:129
    for (const entry of await readdir(current, { withFileTypes: true })) {
  • 写入本地文件
    packages/dsh/src/transaction.ts:142
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    packages/dsh/src/transaction.ts:144
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, 'utf8')
  • 写入本地文件
    packages/dsh/src/transaction.ts:145
    await retryWindows(async () => { await rename(temporary, path) })
  • 读取本地文件
    packages/dsh/src/transaction.ts:150
    return JSON.parse(await readFile(path, 'utf8')) as JournalRecord
  • 读取本地文件
    packages/dsh/src/transaction.ts:158
    const raw = (await readFile(path, 'utf8')).trim()
  • 读取本地文件
    packages/dsh/src/transaction.ts:172
    const info = await stat(path)
  • 删除本地文件递归
    packages/dsh/src/transaction.ts:373
    await rm(snapshotPath, { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/transaction.ts:374
    await rm(dirname(stagingRoot), { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/transaction.ts:379
    await rm(snapshotPath, { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/transaction.ts:560
    await rm(target, { recursive: true, force: true })
  • 删除本地文件递归
    packages/dsh/src/transaction.ts:600
    await retryWindows(async () => { await rm(path, { recursive: true, force: true }) })
  • 删除本地文件
    packages/dsh/src/transaction.ts:627
    await rm(lockPath, { force: true })
  • 读取本地文件
    packages/dsh/src/writable-files.ts:61
    const info = await lstat(absolute).catch(() => undefined)
  • 读取本地文件
    packages/dsh/src/writable-files.ts:64
    await access(absolute, constants.R_OK | (requireWrite ? constants.W_OK : 0))
  • 读取本地文件
    packages/dsh/src/writable-files.ts:65
    const canonical = await realpath(absolute)
  • 读取本地文件
    packages/dsh/src/writable-files.ts:78
    for (const entry of await readdir(current, { withFileTypes: true })) {
  • 读取本地文件
    packages/dsh/src/writable-files.ts:96
    const info = await lstat(path)
  • 读取本地文件
    packages/dsh/src/writable-files.ts:98
    hash.update(item.replaceAll('\\', '/')).update('\0').update(await readFile(path)).update('\0')
扫描于 2026/11/5(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 追踪技能使用热度
  • 审阅优化技能内容
  • 自动发现审计去重

DeepSeek Harness 技能运维插件:自动发现、审计、去重和优化技能,构建安全可控的维护闭环。

README

由 DeepSeek 最新模型翻译生成
dsh-skill-manager 0.4.0 DeepSeek Harness 原生技能运维插件,提供使用追踪、反馈归因、热度排行、人工审阅和优化效果评测。 默认 read-only,不修改技能文件。review 先保存候选、再由人类批准;automatic 可自动应用描述修复、指令优化和 specialize。移除源技能的 keep/composite 始终需要人类批准。 普通用户安装 使用 DSH 0.1.1-rc.2,Node ^22.19.0 || >=24.0.0。完整宿主 SHA 与 pnpm 版本见 compatibility.json。本次交付三个 tarball,未自动发布 npm。 dsh plugin --profile web add ./artifacts/skill-ops-engine-0.4.0.tgz ./artifacts/skill-ops-dsh-0.4.0.tgz ./artifacts/skill-ops-dsh-client-0.4.0.tgz dsh web host/client 的 dsh.bundle 使安装后的插件进入 profile 配置层;engine 作为库依赖,不激活为插件。启动后执行 /skill-ops doctor、/skill-ops status。
展开完整文档(README 剩余 1 节)
dsh-skill-manager 0.4.0

DeepSeek Harness 原生技能运维插件,提供使用追踪、反馈归因、热度排行、人工审阅和优化效果评测。

默认 read-only,不修改技能文件。review 先保存候选、再由人类批准;automatic 可自动应用描述修复、指令优化和 specialize。移除源技能的 keep/composite 始终需要人类批准。

普通用户安装

使用 DSH 0.1.1-rc.2,Node ^22.19.0 || >=24.0.0。完整宿主 SHA 与 pnpm 版本见 compatibility.json。本次交付三个 tarball,未自动发布 npm。

dsh plugin --profile web add ./artifacts/skill-ops-engine-0.4.0.tgz ./artifacts/skill-ops-dsh-0.4.0.tgz ./artifacts/skill-ops-dsh-client-0.4.0.tgz
dsh web

host/client 的 dsh.bundle 使安装后的插件进入 profile 配置层;engine 作为库依赖,不激活为插件。启动后执行 /skill-ops doctor、/skill-ops status。普通安装需要 npm registry 可达;离线源码验收由固定宿主提供第三方依赖。

源码开发

使用指定宿主提交,按其 lockfile 执行 pnpm install --frozen-lockfile 和 pnpm build。本插件脚本使用 DSH_CHECKOUT 或项目内 .cache/deepseek-harness,不依赖固定盘符。

$env:DSH_CHECKOUT = '/absolute/path/to/deepseek-harness'
node scripts/typecheck.mjs
node scripts/test.mjs
node scripts/test.mjs --vitest
node scripts/integration.mjs
node scripts/browser.mjs
node scripts/pack.mjs
node scripts/package-smoke.mjs

首次浏览器测试缺少 Chromium 时运行 node scripts/browser.mjs --install。脚本检测错误/失效链接后会停止;只移除诊断指出的链接,再用正确 DSH_CHECKOUT 重跑。不要删除其指向的宿主目录。

继续支持 overlay 接入:将工作区三个包链接至 DSH profile 的 node_modules/@skill-ops,然后执行 dsh web --patch ./overlays/skill-ops.cordis.yml。已经通过 bundle 安装的 profile 不要重复插入同名条目。

打包根据各包 files 清单收集构建产物、组合配置、doctor 和示例资源,在独立临时目录转换 workspace 依赖,验证前后源码 package.json 完全一致。scripts/publish.mjs 是单独的显式发布工具,CI 不调用它。

故障排查

插件能启动时执行 /skill-ops doctor:逐项显示通过/警告/失败、影响和修复方法,检查宿主版本、服务、反馈服务、目录、存储就绪和当前模型路由,不调用模型、不修改配置。

插件不能启动时运行独立 Node 命令:

skill-ops-doctor --json --root /absolute/path/to/skills
尚未建立 bin 链接时:
node packages/dsh/bin/doctor.mjs --json --root /absolute/path/to/skills

支持重复 --root、--package <host包目录>、--config <含skillRoots数组的JSON>。阻断问题返回非零退出码;独立命令只使用 Node 内置模块,检查入口、依赖解析和目录配置。无模型路由只影响生成/live评测,不影响基础查询。

配置与维护模式

默认配置见只读 overlay,审阅见 review 示例,自动维护见 automatic 示例。skillRoots 与 skill-filesystem 的 customSkillDirs 应一致。

writeMode: review
automaticActions:
- merge
- optimize-instructions
- repair-descriptions
skillRoots:
- /absolute/path/to/skills
snapshotRetentionDays: 30
correctionThreshold: 3
correctionAgeDays: 7
evaluationTestSets:
my-regression-set: /absolute/path/to/my-regression-set.json

review/automatic 沿用启动、技能变化、反馈对账和 Agent 空闲窗口扫描。描述修复是确定性推导,无需模型;指令优化和合并使用当前 DSH 模型生成、独立复审,再执行静态校验。模型自报 confidence 是自评值,不是校准后的正确率。模型维护工具只允许 run/retry,没有批准权限。

命令

| 命令(前缀 /skill-ops) | 行为 |
| doctor | 只读环境诊断 |
| status [n] | 热度排行,默认前10 |
| quality [skill] | 加载次数、反馈消息数、纠错/赞扬/澄清次数、纠错比例 |
| duplicates [threshold] | TF-IDF 重复候选 |
| forget | 遗忘建议,不压缩或删除 |
| descriptions / names | 描述、命名和调用控制审计 |
| operations [n\|id] | 操作历史、状态、门禁和快照 |
| run <all\|merge\|optimize\|descriptions> | review/automatic 扫描 |
| preview <id> | 理由、逐文件差异、资源变化、检查与到期时间 |
| approve <id> | 应用保存的确切候选,不重新生成 |
| reject <id> | 拒绝候选,抑制相同输入 |
| retry <id> | 从最新输入创建新 ID,旧记录保留 |
| rollback <id> | 显式恢复未被后续修改的快照 |
| evaluate <id> <测试集ID> [--live] | 默认只校验适用性、展示调用计划 |
| evaluate demo [--live] | 默认使用离线固定回答演示 |
| evaluations [id] | 查询独立存储的评测摘要 |

审阅与安全边界

候选完整树与原版本位于 .skill-ops/proposals/<id>,操作记录保存原根、候选、反馈证据和清单摘要。有效期沿用 snapshotRetentionDays,默认30天。源文件、反馈或候选完整性变化后不得批准;过期或陈旧方案需要 retry。等待审阅的方案不会因切换 automatic 而自动应用。

批准重查当前动作配置、根目录和摘要,使用跨进程锁及持久化决策记录阻止重复提交。提交复用快照、日志、按差异原子替换、宿主刷新校验和失败恢复。keep/composite 完整安装目标后才移出源技能。卡片只展示结果和下一步命令;完整差异以 preview 为准,最新状态以 operations 为准。

根目录必须存在、可读写、无链接且互不重叠。模型不能指定路径,资源必须在技能边界内。.skill-ops 是宿主管理的私有控制目录,不应手工编辑。

热度与质量证据

热度分继续使用原频率、新鲜度和重要性算法。存储字段 successCount 保留兼容,含义是成功加载,不代表任务成功率。合并不再按热度差强制指定保留项;模型输入将热度和反馈证据分开。

质量报告按 sessionId/messageId 去重计数,纠错比例分母是有反馈的消息数。少于10条提示证据不足;零反馈显示未知。反馈是累计证据,可能跨技能版本,也可能多技能共同归因;不能据此宣称某版本的任务成功率。

评测测试集

参考 15题中英文演示 和 旧版/新版 示例技能。固定回答仅演示评测能力,不是任意用户技能的改善证据。

{
"id": "my-regression-set",
"skills": ["my-skill"],
"tasks": [{
"id": "structured-output",
"prompt": "只返回JSON,status字段为ok。",
"assertions": [
{"type": "json-field", "path": ["status"], "value": "ok", "critical": true},
{"type": "excludes", "value": ""},
{"type": "length", "min": 1, "max": 200}
]
}]
}

支持 contains、excludes、json-field(字段路径数组、精确JSON值类型)、length(Unicode码点长度)。未知字段、脚本类型、重复题ID和超过20题会被拒绝。JSON测试集不执行脚本。

只有 --live 才调用当前 DSH 模型。两侧同一路由和参数、独立上下文、无工具,每侧每题一次,最多20题、2048输出tokens/次、60秒/次,支持宿主取消。报告列出前后通过数、失败断言序号、耗时和实际token用量;缺失用量显示未知,不推算费用。调用失败、取消、输出截断或结果不完整显示无法判定;出现单题退步或关键约束失败不得标为改善。

摘要绑定测试集、原版本和候选摘要,存入新域 skill_ops_evaluations。不额外存储任务全文或模型回答;评测不会批准或修改技能。

升级与 CI

从0.3.x升级保留 skill_ops 和 skill_ops_mutations 的版本1及原表布局,仅添加可选字段和状态。出现 awaiting-approval/rejected/stale/expired 等新状态后,旧插件不能完整读取所有记录;降级前需要保留完整数据备份,不要让新旧插件同时写同一存储。

GitHub Actions 固定宿主完整 SHA 和 pnpm 11.7.0,覆盖 Linux/Node22、Linux/Node24、Windows/Node24;包含类型检查、原生测试、Vitest、构建、离线评测、宿主集成、打包安装,Linux/Node24额外执行浏览器验证。工作流不读取模型密钥、不调用外部模型、不发布 npm。

实际验收结果见 0.4.0 测试记录。卡片约定见 DESIGN.md;历史设计见 架构说明。
预览分享卡片长什么样 ↓Wickaninnish/dsh-skill-manager
分享 · DeepSeek Harness Hub
Wickaninnish/dsh-skill-manager

追踪技能使用热度,审阅并优化技能内容

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