后台子代理权限请求被静默 cancel(无 UI/无日志)+ 取消风暴导致父 turn 僵尸化(allow 内命令也秒拒)
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 25/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- electron, typescript
调研方向
Start by tracing permission handling for background subagent requests and the permission-registry timeout mentioned in the report; compare that path with allow-rule handling in the parent turn. Then inspect POST /api/chat/interrupt and its no-active-turn behavior. Reproduce each reported failure and add focused tests; done means unauthorized requests are surfaced accurately, allowed tools remain usable, and interrupting with no active turn does not cancel unrelated work.
由索引模型根据 Issue 内容生成。
描述
CodePilot 版本 / Version
0.67.15 (0.67.15)
操作系统与架构 / OS & arch
macOS 26.6.2,Apple Silicon (arm64, M5 Pro)
Runtime
Claude Code (SDK)
Provider / Model
qwen3.8max
是否可复现 / Reproducible?
每次都能复现 / always
复现步骤 / Steps to reproduce
Bug 1:后台子代理权限请求被静默 cancel(不上 UI、不入队、无日志)
- 在 CodePilot 会话中用 Agent 工具启动一个后台子代理(转录 meta:
requestShape:"background"、requestNonInteractive:true) - 子代理调用一个不在 allow 规则内的工具(如 WebSearch / WebFetch /
Bash(curl:*)) - 观察:子代理侧立即收到拒绝,文案为
The user doesn't want to take this action right now. STOP...;CodePilot UI 无任何审批弹框;服务端日志(codepilot-main.log)无[permission-review]记录
Bug 2:子代理取消风暴后,父 turn 工具管道僵尸化(allow 内命令也秒拒)
- 在同一会话中让该子代理连续撞墙多次(实例中为 12 次 cancelled),子代理最终失败返回
- 回到主会话执行任意工具调用——包括精确匹配 allow 规则的命令(实例:单行
python3 -c "print(...)",匹配Bash(python3:*),该规则 15 分钟前还反复生效) - 观察:全部秒级 cancelled(USE 与 ERR 时间戳同秒),转录记录
"toolDenialKind": "cancelled";服务端无任何 error/abort/interrupt 日志;只能重启进程恢复
实例时间线(2026-09-10,同一 SDK turn 内,19:52:38Z 启动,用户全程未操作/在睡觉)
| UTC | 事件 |
|---|---|
| 19:56–20:07 | 主会话 20+ 次 Bash/Edit/Write/git 全部正常(含刚加入 allow 的新规则,热加载生效) |
| 20:07:40 | 启动后台侦察子代理 |
| 20:07:57 | 主会话最后一次成功工具调用(git commit) |
| ~20:08–20:13 | 子代理 12 次工具调用被静默 cancel(Bug 1),失败返回 |
| 20:15:12 起 | 主会话所有工具调用秒级 cancelled(Bug 2),含 allow 匹配的单行 python3 探针 |
一夜之间同一会话共 29 次被拒(主会话 11 + 子代理 A 6 + 子代理 B 12),29/29 全部 toolDenialKind:"cancelled",无一条 user-denied。
期望 vs 实际 / Expected vs actual
Bug 1:后台子代理权限请求
- 实际:请求在 CLI 进程内被静默取消,子代理只看到 "The user doesn't want…"(误导性文案——并没有 user 参与);CodePilot 审批 UI 和服务端日志对此零记录
- 期望:权限请求应转发到 CodePilot 审批 UI(原生 Claude Code 终端会把后台子代理的权限请求浮出给用户),或至少在服务端日志留痕、给子代理返回准确的"无审批通道"错误,而非伪装成用户拒绝
Bug 2:父 turn 僵尸化
- 实际:子代理批量取消后,父 turn 内所有工具调用(含本应直接放行的 allow 匹配项)立即 cancelled,无任何报错日志,不可恢复
- 期望:① allow 规则匹配的工具调用不应经过任何审批通道,僵尸态不应存在;② 若控制通道损坏,应显式报错并结束 turn,而非让模型在 2 分钟内反复撞墙收到误导性"user denied"文案
证据文件(可按需提供,已确认不含密钥)
- 会话转录 + 子代理转录(含 29 条
toolDenialKind:"cancelled"原始记录):~/.claude/projects/<project-slug>/<session-id>/subagents/agent-a89b70d5304eccf13.jsonl等 - codepilot-main.log 事发窗口摘录(该会话仅 1 条 permission-review,为 17:41Z 的 AskUserQuestion,正常)
- 会话内部 ID:chat_sessions
5bcb38d7…,sdk_sessionb6ddc5a7…
关联发现(同轮排查确认,可分拆处理)
- interrupt 扇出连坐:POST /api/chat/interrupt 在
no active turn时仍执行完整扇出(abort 整个 SDK 进程 + cancelSubagentRunsForParentSession),一次调用杀死原生后台 agent、CodePilot 子代理和父会话进程。建议 no active turn 时 no-op,或提供"保留后台任务"选项。(日志 11 次实例,2026-09-03 至 09-11) - 权限请求 300s 硬编码超时(permission-registry
setTimeout(..., 3e5)):超时自动 deny 不可配置;超时后用户再点批准,服务端仍记一条 approved 日志但实际已 deny,纯误导。 - 子代理审批 fail-open:codepilot_spawn_subagent 启动的子代理执行 Bash/写文件零审批、零日志(对照组:父会话每条 Bash 都走人工审批);
required_capabilities不强制——声明read_workspace的子代理成功执行touch写文件,与文档 "fail closed" 承诺矛盾;提示词注入场景下子代理通道是零闸门。 - 子代理路由认证失败表现为"莫名中断":spawn 到未登录/不匹配的 provider 路由时直接
RUNTIME_ERROR: Not logged in,用户侧只看到任务自动中断,无明确归因。
日志 / 截图 / session id
No response
影响面 / Impact
- 涉及文件写入或可能误改/丢失数据 / involves file write or possible data loss
- 导致崩溃、闪退或对话被自动中断 / causes crash / quit / auto-interrupt
- 主要语言
- TypeScript
- 星标
- 6.5k
- 派生
- 697
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
op7418/CodePilot 的其他 Issue
-
bug P0-crash-or-interrupt
难度 2/5 1-3 小时 新手友好度 68/100
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 65/100
-
难度 2/5 1-3 小时 新手友好度 68/100
-
bug P0-crash-or-interrupt
难度 4/5 3-5 天 新手友好度 48/100
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
backnotprop/plannotator#2914 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
microsoft/vscode-containers#655 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 77/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
dsh-tauri-desk/deepseek-harness-desktop#1477 · 1 条评论 ·