Auto 档下 Cindy 审阅器不可用时永久 block 且零用户可见提示(重启无效)
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 现象
Auto 权限档下,如果 Cindy 自己的轻量审阅器(delegate)不可用,灰区动作会**永久被拒**,用户看不到任何弹窗、也看不到任何原因说明,**重启 app 无效**。
已有用户反馈复现该形态:「怎么都掉不起工具,说被拒绝了,但是我一直都没看到过权限批准的弹窗,怎么重启 app 都不行」。
## 根因
`packages/maker-core/src/agents/shared/auto-review-decision.ts:108` `resolveAutoReviewDecision`:
- 本地确定性规则判 `auto-approve` → allow
- 判 `prompt-each-time` → ask(会弹窗)
- **灰区**(`needs-review`)→ 交 delegate;delegate 缺失(:133)、8s 超时、抛错、返回非法(:150-176)**一律 `block`**
`block` 落到 `packages/maker-core/src/agents/claude-code/index.ts:1636`(Codex `codex/index.ts:2969` 分支、Pi `pi/index.ts:805` 同构)变成 `behavior: 'deny'`,reason 只作为工具结果喂给模型,**UI 层零呈现**。
delegate 侧 `apps/desktop/src/main/maker-host/auto-permission-reviewer.ts:120` 的所有失败路径都 `return null`,与"模型判定为危险"在上层不可区分。
### 稳定复现的死路(配置级,重启无效)
`apps/desktop/src/main/utility-model/oneShotCandidates.ts`:
| 位置 | 条件 | 结果 |
|---|---|---|
| :404 | 当前 model 不在该 provider 的 catalog 模型列表 | `no_candidate` |
| :248 | provider 或 model 在设置里被停用 | fail closed |
| :264 | 带 agentKind+model 但 catalog 解析不出 provider | `no_candidate` |
| :365 | provider / agentKind 不匹配 | `no_candidate` |
| :378 | provider 路由变更进行中 | `request_failed` |
这些都不会自愈,命中后该会话(乃至该配置下所有会话)的 Auto 档等于全废。
## 问题本质
当前把两件事压成了同一个 `block`:
1. **模型判定这个动作危险** —— 静默 block 完全合理,给模型一个 reason 让它换安全做法
2. **审阅器压根没跑起来** —— 这不是安全判断,是基础设施故障,用户有权知道并接管
## 建议改法(保持独立)
在 `AutoReviewDecision` 上区分这两类,不改现有 fail-closed 的安全性:
```ts
type AutoReviewDecision = {
verdict: 'allow' | 'block' | 'ask';
reason?: string;
/** true = 审阅器不可用导致的 block,非模型安全判定 */
unavailable?: boolean;
};
```
- `unavailable: true` 时,**会话级一次性**(不是逐条)向用户呈现"自动审核不可用 + 原因 + 一键切到询问档"
- 动作本身仍然 deny,安全边界不变
- 连续 N 次 `unavailable` 后可自动把该会话显性降级到 Ask 并广播状态
这样既满足"不能静默"的评审诉求,又不会退化成逐条弹窗。
## 独立性
改动集中在 `auto-review-decision.ts` 的返回类型 + 三个 harness 的 block 分支 + 一条会话级通知。不依赖其他 auto-review issue(#3 会减少一类触发源,但两者可各自独立合并)。
## 验证
- 停用当前会话 provider,确认 Auto 档下出现一次性提示而非静默拒绝
- 确认模型判定的 `block` 仍然静默、不打扰用户
Contributor guide
Assessment
This issue has not been assessed yet.