DSH 插件市场的补丁层:一键更新全部退出后自动完成并重开+ 更新安全网启动失败自动回退+ 本地插件更新检测与快照回滚。
32.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Jackbessaliuz/dsh-market-expand.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 17 处,展示前 16 条)
- 执行外部命令来自配置/变量lib/index.js:187
execFile(cmd, realArgs, execOpts, (err, stdout, stderr) => { - 发起网络请求lib/index.js:351
const res = await fetch(uri, { - 发起网络请求lib/index.js:443
const r = await fetch(uri, { - 请求外部主机registry.npmjs.orglib/index.js:510
const r = await fetch(`https://registry.npmjs.org/${name.replace('/', '%2F')}`, { signal: AbortSignal.timeout(15000) }) - 发起网络请求lib/index.js:510
const r = await fetch(`https://registry.npmjs.org/${name.replace('/', '%2F')}`, { signal: AbortSignal.timeout(15000) }) - 执行外部命令来自配置/变量lib/index.js:621
const child = spawn(process.execPath, [UPDATER_JS, UPDATE_QUEUE], { - 执行外部命令固定命令lib/index.js:1026
execFile('tasklist', ['/FI', `IMAGENAME eq ${exeName}`, '/FO', 'CSV', '/NH'], { windowsHide: true, timeout: 15000 }, (err, out) => { - 执行外部命令固定命令lib/index.js:1037
execFile('taskkill', ['/PID', String(pid), '/F'], { windowsHide: true, timeout: 20000 }, () => { }) - 发起网络请求lib/client.js:43
return fetch(BASE + url, bodyOpts - 写入剪贴板lib/client.js:883
navigator.clipboard.writeText(text) - 执行外部命令来自配置/变量lib/updater.mjs:545
const child = spawn(restart.exe, args, { - 执行外部命令固定命令lib/updater.mjs:669
execFile('tasklist', ['/FI', `IMAGENAME eq ${name}`, '/FO', 'CSV', '/NH'], { windowsHide: true, timeout: 15000 }, (err, stdout) => { - 执行外部命令固定命令lib/updater.mjs:866
execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', ps], { windowsHide: true, timeout: 20000 }, (err, stdout) => { - 执行外部命令固定命令lib/updater.mjs:902
execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', ps], { windowsHide: true, timeout: 12000 }, (err, stdout) => { - 执行外部命令固定命令lib/updater.mjs:969
execFile('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', ps], { windowsHide: true, timeout: 20000 }, (err, stdout) => { - 执行外部命令固定命令lib/updater.mjs:1067
execFile('taskkill', ['/PID', String(pid), '/T', '/F'], { windowsHide: true, timeout: 20000 }, (err) => {
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:registry.npmjs.org
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
README
由 DeepSeek 最新模型翻译生成dsh-market-expand
给 DSH 插件市场补四块缺口:一键更新全部、更新前红绿灯、更新失败自动回退、本地插件更新检测。
这是什么(大白话)
DSH 的插件市场(dshmarket)已经很好用,但有三件事它自己做不了:
1. 更新它自己 —— 市场的更新流程是「先卸掉自己、再装新版本」。卸载那一步会把市场从运行中的组合里摘掉,后面「装新版本」的代码根本跑不到。所以官方提示永远是「退出 DSH,去命令行装,再打开」。
2. 更新带子进程的插件 —— 比如自带守护进程的插件,运行中更新会被文件占用顶回来。
3. 管不了本地插件 —— 用 link: 挂进来的本地开发插件,市场不检测它们的更新。
这个插件把这三件事接过来:在 DSH 里点一下,退出 DSH,剩下的它自己做完,并把 DSH 开回来。
你能得到
1. 一键更新全部
按钮在哪:市场 「分组」页面里,「本地化插件」 模块的右上角(和「⟳ 检测更新」并排)。
找不到?它会自动兜底,不会因为分组怎么改就消失:
1. 有「本地化插件」分组 → 挂它的右上角
2. 没有它 → 「未分组」区块(市场内置的,永远存在)
3. 连「未分组」都没有 → 第一个分组
更新按钮的兜底位置
上图是兜底位置:把所有分组都删掉时,按钮出现在「未分组」的右上角。
展开完整文档(README 剩余 1 节)
dsh-market-expand 给 DSH 插件市场补四块缺口:一键更新全部、更新前红绿灯、更新失败自动回退、本地插件更新检测。 这是什么(大白话) DSH 的插件市场(dshmarket)已经很好用,但有三件事它自己做不了: 1. 更新它自己 —— 市场的更新流程是「先卸掉自己、再装新版本」。卸载那一步会把市场从运行中的组合里摘掉,后面「装新版本」的代码根本跑不到。所以官方提示永远是「退出 DSH,去命令行装,再打开」。 2. 更新带子进程的插件 —— 比如自带守护进程的插件,运行中更新会被文件占用顶回来。 3. 管不了本地插件 —— 用 link: 挂进来的本地开发插件,市场不检测它们的更新。 这个插件把这三件事接过来:在 DSH 里点一下,退出 DSH,剩下的它自己做完,并把 DSH 开回来。 你能得到 1. 一键更新全部 按钮在哪:市场 「分组」页面里,「本地化插件」 模块的右上角(和「⟳ 检测更新」并排)。 找不到?它会自动兜底,不会因为分组怎么改就消失: 1. 有「本地化插件」分组 → 挂它的右上角 2. 没有它 → 「未分组」区块(市场内置的,永远存在) 3. 连「未分组」都没有 → 第一个分组 更新按钮的兜底位置 上图是兜底位置:把所有分组都删掉时,按钮出现在「未分组」的右上角。 点开后: - 扫描当前 profile 里所有 npm 插件的 registry 最新版(包括市场自己) - github: 安装的插件也在范围内:没有 npm 版本号可查的,就对比仓库的最高 semver tag - 勾选要更新的 → 排队 → 右下角立刻弹出进度窗,显示「已排队 N 个,等待 DSH 退出」 - 你从托盘右键退出 DSH - 助手在后台用桌面端自带的 CLI 安装(失败自动回退 pnpm),并补写 dsh.profile.bundles - 装完自动把 DSH 重新打开 点完没反应是旧版最大的问题——现在排队成功当场就有进度窗和「已排队 N 个」的按钮状态;排队期间再点按钮不会报错,而是打开排队详情(可以取消)。 1.5 更新前红绿灯 勾选面板里逐包标风险,点「更新」之前就能看出来: 更新前红绿灯(示例数据) - 🔴 跨大版本 / 预发布版(-beta / -rc) / 会改动官方预设注入 —— 更可能要单独处理 - ⚪ 新版本发布不足 24 小时 —— 市场里也显示「新版等待中」,社区还没验证过;和红灯一样默认不勾选 - 🟡 GitHub 源 —— 只是装得慢(要 clone 仓库),不是危险 - 🟢 普通升级 —— 每行都带灯,不再"全绿时看着像没灯" 红灯和白灯默认不勾选:它们表示「这个包更可能出问题 / 还没被验证」,不是禁止更新。想装就手动勾上;真出问题有下面的启动自检 + 自动回退兜底。 1.6 装完再验一次 + 失败自动重试(v1.4.0) - 装完再验一次:安装命令跑完会读一遍 node_modules/<包名>/package.json 里的真实版本。pnpm 有时因为 engines 之类的问题返回非零退出码、可文件其实已经写进去了——以前会被误判成失败,现在按真实结果记账。 - 失败自动重试:第一遍跑完,对「换个条件可能有救」的失败(写锁被占、超时、构建脚本未放行、网络、普通失败)自动再试一次,只重试这些包;第二次成功就以第二次为准。目标版本根本不存在(404 / 无匹配版本)不重试——重试多少次都没用,直接报原因。 - 两遍之后仍失败的,报告里单列「需手动处理」,附原始错误。 2. 更新安全网(重点) 更新完重启,如果 DSH 起不来: 重启 → 60 秒自检 → 发现新的 crash--web-boot.log → 解析出是哪个插件崩的 → 只回退「本次更新过的」 → 抢在「禁用全部插件」对话框被点之前结束进程 → 装回旧版本 → 重启 → 再自检一次 为什么需要:桌面端启动失败会弹一个只有「禁用全部插件」按钮的窗口,点下去 sanitizeProfile() 会改名 patch 文件、重置 bundles —— 你的定制会全部失效。这个助手会在你点它之前,自己把问题处理掉。 如果新起的宿主进程提前退出(常见于旧实例的子进程还没退干净、被单实例锁顶掉),助手会等 8 秒确认是否已有实例接管,不会像旧版那样直接放行。 2.5 组合破坏检查(2026-10-21 新增) 有些插件更新后不会让 DSH 崩溃,却会把 Agent 预设弄没:它们的 dsh.bundle.patch.yml 会给官方 preset 注入某个服务,或者依赖自己 insert 的条目。一旦那个服务被你在 patch 里 disabled: true,四个 preset 会全部停在 pending —— 设置页「Agent 预设」整页空白、旧会话报 Unknown agent preset: xxx。 这类失败不写 crash log,启动自检看不见。所以更新完、重启前,助手会扫一遍本次更新包自带的 bundle patch,把风险点名写进日志和进度窗,例如: ⚠ 组合风险:billion-context 依赖自己 insert 的条目 "bili-native",而你的 profile 把它禁用了 —— 可能导致插件或 preset 失效 更新前还会备份 package.json / cordis.patch.yml / .dsh-market/state.json,万一真被 sanitize 了也能捞回来。 3. 本地插件检测与快照 先在市场「分组」页新建一个名为「本地化插件」的分组,把 link: 插件加进去,再点 ⟳ 检测更新: 从 v1.2.4 起这个分组不再由插件自动创建——插件只读 state.json,不写它。原因是这个文件由市场和一个长期运行的内存对象共同维护,插件再插一脚会造成 groups / groupOrder 错位(表现为"分组还在,但点分配到报分组不存在")。分组和成员现在完全归你自己管。 - 按每个插件各自配置的 npm 包名或 GitHub 仓库比对版本 - 有更新时行内出现 ⬆,升级走「自动快照 → 合并 → 校验」,冲突会转成「建议手动」 - 保留最近 3 份快照,出问题可一键回滚 进度看得见 点完按钮,右下角就会弹出一个原生小窗,四步轨:更新 → 自检 → 回退 → 重启,每个阶段换颜色,不用盯着黑屏猜它有没有在跑。 v1.2.0 起: - 点完 1 秒内就弹(显示「等待 DSH 退出」),不用等宿主退出才出现 - 窗口里滚动显示真实日志行(每条 dsh plugin add … → ok/FAIL)——DSH 关掉后,这是唯一能看到进度的地方 - 完成保留 60 秒、失败永久停留(右上角 × 自己关);旧版完成 3 秒就关,人一走开就错过 - 失败时在桌面写一份 market-expand-更新失败-<时间>.txt:失败包、自检结论、组合风险、日志和备份路径全在里面,DSH 起不来也不用翻 .dsh 左:更新中(蓝色,显示 4/6 · 包名 → 版本)右上:启动失败后自动回退(橙色,前两步已绿,正在回退肇事插件)右下:完成(全绿) 三张截图为 v1.0 的旧布局;v1.2 窗口更高,中间多了滚动的日志区。 和 dshmarket 的关系 不是替代品,是补丁层。 dshmarket 负责「逛、装、卸、分组、备份、诊断」这些日常;本插件只补它做不了的三件事。两者可以同时安装,互不干扰。 安装 dsh plugin --profile <profile> add dsh-market-expand 官方桌面端请在应用自己的「设置 → 插件」里安装——那个 profile 归应用的插件管理器所有。 代理 检测 GitHub 源、查询 registry 时可能需要代理。本插件从环境变量读取,不写死任何地址: | 变量 | 说明 | | DSH_GIT_PROXY | 优先级最高,如 http://127.0.0.1:7890 | | HTTPS_PROXY / HTTP_PROXY | 标准变量,兜底 | | DSH_GIT_INSECURE=1 | 自签证书环境才需要,放宽 git 的 TLS 校验(默认不放宽) | 一个都没有就直连。也可以写在 ~/.dsh/.env 里,插件启动时会自动读。 它动了哪些文件 只在需要更新时、且 DSH 完全退出之后: - ~/.dsh/market-expand/ —— 队列、报告、日志、更新前备份、进度状态 - 当前 profile 的 package.json(依赖与 bundles)与 node_modules - 只读 crash--web-boot.log,不修改 - 更新失败时在桌面写一份 market-expand-更新失败-<时间>.txt 不会碰你的 cordis.patch.yml、会话和记忆库。 版本历史 - v1.4.0(2026-10-25):四色红绿灯 + 两轮重试 + 安装后校验。①每行都带灯:🔴 高风险 / ⚪ 新版本发布不足 24 小时(市场也在等) / 🟡 GitHub 源 / 🟢 普通升级(以前全绿时看着像没灯);②红灯与白灯默认不勾选,面板显示顺序也是「绿黄 → 白 → 红」;③第二轮重试:第一遍失败后只挑「换条件可能有救」的(写锁被占 / 超时 / 构建脚本未放行 / 网络 / 普通失败)自动再试一次,目标版本不存在(404)不重试;④安装后校验:pnpm 因 engines 等返回非零、但文件其实已写入时,按 node_modules 里真实版本记账,不再误判失败;⑤pnpm 11 的 allowBuilds 自动放行(v1.3.1 起)+ git 源连不上时走 codeload 快照兜底(先探包入口文件,仓库不带构建产物的跳过)。 - v1.3.1(2026-10-24):修 pnpm 11 装 git 源插件时的两个新坑。①ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED——pnpm 11 要求在 profile 的 pnpm-workspace.yaml 里按「包名@精确 tarball URL」放行该包的 build scripts,而按 commit 钉版本的 git 依赖每换一个 commit 键就变一次,于是每次更新都撞同一处、回滚也一样装不上。现在从 pnpm 报错里解析出精确 key,追加到 allowBuilds(只加不删,旧 commit 的键留给回滚;已存在不写;改前备份 pnpm-workspace.yaml.bak-<时间戳>)后原地重试一次;解析不出就只报告、不乱改配置。②失败分类新增 allow-builds(构建脚本未放行)与 network(git fetch 128 / 域名解析失败 / 连接超时),不再混进「没有可用的更新通道」;文案直接说清是「没放行」还是「连不上 GitHub」、下一步该做什么。 - v1.3.0(2026-10-22):新增更新前红绿灯——勾选面板逐包标风险:🔴 跨大版本 / 预发布版 / 会改动官方预设注入;🟡 GitHub 源(只是慢);绿=普通升级。红灯默认仍勾选,只提示「更可能要单独处理」。修掉「慢包把后续包连带卡死」——单个包的安装上限 300 秒 → 600 秒(与官方 idleTimeoutMs 对齐,GitHub 源的包本来就可能装 5 分钟以上);超时后用 taskkill /T /F 杀整棵进程树(旧版只杀外层 cmd.exe,残留的 node 会一直占着 profile 写锁,导致后面每个包都白等 120 秒后失败);遇到写锁被占用时先等锁释放、再重试一次;回退 pnpm 前确认没有残留的官方 CLI 进程(两条通道并发写会把 profile 写坏);失败报告按超时 / 写锁占用 / 通道不可用分类,不再一律写「没有可用的更新通道」。补掉「重启假阳性」:旧自检只看「进程存活 + 没 crash 日志」,进程活着但窗口没出来也会报「通过」——现在查主窗口句柄,90 秒没窗口就判定卡住,杀进程重开一次,并把窗口恢复到前台(不再只留任务栏);窗口一出现立即收尾;启动期间进度窗每 4 秒刷新「已等 N 秒」。另外修掉 2026-10-22 的「认证 cookie 撑爆」事故:桌面版每次启动新增一条 dsh-auth-(随机端口命名、60 天有效、从不清理),攒到 71 条时 Cookie 头超过 Node 默认 16KB 上限 → host 拒收 → Electron 欢迎页认证失败 → 窗口不出现(手动双击也打不开)。现在每次重启宿主前自动清理 dsh-auth- 并备份 cookie 库;no-window 时读宿主 stdout,识别到 Web authentication failed 就标记 auth-cookie-overflow 并清理后重试。 - v1.2.4(2026-10-21):插件不再写 state.json(不自动建组、不清理分组),彻底避免与市场内存状态冲突导致的分组错位;「本地化插件」分组改为由用户手动创建;检测时若分组为空会给出明确提示。 - v1.2.3(2026-10-21):「⬆ 更新全部」改用三级锚点——「本地化插件」分组 → 市场内置的「未分组」区块 → 第一个分组,从此不会再"装了看不到";修掉诊断徽标在 MutationObserver 回调里写 DOM 导致的界面卡死(幂等化 + observer 单例);扫描面板「全部已是最新」文字改琥珀黄。 - v1.2.1(2026-10-21):排队面板加「⚡ 立即重启并更新」;进度窗改用 conhost.exe 启动(桌面端终于能看到)、贴右下角、实时滚动日志、关闭按钮无焦点框、成功后保留 5 分钟;按钮状态每 4 秒轮询;自检时长按包数动态(1 个 10 秒 → 10 个 30 秒);README 加「更新按钮在哪」。 - v1.2.0(2026-10-21):进度窗提前到点完即弹 + 实时日志行 + 完成 60 秒/失败常驻;新增组合破坏检查(识别会改写官方 preset inject、或依赖被禁用条目的更新包);自检修正「宿主进程提前退出直接放行」;失败时桌面写报告;「更新全部」按钮挪进「本地化插件」分组;/update 不再二次扫描(避免静默丢包);排队中可取消。 - v1.0.0(2026-10-21):首个开源版,含一键更新全部 + 启动自检自动回退 + github 源支持。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Jackbessaliuz/dsh-market-expand
DSH 插件市场的补丁层:一键更新全部退出后自动完成并重开+ 更新安全网启动失败自动回退+ 本地插件更新检测与快照回滚。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6