Repository navigation
Releases
Releases · GIN0076/dsh-install-review
v1.3.0 - blocked reports get a way through, and capability proposals
This release also carries the previously unreleased v1.2.0 line — the "accept the risk, install anyway" version remedy. Its section follows the v1.3.0 one in CHANGELOG.md.
1.3.0 — 2026-10-01
用户点名的五件事,全部只走官方通道、都默认关闭、都能回退:
1. 换下载源重试(registry)
- 审计现在给出候选源列表(pnpm 解析值 → 配置值 → 宿主备用源 → 官方源 → 国内镜像)。
- 方案里多一条「指定这次安装用哪个源」(下拉选择);装到一半因为源的问题失败时,面板额外弹一个**「换源重试」一键按钮**。
- 执行时走
installBundle(spec, { registry }),只影响这一次安装。
2. 配置模板自动填好(profile-config 升级)
- 从它自己的 bundle patch 里的
config:默认值 + profile 里现有的行配置,合成一份带真实键的模板,替代原来的空{}。 - 零依赖的 YAML 扫描器只认「能确定的一层标量」:嵌套映射、
!!js、锚点/流式集合一律略过并列出键名,宁可模板小一点,也不给错的值。 - 面板 detail 里写明模板来自哪里、略过了哪些键。
3. 打开没启用的功能(rows)
- 审计读
listBundles()/listPlugins(),指出该包声明了但 loader 没在跑的行(以及 bundle 本身是否被关着)。 - 方案里给「打开它声明但没启用的功能」;执行时走
setPluginEnabled(bundle 关着则先setBundleEnabled),只碰该包自己声明的 id,并把结果逐行报告。
4. 有新版就更新且保留你的设置(upgrade)
- 审计比较 profile 里的版本与上游最新版;有新版就给「更新到 X(保留你现在的配置)」。
- 它只改依赖版本,不动你的 profile 配置行;执行结果里回显「从哪个版本升上来的」。
5. 装完验一遍真生效(verify 升级)
- 装完不只核「装上了吗、id 重复吗」,还核激活:该包的行是否
active(failed直接点出来)、bundle 是否被选中、manifest 声明的浏览器半是否进了客户端模块图。 - 有问题给可读结论,例如「行 X 还没激活——通常要重启 dsh 才生效」「声明了浏览器半但模块图里没有 → 界面不会出现」。
界面
- 改动方案标题旁新增 「全选」「全不选」:一键勾上/取消所有可执行项。
两类故意不替你勾,并在面板上说明原因:① 需要你本人勾「接受风险」的放行项(版本豁免、撤销豁免);
② 「换个安装源」——它是下载失败时的补救,选中等于把下载源改掉,所以留给「换源重试」按钮或你手动勾。 client-selftest新增 8 条断言钉住这个行为(全选勾上计划项、跳过风险项与换源项、说明文字出现、全不选清空并撤掉说明)。
自测
- 新增第九套
enhance-selftest.mjs(全本地夹具,零网络)28 条断言:扫描器只留能确定的键、候选源顺序、模板与 profile 现值合并、有新版才给升级、升级不改配置、换源真的传进installBundle、行/ bundle 按 entryId 逐条启用、verify 给出停用行结论。 - 全套九套自测通过;
audit-selftest对真实目标已能看到新出来的registry/rows方案。
说明
- 宿主半换代
host-v9.js→host-v10.js(audit-v6/proposals-v3/runner-v7)。 - 仍然:不改第三方插件代码、不改宿主源码;所有动作先备份、默认关闭、需你勾选。
v1.1.0 - Desktop (packaged app) support
1.1.0 — 2026-10-01
Desktop(打包版)适配。两条桌面版专属问题都来自同一个事实:桌面版不是浏览器直连 Host——
窗口 origin 是 dsh-app://app,协议处理器转发前会删掉 origin / sec-fetch-site / cookie
(resources/app.asar/lib/main.js 的 forwardWebRequest),并注入 Host 自己的会话 cookie;
运行时又整个装在 app.asar 里、没有 src/ 源码树。
修复
- 面板全线 403「同源校验失败」(用户实测「清单加载失败」):旧的「Origin 主机 == 请求 Host」
围栏在桌面版必然失败(Origin 已被删)。现改为先问宿主自己的
connection.requestRejection——与官方@deepseek-ai/dsh-host-open-in-app同一条通道:
loopback/受信 Host 栅栏 +sec-fetch-site: cross-site拦截 + Origin 一致(有 Origin 时)+
浏览器 cookie 认证(无 cookie → 401)。本机 Origin 检查降级为没有 connection 服务时的兜底。
401/403 响应带回hint与seen(Host / Origin / site / cookie 有无),面板直接显示,
以后围栏再出问题不用猜。 - 槽口目录改为候选列表(
audit-v4.js的slotCatalogCandidates):行配置slotCatalogPath→
打包版.../@deepseek-ai/dsh-cordis-client-runner/lib/client.js→ profile 自己的node_modules→
源码树(沿 installAnchor 向上 ≤7 层找slot-catalog.ts)。 - 目录解析同时接受单引号与双引号(源码
key: 'settings.section';编译版key: "settings.section"),
且只认带点的槽口键——实测打包版编译目录解析出 77 个槽口键,旧解析器只认出 3 个(含 Client 服务名)。 - 主机半换代
host-v6.js→host-v8.js(ESM 按 URL 缓存,改代码必须换文件名);
cordis.patch.yml指向./host-v8.js。(host-v7.js是当天写出、当天即被 v8 取代的未发行中间态,
不进本版。)index.js只作转发,行名才是活的那份。
自测
- 新增
selftest-host.mjs(自测的宿主依赖动态探测:源码树 / 本目录 / 打包app.asar)+找不到就
SKIP而非 FAIL——旧的E:/DSH-OneClick/src/node_modules/.pnpm/...硬编码随 source 安装消失,
曾让两套自测直接 import 崩溃。 host-selftest新增 7 条:桌面版形状请求(无 Origin / 无 sec-fetch-site / 带 Host cookie)必须放行、
同一请求去掉 cookie → 401 且带hint/seen、connection服务确实被问到、无 connection 时兜底围栏仍拦。
未变
- 其余 12 项检查、清单浏览、审批式安装、四文件备份、
client.js的结构(仅错误提示更详细)全部未改。
实测(桌面版 0.2.0-rc.2)
install_bundle本地 link 安装applied零警告;五条路由挂载;同源外 Origin → 403;
匿名(无 cookie)→ 401;实审dsh-plugin-whale-petblock 0 / warn 1(不在精选清单)/ pass 8 / info 3,
slot-audit pass(目录=app.asar/.../dsh-cordis-client-runner/lib/client.js)。- 七套自测全绿:
semver在桌面版 node 下用app.asar里的 semver 跑出 1280/1280 全等。