Last 12 weeks · 558 commits
4 of 6 standards met
Describe the Bug ( on current , ) is the classifier that routes transient model failures into the in-loop transient retry ( → ). Its regex covers , , , , timeouts, 5xx, etc. — but it does not match the literal string "Connection error." That exact string is the default message of in both official provider SDKs: openai (): — verified in openai , @anthropic-ai/sdk (): same literal — verified in , is what these SDKs throw for every connection-layer failure — DNS resolution failure, TLS handshake failure, proxy disconnect, socket aborted before a response — so "Connection error." is arguably the single most common transient error text a production deployment will ever see from these providers. Because the classifier doesn't match it, the assistant error entry is treated as permanent: no transient retry happens and the submission settles as . In production we observed a single transient proxy blip permanently fail a submission with while was configured to 10; the durable workflow driving that submission was then failed as a whole. (Durability-level attempts don't help here for the same reason as in #443 — the error is observed and classified, just classified as permanent.) This is the same class of gap as #443 ("Stream ended without finish_reason" not classified retryable), fixed in 2.0: the provider layer produces a transient connection-layer error, but the retry-classification layer treats it as terminal. Affected: 2.0.3 (latest) and current . Expected Behavior with (optionally with SDK cause suffixes appended) should be classified retryable, exactly like / / already are, so the submission retries up to its attempt budget instead of settling on the first network blip. Steps to Reproduce Deterministic, classifier-level (same shape as the repro in #443): End-to-end: run any OpenAI-backed agent behind a proxy and drop the connection mid-request once — the OpenAI SDK throws , and the submission hard-fails instead of retrying. Proposed fix Minimal, mirroring the existing alternation style — add next to the existing connection branch in the regex: Checked against the current pattern: with this change classifies retryable, while clearly non-retryable messages (e.g. ) still classify non-retryable, and all strings matched by the current regex still match. We're running this exact one-branch patch in production (via ) and it resolves the failure mode. Happy to provide anything else that helps — filing this as a fix proposal per CONTRIBUTING.md rather than a PR.
Describe the Bug On Cloudflare, durable work can continue in a later invocation. If the owning span is missing, child spans do not carry enough identifiers to join the fragments. The events already have the IDs. projects them through . The Cloudflare adapter currently: puts submission, instance, and conversation on agent operations, but not puts task id on task operations, but not submission or operation id omits submission, operation, and turn ids from model and model-tool spans omits submission and operation ids from caller-shell spans This is an exporter gap, not a runtime execution bug. The IDs are present on the events; they are just not copied onto those spans. Expected Behavior Keep every existing span name and parent relationship. Add only these optional attributes when the event already has the value: agent operation: task: , model and model-tool: , , caller-shell: submission and operation ids when present Do not add new spans, , or attempt count. Do not copy the rest of OpenTelemetry's identifier set (, , , and so on). Steps to Reproduce 1. Trace an agent prompt that includes a model turn and a tool call with . 2. Compare those span attributes with the same run under . 3. Cloudflare child spans are missing the join IDs above even though the corresponding runtime events carry , , and . Relevant code: (agent / task / model / tool / caller-shell attribute builders) and (no operation or turn ID constants today). OpenTelemetry's projection is in .
Describe the Bug is part of the public turn payload. Both trace adapters read it and map it to . never sets it, so the attribute never appears. The events reference already documents this: the field is declared for turns whose context was compacted, and the current runtime does not populate it. Expected Behavior Set to when the model request's effective context is a compacted view of earlier history (canonical context includes a compaction summary). Leave it absent otherwise, including on summarization turns ( / ). Never emit . This should follow the pinned OpenTelemetry meaning: the effective context is a compacted view, not a one-shot "compaction just happened" flag. Do not change compaction span names or parenting. Steps to Reproduce 1. Compact a conversation (threshold, overflow, or ). 2. Run another ordinary agent turn on that conversation. 3. Inspect the / payload and the chat span. 4. is missing, and neither adapter emits . The field is declared at , copied into turn events from in , consumed by and , and documented as unpopulated in .
Describe the Bug Every request to a Claude 4.6+ model through the Cloudflare AI binding fails with: pi-ai's catalog marks these models with (plus ), and its Anthropic serializer emits only when that flag survives to the model object. drops the catalog twice, so the serializer falls back to the legacy shape, which Claude 4.6+ models reject. Drop site 1 — discards when it re-tags the gateway catalog for the binding. Its comment says " replaces it", which is drop site 2 — that replacement loses the per-model flags rather than layering the binding's overrides on top of them: Fix proposal:** keep the catalog in , and spread it under the provider's own overrides in : We run 2.0.3 in production with exactly this change as a and can confirm it fixes the 400: requests go out with and complete. It also restores , which prevents the equivalent temperature rejection on Opus 4.7+. Expected Behavior (or any Claude 4.6+ model) through sends the adaptive thinking shape and the request completes. Steps to Reproduce 1. Start from a basic hello-world agent on Cloudflare Workers with and an AI Gateway funded for unified billing. 2. Set the agent's model to . 3. Send any message. The turn fails with the 400 above; the AI Gateway log shows the rejected request.
Repository: withastro/flue. Description: The sandbox agent framework. Stars: 8026, Forks: 472. Primary language: TypeScript. Languages: TypeScript (93.4%), Astro (4.6%), MDX (1.1%), CSS (0.5%), JavaScript (0.4%). License: Apache-2.0. Homepage: https://www.flueframework.com Open PRs: 2, open issues: 34. Last activity: 2w ago. Community health: 87%. Top contributors: FredKSchott, stainlu, cpojer, ketankhairnar, elithrar, github-actions[bot], mhart, chris-plucker, zozo123, toonverbeek and others.