Skip to content

v2.6.0 — 子代理失败可兜底,也能自己选模型

Choose a tag to compare

@liaoyuqing liaoyuqing released this 19 Oct 15:41
· 20 commits to main since this release

model-failover-manager v2.6.0

本版修掉「子代理模型一失败就整轮中断」,并让子代理像普通会话一样能选模型、绑分组。

一、子代理失败后能兜底续跑

根因在宿主:sessionController.selectModel 对 origin: 'subagent' 的会话一律硬拒(session/agent-busy,owned by subagent routing)。插件原来的失败路径要换模型就得调它,于是 applyActiveModel 返回 false,失败处理不再返回 {kind: 'retry'},那一轮直接结束。

现在子代理换模型绕开该接口:插件只记录目标模型并写一条 model/selection 会话事件,真正生效由 agent/request 覆写请求,重试时仍走同一条路径。失败后正常返回重试,按继承来的分组切到下一个可用模型。

二、子代理可以选中模型 / 绑定分组

  • 子代理会话的模型位不再置灰,可选模型、可绑分组;
  • 子代理自己绑的分组标记为「显式」,优先于继承来的父会话分组;
  • 这类绑定不改写「新会话默认分组」,不会污染父会话或其他新会话;
  • 新增两个接口:GET /api/model-failover/session-info(返回生效分组、继承来源、当前覆盖模型)与 POST /api/model-failover/session-model(直接设置某会话的模型)。

三、修复绑定持久化丢失标记

session-bindings.json 写入时丢了「显式」标记,重启后用户给子代理选的绑定会退化成继承。现在该字段随绑定一起落盘,旧数据无此字段时按「非显式」处理,因此早期版本误写进子代理的默认分组绑定依旧被忽略。

四、包体积

files 里仍列着历代宿主模块,每次发版都多带六份没人加载的副本。现在 tarball 只含当前宿主模块,66 KB → 44 KB;历史文件留在仓库里供回溯。

升级注意

  • 宿主半文件名改为 host.v7.mjs:Loader 在 patch 行变化时只重新 apply,模块 URL 未变就沿用缓存,改文件名才能确保加载新代码。package.json 的 main/exports 已同步,dsh plugin add 安装的包不受影响。
  • 配置项、数据文件格式、engines.dsh 均无变化。

验证

node .offline-check.mjs 用假 ctx 直接跑监听器与 HTTP 处理器,9 项全通过,其中三条对应本版关键路径:子代理设模型不调用 selectModel、子代理彻底失败后返回重试、新子代理沿用父会话当前模型。线上另用 /debug/sessions 与 /session-info 核对:活子代理 ownBinding 为空、inherited: true、覆盖模型落在继承分组内。

资产

model-failover-manager-2.6.0.tgz —— npm pack 预构建包,免源码构建安装。

安装

dsh plugin add https://github.com/liaoyuqing/model-failover-manager