Skip to content

fix(permissions): surface auto-review blocks - #2599

Open
pricky777 wants to merge 3 commits into
makecindy:mainfrom
pricky777:agent/surface-auto-review-blocks
Open

fix(permissions): surface auto-review blocks#2599
pricky777 wants to merge 3 commits into
makecindy:mainfrom
pricky777:agent/surface-auto-review-blocks

Conversation

@pricky777

@pricky777 pricky777 commented Aug 13, 2026

Copy link
Copy Markdown

这次改了什么

摘要

当 Codex、Claude Code 或 Pi 的自动审批拒绝工具操作时,向用户显示一次提示,说明这是自动审核的安全决定,并建议切到「默认权限」后重试。原操作仍保持拒绝,不改变沙箱或审批边界。

变更类型

  • fix 缺陷修复

范围

  • 关联 Issue / 需求:自动审批拒绝时缺少可见反馈。
  • 本 PR 包含:自动审核拒绝提示、Desktop/i18n/IM 呈现及回归测试。
  • 明确不包含:改变自动审核的允许/拒绝决策,或提供直接覆盖拒绝的授权入口。
  • 用户可见变化:自动审核拒绝时会解释原因类别并给出切换到「默认权限」后重试的操作建议。
  • 是否存在 breaking change:无。

UI 变化

  • 引用的设计规范:docs/design-rules/DESIGN.md 的 Light/Dark 双模式交付约束与语义 token 规则。本次只复用既有错误提示呈现路径和主题 token,不新增布局、颜色或交互;补齐五种界面语言的文案。

怎么验证的

自动验证

pnpm --filter @cindy/maker-core exec vitest run src/agents/shared/auto-review-decision.test.ts src/agents/claude-code/__tests__/auto-review-wiring.test.ts src/agents/codex/index.test.ts src/agents/pi/__tests__/pi-auto-review-dispatch.test.ts
结果:4 个文件、566 项通过。

pnpm --filter desktop exec vitest run src/renderer/__tests__/errorMessageRestore.test.ts src/main/im/shared/__tests__/turnRetryNotice.test.ts
结果:2 个文件、36 项通过。

pnpm --filter @cindy/maker-core run --if-present typecheck
pnpm --filter desktop run --if-present typecheck
结果:通过。

pnpm check:dco
结果:通过。

手工验证

不涉及:本次未新增布局或交互,使用既有错误提示路径。

未执行的验证

pnpm test:unit 已尝试;本机 better-sqlite3 二进制为 Node ABI 137,而 Node 22 需要 ABI 127,导致与本 PR 无关的联系人/记忆测试无法加载原生模块。

风险

风险分类

  • 权限 / 安全 / 用户数据

影响与回滚

  • 影响范围:自动审批下被拒绝的工具操作会多出一次非终止提示;决策和沙箱边界不变。
  • 回滚 / 降级方式:revert ddf040705

提交前检查

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

Signed-off-by: Ricky <ricky@noreply.local>
@pricky777
pricky777 requested a review from a team as a code owner August 13, 2026 03:57
@greptile-apps

greptile-apps Bot commented Aug 13, 2026

Copy link
Copy Markdown

Greptile Summary

本 PR 在 Codex、Claude Code 和 Pi 的自动审核明确拒绝操作时,新增一次性、非终止且可本地化的用户提示,同时保持原有 fail-closed 权限边界不变。

  • 将提示按真实 turn 边界去重,同轮 steer、澄清和计划批准不会重复提示
  • 为 Desktop 和 IM 渠道补充错误码映射、五种语言文案及回归测试
  • 覆盖 Claude 原生 Auto 拒绝及各 Agent 适配器的拒绝事件投影

Confidence Score: 5/5

当前修改看起来可以安全合并,先前报告的同轮 steer 重复提示问题已修复。

当前没有仍然存在的阻塞性故障;三个 Agent 的新 turn 都会重置提示,而同轮 steer、澄清和计划批准不会重新武装提示。

Important Files Changed

Filename Overview
packages/maker-core/src/agents/shared/auto-review-decision.ts 新增稳定的自动审核拒绝提示码、识别函数及显式 reset 的一次性通知器。
packages/maker-core/src/agents/claude-code/index.ts 在本地、远端和 Claude 原生 Auto 拒绝路径发送提示,并将重置收敛到新 turn 或明确配置切换。
packages/maker-core/src/agents/codex/index.ts 为共享审核、无人值守策略及 Guardian 拒绝路径发送提示,同轮 steer 不再重新武装。
packages/maker-core/src/agents/pi/index.ts 将 Pi 工具拒绝连接到共享提示器,并按 send 边界重置。
apps/desktop/src/renderer/lib/makerChatStore.ts 将 AUTO_REVIEW_BLOCKED 纳入运行时错误码本地化映射。
apps/desktop/src/main/im/shared/turnRetryNotice.ts 将自动审核拒绝事件投影为渠道侧固定中文说明,不泄露 reviewer 原始文本。

Sequence Diagram

sequenceDiagram
  participant U as 用户
  participant A as Agent
  participant R as 自动审核
  participant N as 一次性提示器
  participant UI as Desktop / IM
  U->>A: send(新 turn)
  A->>N: reset
  A->>R: 审核工具操作
  R-->>A: block
  A->>N: notify
  N-->>UI: AUTO_REVIEW_BLOCKED
  U->>A: steer(同一 turn)
  A->>R: 审核后续操作
  R-->>A: block
  A->>N: notify
  Note over N,UI: 已发送,不重复展示
Loading

Reviews (3): Last reviewed commit: "fix(permissions): complete auto-review b..." | Re-trigger Greptile

Comment thread packages/maker-core/src/agents/claude-code/index.ts Outdated

@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: ddf0407050

ℹ️ 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 packages/maker-core/src/agents/claude-code/index.ts
Signed-off-by: Ricky <ricky@noreply.local>

@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: 190c0a698c

ℹ️ 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 packages/maker-core/src/agents/codex/index.ts
Comment thread apps/desktop/src/main/im/shared/turnRetryNotice.ts
@MagicLizi MagicLizi added the awaiting-discussion 等待维护者讨论(review-pr) label Aug 13, 2026
@MagicLizi

Copy link
Copy Markdown
Contributor

@pricky777 👋 这个 PR 新增了用户可见的自动审批拦截提示与五语言文案,按流程已暂停自动合并,等待维护者确认文案与出现口径,详见 #2607

确认方式只有一种:维护者在本 PR 上 Approve(需要修改会直接 Request Changes,球回到你手里后改完再请对方重新 Approve)。这期间你可以继续推改动、修 CI。

@MagicLizi MagicLizi added touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示) labels Aug 13, 2026

@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.

在「待确认 PR」面板完成维护者确认。

@MagicLizi MagicLizi added status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) and removed awaiting-discussion 等待维护者讨论(review-pr) labels Aug 13, 2026
Signed-off-by: Ricky <ricky@noreply.local>

@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: b1a64ed594

ℹ️ 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".

&& Array.isArray((rawMsg as { permission_denials?: unknown }).permission_denials)
&& (rawMsg as { permission_denials: unknown[] }).permission_denials.length > 0
) {
autoReviewBlockedNotice.notify();

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 在原生 Auto 的终态后保留拦截提示

在无 MCP 的 OAuth Claude Auto 会话发生权限拒绝时,这里直到终态 result 才发送非终止提示,而同一个 result 随即被 translator 转成 status(isRunning=false)done;Desktop 的 makerChatStore.ts:5734 会在前者清掉 recoverableError,IM 的 turnRunner.ts:2521-2527 也会在 done 时刻意从终稿移除 activity notice,因此提示通常在用户能看到前就被终态覆盖,原生 Auto 的主要路径仍然等同静默。新的证据是本次虽接入了 permission_denials,但接入点位于上述终态序列之前;请将该结论投影为可跨越 done 的持久提示,或让终稿明确保留它。

Useful? React with 👍 / 👎.

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

Labels

status:awaiting-author 等作者修改(review-pr 自动维护,仅展示) touches:core 改动碰到架构核心路径(review-pr 自动维护,仅展示) touches:product-ui 改动碰到产品 / UI 面(review-pr 自动维护,仅展示)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants