Commit Graph

12966 Commits

Author SHA1 Message Date
Michael Bolin
2ae5061e27 Merge 41bf5e9781 into sapling-pr-archive-bolinfest 2026-04-24 14:45:06 -07:00
Michael Bolin
41bf5e9781 ci: release codex-app-server as a standalone binary 2026-04-24 14:44:59 -07:00
Michael Bolin
e8622fea13 merge commit for archive created by Sapling 2026-04-24 14:31:56 -07:00
Michael Bolin
fbb10dc978 Merge 2e5744dd4a into sapling-pr-archive-bolinfest 2026-04-24 14:30:12 -07:00
Michael Bolin
2e5744dd4a ci: release codex-app-server as a standalone binary 2026-04-24 14:30:00 -07:00
Michael Bolin
db94b1657b ci: stop publishing GNU Linux release artifacts (#19445)
## Why
We already prefer shipping the MUSL Linux builds, and the in-repo
release consumers resolve Linux release assets through the MUSL targets.
Keeping the GNU release jobs around adds release time and extra assets
without serving the paths we actually publish and consume.

This is also easier to reason about as a standalone change: future work
can point back to this PR as the intentional decision to stop publishing
`x86_64-unknown-linux-gnu` and `aarch64-unknown-linux-gnu` release
artifacts.

## What changed
- Removed the `x86_64-unknown-linux-gnu` and `aarch64-unknown-linux-gnu`
entries from the `build` matrix in `.github/workflows/rust-release.yml`.
- Added a short comment in that matrix documenting that Linux release
artifacts intentionally ship MUSL-linked binaries.

## Verification
- Reviewed `.github/workflows/rust-release.yml` to confirm that the
release workflow now only builds Linux release artifacts for
`x86_64-unknown-linux-musl` and `aarch64-unknown-linux-musl`.
2026-04-24 21:29:45 +00:00
Michael Bolin
76c4e4c2b6 permissions: finish profile-backed app surfaces 2026-04-24 14:29:39 -07:00
Michael Bolin
d07b253419 permissions: remove core legacy policy round trips 2026-04-24 14:29:39 -07:00
Michael Bolin
bda7acc603 permissions: migrate approval and sandbox consumers to profiles 2026-04-24 14:29:39 -07:00
Michael Bolin
6dcb38d992 permissions: derive compatibility policies from profiles 2026-04-24 14:29:39 -07:00
Michael Bolin
c8f8161d94 permissions: make runtime config profile-backed 2026-04-24 14:29:39 -07:00
Michael Bolin
db42d8c26b Merge 8139972dbd into sapling-pr-archive-bolinfest 2026-04-24 14:24:20 -07:00
Michael Bolin
8139972dbd ci: drop GNU Linux release targets 2026-04-24 14:22:48 -07:00
Michael Bolin
bbc6c1beb8 permissions: remove legacy read-only access modes 2026-04-24 14:22:15 -07:00
Tom
0a9b559c0b Migrate fork and resume reads to thread store (#18900)
- Route cold thread/resume and thread/fork source loading through
ThreadStore reads instead of direct rollout path operations
- Keep lookups that explicitly specify a rollout-path using the local
thread store methods but return an invalid-request error for remote
ThreadStore configurations
- Add some additional unit tests for code path coverage
2026-04-24 13:51:37 -07:00
Michael Bolin
ed72f6a046 merge commit for archive created by Sapling 2026-04-24 13:45:22 -07:00
Michael Bolin
1df09b2068 permissions: finish profile-backed app surfaces 2026-04-24 13:44:49 -07:00
Michael Bolin
0e470c8bc9 permissions: remove core legacy policy round trips 2026-04-24 13:44:49 -07:00
Michael Bolin
7875cb8694 permissions: migrate approval and sandbox consumers to profiles 2026-04-24 13:44:48 -07:00
Michael Bolin
409bfc5a1a permissions: derive compatibility policies from profiles 2026-04-24 13:44:48 -07:00
Michael Bolin
46f2411925 permissions: make runtime config profile-backed 2026-04-24 13:43:17 -07:00
Michael Bolin
13e0ec1614 permissions: make legacy profile conversion cwd-free (#19414)
## Why

The profile conversion path still required a `cwd` even when it was only
translating a legacy `SandboxPolicy` into a `PermissionProfile`. That
made profile producers invent an ambient `cwd`, which is exactly the
anchoring we are trying to remove from permission-profile data. A legacy
workspace-write policy can be represented symbolically instead: `:cwd =
write` plus read-only `:project_roots` metadata subpaths.

This PR creates that cwd-free base so the rest of the stack can stop
threading cwd through profile construction. Callers that actually need a
concrete runtime filesystem policy for a specific cwd still have an
explicitly named cwd-bound conversion.

## What Changed

- `PermissionProfile::from_legacy_sandbox_policy` now takes only
`&SandboxPolicy`.
- `FileSystemSandboxPolicy::from_legacy_sandbox_policy` is now the
symbolic, cwd-free projection for profiles.
- The old concrete projection is retained as
`FileSystemSandboxPolicy::from_legacy_sandbox_policy_for_cwd` for
runtime/boundary code that must materialize legacy cwd behavior.
- Workspace-write profiles preserve `CurrentWorkingDirectory` and
`ProjectRoots` special entries instead of materializing cwd into
absolute paths.

## Verification

- `cargo check -p codex-protocol -p codex-core -p
codex-app-server-protocol -p codex-app-server -p codex-exec -p
codex-exec-server -p codex-tui -p codex-sandboxing -p
codex-linux-sandbox -p codex-analytics --tests`
- `just fix -p codex-protocol -p codex-core -p codex-app-server-protocol
-p codex-app-server -p codex-exec -p codex-exec-server -p codex-tui -p
codex-sandboxing -p codex-linux-sandbox -p codex-analytics`




---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed
with [ReviewStack](https://reviewstack.dev/openai/codex/pull/19414).
* #19395
* #19394
* #19393
* #19392
* #19391
* __->__ #19414
2026-04-24 13:42:05 -07:00
canvrno-oai
7262c0c450 Skip disabled rows in selection menu numbering and default focus (#19170)
Selection menus in the TUI currently let disabled rows interfere with
numbering and default focus. This makes mixed menus harder to read and
can land selection on rows that are not actionable. This change updates
the shared selection-menu behavior in list_selection_view so disabled
rows are not selected when these views open, and prevents them from
being numbered like selectable rows.

- Disabled rows no longer receive numeric labels
- Digit shortcuts map to enabled rows only
- Default selection moves to the first enabled row in mixed menus
- Updated affected snapshot
- Added snapshot coverage for a plugin detail error popup
- Added a focused unit test for shared selection-view behavior

---------

Co-authored-by: Codex <noreply@openai.com>
2026-04-24 13:21:43 -07:00
Michael Bolin
7a4cd5fffe merge commit for archive created by Sapling 2026-04-24 13:19:21 -07:00
Michael Bolin
02de7201a6 permissions: finish profile-backed app surfaces 2026-04-24 13:18:17 -07:00
Michael Bolin
d7a6f9713c permissions: remove core legacy policy round trips 2026-04-24 13:17:01 -07:00
Michael Bolin
4a21ac571f permissions: migrate approval and sandbox consumers to profiles 2026-04-24 13:17:00 -07:00
Michael Bolin
6832fed06d permissions: derive compatibility policies from profiles 2026-04-24 13:17:00 -07:00
Michael Bolin
47da6dbaa5 permissions: make runtime config profile-backed 2026-04-24 13:17:00 -07:00
willwang-openai
687c5d9081 Update unix socket transport to use WebSocket upgrade (#19244)
## Summary
- Switch Unix socket app-server connections to perform the standard
WebSocket HTTP Upgrade handshake
- Update the Unix socket test to exercise a real upgrade over the Unix
stream
- Refresh the app-server README to describe the new Unix socket behavior

## Testing
- `cargo test -p codex-app-server transport::unix_socket_tests`
- `just fmt`
- `git diff --check`
2026-04-24 13:06:51 -07:00
Ruslan Nigmatullin
a3cccbd8ed [codex] Omit fork turns from thread started notifications (#19093)
## Why

`thread/fork` responses intentionally include copied history so the
caller can render the fork immediately, but `thread/started` is a
lifecycle notification. The v2 `Thread` contract says notifications
should return `turns: []`, and the fork path was reusing the response
thread directly, causing copied turns to be emitted through
`thread/started` as well.

## What Changed

- Route app-server `thread/started` notification construction through a
helper that clears `thread.turns` before sending.
- Keep `thread/fork` responses unchanged so callers still receive copied
history.
- Add persistent and ephemeral fork coverage that asserts
`thread/started` emits an empty `turns` array while the response retains
fork history.

## Testing

- `just fmt`
- `cargo test -p codex-app-server`
2026-04-24 12:31:13 -07:00
Michael Bolin
357ca4c48f merge commit for archive created by Sapling 2026-04-24 12:09:08 -07:00
Michael Bolin
efc4b60f7b permissions: make legacy profile conversion cwd-free 2026-04-24 12:08:37 -07:00
Michael Bolin
9a005974dc permissions: finish profile-backed app surfaces 2026-04-24 12:08:37 -07:00
Michael Bolin
f8fb073868 permissions: remove core legacy policy round trips 2026-04-24 12:08:37 -07:00
Michael Bolin
8171f53aac permissions: migrate approval and sandbox consumers to profiles 2026-04-24 12:08:37 -07:00
Michael Bolin
e8e9902639 permissions: derive compatibility policies from profiles 2026-04-24 12:08:37 -07:00
Michael Bolin
90bf5686eb permissions: make runtime config profile-backed 2026-04-24 12:08:37 -07:00
Michael Bolin
cfa495ecab merge commit for archive created by Sapling 2026-04-24 11:55:47 -07:00
Michael Bolin
43bd653340 permissions: finish profile-backed app surfaces 2026-04-24 11:55:31 -07:00
Michael Bolin
f044efc48c permissions: remove core legacy policy round trips 2026-04-24 11:55:31 -07:00
Michael Bolin
640ca9fc0b permissions: migrate approval and sandbox consumers to profiles 2026-04-24 11:55:31 -07:00
Michael Bolin
1b98ec5516 permissions: derive compatibility policies from profiles 2026-04-24 11:55:31 -07:00
Michael Bolin
e9c553270a permissions: make runtime config profile-backed 2026-04-24 11:55:31 -07:00
Michael Bolin
095bb44f40 permissions: make legacy profile conversion cwd-free 2026-04-24 11:55:31 -07:00
Celia Chen
0db6811b7c Fix: use function apply_patch tool for Bedrock model (#19416)
## Why

`openai.gpt-5.4-cmb` is served through the Amazon Bedrock provider,
whose request validator currently accepts `function` and `mcp` tool
specs but rejects Responses `custom` tools. The CMB catalog entry reuses
the bundled `gpt-5.4` metadata, which marks `apply_patch_tool_type` as
`freeform`. That causes Codex to include an `apply_patch` tool with
`type: "custom"`, so even heavily disabled sessions can fail before the
model runs with:

```text
Invalid tools: unknown variant `custom`, expected `function` or `mcp`
```

This is provider-specific: the model should still expose `apply_patch`,
but for Bedrock it needs to use the JSON/function tool shape instead of
the freeform/custom shape.

## What Changed

- Override the `openai.gpt-5.4-cmb` static catalog entry to set
`apply_patch_tool_type` to `function` after inheriting the rest of the
`gpt-5.4` model metadata.
- Update the catalog test expectation so the CMB entry continues to
track `gpt-5.4` metadata except for this Bedrock-specific tool shape
override.

## Verification

- `cargo test -p codex-model-provider`
- `just fix -p codex-model-provider`
2026-04-24 18:45:09 +00:00
mcgrew-oai
dee5f5ea38 Harden package-manager install policy (#19163)
## Summary

This PR hardens package-manager usage across the repo to reduce
dependency supply-chain risk. It also removes the stale `codex-cli`
Docker path, which was already broken on `main`, instead of keeping a
bitrotted container workflow alive.

## What changed

- Updated pnpm package manager pins and workspace install settings.
- Removed stale `codex-cli` Docker assets instead of trying to keep a
broken local container path alive.
- Added uv settings and lockfiles for the Python SDK packages.
- Updated Python SDK setup docs to use `uv sync`.

## Why

This is primarily a security hardening change. It reduces
package-install and supply-chain risk by ensuring dependency installs go
through pinned package managers, committed lockfiles, release-age
settings, and reviewed build-script controls.

For `codex-cli`, the right follow-up was to remove the local Docker path
rather than keep patching it:

- `codex-cli/Dockerfile` installed `codex.tgz` with `npm install -g`,
which bypassed the repo lockfile and age-gated pnpm settings.
- The local `codex-cli/scripts/build_container.sh` helper was already
broken on `main`: it called `pnpm run build`, but
`codex-cli/package.json` does not define a `build` script.
- The container path itself had bitrotted enough that keeping it would
require extra packaging-specific behavior that was not otherwise needed
by the repo.

## Gaps addressed

- Global npm installs bypassed the repo lockfile in Docker and CLI
reinstall paths, including `codex-cli/Dockerfile` and
`codex-cli/bin/codex.js`.
- CI and Docker pnpm installs used `--frozen-lockfile`, but the repo was
missing stricter pnpm workspace settings for dependency build scripts.
- Python SDK projects had `pyproject.toml` metadata but no committed
`uv.lock` coverage or uv age/index settings in `sdk/python` and
`sdk/python-runtime`.
- The secure devcontainer install path used npm/global install behavior
without a local locked package-manager boundary.
- The local `codex-cli` Docker helper was already broken on `main`, so
this PR removes that stale Docker path instead of preserving a broken
surface.
- pnpm was already pinned, but not to the current repo-wide pnpm version
target.

## Verification

- `pnpm install --frozen-lockfile`
- `.devcontainer/codex-install`: `pnpm install --prod --frozen-lockfile`
- `.devcontainer/codex-install`: `./node_modules/.bin/codex --version`
- `sdk/python`: `uv lock --check`, `uv sync --locked --all-extras
--dry-run`, `uv build`
- `sdk/python-runtime`: `uv lock --check`, `uv sync --locked --dry-run`,
`uv build --wheel`
- `pnpm -r --filter ./sdk/typescript run build`
- `pnpm -r --filter ./sdk/typescript run lint`
- `pnpm -r --filter ./sdk/typescript run test`
- `node --check codex-cli/bin/codex.js`
- `docker build -f .devcontainer/Dockerfile.secure -t codex-secure-test
.`
- `cargo build -p codex-cli`
- repo-wide package-manager audit
2026-04-24 14:36:19 -04:00
Konstantine Kahadze
6bb2fa3fd4 Update bundled OpenAI Docs skill for GPT-5.5 (#19407)
## Summary
Updates the bundled OpenAI Docs system skill for GPT-5.5.

## Changes
- Updates the bundled latest-model fallback
- Replaces bundled upgrade guidance with GPT-5.5 migration guidance
- Replaces bundled prompting guidance with GPT-5.5 prompting guidance

## Test plan
- Ran `node scripts/resolve-latest-model-info.js`
- Verified bundled files match the OpenAI Docs skill fallback content
2026-04-24 18:26:47 +00:00
Michael Bolin
04354ac0c8 merge commit for archive created by Sapling 2026-04-24 11:08:53 -07:00
Michael Bolin
4145cae2bf permissions: finish profile-backed app surfaces 2026-04-24 11:08:18 -07:00