Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
17586d8
[codex] package Windows ARM64 on x64 (#28001)
tamird Jun 13, 2026
0fed449
[codex] Carry exec-server cwd as PathUri (#28032)
anp-oai Jun 13, 2026
51316ea
[codex] Dedupe plugin MCPs by app declaration name (#27607)
felixxia-oai Jun 14, 2026
73c5801
[codex] Pin bundled SQLite to fixed WAL-reset version (#27992)
gpeal Jun 14, 2026
740c4f2
build: run buildifier from just fmt (#28125)
anp-oai Jun 14, 2026
42dec90
bazel: add PowerShell to Wine test harness (#28120)
anp-oai Jun 14, 2026
5e9249e
path-uri: render native paths across platforms (#27819)
anp-oai Jun 14, 2026
efbd00f
[codex] exec-server honors remote environment cwd and shell (#28122)
anp-oai Jun 14, 2026
dfd03ea
feat(app-server): filter threads by parent (#26662)
btraut-openai Jun 14, 2026
c3a4796
Add selected-plugin precedence and attribution to the MCP catalog (#2…
jif-oai Jun 15, 2026
b3c423e
Discover stdio MCP servers from selected executor plugins (#27870)
jif-oai Jun 15, 2026
127224c
[codex] update multi-agent v2 prompts (#28283)
jif-oai Jun 15, 2026
cededa2
[codex] Preserve plugin apps in connector listings (#27602)
felixxia-oai Jun 15, 2026
e5253b9
[codex] Skip plugin MCP OAuth for matching app routes (#27461)
felixxia-oai Jun 15, 2026
c8c78b6
Activate selected executor plugin MCPs in app-server (#27893)
jif-oai Jun 15, 2026
b3f6f70
[codex] Cap feedback upload subtrees (#28332)
jif-oai Jun 15, 2026
a292faa
Represent dynamic tools with explicit namespaces internally (#27365)
sayan-oai Jun 15, 2026
6d9df68
skills: hide orchestrator skills with a local executor (#28333)
jif-oai Jun 15, 2026
1aa3e43
[codex] simplify shell snapshot ownership (#27756)
pakrym-oai Jun 15, 2026
8a6a039
Remove terminal resize reflow flag gates (#27794)
etraut-openai Jun 15, 2026
bbcfed8
chore: restore exec-server relay keepalives (#28286)
jif-oai Jun 15, 2026
42ad752
[codex] simplify memory read metrics (#28164)
pakrym-oai Jun 15, 2026
11faf9a
Expose explicit dynamic tool namespaces in thread start (#27371)
sayan-oai Jun 15, 2026
828d747
linearize history output normalization (#28309)
jif-oai Jun 15, 2026
e67bc68
avoid cloning sampling request input (#28306)
jif-oai Jun 15, 2026
baddb5e
serialize websocket requests directly (#28323)
jif-oai Jun 15, 2026
9576554
avoid cloning websocket request history (#28313)
jif-oai Jun 15, 2026
5e58b6d
[codex] remove stale PathExt import (#28344)
pakrym-oai Jun 15, 2026
bed60e3
[codex] Cover OTLP HTTP log and trace event export (#27059)
richardopenai Jun 15, 2026
495da45
reuse encoded Responses request bodies (#28327)
jif-oai Jun 15, 2026
bd4fe31
[codex] preserve explicit environment cwd (#27995)
pakrym-oai Jun 15, 2026
a18de1f
guardian: isolate review context from skills and memories (#28285)
jif-oai Jun 15, 2026
29224d9
TUI Plugin Sharing 2 - add remote plugin section plumbing (#26702)
canvrno-oai Jun 15, 2026
aae4c0b
bound prompt image cache retention (#28294)
jif-oai Jun 15, 2026
336f907
Support staging OAuth client ID overrides (#28257)
apanasenko-oai Jun 15, 2026
ee40ddd
core: let steer interrupt wait_agent (#28341)
jif-oai Jun 15, 2026
0afe559
skills: cache orchestrator resources per thread (#28336)
jif-oai Jun 15, 2026
c3415f7
Extract shared Windows sandbox session runner (#28357)
iceweasel-oai Jun 15, 2026
d5a8117
Use aws-lc-rs for rustls crypto provider (#27706)
malsamiri-oai Jun 15, 2026
71633f8
[codex] add path-types skill (#28347)
anp-oai Jun 15, 2026
1b81365
Add request user input auto-resolution timer (#28235)
shijie-oai Jun 15, 2026
41db093
[mcp] Increase default tool timeout to 300 seconds (#28234)
adaley-openai Jun 15, 2026
fc1fb68
[codex] Add external agent import result accounting (#28008)
charlesgong-openai Jun 15, 2026
c0b36d2
recover stale Windows sandbox credentials (#27944)
iceweasel-oai Jun 15, 2026
e7a9988
Add Windows unified exec yield floor (#27086)
iceweasel-oai Jun 15, 2026
fbbe770
Add hidden Windows sandbox wrapper entrypoint (#28358)
iceweasel-oai Jun 15, 2026
af99f6a
core: cache the tool search handler per session (#27258)
mchen-oai Jun 15, 2026
bef99f8
feat(app-server): expose rate-limit reset credits (#28143)
jayp-oai Jun 15, 2026
040dafa
feat(core): add metadata field to ResponseItem (#28355)
owenlin0 Jun 15, 2026
709f19e
[codex] Add created-by-me remote plugin marketplace (#28203)
ericning-o Jun 15, 2026
d7f298f
Respect blocking PostToolUse hooks in code mode (#28365)
abhinav-oai Jun 15, 2026
1fbaac1
[codex] Reuse Apps policy evaluation across MCP tool exposure (#27813)
mzeng-openai Jun 15, 2026
db8927a
Deflake realtime handoff steering test (#28300)
felixxia-oai Jun 15, 2026
4c1c9bf
[codex] Preserve remote plugin directory order (#28395)
jameswt-oai Jun 15, 2026
9728992
[codex] retain resolved environments across turns (#27955)
pakrym-oai Jun 15, 2026
1d8ff89
Add realtime speech append control (#27917)
guinness-oai Jun 15, 2026
e512e88
[codex-analytics] Analytics Capture to File in Debug Builds (#27093)
jameswt-oai Jun 15, 2026
428cd44
exec-server: add Noise relay transport (#26242)
viyatb-oai Jun 15, 2026
46f1793
Use PathUri in filesystem permission paths for exec-server (#28165)
anp-oai Jun 15, 2026
515f705
[codex] Fix missing response item metadata in tests (#28415)
adaley-openai Jun 16, 2026
8aac63f
[codex] Add second-based OTEL duration histograms (#27058)
richardopenai Jun 16, 2026
7e0dce9
[codex] Centralize plugin auth capability filtering (#27902)
felixxia-oai Jun 16, 2026
d5b4b98
Add a toggle for realtime startup context (#28405)
guinness-oai Jun 16, 2026
d007b08
Preserve hook trust bypass in codex exec threads (#26434)
abhinav-oai Jun 16, 2026
1fe89de
Run core integration tests against a Wine-backed Windows executor (#2…
anp-oai Jun 16, 2026
6e50b22
exec-server: default remote transport to Noise (#26245)
viyatb-oai Jun 16, 2026
02dce8e
[codex] Load API curated marketplace by auth (#28383)
felixxia-oai Jun 16, 2026
d959664
[codex] Make plugin details capability aware (#27958)
felixxia-oai Jun 16, 2026
ecfe174
Use ApiPathString in app-server filesystem permission paths (#28367)
anp-oai Jun 16, 2026
022f122
[codex] Bind shell snapshots to retained thread environments (#28421)
pakrym-oai Jun 16, 2026
08901fc
[codex] Add interruptible sleep tool (#28429)
pakrym-oai Jun 16, 2026
e752f7b
[codex] Use expect in integration tests (#28441)
pakrym-oai Jun 16, 2026
1e01588
[codex] Use local environment for user shell commands (#28163)
pakrym-oai Jun 16, 2026
3fb8166
## New Features
sayan-oai Jun 18, 2026
2ede3ac
Merge upstream rust-v0.141.0
dkropachev Jul 4, 2026
a07bfd2
codex: fix macOS SDK fetch for PR #103
dkropachev Jul 4, 2026
c38126f
codex: fix login auth env test isolation
dkropachev Jul 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 18 additions & 0 deletions .codex/skills/path-types/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
name: path-types
description: Choose Rust types for operating system paths across the Codex repository. Use when defining new path-bearing types or explicitly migrating existing ones.
---

# Path Types

Apply this guidance when defining new types. Change existing code only when explicitly requested,
and keep edits minimal and proportional. Treat these rules as the target state of an ongoing
migration; if compliance is difficult, ask the user how to proceed.

- In app-server protocol types, use `ApiPathString` for backwards compatibility during the URI
migration. At the protocol boundary, convert it to `PathUri` and use `PathUri` internally. For
host-local logic, such as some config values, use `AbsolutePathBuf` or `PathBuf` instead.
- In exec-server protocol types, use `PathUri`. Internally, use `PathUri` or `AbsolutePathBuf` as
appropriate.
- In dependencies shared by both servers, use `PathUri` or separate APIs that decouple their use
cases.
9 changes: 6 additions & 3 deletions .codex/skills/remote-tests/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ name: remote-tests
description: How to run tests using remote executor.
---

Some codex integration tests support a running against a remote executor.
This means that when CODEX_TEST_REMOTE_ENV environment variable is set they will attempt to start an executor process in a docker container CODEX_TEST_REMOTE_ENV points to and use it in tests.
Some Codex integration tests select `local`, `docker`, or `wine-exec` through
`CODEX_TEST_ENVIRONMENT`. The legacy `CODEX_TEST_REMOTE_ENV=<container>` still
selects Docker; otherwise execution is local.

Docker container is built and initialized via ./scripts/test-remote-env.sh

Currently running remote tests is only supported on Linux, so you need to use a devbox to run them
On x86-64 Linux, run Wine exec with
`bazel test //codex-rs/core:core-all-wine-exec-test --test_output=errors`.
Temporary blockers belong beside the test in `skip_if_wine_exec!` calls.

You can list devboxes via `applied_devbox ls`, pick the one with `codex` in the name.
Connect to devbox via `ssh <devbox_name>`.
Expand Down
4 changes: 4 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
case your host is x86 (or vice-versa). */
"runArgs": ["--platform=linux/arm64"],

"features": {
"ghcr.io/facebook/devcontainers/features/dotslash:latest": {}
},

"containerEnv": {
"RUST_BACKTRACE": "1",
"CARGO_TARGET_DIR": "${containerWorkspaceFolder}/codex-rs/target-arm64"
Expand Down
3 changes: 3 additions & 0 deletions .devcontainer/devcontainer.secure.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
"--cap-add=NET_RAW"
],
"init": true,
"features": {
"ghcr.io/facebook/devcontainers/features/dotslash:latest": {}
},
"updateRemoteUserUID": true,
"remoteUser": "vscode",
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=delegated",
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ jobs:
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
version: "0.11.3"
- name: Install DotSlash
uses: facebook/install-dotslash@1e4e7b3e07eaca387acb98f1d4720e0bee8dbb6a # v2
- name: Check formatting (run `just fmt` to fix)
run: just fmt-check

Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/rust-ci-full-nextest-platform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,9 @@ jobs:
set -euo pipefail
export CODEX_TEST_REMOTE_ENV_CONTAINER_NAME="codex-remote-test-env-${{ github.run_id }}-${{ matrix.shard }}"
source "${GITHUB_WORKSPACE}/scripts/test-remote-env.sh"
echo "CODEX_TEST_ENVIRONMENT=${CODEX_TEST_ENVIRONMENT}" >> "$GITHUB_ENV"
echo "CODEX_TEST_REMOTE_ENV=${CODEX_TEST_REMOTE_ENV}" >> "$GITHUB_ENV"
echo "CODEX_TEST_REMOTE_ENV_CONTAINER_NAME=${CODEX_TEST_REMOTE_ENV_CONTAINER_NAME}" >> "$GITHUB_ENV"
echo "CODEX_TEST_REMOTE_EXEC_SERVER_URL=${CODEX_TEST_REMOTE_EXEC_SERVER_URL}" >> "$GITHUB_ENV"

- name: Download nextest archive
Expand Down Expand Up @@ -437,9 +439,9 @@ jobs:
run: |
set +e
if [[ "${STEPS_TEST_OUTCOME}" != "success" ]]; then
docker logs "${CODEX_TEST_REMOTE_ENV}" || true
docker logs "${CODEX_TEST_REMOTE_ENV_CONTAINER_NAME}" || true
fi
docker rm -f "${CODEX_TEST_REMOTE_ENV}" >/dev/null 2>&1 || true
docker rm -f "${CODEX_TEST_REMOTE_ENV_CONTAINER_NAME}" >/dev/null 2>&1 || true
env:
STEPS_TEST_OUTCOME: ${{ steps.test.outcome }}

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/rust-release-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -210,11 +210,11 @@ jobs:
runs_on:
group: ${{ github.event.repository.name }}-runners
labels: ${{ github.event.repository.name }}-windows-x64
- runner: windows-arm64
- runner: windows-x64
target: aarch64-pc-windows-msvc
runs_on:
group: ${{ github.event.repository.name }}-runners
labels: ${{ github.event.repository.name }}-windows-arm64
labels: ${{ github.event.repository.name }}-windows-x64

steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ These guidelines apply to app-server protocol work in `codex-rs`, especially:
`*Params` for request payloads, `*Response` for responses, and `*Notification` for notifications.
- Expose RPC methods as `<resource>/<method>` and keep `<resource>` singular (for example, `thread/read`, `app/list`).
- Always expose fields as camelCase on the wire with `#[serde(rename_all = "camelCase")]` unless a tagged union or explicit compatibility requirement needs a targeted rename.
- Always expose string enum values as camelCase on the wire with matching serde and TS `rename_all = "camelCase"` annotations unless an explicit compatibility requirement needs targeted renames.
- Exception: config RPC payloads are expected to use snake_case to mirror config.toml keys (see the config read/write/list APIs in `app-server-protocol/src/protocol/v2.rs`).
- Always set `#[ts(export_to = "v2/")]` on v2 request/response/notification types so generated TypeScript lands in the correct namespace.
- Never use `#[serde(skip_serializing_if = "Option::is_none")]` for v2 API payload fields.
Expand Down
27 changes: 18 additions & 9 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module(name = "codex")
bazel_dep(name = "bazel_skylib", version = "1.9.0")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "llvm", version = "0.7.1")

# The upstream LLVM archive contains a few unix-only symlink entries and is
# missing a couple of MinGW compatibility archives that windows-gnullvm needs
# during extraction and linking, so patch it until upstream grows native support.
Expand All @@ -15,6 +16,7 @@ single_version_override(
"//patches:llvm_windows_symlink_extract.patch",
],
)

# Abseil picks a MinGW pthread TLS path that does not match our hermetic
# windows-gnullvm toolchain; force it onto the portable C++11 thread-local path.
single_version_override(
Expand All @@ -29,11 +31,11 @@ register_toolchains("@llvm//toolchain:all")

osx = use_extension("@llvm//extensions:osx.bzl", "osx")
osx.from_archive(
sha256 = "1bde70c0b1c2ab89ff454acbebf6741390d7b7eb149ca2a3ca24cc9203a408b7",
strip_prefix = "Payload/Library/Developer/CommandLineTools/SDKs/MacOSX26.4.sdk",
sha256 = "5f044578cd78a3a9b9c965a42d56bad609ee5d252e1d4e6aa7c42fc3f35fee7b",
strip_prefix = "Payload/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdk",
type = "pkg",
urls = [
"https://swcdn.apple.com/content/downloads/32/53/047-96692-A_OAHIHT53YB/ybtshxmrcju8m2qvw3w5elr4rajtg1x3y3/CLTools_macOSNMOS_SDK.pkg",
"https://swcdn.apple.com/content/downloads/09/08/047-91568-A_Y1CFZWQCD4/4xekpyz43i26dbp4enxfro8eb1q7wiujh5/CLTools_macOSNMOS_SDK.pkg",
],
)
osx.frameworks(names = [
Expand Down Expand Up @@ -86,8 +88,10 @@ single_version_override(
"//patches:rules_cc_rusty_v8_custom_libcxx.patch",
],
)

bazel_dep(name = "rules_platform", version = "0.1.0")
bazel_dep(name = "rules_rs", version = "0.0.58")

# `rules_rs` still does not model `windows-gnullvm` as a distinct Windows exec
# platform, so patch it until upstream grows that support for both x86_64 and
# aarch64.
Expand All @@ -103,6 +107,7 @@ single_version_override(
)

rules_rust = use_extension("@rules_rs//rs/experimental:rules_rust.bzl", "rules_rust")

# Build-script probe binaries inherit CFLAGS/CXXFLAGS from Bazel's C++
# toolchain. On `windows-gnullvm`, llvm-mingw does not ship
# `libssp_nonshared`, so strip the forwarded stack-protector flags there.
Expand All @@ -127,22 +132,23 @@ nightly_rust = use_extension(
"rust",
)
nightly_rust.toolchain(
versions = ["nightly/2025-09-18"],
dev_components = True,
edition = "2024",
versions = ["nightly/2025-09-18"],
)

# Keep Windows exec tools on MSVC so Bazel helper binaries link correctly, but
# lint crate targets as `windows-gnullvm` to preserve the repo's actual cfgs.
nightly_rust.repository_set(
name = "rust_windows_x86_64",
dev_components = True,
edition = "2024",
exec_triple = "x86_64-pc-windows-msvc",
exec_compatible_with = [
"@platforms//cpu:x86_64",
"@platforms//os:windows",
"@rules_rs//rs/experimental/platforms/constraints:windows_msvc",
],
exec_triple = "x86_64-pc-windows-msvc",
target_compatible_with = [
"@platforms//cpu:x86_64",
"@platforms//os:windows",
Expand Down Expand Up @@ -170,6 +176,7 @@ toolchains.toolchain(
use_repo(toolchains, "default_rust_toolchains")

register_toolchains("@default_rust_toolchains//:all")

register_toolchains("@rust_toolchains//:all")

crate = use_extension("@rules_rs//rs:extensions.bzl", "crate")
Expand Down Expand Up @@ -241,14 +248,14 @@ crate.annotation(
"//patches:aws-lc-sys_windows_msvc_memcmp_probe.patch",
],
)

crate.annotation(
# The build script only validates embedded source/version metadata.
crate = "rustc_apfloat",
gen_build_script = "off",
)

inject_repo(crate, "zstd")

use_repo(crate, "argument_comment_lint_crates")

bazel_dep(name = "bzip2", version = "1.0.8.bcr.3")
Expand Down Expand Up @@ -297,14 +304,14 @@ bazel_dep(name = "openssl", version = "3.5.4.bcr.0")
inject_repo(crate, "xz")

crate.annotation(
build_script_data = [
"@openssl//:gen_dir",
],
# Build scripts compile in Bazel's exec configuration, so target-specific
# optional build deps are otherwise dropped for the musl release platforms.
build_script_deps = [
"@crates//:openssl-src-300.5.5+3.5.5",
],
build_script_data = [
"@openssl//:gen_dir",
],
build_script_env = {
"OPENSSL_DIR": "$(execpath @openssl//:gen_dir)",
"OPENSSL_NO_VENDOR": "1",
Expand All @@ -323,7 +330,9 @@ crate.annotation(
)

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_file = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")

new_local_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:local.bzl", "new_local_repository")

include("//bazel/modules:wine.MODULE.bazel")
Expand Down
Loading
Loading