Skip to content

v0.1.9

Choose a tag to compare

@masknull masknull released this 25 Sep 07:11
· 8 commits to main since this release

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 清理;持有的禁用模型清单、上下文窗口偏好、签到/额度设置都会从旧配置恢复。