anthropics / anthropics/claude-agent-sdk-python
ClaudeSDKClient.interrupt() is ignored silently when called immediately after query()
- 主要语言
- Python
- 星标
- 8.1k
- 派生
- 1.3k
- PR 合并指标
- PR 指标待抓取
描述
**Bug description:**
Calling `interrupt()` immediately (less than roughly 2 seconds) after `query()` has no observable effect. Claude continues generating a full response as if `interrupt()` was never called. The issue disappears if there is a slight delay between the two calls, suggesting a race condition.
**Steps to reproduce:**
```
import time
from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient
from claude_agent_sdk.types import ResultMessage, StreamEvent
options = ClaudeAgentOptions(
cli_path="/path/to/claude",
include_partial_messages=True,
)
ts = lambda: time.strftime("%H:%M:%S")
async with ClaudeSDKClient(options=options) as client:
await client.query("Write a 300 word essay on machine learning")
print(f"[{ts()}] query sent")
await client.interrupt()
print(f"[{ts()}] interrupt acknowledged")
t0 = time.monotonic()
chars_after = 0
async for msg in client.receive_response():
if isinstance(msg, StreamEvent):
d = msg.event.get("delta", {})
chars_after += len(d.get("text", "") + d.get("thinking", ""))
elif isinstance(msg, ResultMessage):
dt = time.monotonic() - t0
verdict = "BUG" if chars_after else "OK"
print(
f"{verdict}: {chars_after} chars in {dt:.1f}s after interrupt (stop_reason={msg.stop_reason})"
)
break
```
The output shows:
```
[15:20:49] query sent
[15:20:49] interrupt acknowledged
BUG: 2464 chars in 23.6s after interrupt (stop_reason=end_turn)
```
Even after `interrupt()` resolves without errors, Claude continues to generate the full response. The `stop_reason` is `end_turn`, not a signal indicating early termination. Adding a `time.sleep()` of a few seconds before the `interrupt()` call causes the interrupt to work correctly.
贡献指南
这个仓库没有索引到贡献指南
评估
这个 Issue 还没有评估数据。