oh-my-openagent 配置迁移缺陷排查:2026-08-reasoning-unification 与模型配置链的一致性修复
oh-my-openagent 配置迁移缺陷排查2026-08-reasoning-unification 与模型配置链的一致性修复【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent本文基于 oh-my-openagentOmO仓库中的 Discord 配置迁移分诊记录triage 文档完整还原一次迁移写入的配置被运行时 Schema 拒绝的仓库自有缺陷repository-owned defect的定位过程从 Discord 报告、GitHub issue #6567 的表象到2026-08-reasoning-unification迁移的源码级实现、AgentOverrideConfigSchema的校验缺口、config-chain 模型输入的遗漏再到测试验证与修复边界。读完本文你将掌握 OmO 配置迁移引擎的完整调用链、reasoning 字段统一化的归一化规则以及如何通过 fixture 测试锁定这类迁移端与校验端不一致的回归。问题表象迁移之后配置失效、委派不再遵循模型2026-08-05KST的分诊记录显示用户通过 Discord 报告报告 ID1534283281300979743反馈了与配置迁移/委派相关的异常核心现象有两个迁移会留下非法配置2026-08-reasoning-unification迁移把规范形态canonical写入agents.*.models但当时origin/dev的AgentOverrideConfigSchema仍然拒绝该键委派停止遵循已配置的模型由于models键被从 config-chain 的模型输入中省略运行时拿不到迁移写入的模型链导致 delegation 不再按用户配置选择模型。分诊小组检查了关联的 Discord 消息及周边迁移/委派讨论、GitHub issue #6567 与相关 PR #6560、#6516并核对了最新origin/dev上的迁移、插件 schema、config-chain、doctor 与运行时加载路径最终给出所有权判定PASS这是仓库自有缺陷。OmO 配置迁移体系全貌发现、计划、执行、转换要理解这个缺陷先看2026-08-reasoning-unification在迁移体系中的位置。根据 config-migration/AGENTS.md该模块负责发现discovery定位遗留配置文件oh-my-opencode/oh-my-openagentJSON[C]、~/.omo/config.jsonc由 discovery.ts 及discovery-roots.ts、discovery-paths.ts实现涉及OPENCODE_CONFIG_MIGRATION_ID与CONFIG_JSONC_MIGRATION_ID两个组计划planning由 migration-plans.ts 的createLegacyConfigMigrationPlans构建迁移计划执行execution由 migration-executor.ts 的executeLegacyConfigMigrationPlan落地支持 dry-run、备份与日志内容转换transformtransform-opencode.ts/transform-config-jsonc.ts以及本次缺陷核心的 reasoning-unification.ts。关键约定见 AGENTS.md转换是纯函数transform 只把加载的源返回为ConfigMigrationTransformResult所有文件系统副作用都经由 omo-config-core 的迁移引擎完成绝不在转换层直接写配置迁移 ID 必须稳定每个迁移以固定 id 记录在目标文件的_migrations数组中已发布的 id 不得复用或改名历史 id 追加到legacy-history.tsno-clobber 语义deep-diff.ts保证已存在的目标值总是优先于迁移值。迁移引擎本体位于packages/omo-config-core/src/migration/。以 commit.ts 为例提交阶段会把_migrations标记写入目标文档const document { ...merged.merged, _migrations: marker }使迁移具备幂等性predicate.ts检查目标中的标记已应用过的迁移不会重复执行。整个链路在 OpenCode 插件启动、Senpi 启动、安装流程与 CLI 中都会触发详见 configuration.md 对两个迁移组的说明。2026-08-reasoning-unification迁移实现剖析迁移的 ID 常量定义在 reasoning-unification.tsexport const REASONING_UNIFICATION_MIGRATION_ID 2026-08-reasoning-unification入口transformReasoningUnification(document)L190-L197返回{ diagnostics, document }其中 diagnostics 收集冲突告警document 是规范化后的配置树。转换逻辑对根级categories、agents、models、[senpi]/[codex]/[opencode]分块以及嵌套profiles做递归处理。底层归一化legacy 模型字段 → canonical 字段迁移的核心归一化来自 omo-config-core 的 fallback-models.tsnormalizeLegacyModelFieldsL38-L72删除variant、reasoningEffort、thinking、textVerbosity、maxTokens、providerOptions等 legacy 键并按下述优先级收敛出规范reasoningreasoning reasoningEffort variant (thinking.type disabled ? off)即显式reasoning优先其次reasoningEffort再次variant若只写了thinking: { type: disabled }则归一化为reasoning: off。thinking: { type: enabled, budgetTokens }与textVerbosity被并入provider_optionsmaxTokenscamelCase归一化为max_tokenscanonicalModelStringL24-L36把三种模型字符串写法统一为provider/model:reasoning冒号后缀形式p/m(xhigh)括号后缀 →p/m:xhighp/m high空格后缀 →p/m:high已带冒号后缀的p/m:minimal保持不变迁移的八条规则与 fixture 验证迁移测试 reasoning-unification.test.ts 的第一个用例声明rules one through eight match exact expected output使用仓库内置 fixture 对拍输入 fixture2026-08-reasoning-unification/fixture-input.json期望输出2026-08-reasoning-unification/fixture-expected.json以categories.quick为例输入为{ model: apitopia/kimi-for-coding-highspeed-unlocked, reasoningEffort: minimal, fallback_models: [ { model: apitopia/z-ai/glm-5.2-ultrafast-unlocked, reasoningEffort: none }, openai-codex/gpt-5.6-luna-fast minimal ], maxTokens: 8192 }迁移后变为{ models: [ { model: apitopia/kimi-for-coding-highspeed-unlocked, reasoning: minimal }, { model: apitopia/z-ai/glm-5.2-ultrafast-unlocked, reasoning: off }, openai-codex/gpt-5.6-luna-fast:minimal ], max_tokens: 8192 }可归纳出如下规则模型链合并model主模型 已有modelsfallback_models后备模型合并进统一的models数组首项为主模型其余为后备随后删除顶层model与fallback_modelsreasoningEffort→reasoning对象项内的 legacy 推理级别归一为reasoningminimal、none→off等模型字符串后缀归一gpt-5.6-luna-fast minimal这类空格后缀改写为冒号形式gpt-5.6-luna-fast:minimalmaxTokens→max_tokenssnake_case 规范化无fallback_models且无冲突时保留单模型形态如categories.deep仅model variant迁移后为{ model: ..., reasoning: medium }冲突诊断同一实体同时出现reasoning、reasoningEffort、variant等多个推理字段时按优先级保留一个其余写入 diagnostics如conflict: categories.conflict dropped varianthigh kept reasoningEffortxhigh[opencode]分块单独处理normalizeOpenCodeBlock只重写 agent/category 已知键native、provider等无关结构原样保留见 L174-L188[senpi]/[codex]则复用同一normalizeTypedBlock递归L158-L160profiles递归profile 内的整块配置继续递归规范化L164-L170。注意第 7 条是缺陷的关键背景迁移对[opencode]块同样会写入规范形态如把variant: high变成reasoning: high、把model fallback_models合并为models数组而 OpenCode 侧的校验 Schema 尚未同步放开。缺陷定位Schema 拒绝、config-chain 遗漏、doctor 告警分诊确认了三个相互咬合的问题点1.AgentOverrideConfigSchema拒绝models键OpenCode 侧的 agent 覆盖 Schema 定义在 agent-overrides.ts。该 Schema 明确允许model标为 deprecated注释说明模型应从 category 默认值继承models有序模型链首项主模型、其余后备……但分诊指出最新origin/dev的AgentOverrideConfigSchema仍拒绝迁移写入的agents.*.models键——即 Schema 的z.object默认 strict/未知键剔除行为把合法迁移结果拦在了校验层之外配置在校验阶段即被判为非法这正是迁移留下 invalid config的直接原因。2. config-chain 模型输入遗漏models即使校验放行config-chain 构造模型输入时也遗漏了models键迁移合并出的完整模型链没有进入运行时模型解析的输入导致 delegation 解析不到配置的模型行为回退到默认值。这与 Discord 报告中委派停止遵循配置模型的现象完全吻合。3.[opencode]的variant/fallback_models兼容告警分诊还观察到doctor/校验链路对[opencode]块中仍然支持的 legacy 键variant、fallback_models发出警告。也就是说迁移端已经完成variant→reasoning、fallback_models→models的统一化而运行时校验端仍处于兼容旧键阶段两端语义不一致迁移改写后variant消失、models出现但校验端还在期待旧键、拒绝新键。三个问题叠加形成完整闭环迁移写 canonical→ Schema拒 canonical→ config-chain漏 canonical→ doctor报 legacy 兼容警告四个环节步调不一。测试验证用 fixture 与引擎 E2E 锁定行为迁移测试 reasoning-unification.test.ts 提供了四层验证纯转换对拍transformReasoningUnification(fixtureInput)的输出与fixtureExpected完全相等并断言 diagnostics 包含冲突记录conflict: categories.conflict dropped varianthigh kept reasoningEffortxhigh优先级语义输入{ reasoning: low, reasoningEffort: xhigh, variant: high }时迁移结果保留reasoning: low且 journal 中不会出现kept reasoningEffortxhigh——验证 canonical 键在冲突中的胜出引擎级 E2E在临时 HOME 下写入.omo/omo.jsonc经createLegacyConfigMigrationPlans找到 reasoning 迁移计划后依次执行 dry-run返回status: planned且 preview 与期望一致与正式执行返回status: migrated最终文件等于fixtureExpected { _migrations: [2026-08-reasoning-unification] }journal diagnostics 正确落盘且目录下出现omo.jsonc.bak.*备份——印证了 dry-run、备份、journal、原子提交、幂等标记五件套typed block 与 opencode 边界[senpi]/[codex]递归规范化、profiles递归、[opencode]只改已知 agent/category 键、native/provider无关结构不被触碰。测试还关联了启动路径packages/omo-opencode/src/startup-migration.test.ts与packages/omo-senpi/src/components/config-startup/index.test.ts均涉及该迁移 ID说明转换确实在 OpenCode/Senpi 启动期被拉起。修复边界与 PR 状态只合入可复现、已测试的子集分诊对相关 PR 做了明确切割PR #6560修复的是生成 JSON Schema 的 identity/required-array 问题与本次运行时迁移路径无关保持独立、另行合入PR #6516目标是规范化的运行时模型链但它是无专属测试的草稿外部 PR且包含更广的 fallback 改动风险不可控本次分支仅实现当前origin/dev上可复现、有测试覆盖的缺陷子集——即修复AgentOverrideConfigSchema对models的接纳、补上 config-chain 模型输入中的models传递、同步[opencode]的 legacy 键告警策略不夹带 PR #6516 的宽泛改动。这一策略体现了分诊的工程纪律修复范围与证据范围严格对齐未经验证的改动不进主线。分诊流程规范证据留存与清理triage 文档还记录了缺陷处置的流程性内容值得作为团队协作参考来源证据保留 issue #6567、PR #6560、PR #6516 的引用作为审计线索信息脱敏Omitted or sanitizedDiscord 凭证、token、认证头与原始凭证文件一律不落入文档无关频道消息与 issue/PR JSON 被剔除缺失的 Discord 可视化负载不臆造由文本、issue、代码与运行时证据独立确立所有权Triage cleanup确认无残留的 Discord 浏览器标签、桌面窗口、服务器进程、端口、临时文件或登录会话避免敏感会话泄漏。总结从一条 Discord 报告到一次体系级修复这次缺陷的本质是迁移端与校验端对canonical 配置形态的定义不同步2026-08-reasoning-unification按照统一reasoning、合并models链的既定方向改写配置而AgentOverrideConfigSchema、config-chain 与 doctor 仍停留在 legacy 键时代导致同一份配置在写入与读取两个阶段被不同对待。修复路径由此清晰让校验层与运行时接受迁移产物agents.*.models、canonicalreasoning同时把[opencode]的 legacy 键兼容告警收敛到与新形态一致。对使用者而言如果遇到升级后配置看似迁移成功、但委派模型不生效的问题可先检查~/.omo/omo.jsonc是否已出现_migrations: [2026-08-reasoning-unification]标记代表迁移已应用再核对agents.*.models是否被运行时接受对维护者而言本文梳理的 reasoning-unification.ts、agent-overrides.ts、fallback-models.ts 与 fixture 对 四件套是复现与回归验证该缺陷的完整入口。【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

lint-staged 10个实战示例:ESLint、Prettier、Stylelint、Flow完美组合套路

lint-staged 10个实战示例:ESLint、Prettier、Stylelint、Flow完美组合套路

lint-staged 10个实战示例:ESLint、Prettier、Stylelint、Flow完美组合套路 【免费下载链接】lint-staged 🚫💩 — Run tasks like formatters and linters against staged git files 项目地址: https://gitcode.com/gh_mirrors/li/lint-st…

2026/9/19 5:34:29 阅读更多 →
老系统零代码接入AI:HTTP协议层桥接实战

老系统零代码接入AI:HTTP协议层桥接实战

1. 这不是“给老系统加个AI按钮”&#xff0c;而是给一台十年车龄的柴油机装上电控喷油系统十年前的 Java 老系统&#xff0c;不是“技术债”&#xff0c;是活化石。它跑在 JDK 1.6 上&#xff0c;用 Spring MVC 2.5 写的 Controller 层&#xff0c;JSP 页面里还嵌着<% new …

2026/9/19 5:34:29 阅读更多 →
杭州精密五金加工生产企业排名前五,广受信赖的制造厂家推荐

杭州精密五金加工生产企业排名前五,广受信赖的制造厂家推荐

东莞市时运佳五金有限公司是2003年成立的专业精密五金全链路制造企业&#xff0c;坐落于制造业名城东莞市大岭山镇马蹄岗工业区&#xff0c;是集精密五金冲压件生产、精密CNC数控车加工、注塑加工和成品组装服务于一体的生产型实体&#xff0c;长期以来为各行业客户提供高精密、…

2026/9/19 5:33:29 阅读更多 →

最新新闻

DMM与DCMM评估工具差异:能力域、证据链与工程化实现

DMM与DCMM评估工具差异:能力域、证据链与工程化实现

简介&#xff1a;本资源是一份面向数据治理从业者、企业数字化转型负责人及数据管理认证备考人员的专业对比文档&#xff0c;系统解析DMM&#xff08;国际主流&#xff09;与DCMM&#xff08;中国国标&#xff09;两大成熟度模型的核心差异。文档深入剖析二者在能力域划分&…

2026/9/19 6:59:07 阅读更多 →
AI流式响应实战:从fetch到SSE的全链路解析

AI流式响应实战:从fetch到SSE的全链路解析

1. 流式响应不是“快”&#xff0c;而是“边生成边吐”——从用户按下回车那一刻说起你有没有注意过&#xff0c;当在 ChatGPT 或国内主流大模型网页端输入问题、点击发送后&#xff0c;答案并不是等几秒突然整段弹出来&#xff0c;而是一字一字、像打字员在你眼前实时敲出——…

2026/9/19 6:59:07 阅读更多 →
MindSpore范式重构:从AI框架到智能系统底座

MindSpore范式重构:从AI框架到智能系统底座

1. 从“AI框架”到“智能系统底座”&#xff1a;MindSpore的定位跃迁不是修修补补&#xff0c;而是重新定义战场你有没有试过在VSCode里敲下import mindspore as ms之后&#xff0c;突然意识到——这行代码背后加载的&#xff0c;早已不是当年那个对标TensorFlow、PyTorch的“国…

2026/9/19 6:59:07 阅读更多 →
AI辅助毕业论文任务书修改:工具链协同与效率提升

AI辅助毕业论文任务书修改:工具链协同与效率提升

1. 项目背景与核心价值作为一名经历过毕业论文写作的过来人&#xff0c;我深知任务书这个"开题第一关"的重要性。传统的人工修改方式往往存在三个痛点&#xff1a;一是导师反馈周期长&#xff0c;二是个人视角有限难以发现所有问题&#xff0c;三是格式规范要求严格但…

2026/9/19 6:59:07 阅读更多 →
CMSIS-4不是标准而是遗产协议:嵌入式静态工程深度评测指南

CMSIS-4不是标准而是遗产协议:嵌入式静态工程深度评测指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 6:59:07 阅读更多 →
揭秘购物网站排行榜背后的3个免费工具与避坑指南

揭秘购物网站排行榜背后的3个免费工具与避坑指南

揭秘购物网站排行榜背后的3个免费工具与避坑指南 找建站公司怕被坑高价?别急,先看看这3个免费工具,能帮你省下一半冤枉钱。很多老板一上来就问报价,结果被销售忽悠着加了各种“高级功能”,最后花了大几万,做出来的网站连个像样的产品排行榜都跑不动。…

2026/9/19 6:58:40 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介&#xff1a;面向机器学习、深度学习与数据建模学习者的一份完整研究文献&#xff0c;聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本&#xff0c;系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程&#xff0c;展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型&#xff0c;在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志&#xff0c;发现loss从凌晨两点就开始往上爬&#xff0c;一路从0.8涨到1.35&#xff0c;整整六个小时没人发现。那六个小时的训练不仅白跑&#xff0c;还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast&#xff1a;从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud &#x1f324;️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南&#xff1a;掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战&#xff1a;基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时&#xff0c;甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事&#xff0c;打开配置文件改一行不就完了&#xff1f;结果真动手才发现&#xff0c;Flutter项目里“应用名称”根本不是一处配置&#xff0c;而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →