Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
37c8aef
Use Winget release environment secret (#26466)
shijie-oai Jun 4, 2026
59ca342
[codex] Preserve logical paths during AGENTS.md discovery (#26465)
anp-oai Jun 4, 2026
769c231
fix(app-server): expose remote MCP servers in plugin read (#26453)
ericning-o Jun 4, 2026
e695ec8
Add skill for pushing CI configuration changes (#26473)
anp-oai Jun 4, 2026
b9ff450
[codex] Expose unavailable app templates in plugin detail (#26317)
charlesgong-openai Jun 4, 2026
0b2e7b5
Improve Windows sandbox setup refresh diagnostics (#26471)
iceweasel-oai Jun 4, 2026
72d0bfb
Pull plugin service less frequently (#26431)
beggers-openai Jun 5, 2026
4be1a16
ci: test windows cross build (#25000)
cconger Jun 5, 2026
ecae412
[codex] Emit sandbox outcome telemetry event (#25955)
rreichel3-oai Jun 5, 2026
e0096db
[codex] Add use_responses_lite 'override' logic (#26487)
rka-oai Jun 5, 2026
4de7a2b
fix(rmcp): refresh expired OAuth tokens before startup (#26482)
anp-oai Jun 5, 2026
1d9c9c9
[codex] Keep Bazel startup options stable across commands (#26256)
anp-oai Jun 5, 2026
a2f5874
core: derive exec policy filesystem policy from profile (#26499)
bolinfest Jun 5, 2026
64e0829
feat(remote-control): allow pairing while disabled (#26215)
apanasenko-oai Jun 5, 2026
6a6a5f9
[codex] Add environment shell info (#26480)
pakrym-oai Jun 5, 2026
5f4d06e
Encrypt multi-agent v2 message payloads (#26210)
jif-oai Jun 5, 2026
6dc28ba
nit: doc (#26566)
jif-oai Jun 5, 2026
55aa071
[codex] Forward turn moderation metadata through app-server (#25710)
carlc-oai Jun 5, 2026
6623222
[codex] Keep v1 spawn metadata visible (#26599)
jif-oai Jun 5, 2026
0b1512c
refactor: split agent control modules (#26610)
jif-oai Jun 5, 2026
5e62c73
feat(app-server): expose account token usage [1 of 2] (#25344)
fcoury-oai Jun 5, 2026
a14a73b
[codex] Fix long proxy socket paths (#26553)
viyatb-oai Jun 5, 2026
3acd71f
Surface TUI config write error causes (#26537)
etraut-openai Jun 5, 2026
e781816
Open Windows app workspaces via deep link (#26500)
etraut-openai Jun 5, 2026
fb0993d
Fix `/goal` usage text for control commands (#26551)
etraut-openai Jun 5, 2026
e5af672
Render code comment directives in TUI replay (#26554)
etraut-openai Jun 5, 2026
d5e4f01
feat: reload v2 agents on delivery (#26623)
jif-oai Jun 5, 2026
40c8f1a
Require absolute cwd in thread settings (#26532)
pakrym-oai Jun 5, 2026
d404545
[codex] Allow socketpair in proxy-routed Linux sandbox (#26625)
viyatb-oai Jun 5, 2026
9ddb1de
[codex] Add /usr/bin/bash shell fallback (#26538)
pakrym-oai Jun 5, 2026
da490ba
feat(remote-control): add pairing status transport (#26449)
hefuc-oai Jun 5, 2026
86a1ddd
Make turn diff tracker multi-env aware (#26433)
pakrym-oai Jun 5, 2026
841f057
fix(tui): avoid doubled blank rows while streaming (#26636)
fcoury-oai Jun 5, 2026
0177231
feat(app-server): add remote control pairing status RPC (#26450)
hefuc-oai Jun 5, 2026
78eba34
Clean up Rust release workflow (#26335)
shijie-oai Jun 5, 2026
a8c9530
[1 of 2] Align goal extension with core behavior (#26547)
etraut-openai Jun 5, 2026
7131923
fix(tui): Windows composer background (#26181)
fcoury-oai Jun 5, 2026
679a944
fix(tui): restore cancelled prompt cursor at end (#26457)
fcoury-oai Jun 5, 2026
82b15b6
[codex] Respect Windows sandbox backend in exec policy (#26307)
iceweasel-oai Jun 5, 2026
8d72fb6
[codex] Add turn profiling analytics (#26484)
aibrahim-oai Jun 5, 2026
76c0a53
Make runtime workspace roots absolute in app-server API (#26552)
pakrym-oai Jun 5, 2026
345cf6e
Use state DB first for `resume --last` (#26462)
charliemarsh-oai Jun 5, 2026
055c7a7
Speed up TUI startup by reusing plugin discovery (#26469)
charliemarsh-oai Jun 5, 2026
bb7d19b
Add JSON output for plugin subcommands (#26631)
mpc-oai Jun 5, 2026
679cc08
[codex] Bound WSL local curated discovery (#26669)
xl-openai Jun 5, 2026
479a14c
[2 of 2] Finish moving goal runtime to extension (#26548)
etraut-openai Jun 5, 2026
470c20b
protocol: remove submission-side serde from Op (#26674)
pakrym-oai Jun 5, 2026
c62d792
Block active goals after terminal turn errors (#26690)
etraut-openai Jun 5, 2026
4f655bc
[codex] Remove legacy remote plugin startup sync (#25936)
xl-openai Jun 5, 2026
ffe90cb
[codex] Use standalone tools for Responses Lite (#26490)
rka-oai Jun 6, 2026
61a913d
[codex] Gate terminal visualization instructions in TUI (#26013)
vie-oai Jun 6, 2026
df7818c
[codex-rs] support v2 personal access tokens (#25731)
cooper-oai Jun 6, 2026
954e287
[codex] Send Responses Lite transport header (#26542)
rka-oai Jun 6, 2026
2f108f9
permissions: enforce managed permission profile allowlists (#24852)
viyatb-oai Jun 6, 2026
cbac22d
[codex] Deduplicate skill load warnings (#26698)
xl-openai Jun 6, 2026
3ea9e98
Remove `just bench-smoke` from `just test`. (#26716)
anp-oai Jun 6, 2026
8404d0e
Release 0.138.0-alpha.6
aibrahim-oai Jun 6, 2026
ab1d018
Seed Termux release automation
github-actions[bot] Jun 6, 2026
d1cf6fb
Prepare Termux rust-v0.138.0-alpha.6
github-actions[bot] Jun 6, 2026
837ad59
Merge remote-tracking branch 'origin/release/0.138.0' into resolve/pr…
wallentx Jun 6, 2026
de617be
Merge pull request #193 from wallentx/upstream/rust-v0.138.0
wallentx Jun 6, 2026
4e0beec
Merge commit 'de617be6e04e7fd0ab302f735d09095ce808c5fc' into checkpoi…
github-actions[bot] Jun 6, 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
  •  
  •  
  •  
14 changes: 9 additions & 5 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,9 @@ common:ci --disk_cache=
# Shared config for the main Bazel CI workflow.
common:ci-bazel --config=ci
common:ci-bazel --build_metadata=TAG_workflow=bazel
# Bazel CI cross-compiles in several legs, and the V8-backed code-mode tests
# are not stable in that setup yet. Keep running the rest of the Rust
# integration suites through the workspace-root launcher.
# Keep code-mode integration cases out of ordinary Bazel legs. The
# Windows-cross config below re-enables them after generating its Windows V8
# snapshot on the Windows runner.
common:ci-bazel --test_env=CODEX_BAZEL_TEST_SKIP_FILTERS=suite::code_mode::

# Shared config for Bazel-backed Rust linting.
Expand Down Expand Up @@ -186,12 +186,16 @@ common:ci-windows-cross --config=ci-windows
common:ci-windows-cross --build_metadata=TAG_windows_cross_compile=true
common:ci-windows-cross --host_platform=//:rbe
common:ci-windows-cross --strategy=TestRunner=local
# V8 embeds IsolateData offsets in snapshot builtins; Windows snapshots must be
# generated by a Windows mksnapshot binary rather than the Linux RBE host tool.
common:ci-windows-cross --strategy=V8Mksnapshot=local
common:ci-windows-cross --local_test_jobs=4
common:ci-windows-cross --test_env=RUST_TEST_THREADS=1
# Native Windows CI still covers the PowerShell tests. The cross-built gnullvm
# binaries currently hang in PowerShell AST parser tests when those binaries are
# run on the Windows runner.
common:ci-windows-cross --test_env=CODEX_BAZEL_TEST_SKIP_FILTERS=suite::code_mode::,powershell
# run on the Windows runner. Keep V8-backed code-mode tests enabled except for
# the hidden dynamic-tool callback test, which currently times out on Windows.
common:ci-windows-cross --test_env=CODEX_BAZEL_TEST_SKIP_FILTERS=powershell,suite::code_mode::code_mode_can_call_hidden_dynamic_tools
common:ci-windows-cross --platforms=//:windows_x86_64_gnullvm
common:ci-windows-cross --extra_execution_platforms=//:rbe,//:windows_x86_64_msvc
common:ci-windows-cross --extra_toolchains=//:windows_gnullvm_tests_on_msvc_host_toolchain
Expand Down
17 changes: 17 additions & 0 deletions .codex/skills/pushing-ci-changes/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: pushing-ci-changes
description: Pushing GitHub Actions changes, resolving push rejection, requesting upload exceptions.
---

The Codex repository prevents anyone from uploading changes to its CI configuration unless they've
been granted a temporary role.

In order to push changes to `.github/**/*.yml` and related files you'll need the user to read
go/workflow-approvals and request an approval through that flow. It is not possible for you to
make progress by requesting an exemption yourself.

If you know you're about to push changes that would fail due to these restrictions you should still
try to push anyways to confirm the user's account doesn't already have the necessary approval.

If you encounter a failed push due to these restrictions, share the go/workflow-approvals link with
the user and ask them to return control to you once the approval has propagated to GitHub.
8 changes: 8 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ In the codex-rs folder where the rust code lives:
- Implementations may still use `async fn foo(&self, ...) -> T` when they satisfy that contract.
- Do not use `#[allow(async_fn_in_trait)]` as a shortcut around spelling the future contract explicitly.
- When writing tests, prefer comparing the equality of entire objects over fields one by one.
- Do not add tests for values that are statically defined.
- Do not add negative tests for logic that was removed.
- Do not add general product or user-facing documentation to the `docs/` folder. The official Codex documentation lives elsewhere. The exception is app-server API documentation, which is covered by the app-server guidance below.
- Prefer private modules and explicitly exported public crate API.
- If you change `ConfigToml` or nested config types, run `just write-config-schema` to update `codex-rs/core/config.schema.json`.
Expand Down Expand Up @@ -190,6 +192,12 @@ If you don’t have the tool:

- `cargo install --locked cargo-insta`

### Benchmarks

cargo benchmarks can be run with `just bench`, use the divan crate to write new ones.

Use `just bench-smoke` to dry-run the benchmark for a single iteration to ensure it works.

### Test assertions

- Tests should use pretty_assertions::assert_eq for clearer diffs. Import this at the top of the test module if it isn't already.
Expand Down
8 changes: 6 additions & 2 deletions codex-rs/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions codex-rs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ members = [
resolver = "2"

[workspace.package]
version = "0.138.0-alpha.4"
version = "0.138.0-alpha.6"
# Track the edition for all workspace crates in one place. Individual
# crates can still override this value, but keeping it here means new
# crates created with `cargo new -w ...` automatically inherit the 2024
Expand Down Expand Up @@ -485,7 +485,6 @@ unwrap_used = "deny"
[workspace.metadata.cargo-shear]
ignored = [
"codex-agent-graph-store",
"codex-goal-extension",
"icu_provider",
"openssl-sys",
"codex-v8-poc",
Expand Down
40 changes: 40 additions & 0 deletions codex-rs/analytics/src/analytics_client_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ use crate::facts::SubAgentThreadStartedInput;
use crate::facts::ThreadInitializationMode;
use crate::facts::TrackEventsContext;
use crate::facts::TurnCodexErrorFact;
use crate::facts::TurnProfile;
use crate::facts::TurnProfileFact;
use crate::facts::TurnResolvedConfigFact;
use crate::facts::TurnStatus;
use crate::facts::TurnSteerRequestError;
Expand Down Expand Up @@ -396,6 +398,18 @@ fn sample_turn_resolved_config(thread_id: &str, turn_id: &str) -> TurnResolvedCo
}
}

fn sample_turn_profile() -> TurnProfile {
TurnProfile {
before_first_sampling_ms: 100,
sampling_ms: 700,
between_sampling_overhead_ms: 50,
tool_blocking_ms: 250,
after_last_sampling_ms: 134,
sampling_request_count: 2,
sampling_retry_count: 1,
}
}

fn sample_turn_steer_request(
thread_id: &str,
expected_turn_id: &str,
Expand Down Expand Up @@ -649,6 +663,18 @@ async fn ingest_turn_prerequisites(
)
.await;
}

reducer
.ingest(
AnalyticsFact::Custom(CustomAnalyticsFact::TurnProfile(Box::new(
TurnProfileFact {
turn_id: "turn-2".to_string(),
profile: sample_turn_profile(),
},
))),
out,
)
.await;
}

async fn ingest_review_prerequisites(
Expand Down Expand Up @@ -3300,6 +3326,13 @@ fn turn_event_serializes_expected_shape() {
output_tokens: None,
reasoning_output_tokens: None,
total_tokens: None,
before_first_sampling_ms: 100,
sampling_ms: 700,
between_sampling_overhead_ms: 50,
tool_blocking_ms: 250,
after_last_sampling_ms: 134,
sampling_request_count: 2,
sampling_retry_count: 1,
duration_ms: Some(1234),
started_at: Some(455),
completed_at: Some(456),
Expand Down Expand Up @@ -3366,6 +3399,13 @@ fn turn_event_serializes_expected_shape() {
"output_tokens": null,
"reasoning_output_tokens": null,
"total_tokens": null,
"before_first_sampling_ms": 100,
"sampling_ms": 700,
"between_sampling_overhead_ms": 50,
"tool_blocking_ms": 250,
"after_last_sampling_ms": 134,
"sampling_request_count": 2,
"sampling_retry_count": 1,
"duration_ms": 1234,
"started_at": 455,
"completed_at": 456
Expand Down
7 changes: 7 additions & 0 deletions codex-rs/analytics/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use crate::facts::SkillInvokedInput;
use crate::facts::SubAgentThreadStartedInput;
use crate::facts::TrackEventsContext;
use crate::facts::TurnCodexErrorFact;
use crate::facts::TurnProfileFact;
use crate::facts::TurnResolvedConfigFact;
use crate::facts::TurnTokenUsageFact;
use crate::reducer::AnalyticsReducer;
Expand Down Expand Up @@ -257,6 +258,12 @@ impl AnalyticsEventsClient {
)));
}

pub fn track_turn_profile(&self, fact: TurnProfileFact) {
self.record_fact(AnalyticsFact::Custom(CustomAnalyticsFact::TurnProfile(
Box::new(fact),
)));
}

pub fn track_turn_codex_error(&self, fact: TurnCodexErrorFact) {
self.record_fact(AnalyticsFact::Custom(CustomAnalyticsFact::TurnCodexError(
Box::new(fact),
Expand Down
7 changes: 7 additions & 0 deletions codex-rs/analytics/src/events.rs
Original file line number Diff line number Diff line change
Expand Up @@ -817,6 +817,13 @@ pub(crate) struct CodexTurnEventParams {
pub(crate) output_tokens: Option<i64>,
pub(crate) reasoning_output_tokens: Option<i64>,
pub(crate) total_tokens: Option<i64>,
pub(crate) before_first_sampling_ms: u64,
pub(crate) sampling_ms: u64,
pub(crate) between_sampling_overhead_ms: u64,
pub(crate) tool_blocking_ms: u64,
pub(crate) after_last_sampling_ms: u64,
pub(crate) sampling_request_count: u32,
pub(crate) sampling_retry_count: u32,
pub(crate) duration_ms: Option<u64>,
pub(crate) started_at: Option<u64>,
pub(crate) completed_at: Option<u64>,
Expand Down
18 changes: 18 additions & 0 deletions codex-rs/analytics/src/facts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,23 @@ pub struct TurnTokenUsageFact {
pub token_usage: TokenUsage,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize)]
pub struct TurnProfile {
pub before_first_sampling_ms: u64,
pub sampling_ms: u64,
pub between_sampling_overhead_ms: u64,
pub tool_blocking_ms: u64,
pub after_last_sampling_ms: u64,
pub sampling_request_count: u32,
pub sampling_retry_count: u32,
}

#[derive(Clone)]
pub struct TurnProfileFact {
pub turn_id: String,
pub profile: TurnProfile,
}

#[derive(Clone)]
pub struct TurnCodexErrorFact {
pub(crate) turn_id: String,
Expand Down Expand Up @@ -476,6 +493,7 @@ pub(crate) enum CustomAnalyticsFact {
GuardianReview(Box<GuardianReviewEventParams>),
TurnResolvedConfig(Box<TurnResolvedConfigFact>),
TurnTokenUsage(Box<TurnTokenUsageFact>),
TurnProfile(Box<TurnProfileFact>),
TurnCodexError(Box<TurnCodexErrorFact>),
SkillInvoked(SkillInvokedInput),
AppMentioned(AppMentionedInput),
Expand Down
2 changes: 2 additions & 0 deletions codex-rs/analytics/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ pub use facts::SubAgentThreadStartedInput;
pub use facts::ThreadInitializationMode;
pub use facts::TrackEventsContext;
pub use facts::TurnCodexErrorFact;
pub use facts::TurnProfile;
pub use facts::TurnProfileFact;
pub use facts::TurnResolvedConfigFact;
pub use facts::TurnStatus;
pub use facts::TurnSteerRejectionReason;
Expand Down
Loading