Skip to content

Releases

v1.3.0 - blocked reports get a way through, and capability proposals

Choose a tag to compare

@GIN0076 GIN0076 released this 01 Oct 10:28

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

Choose a tag to compare

@GIN0076 GIN0076 released this 01 Oct 09:48

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-pet block 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 全等。