# 版本沿革（详细）

> 本文件保留 README 精简后移出的逐版本说明与语义沿革，内容以 v1.2.20 发布时的 README 记载为准。
> 当前版本线与兼容范围见 [README「版本兼容」](../README.md#版本兼容)；发布产物见
> [GitHub Releases](https://github.com/iasiv5/dsh-copilot-auth/releases)。

## 版本矩阵（v1.2.0 ～ v1.2.20）

| 本插件 | DSH 实测版本 | authorization 服务 | 说明 |
|---|---|---|---|
| v1.2.20 | `0.1.7-rc.2`+（同 v1.2.x 运行时兼容范围） | runtime 内置，插件不挂载 | **文档与截图更新**：README 改为精简的热门插件结构，新增未登录、设备码、GitHub 授权与退出确认 WebP 实拍；移除非本插件模型页截图。无运行时代码行为变更。 |
| v1.2.19 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **管理模型列表 v3：目标状态编辑**——「补充/重建」双入口合并为单一「管理模型列表」分组全表（可新增/在列/待删除候选，勾选即终态，支持挽留与「对齐账号与目录」）；移除成为一等能力且定制随模型保留/消失（`removals-need-live` 门控：移除类强制实时证据＋latest 目录，缓存下自动升级 live）；单次确认（Q37，风险线常驻底栏前置告知）；「请求撤回」移除（Q38）＋退出后 attempt 残影清空（修复「退出没作用」循环）。协议 v3。其余同 v1.2.18 |
| v1.2.18+ | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **授权失败附网络失败码＋人性化提示**：`fetch failed` 这类 Node undici 网络层异常的原话不含定位信息，现按 `cause.code` 映射为可操作的提示——超时/拒连→「检查网络或代理设置」、域名解析失败→「检查 DNS」、证书校验失败→「可能存在企业 TLS 检查拦截」；原始失败码弱化展示供诊断。其余同 v1.2.17 |
| v1.2.17 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **保留模型逐项列出**（弱化色，与增/删同构）——「保留 (N)」自 v1.2.8 起只有计数没有清单，预览终态不可审计；数据服务端一直有，本版补上渲染。其余同 v1.2.16 |
| v1.2.16 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **移除物化中指示浮层**：勾选为乐观即时反馈、物化通常亚秒完成，任何显隐指示都构成闪烁（主人裁决完全移除）。物化中「应用更改」点击由状态机安全忽略（防旧 previewId 提交），指示移除后卡片视觉零变化。其余同 v1.2.15 |
| v1.2.15 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **物化指示改右上角浮层**（绝对定位、透明度渐显渐隐、不占布局流）——取代 v1.2.14 的常驻占位行（占位行零位移但留空行，显空旷）；弹跳与空行双消除。其余同 v1.2.14 |
| v1.2.14 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **消除弹窗上下弹跳**：「拉取预览中…」物化指示改为**常驻占位行**（visibility 显隐，不插入/移除节点）——v1.2.13 固定高度解决了整卡伸缩，本版消除指示条插入/移除引起的垂直位移。其余同 v1.2.13 |
| v1.2.13 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **修复模型弹窗勾选闪烁**：勾选/全选触发的物化期间弹窗保持挂载（历史实现切回 `previewing` 导致弹窗整体卸载重挂——卡片闪现「拉取预览中」、滚动位置丢失，实测探针元素直接从 DOM 消失）；弹窗改固定高度三段式（头部/内部滚动/常驻操作栏），尺寸不再随增删列表变化；勾选走本地乐观更新（服务端回显到达后对齐）。其余同 v1.2.12 |
| v1.2.12 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **交互打磨**：「补充模型」的全选按钮在全选中切换为「取消全选」（任一取消勾选即恢复「全选」）；「重建」风险提示精简为一行；成功路径的「技术详情」计数移除（与弹窗增删列表重复），技术详情仅在真实失败时展示。其余同 v1.2.11 |
| v1.2.11 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **界面收敛：移除「重新授权」按钮与 `capabilities.reauthorize` 能力位**（逻辑冗余——已登录只需退出登录，未登录入口本就是「授权登录」；换号/重授权＝先退出再登录两步）。其余同 v1.2.10 |
| v1.2.10 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | **退出登录正式可用**：无进行中授权尝试且无未核实风险（风险锁存）时，经确认弹窗清除凭据并**删除后立即复核**（凭据未消失则如实报「退出未完成」）；授权尝试进行中（begin 晚写窗口）与撤回/超时未核实期一律拒绝退出。`/status` 的 `authorization.capabilities.logout` 按可用性动态返回。经主人 2026-10-05 裁决替代 v1.2.8 D-01「退出全禁」策略 |
| v1.2.9 | `0.1.7-rc.2`+（`0.2.0-rc.1` web 与 `0.2.0-rc.2` desktop 已实测） | runtime 内置，插件不挂载 | **修复 v1.2.8 授权页显示回归**：授权状态机漏接 `fetch`，页面恒显「未登录」、点「授权登录」恒「失败」且请求根本不发出（2026-10-04 实机实证，nginx 全量零 `POST /copilot-auth/start`）。另加：/status 加载失败退避自愈重试（60 秒转手动＋「查询状态」）、失败原因分层展示（网络/网关/响应，不再裸「失败」）、已登录时服务端拒绝替换性授权（409 `already-configured`）且客户端自动恢复已登录视图 |
| v1.2.8 | `0.1.7-rc.2`+（`0.2.0-rc.1` web 与 `0.2.0-rc.2` desktop 已实测） | runtime 内置，插件不挂载 | **协议 v2：诚实的授权语义＋补充/重建双入口**。授权侧：等待中可「请求撤回」（结果如实显示待核实）、退出/重新授权在宿主可证明安全前禁用并说明、单实例 attempt、15 分钟等待上限、晚到授权成功不再写配置；模型侧：旧「刷新」拆为「补充模型」（候选默认不勾选、非破坏）与「重建模型列表」（二次确认＋清 modelOverrides），预览 10 分钟绑定选择、operationId 幂等、配置并发编辑优先、崩溃可恢复（「结束旧配置意图」显式闭环），状态按 profile 隔离（旧全局状态只读提示）；模型路由要求 `protocolVersion:2`，GET `/status` 零写探针；v1 函数族已从 state.mjs 移除。**已知缺陷**：授权状态机漏接 fetchImpl → 授权页恒「未登录/失败」（v1.2.9 修复） |
| v1.2.7+ | `0.1.7-rc.2`+（`0.2.0-rc.1` web 与 `0.2.0-rc.2` desktop 已实测） | runtime 内置，插件不挂载 | **重启后自动恢复**：注入后以宿主 `listModels` 复核，未端出即**净零切换**（`displayName` 改后复原；两次真内容变化 ⇒ 宿主必然重建快照，用户配置逐字节不变）触发重建；另加双路取实例 + `registryInstanceMismatch`/`registryVia` 诊断。修复 v1.2.6 的"同值写不改变配置身份 ⇒ 快照不重建" |
| v1.2.6 | `0.1.7-rc.2`+ | runtime 内置，插件不挂载 | 首次引入宿主侧复核与 `settingsNotServed` 诊断；重启自愈用的"同值触碰"**实测不足**（同值写不改变配置对象身份），重启后模型可能仍不出现——请用 v1.2.7 |
| v1.2.5 | `0.1.7-rc.2`+（`0.2.0-rc.1` web 与 `0.2.0-rc.2` desktop 已实测） | runtime 内置，插件不挂载 | **desktop 只读形态可刷新**：进程内目录注册表注入（ADR 0003），无需重启、不碰官方产物；`0.2.0-rc.2` desktop **实机端到端已验**（注入条目完成真实推理请求）；同批修复 pi-ai ≥0.99.0 的 `chat:` 目录键格式。**已知缺陷**：重启后若宿主快照先于注入定稿，注入条目会被丢弃（v1.2.6 修复） |
| v1.2.4 | `0.1.7-rc.2`+（`0.2.0-rc.1` web 与 `0.2.0-rc.2` desktop 已实测） | runtime 内置，插件不挂载 | desktop asar 只读形态：目录刷新入口显式置灰（ADR 0002），登录/路由/settings 不受影响 |
| v1.2.0 ～ v1.2.3 | `0.1.7-rc.2` ～ `0.2.0-rc.1`（web/服务形态） | runtime 内置，插件不挂载 | 适配 settings API 重塑后的 describe() 行形状；desktop asar 形态下目录刷新不可用且报错不友好 |
| v1.1.x | `0.1.2-rc.1` ～ `0.1.5-rc.2` | 由 cordis.patch.yml insert 挂载 | v1.2.0 起移除该补丁，旧版 DSH 上无法激活 |

## 已移除能力的语义沿革

- **「请求撤回」（Q38，2026-10-05 移除）**：真机验证发现其进程级风险锁存会造成「登录成功却不能退出」死局，且它本就无法真正撤销 GitHub 侧设备流；误启动的等待由 15 分钟超时自然收敛（超时后仍属「结果待核实」，锁存至进程重启）。
- **「重新授权」独立按钮（v1.2.11 移除）**：逻辑冗余——已登录只需退出登录，未登录入口本就是「授权登录」；需要换号/重授权时，先「退出登录」再「授权登录」即可。
- **退出登录（v1.2.10 落地）**：无进行中授权尝试且无未核实风险时可退出——确认弹窗（将清除同一凭据库中所有实例共享的 Copilot 授权，不注销 GitHub 账号）→ 删除凭据 → **删除后立即复核**，凭据仍在则如实显示「退出未完成，授权凭据仍可能存在」；授权尝试进行中（设备码等待期，begin 晚写窗口）与超时未核实的风险锁存期一律拒绝退出。
