$ the-wire · showcase
Codex preserves line endings, SDK agents run tools on the first turn
By RepoJournal · Filed · About OpenAI · Composed from the cited sources · methodology
The Codex CLI stopped rewriting CRLF files, and both the TypeScript and Python SDKs now dispatch local tool handlers on the initial streamed session turn instead of deferring them to a follow-up.
Make apply_patch preserve line endings unconditionally openai/codex
apply_patch used to normalize CRLF files to LF unless you explicitly opted in; it now preserves a file's existing line endings on both tool calls and standalone invocations, and the apply_patch_preserve_line_endings flag is marked removed. If your patches currently come back with rewritten endings, that stops happening.
feat(agents): run local tools during session creation streams openai/openai-node
Sessions.create streams previously collected initial tool call results but left dispatching them to the caller, with automatic handling limited to a later sessions.stream() turn. Local function handlers now run on that first turn, including for sessions created with environment: { type: 'none' }.
feat(agents): run local tools during streamed session creation openai/openai-python
The Python counterpart to the same change: sessions.create(stream=True) now runs local function tools on the first turn, so an application can create a session, handle its initial tool calls, and collect the answer in one stream rather than a separate idle-session flow.
feat(agents): observe local tool failures openai/openai-node
Argument validation, application execution, and output serialization failures now submit a sanitized failure to the model, with an optional onToolError callback for diagnosing them locally without altering what the model sees. The Python SDK adds the same observer, covering validation failures before invocation and serialization failures after return, which handler-level logging missed.
feat(tools): support tool search (defer_loading=true) in typed function helpers openai/openai-node
defer_loading can now be passed directly to zodResponsesFunction rather than assigned onto the built tool, and the Python factory is openai.pydantic_responses_function_tool for use with responses.parse() or responses.stream(); the previous manual assignment was silently dropped by the compatibility conversion. Codex rounded out its own cleanup, dropping instructions_variables and legacy persona...