后台子代理权限请求被静默 cancel(无 UI/无日志)+ 取消风暴导致父 turn 僵尸化(allow 内命令也秒拒)
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- electron, typescript
- Lĩnh vực
- backend-api-design, security
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- TypeScript
- Star
- 6.5k
- Fork
- 697
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Không có hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của op7418/CodePilot
-
发生错误时提醒Error:successĐang mởbug P0-crash-or-interrupt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
-
Effort selector dropdown hidden for GLM models — blocks access to GLM-5.2 High/Max effort tiersĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
bug P0-crash-or-interrupt
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
Tất cả issue của op7418/CodePilot
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
backnotprop/plannotator#2914 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
microsoft/vscode-containers#655 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 77/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
dsh-tauri-desk/deepseek-harness-desktop#1477 · 1 bình luận ·