原文(日本語に翻訳)
WebSocketの再接続等による重複した control_response メッセージが、会話に重複したアシスタントメッセージをプッシュしてAPI 400エラーを引き起こす可能性があったバグを修正しました。
原文(英語)
Fixed a bug where duplicate control_response messages (e.g. from WebSocket reconnects) could cause API 400 errors by pushing duplicate assistant messages into the conversation.
概要
WebSocket接続が切断・再接続された際に、control_response メッセージが重複して処理される問題が修正されました。この重複により、会話履歴に同一のアシスタントメッセージが複数回追加され、APIの400エラー(不正なリクエスト)が発生することがありました。この修正により、不安定なネットワーク環境やWebSocket再接続が発生する状況でも、会話が正常に継続されるようになります。
基本的な使い方
この修正はバグフィックスのため、通常の使用に変更はありません。ネットワークが不安定な環境でもClaude Codeが正常に動作するようになります。
bash
# 不安定なネットワーク環境でも安定して動作するようになった
claude "長時間かかるタスクを実行してください"実践例
影響を受けていたシナリオ
**修正前(v2.1.50以前)**に問題が発生していた状況:
1. WebSocket接続が確立される
2. Claudeがレスポンスを生成中にネットワークが不安定になる
3. WebSocketが再接続される
4. control_responseメッセージが重複して処理される
5. 会話履歴に同一のアシスタントメッセージが2回追加される
6. API 400エラー: "messages: roles must alternate between 'user' and 'assistant'"修正後(v2.1.51以降):
- 重複した
control_responseメッセージは検出されて無視される - 会話履歴の整合性が保たれる
- 再接続後も会話が正常に継続される
SDK統合での影響
Claude Code SDKを使って外部システムと統合している場合、この修正は特に重要です:
typescript
import Anthropic from "@anthropic-ai/sdk";
// WebSocket再接続が発生しても、このコードは正常に動作するようになった
const client = new Anthropic();
// 長時間のストリーミング処理中に接続が切れても大丈夫
const stream = await client.messages.stream({
model: "claude-opus-4-5",
max_tokens: 4096,
messages: [
{
role: "user",
content: "大きなコードベースを分析して詳細なレポートを作成してください",
},
],
});
// 以前はWebSocket再接続時にエラーになることがあった
for await (const event of stream) {
// イベントを処理
}エラーが発生していた症状の確認
bash
# 以前発生していたエラーの例
# Error: 400 {"type":"error","error":{"type":"invalid_request_error",
# "message":"messages: roles must alternate between 'user' and 'assistant'"}}
# v2.1.51以降はこのエラーが発生しなくなる注意点
- この修正は主に不安定なネットワーク環境やWebSocket再接続が発生するシナリオで効果があります。
- 安定したネットワーク環境では以前から問題は発生していませんでした。
- SDK呼び出しを行うシステムインテグレーターには特に重要な修正です。
- エラーが発生した際は念のためClaude Codeを最新版に更新することを推奨します。