Skip to content

fix(auto-review): 使用专用审核模型链 - #2799

Merged
MagicLizi merged 3 commits into
makecindy:mainfrom
zqchris:auto-review-dedicated-model
Aug 16, 2026
Merged

fix(auto-review): 使用专用审核模型链#2799
MagicLizi merged 3 commits into
makecindy:mainfrom
zqchris:auto-review-dedicated-model

Conversation

@zqchris

@zqchris zqchris commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

这次改了什么

摘要

Auto-review 不再复用任务当前的 provider/model,而是使用固定的受控候选链:

  1. Cindy Gateway 可用时固定请求 xd / cindy/auto-review;该服务别名走受限入口,不依赖普通模型目录,也不出现在模型选择器。
  2. 无 Gateway 时按 gpt-5.4-nanogpt-5.6-lunaclaude-haiku-4-5 尝试用户已连接且实时目录支持的订阅模型。
  3. xAI、DeepSeek、Kimi 和自定义 BYOM 不再接收 Auto-review payload。全部候选失败时继续复用现有 unavailable → 用户确认流程,不静默放行或拒绝。

候选级解析、短暂错误重试、总预算和 AbortSignal 收口在独立编排器中完成;外层 reviewer 不会在超时后重启整条候选链。Responses one-shot 在没有工具时不再发送 toolstool_choiceparallel_tool_calls

规模构成:实现集中在专用候选编排器和已有 utility HTTP 请求边界;新增代码近半为路由、失败回退和取消行为的回归测试。旧的“按会话模型能力放宽额度”模块与测试已删除。

本实现取代 #2753 中动态猜测 Gateway 模型及第三方会话模型兜底的方案,并包含、扩展 #2689 的无工具 Responses 请求体修复。

变更类型

  • feat 新功能
  • fix 缺陷修复
  • refactor / perf 重构或性能优化
  • docs / test / chore 文档、测试或工程维护
  • 其他:

范围

远程连接 / 手机版适配:SSH 远程任务继续把已有的有界审阅 payload 交给 Desktop Host,不新增本机 workdir 读取;设备互联和手机版作为控制端复用被控 Desktop 的同一 reviewer。本 PR 不新增 IPC、push 事件或移动端入口。

UI 变化

  • 引用的设计规范:不涉及 UI、交互或文案变化。

怎么验证的

自动验证

pnpm test:unit:related
结果:通过(Desktop related suite)

pnpm --filter desktop typecheck
结果:通过

pnpm --filter desktop exec vitest run \
  src/main/maker-host/__tests__/autoReviewModelRouter.test.ts \
  src/main/maker-host/__tests__/autoPermissionReviewer.test.ts \
  src/main/utility-model/__tests__/oneShotCandidates.test.ts
结果:通过

pnpm --filter @cindy/maker-core exec vitest run \
  src/agents/pi/__tests__/pi-auto-review-dispatch.test.ts \
  src/agents/shared/auto-review-decision.test.ts
结果:通过

pnpm --filter desktop exec eslint <本次修改的独立模块与测试>
结果:通过

pnpm check:dco
结果:通过

手工验证

不涉及 UI。代码级验证覆盖:固定 Gateway 别名绕过目录、订阅候选顺序、第三方来源隔离、HTTP/空响应/畸形 JSON/超时回退、总预算取消、最终 unavailable 收口,以及无工具 Responses body。

未执行的验证

  • 未使用真实 Gateway、ChatGPT 或 Claude 账号发起付费请求,避免单测访问业务外网和开发者账号。可在 cloud 账号下分别连接/断开各来源,用第三方主模型触发 Auto 灰区操作,核对候选来源和 unavailable → 确认卡收口。
  • 未做 Windows 实机验证;改动使用标准 Fetch/AbortController,不包含平台路径或原生分支。
  • 尝试运行 Desktop 全量 lint,但主干当前存在大量与本 PR 无关的存量 lint 错误;本次修改的独立模块与测试定向 lint 已通过。

风险

风险分类

  • 无已知风险
  • SQLite / migration
  • system prompt
  • 协议兼容
  • 权限 / 安全 / 用户数据
  • 存量插件兼容(批准状态 / 指纹 / manifest 校验 / 安装布局 / 包格式)
  • 原生层 / fingerprint / OTA
  • 跨平台差异
  • 其他:模型路由、账号额度和外部请求取消。

影响与回滚

  • 影响范围:Desktop Host 的 Auto-review 灰区模型调用,覆盖 Claude Code、Codex 和 Pi 派发到同一 Host reviewer 的路径。
  • 凭证边界:只复用现有 Main 进程 Gateway key、ChatGPT OAuth 和 Claude OAuth 读取/刷新入口;不新增落盘,不记录 token、header 或上游响应正文。
  • 失败语义:所有候选失败、超时、空响应或非法输出都返回 null,由现有 fail-closed unavailable → 用户确认流程接管。
  • 回滚 / 降级方式:回滚本 PR 即恢复按当前会话 provider/model 审阅;无需数据迁移或配置清理。

提交前检查

  • 已 review 完整 diff
  • 每个 commit 都带 DCO 签名(git commit -s,见 DCO
  • UI 改动已在「UI 变化」注明引用的设计规范(不涉及 UI 则跳过)
  • 未提交凭证、令牌或授权文件
  • 已补充必要文档
  • 已确认测试结果或说明未执行原因

Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>
@zqchris
zqchris requested a review from a team as a code owner August 16, 2026 05:48
@greptile-apps

greptile-apps Bot commented Aug 16, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 将 Auto-review 从会话模型切换到受控的专用候选链,并统一候选回退、超时及取消行为。

  • 优先使用 Cindy Gateway 的固定 cindy/auto-review 别名,再按顺序尝试已连接且目录支持的 OpenAI 和 Anthropic 订阅模型
  • 将候选级解析、瞬时失败重试和整链预算集中到独立路由器
  • 向 utility HTTP 请求传播 AbortSignal,并精简无工具 Responses 请求体
  • 补充候选顺序、失败回退、取消、目录约束和请求体行为的回归测试

Confidence Score: 5/5

当前证据未显示仍需阻止合并的故障,PR 看起来可以安全合并。

未发现仍然存在的阻塞性失败。

Important Files Changed

Filename Overview
apps/desktop/src/main/maker-host/auto-review-model-router.ts 新增固定候选链编排器,负责候选超时、有限重试、合法裁决解析、总预算和父级取消。
apps/desktop/src/main/utility-model/oneShotCandidates.ts 新增 Auto-review 专用候选及受限执行入口,并向通用 HTTP 请求边界传播取消信号。
apps/desktop/src/main/maker-host/auto-permission-reviewer.ts 支持由内层候选链独占重试,并在 reviewer 截止时间到达时主动取消请求。
apps/desktop/src/main/maker-host/index.ts Desktop Host 改为使用固定专用路由器,不再按当前会话 provider/model 发起 Auto-review。
apps/desktop/src/main/maker-host/tests/autoReviewModelRouter.test.ts 覆盖固定候选顺序、解析失败回退、瞬时重试、候选超时和整链取消。
apps/desktop/src/main/utility-model/tests/oneShotCandidates.test.ts 覆盖 Gateway 隐藏别名、订阅目录约束、凭证刷新取消和无工具 Responses 请求体。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Auto-review 请求] --> B[Cindy Gateway<br/>cindy/auto-review]
  B -->|不可用或失败| C[OpenAI<br/>gpt-5.4-nano]
  C -->|不可用或失败| D[OpenAI<br/>gpt-5.6-luna]
  D -->|不可用或失败| E[Anthropic<br/>claude-haiku-4-5]
  B -->|合法裁决| F[返回 allow / block / ask]
  C -->|合法裁决| F
  D -->|合法裁决| F
  E -->|合法裁决| F
  E -->|全部失败或总预算耗尽| G[返回 unavailable]
  G --> H[现有用户确认流程]
Loading

Reviews (3): Last reviewed commit: "test(desktop): 稳定锁接管并行测试" | Re-trigger Greptile

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 87a21133d7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/desktop/src/main/maker-host/auto-review-model-router.ts Outdated
Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>
Signed-off-by: Chris <4436110+zqchris@users.noreply.github.com>

@MagicLizi MagicLizi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查通过。auto-review 的模型路由从跟随会话模型改为固定候选链,信号/中断生命周期清晰,超时算术正确(12s/候选, 52s 链, 53s 外层),重试门控只允许快速瞬态重试。

@MagicLizi
MagicLizi merged commit 1f11bed into makecindy:main Aug 16, 2026
11 checks passed
@MagicLizi

Copy link
Copy Markdown
Contributor

auto-review 有了自己的模型路由不再受会话模型影响,候选链的超时与重试设计很周到

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants