Commit Graph
14358 Commits
Author SHA1 Message Date
Michael Bolin 25e6d45819 Merge cc5ed6c431 into sapling-pr-archive-bolinfest 2026-04-30 02:18:48 -07:00
Michael Bolin cc5ed6c431 tests: use permission profiles in small core fixtures 2026-04-30 02:18:39 -07:00
Michael Bolin 980a42c20d Merge add407490b into sapling-pr-archive-bolinfest 2026-04-30 02:16:39 -07:00
Michael Bolin add407490b exec-server: use permission profiles in file system handler tests 2026-04-30 02:16:30 -07:00
Michael Bolin ec0af4d569 Merge 1dd0b85923 into sapling-pr-archive-bolinfest 2026-04-30 02:13:39 -07:00
Michael Bolin 1dd0b85923 memories: configure consolidation permissions directly 2026-04-30 02:13:25 -07:00
Michael Bolin 8f7fae45d3 Merge a7333a97c4 into sapling-pr-archive-bolinfest 2026-04-30 02:09:30 -07:00
Michael Bolin a7333a97c4 analytics: distinguish custom managed permission profiles 2026-04-30 02:09:18 -07:00
Michael Bolin 328e378d6e Merge 0ef8c68417 into sapling-pr-archive-bolinfest 2026-04-30 02:07:13 -07:00
Michael Bolin 0ef8c68417 tests: use permission profiles in guardian config checks 2026-04-30 02:07:03 -07:00
Michael Bolin 34515aeaa9 Merge 53bc889bad into sapling-pr-archive-bolinfest 2026-04-30 02:05:54 -07:00
Michael Bolin 53bc889bad tests: use permission profiles in unix escalation checks 2026-04-30 02:05:28 -07:00
Michael Bolin e93ad189b2 tests: use permission profiles in patch safety checks 2026-04-30 02:05:28 -07:00
Michael Bolin 13d7ba47be tests: use permission profiles in tool sandbox tests 2026-04-30 02:05:28 -07:00
Michael Bolin 918fa6ff7b tests: use permission profile fixtures in config checks 2026-04-30 02:05:28 -07:00
Michael Bolin 193c91b9bc core: build permission instructions from profiles only 2026-04-30 02:05:28 -07:00
Michael Bolin b097a7a1cb utils: summarize permission profiles directly 2026-04-30 02:05:28 -07:00
Michael Bolin bf3b577632 Merge 000ec64a44 into sapling-pr-archive-bolinfest 2026-04-30 02:00:59 -07:00
Michael Bolin 000ec64a44 tests: use permission profiles in unix escalation checks 2026-04-30 02:00:50 -07:00
Michael Bolin 6170aefcca Merge 6ca4eaadae into sapling-pr-archive-bolinfest 2026-04-30 01:59:26 -07:00
Michael Bolin 6ca4eaadae tests: use permission profiles in patch safety checks 2026-04-30 01:59:09 -07:00
Michael Bolin 3764785b04 Merge f9d5ecc842 into sapling-pr-archive-bolinfest 2026-04-30 01:56:58 -07:00
Michael Bolin f9d5ecc842 tests: use permission profiles in tool sandbox tests 2026-04-30 01:56:34 -07:00
Michael Bolin 285e4710a0 Merge 921471ac22 into sapling-pr-archive-bolinfest 2026-04-30 01:51:57 -07:00
Michael Bolin 921471ac22 tests: use permission profiles in tool sandbox tests 2026-04-30 01:51:40 -07:00
Michael Bolin 96bc4fc01e tests: use permission profile fixtures in config checks 2026-04-30 01:49:07 -07:00
Michael Bolin 6975f2a667 core: build permission instructions from profiles only 2026-04-30 01:46:16 -07:00
Michael Bolin 34e8b31f1a utils: summarize permission profiles directly 2026-04-30 01:42:59 -07:00
jif-oai c37f7434ba Gate multi-agent v2 tools independently of collab (#20246)
## Why

`multi_agents_v2` is meant to be independently gated from the older
`collab` feature. The tool registry still treated the
collaboration-style agent tools as `collab`-only, so enabling
`multi_agents_v2` without `collab` omitted the v2 agent tools. Review
and guardian sub-sessions also need to keep agent spawning disabled even
when the outer session has `multi_agents_v2` enabled.

## What changed

- Include the collab-backed agent tools when either `multi_agents_v2` or
`collab` is enabled.
- Explicitly disable `multi_agents_v2` for review and guardian review
sub-sessions, matching the existing `spawn_csv` and `collab`
restrictions.
- Add a registry test that enables `multi_agents_v2`, disables `collab`,
and verifies the v2 agent tools are present while legacy `send_input`
and `resume_agent` remain hidden.

## Testing

- Added
`test_build_specs_multi_agent_v2_does_not_require_collab_feature`.
2026-04-30 10:23:31 +02:00
Eric Traut a73403a890 Make missing config clears no-ops (#20334)
## Why

Fixes #20145.

`config/value/write` treats a JSON `null` value as a request to clear
the config key. Clearing a key that is already absent should be
idempotent, but clearing a nested key such as `features.personality`
from an empty `config.toml` returned `configPathNotFound` because
`clear_path` treated the missing `features` parent table as an error.

That makes app-server reset flows brittle because clients have to read
first and avoid sending a clear request unless the parent path already
exists.

## What Changed

- Updated app-server config clearing so missing intermediate tables, or
non-table parents, are treated as an unchanged no-op.
- Removed the now-unreachable `MergeError::PathNotFound` path from
config write merging.
- Added a regression test covering `features.personality = null` against
an empty user config.

## Verification

- `cargo test -p codex-app-server clear_missing_nested_config_is_noop`
- `cargo test -p codex-app-server` was run; the config manager unit
suite passed, but one unrelated integration test failed because
`turn_start_emits_thread_scoped_warning_notification_for_trimmed_skills`
expected `7` trimmed skills and observed `8`.
- `just fix -p codex-app-server`
2026-04-30 10:13:33 +02:00
xl-openai 87d0cf1a62 feat: Add workspace plugin sharing APIs (#20278)
1. Adds v2 plugin/share/save, plugin/share/list, and plugin/share/delete
RPCs.
2. Implements save by archiving a local plugin root, enforcing a size
limit, uploading through the workspace upload flow, and supporting
updates via remotePluginId.
3. Lists created workspace plugins
4. Deletes a previously uploaded/shared plugin.
2026-04-29 23:49:20 -07:00
Michael Bolin 3e6c288fb7 merge commit for archive created by Sapling 2026-04-29 23:29:49 -07:00
Michael Bolin 619bc15dcc tui: stop referencing SandboxMode 2026-04-29 23:29:33 -07:00
Michael Bolin ae863e72a2 ci: increase Windows release workflow timeouts (#20343)
## Why

#20271 increased the `90`-minute timeout in `rust-release.yml`, but it
did not update the reusable Windows workflow in
`rust-release-windows.yml`. As a result, the Windows release compile
jobs were still capped at `60` minutes and the `windows-x64` primary
build could continue timing out.

We are keeping the existing `90`-minute timeout in `rust-release.yml`.
That increase was still directionally correct because the top-level
release build benefits from extra headroom; the mistake was assuming it
also covered the reusable Windows jobs.

## What Changed
- increase the reusable Windows release workflow timeouts in
`rust-release-windows.yml` from `60` minutes to `90` minutes
- update the comment in `rust-release.yml` so it no longer implies that
the top-level timeout covers the Windows reusable jobs
2026-04-29 23:27:04 -07:00
Michael Bolin 5807e3fd4d Merge 206eed7716 into sapling-pr-archive-bolinfest 2026-04-29 23:23:48 -07:00
Michael Bolin 206eed7716 ci: increase Windows release workflow timeouts 2026-04-29 23:23:27 -07:00
Michael Bolin ac35950bda merge commit for archive created by Sapling 2026-04-29 23:04:37 -07:00
Michael Bolin f289617567 tui: stop referencing SandboxMode 2026-04-29 23:04:22 -07:00
AbhinavandCodex 8f3c06cc97 Add persisted hook enablement state (#19840)
## Why

After `hooks/list` exposes the hook inventory, clients need a way to
persist user hook preferences, make those changes effective in
already-open sessions, and distinguish user-controllable hooks from
managed requirements without adding another bespoke app-server write
API.

## What

- Extends `hooks/list` entries with effective `enabled` state.
- Persists user-level hook state under `hooks.state.<hook-id>` so the
model can grow beyond a single boolean over time.
- Uses the existing `config/batchWrite` path for hook state updates
instead of introducing a dedicated hook write RPC.
- Refreshes live session hook engines after config writes so
already-open threads observe updated enablement without a restart.

## Stack

1. openai/codex#19705
2. openai/codex#19778
3. This PR - openai/codex#19840
4. openai/codex#19882

## Reviewer Notes

The generated schema files account for much of the raw diff. The core
behavior is in:

- `hooks/src/config_rules.rs`, which resolves per-hook user state from
the config layer stack.
- `hooks/src/engine/discovery.rs`, which projects effective enablement
into `hooks/list` from source-derived managedness.
- `config/src/hook_config.rs`, which defines the new `hooks.state`
representation.
- `core/src/session/mod.rs`, which rebuilds live hook state after user
config reloads.

---------

Co-authored-by: Codex <noreply@openai.com>
2026-04-30 04:46:32 +00:00
Michael Bolin ac4332c05b permissions: expose active profile metadata (#20095) 2026-04-29 20:54:59 -07:00
Matthew Zeng ebe602d005 [plugins] Allow MSFT curated plugins in tool_suggest (#20304)
## Summary
- [x] Move the allowlist out of core crate
- [x] Add Teams, SharePoint, Outlook Email, and Outlook Calendar to the
tool_suggest discoverable plugin allowlist
- [x] Add focused coverage for Microsoft curated plugin discovery

## Testing
- just fmt
- cargo test -p codex-core-plugins
- cargo test -p codex-core
list_tool_suggest_discoverable_plugins_returns_
2026-04-29 19:45:52 -07:00
pakrym-oai 4e677d62da app-server: remove dead api version handling from bespoke events (#20291)
Remove ApiVersion::V1
2026-04-30 01:55:44 +00:00
rhan-oai bb536d65bd [codex-analytics] prevent stale guardian events from satisfying reused reviews (#20080)
## Why

Reused Guardian review trunks can still have older child-turn events
queued when a later review starts. The review waiter currently accepts
the first terminal event it sees from the shared child session, so a
stale `TurnComplete` can be attributed to the new review. That produces
impossible analytics combinations such as non-null TTFT with sub-10 ms
completion latency and zero token deltas on `trunk_reused` reviews.

## What changed

- Preserve the child turn id returned by the Guardian review
`Op::UserTurn` submission.
- Restrict Guardian review waiting to events correlated with that
submitted child turn.
- Restrict timeout/abort draining to terminal events for the same child
turn.
- Add regression coverage for stale prior-turn completions, stale
prior-turn errors, and interrupt draining in
`codex-rs/core/src/guardian/review_session.rs`.

## Verification

- `cargo test -p codex-core guardian::review_session::tests::`
- `cargo clippy -p codex-core --tests -- -D warnings`
2026-04-29 18:26:39 -07:00
Alex Zamoshchin 8b07132e09 update codex_plugins_beta_setting (from workspace settings) (#20250)
update the name after rename internally

see https://github.com/openai/openai/pull/871006
2026-04-30 00:40:25 +00:00
Eric Traut 515aa9a4fb tui: return from side chat on Ctrl-D (#20282)
## Why

Fixes #20264.

Side conversations are an ephemeral layer on top of the main chat.
Pressing `Ctrl+D` from an empty side-chat composer should unwind back to
the parent thread, matching the existing side-return behavior, instead
of falling through to the global quit shortcut and exiting Codex.

## What changed

The side-return shortcut matcher now treats `Ctrl+D` the same way it
already treats `Esc` and `Ctrl+C`. Because app-level side-return
handling runs before the chat widget's global quit handling, this
returns from `/side` while preserving normal `Ctrl+D` quit behavior
outside side conversations.

The existing shortcut coverage was updated to include lowercase and
uppercase `Ctrl+D` key events.

## Verification

- `cargo test -p codex-tui
side_return_shortcuts_match_esc_ctrl_c_and_ctrl_d`
- `cargo test -p codex-tui` starts successfully and the new shortcut
test passes, but the broader suite later aborts in the unrelated
existing test
`app::tests::attach_live_thread_for_selection_rejects_unmaterialized_fallback_threads`
with a stack overflow.
2026-04-29 17:26:11 -07:00
pakrym-oai fedcefe9da Reduce the surface of collaboration modes (#20149)
Collaboration modes were slightly invasive both into ThreadManager
construction and ModelProvider
2026-04-29 17:22:41 -07:00
stefanstokic-oai c8abcbf925 Import external agent sessions in background (#20284)
Summary:
- Return from external agent import before session history import
finishes
- Run session import work in the background and emit the existing
completion notification when it is done
- Serialize session imports so duplicate requests do not create
duplicate imported threads

Verification:
- cargo test -p codex-app-server external_agent_config_
- cargo test -p codex-external-agent-sessions
- just fix -p codex-app-server
- just fix -p codex-external-agent-sessions
- git diff --check
2026-04-30 00:00:41 +00:00
alexsong-oai 7bcd4626c4 Consume ai-title from external sessions and add end marker (#20261)
## Summary
- Support Claude Code `ai-title` / `aiTitle` records when detecting and
importing external agent sessions.
- Preserve existing `custom-title` / `customTitle` precedence; only fall
back to `aiTitle` when no custom title is present.
- Add coverage for both detection and import title selection, including
the custom-title-over-ai-title case.

## Testing
- `cargo test -p codex-external-agent-sessions`
- `just fix -p codex-external-agent-sessions`
2026-04-30 00:00:13 +00:00
AbhinavandCodex 8774229a89 Add hooks/list app-server RPC (#19778)
## Why

We need a way to list the available hooks to expose via the TUI and App
so users can view and manage their hooks

## What

- Adds `hooks/list` for one or more `cwd` values that returns discovered
hook metadata

## Stack

1. openai/codex#19705
2. This PR - openai/codex#19778
3. openai/codex#19840
4. openai/codex#19882

## Review Notes

The generated schema files account for most of the raw diff, these files
have the core change:

- `hooks/src/engine/discovery.rs` builds the inventory entries during
hook discovery while leaving runtime handlers focused on execution.
- `app-server/src/codex_message_processor.rs` wires `hooks/list` into
the app-server flow for each requested `cwd`.
- `app-server-protocol/src/protocol/v2.rs` defines the new v2
request/response payloads exposed on the wire.

### Core Changes

`core/src/plugins/manager.rs` adds `plugins_for_layer_stack(...)` so
`skills/list` and `hooks/list`can resolve plugin state for each
requested `cwd`

---------

Co-authored-by: Codex <noreply@openai.com>
2026-04-29 23:39:57 +00:00
Michael Bolin fdf9e0c7ae Merge f1b52c5b96 into sapling-pr-archive-bolinfest 2026-04-29 16:32:35 -07:00