Commit Graph
14719 Commits
Author SHA1 Message Date
Michael Bolin 9cb775190c merge commit for archive created by Sapling 2026-05-01 13:17:37 -07:00
Michael Bolin 7be09d1904 config: add strict config parsing 2026-05-01 13:17:22 -07:00
Michael Bolin 2398f07395 Merge a8f5a8ce13 into sapling-pr-archive-bolinfest 2026-05-01 13:08:31 -07:00
Michael Bolin a8f5a8ce13 config: add strict config parsing 2026-05-01 13:08:23 -07:00
Michael Bolin f32a0d4c13 Merge 79ad051875 into sapling-pr-archive-bolinfest 2026-05-01 13:02:17 -07:00
Michael Bolin 79ad051875 ci: cross-compile Windows Bazel tests 2026-05-01 13:02:06 -07:00
Michael Bolin 525b1119c0 merge commit for archive created by Sapling 2026-05-01 12:54:55 -07:00
Michael Bolin 849c3aaa41 ci: cross-compile Windows Bazel tests 2026-05-01 12:54:34 -07:00
Michael Bolin 1caaac1ce3 Merge c4c13e2b09 into sapling-pr-archive-bolinfest 2026-05-01 12:36:08 -07:00
Michael Bolin c4c13e2b09 config: add strict config parsing 2026-05-01 12:36:00 -07:00
Michael Bolin d4dfc7e548 merge commit for archive created by Sapling 2026-05-01 12:33:24 -07:00
Michael Bolin cbbc2016ef ci: cross-compile Windows Bazel tests 2026-05-01 12:33:03 -07:00
Michael Bolin b689006860 Merge 6b51c774b0 into sapling-pr-archive-bolinfest 2026-05-01 12:10:03 -07:00
Michael Bolin 6b51c774b0 ci: cross-compile Windows Bazel tests 2026-05-01 12:09:51 -07:00
Michael Bolin 7f03323e3f merge commit for archive created by Sapling 2026-05-01 12:03:54 -07:00
Michael Bolin 94d8d4832f config: add strict config parsing 2026-05-01 12:03:36 -07:00
Michael Bolin 05f867cc5c Merge 97731fcb7b into sapling-pr-archive-bolinfest 2026-05-01 11:34:56 -07:00
Michael Bolin 97731fcb7b ci: cross-compile Windows Bazel tests 2026-05-01 11:34:37 -07:00
Michael Bolin 4d51238379 Merge d4d74a43dc into sapling-pr-archive-bolinfest 2026-05-01 11:31:01 -07:00
Michael Bolin d4d74a43dc config: add strict config parsing 2026-05-01 11:30:51 -07:00
pakrym-oai aed74e5ee4 [codex] Emit image view as core item (#20512)
## Why

Image-view results should be represented as a core-produced turn item
instead of being reconstructed by app-server. At the same time, existing
rollout/history paths still understand the legacy `ViewImageToolCall`
event, so this keeps that event as compatibility output generated from
the new item lifecycle.

## What changed

- Added `TurnItem::ImageView` to `codex-protocol`.
- Emitted image-view item start/completion directly from the core
`view_image` handler.
- Kept `ViewImageToolCall` as a legacy event and generate it from
completed `TurnItem::ImageView` items.
- Kept `thread_history.rs` on the legacy `ViewImageToolCall` replay
path, with `ImageView` item lifecycle events ignored there.
- Updated app-server protocol conversion, rollout persistence, and
affected exhaustive event matches for the new item plus legacy fan-out
shape.

## Verification

- `cargo test -p codex-protocol -p codex-app-server-protocol -p
codex-rollout -p codex-rollout-trace -p codex-mcp-server -p
codex-app-server --lib`
- `cargo test -p codex-core --test all
view_image_tool_attaches_local_image`
- `just fix -p codex-protocol -p codex-core -p codex-app-server-protocol
-p codex-app-server -p codex-rollout -p codex-rollout-trace -p
codex-mcp-server`
- `git diff --check`
2026-05-01 11:28:30 -07:00
canvrno-oai 610eefb86b /plugins: add marketplace upgrade flow (#20478)
This PR adds marketplace upgrade to the `/plugins` menu so users can
update configured marketplaces. It adds a `Ctrl+U` shortcut on eligible
marketplace tabs, a loading state, and the app-server request flow
needed to perform `marketplace/upgrade`. After a successful upgrade, the
TUI refreshes plugin data, plugin mentions, and user config so updated
marketplace contents show up across the menu and other plugin surfaces.
It also preserves the current marketplace tab on no-op and failure paths
and surfaces backend error details directly in the TUI.

- Add a `Ctrl+U` upgrade option for user-configured marketplace tabs in
`/plugins`
- Show the upgrade footer hint only on upgradeable marketplace tabs
- Show a loading state during `marketplace/upgrade`
- Surface already-up-to-date and per-marketplace failure results from
the backend
- Refresh plugin data, plugin mentions, and user config after successful
upgrades
- Add tests and snapshot updates for the shortcut flow, loading state,
and failure messaging

Steps to test:
1. Add a `/plugin` marketplace to Codex TUI.
2. Open `/plugins`, move to that marketplace tab, and confirm the footer
shows `Ctrl+U` to upgrade.
3. Press `Ctrl+U` and confirm the popup switches into an upgrade loading
state.
4. When the request finishes, confirm you see the expected result:
updated marketplace contents on success, an already-up-to-date message
on no-op, or backend error details on failure. On no-op or failure,
confirm the popup stays on the same marketplace tab.
2026-05-01 11:26:29 -07:00
jif-oai 2817866a32 fix: reduce ConfigBuilder::build stack usage (#20650)
## Why

`ConfigBuilder::build` performs a large amount of async config loading.
Leaving that entire future on the caller stack makes config startup more
fragile on small runtime worker stacks.

## What changed

- keep `ConfigBuilder::build` as a thin wrapper that boxes the
config-loading future before awaiting it
- move the existing implementation into a private `build_inner` method
so the large async state machine lives on the heap instead of the
runtime thread stack

## Testing

- Not run locally
2026-05-01 20:24:17 +02:00
Felipe Coury ff66b3c7eb fix(tui): restore alt-enter newline alias (#20535)
Fixes https://github.com/openai/codex/issues/20501

## Summary
- add Alt+Enter to the built-in editor newline aliases
- update keymap tests that used Alt+Enter as a custom submit binding now
that it conflicts with newline
- refresh the keymap action-menu snapshot fixture

## Test Plan
- `just fmt`
- `cargo test -p codex-tui keymap::tests`
- `cargo test -p codex-tui bottom_pane::textarea::tests`
- `cargo test -p codex-tui keymap_setup::tests`
- `cargo test -p codex-tui`
- `cargo insta pending-snapshots`
- `git diff --check`
- `just argument-comment-lint`
2026-05-01 15:22:02 -03:00
Michael Bolin edba065a7f Merge 9475d37b83 into sapling-pr-archive-bolinfest 2026-05-01 11:16:52 -07:00
Michael Bolin 9475d37b83 config: add strict config parsing 2026-05-01 11:16:40 -07:00
Michael Bolin ac186cbff5 Merge bdbe9b64a4 into sapling-pr-archive-bolinfest 2026-05-01 11:09:48 -07:00
Michael Bolin bdbe9b64a4 ci: cross-compile Windows Bazel tests 2026-05-01 11:09:35 -07:00
Michael Bolin eb1c860802 merge commit for archive created by Sapling 2026-05-01 11:04:11 -07:00
Michael Bolin af28d76b60 config: add strict config parsing 2026-05-01 11:03:57 -07:00
starr-openaiandCodex be71b6fcd1 Use selected turn environments for runtime context (#20281)
## Summary
- make selected turn environments the source of truth for session
runtime cwd and MCP runtime environment selection
- keep local/no-selection fallback behavior intact
- add coverage for duplicate selected environments, cwd resolution, and
MCP runtime environment selection

## Validation
- git diff --check
- rustfmt was run on touched Rust files during the implementation
workflow

CI should provide the full Bazel/test signal.

---------

Co-authored-by: Codex <noreply@openai.com>
2026-05-01 11:00:14 -07:00
Tom e4d6675632 [codex] Migrate loaded thread/read history to ThreadStore (#20486)
## Summary

- Route loaded `thread/read` + `includeTurns` through
`CodexThread::load_history` / ThreadStore history instead of direct
rollout JSONL reads.
- Add an in-memory ThreadStore regression test covering loaded
`thread/read includeTurns` without a local rollout path.
2026-05-01 10:55:04 -07:00
Michael Bolin d843d6ad86 merge commit for archive created by Sapling 2026-05-01 10:41:26 -07:00
Michael Bolin f48e5adf98 config: add strict config parsing 2026-05-01 10:41:10 -07:00
Abhinav 78baa20780 deprecate legacy notify (#20524)
# Why

`notify` is the remaining compatibility surface from the legacy hook
implementation. The newer lifecycle hook engine now owns the active hook
system, so we should start steering users away from adding new `notify`
configs before removing the old path entirely. This also adds a
lightweight watchpoint for the deprecation so we can see how much legacy
usage remains before the clean drop.

# What

- emit a startup deprecation notice when a non-empty `notify` command is
configured
- emit `codex.notify.configured` when a session starts with legacy
`notify` configured
- emit `codex.notify.run` when the legacy notify path fires after a
completed turn
- mark `notify` as deprecated in the config schema and repo docs
- remove the orphaned `codex-rs/hooks/src/user_notification.rs` file
that is no longer compiled
- add regression coverage for the new deprecation notice

# Next steps

A follow-up PR can remove the legacy notify path entirely once we are
ready for the clean drop. Before then, we can watch
`codex.notify.configured` and `codex.notify.run` to understand the
deprecation impact and remaining active usage. The cleanup PR should
then delete the `notify` config field, the `legacy_notify`
implementation, the old compatibility dispatch types and callsites that
only exist for the legacy path, and the remaining compatibility
docs/tests.

# Testing

- `cargo test -p codex-hooks`
- `cargo test -p codex-config`
- `cargo test -p codex-core emits_deprecation_notice_for_notify`
2026-05-01 17:35:21 +00:00
Michael Bolin 7ced6be5c3 Merge 392863f7d6 into sapling-pr-archive-bolinfest 2026-05-01 10:35:20 -07:00
Michael Bolin 392863f7d6 ci: cross-compile Windows Bazel tests 2026-05-01 10:35:06 -07:00
Michael Bolin 751477c154 merge commit for archive created by Sapling 2026-05-01 10:32:53 -07:00
Michael Bolin 93b75f4263 config: add strict config parsing 2026-05-01 10:32:41 -07:00
Michael Bolin b72bae063f merge commit for archive created by Sapling 2026-05-01 10:05:53 -07:00
Michael Bolin c0adb174f9 config: add strict config parsing 2026-05-01 10:05:38 -07:00
pakrym-oai 9b8d585075 [codex] Add Codex environment config (#20630)
## Why

This adds a checked-in Codex environment configuration so the repo
exposes a ready-to-run Codex action from the app environment metadata.

## What changed

- Added `.codex/environments/environment.toml` with a generated `Run`
action.
- The action runs the `codex` binary from `codex-rs/Cargo.toml` with
`mcp_oauth_credentials_store=file`.

## Verification

- Not run; configuration-only change.
2026-05-01 10:01:45 -07:00
Michael Bolin 702c5127ea Merge d4468d68df into sapling-pr-archive-bolinfest 2026-05-01 09:56:32 -07:00
Michael Bolin d4468d68df ci: cross-compile Windows Bazel tests 2026-05-01 09:56:17 -07:00
Michael Bolin 9984cec7a5 merge commit for archive created by Sapling 2026-05-01 09:48:08 -07:00
Michael Bolin bc41fe5536 config: add strict config parsing 2026-05-01 09:47:57 -07:00
Eric Traut 6784db51c0 Add /ide context support to the TUI (#20294)
## Why

Users have asked for a `/ide` command in the TUI so Codex can use the
active IDE session for live context such as the current file, open tabs,
and selected ranges. We already support a similar feature in the Codex
desktop app, so bringing it to the TUI makes sense.

One subtle compatibility constraint is that the injected prompt wrapper
and transcript stripping should match the desktop app and IDE extension.
By using the same `## My request for Codex:` delimiter and hiding the
injected context from transcript rendering the same way, threads created
in the TUI render correctly in desktop and IDE surfaces, and threads
created there replay correctly in the TUI, even when IDE context was
included.

Addresses https://github.com/openai/codex/issues/13834.

## What changed
### Summary
This PR consists of four four pieces:
1. An IPC client that uses a socket (Mac/Linux) or named pipe (Windows)
to talk to the IDE Extension
2. Logic that establishes the IPC connection and requests IDE context
(open files, selection) on demand
3. Logic that injects this context into the user prompt (using the same
technique as the desktop app) and hides the added context when rendering
the prompt in the TUI transcript
4. A new slash command for enabling/disabling this mode and text within
the footer to indicate when it's enabled

### Details
- Added `/ide [on|off|status]` to the TUI, with bare `/ide` toggling IDE
context on or off.
- Added a Rust IDE context client that connects to the local Codex IDE
IPC route as a client and requests context from the IDE extension flow.
- Injected IDE context using the same prompt delimiter and
transcript-stripping convention as the desktop app and IDE extension so
shared threads render consistently across surfaces.
- Added an `IDE context` status-line indicator while the feature is
active and cleared it when enabling or fetching context fails.
- Added handling for multiple selection ranges, oversized selections,
interleaved IPC messages, and transient reconnect timing after quick
toggles.

## Verification

Did extensive manual testing in addition to running automated unit and
regression tests.

To test:

- Launch VS Code (or Cursor) with the IDE extension.
- Open one or more files in the IDE and select a range of text within
one of them.
- Start the TUI.
- Ask the agent which files you have open in your IDE, and it should say
that it does not know.
- Enable `/ide` mode; note that `IDE context` appears in the lower
right.
- Ask the agent what files you have open in your IDE and what text is
selected.
2026-05-01 09:39:48 -07:00
Ruslan Nigmatullin 41e171fcf2 app-server: move transport into dedicated crate (#20545)
## Why

`codex-app-server` currently owns both request-processing code and
transport implementation details. Splitting the transport layer into its
own crate makes that boundary explicit, reduces the amount of
transport-specific dependency surface carried by `codex-app-server`, and
gives future transport work a narrower place to evolve.

## What changed

- Added `codex-app-server-transport` and moved the existing transport
tree into it, including stdio, unix socket, websocket, remote-control
transport, and websocket auth.
- Moved shared transport-facing message types into the new crate so both
the transport implementation and `codex-app-server` use the same
definitions.
- Kept processor-facing connection state and outbound routing in
`codex-app-server`, with the routing tests moved next to that local
wrapper.
- Updated workspace metadata, Bazel crate metadata, and
`codex-app-server` dependencies for the new crate boundary.

## Validation

- `cargo metadata --locked --no-deps`
- `git diff --check`
- Attempted `cargo test -p codex-app-server-transport`, `cargo test -p
codex-app-server`, `just fix -p codex-app-server-transport`, and `just
fix -p codex-app-server`; all were blocked before compilation by the
existing `packageproxy` resolution failure for locked `rustls-webpki =
0.103.13`.
- Attempted Bazel build / lockfile validation; those were blocked by
external fetch failures against BuildBuddy / GitHub while resolving
`v8`.
2026-05-01 09:23:47 -07:00
Michael Bolin 6bb4add554 Merge 3cb7694c53 into sapling-pr-archive-bolinfest 2026-05-01 09:17:28 -07:00
Michael Bolin 3cb7694c53 config: add strict config parsing 2026-05-01 09:17:16 -07:00