apply_patch stores deleted binary in session history, permanently exceeding CAPI 5 MB limit
- 主要語言
- Shell
- 星號
- 11.2k
- 分支
- 1.9k
- 平均合併
- 14 小時 16 分鐘
- 30 天內合併 PR
- 6
描述
### Describe the bug
When `apply_patch` deletes a large binary file, its `tool.execution_complete` event stores the entire deleted binary as a textual diff in `result.detailedContent`.
This result remains in conversation history. Subsequent requests exceed CAPI Responses' 5 MB limit, and `/compact` fails for the same reason, leaving the session unrecoverable through the CLI.
### Affected configuration
- GitHub Copilot CLI 1.0.71-0
- Linux
- Model: GPT-5.6 Sol (`gpt-5.6-sol`)
- Context window: 1.1M
- Reasoning effort: high
- Interactive session later resumed with `copilot --resume=`
The model, context-window size, and reasoning effort may affect when compaction runs, but the persisted binary tool output appears to be the direct cause of the 5 MB transport failure.
### Observed sequence
1. Copilot used `apply_patch` to delete a large ELF executable.
2. The persisted event contained:
- `result.detailedContent`: 22,810,594 characters
- Serialized JSONL record: 72,155,553 bytes
- Tool telemetry: 111,879 removed lines
3. `events.jsonl` grew to 118,622,622 bytes.
4. Further requests failed with:
> The request is too large to send through CAPI Responses. Try shortening the conversation or prompt. (5.0 MB request; 5.0 MB limit)
5. Automatic/manual compaction failed with the same error.
### Expected behavior
Binary content should not be persisted as a textual patch. The CLI should retain deletion metadata while omitting or capping oversized `detailedContent`.
After a request-size failure, oversized tool output should be evicted so compaction can recover the session.
### Workaround and root-cause confirmation
After backing up the session, I replaced the oversized `detailedContent` with a short marker. This reduced the event log from 118.6 MB to 46.5 MB and eliminated the CAPI request-size failure.
### Related issues
This resembles #3767, but that issue covered inline attachments and was fixed in v1.0.62. This report concerns persisted `apply_patch` output in v1.0.71.
The session also developed malformed JSONL records that prevented resume, reported separately in #4098. The shared root cause is not proven, although the unusually large write may have widened the failure window.
I have not attached `events.jsonl` because it contains conversation and tool history.
---
Investigated and filed with assistance from GitHub Copilot CLI.
貢獻指南
研究方向
在寫入 events.jsonl 並納入 CAPI Responses 請求之前,追蹤 apply_patch 的輸出經過 tool.execution_complete 事件的流程,尤其是 result.detailedContent。使用一個已刪除的大型二進位檔案進行重現,並執行 /compact。當刪除中繼資料獲得保留、不會持久化過大的文字內容,且壓縮能在請求大小失敗後復原時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- github, linux
- 領域
- cli
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100