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

低成本验证 Ushio155/dsh-verify-cheap

DeepSeek Harness
Ushio15530 天前有提交已提供中文文档扫描:无法判定

用最省时的检查确认改动,并实测每步耗时

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · dev
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 30 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/10/31(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-skill-filesystem
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 低成本检查验证
  • 轮询条件代替等待
  • 报告实测耗时

为 DeepSeek Harness 发布 verify-cheap 技能:挑最省成本的检查拿到确定答案,轮询条件而不是干等,并报告实测耗时。附带两个零依赖 Node 工具。

README

由 DeepSeek 最新模型翻译生成
dsh-verify-cheap 一个 DSH 插件,内容只有一份技能:用最低成本验证改动。安装时把包内的 skills/ 注册为一个技能根,于是这份技能随插件进入 agent 的技能目录。 dsh plugin --profile web add github:Ushio155/dsh-verify-cheap 技能正文是中文;SKILL.md 的 description 也是中文(它决定触发)。脚本本身与语言无关,可脱离 DSH 单独使用。 技能覆盖什么 - 成本阶梯 L0–L3:静态检查 / 探针 / 单个测试套件 / 全量,各自典型耗时与适用场景,以及怎么按「改的是行为还是表现」选档 - 不要用固定延时等后台作业:条件轮询 + 超时;确实需要固定延时的三个并列条件(否则就是猜) - 断言必须能失败:举不出失败场景的断言等价于没有验证;优先断言具体取值,而不是「存在 / 不为空 / 小于 N」 - 耗时必须实测:脚本要打印分段耗时表,并同时给出外部总时长与脚本内计时 —— 两者差距明显,说明有句柄 / 连接 / 定时器挂在事件循环上 - 把坑沉淀给下一个会话:读代码读不出来的事实要落进该仓库的长期索引,而不是 README 或阶段笔记
展开完整文档(README 剩余 1 节)
dsh-verify-cheap

一个 DSH 插件,内容只有一份技能:用最低成本验证改动。安装时把包内的 skills/ 注册为一个技能根,于是这份技能随插件进入 agent 的技能目录。

dsh plugin --profile web add github:Ushio155/dsh-verify-cheap

技能正文是中文;SKILL.md 的 description 也是中文(它决定触发)。脚本本身与语言无关,可脱离 DSH 单独使用。

技能覆盖什么

- 成本阶梯 L0–L3:静态检查 / 探针 / 单个测试套件 / 全量,各自典型耗时与适用场景,以及怎么按「改的是行为还是表现」选档
- 不要用固定延时等后台作业:条件轮询 + 超时;确实需要固定延时的三个并列条件(否则就是猜)
- 断言必须能失败:举不出失败场景的断言等价于没有验证;优先断言具体取值,而不是「存在 / 不为空 / 小于 N」
- 耗时必须实测:脚本要打印分段耗时表,并同时给出外部总时长与脚本内计时 —— 两者差距明显,说明有句柄 / 连接 / 定时器挂在事件循环上
- 把坑沉淀给下一个会话:读代码读不出来的事实要落进该仓库的长期索引,而不是 README 或阶段笔记
- 何时不该用 / 直接跳档:改动触及公共代码或构建配置 → 直接 L3,不必先走 L0 试探;探索性调试先弄清问题再选档;安全、并发、时序类改动静态检查置信度极低,直接从 L2 起步
- 成本表落位:每次验证记三项(档位 / 实测耗时 / 能否再降一档),表落在仓库根 .verify-cost.md;仓库已有 SUMMARY.md 这类索引时,并进其中「成本表」小节

布局

package.json # dsh.bundle.patch → cordis.patch.yml
cordis.patch.yml # 插入一行 @deepseek-ai/dsh-skill-filesystem,customSkillDirs 指向 skills/ skills/ verify-cheap/ SKILL.md references/ anti-patterns.md # 恒真断言、等价反模式、手写轮询的两个坑 cost-measurement.md # 计时实现、内外差异判定、成本表模板 probe-cookbook.md # 探针外壳规范与各技术栈写法 scripts/ wait-until.mjs measure-runtime.mjs

cordis.patch.yml 用 createRequire(baseUrl).resolve('<包名>/package.json') 定位本包目录,再把 skills/ 拼上去 —— 这与 DSH 自带 agent preset 装载自己技能用的是同一套写法。providerName 必须每包唯一 —— 技能注册表拒绝同名 provider,所以默认值 filesystem 会和 harness 自带 provider 以及任何用同一机制的插件撞名;includeDefaultRoots: false 让这个 provider 只管自己的目录(project / user 根由 harness 自带 provider 负责,不用重复声明)。

⚠️ 不要用 new URL('skills/', baseUrl) 那种写法。 baseUrl 锚在 profile 目录,不是包目录;那种写法会静默指向 <profile>/skills,目录不存在,于是一个技能都加载不出来,而且不报错。

这条是实测出来的,不是推断:在同一个已安装的 profile 里, ① 按 new URL 写,放一个只存在于包内的探针技能 → 技能目录里看不到; ② 只改这一行成 createRequire 写法 → 探针立刻出现; ③ 删掉探针 → 又消失。
同 profile、同安装、同提问,唯一变量是那一行。若你的技能装上了却「没生效」,先查这里。

peerDependencies 用的是 "",理由如下

官方 @deepseek-ai/ 包按 awesome-dsh-plugin 贡献指南的建议声明为 peerDependencies 而非 dependencies,范围写 ""。

但 "" 在裸 semver 下并不匹配预发布版本。实测(npm 自带的 semver 库):

semver.satisfies('0.1.7-rc.2', '') → false
semver.satisfies('0.1.7-rc.2', '', { includePrerelease: true }) → true
semver.satisfies('0.1.7-rc.2', '>=0.1.0-rc.1 <0.2.0-0') → false ← 指南推荐的写法也失效
semver.satisfies('0.1.7-rc.2', '>=0.1.7-rc.1 <0.2.0-0') → true

而本机装的 harness 正是预发布版本:@deepseek-ai/dsh-skill-filesystem@0.1.7-rc.2(cordis 是稳定的 4.0.4)。
- 贡献指南给的 || 分支写法(>=0.0.1-rc.1 <0.1.0 || >=0.1.0-rc.1 <0.2.0-0)确实修好了它举的那个例子,但只覆盖被写明元组的那一个版本:0.1.7-rc.2 依然不满足,因为该范围里没有任何 0.1.7 元组上的预发布比较符。照抄它,就会在 harness 下一次 rc 跳元组时把一个真实环境静默排除掉。
- 所以这里保留 "",并把这条当作已记录的已知事实,而不是加一个会随时间腐坏的范围。实测 dsh plugin add github:Ushio155/dsh-verify-cheap 安装成功、技能正常加载 —— 即该 peer 范围未被判定为不满足(pnpm 是不满足时只告警、还是按 includePrerelease 判定,没有进一步区分)。

结论:在 DSH 插件里写死 @deepseek-ai/ 的预发布范围,比写 "" 更危险。

两个脚本(零依赖,Node >= 18)

两个脚本都不依赖任何第三方包(只用 node: 内建模块),可以脱离 DSH 直接跑。它们自身只做等待与计时;被执行的是你传给它们的命令。

wait-until.mjs —— 条件轮询 + 超时

替代脚本内的固定延时:每次尝试都重新判断条件,条件满足即刻返回,超时则失败退出,因此不会出现"条件早满足要重试、晚满足就白等"。

node skills/verify-cheap/scripts/wait-until.mjs --timeout 120 -- npm run build
node skills/verify-cheap/scripts/wait-until.mjs --timeout 90 --file out/index.js
node skills/verify-cheap/scripts/wait-until.mjs --timeout 30 --port 3080
node skills/verify-cheap/scripts/wait-until.mjs --timeout 120 --match "listening on" -- npm run dev

也可以当库用:

import { waitUntil } from '<plugin-dir>/skills/verify-cheap/scripts/wait-until.mjs';
await waitUntil(() => isReady(), { timeoutMs: 60_000, intervalMs: 500, label: '被测对象就绪' });

退出码:0 条件已满足 / 1 超时 / 2 参数错误。--match 需要捕获子进程 stdout,在禁止管道 stdio 的受限沙箱中不可用(脚本会用 --help 说明这一点)。

measure-runtime.mjs —— 实测耗时

两种用法:

CLI 模式测任意命令的外部总时长(从子进程启动到退出),退出码透传子进程退出码,无法启动时为 127:

node skills/verify-cheap/scripts/measure-runtime.mjs --label "L2 集成测试" -- npm test
node skills/verify-cheap/scripts/measure-runtime.mjs --json -- pwsh -File build.ps1

库模式才提供分段耗时与内外对比 —— 按 [小节] 边界打印分段表,并同时给出外部总时长与脚本内计时,把两者差值标出来。汇报耗时可以直接引用它,而不是凭印象:

import { createTimer } from '<plugin-dir>/skills/verify-cheap/scripts/measure-runtime.mjs';
const timer = createTimer('L2 注入回归');
timer.start('prepare');
// ... 被测工作 ...
timer.end('prepare');
await timer.section('run', async () => { / ... */ });
timer.report({ exit: 0 }); // 省略 exit 则不退出进程

报告之后进程若仍存活,退出钩子会补测那段耗时并告警 —— 这正是"有句柄 / 连接 / 定时器挂在事件循环上"的常见表现。

License

MIT
预览分享卡片长什么样 ↓Ushio155/dsh-verify-cheap
分享 · DeepSeek Harness Hub
Ushio155/dsh-verify-cheap

用最省时的检查确认改动,并实测每步耗时

回到顶部