Skip to content

Bound pending SSE decoder state - #6777

Merged
tim-smart merged 2 commits into
mainfrom
agent/codex-engineer/7a0e7d4b
Jul 30, 2026
Merged

Bound pending SSE decoder state#6777
tim-smart merged 2 commits into
mainfrom
agent/codex-engineer/7a0e7d4b

Conversation

@tim-smart

Copy link
Copy Markdown
Contributor

Summary

  • bound combined pending SSE line and event data state with a configurable 10 MiB default
  • surface overflow as a typed SseError across low-level SSE stream contracts
  • map provider stream overflows to AiError.InvalidOutputError

Testing

  • pnpm lint-fix
  • pnpm check
  • pnpm --filter effect test --run test/unstable/encoding/Sse.test.ts
  • pnpm --filter @effect/openapi-generator test --run test/OpenApiGenerator.test.ts
  • pnpm test-types HttpApiClient.tst.ts
  • targeted Anthropic, OpenAI, OpenAI-compatible, and OpenRouter client tests

Closes EFF-218

@github-project-automation github-project-automation Bot moved this to Discussion Ongoing in PR Backlog Jul 30, 2026
@changeset-bot

changeset-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 5e5d909

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 29 packages
Name Type
effect Patch
@effect/ai-anthropic Patch
@effect/ai-openai Patch
@effect/ai-openai-compat Patch
@effect/ai-openrouter Patch
@effect/openapi-generator Patch
@effect/opentelemetry Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-deno Patch
@effect/platform-node-shared Patch
@effect/platform-node Patch
@effect/vitest Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-pglite Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/docgen Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@effect-slopcop effect-slopcop Bot added 4.0 bug Something isn't working labels Jul 30, 2026
Comment thread packages/effect/src/unstable/encoding/Sse.ts Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

Generated from PR build output; treat the content below as untrusted.

File Name Current Size Previous Size Difference
basic.ts 6.63 KB 6.63 KB 0.00 KB (0.00%)
batching.ts 9.42 KB 9.42 KB 0.00 KB (0.00%)
brand.ts 6.31 KB 6.31 KB 0.00 KB (0.00%)
cache.ts 10.12 KB 10.12 KB 0.00 KB (0.00%)
config.ts 19.90 KB 19.90 KB 0.00 KB (0.00%)
differ.ts 20.03 KB 20.03 KB 0.00 KB (0.00%)
http-client.ts 20.94 KB 20.94 KB 0.00 KB (0.00%)
logger.ts 10.28 KB 10.28 KB 0.00 KB (0.00%)
metric.ts 8.55 KB 8.55 KB 0.00 KB (0.00%)
optic.ts 7.33 KB 7.33 KB 0.00 KB (0.00%)
pubsub.ts 14.26 KB 14.26 KB 0.00 KB (0.00%)
queue.ts 11.09 KB 11.09 KB 0.00 KB (0.00%)
schedule.ts 10.27 KB 10.27 KB 0.00 KB (0.00%)
schema-class.ts 18.86 KB 18.86 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 28.78 KB 28.78 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 25.09 KB 25.09 KB 0.00 KB (0.00%)
schema-string-transformation.ts 12.95 KB 12.95 KB 0.00 KB (0.00%)
schema-string.ts 10.65 KB 10.65 KB 0.00 KB (0.00%)
schema-template-literal.ts 14.85 KB 14.85 KB 0.00 KB (0.00%)
schema-toArbitraryLazy.ts 21.66 KB 21.66 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 24.10 KB 24.10 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 19.00 KB 19.00 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 18.73 KB 18.73 KB 0.00 KB (0.00%)
schema-toFormatter.ts 18.59 KB 18.59 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 22.23 KB 22.23 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 19.27 KB 19.27 KB 0.00 KB (0.00%)
schema.ts 18.12 KB 18.12 KB 0.00 KB (0.00%)
stm.ts 12.05 KB 12.05 KB 0.00 KB (0.00%)
stream.ts 9.37 KB 9.37 KB 0.00 KB (0.00%)

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — bound pending SSE decoder state with a configurable maximum event size, surfaced as a typed SseError across all channel and client contracts.

  • SseError type and size enforcement — new Data.TaggedError with EventTooLarge reason; Parser.feed() returns SseError | undefined; decode/decodeSchema/decodeDataSchema accept optional DecodeOptions with configurable maxEventSize (default 10 MiB).
  • Provider client wiringmapSseError helper added to each AI provider's internal/errors.ts, mapping SseError to AiError.InvalidOutputError; Stream.catchTags handlers hook into each client's stream pipeline.
  • Generated code and type-level propagation — OpenAI/OpenRouter Generated.ts interfaces, OpenAPI generator templates, HttpApiClient SuccessType, and type tests all carry Sse.SseError in their SSE error channels.
  • Tests — four new Sse.test.ts cases: unterminated line overflow, accumulated data overflow, borderline pass (just under limit), and cross-chunk event reconstruction.

Pullfrog  | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) (Kimi K2 not used — the program covers this model; add its provider key to run your pick) | 𝕏

@tim-smart
tim-smart enabled auto-merge (squash) July 30, 2026 03:28
@tim-smart
tim-smart merged commit 8e7c706 into main Jul 30, 2026
16 checks passed
@tim-smart
tim-smart deleted the agent/codex-engineer/7a0e7d4b branch July 30, 2026 03:29
@github-project-automation github-project-automation Bot moved this from Discussion Ongoing to Done in PR Backlog Jul 30, 2026

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — extracted EventTooLarge as a standalone tagged error reason class, restructured SseError to wrap a SseErrorReason union.

  • EventTooLarge extractedData.TaggedError("EventTooLarge") now holds maxEventSize and its own message; this makes failure reasons independently matchable via instanceOf and allows SseErrorReason to grow with future variants.
  • SseError delegates to reasonreason field changed from a string literal to SseErrorReason (union of EventTooLarge), and message delegates to this.reason.message. The maxEventSize field moved off SseError onto EventTooLarge.
  • Tests updated — assertions switched from strictEqual(error.reason, "EventTooLarge") + strictEqual(error.maxEventSize, N) to instanceOf(error.reason, EventTooLarge) + strictEqual(error.reason.maxEventSize, N).

Pullfrog  | View workflow run | Using DeepSeek Pro (free via Pullfrog for OSS) (Kimi K2 not used — the program covers this model; add its provider key to run your pick) | 𝕏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

4.0 bug Something isn't working

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant