Backport #49715 to the 0.159 maintenance line for 0.159.3 so local
ChatGPT sessions can display optional account-security setup reminders.
This is an unchanged cherry-pick of the upstream patch: 23 files,
including authenticated-request, stale-account, notice-validation and
TUI regression tests. The server continues to own eligibility and
rollout; unavailable notices produce no banner.
Validation: clean cherry-pick onto release/0.159 at
2851358eaeffa9f1567d0bec3d5a2df1dfcb9215; stable patch ID matches
upstream; whitespace checks pass. Exact-backport CI and production build
validation are pending.
Co-authored-by: dennyku <dennyku@openai.com>
Backport #49164 and #49308 onto the content commit of 0.159.1 to
suppress Windows console flashing reported in #48074. The two
cherry-picks applied without conflicts; no other fixes are included.
Cargo remains at the release-branch content version, 0.0.0.
Validation: `git diff --check` passes. Native Windows execution has not
been validated on this exact candidate. Keep this PR in draft pending
required review and a focused Windows smoke test: from a non-elevated
PowerShell host with workspace-write and the unelevated sandbox, verify
built-ins and external whoami.exe, cmd.exe, Git and nested PowerShell
terminate with expected output, both with a matching managed daemon and
with --no-daemon, without visible console flashes. Record exact
binary/candidate SHA, CLI and daemon versions, CODEX_HOME,
configuration, exit codes and durations.
The alpha.2 reports in
https://github.com/openai/codex/issues/48074#issuecomment-5898123863 and
https://github.com/openai/codex/issues/48074#issuecomment-5897958690
conflict on execution safety; they do not establish a causal regression
or validate this exact backport. Do not publish 0.159.2 until the
evidence and required checks/review are complete.
---------
Co-authored-by: Eric Traut <etraut@openai.com>
Backport #49339 onto `release/0.159` for 0.159.1. This adds GPT-6.1 Sol
to the Bedrock Mantle and Runtime catalogs and makes it the default
while retaining existing models and provider capability normalization.
The bundled catalog dependency is already on the release branch through
#49323. The cherry-pick applied without conflicts and has the same
stable patch ID as the original public commit.
Validation:
- `just test -p codex-model-provider -p codex-model-provider-info --lib
bedrock`: 57 passed.
- `just test -p codex-tui --lib bedrock`: 7 passed; reviewed Mantle and
Runtime model-picker snapshots, including GovCloud coverage.
- `just test -p codex-app-server --test all -E
'test(suite::v2::thread_start::thread_start_provider_model_fallback_) or
test(suite::v2::thread_start::thread_start_bedrock_runtime_)'`: 4 passed
on automatic retry. All four initial attempts timed out during
initialization; nextest reports these as flaky passes.
- `just fmt` completed successfully. Discarded unrelated justfile-only
formatting churn; the backport remains identical to the public source
patch.
- `git diff --check`: passed.
- Live AWS inference has not been verified as part of this backport.
CI remains blocked by failures outside this nine-file backport:
- [Manifest
check](https://github.com/openai/codex/actions/runs/36615506389/job/109567359534):
stale `code-mode` feature exception.
-
[Codespell](https://github.com/openai/codex/actions/runs/36615506389/job/109567359001):
`WRONLY` and `oint` in unchanged exec-server/TUI math files.
- [cargo
shear](https://github.com/openai/codex/actions/runs/36615506389/job/109567775485):
unlinked `core/tests/suite/scenarios_read_only_mcp.rs` and
`login/src/internal_identity.rs`.
- [Bazel
Clippy](https://github.com/openai/codex/actions/runs/36615506389/job/109567360047):
unused imports in unchanged core implementation/test files.
- [SDK
checks](https://github.com/openai/codex/actions/runs/36615506389/job/109567359667):
existing formatter-driver test expects direct rustfmt while the driver
uses cargo fmt; neither file changes here.
Release coordination: include this backport together with #49323 before
publishing 0.159.1. Publication remains with the release captain.
Prepare the backports for 0.159.1 on `release/0.159`. The release set is
incomplete: one additional backport is pending. Keep this PR in draft
until the full release set is included.
Currently includes #49318: add GPT-6.1 Sol as the default bundled model
and update the older Sol descriptions and model-picker snapshots.
The backport omits the `skill_catalog_dedup` snapshot because its test
does not exist on the 0.159 release line. The model catalog and all
retained snapshot files match the original public commit.
Release-line CI currently reports a stale `code-mode` feature exception
in the manifest checker, unlinked files in `codex-core` and
`codex-login`, and Codespell findings in the exec-server and TUI math
code. The reported files are unchanged from the 0.159.0 content commit.
A Linux Bazel job also failed while downloading Buildozer with HTTP 500.
## Why
Message-board notifications delivered as ordinary injected input could cause an agent to sample again after its final answer.
## What changed
Route notifications through the current turn's mailbox as `InterAgentCommunication`, checking atomically that the turn is running and still accepts mailbox delivery. Skip notifications when delivery is closed. Accepted notifications may remain in conversation history for a later turn without reopening the finalized answer or starting a new turn.
Report pending inter-agent communications as mailbox activity, while preserving priority for steering input.
## Testing
Add regression scenarios for notifications arriving before and after finalization, asserting no extra sampling and the expected notification presence in the next turn. Extend input-queue coverage to recognize already-pending mailbox activity.
GitOrigin-RevId: 41d786041b4eccc5ccf926f2f190473676a3ac2f
## Why
Startup prewarm can reconnect after its empty WebSocket connection closes,
consuming the scripted realtime session reply in the environment-key fallback
test with ChatGPT authentication.
## What changed
Use separate WebSocket servers for startup and realtime traffic, configuring
`experimental_realtime_ws_base_url` to point to the realtime server. Assert that
it receives exactly one handshake and that the handshake uses the environment
key for authorization.
GitOrigin-RevId: 0e8ba4bdd66ef8aa3c619e36454dded9dcf55444
## What changed
- Default `flowchart` and `graph` to top-down layout when no direction is specified.
- Support solid and dashed edges with directed, undirected, or bidirectional endpoints: `-->`, `---`, `<-->`, `-.->`, `-.-`, and `<-.->`.
- Accept pipe labels on these edges and spaced directed infix labels such as `A -- send --> B` and `A -. retry .-> B`.
- Expand `&` groups into all source-to-target edges, including in chains. For example, `A & B --> C & D` creates four edges. Enforce the 24-edge limit after expansion and cap each group at 24 node references.
## Testing
Add coverage for equivalent syntax, edge styles and endpoints, malformed input, and expansion limits. Extend rendering snapshots across all four directions and the TUI native-renderer test with the new syntax.
GitOrigin-RevId: 6e51653ebf6b8b7e7e1edec0c2e09a5d9c8dec74
Backport two reviewed upstream fixes onto the exact content parent of
0.159.0-alpha.12 for the desktop 260930 train:
- Public #49019 (internal #10589),
4fd5745e84: reuse unpackaged PowerShell
fallback for local MXC. Remote, unsandboxed, restricted-token handling
and elevated-only -NoProfile behavior are preserved.
- Public #49704, 5602705c96: keep newer
npm alpha pointers unchanged when publishing an older frozen hotfix. The
existing OIDC publisher uses version-specific tags; registry lookup
failure aborts publication. No new credentials or permission changes.
Both patches apply cleanly and match their upstream patch IDs. Eight
files total, +360/-71; no extra dependencies or unrelated product
changes. Frozen base: 1cc7e23612. Intended
publication: 0.159.0-alpha.12.1 through the exact-SHA-guarded branch
publisher.
Validation: just fmt and whitespace checks passed; all 50 focused
PowerShell library tests passed; all 17 release/tag-selection tests
passed. Initial product-only head passed all three production build
checks (Linux/macOS/Windows); updated-head checks are pending. Native
MXC execution is not claimed by Linux validation. The included Windows
integration test skips if MXC is unavailable.
Initial CI manifest-policy failure reproduces on the exact frozen base;
Codespell and cargo-shear failures concern unchanged files. No unrelated
lint fixes included.
---------
Co-authored-by: Ian MacLeod <imac@openai.com>
## What changed
Render interrupted turns with secondary text styling and shorter wording,
removing the suggestion to tell the model what to do differently.
## Testing
Update interruption snapshots and assert that the notice uses secondary text
styling.
GitOrigin-RevId: 7cb042ed9e6781d107a93d5677fa193f082c764d
## Why
Allow the provisioning service time to start without holding up desktop readiness checks for the full provisioning timeout.
## What changed
- Poll service status while startup is pending, waiting up to five seconds within the caller's deadline. Treat absent, deletion-pending, or other non-running service states as unavailable.
- Preserve the original provisioning deadline for pipe availability and request processing, and reject requests whose deadline expires during server authentication.
- Recheck service status when the pipe disappears while waiting for an available instance.
GitOrigin-RevId: ea89175cb41749b9768ac5915083bbfd8ad32713
## Why
Fresh threads have no rollout until their first turn, so archiving them previously failed with a missing-rollout error.
## What changed
Persist loaded, non-ephemeral threads before looking them up for archival. This lets a newly started thread be archived without creating a user turn.
## Testing
Update the archive regression test to cover threads with no turns in both legacy and paginated history modes. Verify the archive notification, empty turn history, `NotLoaded` status, and archived rollout path.
GitOrigin-RevId: 507351c6238ad96f5e3ffbd2ed7f432058e3d52c
## What changed
- Show a hand pointer over actionable transcript links while Codex captures mouse input in Ghostty and Kitty, excluding sessions inside terminal multiplexers.
- Share link hit testing between hover and click activation, and refresh hover after rendering so scrolling and live output cannot leave a stale hand pointer.
- Suppress link hover during mouse presses and drags, overlays, and popups, and clear remembered mouse coordinates on focus loss, resize, and resume.
- Restore the terminal's pointer policy when releasing mouse capture, releasing Kitty's override and using a text pointer in Ghostty. Deduplicate pointer updates and preserve cleanup after write failures.
## Testing
Add tests for wrapped links containing wide characters, hover/click target agreement, scrolling, pointer transitions and restoration, write-failure retries, and hover invalidation.
GitOrigin-RevId: 1cf52e039a229e12260fa334879784c9bc1c8c87
## Why
Capture jitter and mute transitions can shift RTP timestamps off the 20 ms source grid, causing receivers that assemble fixed-duration frames to reject subsequent audio.
## What changed
Advance elapsed gaps in whole 20 ms packets and keep the track clock on that grid. Bias empty gap durations by 1 ns to avoid losing an RTP tick to floating-point truncation.
## Testing
Update jitter and mute tests to assert exact clock advancement, including a 580 ms gap, and verify that resumed RTP timestamps stay aligned to 960-sample packets.
GitOrigin-RevId: 1511c739b77ee5871f72723fd34cb67aa9a48c95
## What changed
- Give tool fragment sizes and namespace counts logarithmic boundaries through 32,768.
- Give enabled and kept skill counts integer boundaries from 0 through 512, removed description characters logarithmic boundaries through 131,072, and skill truncation flags boundaries at 0 and 1.
- Record these metrics with explicit boundaries, separating zero values and retaining overflow buckets above each range.
## Testing
Extend tool and skill metric tests to assert explicit boundaries. Add an export test covering zero, one, the upper boundary, and overflow, including bucket counts, ordering, and sample totals.
GitOrigin-RevId: 9fbf3acbe352d7c74f3ad11f0b690148c083a6ef
## Why
Splitting every statement at semicolons and rejecting label punctuation prevents rendering labels such as `A["Go []; &"]`, sequence messages containing `data[0] = {x: 1}`, and class members containing semicolons.
## What changed
- Split statements using diagram-specific rules, preserving semicolons inside flowchart labels, quoted tokens, and class member lines. Sequence quotes remain literal text.
- Respect quoted flowchart label delimiters and allow printable label punctuation, including literal ampersands and comparison operators.
- Reject unsupported entity escapes before statement splitting can truncate them, while retaining rejection of HTML markup and malformed labels.
- Document the supported syntax and require newlines between class members.
## Testing
Add parser assertions and update rendering snapshots for punctuation, quoted delimiters, and semicolons. Extend rejection coverage for entity escapes across diagram families, malformed quotes, and invalid class bodies.
GitOrigin-RevId: da94007a66c7c58444e6f0d6a1b409c8c7251941
## What changed
- Add `CodexThread::prewarm_with_history()` to prepare a WebSocket response with existing conversation history and executed-tool metadata using `generate: false`. The next turn can reuse the prepared response when its prompt extends that history and request settings match.
- Keep startup prewarming and `prewarm()` on the existing empty-input path, and skip preparation when the cached WebSocket is ready.
- Label prewarm telemetry by input mode and WebSocket continuation metrics with `after_prewarm`.
- Rename `persistent_mode_enabled` to `persistent_execution_enabled` without changing its behavior.
## Testing
Extend WebSocket coverage to check history preservation during reconnect prewarming, reuse of the prepared response on the next turn, and omission of `previous_response_id` for a non-prefix prompt.
GitOrigin-RevId: c7731541b11b2e6668027a47f37f696213268c66
## Why
Completion footers hid known durations unless they exceeded 60 seconds, leaving short turns without elapsed-time information.
## What changed
Show all known durations for live and restored turns, rendering sub-second durations as `Worked for <1s`. Separate completion metadata with `•` instead of `·`.
## Testing
Update live completion, history replay, and separator tests to cover short durations, missing timestamps, and the revised footer format. Refresh affected TUI snapshots.
GitOrigin-RevId: 666e765db5426c5f9cc00d73f71cab649ad34947
## Why
The “Implement this plan?” prompt blocked transcript scrolling, preventing users from reviewing earlier steps in a long plan while deciding how to proceed.
## What changed
Allow mouse-wheel scrolling over the visible transcript while a modal is active. Keep keyboard input with the modal and preserve restrictions on transcript selection, scrolling outside the transcript, and scrolling with completion popups open.
## Testing
Add input tests and a snapshot covering plan-prompt scrolling, keyboard navigation, dismissal and submission, pointer boundaries, and completion-popup behavior.
GitOrigin-RevId: ac5227c877ce34324a0d3830d5383495241ddbc3
## What changed
Render ordered list markers in the TUI with the terminal's `LightBlue` color instead of `accent_color()`.
## Testing
Add a snapshot covering ordered list markers alongside links and inline code. Update rendering expectations and nested-list streaming tests to assert `LightBlue`, including the incremental rendering snapshot.
GitOrigin-RevId: dea0081737a5bbe8652c761582fb82b20964431a
## Why
Some Windows terminals send legacy mouse reports as key records. Requesting SGR reports lets ConPTY translate them into mouse records.
## What changed
Write and flush the SGR encoding request separately from `EnablePointerCapture`, so it also reaches terminals when capture uses the Windows console API. Explicitly reset SGR encoding during Windows mouse cleanup, even if restoring the console mode fails.
## Testing
Add regression tests for cleanup after SGR setup fails and an isolated Windows console test that checks mouse input activation, SGR encoding, and restoration of the original console mode and default encoding.
GitOrigin-RevId: c1a48d641cda4e770dbbe9fdf805a27e036d35c3
## Why
Guardian denial-limit interruptions lack a structured error identifying the cause. Make this opt-in because older clients may not recognize the new error in shared history.
## What changed
- Add `auto_review.circuit_break_action = "strict"` to attach `TooManyDenials` to the interrupted turn. The default leaves the error unset.
- Expose `turn.error.codexErrorInfo = "tooManyDenials"` in app-server notifications and saved history, and update protocol schemas and generated types.
- Preserve the warning, denial limit, and interrupted status without emitting a separate error notification.
## Testing
Add an integration test covering omitted, `default`, and `strict` settings, checking warnings, live turn errors, the absence of separate error notifications, and persisted turn errors after restart.
GitOrigin-RevId: cb5d379e64728d4d7b9daf834c13756e4a70db31
## Why
Inspecting one MCP server should not require full-inventory discovery or a separate connection when a thread already has one.
## What changed
- Add optional `serverName` to `mcpServerStatus/list` and update generated schemas and bindings.
- With `threadId`, apply any pending runtime refresh and reuse the thread's current connection and tool catalog, waiting only for the selected server during discovery.
- Without `threadId`, create a discovery connection for only the selected server. Unknown names return an empty page; omitting `serverName` preserves full-inventory discovery.
## Testing
Add a regression test covering both status detail modes, checking that tool metadata is preserved and that status reads do not repeat `initialize` or `tools/list` requests.
GitOrigin-RevId: 1b361b67a993ab45cae493e88c146f50cfaf753a
## Why
Guardian reviews need to retain original evidence across parent compaction when checkpoint reuse is disabled, including after resume and rollback.
## What changed
- Make disabling `guardian_reuse_parent_compaction` select a bounded, independent review transcript while preserving thread-owned authorization.
- Keep synchronous reviews and asynchronous scoring independent of parent checkpoints, and allow reviewer sessions to continue using transcript deltas across parent compaction.
- Persist transcript entries with rollback provenance while remaining compatible with older checkpoint readers and metadata-free checkpoints.
- Exclude compaction output from the transcript and synthetic summaries from rollback turn boundaries. Use acceptance ordering to remove rolled-back evidence even when persistence order differs.
## Testing
Add regression coverage for reviewer continuity, evidence retention across compaction and resume, rollback after local and remote compaction, and checkpoint serialization compatibility.
GitOrigin-RevId: fea0852cc5537372854f4a34bacb6bfda6d13e88
Let task titles use the space previously reserved for the `current` badge
in the agents overview. Update the overview assertion and rendering
snapshots to match.
GitOrigin-RevId: 6a007d4f8b1a3a77459895725e2db8ef4a4d584d
## What changed
Add the `› ` prefix to pinned prompt headers, using bold red for spoken prompts and bold dim styling for other prompts. Reserve one column when truncating the header.
## Testing
Add a rendering test comparing pinned headers with the original prompt rows for both regular and spoken prompts. Update snapshots for the prefix and display-width truncation.
GitOrigin-RevId: 89c2d9267374ef8f6504058c12c078025f302fef
## Why
An advertised control socket path can exceed the Unix socket path limit even when its symlink target is short enough to connect to.
## What changed
On Unix, resolve the socket path and retry the connection when the initial attempt returns `InvalidInput`.
## Testing
Add a regression test that creates control sockets under two long home paths, checks that their symlink targets are distinct, and verifies that clients can connect through both advertised paths.
GitOrigin-RevId: 2541f0a9b02d85035fa89fe26bbcd36d5cd0cc1e
## Why
Defaulting missing or unsupported display preferences to `inline` prevents clients from applying resource display defaults.
## What changed
Populate `mcpAppUi` only when a tool descriptor has a resource URI and an explicit `inline` or `fullscreen` preference. Preserve `mcpAppResourceUri` independently in tool-call events, including when `mcpAppUi` is unset, and document the behavior.
## Testing
Update integration coverage for explicit display modes, missing and unsupported preferences, and legacy resource URIs, checking tool-call events and resumed history.
GitOrigin-RevId: 4876cced068d8e464adeb265abd053d8abe667ce
## What changed
Replace generic output disclosure labels with counts such as `+ 5 lines (ctrl+t to expand)` for compact command activity, both live and in history. Count retained output lines hidden or clipped by the preview, excluding output discarded by storage limits.
Use the configured `open_transcript` shortcut and omit the hint when it does not fit or the action is unbound. Invalidate cached layouts when keybindings change. Keep generic `Show details` labels for other hidden details and keep disclosure controls outside copyable and searchable text.
## Testing
Add regression tests for live/history consistency, remapped and disabled shortcuts, and exclusion of hints from source text. Add snapshot coverage for fully visible output, hidden and clipped lines, command-only details, and storage-truncated output.
GitOrigin-RevId: c468be9b88b69dc3ca1abdb6b7be023244d32a57
## What changed
Replace the continuous two-second shimmer with a 600 ms initial delay and a one-second sweep every four seconds, matching the desktop app's thinking and reasoning header timings.
## Testing
Update snapshots for short, long, and Unicode labels in both themes to cover the initial delay, sweep, gap, and next sweep. Sample smoothness across two sweeps at 32 ms intervals and adjust the brightness-change bound for the faster sweep.
GitOrigin-RevId: d7a6a81db99bf0e8a73eee0c67eb7e44d4d76f42
## Why
The status card truncates values in narrow terminals, hiding parts of paths, session IDs, and other details.
## What changed
- Remove the status border and wrap values with continuation lines aligned beneath the value column, falling back to less indentation at very narrow widths.
- Preserve full directory paths and session IDs in displayed and copied status output.
- Allow history updates with no previous rows to append new details while preserving existing history rows.
## Testing
Add regression coverage for long Unicode paths and session IDs across terminal widths, copied text, usage links, and appending late thread-usage details. Update status snapshots for the borderless layout and wrapped values.
GitOrigin-RevId: e059fed5b45e15b76250b684f1760797442eabce
## Why
Concurrent tests can inherit writable descriptors for executable fixtures, causing `ETXTBSY` when those fixtures launch on Linux.
## What changed
Expose shared `write_executable` and `copy_executable` helpers from `codex_utils_cargo_bin` and adopt them in CLI, exec-server, and MCP tests. On Linux, writes and copies complete in separate processes so sibling test spawns cannot inherit the writable descriptors. Script fixtures receive mode `0o755`, and copied executables retain their source permissions.
Remove the executable-busy retry loop from the program resolver test now that its script uses the shared helper.
GitOrigin-RevId: 61624158190bb1e75c27d9eb9c87a2defc147fb7
## Why
Guardian needs the assistant's delivered question to interpret a user's reply. Messages sent through nested Code Mode tools must remain available as review context, and approvals based on earlier context must become stale when a new delivery is confirmed. Assistant messages do not themselves grant authorization.
## What changed
- Capture successful hosted User Messaging sends after input rewriting and before result callbacks or post-tool hooks.
- Retain bounded delivery text in acceptance order, persist it through cancellation and shutdown, and preserve it across compaction and resume with an older-client-compatible rollout encoding.
- Track assistant review context separately from user authorization, invalidating pending and cached approvals for both local and worker reviews when that context changes.
- Associate retained deliveries with the correct instruction or communication boundary during rollback.
## Testing
Add coverage for nested messaging review context, fast replies and communication ordering, shutdown persistence, stale local and worker approvals, rollout compatibility, and rollback retention.
GitOrigin-RevId: 1bc1ec9e8947560b99f4b39a42ddb9f2099f519b
## Why
Concurrent test spawns can inherit a writable descriptor for the MCP server
wrapper, causing `ETXTBSY` when launching it on Linux.
## What changed
Write the wrapper through a separate `/bin/sh` process on Linux so its writable
descriptor stays out of the test process. Check the writer's exit status and
include stderr on failure. Retain direct file writes on other Unix platforms.
GitOrigin-RevId: f99952ec000ba7317243e87fd664dc0e31bb7b24
Stop logging response headers on successful WebSocket connections and payload
previews for tool calls. Keep the connection URL, tool name, and thread ID in
their respective log entries.
GitOrigin-RevId: 1d410b6aef8f12153da9bfc60c515b8e797a9de0
Replace the stale `start_fresh_session_with_summary_hint` call with
`start_fresh_session` in the test for restoring blank drafts and built-in
permissions.
GitOrigin-RevId: a1f1f75dc173a732af712511cf8f6a16f2e3c0fa
Set `CFBundleName` to `ChatGPT` and add `CFBundleDisplayName` with the same
value in the generated `Info.plist`.
GitOrigin-RevId: e40a0b10895227148d6fdc199b1c4166b5c59372
## Why
Untouched threads have no rollout for `thread/resume` yet. Switching away from a blank startup or fresh session needs to preserve its live subscription, draft, and settings so it can be reopened.
## What changed
- Retain blank startup and fresh sessions for non-ephemeral connections to an external app server, and save their input state before navigating away.
- Restore the current thread name and apply background settings updates after restoring drafts, so saved model choices do not overwrite newer server settings.
## Testing
Extend the task-switching regression test to cover blank startup and fresh sessions, preserved drafts and model choices, updated thread names, and restoration without `thread/resume` or `thread/unsubscribe`. Verify that background model, permission, and approval-policy updates are used for the first submitted turn.
GitOrigin-RevId: 958b0cb48a5a873d8d8f5858ac334fecbfad60c7
## What changed
Remove the previous session's token usage and resume hint from the history
shown when starting a fresh session or resuming another thread. Remove the
unused summary helpers and their tests, and rename the fresh-session helper
to `start_fresh_session`.
GitOrigin-RevId: d808bdf355831d1c7b937b6a101ffbb33a805234
## Why
Empty list items can lose their markers, and a bare marker received during streaming can still acquire content in a later chunk.
## What changed
- Render pending markers when an empty item ends or a nested list starts on a new line, including inside blockquotes.
- Keep trailing bare list markers mutable during streaming so later content and terminal resizing preserve the item correctly.
## Testing
Add snapshot coverage for empty ordered, nested, and blockquoted list items, plus regression tests for streamed continuations, finalization, and resizing with a held marker.
GitOrigin-RevId: d9116bddc49670ad66d71dbddc66b2ab347cb6b7
## What changed
Remove automatic next-message generation after successful turns, suggestion rendering in the composer, and the associated Tab acceptance and Escape dismissal handling. Remove the `tui.prompt_suggestions` configuration option and its schema entry, along with suggestion-specific tests and snapshots.
GitOrigin-RevId: 63bf6f2ca85da6ece502c86e2a805d000bf34210
## What changed
Add `Features::persistent_mode_enabled` and use it for persistent instructions and current-time reminder defaults. Enablement still requires `ReasoningEffort::Persistent`.
Change `PersistentModeState::new` to accept an explicit enablement boolean, separating instruction rendering from reasoning-effort selection.
## Testing
Update persistent-context tests to use boolean enablement while preserving coverage for instruction replacement, removal, deduplication, and retained history without a snapshot.
GitOrigin-RevId: f412b90d783438d1526956a56c11b9e66385ee0e
## What changed
- Delete the `plugin-creator` skill, its assets, reference docs, helper scripts, and associated Python tests.
- Update the app-server skills context budget warning test to expect six omitted skills instead of seven.
GitOrigin-RevId: 005b1ab7f2f7c2933e6c297d01541746cc489f68
## Why
A provisioned executor can still be resuming after readiness is reported. Initial connection attempts can exhaust the ordinary registry retry limits before the executor comes online.
## What changed
Retry `environment_offline` registry responses during initial Noise rendezvous connections for provisioned environments until a fixed five-minute deadline, starting after provisioning succeeds. Keep the existing retry limits for other registry errors and stop on permanent failures.
## Testing
Add tests covering the five-minute deadline, ordinary limits for other errors and stalled requests, and termination on a later permanent error. Verify that readiness and info requests remain pending through an extended offline period and succeed using the same environment handle once the executor comes online.
GitOrigin-RevId: e22211499d9ec2f3590e75224eb39e2e4bf3538d
## Why
Long descriptions could exhaust the 4 KiB tool summary budget and hide later namespace names, limiting their visibility for tool discovery.
## What changed
- Reserve space for all namespace names before sharing the remaining budget across descriptions, including added and removed groups.
- Truncate descriptions at UTF-8 boundaries with `...`, including at the existing 250-character cap. Omit whole namespaces only when names alone exceed the budget, reserving omission notices only in that case.
- Render namespace names and descriptions without XML escaping.
## Testing
Add unit and snapshot coverage for description allocation, Unicode boundaries, namespace omissions, and empty-state notices. Add a scenario verifying that a crowded catalog retains every namespace name, allows discovery of a late namespace with its full description, and keeps the summary unchanged on follow-up.
GitOrigin-RevId: 9743cda5aa14190db22c788c9e91e1785a32682b
## Why
Private IP destinations always bypassed inherited upstream proxies, preventing their use for private networks reachable through an upstream VPN proxy.
## What changed
- Add `codex exec-server --proxy-private-ips-via-upstream`, also configurable with `CODEX_EXEC_SERVER_PROXY_PRIVATE_IPS_VIA_UPSTREAM=true`. The setting defaults to disabled.
- Allow permitted RFC 1918, carrier-grade NAT, and IPv6 unique-local destinations to use an applicable upstream proxy. Loopback and link-local destinations retain direct routing, and destination access policy still applies.
- Keep connections direct when no valid upstream proxy applies or `allow_upstream_proxy=false`. Errors after selecting an upstream proxy do not trigger a direct retry.
- Rename `ExecServerRuntimePaths` to `ExecServerRuntimeOptions` and carry the routing setting from executor startup into the managed network proxy.
## Testing
Add routing coverage for private address ranges, special-use addresses, and public targets with the option enabled and disabled. Verify that HTTP and CONNECT requests still enforce destination allowlists and denylists, and update the CLI help snapshot.
GitOrigin-RevId: b7c9cc7da0e0f545694a6521b74c9b36b7b92769
## Why
System libcurl needs access to `com.apple.TrustEvaluationAgent` for TLS, but Seatbelt network profiles did not allow lookup of this service.
## What changed
Allow `mach-lookup` for this service when unrestricted networking is enabled or a restricted profile permits proxy ports or local binding. Keep access denied for network-disabled, Unix-socket-only, and managed profiles without usable endpoints.
## Testing
Add macOS regression tests that apply Seatbelt policies and check trust-service access and loopback connections without external network dependencies. Cover managed-network overrides and verify that unrelated service lookups and connections to unapproved ports remain denied.
GitOrigin-RevId: 8b190d6181fe1321186837557caa379275abfaee
## What changed
- Use the compact title, version, and directory layout for all session headers, including resume, fork, and clear-screen flows. Remove the boxed model row and retain the optional greeting and YOLO permissions indicator.
- Share title styling with the status card and honor the active render mode and wrapping policy when inserting a fresh header after clearing the screen.
## Testing
Update header and startup snapshots for the borderless layout, narrow widths, and halfwidth directory characters. Add assertions that clearing history preserves the raw header in raw output mode.
GitOrigin-RevId: 0b91c1ce6646f9d9d1954b1442936abe93bdcd3c
## Why
Hiding an already-visible working tip during mouse selection shifts the transcript layout and disrupts selection.
## What changed
Keep displayed working tips visible while interacting with the transcript or scrolling away from the latest output. Initial tip display and completion tips still require an idle viewport following the latest output.
Check usage notices directly when suppressing tips so a tip cannot appear merely because interaction temporarily hides the composer warning.
## Testing
Add a mouse-selection regression test and snapshot covering deferred initial display, stable transcript rows through mouse down, drag, and release, correct selected text, and continued tip suppression when a usage warning is hidden during interaction.
GitOrigin-RevId: 3cee527f3a7daaccecbeedbdf083c61075dfa32f
## Why
Inline `$0$` was left unrendered, and expressions containing `\bigwedge`, `\bigl`, or `\bigr` fell back to raw LaTeX.
## What changed
- Allow `$0$` through the inline math detection heuristic.
- Render `\bigwedge` as `⋀`, with limits stacked above and below in display math.
- Handle `\bigl` and `\bigr` like `\left` and `\right`.
## Testing
Add a regression snapshot covering inline zero, inline big wedge, and a multiline display expression with stacked limits and delimiters.
GitOrigin-RevId: 89f596ea5f38070274505cfa7ea757595d7ae137
## Why
Copied table selections became code blocks containing the rendered grid, losing table structure. Stripping trailing whitespace from completed responses also removed Markdown hard breaks and spaces in code.
## What changed
- Reconstruct Markdown tables from selected cells across grid and record layouts, preserving alignment, inline formatting, and list or blockquote nesting.
- Copy a single selected cell as inline content and leave unselected cells empty without adding their text. Escape literal pipes in table code spans and link destinations.
- Preserve trailing whitespace on lines unchanged by assistant directive removal.
- Keep blank rows in copied text without painting newline selection highlights on empty rows.
## Testing
Add regression coverage for wrapped and rewrapped tables, partial selections, empty cells, literal pipes, and separate table and code blocks. Update snapshots for nested tables and selection highlights, and verify completed-response copying preserves hard breaks and code whitespace.
GitOrigin-RevId: 661e4c8331f2737bedff286548f9343bac44e0cb