v0.1.9
0.1.9
迁移:配置存储改为插件自有文件(0.1.5 / 0.1.7 行为一致,不再走宿主设置写通路)
新增
- 配置的唯一事实源改为插件自有文件
<profile>/.dsh-qoder-connect/settings.json,与凭证、catalog 缓存同目录。 - 一次性迁移:文件不存在时,从 profile entry 的旧值播种,并从
settings.yaml/settings.yaml.imported读取本插件 0.1.5 时代的三个 section(qoder/qoder-global/qoder-quota)——宿主只导入“名字与 profile 条目 id 相同”的 section,这三个名字不被导入,数据只存在于那份文档里,由插件自行读取。 - 新增 HTTP 设置面
GET/POST /plugins/dsh-qoder-connect/settings(loopback + per-process key 鉴权),供浏览器侧读取整体配置。 - 迁移完成后,自动把 profile patch 里本插件写过的字段删掉,只删自己的。
性能
- 模型开关(probe 路由)实测 ~8ms、设置面写入 ~20ms:旧的写入通路(0.1.7 的
configEditor.edit)每写一次都要全量 reconcile profile 树、热重载插件 fiber 并刷新所有客户端镜像。现在是一次本地原子文件写加原地应用,代价恒定,不随配置规模增长,也与宿主后续版本对设置写入的优化无关(0.1.7-rc.2 已改善切换模型时的等待)。 - 热重载的次生伤害一并消除:probe/auth 控制键改为进程级(不再随每次写入失效,卡片不再出现“刷新失败”);catalog 的 identity 与抓取记录跨重载保留,同账号不再因一次写入重新向上游抓取。
修复
- 模型禁用状态重启后丢失:装配各 variant 时直接读 entry 配置,而迁移清理后 entry 已空 → 每次重启都回到“全选”。改为读“entry + 自有文件”的实时视图。
- 「设置 - 模型」页看不到 Qoder:provider 目录行的
settingsNs用的是 0.1.5 命名空间(qoder/qoder-global),而 0.1.7 按 profile 条目 id(llm-qoder)投影设置表单,名字对不上 → 该页中此 provider 不显示。改为按宿主线取正确的名字(0.1.7 用条目 id)。 - 模型开关的两个字段不在顶层
Config:disabledModels/disabledModelsCN原先只存在于 0.1.5 的 per-card section schema 里,0.1.7 的describe()只投影顶层Config,因此即使名字对上,投影也为空。已提升到顶层(volatile)。 - 会话模型列表中价格缺失时显示空白:价格不可信(如促销已结束)时改为在模型名后显示「价格暂不可用」——与设置卡片同一措辞,避免光名字被误读为渲染缺陷。
- 迁移种子规则的默认值改为从 schema 的
meta.default读取,消除“手写默认值与 schema 不一致导致旧配置永远不同步”的一类问题。
兼容性
宿主要求:DSH ≥ 0.1.5-rc.2(0.1.5 线终点)。该下限已写入 package.json 的 engines.dsh,宿主会按它跳过不兼容的版本并提示。peer:cordis ^4.0.2、schemastery ^3.18.2、dsh-settings ≥ 0.1.5-rc.1 及 dsh-llm / dsh-llm-pi-ai / dsh-home-paths / dsh-atomic-write / dsh-attachment / dsh-host-webserver ≥ 0.1.5-rc.1、@earendil-works/pi-ai ^0.85.1、react ^18.2.0。
| 宿主版本 | 状态 | 说明 |
|---|---|---|
| 0.1.5-rc.2 | ✅ 支持 | 最低支持版本 |
| 0.1.7-rc.1 | ✅ 已验证 | 端到端实测:迁移、13 项禁用模型从旧文档恢复、模型开关重启持久、「设置 - 模型」页渲染 |
| 0.1.7-rc.2 | ✅ 支持 | 该版本改善了切换模型时的等待,本插件路径不受影响 |
为什么两个版本行为一致:配置不再经过宿主设置服务,而是插件自有的 <profile>/.dsh-qoder-connect/settings.json;各 variant 装配时读“entry + 自有文件”的实时视图。宿主之间设置写通路的差异(0.1.7 的 configEditor.edit 全树 reconcile、describe() 按条目投影、volatileOnly 快路径)都不参与读写,因此不存在“某版本下写入慢 / 写入后 catalog 失效 / 重启回默认”的版本性差异。
按宿主线取值的两处(运行时探测,不写版本号判断):
| 探测点 | 0.1.5 | 0.1.7 |
|---|---|---|
| cleanup 写入通路 | configEditor 不存在 → 走设置服务 replace |
configEditor 存在 → configEditor.edit |
provider 目录行 settingsNs |
旧命名空间(qoder / qoder-global) |
profile 条目 id(llm-qoder) |
已知版本差异(有意取舍):
- 0.1.7 的「设置 - 模型」页目前只为该 provider 占位:本版本修复了此前该页完全不显示 Qoder 的问题(目录行命名空间与 0.1.7 的条目投影对不上),页面上现在能正确列出该 provider。但该页的字段编辑器只覆盖宿主自己的 provider,模型开关一类插件配置没有编辑入口,请到「设置 - 插件设置」的 Qoder 卡片操作;0.1.5 上同样使用插件卡片,两个版本入口一致。这是“配置以自有文件为唯一事实源”的必然结果:不再向宿主注册第二套可写表单,避免出现两个数据源。
- 会话中的模型列表(模型选择器)两个版本一致,均遵循禁用清单。
迁移来源(0.1.5 时代配置):插件自行读取 settings.yaml / settings.yaml.imported 中的 qoder / qoder-global / qoder-quota 三个 section——宿主只导入名字与 profile 条目 id 相同的 section,这三个名字不被导入,数据只存在于那份文档里。js-yaml 缺失时该层自动跳过,其余功能不受影响。
设置入口变更(自本版本起)
自 0.1.9 起,本插件的设置卡片固定在「设置 - 插件设置」共享块内(排位 30)。此前入口(0.1.5 时代的插件 tab / provider 目录行)不再承载配置编辑:
- 模型开关、上下文窗口、签到/额度等全部配置 → 「设置 - 插件设置」的 Qoder 卡片;
- 0.1.7 的「设置 - 模型」页现在能列出 Qoder,但该页只为宿主自己的 provider 提供字段编辑器,插件配置的编辑请用插件卡片(0.1.5 同样如此,两个版本入口一致)。
升级注意
- 首次启动自动完成迁移与 patch 清理;持有的禁用模型清单、上下文窗口偏好、签到/额度设置都会从旧配置恢复。