Skip to content

fix(examples): report premature WebSocket closure - #2544

Merged
HAYDEN-OAI merged 3 commits into
mainfrom
dev/hayden/autoimprove-websocket-example-close
Sep 3, 2026
Merged

HAYDEN-OAI merged 3 commits into
mainfrom
dev/hayden/autoimprove-websocket-example-close

Conversation

@HAYDEN-OAI

Copy link
Copy Markdown
Contributor

Summary

Reject an unfinished response when the standard Responses WebSocket example receives a socket close event.

runResponse() listens for response events and errors, but not connection closure. A normal close frame or abrupt TCP disconnect can therefore leave its promise pending. Because a pending promise does not keep Node running, the actual CLI exits 0 with no error, even though it never received the response or completed the remaining demo turns.

The fix is six added lines in the handwritten example: register a close listener that uses the existing failure path, and remove that listener alongside the existing event/error listeners on every settled response. Successful completion and API errors continue to win before a subsequent socket close. The new diagnostic is fixed text and does not expose the peer's close reason.

No SDK implementation, generated file, public declaration, dependency, policy, or custom-code budget changes are included. Both changed files are absent from the verified generated snapshot, and no open PR covers this standard example. This is independent of the separate multi-agent example in #2533.

Regression coverage

The tests run the actual TypeScript example in a child process using its documented ts-node/tsconfig-paths runtime and source SDK entrypoints. An ephemeral localhost WebSocket server provides synthetic responses. The child receives an explicitly isolated environment with a synthetic API key and local base URL; no live API access is used.

Before the fix, the clean-close and abrupt-disconnect tests failed because the CLI returned exit code 0. The complete-conversation and API-error controls already passed. All four pass after the fix:

  • Clean close after partial response text: exit 1, fixed diagnostic, no completed assistant output or second turn.
  • Abrupt disconnect before response content: the same failure behavior.
  • All three demo turns, including tool execution and six response requests: exit 0, unchanged output and previous_response_id chain, normal final cleanup.
  • API error followed immediately by socket closure: preserve the original API diagnostic instead of replacing it with the new close error.

Every case also checks that neither the synthetic credential nor the peer's synthetic private close reason appears in output.

Validation

  • Focused CLI regressions and existing stable/beta WebSocket suite: 59 passed.
  • CI=true ./scripts/test: 7,013 handwritten + 556 generated tests passed; the existing two generated test skips remain and all 12 snapshots passed.
  • pnpm lint, pnpm exec tsc --noEmit (TypeScript 6.0.3), and pnpm build: passed.
  • Actual CLI execution compiled as CJS and native ESM, using built public SDK entrypoints on Node 22.0.0, 24.20.0, and 26.7.0: 24 lifecycle scenarios passed.
  • Additional legacy-compiler comparison: TypeScript 4.5.5 and 4.9.5 both report the same pre-existing TS7022 for the unrelated turnResult initializer on main and this branch (line 510 on main, 516 after these six additions). Those legacy example checks do not pass on either revision; this PR adds no new diagnostic and does not broaden scope to that typing issue.

Adversarial self-review

Reviewed and rechecked listener ownership, closure before/after terminal response events, consecutive tool-call turns, error precedence, and peer-controlled diagnostic data. The listener is registered before sending each request and removed by the existing shared cleanup path on both success and failure. No new state, parser, retry, timeout, or transport behavior is added to the SDK.

@HAYDEN-OAI
HAYDEN-OAI requested a review from a team as a code owner August 31, 2026 21:23
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-03T21:34:18.070684Z 9920d8b New commits
🔒 Security Review ✅ Completed 2026-09-03T21:34:47.207205Z 9920d8b New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@openai-sdks

openai-sdks Bot commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 237/237 SDK tests passed in 9.469s for Node SDK PR #2544.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 138ms
tests/chat-completions-create.test.ts ✅ Passed 223ms
tests/chat-completions-stream.test.ts ✅ Passed 171ms
tests/files-content-binary.test.ts ✅ Passed 174ms
tests/files-create-multipart.test.ts ✅ Passed 130ms
tests/files-list-pagination.test.ts ✅ Passed 144ms
tests/initialize-config.test.ts ✅ Passed 160ms
tests/instance-isolation.test.ts ✅ Passed 86ms
tests/models-list.test.ts ✅ Passed 106ms
tests/responses-background-lifecycle.test.ts ✅ Passed 162ms
tests/responses-body-method-errors.test.ts ✅ Passed 260ms
tests/responses-cancel-timeout.test.ts ✅ Passed 198ms
tests/responses-cancel.test.ts ✅ Passed 197ms
tests/responses-compact-retries.test.ts ✅ Passed 210ms
tests/responses-compact.test.ts ✅ Passed 176ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 97ms
tests/responses-create-advanced.test.ts ✅ Passed 185ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.087s
tests/responses-create-errors.test.ts ✅ Passed 188ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 178ms
tests/responses-create-retries.test.ts ✅ Passed 309ms
tests/responses-create-stream-failures.test.ts ✅ Passed 165ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 2.146s
tests/responses-create-stream-wire.test.ts ✅ Passed 2.102s
tests/responses-create-stream.test.ts ✅ Passed 63ms
tests/responses-create-terminal-states.test.ts ✅ Passed 194ms
tests/responses-create-timeout.test.ts ✅ Passed 180ms
tests/responses-create.test.ts ✅ Passed 120ms
tests/responses-delete.test.ts ✅ Passed 118ms
tests/responses-input-items-errors.test.ts ✅ Passed 151ms
tests/responses-input-items-list.test.ts ✅ Passed 157ms
tests/responses-input-items-options.test.ts ✅ Passed 98ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 209ms
tests/responses-input-tokens-count.test.ts ✅ Passed 211ms
tests/responses-malformed-inputs.test.ts ✅ Passed 1.74s
tests/responses-not-found-errors.test.ts ✅ Passed 251ms
tests/responses-parse.test.ts ✅ Passed 145ms
tests/responses-retrieve-retries.test.ts ✅ Passed 256ms
tests/responses-retrieve.test.ts ✅ Passed 162ms
tests/responses-stored-method-errors.test.ts ✅ Passed 623ms
tests/retry-behavior.test.ts ✅ Passed 2.954s
tests/sdk-error-shape.test.ts ✅ Passed 267ms

View OkTest run #33441090742

SDK merge (c1329f0dbeba) · head (c7b055a05eb6) · base (eea2292a4a52) · OkTest (2b1bdfd25e98)

@github-actions

github-actions Bot commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

32 mixed files remain; 0 existing customizations changed.

Compared 32b4d359e47d → 44ffdfb9d38f. Generated baselines verified.

32 existing customizations unchanged
  • api.md
  • scripts/castiron/README.md
  • scripts/castiron/custom_code_report.py
  • scripts/castiron/test_custom_code_report.py
  • src/client.ts
  • src/resources/audio/transcriptions.ts
  • src/resources/audio/translations.ts
  • src/resources/beta/assistants.ts
  • src/resources/beta/beta.ts
  • src/resources/beta/index.ts
  • src/resources/beta/responses/internal-base.ts
  • src/resources/beta/responses/responses.ts
  • src/resources/beta/threads/index.ts
  • src/resources/beta/threads/runs/index.ts
  • src/resources/beta/threads/runs/runs.ts
  • src/resources/beta/threads/threads.ts
  • src/resources/chat/completions/completions.ts
  • src/resources/chat/completions/index.ts
  • src/resources/conversations/index.ts
  • src/resources/embeddings.ts
  • src/resources/files.ts
  • src/resources/fine-tuning/checkpoints/permissions.ts
  • src/resources/images.ts
  • src/resources/responses/internal-base.ts
  • src/resources/responses/responses.ts
  • src/resources/skills/skills.ts
  • src/resources/skills/versions/versions.ts
  • src/resources/vector-stores/file-batches.ts
  • src/resources/vector-stores/files.ts
  • src/resources/webhooks/index.ts
  • src/resources/webhooks/webhooks.ts
  • tests/lib/data-residency.test.ts

A changed generated baseline means this report cannot reliably identify which handwritten lines changed.

Inspect the custom-code diff

Download the exact patch produced by this run (requires repository access):

gh run download 33809365546 --repo openai/openai-node \
  --name castiron-custom-code-33809365546-1 --dir /tmp/castiron-custom-code-33809365546-1
git apply --stat /tmp/castiron-custom-code-33809365546-1/custom-code.patch
cat /tmp/castiron-custom-code-33809365546-1/custom-code.patch

Or reproduce it from an SDK checkout containing the vendored reporter:

git fetch --no-tags origin 32b4d359e47dbfe130abc15fd4ace4676f22d285 44ffdfb9d38fd606ebd7b866dea03a2efb2b947e
python3 scripts/castiron/custom_code_report.py report \
  --base 32b4d359e47dbfe130abc15fd4ace4676f22d285 \
  --head 44ffdfb9d38fd606ebd7b866dea03a2efb2b947e --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-44ffdfb9d38f
cat /tmp/castiron-custom-code-44ffdfb9d38f/custom-code.patch

This is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR.

Full report and patch

@HAYDEN-OAI
HAYDEN-OAI added this pull request to the merge queue Sep 3, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 3, 2026
@HAYDEN-OAI
HAYDEN-OAI added this pull request to the merge queue Sep 3, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 3, 2026
@HAYDEN-OAI
HAYDEN-OAI added this pull request to the merge queue Sep 3, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Sep 3, 2026
@HAYDEN-OAI
HAYDEN-OAI added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 7eb5f7e Sep 3, 2026
37 checks passed
@HAYDEN-OAI
HAYDEN-OAI deleted the dev/hayden/autoimprove-websocket-example-close branch September 3, 2026 21:54
@openai-sdks openai-sdks Bot mentioned this pull request Sep 3, 2026
HAYDEN-OAI added a commit to 1fanwang/openai-node that referenced this pull request Sep 4, 2026
## Summary

Make the multi-agent SSE example report unsuccessful coordinator
responses instead of silently exiting successfully.

The example currently prints message/text events but ignores
`response.failed` and `response.incomplete`. Both are valid beta
Responses stream events. Unlike named SSE `error` frames, the SDK
correctly yields these ordinary response events to the caller. When the
stream ends, the example prints a newline and exits 0—even if the
coordinator failed before producing any text or after partial output.

## Change

Add a five-line branch in `examples/responses/multi-agent-streaming.ts`
that throws a concise diagnostic for failed/incomplete coordinator
responses.

- Treat omitted/null ownership and explicit `/root` ownership as the
coordinator.
- Keep child-agent terminal events non-fatal so the coordinator can
recover and continue.
- Preserve successful output, agent labels, request parameters, and the
existing SDK handling of named SSE errors.
- Report only the terminal event type, not response/error payload
details.

This is separate from openai#2533 and openai#2544, which address WebSocket examples.
The SSE example needs no WebSocket-style close handling: its existing
iterator closes normally on completion and performs its existing abort
cleanup when the loop throws.

The shared ecosystem CLI fixtures also persist offline npm settings in
each temporary project’s `.npmrc`. pnpm strips `npm_config_*`
environment variables when starting workers, which allowed Node 22’s
nested npm installs to make audit requests and time out. The
dependency-free wrapper also disables pnpm’s automatic root
installation, preventing parallel workers from racing on shared pnpm
state. The fixtures retain real npm package installations and the
existing 15-second timeout; failures now include subprocess output.

Only this handwritten example and two handwritten test files change. No
generated code, SDK APIs, dependencies, or budget rules change.

## Validation

The ecosystem fixture correction passes all three install modes on Node
22.23.2 and all 31 ecosystem CLI/SSE tests on Node 24.20.0. Lint,
TypeScript, and the CJS/ESM build pass.

Validation of the streaming change:

- Four executable regressions fail on main because failed/incomplete
root responses exit 0; all eight final cases pass with the fix.
- Tests run the actual documented `ts-node` entrypoint and public SDK
against a local synthetic HTTP/SSE server. They cover failures
before/after partial text, omitted/null/explicit-root ownership, all
three child terminal statuses followed by coordinator success, and named
SSE error handling. They also check the actual request path/body, exact
output, exit status, and absence of credentials/private failure details
in new diagnostics.
- Complete `CI=true ./scripts/test`: 7,017 handwritten tests across 164
files, 556 generated tests across 82 suites, and 12 snapshots pass.
Existing generated skips are unchanged.
- `pnpm lint`, `pnpm exec tsc --noEmit`, and `pnpm build` pass.
- The changed example compiles against the built SDK with strict
TypeScript 4.5.5 and 4.9.5 checks (`skipLibCheck: false`).
- An additional 138-case runtime matrix passes across Node 22.0.0,
24.20.0, and 26.7.0, loading actual built CJS/ESM SDK classes with the
transpiled example. It covers root/child terminal events, partial
output, SSE errors, original stdout-error identity, and request-signal
abort on failure. The same matrix confirms the corresponding baseline
failures.

Repeated adversarial self-review and an independent bounded review found
no remaining defect. Fixtures are synthetic and require no live API
calls or credentials.
HAYDEN-OAI added a commit to 1fanwang/openai-node that referenced this pull request Sep 4, 2026
## Summary

Follow-up to the legacy TypeScript compatibility issue noted in openai#2544.

The standard Responses WebSocket example still reports `TS7022` on the
`turnResult` initializer under TypeScript 4.5.5 and 4.9.5. `runTurn()`
already has an explicit `Promise<RunTurnResult>` return type, so the
local result can be annotated directly without changing runtime
behavior.

This adds the explicit `RunTurnResult` annotation to the initializer,
avoiding the legacy compiler's circular inference failure while leaving
the example logic unchanged.

## Validation context

The failure is documented in the validation notes for openai#2544 on current
main for both TypeScript 4.5.5 and 4.9.5. This change is compile-time
only and does not alter the WebSocket flow.

Co-authored-by: Hayden <hayden@openai.com>
gh-actions-shared Bot pushed a commit to xf-qubit/openai-node that referenced this pull request Sep 8, 2026
Automated Release PR
---


##
[7.11.0](openai/openai-node@v7.10.0...v7.11.0)
(2026-09-08)


### Features

* **api:** Add prompt cache diagnostics
([openai#2608](openai#2608))
([f83de8f](openai@f83de8f))
* **api:** add service-account API key expiration fields
([openai#2618](openai#2618))
([eecbebe](openai@eecbebe))
* **api:** correct function argument completion event fields
(openapi-545)
([openai#2611](openai#2611))
([31bf7e7](openai@31bf7e7))
* **api:** recognize incomplete web search call status
([openai#2576](openai#2576))
([c093c44](openai@c093c44))


### Bug Fixes

* **assistants:** retain terminal message snapshots
([openai#2650](openai#2650))
([414677e](openai@414677e))
* **audio:** only signal started recording processes
([openai#2665](openai#2665))
([cebdf7c](openai@cebdf7c))
* **audio:** prefer readable inputs over body metadata
([openai#2548](openai#2548))
([86ff7d5](openai@86ff7d5))
* **audio:** use ALSA card identifiers when recording
([openai#2564](openai#2564))
([67da19c](openai@67da19c))
* **audio:** wait for input cleanup before reporting success
([openai#2624](openai#2624))
([5ed87fe](openai@5ed87fe))
* **auth:** account for token exchange elapsed time
([openai#2609](openai#2609))
([b0f6f20](openai@b0f6f20))
* **auth:** validate Azure metadata access token values
([openai#2523](openai#2523))
([32b4d35](openai@32b4d35))
* **azure:** carry declared options through withOptions and fix
deployment paths
([openai#2514](openai#2514))
([f8f29fb](openai@f8f29fb))
* **bedrock:** cancel requests awaiting AWS credentials
([openai#2610](openai#2610))
([97c94e4](openai@97c94e4))
* bound partial number recovery to its token
([openai#2692](openai#2692))
([0d306ca](openai@0d306ca))
* **build:** fail on reported transpile errors
([openai#2638](openai#2638))
([833e3e8](openai@833e3e8))
* **build:** fail when a compiler worker is signaled
([openai#2633](openai#2633))
([cd79cd1](openai@cd79cd1))
* **build:** honor configured compiler worker limits
([openai#2635](openai#2635))
([aa08b44](openai@aa08b44))
* **build:** narrow Git-install staging detection
([openai#2621](openai#2621))
([a6170d3](openai@a6170d3))
* **build:** postprocess the selected package manifest
([openai#2620](openai#2620))
([1850d58](openai@1850d58))
* **build:** preserve CommonJS source-map positions
([openai#2623](openai#2623))
([df0034d](openai@df0034d))
* **build:** preserve config-relative compiler project paths
([openai#2637](openai#2637))
([3acb064](openai@3acb064))
* **build:** preserve declaration file import specifiers
([openai#2659](openai#2659))
([0098c2e](openai@0098c2e))
* **ci:** propagate Node matrix check failures
([openai#2569](openai#2569))
([bff92c9](openai@bff92c9))
* **ci:** serialize release-please branch updates
([openai#2631](openai#2631))
([bb0e400](openai@bb0e400))
* clean up failed mock-server startups
([openai#2558](openai#2558))
([83c92f0](openai@83c92f0))
* **deps:** bump qs to 6.16.0 for security fixes
([openai#2588](openai#2588))
([4e5c6e3](openai@4e5c6e3))
* **docs:** await headers in Next.js webhook examples
([openai#2595](openai#2595))
([7e48f05](openai@7e48f05))
* **docs:** correct the chat streaming helper contract
([openai#2596](openai#2596))
([135ac7e](openai@135ac7e))
* **docs:** include image detail in the Vision example
([openai#2598](openai#2598))
([e76bb16](openai@e76bb16))
* **docs:** omit absent Bedrock provider session tokens
([openai#2597](openai#2597))
([41f85bd](openai@41f85bd))
* **ecosystem:** preserve retry delays in parallel workers
([openai#2673](openai#2673))
([6164745](openai@6164745))
* **ecosystem:** reject invalid retry counts
([openai#2642](openai#2642))
([d0e2bcf](openai@d0e2bcf))
* **ecosystem:** restore explicit web type-test module markers
([openai#2584](openai#2584))
([3c189f4](openai@3c189f4))
* **embeddings:** preserve numeric output with body overrides
([openai#2549](openai#2549))
([97d1ae7](openai@97d1ae7))
* **embeddings:** preserve numeric responses after request hooks
([openai#2590](openai#2590))
([5202b13](openai@5202b13))
* **embeddings:** reject incomplete float32 vectors
([openai#2615](openai#2615))
([3940a20](openai@3940a20))
* **embeddings:** validate response collection before decoding
([openai#2686](openai#2686))
([888811f](openai@888811f))
* **events:** preserve unbound listener receivers
([openai#2644](openai#2644))
([c8238e7](openai@c8238e7))
* **examples:** annotate Responses WebSocket turn result
([openai#2585](openai#2585))
([dde19c5](openai@dde19c5))
* **examples:** avoid extra requests for empty tool calls
([openai#2672](openai#2672))
([be292d3](openai@be292d3))
* **examples:** avoid unhandled WebSocket rejections
([openai#2669](openai#2669))
([744b0ad](openai@744b0ad))
* **examples:** cancel Edge streams when requests abort
([openai#2530](openai#2530))
([18100a1](openai@18100a1))
* **examples:** close failed streaming responses
([openai#2531](openai#2531))
([eb9b468](openai@eb9b468))
* **examples:** close multi-agent WebSockets on terminal responses
([openai#2533](openai#2533))
([51ec453](openai@51ec453))
* **examples:** drain manual conversation error output
([openai#2629](openai#2629))
([e488b53](openai@e488b53))
* **examples:** find structured-output tool calls
([openai#2572](openai#2572))
([84870a8](openai@84870a8))
* **examples:** keep tracking fine-tuning file validation
([openai#2528](openai#2528))
([63312f2](openai@63312f2))
* **examples:** preserve background stream resume cursors
([openai#2671](openai#2671))
([b7398e3](openai@b7398e3))
* **examples:** reject early multi-agent WebSocket closure
([openai#2599](openai#2599))
([c6320f0](openai@c6320f0))
* **examples:** reject early Realtime socket closure
([openai#2639](openai#2639))
([7db48ec](openai@7db48ec))
* **examples:** reject incomplete image streams
([openai#2617](openai#2617))
([ef39397](openai@ef39397))
* **examples:** reject incomplete multi-agent streams
([openai#2666](openai#2666))
([152b98d](openai@152b98d))
* **examples:** reject unsuccessful background responses
([openai#2600](openai#2600))
([902a931](openai@902a931))
* **examples:** reject unsuccessful Responses streams
([openai#2645](openai#2645))
([86acb95](openai@86acb95))
* **examples:** reject unsuccessful structured-tool responses
([openai#2668](openai#2668))
([99aa303](openai@99aa303))
* **examples:** report audio demo failures
([openai#2570](openai#2570))
([29c0572](openai@29c0572))
* **examples:** report image-streaming failures
([openai#2563](openai#2563))
([947c555](openai@947c555))
* **examples:** report multi-agent streaming failures
([openai#2550](openai#2550))
([19d9151](openai@19d9151))
* **examples:** report nonstreaming request failures
([openai#2603](openai#2603))
([384dc26](openai@384dc26))
* **examples:** report premature WebSocket closure
([openai#2544](openai#2544))
([7eb5f7e](openai@7eb5f7e))
* **examples:** report unsuccessful Azure Realtime responses
([openai#2612](openai#2612))
([2b62209](openai@2b62209))
* **examples:** report unsuccessful fine-tuning jobs
([openai#2616](openai#2616))
([e761c16](openai@e761c16))
* **examples:** report unsuccessful Realtime responses
([openai#2559](openai#2559))
([5d3e584](openai@5d3e584))
* **examples:** respect raw streaming proxy backpressure
([openai#2663](openai#2663))
([a11bb1b](openai@a11bb1b))
* **examples:** reuse completed background responses
([openai#2557](openai#2557))
([8e1977b](openai@8e1977b))
* **examples:** serialize missing book lookup results
([openai#2573](openai#2573))
([db7e371](openai@db7e371))
* **examples:** stop polling failed training files
([openai#2592](openai#2592))
([1d67945](openai@1d67945))
* **examples:** support redirected streaming output
([openai#2546](openai#2546))
([8df2e3a](openai@8df2e3a))
* **examples:** use the default audio recording input
([openai#2593](openai#2593))
([6153484](openai@6153484))
* **format:** ignore missing literal file-list paths
([openai#2670](openai#2670))
([516a849](openai@516a849))
* **format:** preserve file-list scope
([openai#2568](openai#2568))
([7faff0e](openai@7faff0e))
* identify modern Edge browser runtime headers
([openai#2628](openai#2628))
([9cdf6f0](openai@9cdf6f0))
* isolate monthly node review publication
([openai#2691](openai#2691))
([3970dae](openai@3970dae))
* isolate realtime connection credentials
([openai#2690](openai#2690))
([e9db491](openai@e9db491))
* keep formatter inputs on LF across Git checkouts
([openai#2515](openai#2515))
([074618f](openai@074618f))
* **lint:** preserve leading-dash generated file paths
([openai#2640](openai#2640))
([3b91a83](openai@3b91a83))
* **pagination:** follow next cursors through empty pages
([openai#2561](openai#2561))
([9ea39ce](openai@9ea39ce))
* parse JSON media types case-insensitively
([openai#2551](openai#2551))
([7ea7926](openai@7ea7926))
* **polling:** honor zero custom polling intervals
([openai#2518](openai#2518))
([0cd94bb](openai@0cd94bb))
* **polling:** treat a cancelled vector store file as terminal
([openai#2506](openai#2506))
([43c1007](openai@43c1007))
* preserve alternate Headers inputs
([openai#2560](openai#2560))
([5d36ff4](openai@5d36ff4))
* preserve CommonJS constructor inheritance
([openai#2547](openai#2547))
([aafb64e](openai@aafb64e))
* preserve cross-realm error causes
([openai#2555](openai#2555))
([bfec504](openai@bfec504))
* preserve own Zod schema definition names
([openai#2695](openai#2695))
([f65d190](openai@f65d190))
* preserve package selection in parallel ecosystem tests
([openai#2516](openai#2516))
([fa0ce41](openai@fa0ce41))
* preserve streamed API error classification
([openai#2694](openai#2694))
([8e2c6ee](openai@8e2c6ee))
* **realtime:** preserve base URL routing components
([openai#2567](openai#2567))
([0f2e22d](openai@0f2e22d))
* **responses:** omit parsed values from replayed history
([openai#2634](openai#2634))
([124b652](openai@124b652))
* **responses:** parse namespaced function tools
([openai#2574](openai#2574))
([4d86684](openai@4d86684))
* **responses:** validate indexed response collections
([openai#2687](openai#2687))
([1ecbf52](openai@1ecbf52))
* **runners:** observe cancellation after completion callbacks
([openai#2591](openai#2591))
([27f5c6a](openai@27f5c6a))
* **runners:** preserve frozen input history
([openai#2525](openai#2525))
([1211038](openai@1211038))
* **runners:** reuse caller abort listeners across tool turns
([openai#2594](openai#2594))
([57d0da4](openai@57d0da4))
* **runners:** suppress content events for input history
([openai#2520](openai#2520))
([37d6fc2](openai@37d6fc2))
* serialize tool-call IDs once per completion
([openai#2688](openai#2688))
([8afb23e](openai@8afb23e))
* **streaming:** abort before early-exit cleanup
([openai#2613](openai#2613))
([03acf94](openai@03acf94))
* **streaming:** avoid duplicate terminal tool argument events
([openai#2658](openai#2658))
([12e5db6](openai@12e5db6))
* **streaming:** interrupt pending reads on cancellation
([openai#2556](openai#2556))
([2d7a767](openai@2d7a767))
* **streaming:** surface server error frames and settle streams past
throwing listeners
([openai#2502](openai#2502))
([17a661e](openai@17a661e))
* support Edge Runtime without Node process
([openai#2552](openai#2552))
([5dc4deb](openai@5dc4deb))
* **test:** cancel Steady commands waiting for cache locks
([openai#2636](openai#2636))
([8896395](openai@8896395))
* **test:** preserve unrelated processes on mock startup failure
([openai#2622](openai#2622))
([6896e66](openai@6896e66))
* **test:** reap Steady commands when lease creation fails
([openai#2664](openai#2664))
([518756a](openai@518756a))
* **test:** reject HTTP errors in mock health checks
([openai#2667](openai#2667))
([7b9e0b0](openai@7b9e0b0))
* **test:** reject unknown ecosystem project names
([openai#2626](openai#2626))
([fcd12bb](openai@fcd12bb))
* **test:** run Bun validation with --from-npm
([openai#2625](openai#2625))
([74f58a9](openai@74f58a9))
* **test:** use a monotonic Steady lock timeout
([openai#2661](openai#2661))
([7b5d120](openai@7b5d120))
* **types:** account for optional event arguments
([openai#2527](openai#2527))
([548a651](openai@548a651))
* **types:** include missing parsed response stream events
([openai#2521](openai#2521))
([6a9db07](openai@6a9db07))
* **types:** preserve custom tool factory metadata
([openai#2526](openai#2526))
([13dca7b](openai@13dca7b))
* **types:** preserve runnable function tuple positions
([openai#2524](openai#2524))
([e345d0f](openai@e345d0f))
* **uploads:** accept cross-realm ArrayBuffers
([openai#2529](openai#2529))
([69d7bda](openai@69d7bda))
* **uploads:** preserve explicit empty filenames
([openai#2532](openai#2532))
([eabb487](openai@eabb487))
* **uploads:** reject zero batch upload concurrency
([openai#2519](openai#2519))
([8b9405a](openai@8b9405a))
* validate partial image indices in streaming example
([openai#2693](openai#2693))
([a9a4440](openai@a9a4440))
* **zod:** preserve strict schema compatibility with Zod 4.5.4
([openai#2677](openai#2677))
([c11870e](openai@c11870e))
* **zod:** retain the original tool parameter schema
([openai#2662](openai#2662))
([fdb038e](openai@fdb038e))


### Performance Improvements

* **bedrock:** avoid copying repeated query values
([openai#2545](openai#2545))
([80ab919](openai@80ab919))


### Chores

* **api:** document throttling and model overload responses — SDK-235
([openai#2632](openai#2632))
([9dd0524](openai@9dd0524))
* clarify Response types and remove unused handwritten code
([openai#2660](openai#2660))
([86152ab](openai@86152ab))
* **deps-dev:** bump @aws-sdk/credential-provider-node from 3.972.78 to
3.972.81 ([openai#2681](openai#2681))
([48629a3](openai@48629a3))
* **deps-dev:** bump @cloudflare/workers-types from 5.20260816.1 to
5.20260823.1 in /ecosystem-tests/cloudflare-worker
([openai#2535](openai#2535))
([dc14bf5](openai@dc14bf5))
* **deps-dev:** bump @cloudflare/workers-types from 5.20260823.1 to
5.20260830.1 in /ecosystem-tests/cloudflare-worker
([openai#2676](openai#2676))
([ae04066](openai@ae04066))
* **deps-dev:** bump @smithy/signature-v4 from 5.7.2 to 5.7.3
([openai#2679](openai#2679))
([41ca20d](openai@41ca20d))
* **deps-dev:** bump @swc/core from 1.15.47 to 1.16.1
([openai#2538](openai#2538))
([5c04dc4](openai@5c04dc4))
* **deps-dev:** bump fast-uri from 3.1.5 to 3.1.7 in
/ecosystem-tests/ts-browser-webpack
([openai#2579](openai#2579))
([34380bf](openai@34380bf))
* **deps-dev:** bump fast-uri from 3.1.5 to 3.1.7 in
/ecosystem-tests/vercel-edge
([openai#2577](openai#2577))
([511d1e4](openai@511d1e4))
* **deps-dev:** bump oxlint from 1.76.0 to 1.79.0
([openai#2542](openai#2542))
([2683c3a](openai@2683c3a))
* **deps-dev:** bump oxlint from 1.79.0 to 1.80.0
([openai#2683](openai#2683))
([02d5fb0](openai@02d5fb0))
* **deps-dev:** bump puppeteer from 25.7.0 to 25.8.0 in
/ecosystem-tests/browser-direct-import
([openai#2534](openai#2534))
([f039c09](openai@f039c09))
* **deps-dev:** bump puppeteer from 25.7.0 to 25.8.0 in
/ecosystem-tests/ts-browser-webpack
([openai#2539](openai#2539))
([5828818](openai@5828818))
* **deps-dev:** bump puppeteer from 25.8.0 to 25.9.0 in
/ecosystem-tests/browser-direct-import
([openai#2675](openai#2675))
([bebd72f](openai@bebd72f))
* **deps-dev:** bump puppeteer from 25.8.0 to 25.9.0 in
/ecosystem-tests/ts-browser-webpack
([openai#2680](openai#2680))
([fe3770f](openai@fe3770f))
* **deps-dev:** bump ultracite from 7.10.0 to 7.10.5
([openai#2537](openai#2537))
([6d37b30](openai@6d37b30))
* **deps-dev:** bump vitest from 4.1.10 to 4.1.11
([openai#2541](openai#2541))
([6ea24b3](openai@6ea24b3))
* **deps-dev:** bump webpack from 5.109.2 to 5.110.2 in
/ecosystem-tests/ts-browser-webpack
([openai#2682](openai#2682))
([73405d1](openai@73405d1))
* **deps-dev:** bump wrangler from 4.125.0 to 4.127.1 in
/ecosystem-tests/cloudflare-worker
([openai#2678](openai#2678))
([0d92742](openai@0d92742))
* **deps:** bump @azure/identity from 4.13.1 to 4.13.2
([openai#2540](openai#2540))
([0318287](openai@0318287))
* **deps:** bump express and @types/express
([openai#2684](openai#2684))
([c581c17](openai@c581c17))
* **ecosystem:** remove unused proxy stub
([openai#2641](openai#2641))
([ce1713a](openai@ce1713a))
* migrate to forked steady
([openai#2587](openai#2587))
([67ce45d](openai@67ce45d))


### Documentation

* correct Bun ecosystem test instructions
([openai#2627](openai#2627))
([3434b42](openai@3434b42))
* correct error handling diagnostics
([openai#2630](openai#2630))
([d334d8c](openai@d334d8c))
* **helpers:** remove undefined main call from parsing example
([openai#2648](openai#2648))
([d8f6be9](openai@d8f6be9))
* **realtime:** report unsuccessful responses in the guide
([openai#2647](openai#2647))
([f58b1fd](openai@f58b1fd))
* **streaming:** reject unsuccessful background responses
([openai#2614](openai#2614))
([1025f7a](openai@1025f7a))
* **tools:** support TypeScript 4.9 in the function loop
([openai#2649](openai#2649))
([42e852b](openai@42e852b))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants