dsh-semver

by TYEclipse

0 开发与运行时github 检测到 manifest package.json#dsh收录于 08-16

DeepSeek Harness(dsh)语义版本工具箱:解析、比较和范围检查semver字符串(^ ~ >= <= x-ranges,连字符,||)——零运行时依赖,纯逻辑

Semantic versioning toolbox for DeepSeek Harness (dsh): parse, compare and range-check semver strings (^ ~ >= <= x-ranges, hyphen, ||) — zero runtime dependencies, pure logic

安装

dsh plugin --profile web add github:TYEclipse/dsh-semver

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

dsh-semver 是 DeepSeek Harness (dsh) 的语义化版本号工具箱:零运行时依赖、纯逻辑、确定性输出。

Agent 经常算错版本号问题——1.0.0-beta.11 和 1.0.0-beta.2 谁大?1.2.4-beta.1 是否满足 ^1.2.3?本插件把这类问题变成确定性的工具调用。

三个工具

工具 功能
semver_parse 解析版本号 → major/minor/patch/prerelease/build;非法输入(1.2、1.2.3.4、前导零、1.2.3-01 等)返回明确原因
semver_compare 比较两个版本 → lt/eq/gt + 人话结论(2.1.0 > 2.0.3);build 元数据不影响优先级(1.0.0+build.1 == 1.0.0)
semver_satisfies 判断版本是否满足 npm 风格范围,解释里给出归一化后的范围

支持的范围语法(npm 兼容子集)

  • 精确:1.2.3、=1.2.3
  • 比较符:>1.2.0、>=1.2.0、<2.0.0、<=2.0.0
  • 脱字符:^1.2.3 → >=1.2.3 <2.0.0,含 0.x 规则(^0.2.3 → >=0.2.3 <0.3.0)
  • 波浪号:~1.2.3 → >=1.2.3 <1.3.0
  • 通配符:1.2.x、1.x、*(裸部分版本 1.2、1 同义)
  • 连字符区间:1.2.3 - 2.3.4(两端含;部分上界如 1.2.3 - 2.3 → <2.4.0)
  • 组合:空格 AND、|| OR

Prerelease 语义(npm tuple-lock)

  • 普通范围默认不匹配预发布版本:1.2.4-beta.1 不满足 ^1.2.3
  • 带预发布下界的范围只匹配同 [major, minor, patch] 元组的预发布:1.2.3-beta.5 满足 ^1.2.3-beta.2,但 1.2.4-beta.1 不满足
  • 传 includePrerelease: true(工具参数或插件配置)可放宽两条规则

安装

# dsh plugin 无默认 profile,必须带 --profile
dsh plugin --profile web add github:TYEclipse/dsh-semver

验证:dsh --profile web --dump-config | grep '== dsh-semver'

安全性

三个工具全部纯函数、离线:无网络、无文件系统访问、无 shell、无动态求值。

开发

pnpm install   # 仅 devDependencies(esbuild allowBuilds 已预配置)
pnpm build     # tsc → dist/(已提交;git 安装不跑构建脚本)
pnpm test      # vitest,40+ 用例,全部取自 semver 规范 / npm 文档的已知锚点
pnpm lint      # oxlint(仅 src + test)

许可证

MIT

原始 README: https://github.com/TYEclipse/dsh-semver/blob/main/README.zh.md ↗