Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
e76c6de
fork: restore minimal CI signal on review PRs
Piping Apr 5, 2026
b7809c7
fork: restrict rust-ci matrix to linux on forks
Piping Apr 5, 2026
20846e4
ci: increase fork Linux arglint timeout
Piping Apr 5, 2026
f13a386
ci: add heartbeat to linux argument-comment-lint
Piping Apr 5, 2026
81da514
ci: force local bazel for fork linux argument-comment-lint
Piping Apr 5, 2026
562db01
ci: force fork linux arglint onto local bazel execution
Piping Apr 5, 2026
d06df85
ci: run fork linux arglint via source wrapper
Piping Apr 5, 2026
56fb950
replay: restore profile fallback runtime
Piping Apr 4, 2026
d755fb6
replay: restore routed profile app-server continuity
Piping Apr 4, 2026
8e20686
fix profile switch issue due to thread_unsubscribe
Piping Apr 5, 2026
c03758d
replay: preserve session args on respawn
Piping Apr 4, 2026
b4f1e36
replay: harden startup tooltip tls handling
Piping Apr 4, 2026
19e31c4
replay: restore question tool runtime
Piping Apr 5, 2026
dd58a64
replay: expose read_file and grep_files tools
Piping Apr 5, 2026
a2ba589
replay: restore spawn agent cwd continuity
Piping Apr 5, 2026
b8099e4
codex: fix CI failure on PR #19
Piping Apr 6, 2026
5b464fc
replay: restore workflow scheduler core
Piping Apr 4, 2026
f1c3c33
replay: restore workflow runtime on app-server
Piping Apr 4, 2026
1f886d3
replay: restore workflow main-thread continuity
Piping Apr 4, 2026
1e58f71
replay: restore workflow round continuity
Piping Apr 4, 2026
5be52ba
replay: clean workflow clippy warnings
Piping Apr 4, 2026
a122f9a
replay: restore workflow ui on new tui
Piping Apr 5, 2026
a1f597e
fix: handle ephemeral workflow turns via notifications
Piping Apr 5, 2026
bec3803
codex: fix CI failure on PR #18
Piping Apr 6, 2026
6374fd9
replay: restore keybinding continuity on new tui
Piping Apr 5, 2026
ebb407a
replay: restore ui show-hidden on new tui
Piping Apr 5, 2026
8db9c85
replay: restore btw hidden ephemeral discussion
Piping Apr 5, 2026
c5b2f27
replay: restore thread actions and jump-to-message
Piping Apr 5, 2026
ed61c85
replay: restore routed profile management on new tui
Piping Apr 5, 2026
2b8c8a5
replay: restore startup tooltip display preference
Piping Apr 5, 2026
f190da7
replay: restore transcript visibility display preferences
Piping Apr 5, 2026
09c1ec7
fix: improve hidden btw status and rejection handling
Piping Apr 6, 2026
b8f91a1
codex: fix CI failure on PR #20
Piping Apr 6, 2026
d2cbbd8
replay: restore feishu clawbot runtime bridge
Piping Apr 5, 2026
3e88098
replay: restore clawbot feishu config binding management
Piping Apr 5, 2026
76e421d
replay: restore clawbot message actions and non-interactive turn mode
Piping Apr 5, 2026
531786b
replay: restore clawbot session discovery and cleanup
Piping Apr 5, 2026
079f098
replay: restore clawbot provider admin tail
Piping Apr 5, 2026
bae68df
fix: reconcile stale clawbot feishu bindings
Piping Apr 5, 2026
2f92723
Fix clawbot Feishu delivery and route /btw through workflow runtime
Piping Apr 6, 2026
e477ec7
replay: restore clawbot session jump continuity
Piping Apr 6, 2026
f6f607c
fix: restore clawbot bound session jump for unloaded threads
Piping Apr 6, 2026
7d1318d
codex: fix CI failure on PR #21
Piping Apr 6, 2026
d44d415
python: restore codex-enhanced pypi release
Piping Apr 7, 2026
2141a4b
tui: expand resume picker and custom prompts
Piping Apr 7, 2026
034b86e
fix workflow schedule deadlock issue
Piping Apr 7, 2026
7fb6e65
update workflow panel setup
Piping Apr 7, 2026
7efe49c
update workflow UI menu
Piping Apr 7, 2026
b81e1d1
fix setting ui hide/show
Piping Apr 7, 2026
2243e82
python: release codex-enhanced v0.1.23
Piping Apr 7, 2026
9368df4
polish workflow controls and pypi release flow
Piping Apr 8, 2026
4d40c2f
python: bump codex-enhanced runtime to v0.1.24
Piping Apr 8, 2026
cc1fc5e
ci: avoid pypi release concurrency deadlock
Piping Apr 8, 2026
3b42a04
ci: make fork main pushes manual-only
Piping Apr 8, 2026
42cb029
update profile fallback management with editor
Piping Apr 8, 2026
97dd601
fix workflow issue with start_background_workflow_run
Piping Apr 8, 2026
374e29e
fix profile fallback (allow skip)
Piping Apr 8, 2026
fb4cc25
fix yaml multiline/file trigger/profile retry continue
Piping Apr 8, 2026
eb319cf
update README
Piping Apr 8, 2026
55bc59a
update README.md with <div>
Piping Apr 8, 2026
07d3f99
fix workflow no-op bug
Piping Apr 8, 2026
60bb4dd
feat: add timestamp
Piping Apr 8, 2026
af23361
add insight for session usage - mechanic
Piping Apr 9, 2026
91dc95f
update workflow with timeout/retry keys
Piping Apr 9, 2026
c53750c
fix clawbot message inbound/outbound
Piping Apr 9, 2026
99e1bbd
python: release codex-enhanced v0.1.25
Piping Apr 9, 2026
0590a3d
feat(clawbot): improve clawbot menu
Piping Apr 10, 2026
fcdcd4b
fix feishu reaction cancellation
Piping Apr 10, 2026
428334f
fix(clawbot): restart feishu runtime after respawn
Piping Apr 10, 2026
9496282
python: release codex-enhanced v0.1.26
Piping Apr 10, 2026
ef67da2
refactor features router into standalone files
Piping Apr 11, 2026
9526609
allow fallback and exp backoff
Piping Apr 12, 2026
e6c4bbe
python: release codex-enhanced v0.1.27
Piping Apr 13, 2026
b218c70
fix multi codex in same directory binding issue
Piping Apr 13, 2026
bcb0524
python: release codex-enhanced v0.1.28
Piping Apr 15, 2026
2bd9cac
Fix stream retry cache key and cranelift test support
Piping Apr 15, 2026
dc8ccec
remove ctor codex-core to support cranelift build
Piping Apr 15, 2026
b606185
Add Feishu Base coordination for clawbot runtime
Piping Apr 15, 2026
0a1e338
Auto-provision clawbot Feishu coordination tables
Piping Apr 15, 2026
cd5ac02
feat: add clawbot ws preemption and hook output filter
Piping Apr 15, 2026
8885e63
update rebase to upstream/main 04-17-2026
Piping Apr 17, 2026
fe65971
fmt code and bring ctrlx ctrl r back
Piping Apr 17, 2026
a20a8de
chore(deps): bump codespell-project/codespell-problem-matcher
dependabot[bot] Apr 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,16 @@ common:ci-linux --config=remote
common:ci-linux --strategy=remote
common:ci-linux --platforms=//:rbe

# Fork-only Linux jobs that must stay on Bazel but cannot rely on BuildBuddy
# remote execution should use this explicit local variant instead of trying to
# partially undo `ci-linux` at the callsite.
common:ci-linux-local --config=ci-bazel
common:ci-linux-local --build_metadata=TAG_os=linux
common:ci-linux-local --extra_execution_platforms=
common:ci-linux-local --platforms=//:local_linux
common:ci-linux-local --spawn_strategy=local
common:ci-linux-local --strategy=local

# On mac, we can run all the build actions remotely but test actions locally.
common:ci-macos --config=ci-bazel
common:ci-macos --build_metadata=TAG_os=macos
Expand Down
29 changes: 28 additions & 1 deletion .github/scripts/run-bazel-ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ case "${RUNNER_OS:-}" in
;;
esac

force_local_ci_config=
if [[ "${RUNNER_OS:-}" == "Linux" ]]; then
force_local_ci_config=ci-linux-local
fi

print_bazel_test_log_tails() {
local console_log="$1"
local testlogs_dir
Expand Down Expand Up @@ -241,7 +246,29 @@ if (( ${#bazel_startup_args[@]} > 0 )); then
bazel_cmd+=("${bazel_startup_args[@]}")
fi

if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then
if [[ "${CODEX_BAZEL_FORCE_LOCAL:-0}" == "1" ]]; then
echo "CODEX_BAZEL_FORCE_LOCAL=1; using local Bazel configuration."
bazel_run_args=(
"${bazel_args[@]}"
--remote_cache=
--remote_executor=
)
if [[ -n "${force_local_ci_config}" ]]; then
bazel_run_args+=("--config=${force_local_ci_config}")
fi
if (( ${#post_config_bazel_args[@]} > 0 )); then
bazel_run_args+=("${post_config_bazel_args[@]}")
fi
set +e
run_bazel "${bazel_cmd[@]:1}" \
--noexperimental_remote_repo_contents_cache \
"${bazel_run_args[@]}" \
-- \
"${bazel_targets[@]}" \
2>&1 | tee "$bazel_console_log"
bazel_status=${PIPESTATUS[0]}
set -e
elif [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then
echo "BuildBuddy API key is available; using remote Bazel configuration."
# Work around Bazel 9 remote repo contents cache / overlay materialization failures
# seen in CI (for example "is not a symlink" or permission errors while
Expand Down
16 changes: 11 additions & 5 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Workflow Strategy

The workflows in this directory are split so that pull requests get fast, review-friendly signal while `main` still gets the full cross-platform verification pass.
This fork keeps pushes to `main` quiet. Heavier validation runs stay available through
`workflow_dispatch`, while pull requests can still use targeted review-time checks.

## Pull Requests

Expand All @@ -14,18 +15,23 @@ The workflows in this directory are split so that pull requests get fast, review
- `argument-comment-lint` on Linux, macOS, and Windows
- `tools/argument-comment-lint` package tests when the lint or its workflow wiring changes

## Post-Merge On `main`
## Manual Verification

- `bazel.yml` also runs on pushes to `main`.
This re-verifies the merged Bazel path and helps keep the BuildBuddy caches warm.
- `bazel.yml` is available as a manual verification path when the fork needs a full
Bazel pass.
- `rust-ci-full.yml` is the full Cargo-native verification workflow.
It keeps the heavier checks off the PR path while still validating them after merge:
It keeps the heavier checks off the PR path while still providing an on-demand
validation path:
- the full Cargo `clippy` matrix
- the full Cargo `nextest` matrix
- release-profile Cargo builds
- cross-platform `argument-comment-lint`
- Linux remote-env tests

Other repo-level checks that used to run on `push(main)` in upstream, such as
`ci.yml`, `cargo-deny.yml`, `codespell.yml`, `sdk.yml`, and `v8-canary.yml`, are also
manual-only in this fork so routine sync pushes do not fan out into unrelated CI.

## Rule Of Thumb

- If a build/test/clippy check can be expressed in Bazel, prefer putting the PR-time version in `bazel.yml`.
Expand Down
3 changes: 0 additions & 3 deletions .github/workflows/bazel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ name: Bazel

on:
pull_request: {}
push:
branches:
- main
workflow_dispatch:

concurrency:
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/cargo-deny.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ name: cargo-deny

on:
pull_request:
push:
branches:
- main
workflow_dispatch:

jobs:
cargo-deny:
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: ci

on:
pull_request: {}
push: { branches: [main] }
workflow_dispatch:

jobs:
build-test:
Expand Down Expand Up @@ -40,6 +40,7 @@ jobs:
- uses: facebook/install-dotslash@1e4e7b3e07eaca387acb98f1d4720e0bee8dbb6a # v2

- name: Stage npm package
if: ${{ github.repository == 'openai/codex' }}
id: stage_npm_package
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -56,6 +57,7 @@ jobs:
echo "pack_output=$PACK_OUTPUT" >> "$GITHUB_OUTPUT"

- name: Upload staged npm package artifact
if: ${{ github.repository == 'openai/codex' }}
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
with:
name: codex-npm-staging
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/codespell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
name: Codespell

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

permissions:
contents: read
Expand All @@ -20,7 +19,7 @@ jobs:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Annotate locations with typos
uses: codespell-project/codespell-problem-matcher@b80729f885d32f78a716c2f107b4db1025001c42 # v1
uses: codespell-project/codespell-problem-matcher@9ba2c57125d4908eade4308f32c4ff814c184633 # v1.2.0
- name: Codespell
uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 # v2.2
with:
Expand Down
165 changes: 165 additions & 0 deletions .github/workflows/pypi-release-artifacts.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
name: pypi-release-artifacts

on:
workflow_call:
inputs:
checkout_ref:
required: true
type: string
release_tag:
required: true
type: string

concurrency:
group: pypi-release-artifacts-${{ inputs.release_tag }}
cancel-in-progress: true

jobs:
build:
name: build-artifact-${{ matrix.target }}
runs-on: ${{ matrix.runner }}
permissions:
contents: read
env:
CARGO_INCREMENTAL: "0"
RUSTC_WRAPPER: ""
strategy:
fail-fast: false
matrix:
include:
- runner: macos-14
target: aarch64-apple-darwin
runtime_binary_name: codex
release_asset_name: codex-aarch64-apple-darwin.tar.gz
build_args: --bin codex
- runner: macos-15-intel
target: x86_64-apple-darwin
runtime_binary_name: codex
release_asset_name: codex-x86_64-apple-darwin.tar.gz
build_args: --bin codex
- runner: ubuntu-24.04
target: x86_64-unknown-linux-gnu
runtime_binary_name: codex
release_asset_name: codex-x86_64-unknown-linux-gnu.tar.gz
build_args: --bin codex
- runner: windows-2022
target: x86_64-pc-windows-msvc
runtime_binary_name: codex.exe
release_asset_name: codex-x86_64-pc-windows-msvc.zip
build_args: --bin codex --bin codex-windows-sandbox-setup --bin codex-command-runner
steps:
- name: Checkout release ref
uses: actions/checkout@v4
with:
ref: ${{ inputs.checkout_ref }}

- uses: dtolnay/rust-toolchain@1.93.0
with:
targets: ${{ matrix.target }}

- name: Clear workspace build rustflags for CI release builds
shell: bash
run: |
set -euo pipefail
echo "RUSTFLAGS=" >> "$GITHUB_ENV"
echo "CARGO_ENCODED_RUSTFLAGS=" >> "$GITHUB_ENV"
echo "CARGO_BUILD_RUSTFLAGS=" >> "$GITHUB_ENV"

- name: Use default macOS linker
if: ${{ runner.os == 'macOS' }}
shell: bash
run: |
set -euo pipefail
echo "RUSTFLAGS=" >> "$GITHUB_ENV"
echo "CARGO_ENCODED_RUSTFLAGS=" >> "$GITHUB_ENV"
echo "CARGO_BUILD_RUSTFLAGS=" >> "$GITHUB_ENV"
echo "CARGO_TARGET_AARCH64_APPLE_DARWIN_RUSTFLAGS=" >> "$GITHUB_ENV"
echo "CARGO_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS=" >> "$GITHUB_ENV"

- name: Install Linux build dependencies
if: ${{ runner.os == 'Linux' }}
shell: bash
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y libcap-dev pkg-config protobuf-compiler

- name: Install macOS build dependencies
if: ${{ runner.os == 'macOS' }}
shell: bash
run: |
set -euo pipefail
if ! command -v protoc >/dev/null 2>&1; then
brew install protobuf
fi

- name: Install Windows build dependencies
if: ${{ runner.os == 'Windows' }}
shell: pwsh
run: |
if (-not (Get-Command protoc -ErrorAction SilentlyContinue)) {
choco install protoc -y --no-progress
}

- name: Build release binaries
shell: bash
working-directory: codex-rs
run: |
set -euo pipefail
cargo build --locked --release --target "${{ matrix.target }}" ${{ matrix.build_args }}

- name: Stage runtime artifact
shell: bash
run: |
set -euo pipefail
mkdir -p "${RUNNER_TEMP}/runtime-artifact"
cp "codex-rs/target/${{ matrix.target }}/release/${{ matrix.runtime_binary_name }}" \
"${RUNNER_TEMP}/runtime-artifact/${{ matrix.runtime_binary_name }}"

- name: Stage release asset
shell: bash
run: |
set -euo pipefail
release_dir="${RUNNER_TEMP}/release-asset"
mkdir -p "${release_dir}"

if [[ "${{ runner.os }}" == "Windows" ]]; then
cp "codex-rs/target/${{ matrix.target }}/release/codex.exe" "${release_dir}/codex.exe"
cp "codex-rs/target/${{ matrix.target }}/release/codex-windows-sandbox-setup.exe" "${release_dir}/codex-windows-sandbox-setup.exe"
cp "codex-rs/target/${{ matrix.target }}/release/codex-command-runner.exe" "${release_dir}/codex-command-runner.exe"
else
cp "codex-rs/target/${{ matrix.target }}/release/codex" "${release_dir}/codex"
fi

- name: Archive Unix release asset
if: ${{ runner.os != 'Windows' }}
shell: bash
run: |
set -euo pipefail
release_dir="${RUNNER_TEMP}/release-asset"
archive_dir="${RUNNER_TEMP}/release-archive"
mkdir -p "${archive_dir}"
tar -C "${release_dir}" -czf "${archive_dir}/${{ matrix.release_asset_name }}" codex

- name: Archive Windows release asset
if: ${{ runner.os == 'Windows' }}
shell: pwsh
run: |
$releaseDir = Join-Path $env:RUNNER_TEMP "release-asset"
$archiveDir = Join-Path $env:RUNNER_TEMP "release-archive"
New-Item -ItemType Directory -Path $archiveDir -Force | Out-Null
Compress-Archive -Path (Join-Path $releaseDir '*') -DestinationPath (Join-Path $archiveDir '${{ matrix.release_asset_name }}') -Force

- name: Upload runtime binary artifact
uses: actions/upload-artifact@v4
with:
name: pypi-runtime-${{ matrix.target }}
path: ${{ runner.temp }}/runtime-artifact/*
if-no-files-found: error

- name: Upload GitHub release asset
uses: actions/upload-artifact@v4
with:
name: pypi-release-asset-${{ matrix.target }}
path: ${{ runner.temp }}/release-archive/*
if-no-files-found: error
Loading
Loading