From aa616443487becb62b716f0ab560e68e4d875baf Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 11:19:55 +0800 Subject: [PATCH 01/18] test(agentx-release): packaging script test harness --- .github/workflows/tests/fixtures/.gitkeep | 0 .github/workflows/tests/test_package.sh | 112 ++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 .github/workflows/tests/fixtures/.gitkeep create mode 100755 .github/workflows/tests/test_package.sh 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..7e36798c682 --- /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 From 6a73e4988b336e7bcde80320281772b7bd450113 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 11:54:49 +0800 Subject: [PATCH 02/18] =?UTF-8?q?feat(agentx-release):=20packaging=20scrip?= =?UTF-8?q?t=20(codex=E2=86=92agentx=20rename=20+=20archive)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/agentx-release-package.sh | 66 +++++++++++++++++++++ .github/workflows/tests/test_package.sh | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100755 .github/workflows/agentx-release-package.sh diff --git a/.github/workflows/agentx-release-package.sh b/.github/workflows/agentx-release-package.sh new file mode 100755 index 00000000000..cda3cb490c2 --- /dev/null +++ b/.github/workflows/agentx-release-package.sh @@ -0,0 +1,66 @@ +#!/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" + (cd "$workdir" && zip -q "${OUTDIR}/agentx-${TARGET}.exe.zip" agentx.exe) + 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/tests/test_package.sh b/.github/workflows/tests/test_package.sh index 7e36798c682..0a6bf3dedf6 100755 --- a/.github/workflows/tests/test_package.sh +++ b/.github/workflows/tests/test_package.sh @@ -18,7 +18,7 @@ pass() { echo "PASS: $1"; passed=$((passed + 1)); } with_tempdir() { local d d="$(mktemp -d)" - trap "rm -rf '$d'" RETURN + trap 'rm -rf "$d"' RETURN pushd "$d" > /dev/null "$@" popd > /dev/null From c57275b40e09c4b118fe4ec63ff87dc4db4cfed0 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 12:03:30 +0800 Subject: [PATCH 03/18] feat(agentx-release): make agentx-release target for tagging --- Makefile | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Makefile 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 From 8d8f6f9a1865328da7cea3f28b03f1afdcfd10bc Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 12:30:19 +0800 Subject: [PATCH 04/18] feat(agentx-release): chocolatey package skeleton --- .github/chocolatey/agentx.nuspec.template | 20 ++ .github/chocolatey/tools/LICENSE.txt | 201 ++++++++++++++++++ .github/chocolatey/tools/VERIFICATION.txt | 14 ++ .../tools/chocolateyinstall.ps1.template | 19 ++ .../chocolatey/tools/chocolateyuninstall.ps1 | 2 + 5 files changed, 256 insertions(+) create mode 100644 .github/chocolatey/agentx.nuspec.template create mode 100644 .github/chocolatey/tools/LICENSE.txt create mode 100644 .github/chocolatey/tools/VERIFICATION.txt create mode 100644 .github/chocolatey/tools/chocolateyinstall.ps1.template create mode 100644 .github/chocolatey/tools/chocolateyuninstall.ps1 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. From 4ae1be37c7fcecef2890a58ae4de7b39bbc891f7 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 12:44:17 +0800 Subject: [PATCH 05/18] feat(agentx-release): workflow scaffold + tag-check --- .github/workflows/agentx-release.yml | 50 ++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/agentx-release.yml diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml new file mode 100644 index 00000000000..22f6d79d2c7 --- /dev/null +++ b/.github/workflows/agentx-release.yml @@ -0,0 +1,50 @@ +# 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::" From 6c2d59e51e1c15668e9023b3ca7ec7c985275e90 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 13:20:31 +0800 Subject: [PATCH 06/18] feat(agentx-release): build-linux job (x86_64 + aarch64 musl) --- .github/workflows/agentx-release.yml | 53 ++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index 22f6d79d2c7..f00557230a5 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -48,3 +48,56 @@ jobs: 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: 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 From 18fa453f0266cff382ae1df65466ab7178785538 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 13:37:49 +0800 Subject: [PATCH 07/18] feat(agentx-release): build-macos job with code signing + dmg notarization --- .github/workflows/agentx-release.yml | 99 ++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index f00557230a5..c3e1ebf1a0c 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -101,3 +101,102 @@ jobs: 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 From 095966e97981fe290fee291f7621e69b5bed6818 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 13:50:04 +0800 Subject: [PATCH 08/18] feat(agentx-release): build-windows job (windows-latest, unsigned) --- .github/workflows/agentx-release.yml | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index c3e1ebf1a0c..c488f453357 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -200,3 +200,47 @@ jobs: 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 From 9c29580eefeec156e8896f761dad62d1edbedf2e Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 13:57:38 +0800 Subject: [PATCH 09/18] feat(agentx-release): release job (GitHub Release + SHA256SUMS) --- .github/workflows/agentx-release.yml | 72 ++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index c488f453357..65afce90d3e 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -244,3 +244,75 @@ jobs: 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 + rm -f SHA256SUMS + find . -maxdepth 1 -type f ! -name SHA256SUMS | sort | xargs sha256sum > SHA256SUMS.tmp + mv SHA256SUMS.tmp 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' }} From a7323f3f72d219c50cadd4d8eba31240d69d6ff8 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 13:59:21 +0800 Subject: [PATCH 10/18] feat(agentx-release): winget publish job (stable only) --- .github/workflows/agentx-release.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index 65afce90d3e..247026cbcc8 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -316,3 +316,22 @@ jobs: 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 }} From 66f277f42653db7e7a4e64d02b7775fd121370f7 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 14:00:55 +0800 Subject: [PATCH 11/18] feat(agentx-release): chocolatey publish job (stable only) --- .github/workflows/agentx-release.yml | 54 ++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index 247026cbcc8..0e52371f906 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -335,3 +335,57 @@ jobs: 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/" From 2544c13e811b9400630635ba42786d09206a44f0 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 16:43:21 +0800 Subject: [PATCH 12/18] feat(agentx-release): add musl build prereqs (libcap, Zig, sanitizer) Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/agentx-release.yml | 96 ++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index 0e52371f906..71b10688c9f 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -74,10 +74,106 @@ jobs: 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: From c88dd92ce16bea432d8abedf0a9d744bf147bbcb Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 17:24:57 +0800 Subject: [PATCH 13/18] chore(release): agentx 0.128.0-agentx.0 --- codex-rs/Cargo.lock | 224 ++++++++++++++++++++++---------------------- codex-rs/Cargo.toml | 2 +- 2 files changed, 113 insertions(+), 113 deletions(-) diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index eb2d01e9a6e..5f6ab496c4b 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.0" 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.0" dependencies = [ "async-trait", "codex-protocol", @@ -1765,7 +1765,7 @@ dependencies = [ [[package]] name = "codex-agent-identity" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -1784,7 +1784,7 @@ dependencies = [ [[package]] name = "codex-analytics" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "ansi-to-tui", "ratatui", @@ -1813,7 +1813,7 @@ dependencies = [ [[package]] name = "codex-api" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "assert_matches", @@ -1847,7 +1847,7 @@ dependencies = [ [[package]] name = "codex-app-server" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" dependencies = [ "anyhow", "clap", @@ -1980,7 +1980,7 @@ dependencies = [ [[package]] name = "codex-app-server-test-client" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "clap", @@ -2001,7 +2001,7 @@ dependencies = [ [[package]] name = "codex-app-server-transport" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "axum", @@ -2040,7 +2040,7 @@ dependencies = [ [[package]] name = "codex-apply-patch" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "assert_cmd", @@ -2059,7 +2059,7 @@ dependencies = [ [[package]] name = "codex-arg0" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-apply-patch", @@ -2076,7 +2076,7 @@ dependencies = [ [[package]] name = "codex-async-utils" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "async-trait", "pretty_assertions", @@ -2086,7 +2086,7 @@ dependencies = [ [[package]] name = "codex-aws-auth" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "codex-api", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "codex-backend-openapi-models" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "serde", "serde_json", @@ -2127,7 +2127,7 @@ dependencies = [ [[package]] name = "codex-chatgpt" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "clap", @@ -2150,7 +2150,7 @@ dependencies = [ [[package]] name = "codex-cli" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "assert_cmd", @@ -2207,7 +2207,7 @@ dependencies = [ [[package]] name = "codex-client" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "async-trait", "bytes", @@ -2238,7 +2238,7 @@ dependencies = [ [[package]] name = "codex-cloud-requirements" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "async-trait", @@ -2295,7 +2295,7 @@ dependencies = [ [[package]] name = "codex-cloud-tasks-client" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "async-trait", "chrono", @@ -2320,7 +2320,7 @@ dependencies = [ [[package]] name = "codex-code-mode" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" [[package]] name = "codex-config" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "async-trait", @@ -2387,7 +2387,7 @@ dependencies = [ [[package]] name = "codex-connectors" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-app-server-protocol", @@ -2399,7 +2399,7 @@ dependencies = [ [[package]] name = "codex-core" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "arc-swap", @@ -2519,7 +2519,7 @@ dependencies = [ [[package]] name = "codex-core-api" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "chrono", @@ -2574,7 +2574,7 @@ dependencies = [ [[package]] name = "codex-core-skills" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-analytics", @@ -2605,7 +2605,7 @@ dependencies = [ [[package]] name = "codex-debug-client" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "clap", @@ -2617,7 +2617,7 @@ dependencies = [ [[package]] name = "codex-device-key" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "assert_cmd", @@ -2678,7 +2678,7 @@ dependencies = [ [[package]] name = "codex-exec-server" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "arc-swap", @@ -2714,7 +2714,7 @@ dependencies = [ [[package]] name = "codex-execpolicy" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "clap", @@ -2731,7 +2731,7 @@ dependencies = [ [[package]] name = "codex-execpolicy-legacy" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "allocative", "anyhow", @@ -2751,7 +2751,7 @@ dependencies = [ [[package]] name = "codex-experimental-api-macros" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "proc-macro2", "quote", @@ -2760,7 +2760,7 @@ dependencies = [ [[package]] name = "codex-external-agent-migration" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "chrono", "codex-app-server-protocol", @@ -2786,7 +2786,7 @@ dependencies = [ [[package]] name = "codex-features" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "codex-otel", "codex-protocol", @@ -2799,7 +2799,7 @@ dependencies = [ [[package]] name = "codex-feedback" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-login", @@ -2812,7 +2812,7 @@ dependencies = [ [[package]] name = "codex-file-search" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "clap", @@ -2828,7 +2828,7 @@ dependencies = [ [[package]] name = "codex-file-system" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "async-trait", "codex-protocol", @@ -2838,7 +2838,7 @@ dependencies = [ [[package]] name = "codex-git-utils" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "chrono", @@ -2862,7 +2862,7 @@ dependencies = [ [[package]] name = "codex-hooks" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "chrono", @@ -2882,7 +2882,7 @@ dependencies = [ [[package]] name = "codex-install-context" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "keyring", "tracing", @@ -2899,7 +2899,7 @@ dependencies = [ [[package]] name = "codex-linux-sandbox" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "cc", "clap", @@ -2923,7 +2923,7 @@ dependencies = [ [[package]] name = "codex-lmstudio" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "async-trait", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "codex-mcp" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "async-channel", @@ -3011,7 +3011,7 @@ dependencies = [ [[package]] name = "codex-mcp-server" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-arg0", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "codex-memories-mcp" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" dependencies = [ "anyhow", "chrono", @@ -3108,7 +3108,7 @@ dependencies = [ [[package]] name = "codex-model-provider" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" dependencies = [ "async-trait", "chrono", @@ -3170,7 +3170,7 @@ dependencies = [ [[package]] name = "codex-network-proxy" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "async-trait", @@ -3201,7 +3201,7 @@ dependencies = [ [[package]] name = "codex-ollama" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "assert_matches", "async-stream", @@ -3220,7 +3220,7 @@ dependencies = [ [[package]] name = "codex-otel" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "chrono", "codex-api", @@ -3252,7 +3252,7 @@ dependencies = [ [[package]] name = "codex-plugin" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "libc", "pretty_assertions", @@ -3270,7 +3270,7 @@ dependencies = [ [[package]] name = "codex-protocol" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "chardetng", @@ -3311,7 +3311,7 @@ dependencies = [ [[package]] name = "codex-realtime-webrtc" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" dependencies = [ "anyhow", "clap", @@ -3348,7 +3348,7 @@ dependencies = [ [[package]] name = "codex-rmcp-client" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "axum", @@ -3385,7 +3385,7 @@ dependencies = [ [[package]] name = "codex-rollout" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "async-trait", @@ -3410,7 +3410,7 @@ dependencies = [ [[package]] name = "codex-rollout-trace" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-code-mode", @@ -3425,7 +3425,7 @@ dependencies = [ [[package]] name = "codex-sandboxing" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "async-trait", @@ -3446,7 +3446,7 @@ dependencies = [ [[package]] name = "codex-secrets" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "age", "anyhow", @@ -3467,7 +3467,7 @@ dependencies = [ [[package]] name = "codex-shell-command" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "async-trait", @@ -3508,7 +3508,7 @@ dependencies = [ [[package]] name = "codex-skills" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "chrono", @@ -3540,7 +3540,7 @@ dependencies = [ [[package]] name = "codex-stdio-to-uds" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-uds", @@ -3552,7 +3552,7 @@ dependencies = [ [[package]] name = "codex-terminal-detection" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "pretty_assertions", "tracing", @@ -3560,7 +3560,7 @@ dependencies = [ [[package]] name = "codex-test-binary-support" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "codex-arg0", "tempfile", @@ -3568,7 +3568,7 @@ dependencies = [ [[package]] name = "codex-thread-manager-sample" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "clap", @@ -3579,7 +3579,7 @@ dependencies = [ [[package]] name = "codex-thread-store" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "async-trait", "chrono", @@ -3604,7 +3604,7 @@ dependencies = [ [[package]] name = "codex-tools" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "arboard", @@ -3727,7 +3727,7 @@ dependencies = [ [[package]] name = "codex-uds" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "dirs", "dunce", @@ -3753,14 +3753,14 @@ dependencies = [ [[package]] name = "codex-utils-approval-presets" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "codex-protocol", ] [[package]] name = "codex-utils-cache" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "assert_cmd", "runfiles", @@ -3778,7 +3778,7 @@ dependencies = [ [[package]] name = "codex-utils-cli" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "clap", "codex-protocol", @@ -3789,15 +3789,15 @@ dependencies = [ [[package]] name = "codex-utils-elapsed" -version = "0.0.0" +version = "0.128.0-agentx.0" [[package]] name = "codex-utils-fuzzy-match" -version = "0.0.0" +version = "0.128.0-agentx.0" [[package]] name = "codex-utils-home-dir" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" dependencies = [ "pretty_assertions", "serde_json", @@ -3828,7 +3828,7 @@ dependencies = [ [[package]] name = "codex-utils-oss" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" 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.0" 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.0" dependencies = [ "anyhow", "filedescriptor", @@ -3886,7 +3886,7 @@ dependencies = [ [[package]] name = "codex-utils-readiness" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "rustls", ] [[package]] name = "codex-utils-sandbox-summary" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" 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.0" dependencies = [ "pretty_assertions", ] [[package]] name = "codex-utils-string" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "pretty_assertions", "regex-lite", @@ -3942,14 +3942,14 @@ dependencies = [ [[package]] name = "codex-utils-template" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "pretty_assertions", ] [[package]] name = "codex-v8-poc" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "pretty_assertions", "v8", @@ -3957,7 +3957,7 @@ dependencies = [ [[package]] name = "codex-windows-sandbox" -version = "0.0.0" +version = "0.128.0-agentx.0" 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.0" dependencies = [ "anyhow", "assert_cmd", @@ -8388,7 +8388,7 @@ dependencies = [ [[package]] name = "mcp_test_support" -version = "0.0.0" +version = "0.128.0-agentx.0" dependencies = [ "anyhow", "codex-login", diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index ce3e91626dd..c932c4e4da4 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.0" # 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 From f05cc905b4712b46da9dd743a135010945ed4629 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 18:45:04 +0800 Subject: [PATCH 14/18] feat(agentx-release): homebrew cask publish job (stable only) --- .github/homebrew/agentx.rb.template | 35 +++++++++++++ .github/workflows/agentx-release.yml | 74 ++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 .github/homebrew/agentx.rb.template 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.yml b/.github/workflows/agentx-release.yml index 71b10688c9f..d490321f8b9 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -485,3 +485,77 @@ jobs: 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 From 0d1e03b7e33afa933273a9278a33a0aa27dad1bc Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 19:07:54 +0800 Subject: [PATCH 15/18] fix(agentx-release): packaging script falls back to 7z when zip absent GitHub windows-latest runner's Git Bash does not ship `zip` in PATH, so the windows packaging step exited 127 with "zip: command not found" during the agentx-v0.128.0-agentx.0 dry-run. windows-latest does have `7z` preinstalled, so probe both and use whichever is available. Linux/macOS still use `zip` (test harness unchanged, 4/4 tests pass). Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/agentx-release-package.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/agentx-release-package.sh b/.github/workflows/agentx-release-package.sh index cda3cb490c2..8dcc9e0891d 100755 --- a/.github/workflows/agentx-release-package.sh +++ b/.github/workflows/agentx-release-package.sh @@ -46,7 +46,16 @@ case "$PLATFORM" in workdir="$(mktemp -d)" cp "$src" "${workdir}/agentx.exe" - (cd "$workdir" && zip -q "${OUTDIR}/agentx-${TARGET}.exe.zip" 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" ;; From 6704720d754e2808d568cbd4bc258a664d3a9fbe Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 19:53:50 +0800 Subject: [PATCH 16/18] chore(release): agentx 0.128.0-agentx.1 --- codex-rs/Cargo.lock | 224 ++++++++++++++++++++++---------------------- codex-rs/Cargo.toml | 2 +- 2 files changed, 113 insertions(+), 113 deletions(-) diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 5f6ab496c4b..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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "codex-protocol", @@ -1765,7 +1765,7 @@ dependencies = [ [[package]] name = "codex-agent-identity" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "base64 0.22.1", @@ -1784,7 +1784,7 @@ dependencies = [ [[package]] name = "codex-analytics" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "ansi-to-tui", "ratatui", @@ -1813,7 +1813,7 @@ dependencies = [ [[package]] name = "codex-api" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "assert_matches", @@ -1847,7 +1847,7 @@ dependencies = [ [[package]] name = "codex-app-server" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -1980,7 +1980,7 @@ dependencies = [ [[package]] name = "codex-app-server-test-client" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -2001,7 +2001,7 @@ dependencies = [ [[package]] name = "codex-app-server-transport" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "axum", @@ -2040,7 +2040,7 @@ dependencies = [ [[package]] name = "codex-apply-patch" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "assert_cmd", @@ -2059,7 +2059,7 @@ dependencies = [ [[package]] name = "codex-arg0" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-apply-patch", @@ -2076,7 +2076,7 @@ dependencies = [ [[package]] name = "codex-async-utils" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "pretty_assertions", @@ -2086,7 +2086,7 @@ dependencies = [ [[package]] name = "codex-aws-auth" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-api", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "codex-backend-openapi-models" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "serde", "serde_json", @@ -2127,7 +2127,7 @@ dependencies = [ [[package]] name = "codex-chatgpt" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -2150,7 +2150,7 @@ dependencies = [ [[package]] name = "codex-cli" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "assert_cmd", @@ -2207,7 +2207,7 @@ dependencies = [ [[package]] name = "codex-client" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "bytes", @@ -2238,7 +2238,7 @@ dependencies = [ [[package]] name = "codex-cloud-requirements" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -2295,7 +2295,7 @@ dependencies = [ [[package]] name = "codex-cloud-tasks-client" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "chrono", @@ -2320,7 +2320,7 @@ dependencies = [ [[package]] name = "codex-code-mode" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" [[package]] name = "codex-config" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -2387,7 +2387,7 @@ dependencies = [ [[package]] name = "codex-connectors" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-app-server-protocol", @@ -2399,7 +2399,7 @@ dependencies = [ [[package]] name = "codex-core" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "arc-swap", @@ -2519,7 +2519,7 @@ dependencies = [ [[package]] name = "codex-core-api" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "chrono", @@ -2574,7 +2574,7 @@ dependencies = [ [[package]] name = "codex-core-skills" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-analytics", @@ -2605,7 +2605,7 @@ dependencies = [ [[package]] name = "codex-debug-client" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -2617,7 +2617,7 @@ dependencies = [ [[package]] name = "codex-device-key" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "assert_cmd", @@ -2678,7 +2678,7 @@ dependencies = [ [[package]] name = "codex-exec-server" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "arc-swap", @@ -2714,7 +2714,7 @@ dependencies = [ [[package]] name = "codex-execpolicy" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -2731,7 +2731,7 @@ dependencies = [ [[package]] name = "codex-execpolicy-legacy" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "allocative", "anyhow", @@ -2751,7 +2751,7 @@ dependencies = [ [[package]] name = "codex-experimental-api-macros" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "proc-macro2", "quote", @@ -2760,7 +2760,7 @@ dependencies = [ [[package]] name = "codex-external-agent-migration" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "chrono", "codex-app-server-protocol", @@ -2786,7 +2786,7 @@ dependencies = [ [[package]] name = "codex-features" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "codex-otel", "codex-protocol", @@ -2799,7 +2799,7 @@ dependencies = [ [[package]] name = "codex-feedback" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-login", @@ -2812,7 +2812,7 @@ dependencies = [ [[package]] name = "codex-file-search" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -2828,7 +2828,7 @@ dependencies = [ [[package]] name = "codex-file-system" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "codex-protocol", @@ -2838,7 +2838,7 @@ dependencies = [ [[package]] name = "codex-git-utils" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "chrono", @@ -2862,7 +2862,7 @@ dependencies = [ [[package]] name = "codex-hooks" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "chrono", @@ -2882,7 +2882,7 @@ dependencies = [ [[package]] name = "codex-install-context" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "keyring", "tracing", @@ -2899,7 +2899,7 @@ dependencies = [ [[package]] name = "codex-linux-sandbox" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "cc", "clap", @@ -2923,7 +2923,7 @@ dependencies = [ [[package]] name = "codex-lmstudio" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -2979,7 +2979,7 @@ dependencies = [ [[package]] name = "codex-mcp" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-channel", @@ -3011,7 +3011,7 @@ dependencies = [ [[package]] name = "codex-mcp-server" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-arg0", @@ -3042,7 +3042,7 @@ dependencies = [ [[package]] name = "codex-memories-mcp" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "chrono", @@ -3108,7 +3108,7 @@ dependencies = [ [[package]] name = "codex-model-provider" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "chrono", @@ -3170,7 +3170,7 @@ dependencies = [ [[package]] name = "codex-network-proxy" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -3201,7 +3201,7 @@ dependencies = [ [[package]] name = "codex-ollama" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "assert_matches", "async-stream", @@ -3220,7 +3220,7 @@ dependencies = [ [[package]] name = "codex-otel" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "chrono", "codex-api", @@ -3252,7 +3252,7 @@ dependencies = [ [[package]] name = "codex-plugin" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "libc", "pretty_assertions", @@ -3270,7 +3270,7 @@ dependencies = [ [[package]] name = "codex-protocol" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "chardetng", @@ -3311,7 +3311,7 @@ dependencies = [ [[package]] name = "codex-realtime-webrtc" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -3348,7 +3348,7 @@ dependencies = [ [[package]] name = "codex-rmcp-client" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "axum", @@ -3385,7 +3385,7 @@ dependencies = [ [[package]] name = "codex-rollout" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -3410,7 +3410,7 @@ dependencies = [ [[package]] name = "codex-rollout-trace" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-code-mode", @@ -3425,7 +3425,7 @@ dependencies = [ [[package]] name = "codex-sandboxing" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -3446,7 +3446,7 @@ dependencies = [ [[package]] name = "codex-secrets" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "age", "anyhow", @@ -3467,7 +3467,7 @@ dependencies = [ [[package]] name = "codex-shell-command" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "async-trait", @@ -3508,7 +3508,7 @@ dependencies = [ [[package]] name = "codex-skills" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "chrono", @@ -3540,7 +3540,7 @@ dependencies = [ [[package]] name = "codex-stdio-to-uds" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-uds", @@ -3552,7 +3552,7 @@ dependencies = [ [[package]] name = "codex-terminal-detection" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "pretty_assertions", "tracing", @@ -3560,7 +3560,7 @@ dependencies = [ [[package]] name = "codex-test-binary-support" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "codex-arg0", "tempfile", @@ -3568,7 +3568,7 @@ dependencies = [ [[package]] name = "codex-thread-manager-sample" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "clap", @@ -3579,7 +3579,7 @@ dependencies = [ [[package]] name = "codex-thread-store" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "async-trait", "chrono", @@ -3604,7 +3604,7 @@ dependencies = [ [[package]] name = "codex-tools" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "arboard", @@ -3727,7 +3727,7 @@ dependencies = [ [[package]] name = "codex-uds" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "dirs", "dunce", @@ -3753,14 +3753,14 @@ dependencies = [ [[package]] name = "codex-utils-approval-presets" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "codex-protocol", ] [[package]] name = "codex-utils-cache" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "assert_cmd", "runfiles", @@ -3778,7 +3778,7 @@ dependencies = [ [[package]] name = "codex-utils-cli" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "clap", "codex-protocol", @@ -3789,15 +3789,15 @@ dependencies = [ [[package]] name = "codex-utils-elapsed" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" [[package]] name = "codex-utils-fuzzy-match" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" [[package]] name = "codex-utils-home-dir" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "pretty_assertions", "serde_json", @@ -3828,7 +3828,7 @@ dependencies = [ [[package]] name = "codex-utils-oss" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "filedescriptor", @@ -3886,7 +3886,7 @@ dependencies = [ [[package]] name = "codex-utils-readiness" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "rustls", ] [[package]] name = "codex-utils-sandbox-summary" -version = "0.128.0-agentx.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.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "pretty_assertions", ] [[package]] name = "codex-utils-string" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "pretty_assertions", "regex-lite", @@ -3942,14 +3942,14 @@ dependencies = [ [[package]] name = "codex-utils-template" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "pretty_assertions", ] [[package]] name = "codex-v8-poc" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "pretty_assertions", "v8", @@ -3957,7 +3957,7 @@ dependencies = [ [[package]] name = "codex-windows-sandbox" -version = "0.128.0-agentx.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.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "assert_cmd", @@ -8388,7 +8388,7 @@ dependencies = [ [[package]] name = "mcp_test_support" -version = "0.128.0-agentx.0" +version = "0.128.0-agentx.1" dependencies = [ "anyhow", "codex-login", diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index c932c4e4da4..fd987ef0bc9 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -111,7 +111,7 @@ members = [ resolver = "2" [workspace.package] -version = "0.128.0-agentx.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 From d27d5534898bfd3eeb083818db0981b4f126f7a4 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 21:42:26 +0800 Subject: [PATCH 17/18] fix(agentx-release): SHA256SUMS no longer hashes its own tmp file Release job's `find ... > SHA256SUMS.tmp` pipeline created the tmp file eagerly (shell `>` redirect) before find ran, so find included SHA256SUMS.tmp in the file list and `e3b0c44...` (sha256 of empty string) ended up as a stale row. Verified by inspecting the agentx-v0.128.0-agentx.1 release's SHA256SUMS. Replace with a plain glob: `sha256sum agentx-* > SHA256SUMS`. All release artifacts are agentx-* prefixed, no temp file needed, shellcheck-clean. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/agentx-release.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index d490321f8b9..d442f0a1852 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -381,9 +381,11 @@ jobs: run: | set -euo pipefail cd dist - rm -f SHA256SUMS - find . -maxdepth 1 -type f ! -name SHA256SUMS | sort | xargs sha256sum > SHA256SUMS.tmp - mv SHA256SUMS.tmp SHA256SUMS + # 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 From fbbcb43f20d66159d065f7f5700f661a7dceadd8 Mon Sep 17 00:00:00 2001 From: mryao Date: Tue, 5 May 2026 21:58:53 +0800 Subject: [PATCH 18/18] fix(agentx-release): satisfy upstream prettier on workflow yml Upstream codex's `pnpm format` runs prettier --check across .github/workflows/*.yml; multi-space alignment in `permissions:` and the chocolatey job's `env:` block was rejected. Run prettier --write to collapse to single spaces. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/agentx-release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/agentx-release.yml b/.github/workflows/agentx-release.yml index d442f0a1852..a0fe2d767b5 100644 --- a/.github/workflows/agentx-release.yml +++ b/.github/workflows/agentx-release.yml @@ -17,8 +17,8 @@ concurrency: cancel-in-progress: true permissions: - contents: write # GitHub Release create + asset upload - id-token: write # OIDC for any future cloud signing + contents: write # GitHub Release create + asset upload + id-token: write # OIDC for any future cloud signing jobs: tag-check: @@ -448,8 +448,8 @@ jobs: - name: Stage chocolatey package shell: bash env: - VERSION: ${{ needs.release.outputs.clean_version }} - TAG: ${{ needs.release.outputs.tag }} + VERSION: ${{ needs.release.outputs.clean_version }} + TAG: ${{ needs.release.outputs.tag }} run: | set -euo pipefail asset="agentx-x86_64-pc-windows-msvc.exe.zip"