Skip to content

Releases

v0.9.1 — 账号版 DeepSeek 的默认等级终于生效

Choose a tag to compare

@github-actions github-actions released this 22 Oct 07:43

v0.9.1 — 账号版 DeepSeek 的默认等级终于生效

为什么发这个补丁

用户报障:全局默认设成 max,但 DeepSeek-V4.1-Flash 的输入区控件仍显示 High。

根因不是配置写错了,而是插件少认识了一条路由——你有两条 DeepSeek 路由,插件此前只同步了其中一条:

路由 提供方 设置命名空间 0.9.0 及以前
deepseek-official API Key 版(@deepseek-ai/dsh-llm-deepseek-api-key) llm-deepseek ✅ 一直同步
deepseek-account 账号版(@deepseek-ai/dsh-llm-deepseek-account) llm-deepseek-account ❌ 一次都没写过

账号版路由的默认等级只由它自己的 reasoningEffort 决定,出厂默认 high——那就是你看到的 High。它不在 llm-pi-ai.providers 里,所以插件的全局默认从来没有落到它身上。

修复

  • 两条 DeepSeek 适配器路由表化:deepseek-official 与 deepseek-account 各自独立同步、各自持有所有权台账,互不干扰。适配器未安装时(设置节不存在)不写、不落台账——不凭空创建配置。
  • 模型级默认同样补上:agent/request 注入原本要求「知道该模型支持哪些档」,而这条信息只来自 resolveModelInfo;任何给不出的情况都会让「按模型设的档位」静默失效。现在对这两条路由按文档化契约兜底为 off/low/high/max(official 版是代码常量 OFF/LOW/HIGH/MAX_REASONING_EFFORT,account 版 README 明写「每个模型都提供 off、low、high、max」),且只在适配器确实安装时兜底;真实上报更宽的档位时以真实上报为准。
  • 所有权台账其实从未记住「原始值」(独立审查发现,比竞态更严重):schemastery 会把缺席的嵌套字段物化成 {},旧判据据此永远认为「台账已存在」,于是 original 始终是 undefined,写入时被 cloneJsonShaped 剥掉。真机 profile 里两条路由的台账都只有 level、没有 original——也就是说「关闭插件还原你原来的设置」这件事一直没真正生效过。现在改为「有 level 才算持有所有权」,原值在写之前捕获,且升级用户的旧台账按「原本缺省」处理(走 unset,不把插件自己的写入当成你的原值再写一遍)。
  • 台账写入串行化:两条路由连续写台账时都读到同一份旧值、后写覆盖先写;改为 promise 链串行 + 落定后再失效 describe 缓存。
  • 探测归因修正:deepseek-account 的模型在探测结果里不再被误报成「由其他适配器提供」,而是 官方适配器(此前会让人以为是第三方插件)。

验证

新增 test/deepseek-account-sync.test.mjs 14 条判别用例(路由级 6 + 模型级 5 + 台账物化形状 3):

  • 路由级 6 条:写入并落台账 / 两条路由互不覆盖 / 未安装不写 / 切到不支持档要还原 / 用户手改过不覆盖 / 探测归因正确;
  • 模型级 5 条:账号版注入生效 / API Key 版同效 / 词表外(xhigh)不注入 / 适配器未安装不注入 / 真实上报优先。

变异验证:把兜底改成恒 undefined → model-1/model-2 立刻红;把台账写改回非串行 → account-2 红。测试不是摆设。

  • node --test 146/146
  • client-smoke exit 0(11 组件 + 7 写入口实驱)
  • host:doctor 11/11 PASS
  • 用户真机验收:重启后确认「已经生效」

升级

dsh plugin update dsh-reasoning-level    # 或重装

重启 DSH 即生效。无需卸载、无数据迁移:新增的 applied.deepseekAccount 台账槽缺席即表示「未持有所有权」,旧配置原样可用。

历史数据说明:0.9.0 及以前版本的台账没能记住「原始值」(原因见上),所以旧版本已经覆盖掉的显式设置无法自动找回。如果你以前手动把某条 DeepSeek 路由设成过非默认档(比如 low),关闭插件时它会回到适配器默认(high)而不是你原来那个值——需要的话请手动重设一次。本版之后的新写入都会正确记住原值。

提示:改完等级后如果输入区控件仍显示旧值,重新选一次模型——宿主会把路由默认物化成会话的显式等级;适配器的 config 在加载时读取,也可以直接重启。

Full Changelog: v0.9.0...v0.9.1

v0.9.0 — 看得懂 · 改得动

Choose a tag to compare

@github-actions github-actions released this 21 Oct 05:56

v0.9.0 — 「看得懂 · 改得动」

这个版本不是加功能,是把一件已经能做的事变成看得懂的事。

上一版之后,我拿本机的真实调用数据(81,926 次)核对了一遍,发现三个说不过去的事实:

  • 30 个模型里 27 个的思考量显示为 0——不是没思考,是网关不回报 reasoningTokens,而页面把它画成一根横线,等于告诉用户「这个模型不思考」。
  • 等级几乎全在 max:zai-coding-cn/glm-5.3 的 20,148 次调用里 20,084 次是 max、63 次走默认、1 次 off,一次 high 都没有;整个环境里 high 只出现过个位数(glm-local/glm-5.3 5 次)。7 档里 minimal/medium/xhigh 一次都没用过——不是用户不想分级,是没有任何信息能回答「降一档能省多少、慢多少」。
  • 4 个模型探测 7 档全失败,页面只说「无可用等级」,而真正的错误码(鉴权、模型下线、限流、枚举拒绝)在 /probe 的响应里早就有了,只是被界面丢掉了。

所以这一版做三件事:让代价可见、让失败可解释、让操作不用查文档。

新增

等级代价洞察

统计聚合新增 per-level 桶(每个「模型 × 等级」的调用数 / 思考 tokens / 输出 tokens / 耗时 / 错误数),设置页新增「等级对比」——同一模型在两个等级上的平均耗时与输出量并排。

诚实边界:历史调用没有 per-level 拆分,所以视图会明说「数据自 v0.9.0 起累积」;它不会用旧计数反推 token/耗时(那是编造)。跑几轮不同等级的调用后这里才会出现对照。

探测失败可解释

  • lastProbe 新增 blockedReasons,「不可用」列按归因渲染:鉴权失败 / 模型不存在 / 限流 / 超时 / 连接失败 / 枚举不接受该档。
  • 新增结局 skipped:official-adapter:由宿主官方 DeepSeek 适配器管理的模型不再被误报成「不在 llm-pi-ai 配置——未写入」,而是说明「等级经官方通道下发,无需写能力声明」。
  • skipped:not-in-pi-ai-config 拆成两种可行动文案:provider 已配置但没列这个模型(去添加)/ provider 归其他适配器(无需处理)。

易用性

  • 模型级默认可搜索:输入即过滤(最多 8 条),支持直接输入 provider/model 精确键;空输入不再铺候选列表——进页面先看到「已配置了什么」。
  • 支持矩阵:可展开查看全部模型 × 7 档的实测支持情况(✓ 实测支持 / ✗ 实测拒绝 / ? 未知),带覆盖率。✗ 只在有实测证据时才标,「没列出」一律记 ?。
  • 影响预览:改全局等级前就知道「多少模型支持、多少会跳过、多少能力未知」。
  • 统计工具栏:暂停/继续 2 秒轮询、只看异常、列头排序。
  • 写操作撤销:保存后 3 秒内可一键撤销(含「删除模型默认」的对称恢复)。
  • 等级名 en 全量双语(UX-002 闭环)。

变更

设置页信息架构与视觉重构

从「5 张内联样式表格卡片」改为「页头摘要 → 概览指标 → 全局/辅助 → 模型级 → 观测 → 说明」:

  • 等级选择从裸 <select> 升级为分段控件,每档带含义副标(不思考 / 一笔带过 / 轻量推理 / 常规推理 / 深度推理 / 更深推理 / 最深推理),悬停给出适用场景,方向键可切换。
  • 样式从内联迁移到注入式样式表(全部 .rl- 前缀):从此支持 hover、:focus-visible 焦点环、窄屏栅格、过渡动效、prefers-reduced-motion;颜色全走设计令牌,继续明暗自适应。
  • 补齐 role/aria-checked/aria-pressed/aria-sort/aria-live 与键盘操作。

表格布局(4 轮真机反馈后的结论)

  • 所有表格包 overflow-x 容器 + table-layout: fixed + 显式百分比列宽——自动布局下 chips 列会被压到 70–90px,7 个 chip 竖成 7 行;只加 min-width 无效。
  • 探测结果表 5 列 → 4 列(「实测拒绝」与「其他错误」合并为「不可用」,红=拒绝 / 黄=失败)。
  • 模型聚合表 8 列 → 7 列(建议改为模型名下的小字)→ 6 列(错误率改为调用数旁的 ⚠N% 标记)。
  • 探测结果默认折叠,摘要行常驻;「持久化」列改短标签,完整解释挂 title。
  • 大数字紧凑化(~30.9M 字 / 9.26M tok / 18.9s),原始值放 title。

修复

  • 本地 node --test 基线红(MAINT-039):contract-guard 的 guard-1 直接断言 $DSH_HOME/storages/reasoning-level-migrated.json 不存在,而任何真用过本插件的机器上该文件真实存在 → 门禁恒红,真回归会被淹没。改为「mount 前后快照对比」。
  • 枚举式拒绝误判:网关返回 Invalid option: expected one of "off"|… 时,旧判据只认 reasoning effort "X" 字样,于是被当作「其他错误」并把整段 JSON 铺在表格里。新增枚举证据判定(枚举语义 + ≥3 个 effort 词 + 被请求档不在枚举 → rejected)。
  • 归因规则收窄:原来任何含 model 的消息都会被说成「模型不存在」(model overloaded 也中招),收窄为真正的 not-found 语义,并新增「枚举不接受」与「连接失败」两类。

备注

  • 零破坏:llm-reasoning 字段语义、7 条写路径调用形状、entry id(llm-reasoning)、宿主导出契约均未变更;配置 schema 只追加可选字段(lastProbe.models.*.blockedReasons),旧配置无需迁移。新增的 byLevel / blockedReasons / suggestionKind 对旧客户端与旧服务端都是可忽略的追加项。
  • 升级:dsh plugin update(或重装)+ 重启 DSH,无需卸载、无数据迁移。等级对比数据从本版开始累积。
  • 已知边界:探测归因 blockedReasons 只在结果表/title 展示、未进 CSV;3 秒撤销的真实浏览器行为需真机复验(测试沙箱以桩替代 window.setTimeout);MAINT-040 承载四项未接线的易用性快捷操作与 lastProbe 并发写加固(不阻塞本版)。
  • 质量依据:全量回归 132/132、client-smoke 11 组件 + 7 写入口实驱断言 + 表格布局回归断言、host:doctor 双树 11/11 PASS、独立 Code Reviewer R0 APPROVED_WITH_NOTES / unresolved_blockers=0(含 4 组变异实验证明新增测试可红)。
  • 开发工具:新增 npm run ui:preview——从 lib/client.js 抽真实样式表生成静态复刻页并截图。client-smoke 只能证明「渲染不抛错」,证明不了「表格没被挤成一列」;这个工具让观感问题可复现、可对比。

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 20 Oct 11:40

v0.8.1 — 修复 v0.8.0 在 DSH 0.2.x 上统计/探测端点不挂载

为什么发这个补丁

v0.8.0 适配 DSH 0.2.0 的「profile 行插件」形态后,有一个真实缺陷:插件在 apply() 期一次性向宿主取 webServer 服务,而 DSH 0.2.x 的代序中该服务常常晚于插件 apply 才挂载(cordis 4 的 ctx.get(name, strict) 对「尚未激活的提供方」返回 undefined)。结果是本插件四个 HTTP 端点(统计 / 测试 / 探测 / 固化)整块被静默跳过——设置页显示「统计端点不可用」、一键探测与固化不可用,且没有任何日志;设置面(全局/模型级等级、注入链)不受影响。

修复内容

  • 端点挂载改为 ctx.inject(['webServer']) 等待服务就绪再注册:服务重启(新实例)自动重挂,同一实例重复投递幂等;宿主无注入表面时回退一次性探测;挂载异常只降级端点,绝不影响插件行加载与宿主。
  • 契约漂移不再静默:webServer 可见但 register 非函数时直接 logger.error 明确指引;路由注册失败日志去掉「duplicate」的确定归因。
  • host-compat 收编新契约常量与出处台账(cordis strict 语义 + 兄弟插件先例);测试夹具的注入按依赖名分派,新增「服务晚到」判别用例(旧代码 4/5 红)。

验证

  • 全量回归 113/113(基线 108 + 新增 5)、client-smoke 5 组件、node --check 全绿
  • host-doctor 双树 11/11 PASS(活宿主 0.2.1-rc.2 + devDeps 基线)
  • 隔离实例 A/B:修复前四端点 404;修复后 /reasoning-level-stats 200(contractHealth.ok=true)、/test、/probe 400(路由已挂载)
  • 用户重启真机验收:统计面板恢复、真实调用数据回显(「已经生效」)
  • 独立 Code Reviewer R0 APPROVED_WITH_NOTES,0 阻塞项(语义零漂移机械比对 + 真实 cordis 生命周期实证 + RED 独立复现)

升级

  • 无需卸载:dsh plugin update(或重装)+ 重启 DSH;无配置/数据变更,无迁移动作。
  • 回退到 0.8.0 会重新失去统计与探测端点(设置面不受影响)。

Full Changelog: v0.8.0...v0.8.1

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 00:33

v0.8.0 — DSH 0.2.0 适配 + 版本依赖解耦

0.8.0 (2026-10-17)

Breaking Changes

  • 宿主要求升级:DSH ≥ 0.2.0-rc.2(MAINT-035,DEC-019)。DSH 0.2.0 对设置系统做了架构反转——插件设置声明从 settings.register(ns, schema) + settings.yaml 模型改为插件入口 Config 导出(全字段 volatile 投影)+ profile cordis.patch.yml config 覆盖层模型,设置命名空间 = profile entry id,两代模型互斥。本版仅适配 0.2.0(单一代码路径,质量可控);旧宿主(0.1.x)上插件安全自禁用——启动时契约自检发现代际不符即 log 明确指引并禁用数据面,绝不阻塞 DSH 启动(整机爆炸半径零)。
  • 升级路径变更:从 v0.7.x 升级需先卸载旧版再安装(dsh plugin remove dsh-reasoning-level → 重新 add)——entry id 由 reasoning-level 改为 llm-reasoning(设置 ns 连续性),设置存储模型变更,先卸载避免新旧 entry 并存。

Added

  • 旧配置一次性自动迁移(DEC-019):宿主升级 0.2.0 时会把旧 settings.yaml 一次性导入各同 id entry——升级窗口内本插件未安装的用户,其旧配置(全局等级 / 模型级默认 / 一键探测固化产物 probeEfforts / 所有权台账 applied / 最近探测回显 lastProbe)滞留在 settings.yaml.imported。本版安装后首次启动自动检测(新配置为空 + 滞留段存在)→ 字段白名单过滤(键集单源自 Config schema,防意外形状)→ 导入新配置模型 → $DSH_HOME/storages/reasoning-level-migrated.json 标记防重复(用户重置配置后不会被旧数据复活)。对 .imported 文件只读;迁移失败仅记日志跳过,不影响其余功能。
  • 宿主契约自检 fail-loud + 页内可见降级(MAINT-036,「升级即失效」结构性对策):①启动时校验全部消费面(settings describe/update/replace/mutate、llm resolveModelInfo/stream、webServer.register)——缺失即 log error + 数据面自禁用 + 统计端点下发 contractHealth 健康字段,设置页页顶显示中英双语告警条(宿主本身不受影响)——历史三次升级事故的「静默失效」形态自此变为「页内可见降级 + 指引」;②设置事件新旧名双注册(settings/document-updated 主名 + settings/updated 历史名容错)——宿主改名类漂移降级为「旧代名仍活」而非钩子静默死;③settings 服务改运行时可选注入(静态依赖仅 llm/timer)——无设置服务的极简 profile 插件行仍可加载;④旧宿主(0.1.x)形态识别(描述符永不出现 → 重试耗尽 fail-loud 自禁用)。
  • describe 结果缓存(REVIEW-MAINT-035+036-R0 P1-1):宿主 settings.describe() 无缓存(每次全量 profile 目录读 + YAML 解析 + schema 序列化,实测 ~8.5ms/次),热路径(每次 agent/request 注入判定与 llm/stream 统计)逐调用触发会给每个请求加 10-40ms。现缓存 + 三重失效(设置变更事件〔宿主对所有写者 emit,含本插件自身写〕/ 自有写落定主动失效 / 5s TTL 兜底)——请求路径零影响承诺恢复。

Changed

  • 设置读写全面迁移到 0.2.0 模型(对用户透明):自有设置 = 插件 Config volatile 声明(ns = entry id llm-reasoning);跨命名空间读写(llm-pi-ai 能力声明固化 / llm-deepseek 官方路由同步 / agent-default-model 默认模型同步)统一走 describe() 描述符(value 有效值 / user 覆盖层),写路径 mutate/replace 形状不变;settings.configure({auto:false}) 对齐宿主「自带设置页」原生模式。
  • devDeps 判别基线锁版 0.2.0-rc.2 全量(cordis 4.0.5 / schemastery 3.18.5),并增锁 @deepseek-ai/dsh-llm-pi-ai / dsh-llm-deepseek / dsh-agent-default-model——三个跨命名空间写入目标的配置 schema 全部落入 CI 判别断言域。
  • host-doctor 探针判据反转为消费集视角:C4 由「契约表 == 宿主方法集」改为「本插件消费的方法 ⊆ 宿主方法集(逐方法元数断言)」,宿主侧新增方法(如 openSettingsDocument)不再误报 FAIL——每次宿主升级的适配噪声进一步收窄;S2 导出面清单转 INFO 记录。
  • 运行时依赖策略不变(dependencies 恒空、peers *);零数据破坏(旧 probeBlacklist 兼容字段保留,.imported 只读)。

Fixed

  • settings 服务重启场景事件处理器不再累积重复(挂注入子 fiber,随服务生命周期销毁重建——REVIEW R0-P2-1);boot 的 entry 接线等待与 pi-ai 就绪等待计数拆分(REVIEW R0-P3-3)。

Notes

  • 升级注记:0.7.x → 0.8.0 先卸载再安装;安装后重启 DSH,旧配置自动迁移(日志可见「旧版设置已一次性迁移」;一键探测结果在设置页回显即为迁移成功佐证)。升级前如需保险,可备份 $DSH_HOME/settings.yaml.imported(本插件对它只读)。
  • 回退安全:卸载本版 → 安装 v0.7.7(要求宿主同时降回 0.1.x——两代设置模型互斥,宿主 0.2.0 上 v0.7.7 无法工作,会安全自禁用)。
  • 质量依据:Code Reviewer 终态 APPROVED_WITH_NOTES unresolved_blockers=0(REVIEW-MAINT-035+036-R0:宿主事实源逐项对账吻合、迁移安全性/契约自检/单源一致性/回归面/测试保真度六项全过;P1-1/P2-1/P3-3 三项发现已修复并带判别测试)+ 全量回归 108/108 + client-smoke 5 组件 + host-doctor 双树 11/11 PASS(宿主活树 0.2.0-rc.2 + devDeps 基线)+ 隔离环境安装冒烟。
  • 发布范围 = MAINT-035(185692f)+ MAINT-036(fbf0f2c)+ 复审修复(f36c6df)+ 版本收口;用户真机重装验收(M7.7,含旧数据迁移指名验证)于发布后执行。


宿主 rc 通道注记:DSH 0.2.0 当前处于 rc 收敛期(本版实证基线 = 0.2.0-rc.2)。宿主后续升级后请先跑 DSH_HOST_TREE=<宿主 node_modules 路径> npm run host:doctor 确认契约面(11 探针),发现 FAIL/DRIFT 时以 doctor 输出的漂移定位建议为适配起点。

v0.7.7

Choose a tag to compare

@github-actions github-actions released this 12 Sep 12:25

0.7.7 (2026-09-12)

Fixed

  • 手写全量声明的自定义 wire 不再被固化覆盖(MAINT-019 P2-1,保 wire 红线):用户恰好手写 7 键全量能力声明、且其中任一档 wire 与标准值不同(典型:openai 系路由手写 off: 'disabled')时,形状判定仅按 key 集识别,把这份手写声明误判为「本插件生成」——一键探测的固化/收敛随即以标准 wire 整体替换,用户自写的 wire 被悄悄覆盖(违背「用户手改的配置永不被覆盖」承诺)。现 7 键判定叠加逐键 wire 标准性校验(基准 = 本插件生成表),任一键 wire 非标准即判为手写、走并入语义(保留原 wire + 实测可用档位追加)——手写全量声明自此与其它手写声明同等待遇;6 键 / 5 键生成形状判定不变(wire 过期正是旧生成声明待升级的信号)。
  • levels 筛选探测不再缩档替换原声明(MAINT-019 P2-3):带 levels 筛选调 /probe 时,探测以筛选子集为 working 集触发固化收敛,把模型声明的全量档位缩水成筛选子集(一次带筛选的探测即可削掉声明里的等级)。现筛选探测只测量不固化——探测照常执行并如实返回结果,探测窗口内写过的全量声明回滚为探测前原声明,结局如实标注「待应用(pending-apply)」而非误报已固化,也不落成持久化错误。

Added

  • 探测/诊断看护加固(MAINT-031 + MAINT-034,面向开发者与排查者):①host-doctor 事件锚探针的「全不可解析」判定基由锚点数改为派生去重包集——修前该分支恒不可达,整树不可解析时误报部分命中(「可解析包的锚点全部命中」)把排查方向带偏;②新增「回滚写失败」分支看护(注入第 2 次写入抛错 → 断言结局为持久化错误、声明停在探测临时全量形状;不注入的同夹具对照走「待应用」,非空转);③该「全不可解析」文案入 host-face-contract 断言(旧判定基下可判红,防回退)。

Changed

  • 文档口径与事实修正(MAINT-031 ②⑤ + MAINT-033,纯文档、行为零变更):analysis-0.1.5.md §1 元包发布时间戳改配元包自身实测时刻并标注归属(修前误用工作区包的发布时刻);docs/host-compat/ 两文件内日期口径统一为权威日期 2026-09-12(共 11 处);本 CHANGELOG 0.7.6 段标题行日期更正为 2026-09-12(修前误作次日;权威依据 = git 提交链 + 系统时钟;该行同时是 GitHub Release v0.7.6 body 的事实源,随后刷新)。lib/index.js 两处推断性注释改为事实表述、测试注释引用的源码行号刷新至当前实际(判定逻辑零改动)。
  • 无 breaking changes;无用户数据迁移、无设置 schema 变更;运行时依赖策略不变(dependencies 恒空、peers *);无 Feature Flag 变更。
  • 版本号 0.7.6 → 0.7.7(PATCH:两项探测/固化缺陷修复 + 看护与文档修正,无新用户功能面、无 breaking、无运行时依赖变更)。

Notes

  • 升级注记:0.7.6 → 0.7.7 无用户数据迁移、无设置 schema 变更;两项修复只作用于「手写 7 键全量声明 + 自定义 wire」与「带 levels 筛选的探测」这两个具体形状,未命中者行为完全等价(其余路径零改动)——升级即得,无需任何用户操作,已按 0.7.6 产生持久化数据的用户亦无需处理。
  • 向后兼容(回退安全):本版零新增持久字段、零设置 schema 变更,回退 0.7.6 无冲突。
  • 已知遗留:①MAINT-032(P3)——/probe/apply 无 filter 语义:外部 API 客户端若把带筛选的探测结果回传该端点,仍会按「实测即真值」写入该子集(内置客户端不发送筛选参数,故当前无用户面暴露;若未来 UI 增加筛选入口,此 P3 应升级);②所有权台账 llm-reasoning.applied 在同帧多路径写入下的理论竞态(0.7.5 起登记,有自愈路径,加固待排期);③审查记录级 P3 备忘若干(含 host-probes 部分命中分支文案暂无持久看护)。
  • 发布范围 = MAINT-019 + MAINT-031 + MAINT-034 + MAINT-033(9b1f9bf / 152309a / dc47d42 / 版本收口与 CHANGELOG 日期口径);质量依据:各任务审查全闭环(Code Reviewer 终态 APPROVED_WITH_NOTES unresolved_blockers=0)+ 全量回归 87/87 + client-smoke 5 组件 + host-doctor 活树(0.1.5-rc.2)11/11 PASS + npm pack 资产核验(total 9)+ 用户真机验收通过(源码路径安装态 = v0.7.6 + MAINT-019/031 补丁,四项验收〔页面渲染 / 按钮写路径 / 探测固化 / 注入链无 UNSUPPORTED_REASONING_EFFORT〕全正常;v0.7.7 严格 tag 内容的真机验收于发布后执行)。

v0.7.6 — dsh 0.1.5 兼容性实证 + 宿主依赖边界架构演进(host-compat 单点契约 + 判别守护 + host-doctor)

Choose a tag to compare

@peterwangze peterwangze released this 12 Sep 04:04

0.7.6 (2026-09-12)

Added

  • 宿主兼容看护体系(FEAT-002,面向源码仓库开发者):①判别测试升级为双工件源——工件源① devDeps 锁版基线(CI 恒断言、fail-closed),工件源② DSH_HOST_TREE 环境变量指向活宿主树(在场即断言、缺席逐条显式 SKIP)——逐触点以真实宿主工件断言(导出面 / 函数逐字节 / 事件名存续 / RPC 方法集与元数 / effort 校验结构),杜绝「测试桩抄适配层假设自证」的 mock 假绿;②新增 npm run host:doctor 一条命令诊断——11 条触点 PASS / FAIL / DRIFT / SKIP 逐项表 + 宿主版本清单 + 漂移定位建议(分钟级、全程只读),与 CI 判别测试共用同一探针模块(判据零分叉);③devDeps 基线增锁 @deepseek-ai/dsh-agent-loop / dsh-llm / dsh-host-webserver(@0.1.2-rc.1,非运行时依赖)——事件名 / 校验结构 / webServer 面全部落入 CI 基线断言域。dsh 升级的兼容问题发现路径从「用户报障」提前到「doctor 一跑 + CI 判别测试当日红」。
  • doctor 零执行守卫收口(MAINT-030):host-doctor 指向的宿主树零断言执行(如空作用域树)时退出码 2 fail-closed——修复空树误报健康(exit 0)的溜号窗口;随修坏树扫描输出透传、异常结构化报错、残树归因分级(SKIP-UNRESOLVED ≠ 契约 FAIL)。

Changed

  • 宿主依赖边界架构演进(FEAT-001,内部架构演进、行为等价):对 DSH 宿主的全部契约性依赖(事件名 / 服务名 / 命名空间接缝 / RPC 方法面 / 元数 / 信封形状)收敛到单一模块 lib/host-compat.js(客户端面为 lib/client.js 内嵌镜像段,机器锚定两平面一致),每条触点携带宿主出处台账(包名 + 版本 + 源码行)——dsh 升级适配的改动面收敛到「单模块 + 镜像段 + devDeps 锁版行」单点。运行时行为零变更。
  • dsh 0.1.5-rc 兼容性实证与声明面清理(MAINT-029):v0.7.5 全部宿主触点经 0.1.5-rc.2 宿主树逐项静态核对全兼容(dsh-settings 导出面一致、parseSettingsNamespace 函数体逐字节一致、4 事件名存续、api-remotes settings RPC 7 方法集一致、effort 校验结构未变、传递依赖字节级一致——报告 docs/host-compat/analysis-0.1.5.md);并移除自首版遗留的 @deepseek-ai/dsh-client-runtime 死 inject 声明(0.1.5 宿主树不存在该包、原生 client 插件均不声明——清理后 inject 对齐原生最小集)。
  • 无 breaking changes;无用户数据迁移、无设置 schema 变更;运行时依赖策略不变(dependencies 恒空、peers *);无 Feature Flag 变更。
  • 版本号 0.7.5 → 0.7.6(PATCH:兼容性实证 + 内部架构演进 + 看护工具,无新用户功能面、无 breaking、无运行时依赖变更)。

Notes

  • 升级注记:0.7.5 → 0.7.6 无用户数据迁移、无设置 schema 变更、行为等价(内部架构演进)——升级即得,无需任何用户操作。已知边界:npm run host:doctor 为源码仓库开发态工具(npm 安装包不含 scripts/,需在源码仓库内运行;README 已明示)。
  • 向后兼容(回退安全):本版零新增持久字段、零设置 schema 变更,回退 0.7.5 无冲突。
  • 已知遗留:MAINT-031(P3:probeEventNames 不可达分支文案 + 分析报告时间戳标注小修,后续版本处理)。
  • 发布范围 = MAINT-029 + FEAT-001 + FEAT-002 + MAINT-030 + DOC-002(910baed / 798b874 + 582d358 / b473976 + f369e7f / f393921 / a0ef3d6 + 版本收口);质量依据:各任务审查全闭环(Code / Design / Test Reviewer 终态 APPROVED_WITH_NOTES unresolved_blockers=0)+ 全量回归 80/80 + client-smoke 5 组件 + host-doctor 活树(0.1.5-rc.2)11/11 PASS + npm pack 资产核验(total 9)。

v0.7.5 — 探测结果持久保留 + 全局等级重启跟随(所有权台账)

Choose a tag to compare

@github-actions github-actions released this 06 Sep 05:18

0.7.5 (2026-09-06)

Fixed

  • 探测结果不保留修复:v0.7.4 及此前「一键探测全部模型并固化配置」的产物不留存——「固化 N 处」计数恒 0、no-change 收敛的定级不落盘、探测结果刷新/重启后不回显、不在 llm-pi-ai 配置的模型被静默跳过。现①/probe 响应携带每模型持久化结局分类,固化计数如实;②no-change 收敛补写 pin,定级完整落盘;③探测结果持久回显——lastProbe 落盘,重启 DSH 后设置页仍显示上次探测结果与结局列;④越界目标透明化——明确标注「仅展示,未写入」。升级到 0.7.5 即修复——无需配置迁移。
  • 全局等级未随模型切换生效修复:v0.7.4 及此前插件无路由默认所有权台账——重启 DSH 后无法认领自己写入的路由默认,全局等级变更被卡死不跟随;状态行按存在性计数掩盖真实值差异。现①所有权台账持久化(llm-reasoning.applied 落盘、boot 恢复)——重启后正确认领并跟随全局等级;禁用插件后可正确还原;②状态行值核对如实警示;③统计页「(默认)」条目新增复合标签(如「(默认→高)」)标注实际物化等级;④README 新增物化语义说明。升级到 0.7.5 即修复——0.7.5 前的历史陈旧路由值见升级注记。

Changed

  • 无 breaking changes;无依赖更新。版本号 0.7.4 → 0.7.5(PATCH)。

Notes

  • 升级注记:0.7.5 前的历史陈旧路由值(如 providers..reasoning: high)无台账可认领——需一次性手动删除该键后重启 DSH,插件即接管(此后全局等级变更永久跟随)。
  • 向后兼容(回退安全):applied(台账)与 lastProbe(回显)为新增持久字段,回退 0.7.4 时旧版忽略不冲突。
  • 已知遗留:台账持久化同帧多路径写入理论竞态(有自愈路径,0.7.6+ 加固)。
  • 根因分析详见仓库 docs/retro/rca-MAINT-027-028.md。

v0.7.4 — 设置写入全灭 P0 修复 + 真实工件判别测试防护

Choose a tag to compare

@github-actions github-actions released this 05 Sep 12:12

0.7.4 (2026-09-05)

Fixed

  • 设置页写入全灭修复(v0.7.3 P0 回归):v0.7.3 在 DSH 0.1.2-rc.1 上设置页几乎所有按钮与设置逻辑失效——全局开关、全局等级、同步 agent 开关、模型级默认增改删、辅助调用等级的每一次写入均报「保存失败」且设置值不落盘;页面渲染、模型下拉、实时统计与一键探测不受影响。根因:客户端 hostApiFace 适配层以 2 个位置参数转发 remote.settings.update/mutate,而宿主 0.1.2-rc.1 网关对 typed remote 执行严格元数守卫(要求 3 参 ns, patch/ops, expectedRevision),RPC 发起前即确定性拒绝。现适配层补齐第三参(显式 undefined = 宿主文档化语义「无条件写入」)。升级到 0.7.4 即修复——无需配置迁移或任何用户操作。

Added

  • 真实工件判别测试 + 契约校验桩(面向开发者/维护者):判别测试以真实宿主工件驱动真实 lib/client.js——适配层与宿主契约断裂在 CI 即红,杜绝「测试桩自证」假绿;client-smoke 冒烟桩升级为契约校验桩并实驱设置写路径。

Changed

  • 无 breaking changes;无运行时依赖更新(dependencies 保持空、peers * 不变);devDeps 精确锁版 @deepseek-ai/dsh-api-remotes@0.1.2-rc.1(判别测试工件来源,非运行时依赖)。

Notes

  • 客户端面对宿主的版本要求不变(DSH ≥ 0.1.2-rc.1,v0.7.3 既有)。
  • 根因分析与防护方案详见仓库 docs/retro/rca-MAINT-025.md。

v0.7.3 — DSH 0.1.2-rc.1 双面兼容 + 设置页 UI 重构

Choose a tag to compare

@github-actions github-actions released this 05 Sep 01:21

v0.7.3 — DSH 0.1.2-rc.1 双面兼容 + 设置页 UI 重构

适用宿主:DSH 0.1.2-rc.1+(设置页客户端面适配新宿主 typed remote 接口;旧宿主上插件可安全加载但设置页不出现,详见 README「宿主版本要求」)

Added

  • 设置页 UI/UX 重构(UX-001):现代卡片式 + 明暗自适应——设计令牌集中(色板/间距/圆角/字号阶梯)、5 卡片分区(全局设置/模型级默认/辅助调用等级/实时统计/说明折叠)、等级 chips 徽章、斑马纹表格、统一按钮体系;全部颜色半透明灰阶 + currentColor + 语义色半透明变体(零宿主 CSS 变量依赖);零新依赖,功能与 wire 面不变。

Fixed

  • DSH 0.1.2-rc.1 升级兼容(客户端面)(MAINT-022):dsh-client-connection 0.1.2-rc.1 移除 connection handle 的 api 字段,旧实现 connection.api 恒 undefined → 设置页「统一推理等级」内容区整页空白。现改为 hostApiFace 适配层——统一消费宿主 typed remote 命名空间(remote.settings describe/update/mutate + remote.session.modelCatalog),收敛为页面既有旧信封(页面消费点零改动);旧 connection 路径删除;命名空间缺失 fail-loud,数据面失败时错误文本直入页面(不再无限「加载中…」)。
  • DSH 0.1.2-rc.1 升级兼容(宿主面)(MAINT-021):dsh-settings 0.1.2-rc.1 从公共导出面移除 settingsNamespace,宿主行静态具名 import 在模块加载期即抛 SyntaxError——整机 DSH 拉不起。现改为命名空间导入 + 运行时探测的跨版本接缝:包内 settingsNamespace 优先(旧宿主),缺席时回退语义同源本地校验器(新宿主)——peers * 全版本可加载。
  • 新增回归守护:test/settings-namespace-compat.test.mjs(子进程存根,不依赖 devDep 版本)+ test/client-host-face-compat.test.mjs(新宿主形状 fixture 驱动真实 client.js,八用例——旧代码五例红,复现空白页根因)。

Changed

  • devDependencies @deepseek-ai/dsh-settings 0.1.1-rc.2 → 0.1.2-rc.1(精确锁版);运行时依赖策略不变(dependencies 恒空、peers *)。
  • 客户端模块 inject 声明更新:设置页要求宿主 ≥ 0.1.2-rc.1(官方先例 dsh-client-ui-settings-models 同型)。

验证

  • Code Reviewer R0 + Release Reviewer R0 均 APPROVED_WITH_NOTES(0 blockers);全量测试 11 文件 + client-smoke 全绿;CI check+release 双 job success。
  • 用户真实环境实测验收通过(2026-09-05):设置页正常渲染、统计可用。

Full Changelog: v0.7.2...v0.7.3

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 25 Aug 14:12

v0.7.2 — 2026-08-26

Added

  • 通用思考等级词汇表(MAINT-017):探测候选改为 7 档通用词汇表全量——off / minimal / low / medium / high / xhigh / max。候选不再受模型目录声明与预设枚举限制,qwen 等模型的非标准档位(如 xhigh、max)不再被过滤,可进入实测与固化。

Fixed

  • 探测等级发现修复(MAINT-017):v0.7.1 的 discovery 机制在真实环境未生效(dsh-llm 本地校验拦截声明外等级,网关收不到发现请求——用户实测 qwen 仍丢 xhigh)。现改为临时声明全量词表 → llm.stream 实测 → 固化收敛:实测可用的等级自动写回该模型能力声明(用户手写声明保留其等级与 wire 值、实测新档位自动并入;本插件生成或未声明的声明按实测集替换);每次探测全量重测全部候选等级,实测拒绝的等级仅作为该次探测结果展示。
  • 黑名单提示文案更新(MAINT-015):设置页「一键探测」相关提示不再声称"实测拒绝的等级已入黑名单并持久化(重启后仍生效)"——与黑名单仅该次探测结果、运行时自愈内存态(重启即清零)的实际行为一致。

Notes

  • 上述修复均为默认行为修正,无需配置迁移或用户操作。
  • 既有 probeBlacklist 设置字段兼容保留,不再生效,可安全清理(settings.yaml 中删除该键)。
  • 发布范围 = MAINT-017 + MAINT-015(不含 MAINT-018 主动探测演进 / MAINT-019 审查 P2 建议 / MAINT-020 审查 P3 记录项——已入账 0.7.3+)。