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
f89d3ab
[codex] package Windows ARM64 on x64 (#28001)
tamird Jun 13, 2026
cfc1d96
[codex] Carry exec-server cwd as PathUri (#28032)
anp-oai Jun 13, 2026
5e5f745
[codex] Dedupe plugin MCPs by app declaration name (#27607)
felixxia-oai Jun 14, 2026
c08bff6
[codex] Pin bundled SQLite to fixed WAL-reset version (#27992)
gpeal Jun 14, 2026
35dce98
build: run buildifier from just fmt (#28125)
anp-oai Jun 14, 2026
83c8f14
bazel: add PowerShell to Wine test harness (#28120)
anp-oai Jun 14, 2026
fe90e46
path-uri: render native paths across platforms (#27819)
anp-oai Jun 14, 2026
0cead95
[codex] exec-server honors remote environment cwd and shell (#28122)
anp-oai Jun 14, 2026
54ea2de
feat(app-server): filter threads by parent (#26662)
btraut-openai Jun 14, 2026
f6e43f4
Add selected-plugin precedence and attribution to the MCP catalog (#2…
jif-oai Jun 15, 2026
1579b1a
Discover stdio MCP servers from selected executor plugins (#27870)
jif-oai Jun 15, 2026
1609916
[codex] update multi-agent v2 prompts (#28283)
jif-oai Jun 15, 2026
fec500c
[codex] Preserve plugin apps in connector listings (#27602)
felixxia-oai Jun 15, 2026
1d06a72
[codex] Skip plugin MCP OAuth for matching app routes (#27461)
felixxia-oai Jun 15, 2026
e22f176
Activate selected executor plugin MCPs in app-server (#27893)
jif-oai Jun 15, 2026
b5ab438
[codex] Cap feedback upload subtrees (#28332)
jif-oai Jun 15, 2026
2a34733
Represent dynamic tools with explicit namespaces internally (#27365)
sayan-oai Jun 15, 2026
6fb4e3a
skills: hide orchestrator skills with a local executor (#28333)
jif-oai Jun 15, 2026
f4d728f
[codex] simplify shell snapshot ownership (#27756)
pakrym-oai Jun 15, 2026
4edd5c4
Remove terminal resize reflow flag gates (#27794)
etraut-openai Jun 15, 2026
8bd6fa9
chore: restore exec-server relay keepalives (#28286)
jif-oai Jun 15, 2026
7f7b7ff
[codex] simplify memory read metrics (#28164)
pakrym-oai Jun 15, 2026
77ab782
Expose explicit dynamic tool namespaces in thread start (#27371)
sayan-oai Jun 15, 2026
ebc6ac2
linearize history output normalization (#28309)
jif-oai Jun 15, 2026
7e69f3a
avoid cloning sampling request input (#28306)
jif-oai Jun 15, 2026
1bd7a56
serialize websocket requests directly (#28323)
jif-oai Jun 15, 2026
c01fcb9
avoid cloning websocket request history (#28313)
jif-oai Jun 15, 2026
08c60c1
[codex] remove stale PathExt import (#28344)
pakrym-oai Jun 15, 2026
bef7542
[codex] Cover OTLP HTTP log and trace event export (#27059)
richardopenai Jun 15, 2026
4dca6ef
reuse encoded Responses request bodies (#28327)
jif-oai Jun 15, 2026
b47efa0
[codex] preserve explicit environment cwd (#27995)
pakrym-oai Jun 15, 2026
003f292
guardian: isolate review context from skills and memories (#28285)
jif-oai Jun 15, 2026
1b3004a
TUI Plugin Sharing 2 - add remote plugin section plumbing (#26702)
canvrno-oai Jun 15, 2026
dcdd02e
bound prompt image cache retention (#28294)
jif-oai Jun 15, 2026
82c5f71
Support staging OAuth client ID overrides (#28257)
apanasenko-oai Jun 15, 2026
a5473ae
core: let steer interrupt wait_agent (#28341)
jif-oai Jun 15, 2026
19e5048
skills: cache orchestrator resources per thread (#28336)
jif-oai Jun 15, 2026
908f6a9
Extract shared Windows sandbox session runner (#28357)
iceweasel-oai Jun 15, 2026
d25a1e9
Use aws-lc-rs for rustls crypto provider (#27706)
malsamiri-oai Jun 15, 2026
ecc5c19
[codex] add path-types skill (#28347)
anp-oai Jun 15, 2026
dbff9f3
Add request user input auto-resolution timer (#28235)
shijie-oai Jun 15, 2026
9ec3934
[mcp] Increase default tool timeout to 300 seconds (#28234)
adaley-openai Jun 15, 2026
8a8b5b4
[codex] Add external agent import result accounting (#28008)
charlesgong-openai Jun 15, 2026
a47060f
recover stale Windows sandbox credentials (#27944)
iceweasel-oai Jun 15, 2026
1a90505
Add Windows unified exec yield floor (#27086)
iceweasel-oai Jun 15, 2026
e4a0ed7
Add hidden Windows sandbox wrapper entrypoint (#28358)
iceweasel-oai Jun 15, 2026
8c3c583
core: cache the tool search handler per session (#27258)
mchen-oai Jun 15, 2026
85af9a3
feat(app-server): expose rate-limit reset credits (#28143)
jayp-oai Jun 15, 2026
e8ed762
feat(core): add metadata field to ResponseItem (#28355)
owenlin0 Jun 15, 2026
b2821fe
[codex] Add created-by-me remote plugin marketplace (#28203)
ericning-o Jun 15, 2026
f38d2b0
Respect blocking PostToolUse hooks in code mode (#28365)
abhinav-oai Jun 15, 2026
abe56f4
[codex] Reuse Apps policy evaluation across MCP tool exposure (#27813)
mzeng-openai Jun 15, 2026
9c09967
Deflake realtime handoff steering test (#28300)
felixxia-oai Jun 15, 2026
5cf303b
[codex] Preserve remote plugin directory order (#28395)
jameswt-oai Jun 15, 2026
b9e57cb
[codex] retain resolved environments across turns (#27955)
pakrym-oai Jun 15, 2026
71f731b
Add realtime speech append control (#27917)
guinness-oai Jun 15, 2026
29de232
[codex-analytics] Analytics Capture to File in Debug Builds (#27093)
jameswt-oai Jun 15, 2026
75e2654
exec-server: add Noise relay transport (#26242)
viyatb-oai Jun 15, 2026
d622593
Use PathUri in filesystem permission paths for exec-server (#28165)
anp-oai Jun 15, 2026
854cc13
[codex] Fix missing response item metadata in tests (#28415)
adaley-openai Jun 16, 2026
4e27ca9
[codex] Add second-based OTEL duration histograms (#27058)
richardopenai Jun 16, 2026
a059b77
[codex] Centralize plugin auth capability filtering (#27902)
felixxia-oai Jun 16, 2026
2c4054f
Add a toggle for realtime startup context (#28405)
guinness-oai Jun 16, 2026
0ad63d1
Preserve hook trust bypass in codex exec threads (#26434)
abhinav-oai Jun 16, 2026
e23516c
Run core integration tests against a Wine-backed Windows executor (#2…
anp-oai Jun 16, 2026
d025e62
exec-server: default remote transport to Noise (#26245)
viyatb-oai Jun 16, 2026
56790be
[codex] Load API curated marketplace by auth (#28383)
felixxia-oai Jun 16, 2026
5e4315d
[codex] Make plugin details capability aware (#27958)
felixxia-oai Jun 16, 2026
f986865
Use ApiPathString in app-server filesystem permission paths (#28367)
anp-oai Jun 16, 2026
c6ccafb
[codex] Bind shell snapshots to retained thread environments (#28421)
pakrym-oai Jun 16, 2026
3a4b978
[codex] Add interruptible sleep tool (#28429)
pakrym-oai Jun 16, 2026
b4cd342
[codex] Use expect in integration tests (#28441)
pakrym-oai Jun 16, 2026
5d189b8
[codex] Use local environment for user shell commands (#28163)
pakrym-oai Jun 16, 2026
b9c59bb
## New Features
sayan-oai Jun 18, 2026
65f3220
Resolve fork conflicts for upstream rust-v0.141.0 sync
dkropachev Jul 5, 2026
e888fe2
codex: fix macOS SDK fetch for PR #103
dkropachev Jul 4, 2026
fb6a598
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