Repository navigation
feat(codex): 支持 Bot 独立配置速度档位 - #1820
Conversation
|
你好,感谢这个 PR!以下是 botmux 自动评审的初步意见(最终以维护者审阅为准)。整体方向(创建即冻结、三链路 TUI/RPC/app-runner 透传、按真实 binary+环境+模型做能力证明且 fail-closed)我们认同,但在真实 codex 与边界场景上发现 1 个阻断问题和 2 个建议一并处理的问题。 🔴 P1(阻断):adopt / 外部 App Server 的「清除档位」被持久层无条件复活,外部 App Server 切换确定性拒启
// src/services/session-store.ts:2150
if (session.serviceTier === undefined && durable.serviceTier !== undefined) {
session = { ...session, serviceTier: durable.serviceTier };
}它区分不了「陈旧写入(该保)」与「本次有意清除(该落盘)」。而两处切换都是先删再存: // command-handler.ts:6196(切外部 App Server)、:6311(adopt)
delete current.session.serviceTier;
sessionStore.updateSession(current.session);用真实 SQLite 对 default/priority/ultrafast 三种具体档位复现: 外部 App Server 切换之后走 // src/worker.ts:15552
if (cfg.serviceTier !== undefined) throw new Error('existing App Server attachment cannot apply an explicit serviceTier');(adopt 一侧因 建议修法:两处有意清除不用 🟠 P2-a:配了具体档位的 codex Bot,新话题启动前用
|
|
已在 e2b1b3f 处理完这三点:
本地验证:评审相关 11 个测试文件 808 passed; |
|
更新一轮:新推的两个 commit(e2b1b3f + 31d6137)我们已在最新 master 上重新复审,上一轮的 1 个阻断 + 2 个建议项都已正确修复,没有新增问题,构建与相关测试通过,真实 SQLite 与真机 codex 0.160 的
只剩一个可选的一致性小收尾(非阻断,不改也可以合),供你参考:
// src/core/worker-pool.ts 非 snapshot 分支
if (serviceTier && !isCodexServiceTierCliId(ds.session.cliId ?? botCfg.cliId)) {
throw new Error(`Session service tier ${serviceTier} is not supported by CLI ${...}`);
}它只在一个很窄的窗口可达:会话以 codex + 具体档位创建后、首次 fork 之前,管理员在 Dashboard 把该 Bot 的 CLI 改成非 codex(只清 bot 配置、不动已建会话行)。首次 fork 走到这里时,上面的冻结块已经先把新 cliId 落盘,随后这个 建议直接照搬同文件 snapshot 分支的写法(非 codex 且持有具体档位 → 是否处理这条都不影响合入评估;若你这次不方便,我们也可以按 follow-up 记录。以上仍为自动评审初步意见,最终以维护者审阅为准,感谢跟进! |
|
已在 7fce3ba 处理这条一致性问题,并检查了整个 PR 的改动:
最终验证:相关 21 个测试文件 1656 passed、1 skipped; 本轮未重启 live daemon,未做飞书真实会话 E2E。 |
|
🚀 Released in v3.43.0 |
Closes #1819
变更
Codex Bot 可独立配置新会话的速度档位,避免多个 Bot 共用原生配置时无法分别选择 Fast 等档位。保存和启动前按实际 binary、环境及模型验证加速能力,无法确认时拒绝配置。
serviceTier支持继承、显式default、priority、ultrafast;/config与 Dashboard 可读写。Dashboard 只提供当前模型目录声明的加速档位。inherit。/cli预选与普通会话统一按最终 CLI 处理:非 Codex 清除档位,已冻结为 Codex 的会话保留档位。首次启动前修改 Bot CLI 不再导致会话永久拒启;解析发生在持久层回填之后。-c service_tier=...;RPC 与 App runner 的thread/start/thread/resume顶层serviceTier。恢复不重发 model/provider/effort。验证
default、priority、ultrafast三个回归用例均触发Session service tier ... is not supported by CLI;修复后通过,且验证inherit写盘、重新解析和冻结 Codex 档位保留。bun run build、git diff --check:通过。构建包含主工程、脚本及测试 mock 类型检查和 Dashboard bundle。7fce3ba9的 GitHub CI:构建、三个单测分片、Bun 全量测试和 glibc/musl/darwin 二进制检查全部通过;network-boundary 通过。实际回归命令:
bun run test \ test/bot-config-store.test.ts test/bot-registry.test.ts \ test/codex-app-runner.integration.test.ts test/codex-coco-detect-models.test.ts \ test/codex-effort-wiring.test.ts test/codex-rpc-engine.test.ts test/codex-service-tier-catalog.test.ts \ test/command-handler.test.ts test/dashboard-bot-defaults-cliid.test.ts \ test/dashboard-bot-defaults-model-picker.test.ts test/dashboard-bot-payload.test.ts \ test/dashboard-cli-options-models.test.ts test/dashboard-ipc.test.ts test/fork-session.test.ts \ test/model-catalog-json.test.ts test/model-catalog.test.ts test/session-store.test.ts \ test/codex-service-tier.test.ts test/deferred-suspend.test.ts \ test/topic-directive-header.test.ts test/traex-detect-models.test.ts兼容性
公共配置、session store、worker init 和 Dashboard 增加可选字段,无数据库迁移。
parseDebugModelsJson保持 slug-only API,/api/cli-options/models保留旧三字段并可选追加modelCapabilities;CoCo、TraeX、Claude 等回归已覆盖。变更不增加平台特定路径或进程启动方式,本地验证环境为 Linux。未重启 live daemon,未做飞书真实会话 E2E 或 macOS 真机验证。wrapper 网关保守地只暴露 slug,未 pin 模型时加速档位仍需显式指定模型;已有 RPC thread 的真实 resume 行为继续留待真机确认。
UI