Anthropic: mid-stream connection drops are retried immediately and without notice
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- javascript, node.js, typescript
Direzione di ricerca
Leggi src/main/llm/anthropic.ts nelle vicinanze di runTurn e retryDecision, poi esamina la gestione degli errori di lib/BetaMessageStream.js. Aggiungi test con un server simulato per una chiusura del socket a metà dello stream e per JSON dello strumento non valido; il lavoro è completato quando gli errori del socket usano il percorso di retry visibile, mentre il JSON dello strumento non valido mantiene il suo comportamento di retry limitato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Found in the 2026-10-07 code review (traced through @anthropic-ai/sdk 0.129.0; not run).
Problem
runTurn (src/main/llm/anthropic.ts:202-211) is meant to retry only when tool input JSON can't be parsed. But BetaMessageStream.#handleError (lib/BetaMessageStream.js:40-58) wraps every non-Anthropic error, including a socket closing mid-stream (TypeError: terminated, cause UND_ERR_SOCKET), in a plain AnthropicError, which is not an APIError. So connection drops take the JSON-retry branch: they are re-sent at once, up to twice, with only onRestart. There is no notice and no backoff.
Impact
This breaks the AGENTS.md rule that every retry is shown in the chat (the agent loop retries visibly, with backoff). An overloaded or flaky connection is hit again immediately.
Fix
const badToolJson =
error instanceof Anthropic.AnthropicError && /Unable to parse tool parameter JSON/.test(error.message);
if (!badToolJson || request.signal.aborted || jsonRetries++ >= MAX_JSON_RETRIES) throw error;
retryDecision already recognizes UND_ERR_SOCKET through cause. Add tests with a mock server that closes the socket mid-stream, and one that sends invalid tool JSON.
- Lingua principale
- TypeScript
- Stelle
- 2
- Fork
- 2
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di PierrunoYT/patch
-
tests
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
PierrunoYT/patch#393 · 1 commento ·
-
ci: macOS hardened-runtime smoke step fails because the re-signed app's helpers cannot connect (#28)Apertabug platform: macos tests
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
PierrunoYT/patch#392 · 1 commento ·
-
blocked platform: windows
Difficoltà 4/5 1-2 giorni Idoneità per principianti 52/100
PierrunoYT/patch#329 · 3 commenti ·
-
performance priority: low severity: low
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
PierrunoYT/patch#324 ·
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 36/100
PierrunoYT/patch#272 · 1 commento ·
Tutte le issue di PierrunoYT/patch
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Northeastern-Electric-Racing/FinishLine#4660 ·
I maintainer di solito rispondono entro 2 giorni
-
BeOS .json missingAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
mihaip/infinite-mac#475 ·
-
Let TypeScript accept an initial object in ReactiveDictForse già presa @yograj-vijay-yadav l’ha presa oggi. Apertabug good first issue help wanted workshop
Difficoltà 2/5 1-3 ore Idoneità per principianti 92/100
meteor/meteor#14919 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
marmelab/atomic-crm#401 ·
I maintainer di solito rispondono entro 1 giorno
-
account: profile
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 5 giorni