Commit Graph

15816 Commits

Author SHA1 Message Date
Michael Bolin
8ce09d64e1 merge commit for archive created by Sapling 2026-05-15 15:57:49 -07:00
Michael Bolin
dce80187ae core: set permission profiles from snapshots 2026-05-15 15:57:25 -07:00
Michael Bolin
eb7790a7b7 merge commit for archive created by Sapling 2026-05-15 15:50:50 -07:00
Michael Bolin
56238d2fa2 windows-sandbox: send permission profiles to elevated runner 2026-05-15 15:50:23 -07:00
Michael Bolin
86e11d7697 windows-sandbox: add resolved permissions helper 2026-05-15 15:50:23 -07:00
Michael Bolin
f1e0e5cea8 Merge 7fbefbb0e1 into sapling-pr-archive-bolinfest 2026-05-15 15:43:06 -07:00
Michael Bolin
7fbefbb0e1 windows-sandbox: send permission profiles to elevated runner 2026-05-15 15:42:49 -07:00
Michael Bolin
c563ba6b18 Merge e0c614b2da into sapling-pr-archive-bolinfest 2026-05-15 15:38:51 -07:00
Michael Bolin
e0c614b2da windows-sandbox: add resolved permissions helper 2026-05-15 15:38:42 -07:00
Michael Bolin
6b372f029d merge commit for archive created by Sapling 2026-05-15 15:29:44 -07:00
Michael Bolin
b791569492 tui: pass active permission profiles through app commands 2026-05-15 15:29:24 -07:00
Michael Bolin
9adb4a68be Merge b17302eda8 into sapling-pr-archive-bolinfest 2026-05-15 14:11:10 -07:00
Michael Bolin
b17302eda8 windows-sandbox: add resolved permissions helper 2026-05-15 14:10:59 -07:00
Michael Bolin
4023b31484 merge commit for archive created by Sapling 2026-05-15 13:52:39 -07:00
Michael Bolin
237245ad11 tui: pass active permission profiles through app commands 2026-05-15 13:52:21 -07:00
Michael Bolin
3e358a7ae1 Merge c0ed87b84a into sapling-pr-archive-bolinfest 2026-05-15 13:42:05 -07:00
Michael Bolin
c0ed87b84a windows-sandbox: add resolved permissions helper 2026-05-15 13:41:52 -07:00
Michael Bolin
bbfdde44df merge commit for archive created by Sapling 2026-05-15 13:31:47 -07:00
Michael Bolin
3bb7ddd4b5 tui: pass active permission profiles through app commands 2026-05-15 13:31:36 -07:00
Michael Bolin
001b6cd74e merge commit for archive created by Sapling 2026-05-15 13:14:30 -07:00
Michael Bolin
26894330f4 tui: pass active permission profiles through app commands 2026-05-15 13:14:12 -07:00
Michael Bolin
8df2d96860 core: construct test permission profiles directly (#22795)
## Why

The core migration is trying to make `PermissionProfile` the shape tests
and runtime code reason about, leaving `SandboxPolicy` only where legacy
behavior is explicitly under test. The local
`permission_profile_for_sandbox_policy()` test helpers kept new
permission-profile tests mentally tied to the old sandbox model even
when the equivalent profile is straightforward.

## What Changed

- Removed the `permission_profile_for_sandbox_policy()` helper from the
network proxy spec tests and session tests.
- Replaced legacy conversions for read-only, workspace-write, and
full-access cases with `PermissionProfile::read_only()`,
`PermissionProfile::workspace_write()`, and
`PermissionProfile::Disabled`.
- Constructed the external-sandbox session test's
`PermissionProfile::External` directly, while preserving the legacy
`SandboxPolicy` only where the test still exercises legacy config update
behavior.

## How To Review

This PR is intentionally test-only. Review the two touched files and
check that each replacement preserves the old legacy mapping:

- `SandboxPolicy::new_read_only_policy()` ->
`PermissionProfile::read_only()`
- `SandboxPolicy::new_workspace_write_policy()` ->
`PermissionProfile::workspace_write()`
- `SandboxPolicy::DangerFullAccess` -> `PermissionProfile::Disabled`
- `SandboxPolicy::ExternalSandbox { network_access: Restricted }` ->
`PermissionProfile::External { network: Restricted }`

## Verification

- `cargo test -p codex-core
requirements_allowed_domains_are_a_baseline_for_user_allowlist`
- `cargo test -p codex-core
start_managed_network_proxy_applies_execpolicy_network_rules`
- `cargo test -p codex-core
session_configured_reports_permission_profile_for_external_sandbox`
- `cargo test -p codex-core
managed_network_proxy_decider_survives_full_access_start`
- `just fix -p codex-core`








---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/22795).
* #22891
* __->__ #22795
2026-05-15 13:09:25 -07:00
Michael Bolin
e3a572e209 Merge aa5fa65f85 into sapling-pr-archive-bolinfest 2026-05-15 13:08:52 -07:00
Michael Bolin
aa5fa65f85 tui: pass active permission profiles through app commands 2026-05-15 13:08:38 -07:00
Michael Bolin
62573cc4ae Merge fcaccf38b7 into sapling-pr-archive-bolinfest 2026-05-15 12:46:05 -07:00
Michael Bolin
fcaccf38b7 core: construct test permission profiles directly 2026-05-15 12:45:55 -07:00
Michael Bolin
83bbb4f326 app-server: stop returning thread permission profiles (#22792)
## Why

The app-server thread lifecycle API should no longer expose the full
`PermissionProfile` value. After the permissions-profile migration,
clients should round-trip only the active profile identity through
`activePermissionProfile` and `permissions` when that identity is known.

The full profile is server-side config. Treating a response-derived
legacy sandbox projection as a new local profile can lose named-profile
restrictions and accidentally widen permissions on the next turn. The
legacy `sandbox` response field remains only as the
compatibility/display fallback.

## What Changed

- Removed `permissionProfile` from `ThreadStartResponse`,
`ThreadResumeResponse`, and `ThreadForkResponse`.
- Stopped populating that field in app-server thread start/resume/fork
responses.
- Updated embedded exec/TUI response mapping to derive display
permission state from local config or the legacy sandbox fallback
instead of a response profile value.
- Added a TUI turn override shape that distinguishes preserving server
permissions, selecting an active profile id, and sending a legacy
sandbox for an explicit local override.
- Preserved remote app-server permissions across turns by sending
`permissions` only when an `activePermissionProfile` id is known, and
otherwise sending no sandbox override unless the user selected a local
override.
- Kept embedded `thread/resume` hydration server-authored when
`activePermissionProfile` is absent, which matches the live-thread
attach path where the server ignores requested overrides.
- Updated the app-server README to remove the obsolete lifecycle
response `permissionProfile` reference. The remaining
`permissionProfile` README references are request-side permission
overrides.
- Regenerated app-server JSON schema and TypeScript fixtures.
- Kept the generated typed response enum exempt from
`large_enum_variant`, matching the existing payload enum exemption after
the lifecycle response variants shrank.

## How To Review

Start with `codex-rs/app-server-protocol/src/protocol/v2/thread.rs` to
confirm the response shape, then check the response construction in
`codex-rs/app-server/src/request_processors`. The generated schema and
TypeScript fixture changes are mechanical follow-through from the
protocol removal.

The TUI behavior is the delicate part: review
`codex-rs/tui/src/app_server_session.rs` for response hydration and
turn-start override projection, then
`codex-rs/tui/src/app/thread_routing.rs` for the decision about whether
the next turn should preserve the server snapshot, send an active
profile id, or send a legacy sandbox for an explicit local override.

## Verification

- `just write-app-server-schema`
- `cargo test -p codex-app-server-protocol
thread_lifecycle_responses_default_missing_optional_fields`
- `cargo test -p codex-exec
session_configured_from_thread_response_uses_permission_profile_from_config`
- `cargo test -p codex-tui --lib thread_response`
- `cargo test -p codex-tui turn_permissions_`
- `cargo test -p codex-tui
resume_response_restores_turns_from_thread_items`
- `cargo test -p codex-analytics
track_response_only_enqueues_analytics_relevant_responses`
- `just fix -p codex-analytics`
- `just fix -p codex-app-server-protocol`
- `just fix -p codex-tui`
- `just argument-comment-lint`

---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/22792).
* #22795
* __->__ #22792
2026-05-15 12:45:48 -07:00
viyatb-oai
6afe00efda Workflow updates (#22582) 2026-05-15 12:41:18 -07:00
Michael Bolin
6a71f62792 merge commit for archive created by Sapling 2026-05-15 12:31:05 -07:00
Michael Bolin
d2c53fb776 core: construct test permission profiles directly 2026-05-15 12:24:03 -07:00
Michael Bolin
6a4ab157f2 app-server: stop returning thread permission profiles 2026-05-15 12:24:03 -07:00
Michael Bolin
6828335e93 merge commit for archive created by Sapling 2026-05-15 12:14:53 -07:00
Michael Bolin
8a514916f0 core: construct test permission profiles directly 2026-05-15 12:14:40 -07:00
Michael Bolin
b7d403dfc3 app-server: stop returning thread permission profiles 2026-05-15 12:14:40 -07:00
Boyang Niu
c15613f2b6 Forward apps MCP product SKU from Codex config (#22872)
This adds `apps_mcp_product_sku` as a toplevel config.toml key. We pass
the given value as a header when listing MCPs for the client, allowing
connectors to be filtered per product entry point.

---------

Co-authored-by: Codex <noreply@openai.com>
2026-05-15 11:52:14 -07:00
Michael Bolin
bc31c226a1 merge commit for archive created by Sapling 2026-05-15 11:28:15 -07:00
Michael Bolin
18c34e0760 core: construct test permission profiles directly 2026-05-15 11:27:50 -07:00
Michael Bolin
6db97e90f3 app-server: stop returning thread permission profiles 2026-05-15 11:27:50 -07:00
Michael Bolin
9f00e31e7c Merge 6186e5e672 into sapling-pr-archive-bolinfest 2026-05-15 10:59:02 -07:00
Michael Bolin
6186e5e672 core: construct test permission profiles directly 2026-05-15 10:58:54 -07:00
Michael Bolin
bcf35da3ed app-server: stop returning thread permission profiles 2026-05-15 10:58:54 -07:00
Michael Bolin
4c80435eba telemetry: tag sandboxes from permission profiles (#22791)
## Why

Sandbox telemetry tags should be derived from the active permission
profile, not from a legacy `SandboxPolicy`, so the tagging code stays
aligned with the permissions migration and does not preserve a
policy-shaped production helper only for tests.

## What Changed

- Removed the production `sandbox_tag(&SandboxPolicy, ...)` helper.
- Updated sandbox tag tests to construct the relevant
`PermissionProfile` values directly.
- Kept the platform-specific sandbox tag behavior under the existing
`permission_profile_sandbox_tag` path.

## How To Review

The production change is in `codex-rs/core/src/sandbox_tags.rs`. Most of
the diff is test cleanup that replaces legacy policy setup with
permission profiles, so review the expected tag assertions rather than
the old helper mechanics.

## Verification

- `cargo test -p codex-core sandbox_tag`









---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/22791).
* #22795
* #22792
* __->__ #22791
2026-05-15 10:58:50 -07:00
Michael Bolin
680172980e Merge 88bd2b750e into sapling-pr-archive-bolinfest 2026-05-15 10:11:31 -07:00
Michael Bolin
88bd2b750e core: construct test permission profiles directly 2026-05-15 10:11:22 -07:00
Michael Bolin
c4d214af70 app-server: stop returning thread permission profiles 2026-05-15 10:11:22 -07:00
Michael Bolin
89cc5319f0 telemetry: tag sandboxes from permission profiles 2026-05-15 10:11:22 -07:00
Michael Bolin
aeca1cba6f context: remove legacy permissions instructions helper (#22790)
## Why

The permissions instruction builder should consume the new permissions
model directly. Keeping a `SandboxPolicy` conversion helper in this path
encourages new code to route through legacy sandbox policy values even
when the caller already has a `PermissionProfile`.

## What Changed

- Removed `PermissionsInstructions::from_policy`.
- Removed the test that exercised that legacy helper.
- Left the existing profile-based instruction coverage in place.

## How To Review

Review `codex-rs/core/src/context/permissions_instructions.rs` first.
This PR is intentionally narrow: the production behavior should be
unchanged for profile callers, and the deleted surface was only a
convenience adapter from `SandboxPolicy`.

## Verification

- `cargo test -p codex-core builds_permissions_from_profile`








---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/22790).
* #22795
* #22792
* #22791
* __->__ #22790
2026-05-15 10:11:16 -07:00
Chris Bookholt
9facdccb37 Ignore configured hooks in git helpers (#22843)
## What
- Internal Git helper commands now ignore configured hook directories
during repository bookkeeping.

## Why
- These helper flows should stay consistent even when a repository has
hook-directory configuration of its own.

## How
- Pass a command-local `core.hooksPath` override in the shared helper
path and the Git-info helper path.
- Add regressions for the baseline index rewrite flow and the metadata
status flow.

## Validation
- `cargo fmt --manifest-path
/Users/bookholt/code/codex/codex-rs/Cargo.toml --all --check`
- `cargo test --manifest-path
/Users/bookholt/code/codex/codex-rs/Cargo.toml -p codex-git-utils`
- `cargo test --manifest-path
/Users/bookholt/code/codex/codex-rs/Cargo.toml -p codex-core
test_get_has_changes_`
2026-05-15 10:07:54 -07:00
Eric Traut
7fa0007ea8 tui: split remaining composer draft and footer state (#22656)
## Why

[#22581](https://github.com/openai/codex/pull/22581) started separating
the chat composer’s responsibilities, but `ChatComposer` still owned the
remaining editable draft state alongside footer/status presentation
state. This follow-up makes those ownership lines explicit so future
composer changes have a smaller blast radius and `BottomPane` does not
need to keep exposing scattered draft getters.

This is just a refactor. No functional or behavioral changes are
intended.

## What changed

- Move the remaining editable composer state into
`bottom_pane/chat_composer/draft_state.rs`.
- Move footer and status-row presentation state into
`bottom_pane/chat_composer/footer_state.rs`.
- Add an internal `ComposerDraftSnapshot` for restore flows, replacing
several ad hoc `BottomPane` pass-through reads.
- Rewire the related history-search and thread-input restore paths to
use the extracted state.

## Verification

- `RUST_MIN_STACK=8388608 cargo test -p codex-tui`
- `cargo insta pending-snapshots`
2026-05-15 09:12:52 -07:00
Michael Bolin
baf96395ad Merge 15ee8f8ad5 into sapling-pr-archive-bolinfest 2026-05-15 08:59:47 -07:00