diff --git a/.github/chocolatey/agentx.nuspec.template b/.github/chocolatey/agentx.nuspec.template
new file mode 100644
index 00000000000..bcb3f8aa983
--- /dev/null
+++ b/.github/chocolatey/agentx.nuspec.template
@@ -0,0 +1,20 @@
+
+
+
+ agentx
+ __VERSION__
+ agentx
+ agentserver
+ agentserver
+ https://github.com/agentserver/codex/blob/main/LICENSE
+ https://github.com/agentserver/codex
+ https://github.com/agentserver/codex/tree/main/.github/chocolatey
+ false
+ agentx is the agentserver fork of OpenAI Codex — a lightweight coding agent that runs in your terminal.
+ Lightweight coding agent that runs in your terminal (agentserver fork of Codex).
+ agentx codex cli ai coding-agent
+
+
+
+
+
diff --git a/.github/chocolatey/tools/LICENSE.txt b/.github/chocolatey/tools/LICENSE.txt
new file mode 100644
index 00000000000..4606e72e042
--- /dev/null
+++ b/.github/chocolatey/tools/LICENSE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright 2025 OpenAI
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/.github/chocolatey/tools/VERIFICATION.txt b/.github/chocolatey/tools/VERIFICATION.txt
new file mode 100644
index 00000000000..bec974b8431
--- /dev/null
+++ b/.github/chocolatey/tools/VERIFICATION.txt
@@ -0,0 +1,14 @@
+VERIFICATION
+
+agentx is built from open-source code at https://github.com/agentserver/codex
+(a fork of https://github.com/openai/codex).
+
+The Chocolatey package downloads the official Windows release asset published
+to the GitHub Release for the corresponding tag and verifies its SHA256
+checksum (recorded in chocolateyinstall.ps1 at package time).
+
+To verify a downloaded asset matches the published checksum, run:
+
+ Get-FileHash -Algorithm SHA256
+
+and compare to the value in tools\chocolateyinstall.ps1.
diff --git a/.github/chocolatey/tools/chocolateyinstall.ps1.template b/.github/chocolatey/tools/chocolateyinstall.ps1.template
new file mode 100644
index 00000000000..48c4d071824
--- /dev/null
+++ b/.github/chocolatey/tools/chocolateyinstall.ps1.template
@@ -0,0 +1,19 @@
+$ErrorActionPreference = 'Stop'
+
+$packageName = 'agentx'
+$url64 = '__URL64__'
+$checksum64 = '__SHA256_64__'
+
+$packageArgs = @{
+ packageName = $packageName
+ url64bit = $url64
+ checksumType64 = 'sha256'
+ checksum64 = $checksum64
+ unzipLocation = "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)"
+}
+
+Install-ChocolateyZipPackage @packageArgs
+
+# Mark the unzipped agentx.exe as a shim (Chocolatey auto-shims executables in
+# tools\ directory, so this is informational).
+Write-Host "agentx installed via Chocolatey. Run 'agentx --help' to get started."
diff --git a/.github/chocolatey/tools/chocolateyuninstall.ps1 b/.github/chocolatey/tools/chocolateyuninstall.ps1
new file mode 100644
index 00000000000..830be3b49c3
--- /dev/null
+++ b/.github/chocolatey/tools/chocolateyuninstall.ps1
@@ -0,0 +1,2 @@
+$ErrorActionPreference = 'Stop'
+# Choco auto-removes shims and the package directory; nothing extra to do.
diff --git a/.github/homebrew/agentx.rb.template b/.github/homebrew/agentx.rb.template
new file mode 100644
index 00000000000..8945700ea6f
--- /dev/null
+++ b/.github/homebrew/agentx.rb.template
@@ -0,0 +1,35 @@
+cask "agentx" do
+ version "__VERSION__"
+
+ on_macos do
+ on_arm do
+ sha256 "__SHA256_MACOS_ARM__"
+ url "https://github.com/agentserver/codex/releases/download/agentx-v#{version}/agentx-aarch64-apple-darwin.tar.gz"
+ end
+ on_intel do
+ sha256 "__SHA256_MACOS_INTEL__"
+ url "https://github.com/agentserver/codex/releases/download/agentx-v#{version}/agentx-x86_64-apple-darwin.tar.gz"
+ end
+ end
+
+ on_linux do
+ on_arm do
+ sha256 "__SHA256_LINUX_ARM__"
+ url "https://github.com/agentserver/codex/releases/download/agentx-v#{version}/agentx-aarch64-unknown-linux-musl.tar.gz"
+ end
+ on_intel do
+ sha256 "__SHA256_LINUX_INTEL__"
+ url "https://github.com/agentserver/codex/releases/download/agentx-v#{version}/agentx-x86_64-unknown-linux-musl.tar.gz"
+ end
+ end
+
+ name "agentx"
+ desc "Lightweight coding agent that runs in your terminal (agentserver fork of OpenAI Codex)"
+ homepage "https://github.com/agentserver/codex"
+
+ depends_on formula: "ripgrep"
+
+ binary "agentx"
+
+ zap trash: "~/.codex"
+end
diff --git a/.github/workflows/agentx-release-package.sh b/.github/workflows/agentx-release-package.sh
new file mode 100755
index 00000000000..8dcc9e0891d
--- /dev/null
+++ b/.github/workflows/agentx-release-package.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+# Package the built `codex` binary as `agentx` for release distribution.
+#
+# Inputs (env vars):
+# TARGET Rust target triple (e.g. x86_64-unknown-linux-musl)
+# PLATFORM One of: linux, macos, windows
+# OUTDIR Output directory (created if needed)
+#
+# Reads: codex-rs/target/${TARGET}/release/codex[.exe]
+# (macOS only) codex-rs/target/${TARGET}/release/codex-${TARGET}.dmg
+#
+# Produces: ${OUTDIR}/agentx-${TARGET}.tar.gz (linux + macos)
+# ${OUTDIR}/agentx-${TARGET}.dmg (macos only)
+# ${OUTDIR}/agentx-${TARGET}.exe.zip (windows)
+# ${OUTDIR}/SHA256SUMS (always; appended)
+
+set -euo pipefail
+
+: "${TARGET:?TARGET env var required}"
+: "${PLATFORM:?PLATFORM env var required (linux|macos|windows)}"
+: "${OUTDIR:?OUTDIR env var required}"
+
+mkdir -p "$OUTDIR"
+
+case "$PLATFORM" in
+ linux|macos)
+ src="codex-rs/target/${TARGET}/release/codex"
+ [[ -f "$src" ]] || { echo "missing: $src"; exit 1; }
+
+ workdir="$(mktemp -d)"
+ cp "$src" "${workdir}/agentx"
+ chmod +x "${workdir}/agentx"
+ tar -C "$workdir" -czf "${OUTDIR}/agentx-${TARGET}.tar.gz" agentx
+ rm -rf "$workdir"
+
+ if [[ "$PLATFORM" == "macos" ]]; then
+ dmg_src="codex-rs/target/${TARGET}/release/codex-${TARGET}.dmg"
+ [[ -f "$dmg_src" ]] || { echo "missing: $dmg_src"; exit 1; }
+ cp "$dmg_src" "${OUTDIR}/agentx-${TARGET}.dmg"
+ fi
+ ;;
+
+ windows)
+ src="codex-rs/target/${TARGET}/release/codex.exe"
+ [[ -f "$src" ]] || { echo "missing: $src"; exit 1; }
+
+ workdir="$(mktemp -d)"
+ cp "$src" "${workdir}/agentx.exe"
+ archive="${OUTDIR}/agentx-${TARGET}.exe.zip"
+ # GitHub windows-latest's Git Bash has no `zip`; fall back to 7z (preinstalled).
+ if command -v zip >/dev/null 2>&1; then
+ (cd "$workdir" && zip -q "$archive" agentx.exe)
+ elif command -v 7z >/dev/null 2>&1; then
+ (cd "$workdir" && 7z a -tzip -bso0 -bsp0 "$archive" agentx.exe)
+ else
+ echo "neither zip nor 7z available" >&2
+ exit 1
+ fi
+ rm -rf "$workdir"
+ ;;
+
+ *)
+ echo "unknown PLATFORM: $PLATFORM" >&2
+ exit 2
+ ;;
+esac
+
+# Refresh SHA256SUMS to cover everything currently in OUTDIR (except itself).
+(
+ cd "$OUTDIR"
+ : > SHA256SUMS
+ for f in $(find . -maxdepth 1 -type f ! -name 'SHA256SUMS' | sort); do
+ sha256sum "$f" >> SHA256SUMS
+ done
+)
diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml
new file mode 100644
index 00000000000..a0fe2d767b5
--- /dev/null
+++ b/.github/workflows/agentx-release.yml
@@ -0,0 +1,563 @@
+# Release workflow for the agentserver/codex fork (distributed as "agentx").
+# To release:
+# make agentx-release VERSION=0.128.0-agentx.1
+# git push origin main && git push origin agentx-v0.128.0-agentx.1
+#
+# Upstream rust-release.yml is left untouched and stays dormant (we never push
+# rust-v* tags).
+
+name: agentx-release
+on:
+ push:
+ tags:
+ - "agentx-v*.*.*"
+
+concurrency:
+ group: ${{ github.workflow }}
+ cancel-in-progress: true
+
+permissions:
+ contents: write # GitHub Release create + asset upload
+ id-token: write # OIDC for any future cloud signing
+
+jobs:
+ tag-check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+ - name: Validate tag matches Cargo.toml version
+ shell: bash
+ run: |
+ set -euo pipefail
+ echo "::group::Tag validation"
+
+ [[ "${GITHUB_REF_TYPE}" == "tag" ]] \
+ || { echo "❌ Not a tag push"; exit 1; }
+ # Accept either x.y.z (stable, will publish to winget/choco) or
+ # x.y.z-agentx.N (iteration, GitHub Release only). Same regex as
+ # the Makefile's agentx-release target.
+ [[ "${GITHUB_REF_NAME}" =~ ^agentx-v[0-9]+\.[0-9]+\.[0-9]+(-agentx\.[0-9]+)?$ ]] \
+ || { echo "❌ Tag '${GITHUB_REF_NAME}' doesn't match expected format"; exit 1; }
+
+ tag_ver="${GITHUB_REF_NAME#agentx-v}"
+ cargo_ver="$(grep -m1 '^version' codex-rs/Cargo.toml \
+ | sed -E 's/version *= *"([^"]+)".*/\1/')"
+
+ [[ "${tag_ver}" == "${cargo_ver}" ]] \
+ || { echo "❌ Tag ${tag_ver} ≠ Cargo.toml ${cargo_ver}"; exit 1; }
+
+ echo "✅ Tag and Cargo.toml agree (${tag_ver})"
+ echo "::endgroup::"
+
+ build-linux:
+ needs: tag-check
+ name: build-linux - ${{ matrix.target }}
+ runs-on: ${{ matrix.runner }}
+ timeout-minutes: 90
+ permissions:
+ contents: read
+ id-token: write
+ defaults:
+ run:
+ working-directory: codex-rs
+ env:
+ CARGO_PROFILE_RELEASE_LTO: "thin"
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - runner: ubuntu-24.04
+ target: x86_64-unknown-linux-musl
+ - runner: ubuntu-24.04-arm
+ target: aarch64-unknown-linux-musl
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+
+ - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Install Linux bwrap build dependencies
+ shell: bash
+ run: |
+ set -euo pipefail
+ sudo apt-get update -y
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev
+
+ - name: Install UBSan runtime (musl)
+ shell: bash
+ run: |
+ set -euo pipefail
+ if command -v apt-get >/dev/null 2>&1; then
+ sudo apt-get update -y
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libubsan1
+ fi
+
+ - name: Use hermetic Cargo home (musl)
+ shell: bash
+ run: |
+ set -euo pipefail
+ cargo_home="${GITHUB_WORKSPACE}/.cargo-home"
+ mkdir -p "${cargo_home}/bin"
+ echo "CARGO_HOME=${cargo_home}" >> "$GITHUB_ENV"
+ echo "${cargo_home}/bin" >> "$GITHUB_PATH"
+ : > "${cargo_home}/config.toml"
+
+ - name: Install Zig
+ uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2
+ with:
+ version: 0.14.0
+
+ - name: Install musl build tools
+ env:
+ TARGET: ${{ matrix.target }}
+ run: bash "${GITHUB_WORKSPACE}/.github/scripts/install-musl-build-tools.sh"
+
+ - name: Configure rustc UBSan wrapper (musl host)
+ shell: bash
+ run: |
+ set -euo pipefail
+ ubsan=""
+ if command -v ldconfig >/dev/null 2>&1; then
+ ubsan="$(ldconfig -p | grep -m1 'libubsan\.so\.1' | sed -E 's/.*=> (.*)$/\1/')"
+ fi
+ wrapper_root="${RUNNER_TEMP:-/tmp}"
+ wrapper="${wrapper_root}/rustc-ubsan-wrapper"
+ cat > "${wrapper}" <> "$GITHUB_ENV"
+ echo "RUSTC_WORKSPACE_WRAPPER=" >> "$GITHUB_ENV"
+
+ - name: Clear sanitizer flags (musl)
+ shell: bash
+ run: |
+ set -euo pipefail
+ # Avoid problematic aws-lc jitter entropy code path on musl builders.
+ target_no_jitter="AWS_LC_SYS_NO_JITTER_ENTROPY_${{ matrix.target }}"
+ target_no_jitter="${target_no_jitter//-/_}"
+
+ sanitize_flags() {
+ local input="$1"
+ input="${input//-fsanitize=undefined/}"
+ input="${input//-fno-sanitize-recover=undefined/}"
+ input="${input//-fno-sanitize-trap=undefined/}"
+ echo "$input"
+ }
+
+ cflags="$(sanitize_flags "${CFLAGS-}")"
+ cxxflags="$(sanitize_flags "${CXXFLAGS-}")"
+
+ {
+ # aws-lc jitter entropy
+ echo "AWS_LC_SYS_NO_JITTER_ENTROPY=1"
+ echo "${target_no_jitter}=1"
+ # Clear global Rust flags so host/proc-macro builds don't pull in UBSan.
+ echo "RUSTFLAGS="
+ echo "CARGO_ENCODED_RUSTFLAGS="
+ echo "RUSTDOCFLAGS="
+ # Override any runner-level Cargo config rustflags as well.
+ echo "CARGO_BUILD_RUSTFLAGS="
+ echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUSTFLAGS="
+ echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_RUSTFLAGS="
+ echo "CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="
+ echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="
+ echo "CFLAGS=${cflags}"
+ echo "CXXFLAGS=${cxxflags}"
+ } >> "$GITHUB_ENV"
+
+ - name: Configure musl rusty_v8 artifact overrides and verify checksums
+ uses: ./.github/actions/setup-rusty-v8-musl
+ with:
+ target: ${{ matrix.target }}
+
+ - name: Cargo build (codex)
+ shell: bash
+ run: cargo build --target ${{ matrix.target }} --release --bin codex
+
+ - name: Package as agentx-${{ matrix.target }}.tar.gz
+ shell: bash
+ working-directory: ${{ github.workspace }}
+ env:
+ TARGET: ${{ matrix.target }}
+ PLATFORM: linux
+ OUTDIR: ${{ github.workspace }}/dist
+ run: bash .github/workflows/agentx-release-package.sh
+
+ - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
+ with:
+ name: agentx-${{ matrix.target }}
+ path: dist/*
+ if-no-files-found: error
+
+ build-macos:
+ needs: tag-check
+ name: build-macos - ${{ matrix.target }}
+ runs-on: macos-15
+ timeout-minutes: 90
+ permissions:
+ contents: read
+ id-token: write
+ defaults:
+ run:
+ working-directory: codex-rs
+ env:
+ CARGO_PROFILE_RELEASE_LTO: "thin"
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: aarch64-apple-darwin
+ - target: x86_64-apple-darwin
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+ - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Cargo build (codex)
+ shell: bash
+ run: cargo build --target ${{ matrix.target }} --release --bin codex
+
+ - name: MacOS code signing (binary)
+ uses: ./.github/actions/macos-code-sign
+ with:
+ target: ${{ matrix.target }}
+ binaries: codex
+ sign-binaries: "true"
+ sign-dmg: "false"
+ apple-certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }}
+ apple-certificate-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
+ apple-notarization-key-p8: ${{ secrets.APPLE_NOTARIZATION_KEY_P8 }}
+ apple-notarization-key-id: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
+ apple-notarization-issuer-id: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }}
+
+ - name: Build macOS dmg
+ shell: bash
+ run: |
+ set -euo pipefail
+ target="${{ matrix.target }}"
+ release_dir="target/${target}/release"
+ dmg_root="${RUNNER_TEMP}/agentx-dmg-root"
+ # The dmg file name stays codex-... here so the next macos-code-sign
+ # step (which hardcodes that path) can find it. We rename to agentx-*
+ # in the packaging step after signing+stapling.
+ dmg_path="${release_dir}/codex-${target}.dmg"
+ volname="AgentX (${target})"
+
+ rm -rf "$dmg_root"
+ mkdir -p "$dmg_root"
+ # Inside the dmg the binary is named 'agentx' for end-user clarity.
+ ditto "${release_dir}/codex" "${dmg_root}/agentx"
+
+ rm -f "$dmg_path"
+ hdiutil create \
+ -volname "$volname" \
+ -srcfolder "$dmg_root" \
+ -format UDZO \
+ -ov \
+ "$dmg_path"
+
+ [[ -f "$dmg_path" ]] || { echo "dmg missing"; exit 1; }
+
+ - name: MacOS code signing (dmg)
+ uses: ./.github/actions/macos-code-sign
+ with:
+ target: ${{ matrix.target }}
+ sign-binaries: "false"
+ sign-dmg: "true"
+ apple-certificate: ${{ secrets.APPLE_CERTIFICATE_P12 }}
+ apple-certificate-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
+ apple-notarization-key-p8: ${{ secrets.APPLE_NOTARIZATION_KEY_P8 }}
+ apple-notarization-key-id: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
+ apple-notarization-issuer-id: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }}
+
+ - name: Package as agentx-${{ matrix.target }}.{tar.gz,dmg}
+ shell: bash
+ working-directory: ${{ github.workspace }}
+ env:
+ TARGET: ${{ matrix.target }}
+ PLATFORM: macos
+ OUTDIR: ${{ github.workspace }}/dist
+ run: bash .github/workflows/agentx-release-package.sh
+
+ - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
+ with:
+ name: agentx-${{ matrix.target }}
+ path: dist/*
+ if-no-files-found: error
+
+ build-windows:
+ needs: tag-check
+ name: build-windows - ${{ matrix.target }}
+ runs-on: windows-latest
+ timeout-minutes: 90
+ permissions:
+ contents: read
+ defaults:
+ run:
+ working-directory: codex-rs
+ env:
+ CARGO_PROFILE_RELEASE_LTO: "thin"
+
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: x86_64-pc-windows-msvc
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+ - uses: dtolnay/rust-toolchain@a0b273b48ed29de4470960879e8381ff45632f26 # 1.93.0
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Cargo build (codex)
+ shell: bash
+ run: cargo build --target ${{ matrix.target }} --release --bin codex
+
+ - name: Package as agentx-${{ matrix.target }}.exe.zip
+ shell: bash
+ working-directory: ${{ github.workspace }}
+ env:
+ TARGET: ${{ matrix.target }}
+ PLATFORM: windows
+ OUTDIR: ${{ github.workspace }}/dist
+ run: bash .github/workflows/agentx-release-package.sh
+
+ - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
+ with:
+ name: agentx-${{ matrix.target }}
+ path: dist/*
+ if-no-files-found: error
+
+ release:
+ needs: [build-linux, build-macos, build-windows]
+ name: release
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ outputs:
+ version: ${{ steps.derive.outputs.version }}
+ clean_version: ${{ steps.derive.outputs.clean_version }}
+ tag: ${{ github.ref_name }}
+ is_stable: ${{ steps.derive.outputs.is_stable }}
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+
+ - name: Generate release notes from tag commit message
+ id: release_notes
+ shell: bash
+ run: |
+ set -euo pipefail
+ commit="$(git rev-parse "${GITHUB_SHA}^{commit}")"
+ notes_path="${RUNNER_TEMP}/release-notes.md"
+ git log -1 --format=%B "${commit}" > "${notes_path}"
+ echo >> "${notes_path}"
+ echo "path=${notes_path}" >> "${GITHUB_OUTPUT}"
+
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
+ with:
+ path: dist
+ pattern: agentx-*
+ merge-multiple: true
+
+ - name: List staged artifacts
+ run: ls -R dist/
+
+ - name: Regenerate combined SHA256SUMS across all platforms
+ shell: bash
+ run: |
+ set -euo pipefail
+ cd dist
+ # Glob agentx-* matches only release artifacts (avoids the SC2094
+ # foot-gun where a `find ... > SHA256SUMS.tmp` pipeline would race
+ # with the eager-created tmp file and hash an empty SHA256SUMS.tmp
+ # entry into the output).
+ sha256sum agentx-* > SHA256SUMS
+ cat SHA256SUMS
+
+ - name: Derive version strings
+ id: derive
+ shell: bash
+ run: |
+ set -euo pipefail
+ version="${GITHUB_REF_NAME#agentx-v}" # 0.128.0-agentx.1
+ clean_version="${version%%-*}" # 0.128.0
+ if [[ "${version}" == "${clean_version}" ]]; then
+ is_stable="true"
+ else
+ is_stable="false"
+ fi
+ {
+ echo "version=${version}"
+ echo "clean_version=${clean_version}"
+ echo "is_stable=${is_stable}"
+ } >> "${GITHUB_OUTPUT}"
+
+ - name: Create GitHub Release
+ uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
+ with:
+ name: ${{ steps.derive.outputs.version }}
+ tag_name: ${{ github.ref_name }}
+ body_path: ${{ steps.release_notes.outputs.path }}
+ files: dist/**
+ prerelease: ${{ steps.derive.outputs.is_stable == 'false' }}
+
+ winget:
+ name: winget
+ needs: release
+ if: ${{ needs.release.outputs.is_stable == 'true' }}
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+
+ steps:
+ - name: Publish to WinGet
+ uses: vedantmgoyal9/winget-releaser@7bd472be23763def6e16bd06cc8b1cdfab0e2fd5
+ with:
+ identifier: Agentserver.AgentX
+ version: ${{ needs.release.outputs.clean_version }}
+ release-tag: ${{ needs.release.outputs.tag }}
+ fork-user: agentserver
+ installers-regex: '^agentx-x86_64-pc-windows-msvc\.exe\.zip$'
+ token: ${{ secrets.WINGET_PUBLISH_PAT }}
+
+ choco:
+ name: chocolatey
+ needs: release
+ if: ${{ needs.release.outputs.is_stable == 'true' }}
+ runs-on: windows-latest
+ permissions:
+ contents: read
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+
+ - name: Stage chocolatey package
+ shell: bash
+ env:
+ VERSION: ${{ needs.release.outputs.clean_version }}
+ TAG: ${{ needs.release.outputs.tag }}
+ run: |
+ set -euo pipefail
+ asset="agentx-x86_64-pc-windows-msvc.exe.zip"
+ url="https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG}/${asset}"
+
+ mkdir -p staged/tools
+ curl -sSLo "staged/tools/${asset}" "$url"
+ sha256="$(sha256sum "staged/tools/${asset}" | awk '{print $1}')"
+ rm "staged/tools/${asset}" # choco install script downloads it at install time
+
+ # Static files
+ cp .github/chocolatey/tools/chocolateyuninstall.ps1 staged/tools/
+ cp .github/chocolatey/tools/LICENSE.txt staged/tools/
+ cp .github/chocolatey/tools/VERIFICATION.txt staged/tools/
+
+ # Templated files
+ sed -e "s|__VERSION__|${VERSION}|g" \
+ .github/chocolatey/agentx.nuspec.template \
+ > staged/agentx.nuspec
+
+ sed -e "s|__URL64__|${url}|g" \
+ -e "s|__SHA256_64__|${sha256}|g" \
+ .github/chocolatey/tools/chocolateyinstall.ps1.template \
+ > staged/tools/chocolateyinstall.ps1
+
+ ls -R staged/
+
+ - name: Pack and push
+ shell: pwsh
+ env:
+ CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }}
+ working-directory: staged
+ run: |
+ choco pack agentx.nuspec
+ choco push agentx.${{ needs.release.outputs.clean_version }}.nupkg `
+ --api-key "$env:CHOCO_API_KEY" `
+ --source "https://push.chocolatey.org/"
+
+ homebrew:
+ name: homebrew-tap
+ needs: release
+ if: ${{ needs.release.outputs.is_stable == 'true' }}
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+
+ steps:
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+
+ - name: Compute SHA256 for each platform asset
+ id: shas
+ shell: bash
+ env:
+ TAG: ${{ needs.release.outputs.tag }}
+ run: |
+ set -euo pipefail
+ base="https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG}"
+ declare -A assets=(
+ [macos_arm]=agentx-aarch64-apple-darwin.tar.gz
+ [macos_intel]=agentx-x86_64-apple-darwin.tar.gz
+ [linux_arm]=agentx-aarch64-unknown-linux-musl.tar.gz
+ [linux_intel]=agentx-x86_64-unknown-linux-musl.tar.gz
+ )
+ {
+ for key in macos_arm macos_intel linux_arm linux_intel; do
+ asset="${assets[$key]}"
+ tmp="$(mktemp)"
+ curl -sSLo "$tmp" "${base}/${asset}"
+ sha="$(sha256sum "$tmp" | awk '{print $1}')"
+ rm "$tmp"
+ echo "${key}=${sha}"
+ done
+ } >> "$GITHUB_OUTPUT"
+
+ - name: Render cask file
+ env:
+ VERSION: ${{ needs.release.outputs.clean_version }}
+ SHA256_MACOS_ARM: ${{ steps.shas.outputs.macos_arm }}
+ SHA256_MACOS_INTEL: ${{ steps.shas.outputs.macos_intel }}
+ SHA256_LINUX_ARM: ${{ steps.shas.outputs.linux_arm }}
+ SHA256_LINUX_INTEL: ${{ steps.shas.outputs.linux_intel }}
+ run: |
+ set -euo pipefail
+ mkdir -p rendered/Casks
+ sed -e "s|__VERSION__|${VERSION}|g" \
+ -e "s|__SHA256_MACOS_ARM__|${SHA256_MACOS_ARM}|g" \
+ -e "s|__SHA256_MACOS_INTEL__|${SHA256_MACOS_INTEL}|g" \
+ -e "s|__SHA256_LINUX_ARM__|${SHA256_LINUX_ARM}|g" \
+ -e "s|__SHA256_LINUX_INTEL__|${SHA256_LINUX_INTEL}|g" \
+ .github/homebrew/agentx.rb.template \
+ > rendered/Casks/agentx.rb
+ cat rendered/Casks/agentx.rb
+
+ - name: Push cask to agentserver/homebrew-tap
+ env:
+ GH_TOKEN: ${{ secrets.HOMEBREW_TAP_PAT }}
+ VERSION: ${{ needs.release.outputs.clean_version }}
+ run: |
+ set -euo pipefail
+ git clone "https://x-access-token:${GH_TOKEN}@github.com/agentserver/homebrew-tap.git" tap
+ cp rendered/Casks/agentx.rb tap/Casks/agentx.rb
+ cd tap
+ git config user.name "agentx-release-bot"
+ git config user.email "agentx-release-bot@users.noreply.github.com"
+ git add Casks/agentx.rb
+ if git diff --cached --quiet; then
+ echo "No cask changes to push (already at ${VERSION})."
+ exit 0
+ fi
+ git commit -m "agentx ${VERSION}"
+ git push origin HEAD
diff --git a/.github/workflows/tests/fixtures/.gitkeep b/.github/workflows/tests/fixtures/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/.github/workflows/tests/test_package.sh b/.github/workflows/tests/test_package.sh
new file mode 100755
index 00000000000..0a6bf3dedf6
--- /dev/null
+++ b/.github/workflows/tests/test_package.sh
@@ -0,0 +1,112 @@
+#!/usr/bin/env bash
+# Unit tests for agentx-release-package.sh.
+# Each test: set up a fake codex binary in a temp tree, invoke the
+# packaging script, assert on the output archive contents.
+
+set -euo pipefail
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+PACKAGE_SH="${SCRIPT_DIR}/../agentx-release-package.sh"
+
+[[ -f "$PACKAGE_SH" ]] || { echo "FAIL: $PACKAGE_SH not found"; exit 1; }
+
+passed=0
+failed=0
+fail() { echo "FAIL: $1"; failed=$((failed + 1)); }
+pass() { echo "PASS: $1"; passed=$((passed + 1)); }
+
+with_tempdir() {
+ local d
+ d="$(mktemp -d)"
+ trap 'rm -rf "$d"' RETURN
+ pushd "$d" > /dev/null
+ "$@"
+ popd > /dev/null
+}
+
+# Test 1: Linux tar.gz contains a binary named 'agentx' with the right contents.
+test_linux_tarball() {
+ local target="x86_64-unknown-linux-musl"
+ mkdir -p "codex-rs/target/${target}/release"
+ printf 'fake-binary-payload' > "codex-rs/target/${target}/release/codex"
+ chmod +x "codex-rs/target/${target}/release/codex"
+
+ TARGET="$target" PLATFORM=linux OUTDIR="$PWD/dist" bash "$PACKAGE_SH"
+
+ local archive="dist/agentx-${target}.tar.gz"
+ [[ -f "$archive" ]] || { fail "linux tarball missing: $archive"; return; }
+
+ mkdir -p extract && tar -xzf "$archive" -C extract
+ [[ -f extract/agentx ]] || { fail "tarball missing 'agentx' entry"; return; }
+ [[ "$(cat extract/agentx)" == "fake-binary-payload" ]] \
+ || { fail "tarball binary content mismatch"; return; }
+ [[ -x extract/agentx ]] || { fail "tarball binary not executable"; return; }
+ pass "linux tarball"
+}
+
+# Test 2: Windows .exe.zip contains 'agentx.exe' with the right contents.
+test_windows_zip() {
+ local target="x86_64-pc-windows-msvc"
+ mkdir -p "codex-rs/target/${target}/release"
+ printf 'fake-windows-payload' > "codex-rs/target/${target}/release/codex.exe"
+
+ TARGET="$target" PLATFORM=windows OUTDIR="$PWD/dist" bash "$PACKAGE_SH"
+
+ local archive="dist/agentx-${target}.exe.zip"
+ [[ -f "$archive" ]] || { fail "windows zip missing: $archive"; return; }
+
+ mkdir -p extract && unzip -q "$archive" -d extract
+ [[ -f extract/agentx.exe ]] || { fail "zip missing 'agentx.exe' entry"; return; }
+ [[ "$(cat extract/agentx.exe)" == "fake-windows-payload" ]] \
+ || { fail "zip binary content mismatch"; return; }
+ pass "windows zip"
+}
+
+# Test 3: macOS tar.gz contains 'agentx', and dmg passthrough works (we don't
+# build a real dmg here; we mock its presence and assert it's renamed/copied).
+test_macos_outputs() {
+ local target="aarch64-apple-darwin"
+ mkdir -p "codex-rs/target/${target}/release"
+ printf 'fake-mac-binary' > "codex-rs/target/${target}/release/codex"
+ chmod +x "codex-rs/target/${target}/release/codex"
+ printf 'fake-dmg-content' > "codex-rs/target/${target}/release/codex-${target}.dmg"
+
+ TARGET="$target" PLATFORM=macos OUTDIR="$PWD/dist" bash "$PACKAGE_SH"
+
+ local tarball="dist/agentx-${target}.tar.gz"
+ local dmg="dist/agentx-${target}.dmg"
+ [[ -f "$tarball" ]] || { fail "macos tarball missing: $tarball"; return; }
+ [[ -f "$dmg" ]] || { fail "macos dmg missing: $dmg"; return; }
+
+ mkdir -p extract && tar -xzf "$tarball" -C extract
+ [[ -f extract/agentx ]] || { fail "macos tarball missing 'agentx'"; return; }
+ [[ "$(cat extract/agentx)" == "fake-mac-binary" ]] \
+ || { fail "macos tarball binary content mismatch"; return; }
+ [[ "$(cat "$dmg")" == "fake-dmg-content" ]] \
+ || { fail "macos dmg content not preserved"; return; }
+ pass "macos outputs"
+}
+
+# Test 4: SHA256SUMS file is generated and contains every artifact.
+test_sha256sums() {
+ local target="x86_64-unknown-linux-musl"
+ mkdir -p "codex-rs/target/${target}/release"
+ printf 'x' > "codex-rs/target/${target}/release/codex"
+ chmod +x "codex-rs/target/${target}/release/codex"
+
+ TARGET="$target" PLATFORM=linux OUTDIR="$PWD/dist" bash "$PACKAGE_SH"
+
+ local sums="dist/SHA256SUMS"
+ [[ -f "$sums" ]] || { fail "SHA256SUMS missing"; return; }
+ grep -q "agentx-${target}.tar.gz" "$sums" \
+ || { fail "SHA256SUMS missing tarball entry"; return; }
+ pass "sha256sums"
+}
+
+with_tempdir test_linux_tarball
+with_tempdir test_windows_zip
+with_tempdir test_macos_outputs
+with_tempdir test_sha256sums
+
+echo "Results: ${passed} passed, ${failed} failed"
+[[ $failed -eq 0 ]] || exit 1
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000000..9bc559faf84
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,26 @@
+# Fork-only release helpers for agentx. Upstream codex has no top-level Makefile.
+
+.PHONY: agentx-release agentx-release-prerelease
+
+# Cut an agentx release. Bumps Cargo.toml workspace.package.version, refreshes
+# Cargo.lock, commits, and tags.
+#
+# Usage: make agentx-release VERSION=0.128.0-agentx.1
+#
+# After this target completes, push to remote:
+# git push origin main && git push origin agentx-v$(VERSION)
+agentx-release:
+ @test -n "$(VERSION)" || (echo "VERSION=x.y.z[-agentx.N] required"; exit 1)
+ @echo "$(VERSION)" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+(-agentx\.[0-9]+)?$$' \
+ || (echo "VERSION must match x.y.z or x.y.z-agentx.N (got: $(VERSION))"; exit 1)
+ sed -i 's/^version = .*/version = "$(VERSION)"/' codex-rs/Cargo.toml
+ cd codex-rs && cargo update --workspace --quiet
+ git commit -am "chore(release): agentx $(VERSION)"
+ git tag agentx-v$(VERSION)
+ @echo
+ @echo "Tagged agentx-v$(VERSION). Now run:"
+ @echo " git push origin main && git push origin agentx-v$(VERSION)"
+
+# Convenience for the very first dry-run release.
+agentx-release-prerelease:
+ $(MAKE) agentx-release VERSION=0.128.0-agentx.0
diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock
index eb2d01e9a6e..6c037b44a8a 100644
--- a/codex-rs/Cargo.lock
+++ b/codex-rs/Cargo.lock
@@ -402,7 +402,7 @@ checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea"
[[package]]
name = "app_test_support"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -1750,7 +1750,7 @@ dependencies = [
[[package]]
name = "codex-agent-graph-store"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"codex-protocol",
@@ -1765,7 +1765,7 @@ dependencies = [
[[package]]
name = "codex-agent-identity"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -1784,7 +1784,7 @@ dependencies = [
[[package]]
name = "codex-analytics"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-app-server-protocol",
"codex-git-utils",
@@ -1804,7 +1804,7 @@ dependencies = [
[[package]]
name = "codex-ansi-escape"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"ansi-to-tui",
"ratatui",
@@ -1813,7 +1813,7 @@ dependencies = [
[[package]]
name = "codex-api"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"assert_matches",
@@ -1847,7 +1847,7 @@ dependencies = [
[[package]]
name = "codex-app-server"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"app_test_support",
@@ -1929,7 +1929,7 @@ dependencies = [
[[package]]
name = "codex-app-server-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-app-server",
"codex-app-server-protocol",
@@ -1953,7 +1953,7 @@ dependencies = [
[[package]]
name = "codex-app-server-protocol"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -1980,7 +1980,7 @@ dependencies = [
[[package]]
name = "codex-app-server-test-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -2001,7 +2001,7 @@ dependencies = [
[[package]]
name = "codex-app-server-transport"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"axum",
@@ -2040,7 +2040,7 @@ dependencies = [
[[package]]
name = "codex-apply-patch"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"assert_cmd",
@@ -2059,7 +2059,7 @@ dependencies = [
[[package]]
name = "codex-arg0"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-apply-patch",
@@ -2076,7 +2076,7 @@ dependencies = [
[[package]]
name = "codex-async-utils"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"pretty_assertions",
@@ -2086,7 +2086,7 @@ dependencies = [
[[package]]
name = "codex-aws-auth"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"aws-config",
"aws-credential-types",
@@ -2101,7 +2101,7 @@ dependencies = [
[[package]]
name = "codex-backend-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-api",
@@ -2118,7 +2118,7 @@ dependencies = [
[[package]]
name = "codex-backend-openapi-models"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"serde",
"serde_json",
@@ -2127,7 +2127,7 @@ dependencies = [
[[package]]
name = "codex-chatgpt"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -2150,7 +2150,7 @@ dependencies = [
[[package]]
name = "codex-cli"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"assert_cmd",
@@ -2207,7 +2207,7 @@ dependencies = [
[[package]]
name = "codex-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"bytes",
@@ -2238,7 +2238,7 @@ dependencies = [
[[package]]
name = "codex-cloud-requirements"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"base64 0.22.1",
@@ -2263,7 +2263,7 @@ dependencies = [
[[package]]
name = "codex-cloud-tasks"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -2295,7 +2295,7 @@ dependencies = [
[[package]]
name = "codex-cloud-tasks-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -2310,7 +2310,7 @@ dependencies = [
[[package]]
name = "codex-cloud-tasks-mock-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"chrono",
@@ -2320,7 +2320,7 @@ dependencies = [
[[package]]
name = "codex-code-mode"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-channel",
"async-trait",
@@ -2337,11 +2337,11 @@ dependencies = [
[[package]]
name = "codex-collaboration-mode-templates"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
[[package]]
name = "codex-config"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -2387,7 +2387,7 @@ dependencies = [
[[package]]
name = "codex-connectors"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-app-server-protocol",
@@ -2399,7 +2399,7 @@ dependencies = [
[[package]]
name = "codex-core"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"arc-swap",
@@ -2519,7 +2519,7 @@ dependencies = [
[[package]]
name = "codex-core-api"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-analytics",
"codex-app-server-protocol",
@@ -2537,7 +2537,7 @@ dependencies = [
[[package]]
name = "codex-core-plugins"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"chrono",
@@ -2574,7 +2574,7 @@ dependencies = [
[[package]]
name = "codex-core-skills"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-analytics",
@@ -2605,7 +2605,7 @@ dependencies = [
[[package]]
name = "codex-debug-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -2617,7 +2617,7 @@ dependencies = [
[[package]]
name = "codex-device-key"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"base64 0.22.1",
@@ -2633,7 +2633,7 @@ dependencies = [
[[package]]
name = "codex-exec"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"assert_cmd",
@@ -2678,7 +2678,7 @@ dependencies = [
[[package]]
name = "codex-exec-server"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"arc-swap",
@@ -2714,7 +2714,7 @@ dependencies = [
[[package]]
name = "codex-execpolicy"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -2731,7 +2731,7 @@ dependencies = [
[[package]]
name = "codex-execpolicy-legacy"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"allocative",
"anyhow",
@@ -2751,7 +2751,7 @@ dependencies = [
[[package]]
name = "codex-experimental-api-macros"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"proc-macro2",
"quote",
@@ -2760,7 +2760,7 @@ dependencies = [
[[package]]
name = "codex-external-agent-migration"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-hooks",
"pretty_assertions",
@@ -2772,7 +2772,7 @@ dependencies = [
[[package]]
name = "codex-external-agent-sessions"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"chrono",
"codex-app-server-protocol",
@@ -2786,7 +2786,7 @@ dependencies = [
[[package]]
name = "codex-features"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-otel",
"codex-protocol",
@@ -2799,7 +2799,7 @@ dependencies = [
[[package]]
name = "codex-feedback"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-login",
@@ -2812,7 +2812,7 @@ dependencies = [
[[package]]
name = "codex-file-search"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -2828,7 +2828,7 @@ dependencies = [
[[package]]
name = "codex-file-system"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"codex-protocol",
@@ -2838,7 +2838,7 @@ dependencies = [
[[package]]
name = "codex-git-utils"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"chrono",
@@ -2862,7 +2862,7 @@ dependencies = [
[[package]]
name = "codex-hooks"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"chrono",
@@ -2882,7 +2882,7 @@ dependencies = [
[[package]]
name = "codex-install-context"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-utils-home-dir",
"pretty_assertions",
@@ -2891,7 +2891,7 @@ dependencies = [
[[package]]
name = "codex-keyring-store"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"keyring",
"tracing",
@@ -2899,7 +2899,7 @@ dependencies = [
[[package]]
name = "codex-linux-sandbox"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"cc",
"clap",
@@ -2923,7 +2923,7 @@ dependencies = [
[[package]]
name = "codex-lmstudio"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-core",
"codex-model-provider-info",
@@ -2937,7 +2937,7 @@ dependencies = [
[[package]]
name = "codex-login"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -2979,7 +2979,7 @@ dependencies = [
[[package]]
name = "codex-mcp"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-channel",
@@ -3011,7 +3011,7 @@ dependencies = [
[[package]]
name = "codex-mcp-server"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-arg0",
@@ -3042,7 +3042,7 @@ dependencies = [
[[package]]
name = "codex-memories-mcp"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-utils-absolute-path",
@@ -3059,7 +3059,7 @@ dependencies = [
[[package]]
name = "codex-memories-read"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-protocol",
"codex-shell-command",
@@ -3073,7 +3073,7 @@ dependencies = [
[[package]]
name = "codex-memories-write"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"chrono",
@@ -3108,7 +3108,7 @@ dependencies = [
[[package]]
name = "codex-model-provider"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"codex-agent-identity",
@@ -3132,7 +3132,7 @@ dependencies = [
[[package]]
name = "codex-model-provider-info"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-api",
"codex-app-server-protocol",
@@ -3149,7 +3149,7 @@ dependencies = [
[[package]]
name = "codex-models-manager"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"chrono",
@@ -3170,7 +3170,7 @@ dependencies = [
[[package]]
name = "codex-network-proxy"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -3201,7 +3201,7 @@ dependencies = [
[[package]]
name = "codex-ollama"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"assert_matches",
"async-stream",
@@ -3220,7 +3220,7 @@ dependencies = [
[[package]]
name = "codex-otel"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"chrono",
"codex-api",
@@ -3252,7 +3252,7 @@ dependencies = [
[[package]]
name = "codex-plugin"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-config",
"codex-utils-absolute-path",
@@ -3262,7 +3262,7 @@ dependencies = [
[[package]]
name = "codex-process-hardening"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"libc",
"pretty_assertions",
@@ -3270,7 +3270,7 @@ dependencies = [
[[package]]
name = "codex-protocol"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"chardetng",
@@ -3311,7 +3311,7 @@ dependencies = [
[[package]]
name = "codex-realtime-webrtc"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"libwebrtc",
"thiserror 2.0.18",
@@ -3320,7 +3320,7 @@ dependencies = [
[[package]]
name = "codex-response-debug-context"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"base64 0.22.1",
"codex-api",
@@ -3331,7 +3331,7 @@ dependencies = [
[[package]]
name = "codex-responses-api-proxy"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -3348,7 +3348,7 @@ dependencies = [
[[package]]
name = "codex-rmcp-client"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"axum",
@@ -3385,7 +3385,7 @@ dependencies = [
[[package]]
name = "codex-rollout"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -3410,7 +3410,7 @@ dependencies = [
[[package]]
name = "codex-rollout-trace"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-code-mode",
@@ -3425,7 +3425,7 @@ dependencies = [
[[package]]
name = "codex-sandboxing"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -3446,7 +3446,7 @@ dependencies = [
[[package]]
name = "codex-secrets"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"age",
"anyhow",
@@ -3467,7 +3467,7 @@ dependencies = [
[[package]]
name = "codex-shell-command"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -3487,7 +3487,7 @@ dependencies = [
[[package]]
name = "codex-shell-escalation"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"async-trait",
@@ -3508,7 +3508,7 @@ dependencies = [
[[package]]
name = "codex-skills"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-utils-absolute-path",
"include_dir",
@@ -3517,7 +3517,7 @@ dependencies = [
[[package]]
name = "codex-state"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"chrono",
@@ -3540,7 +3540,7 @@ dependencies = [
[[package]]
name = "codex-stdio-to-uds"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-uds",
@@ -3552,7 +3552,7 @@ dependencies = [
[[package]]
name = "codex-terminal-detection"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"pretty_assertions",
"tracing",
@@ -3560,7 +3560,7 @@ dependencies = [
[[package]]
name = "codex-test-binary-support"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-arg0",
"tempfile",
@@ -3568,7 +3568,7 @@ dependencies = [
[[package]]
name = "codex-thread-manager-sample"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"clap",
@@ -3579,7 +3579,7 @@ dependencies = [
[[package]]
name = "codex-thread-store"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-trait",
"chrono",
@@ -3604,7 +3604,7 @@ dependencies = [
[[package]]
name = "codex-tools"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-app-server-protocol",
"codex-code-mode",
@@ -3621,7 +3621,7 @@ dependencies = [
[[package]]
name = "codex-tui"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"arboard",
@@ -3727,7 +3727,7 @@ dependencies = [
[[package]]
name = "codex-uds"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"async-io",
"pretty_assertions",
@@ -3739,7 +3739,7 @@ dependencies = [
[[package]]
name = "codex-utils-absolute-path"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"dirs",
"dunce",
@@ -3753,14 +3753,14 @@ dependencies = [
[[package]]
name = "codex-utils-approval-presets"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-protocol",
]
[[package]]
name = "codex-utils-cache"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"lru 0.16.3",
"sha1",
@@ -3769,7 +3769,7 @@ dependencies = [
[[package]]
name = "codex-utils-cargo-bin"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"assert_cmd",
"runfiles",
@@ -3778,7 +3778,7 @@ dependencies = [
[[package]]
name = "codex-utils-cli"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"clap",
"codex-protocol",
@@ -3789,15 +3789,15 @@ dependencies = [
[[package]]
name = "codex-utils-elapsed"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
[[package]]
name = "codex-utils-fuzzy-match"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
[[package]]
name = "codex-utils-home-dir"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-utils-absolute-path",
"dirs",
@@ -3807,7 +3807,7 @@ dependencies = [
[[package]]
name = "codex-utils-image"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"base64 0.22.1",
"codex-utils-cache",
@@ -3819,7 +3819,7 @@ dependencies = [
[[package]]
name = "codex-utils-json-to-toml"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"pretty_assertions",
"serde_json",
@@ -3828,7 +3828,7 @@ dependencies = [
[[package]]
name = "codex-utils-oss"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-core",
"codex-lmstudio",
@@ -3838,7 +3838,7 @@ dependencies = [
[[package]]
name = "codex-utils-output-truncation"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-protocol",
"codex-utils-string",
@@ -3847,7 +3847,7 @@ dependencies = [
[[package]]
name = "codex-utils-path"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-utils-absolute-path",
"dunce",
@@ -3857,7 +3857,7 @@ dependencies = [
[[package]]
name = "codex-utils-plugins"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-exec-server",
"codex-login",
@@ -3870,7 +3870,7 @@ dependencies = [
[[package]]
name = "codex-utils-pty"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"filedescriptor",
@@ -3886,7 +3886,7 @@ dependencies = [
[[package]]
name = "codex-utils-readiness"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"assert_matches",
"async-trait",
@@ -3897,14 +3897,14 @@ dependencies = [
[[package]]
name = "codex-utils-rustls-provider"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"rustls",
]
[[package]]
name = "codex-utils-sandbox-summary"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"codex-core",
"codex-model-provider-info",
@@ -3915,7 +3915,7 @@ dependencies = [
[[package]]
name = "codex-utils-sleep-inhibitor"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"core-foundation 0.9.4",
"libc",
@@ -3925,14 +3925,14 @@ dependencies = [
[[package]]
name = "codex-utils-stream-parser"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"pretty_assertions",
]
[[package]]
name = "codex-utils-string"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"pretty_assertions",
"regex-lite",
@@ -3942,14 +3942,14 @@ dependencies = [
[[package]]
name = "codex-utils-template"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"pretty_assertions",
]
[[package]]
name = "codex-v8-poc"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"pretty_assertions",
"v8",
@@ -3957,7 +3957,7 @@ dependencies = [
[[package]]
name = "codex-windows-sandbox"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -4208,7 +4208,7 @@ dependencies = [
[[package]]
name = "core_test_support"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"assert_cmd",
@@ -8388,7 +8388,7 @@ dependencies = [
[[package]]
name = "mcp_test_support"
-version = "0.0.0"
+version = "0.128.0-agentx.1"
dependencies = [
"anyhow",
"codex-login",
diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml
index ce3e91626dd..fd987ef0bc9 100644
--- a/codex-rs/Cargo.toml
+++ b/codex-rs/Cargo.toml
@@ -111,7 +111,7 @@ members = [
resolver = "2"
[workspace.package]
-version = "0.0.0"
+version = "0.128.0-agentx.1"
# 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