Skip to content

Auto 权限审阅器故障被错误显示为用户拒绝,导致工具反复重试 #2687

Description

@DavidShenXD

现象

今天多个会话任务中,反复出现:

patch rejected by user
exec command rejected by user

但用户没有看到权限申请提示,也没有点击拒绝。模型随后反复修改 patch 或命令并重试,造成大量 token 浪费。

复现步骤

  1. 使用 Cindy 的 Codex 会话,权限模式为 Auto。
  2. 使用 provider=xdmodel=codex/gpt-5.6-sol 执行需要自动审阅或审批的 patch/exec 操作。
  3. 在自动权限审阅请求超时、空响应或桥接异常时观察工具结果。
  4. 观察到工具层返回 rejected by user,模型继续重试。

期望行为

  • 自动审阅器超时、返回空响应、格式错误或桥接异常时,应明确标记为“自动审批服务不可用”。
  • 不应将该状态显示为“用户拒绝”。
  • 应向模型返回不可重试语义,并在会话级熔断,避免重复消耗 token。
  • 只有真实的用户点击拒绝,才显示 rejected by user

实际行为

当前链路疑似为:

Auto 权限模式
  → xd 路由无法使用 Codex 原生 auto_review
  → 转到 Cindy utility reviewer
  → reviewer 超时/空响应
  → Cindy 返回 block / unavailable
  → Codex app-server 压缩为 decline
  → 工具层显示 patch rejected by user / exec command rejected by user

因此用户未进行拒绝操作,但模型收到的仍是用户拒绝语义,并可能持续重试。

复现频率

2026 年 8 月 13 日多个不同会话均出现,疑似与自动审批桥接或 utility reviewer 不稳定有关。

已尝试

  • 确认项目目录 ACL 正常。
  • 确认运行环境为 workspace-write
  • 检查 Cindy main/agent 日志及相关代码。
  • 重启 Cindy 后做最小权限探针;问题仍需进一步验证。
  • 临时切换到 Default/Ask 权限模式可绕过自动审阅链路;不建议切换到 danger-full-access--yolo

脱敏诊断摘要

用户已同意公开以下摘要,不包含个人路径、原始日志、令牌或密钥:

  • 2026 年 8 月 13 日 15:42–15:49(日志时区 +08:00),providerId=xdmodel=codex/gpt-5.6-sol 的 utility text reviewer 多次记录 reason: timeout,期间间歇成功。
  • agent 日志记录过 auto permission reviewer attempt failedfailure: empty
  • 代码中,reviewer 超时/空响应/异常会进入 unavailable → block → decline 路径。
  • Codex app-server 的 decline 结果没有区分“用户拒绝”和“审阅器不可用”,最终被工具层显示为 rejected by user

建议修复

  • 保留独立的 AUTO_REVIEW_UNAVAILABLE / approval_unavailable 错误码。
  • 禁止将 reviewer timeout、empty response、bridge exception 显示成 user rejected
  • 增加会话级熔断:自动审阅器连续失败后,后续需要审批的动作直接停止,不再重复调用。
  • UI 明确提示“自动审批服务暂时不可用,已停止执行”。
  • 向模型返回不可重试语义,明确要求停止继续尝试。
  • 日志增加 sessionId/threadId/turnId/requestId/actionKind/provider/reviewerOutcome,以区分真实用户拒绝与桥接故障。
  • 为 empty、timeout、malformed、handler throw 增加回归测试。

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions