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

版本管理 shangdi178/dsh-versions

DeepSeek Harnessv0.5.1
shangdi17861 天前有提交已提供中文文档扫描:含敏感能力

查看主程序版本并一键升级降级回滚

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-versions
npm 源 · dsh-versions 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 61 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-versions @ 0.5.1
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:45:10

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 79 处,展示前 48 条)
  • 读取本地文件
    lib/index.js:77
    const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))
  • 读取本地文件
    lib/index.js:156
    const raw = readFileSync(stateFile(), 'utf8').replace(/^ FEFF/u, '')
  • 读取本地文件
    lib/index.js:161
    const at = statSync(stateFile()).mtimeMs
  • 读取本地文件
    lib/index.js:172
    return readFileSync(historyFile(), 'utf8')
  • 写入本地文件
    lib/index.js:192
    mkdirSync(dest, { recursive: true })
  • 读取本地文件
    lib/index.js:193
    for (const entry of readdirSync(src, { withFileTypes: true })) {
  • 写入本地文件
    lib/index.js:198
    else copyFileSync(s, d)
  • 执行外部命令固定命令
    lib/index.js:435
    execFile('schtasks.exe', ['/create', '/f', '/tn', taskName, '/tr', tr, '/sc', 'once', '/st', '00:00'], { windowsHide: true }, (error) => {
  • 执行外部命令固定命令
    lib/index.js:437
    try { execFile('powershell.exe', ['-NoProfile', '-WindowStyle', 'Hidden', '-ExecutionPolicy', 'Bypass', '-File', ps1], { windowsHide: true, detached:
  • 执行外部命令固定命令
    lib/index.js:446
    execFile('schtasks.exe', ['/run', '/tn', taskName], { windowsHide: true }, (runError) => {
  • 读取本地文件
    lib/index.js:483
    if (fw === null || !existsSync(fw.dshDir) || !existsSync(fw.binPath)) {
  • 写入本地文件
    lib/index.js:508
    mkdirSync(rollbackDir, { recursive: true })
  • 写入本地文件
    lib/index.js:521
    copyFileSync(join(profileDir, 'cordis.patch.yml'), join(backupDir, 'cordis.patch.yml'))
  • 写入本地文件
    lib/index.js:522
    copyFileSync(join(profileDir, 'package.json'), join(backupDir, 'profile-package.json'))
  • 写入本地文件
    lib/index.js:528
    writeFileSync(stateFile(), 'starting|升级前快照失败(不影响升级):' + String(snap.error), 'utf8')
  • 发起网络请求
    lib/client.js:153
    const response = await fetch(path, body === undefined
  • 读取本地文件
    lib/snapshot.js:32
    const raw = JSON.parse(readFileSync(join(dir, 'meta.json'), 'utf8'))
  • 读取本地文件
    lib/snapshot.js:47
    if (!existsSync(join(dir, 'package.json')) || !existsSync(join(dir, 'meta.json'))) return false
  • 读取本地文件
    lib/snapshot.js:51
    const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'))
  • 读取本地文件
    lib/snapshot.js:60
    if (!existsSync(snapshotsDir)) return []
  • 读取本地文件
    lib/snapshot.js:63
    names = readdirSync(snapshotsDir)
  • 读取本地文件
    lib/snapshot.js:73
    st = statSync(dir)
  • 删除本地文件递归
    lib/snapshot.js:93
    rmSync(dir, { recursive: true, force: true })
  • 写入本地文件
    lib/snapshot.js:118
    mkdirSync(snapshotsDir, { recursive: true })
  • 删除本地文件递归
    lib/snapshot.js:119
    rmSync(dest, { recursive: true, force: true })
  • 写入本地文件
    lib/snapshot.js:122
    writeFileSync(join(temp, 'meta.json'), `${JSON.stringify({ version, at: (deps.now ?? Date.now)() })}\n`, 'utf8')
  • 写入本地文件
    lib/snapshot.js:123
    renameSync(temp, dest)
  • 写入本地文件
    lib/snapshot.js:144
    renameSync(installDir, aside)
  • 删除本地文件递归
    lib/snapshot.js:154
    rmSync(installDir, { recursive: true, force: true })
  • 写入本地文件
    lib/snapshot.js:155
    renameSync(aside, installDir)
  • 删除本地文件递归
    lib/snapshot.js:160
    if (moved) rmSync(aside, { recursive: true, force: true })
  • 读取本地文件
    lib/shim.js:74
    return readFileSync(legacyTargetFile(deps), 'utf8').includes(MARKER_LEGACY_API)
  • 读取本地文件
    lib/shim.js:82
    const content = readFileSync(legacyTargetFile(deps), 'utf8')
  • 读取本地文件
    lib/shim.js:93
    if (!existsSync(target)) return { ok: false, error: '目标文件不存在:' + target }
  • 读取本地文件
    lib/shim.js:94
    const content = readFileSync(target, 'utf8')
  • 写入本地文件
    lib/shim.js:100
    mkdirSync(dirnameOf(orig), { recursive: true })
  • 写入本地文件
    lib/shim.js:101
    writeFileSync(orig, content, 'utf8')
  • 写入本地文件
    lib/shim.js:103
    writeFileSync(target, patched, 'utf8')
  • 写入本地文件
    lib/shim.js:106
    writeFileSync(target, content, 'utf8')
  • 读取本地文件
    lib/shim.js:114
    if (!existsSync(target)) return { ok: true }
  • 读取本地文件
    lib/shim.js:115
    const content = readFileSync(target, 'utf8')
  • 写入本地文件
    lib/shim.js:120
    writeFileSync(target, original, 'utf8')
  • 写入本地文件
    lib/shim.js:127
    writeFileSync(target, stripped, 'utf8')
  • 删除本地文件递归
    lib/shim.js:176
    rmSync(target, { recursive: true, force: true })
  • 删除本地文件递归
    lib/shim.js:186
    rmSync(target, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    lib/shim.js:327
    execFileSync(deps.nodePath ?? process.execPath, ['--check', file], { stdio: 'pipe' })
  • 读取本地文件
    lib/compat.js:162
    source = readFileSync(join(dirname(pkgPath), 'lib', 'index.js'), 'utf8')
  • 读取本地文件
    lib/compat.js:164
    try { source = readFileSync(pkgPath.replace('package.json', 'index.js'), 'utf8') } catch {}
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 查看主程序版本
  • 在线升级降级重装
  • 历史版本秒级回滚
v0.5.12026-09-03
插件兼容性检查:安装前预警不兼容的第三方插件。 · 版本面板点「安装」进入确认态时,自动检查目标版本 dsh-settings 是否缺少 已装插件依赖的导出(如 0.1.2 移除的 settingsNamespace / installSettingsSection) · 不兼容插件列表醒目展示(名称/版本/缺失符号),检查失败不影响安装 · 新增 GET /dsh-versions/compat?target= 接口 安装:dsh plugin --profile web add dsh-versions
v0.5.02026-09-03
生态兼容垫片:让按旧 API 构建的第三方插件在新版 dsh 上继续加载。 · 新增「兼容性垫片」面板(设置 → dsh 版本管理 → 兼容性垫片) · 内置两个垫片: - legacy-settings-api:在 0.1.2.x 上恢复 dsh-settings 的 settingsNamespace / installSettingsSection 导出(实现移植自 0.1.1-rc.2) - restore-host-apiproxy:从本地版本备份恢复被 0.1.2 移除的 dsh-host-apiproxy 包 · 升级流程自动应用:升级脚本在重启服务前调用垫片 reconcile;boot 时也会对已启用垫片自动重应用/自动卸载(回滚到 0.1.1 系列后防重复导出) · 安全模式:应用前备份、写后语法校验(失败自动还原)、幂等、可随时停用还原 实测记录:0.1.2-rc.1 上垫片可成功恢复 settings API,但 rc.1 另有 client boot manifest 格式变更(超出垫片范围),当前仍推荐 0.1.1-rc.2。
v0.4.12026-09-03
跨次版本安装兼容性警告 + 终态横幅 30 分钟过期。 · POST /upgrade 响应新增 compatWarning;目标与当前版本 major.minor 不同时,客户端二次确认处显示醒目警告(第三方插件可能无法加载) · 升级/回滚终态横幅 30 分钟后自动消失,不再与实际运行版本矛盾 · 背景:0.1.2-rc.1 移除了 dsh-settings 的 settingsNamespace / installSettingsSection 导出并删除 dsh-host-apiproxy,旧版第三方插件生态全部无法加载——本版本警告正是针对此类跨次版本升级 安装:dsh plugin --profile web add dsh-versions(或下载附件 tgz 解压后 add 解压目录)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-versions DeepSeek Harness(dsh)主程序版本管理插件:在 dsh web 的 设置 → 版本管理(与 General / Plugins / Models 同级的独立分区)里,查看 dsh 主程序版本,一键检查 npm 更新,并支持在线升级 dsh 主程序(升级/降级/重装、备份回滚、升级历史、手动重启服务)。 只操作 dsh 主程序本身:升级引擎走 npm install -g @deepseek-ai/dsh@,备份回滚点完整复制框架目录,失败自动恢复;纯本地、仅限本机访问,不负责其它插件的安装/更新(其它插件由 dsh plugin 管理)。 设置 → 版本管理 ┌──────────────────────────────────────────────────┐ │ dsh 版本管理 [重启服务] │ │ dsh 主程序 0.1.1-rc.2 │ │ 渠道 latest 0.1.1-rc.2 ✓ next — alpha — │ │ npm 版本列表 │ │ 版本 发布时间 渠道 操作 │ │ 0.1.1-rc.2 2026-08-30 … latest [重装] │ │ 0.1.2-alpha.3 2026-08-29 … [安装] │ │ …
展开完整文档(README 剩余 1 节)
dsh-versions

DeepSeek Harness(dsh)主程序版本管理插件:在 dsh web 的 设置 → 版本管理(与 General / Plugins / Models 同级的独立分区)里,查看 dsh 主程序版本,一键检查 npm 更新,并支持在线升级 dsh 主程序(升级/降级/重装、备份回滚、升级历史、手动重启服务)。

只操作 dsh 主程序本身:升级引擎走 npm install -g @deepseek-ai/dsh@,备份回滚点完整复制框架目录,失败自动恢复;纯本地、仅限本机访问,不负责其它插件的安装/更新(其它插件由 dsh plugin 管理)。

设置 → 版本管理

┌──────────────────────────────────────────────────┐
│ dsh 版本管理 [重启服务] │ │ dsh 主程序 0.1.1-rc.2 │ │ 渠道 latest 0.1.1-rc.2 ✓ next — alpha — │ │ npm 版本列表 │ │ 版本 发布时间 渠道 操作 │ │ 0.1.1-rc.2 2026-08-30 … latest [重装] │ │ 0.1.2-alpha.3 2026-08-29 … [安装] │ │ … │ │ 升级历史(2) 0.1.1-rc.2 → 0.1.2-alpha.3 失败 … │ └──────────────────────────────────────────────────┘

功能

- 版本总览:dsh 主程序当前版本 + 当前渠道(latest / next / alpha 对应的 dist-tags)
- 一键检查更新:查询 dsh 主程序在 npm registry 上的最新版本(10 分钟缓存)
- npm 版本列表:dsh 全部已发布版本 + 渠道(latest / next / alpha 对应的 dist-tags),可对任意已发布版本发起安装 / 重装(升级、降级均可)
- 升级引擎:升级前自动做本地版本快照 + 备份框架目录 → npm install -g (npmjs → npmmirror 双源,仍失败停服重试一轮)→ 以磁盘 package.json 版本为准校验 → 失败 robocopy 恢复备份 → 停服拉起新版本生效
- 快照秒级回滚:每次升级前自动为当前版本存本地快照(~/.dsh/dsh-versions/snapshots/),可对任意历史版本秒级回滚(免 npm、免网络;自动修剪保留 5 个)
- 升级历史:本地 history.jsonl 记录每次升级/回滚的 from/to/结果,可一键恢复到历史版本
- 手动重启:重启 dsh web 服务(schtasks 脱离服务进程树执行,日志写入 ~/.dsh/dsh-versions/)

本插件专注 dsh 主程序的版本管理;其它插件的安装/更新由 dsh plugin 管理,不在本插件范围内。
快照/回滚机制的设计思路参考了 SuCriss/dsh-version-update (Apache-2.0),代码为本项目原创 MIT 实现,见 STUDY.md。

安装

需要 dsh ≥ 0.1.0(dsh plugin 命令自 0.1.x 提供)。三种方式任选其一:

方式一:npm 包(发布后,推荐)
dsh plugin --profile web add dsh-versions

方式二:从源码目录(未发布 / 自编译时)
git clone https://github.com/shangdi178/dsh-versions
dsh plugin --profile web add ./dsh-versions

方式三:离线 tarball
npm pack # 在 dsh-versions 仓库根目录执行
dsh plugin --profile web add ./dsh-versions-0.3.0.tgz

装完重启 dsh web,进 设置 → 版本管理。

维护者发布到 npm / GitHub 的完整清单见 PUBLISH.md。

平台限制:版本查看 / 更新检查在所有平台可用;但升级 / 重装 / 恢复 / 手动重启引擎依赖 Windows 工具(robocopy / schtasks / Windows PowerShell 5.1),仅在 Windows 上提供——其他平台对应按钮会禁用并提示原因(服务端同样拒绝并返回 501)。
非 Windows 用户如需升级 dsh,请手动执行 npm install -g @deepseek-ai/dsh@。

HTTP 接口(环回,仅限本机访问)

| 路由 | 说明 |
| GET /dsh-versions/state | dsh 主程序版本 + 平台/引擎支持状态 |
| GET /dsh-versions/releases | dsh 全部已发布版本 + 渠道(dist-tags + 发布时间) |
| GET /dsh-versions/upgrade-status | 当前升级任务状态(文件态,可断连恢复) |
| GET /dsh-versions/history | 本地升级历史 |
| GET /dsh-versions/snapshots | 本地版本快照清单(usable/at + 是否忙态) |
| POST /dsh-versions/upgrade | 安装指定版本(升级/降级/重装,升级前自动快照 + 失败自动回滚),body {target} |
| POST /dsh-versions/restore | 从快照恢复指定版本(免 npm/网络;升级中拒绝),body {version} |
| POST /dsh-versions/relaunch | 手动重启 dsh web 服务 |

写接口带跨站防护:环回地址 + Host 白名单 + Origin / Sec-Fetch-Site 校验。

开发

零依赖、零构建:lib/ 即产物,直接可跑。

npm test # 版本比较 + 升级/重启脚本生成回归 + 快照回滚(node:test)

- 服务端(lib/index.js):cordis 插件,inject: ['webServer', 'loader'],经 ctx.webServer.register 挂载环回路由;升级/重启脚本生成器 buildUpgradeScript / buildRelaunchScript 以 __builders 导出供单测断言(已覆盖 PS 数组字面量拼接拆行、监听进程可见性、输出重定向等历史回归)
- 快照模块(lib/snapshot.js):升级前自动建版本键控本地快照、校验、秒级恢复、修剪;纯 node:fs 同步实现,可独立测试
- 客户端(lib/client.js):__ModuleLoader__ 包装,ctx.slots.inject("settings.section", …)
注册与 General / Plugins / Models 同级的「版本管理」独立设置分区,中英双语词典经 ctx.locale.register 注册
- 升级引擎产物:~/.dsh/dsh-versions/(状态、日志、备份、快照、历史)

License

MIT
预览分享卡片长什么样 ↓shangdi178/dsh-versions
分享 · DeepSeek Harness Hub
shangdi178/dsh-versions

查看主程序版本并一键升级降级回滚

这是你的仓库?认领条目

回到顶部