github / github/copilot-cli

Cancelled user input is still delivered to the agent and processed as a valid turn (autopilot mode)

未关闭
#4,336 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area:agents area:input-keyboard
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

### Describe the bug

# Summary
When I cancel a queued input before it is sent, the cancelled text is not discarded. It reappears later — bundled into a subsequent message block, carrying its original (older) timestamp — and the agent processes it as a normal user turn, with no indication it was ever cancelled. This happened in autopilot mode, in a session that also showed unstable tool availability (see "Possibly related" below).

# Possibly related (same session, may share a root cause in turn/tool scheduling):
- The session was running in autopilot mode the whole time.
- The task_complete tool was repeatedly present and then absent across turns. The autopilot reminder text ("_You have not yet marked the task as complete using the task_complete tool..._") kept firing on turns where task_complete was NOT actually in the available tool list, so the agent could not comply and got stuck re-confirming that it was idle.
- Both symptoms look like state being assembled from stale/mismatched snapshots between turns (a stale queued input on one side, a stale tool list / reminder on the other), so they may be the same underlying issue.

# Impact:
- The agent wastes a turn acting on something I explicitly cancelled.
- Cancel doesn't actually cancel, which is confusing and erodes trust.
- Potentially risky in autopilot mode: autopilot acts without waiting for confirmation, so a cancelled input containing a destructive command could be executed.
- The task_complete reminder loop wastes turns and tokens.

# Suggested fix:
- Discard cancelled inputs at the delivery/queue layer so they never reach the agent context. If a cancelled input must still be forwarded, tag it explicitly (e.g. [cancelled]) so the agent can safely ignore it.
- Only emit the autopilot "mark the task complete" reminder on turns where the task_complete tool is actually exposed to the model.

### Affected version

GitHub Copilot CLI v1.0.77

### Steps to reproduce the behavior

1. Run the CLI in autopilot mode (/autopilot), inside tmux over SSH.
2. Type an input (in my case "captain setup flyte") and cancel it before/while it is being submitted.
3. Continue the session with a different, unrelated message some time later.
4. The cancelled input is delivered to the agent alongside the new message, and the agent starts acting on it.

### Expected behavior

A cancelled input should be dropped at the delivery layer and never enter the conversation history. The agent should never see it.

### Additional context

- GitHub Copilot CLI v1.0.77
- Model: Claude Opus 4.8
- Autopilot mode: ON
- OS: Linux, running inside tmux over SSH

贡献指南

打开贡献指南

调研方向

首先在 autopilot 模式下重现已取消输入的流程,并跟踪组装后续消息块的 queue/delivery 路径。验证已取消的输入不会进入对话历史,并单独检查仅当该工具可用时才会发出 task_complete 提醒。

由索引模型根据 Issue 内容生成。

评估

技术栈
shell
领域
cli
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
45/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。