From 2cab11ca40aad193382348a7bda46da2fc47596a Mon Sep 17 00:00:00 2001 From: Anthony Tafoya Date: Tue, 27 Oct 2026 05:42:20 +0000 Subject: [PATCH] Pin the Rust toolchain to 1.95.0 (#57373) ## What changed - Replace Rust `1.99.1` pins with `1.95.0` across Cargo, Bazel, CI, release workflows, and Windows setup, and update the Bazel lockfile. - Adjust Rust APIs, borrowing, and lint-related code for the pinned toolchain, and box MCP tool dispatch to bound compiler async-layout query depth. - Update the halfwidth sound mark snapshot and allow optional symbol hash suffixes in the code mode host package smoke test. GitOrigin-RevId: 75460c3d0465dc601811e619bce373a4f7ff2912 --- .../build-bazel-package-binaries/action.yml | 2 +- .../build-cargo-package-binaries/action.yml | 2 +- .github/workflows/cargo-deny.yml | 4 +- .../rust-ci-full-nextest-platform.yml | 4 +- .github/workflows/rust-ci-full.yml | 6 +- .github/workflows/rust-ci.yml | 6 +- .github/workflows/rust-release-windows.yml | 2 +- .github/workflows/rust-release.yml | 4 +- .github/workflows/rusty-v8-release.yml | 10 +- .github/workflows/v8-canary.yml | 10 +- MODULE.bazel | 2 +- MODULE.bazel.lock | 202 +++++++++--------- codex-rs/agent-identity/src/lib.rs | 1 + codex-rs/app-server/src/message_processor.rs | 6 +- codex-rs/code-mode-protocol/src/grpc/mod.rs | 2 - .../src/session_runtime/mod.rs | 2 +- .../src/connection_manager/startup.rs | 3 +- codex-rs/config/src/thread_config/remote.rs | 1 - codex-rs/core/src/exec_policy.rs | 11 +- codex-rs/core/src/realtime_conversation.rs | 6 +- .../core/src/tools/executed_tool_calls.rs | 2 +- codex-rs/core/src/tools/handlers/mcp.rs | 5 +- .../core/tests/common/apps_test_server.rs | 2 +- codex-rs/core/tests/suite/scenarios.rs | 2 +- codex-rs/core/tests/suite/tools.rs | 2 +- codex-rs/diagnostics/src/lib.rs | 2 +- codex-rs/exec-server-protocol/src/protocol.rs | 2 +- codex-rs/exec/src/lib.rs | 4 +- codex-rs/ext/skills/src/provider/executor.rs | 4 +- codex-rs/external-agent-migration/src/mcp.rs | 5 +- .../otel/tests/suite/otlp_http_loopback.rs | 42 ++-- codex-rs/rust-toolchain.toml | 2 +- codex-rs/sandboxing/src/seatbelt_tests.rs | 6 +- codex-rs/scripts/setup-windows.ps1 | 2 +- codex-rs/shell-command/src/bash.rs | 7 +- codex-rs/tui/src/app/reconnect.rs | 2 +- .../tests/background_task_defaults_tests.rs | 2 +- .../app/tests/session_lifecycle_requests.rs | 2 +- .../tui/src/app/user_verification_tests.rs | 2 +- codex-rs/tui/src/app_backtrack.rs | 2 +- codex-rs/tui/src/app_server_connection.rs | 2 +- .../src/bottom_pane/async_questions/layout.rs | 11 +- .../src/bottom_pane/list_selection_view.rs | 2 +- ...nput_halfwidth_sound_marks_truncation.snap | 4 +- codex-rs/tui/src/pager_overlay.rs | 4 +- codex-rs/tui/src/pets/sixel.rs | 2 +- .../utils/path-uri/src/api_path_string.rs | 4 +- codex-rs/utils/path-uri/src/lib.rs | 11 +- .../stream-parser/src/inline_hidden_tag.rs | 2 +- .../voice-host/src/input_channel_tests.rs | 4 +- codex-rs/voice-host/src/playback.rs | 4 +- codex-rs/websocket-auth/src/lib.rs | 2 +- .../smoke_tests/test_codex_package.py | 3 +- 53 files changed, 215 insertions(+), 225 deletions(-) diff --git a/.github/actions/build-bazel-package-binaries/action.yml b/.github/actions/build-bazel-package-binaries/action.yml index ae8660bf24..dd918ba0bc 100644 --- a/.github/actions/build-bazel-package-binaries/action.yml +++ b/.github/actions/build-bazel-package-binaries/action.yml @@ -18,7 +18,7 @@ runs: cache-scope: bazel-release - name: Install Cargo for workspace metadata - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 - name: Configure MSVC environment if: ${{ runner.os == 'Windows' }} diff --git a/.github/actions/build-cargo-package-binaries/action.yml b/.github/actions/build-cargo-package-binaries/action.yml index 928e0a1db2..84a35f5ec2 100644 --- a/.github/actions/build-cargo-package-binaries/action.yml +++ b/.github/actions/build-cargo-package-binaries/action.yml @@ -39,7 +39,7 @@ runs: *) echo "Unsupported build mode: $BUILD_MODE" >&2; exit 1 ;; esac - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: targets: ${{ inputs.target }} diff --git a/.github/workflows/cargo-deny.yml b/.github/workflows/cargo-deny.yml index 3ea46cc20d..0f8ebae902 100644 --- a/.github/workflows/cargo-deny.yml +++ b/.github/workflows/cargo-deny.yml @@ -18,12 +18,12 @@ jobs: - uses: ./.github/actions/setup-ci - name: Install Rust toolchain - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 - name: Run cargo-deny uses: EmbarkStudios/cargo-deny-action@82eb9f621fbc699dd0918f3ea06864c14cc84246 # v2 with: - rust-version: 1.99.1 + rust-version: 1.95.0 manifest-path: ./codex-rs/Cargo.toml - name: Check for a clean worktree diff --git a/.github/workflows/rust-ci-full-nextest-platform.yml b/.github/workflows/rust-ci-full-nextest-platform.yml index 5215c99bf2..474535267a 100644 --- a/.github/workflows/rust-ci-full-nextest-platform.yml +++ b/.github/workflows/rust-ci-full-nextest-platform.yml @@ -85,7 +85,7 @@ jobs: sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential pkg-config libcap-dev libasound2-dev bubblewrap fi - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: targets: ${{ inputs.target }} @@ -300,7 +300,7 @@ jobs: sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends pkg-config libcap-dev libasound2-dev bubblewrap fi - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: targets: ${{ inputs.target }} diff --git a/.github/workflows/rust-ci-full.yml b/.github/workflows/rust-ci-full.yml index c98855776d..188f94ef45 100644 --- a/.github/workflows/rust-ci-full.yml +++ b/.github/workflows/rust-ci-full.yml @@ -21,7 +21,7 @@ jobs: with: persist-credentials: false - uses: ./.github/actions/setup-ci - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: components: rustfmt - name: cargo fmt @@ -40,7 +40,7 @@ jobs: with: persist-credentials: false - uses: ./.github/actions/setup-ci - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 with: tool: cargo-shear@1.11.2 @@ -228,7 +228,7 @@ jobs: sudo apt-get update -y sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends build-essential pkg-config libcap-dev libasound2-dev fi - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: targets: ${{ matrix.target }} components: clippy diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index ae24051e9c..48bee976c9 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -70,7 +70,7 @@ jobs: with: persist-credentials: false - uses: ./.github/actions/setup-ci - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: components: rustfmt - name: cargo fmt @@ -95,7 +95,7 @@ jobs: with: persist-credentials: false - uses: ./.github/actions/setup-ci - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 - uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2.62.49 with: tool: cargo-shear@1.11.2 @@ -119,7 +119,7 @@ jobs: with: persist-credentials: false - uses: ./.github/actions/setup-ci - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 - name: Install nightly argument-comment-lint toolchain shell: bash run: | diff --git a/.github/workflows/rust-release-windows.yml b/.github/workflows/rust-release-windows.yml index 1460f21a23..f80bcb34e7 100644 --- a/.github/workflows/rust-release-windows.yml +++ b/.github/workflows/rust-release-windows.yml @@ -100,7 +100,7 @@ jobs: Write-Host "Disk usage:" Get-PSDrive -PSProvider FileSystem | Format-Table -AutoSize Name, @{Name='Size(GB)';Expression={[math]::Round(($_.Used + $_.Free) / 1GB, 1)}}, @{Name='Free(GB)';Expression={[math]::Round($_.Free / 1GB, 1)}} - name: Set up Rust toolchain - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: targets: ${{ matrix.build-system == 'cargo' && matrix.target || '' }} diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index d78cbbbf81..7702e44a6c 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -30,7 +30,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + - uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 - name: Validate tag matches Cargo.toml version shell: bash run: | @@ -183,7 +183,7 @@ jobs: sudo apt-get update -y sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends binutils pkg-config libcap-dev - name: Set up Rust toolchain - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: targets: ${{ matrix.build-system == 'cargo' && matrix.target || '' }} diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml index 13489a7790..42725072e8 100644 --- a/.github/workflows/rusty-v8-release.yml +++ b/.github/workflows/rusty-v8-release.yml @@ -161,9 +161,9 @@ jobs: python-version: "3.12" - name: Set up Rust toolchain for Cargo smoke - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: - toolchain: "1.99.1" + toolchain: "1.95.0" - name: Build Bazel V8 release pair env: @@ -314,9 +314,9 @@ jobs: architecture: x64 - name: Set up Codex Rust toolchain for Cargo smoke - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: - toolchain: "1.99.1" + toolchain: "1.95.0" targets: ${{ matrix.target }} - name: Install rusty_v8 Rust toolchain @@ -406,7 +406,7 @@ jobs: cd codex-rs RUSTY_V8_ARCHIVE="${GITHUB_WORKSPACE}/${archive}" \ RUSTY_V8_SRC_BINDING_PATH="${GITHUB_WORKSPACE}/${binding}" \ - cargo +1.99.1 test -p codex-v8-poc --target "${TARGET}" --features sandbox --no-run + cargo +1.95.0 test -p codex-v8-poc --target "${TARGET}" --features sandbox --no-run ) - name: Upload staged artifacts diff --git a/.github/workflows/v8-canary.yml b/.github/workflows/v8-canary.yml index 77767cb3e4..59f8ea6a09 100644 --- a/.github/workflows/v8-canary.yml +++ b/.github/workflows/v8-canary.yml @@ -174,9 +174,9 @@ jobs: python-version: "3.12" - name: Set up Rust toolchain for Cargo smoke - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: - toolchain: "1.99.1" + toolchain: "1.95.0" - name: Build Bazel V8 release pair env: @@ -332,9 +332,9 @@ jobs: architecture: x64 - name: Set up Codex Rust toolchain for Cargo smoke - uses: dtolnay/rust-toolchain@d124f86f28ff42855784ff3319f48ac182c248f8 # 1.99.1 + uses: dtolnay/rust-toolchain@e081816240890017053eacbb1bdf337761dc5582 # 1.95.0 with: - toolchain: "1.99.1" + toolchain: "1.95.0" targets: ${{ matrix.target }} - name: Install rusty_v8 Rust toolchain @@ -424,7 +424,7 @@ jobs: cd codex-rs RUSTY_V8_ARCHIVE="${GITHUB_WORKSPACE}/${archive}" \ RUSTY_V8_SRC_BINDING_PATH="${GITHUB_WORKSPACE}/${binding}" \ - cargo +1.99.1 test -p codex-v8-poc --target "${TARGET}" --features sandbox --no-run + cargo +1.95.0 test -p codex-v8-poc --target "${TARGET}" --features sandbox --no-run ) - name: Upload staged artifacts diff --git a/MODULE.bazel b/MODULE.bazel index 507c6120e4..73eed671ab 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -325,7 +325,7 @@ toolchains.toolchain( edition = "2024", extra_exec_rustc_flags = MSVC_RUSTC_FLAGS, extra_rustc_flags = MSVC_RUSTC_FLAGS, - version = "1.99.1", + version = "1.95.0", ) use_repo(toolchains, "default_rust_toolchains") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 9ac9cc6ab1..f52fcb239a 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -2421,107 +2421,107 @@ "zvariant_utils_2.1.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1.0.81\"},{\"name\":\"quote\",\"req\":\"^1.0.36\"},{\"features\":[\"extra-traits\",\"full\"],\"name\":\"syn\",\"req\":\"^2.0.64\"}],\"features\":{}}" }, "@@rules_rs+//rs/toolchains:module_extension.bzl%toolchains": { - "cargo-1.99.1-aarch64-apple-darwin.tar.xz": "685e563d94db1f003ffa5f5831439eec02569b9950b69867953c8213269c1eaf", - "cargo-1.99.1-aarch64-pc-windows-msvc.tar.xz": "28ae5b9b72ae43aa01d2f6c1b285be59f8aef6eafc96f9e16b912c3c1363a638", - "cargo-1.99.1-aarch64-unknown-linux-gnu.tar.xz": "5156832e0c1254e9b49a79edabdc6d4c35f32f8fc1cf3ca700f268ff96087ab0", - "cargo-1.99.1-x86_64-apple-darwin.tar.xz": "6636dabcec164909d1c6eb9e2c596148787c84f7d3a02ff68a141569077f80b5", - "cargo-1.99.1-x86_64-pc-windows-msvc.tar.xz": "4adb46c3707dee790682f7769d86983841148111695f561c843c33daa2af0c9b", - "cargo-1.99.1-x86_64-unknown-linux-gnu.tar.xz": "53f3521949404d595efb06a55c12c5658d4ed1c75566f33d3d514eaebe70bd8a", - "clippy-1.99.1-aarch64-apple-darwin.tar.xz": "c463f31831196702fc544900a0dc4c1837905327507fbec751fe46e59ca098bf", - "clippy-1.99.1-aarch64-pc-windows-msvc.tar.xz": "6324b172cdda7ca117df406564a6c1f6634f983c06afc71c7a9fd46a4e34bfa8", - "clippy-1.99.1-aarch64-unknown-linux-gnu.tar.xz": "3bea76c26dcf30c176c0a8a8cc283eb59fabd754e24a68b4ca0701e5f3245f6b", - "clippy-1.99.1-x86_64-apple-darwin.tar.xz": "b5810174b696eaa05dd4ffd5b24c40a33c6d4bccc05fb72264006b7bfefb8c5d", - "clippy-1.99.1-x86_64-pc-windows-msvc.tar.xz": "eb20d3f60731450acecd7c6b108bec2eb4abd18321b383e6663a3f072fe9c0b3", - "clippy-1.99.1-x86_64-unknown-linux-gnu.tar.xz": "458339712a058e52cc4522ff9ef8b59cd1ea1340312216cd94194c464a3f6dc5", - "rust-analyzer-1.99.1-aarch64-apple-darwin.tar.xz": "c1ee8a54e685e13414e53fc46029d46db12613bc45c081f1a49020f1674ad6b4", - "rust-analyzer-1.99.1-aarch64-pc-windows-msvc.tar.xz": "a4df9d29b15a2ab6f9b6fefe1198f3bdb03e2b7e91899cdc0f0fdf8b68b5c44b", - "rust-analyzer-1.99.1-aarch64-unknown-linux-gnu.tar.xz": "b626351402eb9ea16af2ebc2b2cd02ec6f6ca6f0c18fa74b41243eb42996e2b1", - "rust-analyzer-1.99.1-x86_64-apple-darwin.tar.xz": "fe414afba5aa69e7994e29dddd9b166496900e70acc51fd3a55c82bfac86fe97", - "rust-analyzer-1.99.1-x86_64-pc-windows-msvc.tar.xz": "e8d29f16781a71468dbff5c602dd48d6c544696c957752be783ed5a1edd954e4", - "rust-analyzer-1.99.1-x86_64-unknown-linux-gnu.tar.xz": "5f2613d62003fc8cbe788d4ae409359c91c241ba248adbefe032df8bb77357bf", - "rust-src-1.99.1.tar.xz": "e485a88c45db546b73571df7bebfcb4454ba4fb552c492e25fc5b00eeb5bf22d", - "rust-std-1.99.1-aarch64-apple-darwin.tar.xz": "fe79d6ab5a0321de26463999d8c112b8ad3eafbcbcf822d66a2300b45dde1031", - "rust-std-1.99.1-aarch64-apple-ios-macabi.tar.xz": "0d5ec58e0b034fab7decd4e72f21cfa6428421585ca98cf6ab65d3d5369b3f8b", - "rust-std-1.99.1-aarch64-apple-ios-sim.tar.xz": "9780e3b33bb4aad552b2288de1aa65dff4feba66f51b77a4a6b2c52bfd455a28", - "rust-std-1.99.1-aarch64-apple-ios.tar.xz": "d62c2e84717c6fa56ef0d8e5a11821850fb717c40879075a8e465a1e15af247c", - "rust-std-1.99.1-aarch64-linux-android.tar.xz": "7463b06bb5f734c02d3bac967538b4de4da910fb90668398bc21b10b5620e35d", - "rust-std-1.99.1-aarch64-pc-windows-gnullvm.tar.xz": "cf14a1b1fb7f32b90369d91f97fa157fe1ca43edb64235df951006baab677a95", - "rust-std-1.99.1-aarch64-pc-windows-msvc.tar.xz": "044748841f47007a222dd5b3f5e9dacec1dae7386d7d308c5172d07ea7112fa0", - "rust-std-1.99.1-aarch64-unknown-fuchsia.tar.xz": "c28c7143f598af3cdaa8d62e120a2348473e7a7cb580b0958c99ec1b1d764fbc", - "rust-std-1.99.1-aarch64-unknown-linux-gnu.tar.xz": "e25668477083d6a9ddb87b9beb9c00742225f38233ccb4bfba3afa7a07427f52", - "rust-std-1.99.1-aarch64-unknown-linux-musl.tar.xz": "2f3eb0d0610e2b7f6b2121d106e2490ac648decfa0c09b30873bdfc60de6c1ab", - "rust-std-1.99.1-aarch64-unknown-none-softfloat.tar.xz": "6ff3ecba5ae285c5286ad6f5024994d818cee569c59d980aa2edc9e5fa3bcd4e", - "rust-std-1.99.1-aarch64-unknown-none.tar.xz": "fa76b51dba64b20f6ca0593ed9bfb582a91fb0060fa803c54b68f1f6a3774eb9", - "rust-std-1.99.1-aarch64-unknown-uefi.tar.xz": "e48e00681ea2c989d39274e3ed50ffdacb3bccea0950ea1789ab5075c8f36dae", - "rust-std-1.99.1-arm-linux-androideabi.tar.xz": "6973466090a51ab5d5fadde4449cb2e521371ede85b35f95252ba2119aceb9b6", - "rust-std-1.99.1-arm-unknown-linux-gnueabi.tar.xz": "fb93e9715ef14ed17fd6922dd200d14cfe855b46c4fa1e8a03ee85ca75646022", - "rust-std-1.99.1-arm-unknown-linux-gnueabihf.tar.xz": "32278298365b7b78cf5b67ec34bf5e11821679dfea8a6d867725af860c4cbe50", - "rust-std-1.99.1-arm-unknown-linux-musleabi.tar.xz": "f66cb84ada451344f46757c72d1bfa5a34e8f174affe67b7fa9c3b2d8a033e26", - "rust-std-1.99.1-arm-unknown-linux-musleabihf.tar.xz": "74adeec515565c17242c8fafedbda40a30a49f85e9510fc60013cbc539f83782", - "rust-std-1.99.1-armv7-linux-androideabi.tar.xz": "8c5c8d2bb1faf551ab21de3c9f9f930bfc7e610222e08bfae43b9438413fe300", - "rust-std-1.99.1-armv7-unknown-linux-gnueabi.tar.xz": "d9f8155889cd3f4fc36ac35dd1ec357c46ae9cade0b106aca03e272b005e0823", - "rust-std-1.99.1-armv7-unknown-linux-gnueabihf.tar.xz": "53fdf6581a24f510def5173813a0d23518a8cde547b9fbf4876499f19feda18c", - "rust-std-1.99.1-armv7-unknown-linux-musleabi.tar.xz": "eaf5ee2b0948e18e586af42aa9aeb0e8e5aba515bc2d862bf0d23dc59569a8a9", - "rust-std-1.99.1-armv7-unknown-linux-musleabihf.tar.xz": "edccfaef9195cb74b5c33541e587629f92433f59fb5e4bbb7b8293f966ecd60a", - "rust-std-1.99.1-i686-linux-android.tar.xz": "76494f24073c8c3f0f98649580bf4ae8d3e91831c763017c2d120ade90a5a108", - "rust-std-1.99.1-i686-pc-windows-gnu.tar.xz": "bf9668700154fcce55eca02d785da580eea561c1b6f70e723fd2f8a4296fd93f", - "rust-std-1.99.1-i686-pc-windows-gnullvm.tar.xz": "28ffcbd7ff0f7cf1d4104fce7ef72d186a3e1c583319e8e32b69957d17ce498a", - "rust-std-1.99.1-i686-pc-windows-msvc.tar.xz": "3a086606ba2581d43e905f65466d122c257ef0329ae3fbc3ceb067286d0668b0", - "rust-std-1.99.1-i686-unknown-freebsd.tar.xz": "90342aa51874648ca441913f8df923a915dcbc229694b8bf4620b3d53389350f", - "rust-std-1.99.1-i686-unknown-linux-gnu.tar.xz": "8abb74feac06cfb0d3de4e27301adb05f740661c7d6fb154528906202157ae15", - "rust-std-1.99.1-i686-unknown-linux-musl.tar.xz": "25df5dae9ead02745f709ed133f09700abdec5eb7a8027e08bb41aefb1a451a1", - "rust-std-1.99.1-i686-unknown-uefi.tar.xz": "c1297ae654a1a695056aa3c5113c67a9e68616bf225ba3da78873cc3cc538792", - "rust-std-1.99.1-loongarch64-unknown-linux-gnu.tar.xz": "6400e6880a1f8183bba1a8b939cb1c6d189ab64e4aff4f246c00161941ee76e8", - "rust-std-1.99.1-loongarch64-unknown-linux-musl.tar.xz": "3053ebe881b3434879a934012c4a61b1fa94a0aec922115a574cc81e8e3ca15e", - "rust-std-1.99.1-loongarch64-unknown-none.tar.xz": "01dd53deb6fe0d62b0dffa0e172935c1cf6ab1f59bf6287306df0937db47db9b", - "rust-std-1.99.1-powerpc-unknown-linux-gnu.tar.xz": "25d05cf16db111ecfe7dd8e1a3d61d144f2348e87dafeb07ff3cf402e3196cfd", - "rust-std-1.99.1-powerpc64-unknown-linux-gnu.tar.xz": "58f8526a50eb47eb106130a29e77c97e3c5fd60af41e8a16a63d39673f9aa33d", - "rust-std-1.99.1-powerpc64le-unknown-linux-gnu.tar.xz": "4bfb8ca55cc13f11addc5782a946b360b78888a18c8e315635b822f961f553c6", - "rust-std-1.99.1-powerpc64le-unknown-linux-musl.tar.xz": "6db9c7e403354b0f52321d286a032565a84aa925624daed33a87c02f956e302f", - "rust-std-1.99.1-riscv32imc-unknown-none-elf.tar.xz": "1c92e40aca279ee001a3a36d816140d49997f4b3791d81ae67175cfcbdb1d817", - "rust-std-1.99.1-riscv64gc-unknown-linux-gnu.tar.xz": "0fe2aa8294281e16886a101466160ec460ed99e51c8af11e1c76f88f8bd0de6b", - "rust-std-1.99.1-riscv64gc-unknown-linux-musl.tar.xz": "59797f5c7c87ef38c1d202576cb6fb9c6423730d8efcaf2fab7c367d2d878a39", - "rust-std-1.99.1-riscv64gc-unknown-none-elf.tar.xz": "bf5b831d8df3ad039770dffaf59ad3492ff0b239a5c4bb225a1961831c117b3e", - "rust-std-1.99.1-s390x-unknown-linux-gnu.tar.xz": "a5e394a3d85c6888f016abc9ac02dceadc6eb8a7216b8a5ba863d6cf649766ae", - "rust-std-1.99.1-sparc64-unknown-linux-gnu.tar.xz": "c73df3e84bba70fa87151ead94aac7848fee8334f16526bc2f97d20372b327ae", - "rust-std-1.99.1-thumbv6m-none-eabi.tar.xz": "2097eeae25f0d9a76a9fab9d78e5b8eed6f5c262946c9c0418f23aa6273e9b2f", - "rust-std-1.99.1-thumbv7em-none-eabi.tar.xz": "dbe6561e6a655e9866a8502961fe7089bffd438195945d03a190ee59a9568a02", - "rust-std-1.99.1-thumbv7em-none-eabihf.tar.xz": "dff135161000157504513c459a9646e52125d8b825395559c35ce78d54d226c8", - "rust-std-1.99.1-thumbv7m-none-eabi.tar.xz": "04c171e0c59fee9ea8b4b27f0195eadbf2f47495e06e14ff09d19eb6c6946d38", - "rust-std-1.99.1-thumbv8m.main-none-eabi.tar.xz": "59251d3c7d1804242c4a1ade2a08b0e133ee83537deff860408b08d1a239f938", - "rust-std-1.99.1-thumbv8m.main-none-eabihf.tar.xz": "a24ca64600d6ff0d7f765ff4d60cb697b1535b6f4fdb3fe3054918b75c702e0f", - "rust-std-1.99.1-wasm32-unknown-emscripten.tar.xz": "1797fc9e45d1a8fe819573e9d002fd9f3d4e680d3cfc4bb49af43cebd3096e90", - "rust-std-1.99.1-wasm32-unknown-unknown.tar.xz": "5f628f857dd00a8aa3fcac2e275665d2782066a5795274ed124c5b560f46423c", - "rust-std-1.99.1-wasm32-wasip1-threads.tar.xz": "5d44556bbae559fd029f207c8c2140b63ed70f0aa29f08be1bf42bed1bf7f716", - "rust-std-1.99.1-wasm32-wasip1.tar.xz": "d498fbff3fd032f2f5fabc299e5cbf7bc9d64abac6e389fc1a315b69821b48c4", - "rust-std-1.99.1-wasm32-wasip2.tar.xz": "15d54cff9ce112ab273cf7e214600108754d51100ce7d6bd62a354f16c93b4f3", - "rust-std-1.99.1-x86_64-apple-darwin.tar.xz": "484d5b88b424ddd29df196e1eb9420c8335bb5fac90a3c37140253345a8c65c4", - "rust-std-1.99.1-x86_64-apple-ios-macabi.tar.xz": "a85f3aacdc89a737b384f9676c4cfbc9e1f802c8ae4e10ba298bd07e06f2501e", - "rust-std-1.99.1-x86_64-apple-ios.tar.xz": "cfadc69ce94f86a7517510389893cc10a4df88e619536bd7bb5f4db57d76bd94", - "rust-std-1.99.1-x86_64-linux-android.tar.xz": "48132cd1f40a8112345ead45e8483495ab48285f152100f3ae1b1190bed4d8d4", - "rust-std-1.99.1-x86_64-pc-windows-gnu.tar.xz": "b17e3bc962ff24b3bc47a750d838defed85b280746250e3a3ad029e6c1a29dd7", - "rust-std-1.99.1-x86_64-pc-windows-gnullvm.tar.xz": "8ddc26705e13c46530c898524b0d2657b7d416a25e8d9ffe369a97b23a619bf6", - "rust-std-1.99.1-x86_64-pc-windows-msvc.tar.xz": "4fe09430ded40b8b3092b49f0a651178eb1f8154ef4d1f1a73f2a3595b2d956f", - "rust-std-1.99.1-x86_64-unknown-freebsd.tar.xz": "cd11b574be47094026f0fdb12ab3ae7fdb16acea71143d87c3ccf0208e6c9852", - "rust-std-1.99.1-x86_64-unknown-fuchsia.tar.xz": "00e4d731dd46e0879bd25a280178627b2bc53b4143d7ec3fac05b746ea8f5537", - "rust-std-1.99.1-x86_64-unknown-linux-gnu.tar.xz": "109b074225bf5b9ea3820890876bfdf4ed161adbfaf94b2b4b5984c85ee5d958", - "rust-std-1.99.1-x86_64-unknown-linux-musl.tar.xz": "1dd241eaeb19ff3b5180461c77bdee93d6cafc669eda9de834e7c06b0ec3ca95", - "rust-std-1.99.1-x86_64-unknown-netbsd.tar.xz": "97569760ad6e042d56ccdac2fd295df8a10351403b9bbca2a19567f8ed6ae46b", - "rust-std-1.99.1-x86_64-unknown-none.tar.xz": "ae62c0c5ea47af55eb432dabc8f4a92c1815965633fc3ecf4056c02948f302cf", - "rust-std-1.99.1-x86_64-unknown-uefi.tar.xz": "436c3de8edf19b2bea8f877f495927d2bdef4f3f6e6c67eae3eb5d31b0820616", - "rustc-1.99.1-aarch64-apple-darwin.tar.xz": "23948a0a9c162fd2952defb3fb0462c44e8fcfd1a4ab8a274a1e1bdb2cf810a3", - "rustc-1.99.1-aarch64-pc-windows-msvc.tar.xz": "4d89c7f3f9d8637c667332adf77b55f43c322ae0ff038e75493bb28e16369af2", - "rustc-1.99.1-aarch64-unknown-linux-gnu.tar.xz": "acdcdfe09ae1f103aa9a2b7f88903a9588bc2e99288af10e6fbf5514e2e49f25", - "rustc-1.99.1-src.tar.xz": "6451598a99e77f07571960f6b21d577399d3a30f33e80cbd2e3a4aae6535d265", - "rustc-1.99.1-x86_64-apple-darwin.tar.xz": "203feef2c2165d7dda1f30ccf75590f72a6abc52ce259ed1c418de84a6887698", - "rustc-1.99.1-x86_64-pc-windows-msvc.tar.xz": "7da83c2af1f209606b0160f25174d2867c7c7b73667c32c9e5fbcef4f5f45348", - "rustc-1.99.1-x86_64-unknown-linux-gnu.tar.xz": "2ff05ff9c08a90861e7f6e4065b40a8b87463b4576186fd613871c3e37f2091f", - "rustfmt-1.99.1-aarch64-apple-darwin.tar.xz": "8b80dda570f140ee9ced8799294e812bba847a025f185bae4cba85a2ba235570", - "rustfmt-1.99.1-aarch64-pc-windows-msvc.tar.xz": "2ad35c2fd069066955c40eaa48fe8c5f14c55c86de73fda35ab53e7decef49a8", - "rustfmt-1.99.1-aarch64-unknown-linux-gnu.tar.xz": "26b3200b1461921415927abf7fe410202a6eda2db3e419abde59e0abfcd93fc2", - "rustfmt-1.99.1-x86_64-apple-darwin.tar.xz": "06491b425e02612479c30ad9a49f72f88bc8e033310ec8cc238a15eafecf91b7", - "rustfmt-1.99.1-x86_64-pc-windows-msvc.tar.xz": "1a4d309df5ecacbefe5798c092a03f9d00aa9e1cbc65673c4ace1367c7a25989", - "rustfmt-1.99.1-x86_64-unknown-linux-gnu.tar.xz": "e3b36c4c7ec3486c059d8067ff48787676612007123aad7a4e8ec12c48ee9ba2" + "cargo-1.95.0-aarch64-apple-darwin.tar.xz": "6c2ffed8e1ac9cf4dc9e80f282a869a6b237a153e7c55cca039d33de29d80aaf", + "cargo-1.95.0-aarch64-pc-windows-msvc.tar.xz": "e645b30fa035a18aa12d28b699052014c7efa9dd4a33dabd223f0d16b5fa28e8", + "cargo-1.95.0-aarch64-unknown-linux-gnu.tar.xz": "7c070aeba9bbf12073646995a03f36c346bb5f541d0078ba6d9dc2a7adaaf6af", + "cargo-1.95.0-x86_64-apple-darwin.tar.xz": "e2e1131ade2dddc0d779e0ab3a6a990085c7a654951235742823c3a1ce0f190f", + "cargo-1.95.0-x86_64-pc-windows-msvc.tar.xz": "cab2606cb2d0aa31c55d50512fe07a9f15e893227566fbeb448306760cd0d2bf", + "cargo-1.95.0-x86_64-unknown-linux-gnu.tar.xz": "e74edd2cf7d0f1f1383b4f00eb90c843750bc489e2ccf7214e6476678a907425", + "clippy-1.95.0-aarch64-apple-darwin.tar.xz": "fd183baa023d0c4e0c5b8184226e2d4c85126adf156cb1f3a726ec593bba8d62", + "clippy-1.95.0-aarch64-pc-windows-msvc.tar.xz": "44c1b7ada72aa8f3fcaceb37a3899665bc9b160c2fea77879c8ecb65a9e97eba", + "clippy-1.95.0-aarch64-unknown-linux-gnu.tar.xz": "fb021e0c0fc2238be9266d7614f4a26bc372544c4cba3528d729ab24ad229fc9", + "clippy-1.95.0-x86_64-apple-darwin.tar.xz": "e47367f6b1489d74cbba93b387310adcb82e27a51e44b2c6ff543eb4f199fe32", + "clippy-1.95.0-x86_64-pc-windows-msvc.tar.xz": "ddc151d6f58c6658b7380292ecaef36e62d063bbdbf7f5802669810575bb5b75", + "clippy-1.95.0-x86_64-unknown-linux-gnu.tar.xz": "ac779bc9839dd47180806b133e4e2563c4a34716284cd5b8fede8ef289f452ca", + "rust-analyzer-1.95.0-aarch64-apple-darwin.tar.xz": "11231fc6574301b94bd379af4ef409caef7c65b877bcecf2b227dc0d74aa0ec7", + "rust-analyzer-1.95.0-aarch64-pc-windows-msvc.tar.xz": "92958624f23d4b0980748ac9e6d67f6f67a868f8224e8c6240e3f84145e2d805", + "rust-analyzer-1.95.0-aarch64-unknown-linux-gnu.tar.xz": "b37e5b9aad624e54228254f98a710ee19ad464fe7ada93ef12e20c87886a0047", + "rust-analyzer-1.95.0-x86_64-apple-darwin.tar.xz": "6cd111900e13fd19b188c5d8844b34136af3967066c0ea2914ce5c3508296c85", + "rust-analyzer-1.95.0-x86_64-pc-windows-msvc.tar.xz": "ba58e349f5e8b0ef13735c48d4ad8d8c7664472f8403f3c9d97b291bd54a7638", + "rust-analyzer-1.95.0-x86_64-unknown-linux-gnu.tar.xz": "a9d71c6e7427c45afcd846a8b34a3e3301ae7a0e91a2bcf929326af77a7dc68e", + "rust-src-1.95.0.tar.xz": "67b09138c8db96afc4bbfc69ea771ac9a091fd777698acb43f6dfd9fb7dea363", + "rust-std-1.95.0-aarch64-apple-darwin.tar.xz": "9b30089b0f767cb91b2190ffec55a9beeb2a21a1405d8da0f664d7e09d08e6d8", + "rust-std-1.95.0-aarch64-apple-ios-macabi.tar.xz": "0e1760828f4e0fa1cde0061ba5680619dcc1cdcafec9242cc18dc4547c73b1cd", + "rust-std-1.95.0-aarch64-apple-ios-sim.tar.xz": "4bfe5b0c74c10d121a8ac60f1833c7714b963f9130f6256ca313d94405267deb", + "rust-std-1.95.0-aarch64-apple-ios.tar.xz": "6fcc42d8dbba4910a128ffa32d62a730339a7e3882a90341a881f2edf66ff55a", + "rust-std-1.95.0-aarch64-linux-android.tar.xz": "de5e8fa5d955809891eea77682811fc90be705f78883bd94071e98f5a738d05b", + "rust-std-1.95.0-aarch64-pc-windows-gnullvm.tar.xz": "93d810b8872771afe04f66aa30a4eee48736aca693186e4c7cc2766e1a82e340", + "rust-std-1.95.0-aarch64-pc-windows-msvc.tar.xz": "be21b5a8a71c49b4dcbc19956233b0de7bfda3ee3c8a199148299f867e95cb42", + "rust-std-1.95.0-aarch64-unknown-fuchsia.tar.xz": "b311a0523f75e031d683d983515edb9baaf22a843dbd44ce2a30a3204752f592", + "rust-std-1.95.0-aarch64-unknown-linux-gnu.tar.xz": "3a21b271b1ff973b94d69b25e7a39992f9fbcae1ab6d9475844a23e6ad3908ac", + "rust-std-1.95.0-aarch64-unknown-linux-musl.tar.xz": "f6710416ed9a7d5cf2a15efa761eb79a1deeb43f9961bbe05cc97bec4ef9064a", + "rust-std-1.95.0-aarch64-unknown-none-softfloat.tar.xz": "54d691468e25e7989b022a171337beadf78b5202877b312b75182b7f93efbb8b", + "rust-std-1.95.0-aarch64-unknown-none.tar.xz": "2b0c986dc9902866311f1fe2d44bc2bd84479d2ac84ed7ada76a5eb7ba37080f", + "rust-std-1.95.0-aarch64-unknown-uefi.tar.xz": "ca657564103024d345ca32e8e4ade7ebb395a51163d2897d9e5f8373c025e49e", + "rust-std-1.95.0-arm-linux-androideabi.tar.xz": "12a9c5fa24608159c2b2bd50abc0c6d0add407c0258cee894c2f61c07051a9c4", + "rust-std-1.95.0-arm-unknown-linux-gnueabi.tar.xz": "f6cd592dacdf41f724ee90a2f34db028e37ca2a7fb26fa86e93e8fd68e24d066", + "rust-std-1.95.0-arm-unknown-linux-gnueabihf.tar.xz": "fda8408ea17881c6529e27e58672d6c628f786cad557fac92856077e7a610239", + "rust-std-1.95.0-arm-unknown-linux-musleabi.tar.xz": "62f21fabc209fd0de53156764fc426da74c59525bb60cb4c1c3ffd1be0bbe00b", + "rust-std-1.95.0-arm-unknown-linux-musleabihf.tar.xz": "2842ce67f7a4c68c6e8b30ad3bb36484fb745edcc2694b2a36bf0609cf758044", + "rust-std-1.95.0-armv7-linux-androideabi.tar.xz": "61e95e144986c52ff9fa2fe3c249a68b2bf268adb2a2eeb81d80c180e43027f1", + "rust-std-1.95.0-armv7-unknown-linux-gnueabi.tar.xz": "e23454d6ca7fc3f5eb7cf9241572765176d86e9f45d4f394de31a5fd794e523f", + "rust-std-1.95.0-armv7-unknown-linux-gnueabihf.tar.xz": "bd319e18ca2dad0450f76277874d56356330da536be8cf271509f8e6f28ac6de", + "rust-std-1.95.0-armv7-unknown-linux-musleabi.tar.xz": "a49bc987e0531800f92825ce61402b5734ea747caa8970d3373506742ed7daa6", + "rust-std-1.95.0-armv7-unknown-linux-musleabihf.tar.xz": "77f9aaff4669c076edc96cdb99dc21749d2c692c862232b52176572c289fe671", + "rust-std-1.95.0-i686-linux-android.tar.xz": "e7b5e18d1d4119c7c1454ee8427933f27aeff9e81a22248c2829f5f299d3a937", + "rust-std-1.95.0-i686-pc-windows-gnu.tar.xz": "2e98fb94fc500690d7e72e071ce29dd98790ff518163963f5c82c32afba9231d", + "rust-std-1.95.0-i686-pc-windows-gnullvm.tar.xz": "b429a8c456d6a1815ece064102bd6a25f67d46db4f6d7b79dbe7d1b9d1f78e0f", + "rust-std-1.95.0-i686-pc-windows-msvc.tar.xz": "6206fd7e8bd119e9d1ba1c425ad25c282512eb0d5659f2dcb4be224b84715706", + "rust-std-1.95.0-i686-unknown-freebsd.tar.xz": "3b13b3ccecf482c0da3e94f19e0aa5e8e375622f4e09b30e6dae2b7638bee63f", + "rust-std-1.95.0-i686-unknown-linux-gnu.tar.xz": "527c5d5249a7f77b48d3c9da3ac512d27b47f43d08dbe3c6f82a3d5b35d8aa27", + "rust-std-1.95.0-i686-unknown-linux-musl.tar.xz": "af4d3e7aabb63d39a7a2ff5435cc993b65ff38a2d2e23f1967e519037a1b0455", + "rust-std-1.95.0-i686-unknown-uefi.tar.xz": "3233985273616ec36861f2d50b4a025c903b2bb8c45b171c0ae9e2de8342125b", + "rust-std-1.95.0-loongarch64-unknown-linux-gnu.tar.xz": "eaf2c37c3293eea742e7ab20f25718ab19c93bd381df8823113fce70460c19c3", + "rust-std-1.95.0-loongarch64-unknown-linux-musl.tar.xz": "959b1bf99bc724c87bc4f2c0d184eb0554c134885c05c90d060eb572838924fd", + "rust-std-1.95.0-loongarch64-unknown-none.tar.xz": "139e8bdc86cbc21e149a2229c092f74741c907ef6424fa8ce8d435db47895cb6", + "rust-std-1.95.0-powerpc-unknown-linux-gnu.tar.xz": "59e0abbaa246502521e37c55b8d6cf88d5b8a697b0c70c61ec189937308f7246", + "rust-std-1.95.0-powerpc64-unknown-linux-gnu.tar.xz": "cc7fb9aa289ff1756502ae16a05e2885289165f01ed94a7c2db6576b3dae74a6", + "rust-std-1.95.0-powerpc64le-unknown-linux-gnu.tar.xz": "2370d9266051a0b23346d42e43a00f91b2daff22a963fb03e28ae50cb0b76c50", + "rust-std-1.95.0-powerpc64le-unknown-linux-musl.tar.xz": "0362ba4ecfe0bb508f0d2b064c6fbbfe72604d5ae1989d6a8a7b4fe5ff1889f1", + "rust-std-1.95.0-riscv32imc-unknown-none-elf.tar.xz": "04befebf3b15372dacb7e6c0fcdab842c17a63ea58bf2f4cdccd7182ae9195c6", + "rust-std-1.95.0-riscv64gc-unknown-linux-gnu.tar.xz": "50fe7869e166bb4c990a0e1664366b1ffdbe669664b7663cd03c079bd0efdcac", + "rust-std-1.95.0-riscv64gc-unknown-linux-musl.tar.xz": "e01bdbf5d6fa3e529671d49e87ba81dc9612101144f3ee5a0e1de3c48f27b47c", + "rust-std-1.95.0-riscv64gc-unknown-none-elf.tar.xz": "a4cb7a1527f3b56a39464e5ca2b174a27b708b26d78e604735eb5ffd9ee4d20b", + "rust-std-1.95.0-s390x-unknown-linux-gnu.tar.xz": "31978c1286afff9a0bb7f01c2ae4a39f40727b6100a82b6d934f146b06cde510", + "rust-std-1.95.0-sparc64-unknown-linux-gnu.tar.xz": "88619b2413d218c119a2060e583a9e835fa5f9cf6ac038070eec10b02c191056", + "rust-std-1.95.0-thumbv6m-none-eabi.tar.xz": "602ec023c4615fc1c2d78b688554d42fa525e07e861c052f406fd7a607e5d5ee", + "rust-std-1.95.0-thumbv7em-none-eabi.tar.xz": "fb671966ba9aede333956ed43fcfe114ec890ca6e70369c9f3219871ee3ae8ae", + "rust-std-1.95.0-thumbv7em-none-eabihf.tar.xz": "fa3d189c09b64d818ad65a3fec1ce1c7d7b3908aea6fc4607a3fcc05067cad81", + "rust-std-1.95.0-thumbv7m-none-eabi.tar.xz": "e9e39f483ad4c1ce55fa4f508009e8d7d7ef25efe6592f7bfbabc159a24658ff", + "rust-std-1.95.0-thumbv8m.main-none-eabi.tar.xz": "3b64bffb193b37e83dc7b169add55f0ef3298220f8475468be4bb87276a68105", + "rust-std-1.95.0-thumbv8m.main-none-eabihf.tar.xz": "25ec92187d3a45fb1e397b0ba6000341d872523925a99a48b1978bdf1e6038cb", + "rust-std-1.95.0-wasm32-unknown-emscripten.tar.xz": "967b92a8682e8b8a1a459d776b36e41c906cdcac1008fef70e4800fec40d6864", + "rust-std-1.95.0-wasm32-unknown-unknown.tar.xz": "5587b89ff69623d09e476439d44a24453b4e4ea3d5e0b53a5c0a935151ff3fd1", + "rust-std-1.95.0-wasm32-wasip1-threads.tar.xz": "9079935a00a3c3aaf284957bbe82972983ce2708019687cec1f4988c30c1e0f3", + "rust-std-1.95.0-wasm32-wasip1.tar.xz": "86e5b6d98c7520bb9c3ad4f8cbbbf14beaf230b0f06b437db398e3c4f7dae43e", + "rust-std-1.95.0-wasm32-wasip2.tar.xz": "68146eb4c887431379966efa21d75dc957f18bd1166239c1deaa53fe38cb9ab4", + "rust-std-1.95.0-x86_64-apple-darwin.tar.xz": "2be13c14122b8d4d09b7f7c434fca9ae7215ec72049944189c88c4d9128ce504", + "rust-std-1.95.0-x86_64-apple-ios-macabi.tar.xz": "60b92e51e87f84046e0b19ccedc88c45b4b62c3ab10351f8473453f341c894f1", + "rust-std-1.95.0-x86_64-apple-ios.tar.xz": "11abb7b1c92b5a88b8c3ba21ee596a1be7dee5e817b336f26b4968d8ed5513ad", + "rust-std-1.95.0-x86_64-linux-android.tar.xz": "77b8e2be4a6e784a63cd77de944864c8044ddf4d5c7d56f663ada8a38a8319c4", + "rust-std-1.95.0-x86_64-pc-windows-gnu.tar.xz": "f57e045016a04130125fb43295d95f9ad2bebc296150eadb031dbf5167ad12bd", + "rust-std-1.95.0-x86_64-pc-windows-gnullvm.tar.xz": "3c52a0e34e0b4abe4439cabd77383408f5f9c80b6e249fbc0855df424b45008d", + "rust-std-1.95.0-x86_64-pc-windows-msvc.tar.xz": "7c659bdc88646e7e1befa370881bd311be87b26f006933a28b40dcab2f7cc832", + "rust-std-1.95.0-x86_64-unknown-freebsd.tar.xz": "dfe913c2f477172db10d3723d9f5c536d8b6f42776c979cc855820d8249adec3", + "rust-std-1.95.0-x86_64-unknown-fuchsia.tar.xz": "faa2bc09a3992f1d81b538121d64a3a396f4ec666e665c79d2ab47461c2d3206", + "rust-std-1.95.0-x86_64-unknown-linux-gnu.tar.xz": "047ea7098803d3500fa1072e9cee5392697e21525559e4458128a2bf874aa382", + "rust-std-1.95.0-x86_64-unknown-linux-musl.tar.xz": "aee540abf132920f791ef781489851a078d69dff493fb628d49c1d573f92bb3a", + "rust-std-1.95.0-x86_64-unknown-netbsd.tar.xz": "7a82b71c53f20cb147a340819fcab645da220b312a96194531e631ee99783a7d", + "rust-std-1.95.0-x86_64-unknown-none.tar.xz": "7c151c0e7bf3b0b4d7136774cd3686e5f691b761b648b17e83af58e7669d3e01", + "rust-std-1.95.0-x86_64-unknown-uefi.tar.xz": "4cc55629480aa8ab5b39eb6b7458433b48461d6626fdea0330fb88e23af818ea", + "rustc-1.95.0-aarch64-apple-darwin.tar.xz": "149e85a285b6eba58eb6c8bdf7deb1b93763890598e62cb635a712e3a8454f04", + "rustc-1.95.0-aarch64-pc-windows-msvc.tar.xz": "0dbec9739b93427ccdd3948c3b1f83cec42e4c9545d930a8d1e1464ff4092c5f", + "rustc-1.95.0-aarch64-unknown-linux-gnu.tar.xz": "0fe3689eeaed603e5ef24572d11597d3edadaefd2cb181674ad621260f2501d2", + "rustc-1.95.0-src.tar.xz": "62b67230754da642a264ca0cb9fc08820c54e2ed7b3baba0289876d4cdb48c08", + "rustc-1.95.0-x86_64-apple-darwin.tar.xz": "33db457715446a69ed6f69f78f5fbb9ca8e17a16585d1d7a0060479bfe4c7afc", + "rustc-1.95.0-x86_64-pc-windows-msvc.tar.xz": "4cb1f3b578adc6541cbe13a6f85f1fd8c0ce643d90b506a36dee24c680864c67", + "rustc-1.95.0-x86_64-unknown-linux-gnu.tar.xz": "8426a3d170a5879f5682f5fbdd024a1779b3951e7baba685af2d6dc32a6dfc15", + "rustfmt-1.95.0-aarch64-apple-darwin.tar.xz": "c54af79adfdc790d27fc56e24407e370c80be5a89ad537eef9fbd45d3c3e28e8", + "rustfmt-1.95.0-aarch64-pc-windows-msvc.tar.xz": "a873c048743e6da29e09a8b55c774ee113f8f6ae4fd57d988d304a6453801b34", + "rustfmt-1.95.0-aarch64-unknown-linux-gnu.tar.xz": "64cce868f0f3d29f1524e11e9bab01ac9d538a31665fea1cd6b78af46a1c0a41", + "rustfmt-1.95.0-x86_64-apple-darwin.tar.xz": "5f7228f40a160e80d260e74e068d6fec8627aa02f1f5ae29d2019b9347076401", + "rustfmt-1.95.0-x86_64-pc-windows-msvc.tar.xz": "8bcf91606e36b8a0164efafde50709cd7a3c02143a2edaa81dbf3dccd6ed8f4c", + "rustfmt-1.95.0-x86_64-unknown-linux-gnu.tar.xz": "f1b2a7301513ffdd95ebf22ebbdd932e4d17fc806f748d93924740d0297b1396" }, "@@windows_support+//windows:extensions.bzl%msvc_runtime": { "visual_studio_installer_manifest_v1": { diff --git a/codex-rs/agent-identity/src/lib.rs b/codex-rs/agent-identity/src/lib.rs index 30f2b8a2eb..14a9e35190 100644 --- a/codex-rs/agent-identity/src/lib.rs +++ b/codex-rs/agent-identity/src/lib.rs @@ -564,6 +564,7 @@ fn signing_key_from_private_key_pkcs8_base64(private_key_pkcs8_base64: &str) -> #[cfg(test)] mod tests { + use base64::Engine as _; use ed25519_dalek::Signature; use ed25519_dalek::Verifier as _; use jsonwebtoken::EncodingKey; diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs index 33951aa8fa..a1bb6d1901 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs @@ -1244,7 +1244,7 @@ impl MessageProcessor { .clients_revoke(params) .await .map(|response| Some(response.into())), - ClientRequest::ConfigRequirementsRead { .. } => self + ClientRequest::ConfigRequirementsRead { params: _, .. } => self .config_processor .config_requirements_read() .await @@ -1303,7 +1303,7 @@ impl MessageProcessor { .unwatch(connection_id, params) .await .map(|response| Some(response.into())), - ClientRequest::ModelProviderCapabilitiesRead { .. } => self + ClientRequest::ModelProviderCapabilitiesRead { params: _, .. } => self .config_processor .model_provider_capabilities_read() .await @@ -1741,7 +1741,7 @@ impl MessageProcessor { ClientRequest::ThreadTimelineList { params, .. } => { self.thread_processor.thread_timeline_list(params).await } - ClientRequest::ThreadRealtimeListVoices { .. } => { + ClientRequest::ThreadRealtimeListVoices { params: _, .. } => { self.turn_processor.thread_realtime_list_voices().await } ClientRequest::ReviewStart { params, .. } => { diff --git a/codex-rs/code-mode-protocol/src/grpc/mod.rs b/codex-rs/code-mode-protocol/src/grpc/mod.rs index 111049bacd..f575cab9d6 100644 --- a/codex-rs/code-mode-protocol/src/grpc/mod.rs +++ b/codex-rs/code-mode-protocol/src/grpc/mod.rs @@ -1,5 +1,3 @@ -#![allow(clippy::double_must_use)] // Emitted by async_trait in the generated tonic service. - #[cfg(codex_bazel)] pub use code_mode_proto::codex::code_mode::v1::*; diff --git a/codex-rs/code-mode-runtime/src/session_runtime/mod.rs b/codex-rs/code-mode-runtime/src/session_runtime/mod.rs index c500b816bd..7b46c37823 100644 --- a/codex-rs/code-mode-runtime/src/session_runtime/mod.rs +++ b/codex-rs/code-mode-runtime/src/session_runtime/mod.rs @@ -153,7 +153,7 @@ impl SessionRuntime { fn allocate_cell_id(&self) -> Result { self.inner .next_cell_id - .try_update(Ordering::Relaxed, Ordering::Relaxed, |next_cell_id| { + .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |next_cell_id| { next_cell_id.checked_add(1) }) .map(|cell_id| CellId::new(cell_id.to_string())) diff --git a/codex-rs/codex-mcp/src/connection_manager/startup.rs b/codex-rs/codex-mcp/src/connection_manager/startup.rs index 71a8f4d979..0f019d2760 100644 --- a/codex-rs/codex-mcp/src/connection_manager/startup.rs +++ b/codex-rs/codex-mcp/src/connection_manager/startup.rs @@ -42,14 +42,13 @@ pub(super) async fn emit_update( submit_id: &str, tx_event: &Sender, update: McpStartupUpdateEvent, -) -> Result<(), Box>> { +) -> Result<(), async_channel::SendError> { tx_event .send(Event { id: submit_id.to_string(), msg: EventMsg::McpStartupUpdate(update), }) .await - .map_err(Box::new) } pub(super) fn mcp_startup_failure_reason( diff --git a/codex-rs/config/src/thread_config/remote.rs b/codex-rs/config/src/thread_config/remote.rs index 85be589dc4..a1dfa40c04 100644 --- a/codex-rs/config/src/thread_config/remote.rs +++ b/codex-rs/config/src/thread_config/remote.rs @@ -19,7 +19,6 @@ use super::ThreadConfigSource; use super::UserThreadConfig; use proto::thread_config_loader_client::ThreadConfigLoaderClient; -#[allow(clippy::double_must_use)] // Emitted by async_trait in the generated tonic service. #[path = "proto/codex.thread_config.v1.rs"] mod proto; diff --git a/codex-rs/core/src/exec_policy.rs b/codex-rs/core/src/exec_policy.rs index c72c87d9d4..7e307e4f4a 100644 --- a/codex-rs/core/src/exec_policy.rs +++ b/codex-rs/core/src/exec_policy.rs @@ -269,13 +269,10 @@ pub enum ExecPolicyUpdateError { JoinBlockingTask { source: tokio::task::JoinError }, #[error("failed to update in-memory rules: {source}")] - AddRule { source: ExecPolicyRuleError }, -} - -impl From for ExecPolicyUpdateError { - fn from(source: ExecPolicyRuleError) -> Self { - Self::AddRule { source } - } + AddRule { + #[from] + source: ExecPolicyRuleError, + }, } pub(crate) struct ExecPolicyManager { diff --git a/codex-rs/core/src/realtime_conversation.rs b/codex-rs/core/src/realtime_conversation.rs index 926b46de84..d44a19b5de 100644 --- a/codex-rs/core/src/realtime_conversation.rs +++ b/codex-rs/core/src/realtime_conversation.rs @@ -355,14 +355,14 @@ impl RealtimeStreamedItem { if self.buffered_text.is_empty() { return None; } - let text = std::mem::take(&mut self.buffered_text); + let text = self.buffered_text.drain(..).collect::(); let text = format!("{prefix}{text}"); self.sent_bytes += text.len(); return Some(text); } - let head = std::mem::take(&mut self.buffered_text); - let tail = std::mem::take(&mut self.tail_text); + let head = self.buffered_text.drain(..).collect::(); + let tail = self.tail_text.drain(..).collect::(); let text = format!("{prefix}{head}{HANDOFF_STREAM_TRUNCATION_MARKER}{tail}"); self.sent_bytes += text.len(); Some(text) diff --git a/codex-rs/core/src/tools/executed_tool_calls.rs b/codex-rs/core/src/tools/executed_tool_calls.rs index 26c1eb72a8..853c88a972 100644 --- a/codex-rs/core/src/tools/executed_tool_calls.rs +++ b/codex-rs/core/src/tools/executed_tool_calls.rs @@ -369,7 +369,7 @@ impl ExecutedToolCalls { fn reserve_direct_call(&self) -> Option { let recording = Arc::downgrade(&self.lock_state().as_ref()?.recording); self.pending_direct_calls - .try_update(Ordering::Relaxed, Ordering::Relaxed, |pending| { + .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |pending| { (pending < MAX_PENDING_EXECUTED_TOOL_CALLS).then_some(pending + 1) }) .ok()?; diff --git a/codex-rs/core/src/tools/handlers/mcp.rs b/codex-rs/core/src/tools/handlers/mcp.rs index bfbd9ef21b..a7b0df2df4 100644 --- a/codex-rs/core/src/tools/handlers/mcp.rs +++ b/codex-rs/core/src/tools/handlers/mcp.rs @@ -278,7 +278,8 @@ impl McpHandler { .map(TruncationPolicy::Tokens) .unwrap_or(step_context.settings.model_info.truncation_policy.into()); let started = Instant::now(); - let result = handle_mcp_tool_call( + // Bound the compiler's async-layout query depth for approval and dispatch. + let result = Box::pin(handle_mcp_tool_call( Arc::clone(&session), &step_context, &cancellation_token, @@ -290,7 +291,7 @@ impl McpHandler { tool_name, &source, payload, - ) + )) .await; Ok(boxed_tool_output(McpToolOutput { diff --git a/codex-rs/core/tests/common/apps_test_server.rs b/codex-rs/core/tests/common/apps_test_server.rs index 6771062f9a..cde2ed74da 100644 --- a/codex-rs/core/tests/common/apps_test_server.rs +++ b/codex-rs/core/tests/common/apps_test_server.rs @@ -543,7 +543,7 @@ impl Respond for CodexAppsJsonRpcResponder { .as_ref() .is_some_and(|remaining| { remaining - .try_update(Ordering::SeqCst, Ordering::SeqCst, |remaining| { + .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |remaining| { remaining.checked_sub(1) }) .is_ok() diff --git a/codex-rs/core/tests/suite/scenarios.rs b/codex-rs/core/tests/suite/scenarios.rs index 164ba2599c..a31a92e5a6 100644 --- a/codex-rs/core/tests/suite/scenarios.rs +++ b/codex-rs/core/tests/suite/scenarios.rs @@ -3132,7 +3132,7 @@ async fn astra_async_compaction_keeps_work_added_after_its_snapshot( ) .await?; assert_eq!(compaction_events.len(), if over_budget { 4 } else { 2 }); - for pair in compaction_events.as_chunks::<2>().0 { + for pair in compaction_events.chunks_exact(2) { assert_eq!((pair[0].0, pair[1].0), ("started", "completed")); assert_eq!(pair[0].1, pair[1].1); } diff --git a/codex-rs/core/tests/suite/tools.rs b/codex-rs/core/tests/suite/tools.rs index a53266debe..b183492c15 100644 --- a/codex-rs/core/tests/suite/tools.rs +++ b/codex-rs/core/tests/suite/tools.rs @@ -688,7 +688,7 @@ async fn sandbox_denied_exec_command_returns_original_output() -> Result<()> { "printf {sentinel:?} >&2; printf {content:?} > {path:?}", sentinel = format!("{sentinel}\n"), content = "sandbox denied", - path = target_path + path = &target_path ); let args = json!({ "cmd": command, diff --git a/codex-rs/diagnostics/src/lib.rs b/codex-rs/diagnostics/src/lib.rs index 91b878b390..a966e4aee5 100644 --- a/codex-rs/diagnostics/src/lib.rs +++ b/codex-rs/diagnostics/src/lib.rs @@ -32,7 +32,7 @@ impl Gauge { pub fn decrement(&self) { let _ = self .value - .try_update(Ordering::Relaxed, Ordering::Relaxed, |value| { + .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |value| { Some(value.saturating_sub(1)) }); } diff --git a/codex-rs/exec-server-protocol/src/protocol.rs b/codex-rs/exec-server-protocol/src/protocol.rs index dad1132447..352a46a62d 100644 --- a/codex-rs/exec-server-protocol/src/protocol.rs +++ b/codex-rs/exec-server-protocol/src/protocol.rs @@ -268,7 +268,7 @@ impl EnvironmentInfo { if let Some(path) = std::env::var_os(name) .filter(|path| !path.is_empty()) .filter(|path| cfg!(unix) || std::path::Path::new(path).is_absolute()) - .and_then(normalize_temp_path) + .and_then(&normalize_temp_path) && !temporary_directories.contains(&path) { temporary_directories.push(path); diff --git a/codex-rs/exec/src/lib.rs b/codex-rs/exec/src/lib.rs index 054e5a1569..821c6f1fe4 100644 --- a/codex-rs/exec/src/lib.rs +++ b/codex-rs/exec/src/lib.rs @@ -2321,9 +2321,7 @@ fn decode_utf16( } let units: Vec = input - .as_chunks::<2>() - .0 - .iter() + .chunks_exact(2) .map(|chunk| decode_unit([chunk[0], chunk[1]])) .collect(); diff --git a/codex-rs/ext/skills/src/provider/executor.rs b/codex-rs/ext/skills/src/provider/executor.rs index ee1278b07a..bb16a39380 100644 --- a/codex-rs/ext/skills/src/provider/executor.rs +++ b/codex-rs/ext/skills/src/provider/executor.rs @@ -330,10 +330,10 @@ async fn read_bounded_text( let mut stream = file_system .read_file_stream(path) .await - .map_err(read_error)?; + .map_err(&read_error)?; let mut contents = Vec::new(); while let Some(chunk) = stream.next().await { - let chunk = chunk.map_err(read_error)?; + let chunk = chunk.map_err(&read_error)?; if contents.len().saturating_add(chunk.len()) > MAX_SKILL_RESOURCE_CONTENT_BYTES { return Err(SkillProviderError::new(format!( "executor skill resource {resource} exceeds {MAX_SKILL_RESOURCE_CONTENT_BYTES} bytes" diff --git a/codex-rs/external-agent-migration/src/mcp.rs b/codex-rs/external-agent-migration/src/mcp.rs index 46889af75a..eb820ce247 100644 --- a/codex-rs/external-agent-migration/src/mcp.rs +++ b/codex-rs/external-agent-migration/src/mcp.rs @@ -222,8 +222,7 @@ fn mcp_server_toml_table( if let Some(env) = server_config.get("env").and_then(JsonValue::as_object) { append_env_config(&mut table, env)?; } - } else { - let url = server_config.get("url").and_then(json_string)?; + } else if let Some(url) = server_config.get("url").and_then(json_string) { if !matches!( transport_type, None | Some("http") | Some("streamable_http") @@ -237,6 +236,8 @@ fn mcp_server_toml_table( if let Some(headers) = server_config.get("headers").and_then(JsonValue::as_object) { append_header_config(&mut table, headers)?; } + } else { + return None; } Some(table) diff --git a/codex-rs/otel/tests/suite/otlp_http_loopback.rs b/codex-rs/otel/tests/suite/otlp_http_loopback.rs index bcd2dc8c7a..3fd9249603 100644 --- a/codex-rs/otel/tests/suite/otlp_http_loopback.rs +++ b/codex-rs/otel/tests/suite/otlp_http_loopback.rs @@ -296,17 +296,17 @@ fn otlp_http_exporter_honors_cumulative_temporality_env() -> Result<()> { assert!( body.contains("codex.turns"), "expected metric name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("codex.active"), "expected gauge not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.api_request\""), "expected API-request counter not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains(EXEC_SERVER_CLIENT_REQUEST_COUNT_METRIC), @@ -315,47 +315,47 @@ fn otlp_http_exporter_honors_cumulative_temporality_env() -> Result<()> { assert!( body.contains("\"codex.api_request.duration_ms\""), "expected API-request duration not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.conversation.turn.count\""), "expected conversation turn count not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.responses_api_engine_iapi_ttft.duration_ms\""), "expected engine IAPI TTFT duration not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.responses_api_engine_service_tbt.duration_ms\""), "expected engine service TBT duration not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.responses_api_engine_service_ttft.duration_ms\""), "expected engine service TTFT duration not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.tool.call\""), "expected tool-call counter not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.turn.token_usage\""), "expected turn-token histogram not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("\"codex.tool.call.duration_ms\""), "expected tool-call duration not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("component") && body.contains("test"), "expected gauge tag not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); Ok(()) @@ -449,7 +449,7 @@ fn otlp_http_exporter_sends_logs_to_collector() assert!( body.contains("codex.test.log_exported"), "expected exported log event not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); Ok(()) } @@ -609,22 +609,22 @@ fn otlp_http_exporter_sends_traces_to_collector() assert!( body.contains("trace-loopback"), "expected span name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("codex-cli"), "expected service name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("test.configured_attribute") && body.contains("configured-value"), "expected configured span attribute not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("codex.test.trace_event"), "expected trace event not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); Ok(()) @@ -726,12 +726,12 @@ async fn otlp_http_exporter_sends_traces_to_collector_with_bounded_shutdown_in_t assert!( body.contains("trace-loopback-tokio"), "expected span name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("codex-cli"), "expected service name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); Ok(()) @@ -928,12 +928,12 @@ fn otlp_http_exporter_sends_traces_to_collector_in_current_thread_tokio_runtime( assert!( body.contains("trace-loopback-current-thread"), "expected span name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); assert!( body.contains("codex-cli"), "expected service name not found; body prefix: {}", - body.chars().take(2000).collect::() + &body.chars().take(2000).collect::() ); Ok(()) diff --git a/codex-rs/rust-toolchain.toml b/codex-rs/rust-toolchain.toml index d73899d67f..910c65114e 100644 --- a/codex-rs/rust-toolchain.toml +++ b/codex-rs/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.99.1" +channel = "1.95.0" components = ["clippy", "rustfmt", "rust-src"] diff --git a/codex-rs/sandboxing/src/seatbelt_tests.rs b/codex-rs/sandboxing/src/seatbelt_tests.rs index 0d69bf96c3..b5034bc220 100644 --- a/codex-rs/sandboxing/src/seatbelt_tests.rs +++ b/codex-rs/sandboxing/src/seatbelt_tests.rs @@ -2031,7 +2031,7 @@ fn create_seatbelt_args_with_read_only_git_and_codex_subpaths() { assert!( !output.status.success(), "command to write {} should fail under seatbelt", - config_toml.display() + &config_toml.display() ); assert_seatbelt_denied(&output.stderr, &config_toml); @@ -2069,7 +2069,7 @@ fn create_seatbelt_args_with_read_only_git_and_codex_subpaths() { assert!( !output.status.success(), "command to write {} should fail under seatbelt", - pre_commit_hook.display() + &pre_commit_hook.display() ); assert_seatbelt_denied(&output.stderr, &pre_commit_hook); @@ -2107,7 +2107,7 @@ fn create_seatbelt_args_with_read_only_git_and_codex_subpaths() { assert!( output.status.success(), "command to write {} should succeed under seatbelt", - allowed_file.display() + &allowed_file.display() ); assert_eq!( "this is allowed\n", diff --git a/codex-rs/scripts/setup-windows.ps1 b/codex-rs/scripts/setup-windows.ps1 index 9567b2993d..a8fe0c2f75 100644 --- a/codex-rs/scripts/setup-windows.ps1 +++ b/codex-rs/scripts/setup-windows.ps1 @@ -179,7 +179,7 @@ if (-not (Ensure-Command 'cargo')) { Write-Host "==> Configuring Rust toolchain per rust-toolchain.toml" -ForegroundColor Cyan # Pin to the workspace toolchain and install components -$toolchain = '1.99.1' +$toolchain = '1.95.0' & rustup toolchain install $toolchain --profile minimal | Out-Host & rustup default $toolchain | Out-Host & rustup component add clippy rustfmt rust-src --toolchain $toolchain | Out-Host diff --git a/codex-rs/shell-command/src/bash.rs b/codex-rs/shell-command/src/bash.rs index d092127c55..ddd5807bfc 100644 --- a/codex-rs/shell-command/src/bash.rs +++ b/codex-rs/shell-command/src/bash.rs @@ -88,8 +88,11 @@ pub fn try_parse_word_only_commands_sequence(tree: &Tree, src: &str) -> Option(()); } } - color_eyre::eyre::bail!("permissions menu event stream closed"); + color_eyre::eyre::bail!("permissions menu event stream closed") }) .await??; app.chat_widget.handle_key_event(KeyCode::Up.into()); diff --git a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs index 98f48e201b..f7812089cb 100644 --- a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs +++ b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs @@ -1909,7 +1909,7 @@ async fn older_external_server_starts_without_unsupported_dynamic_tools_or_histo let starts = recorded_params(&requests, "thread/start"); assert_eq!(starts.len(), 6); - for attempts in starts.as_chunks::<3>().0 { + for attempts in starts.chunks_exact(3) { assert_eq!(attempts[0]["dynamicTools"][0]["type"], "namespace"); assert_eq!(attempts[0]["historyMode"], "paginated"); assert_eq!(attempts[1]["dynamicTools"], serde_json::Value::Null); diff --git a/codex-rs/tui/src/app/user_verification_tests.rs b/codex-rs/tui/src/app/user_verification_tests.rs index 9bf779f36d..ec21bb947e 100644 --- a/codex-rs/tui/src/app/user_verification_tests.rs +++ b/codex-rs/tui/src/app/user_verification_tests.rs @@ -194,7 +194,7 @@ async fn run_verification_rpc_scenario(scenario: RpcScenario) -> color_eyre::Res } } } - color_eyre::eyre::bail!("connection closed before the elicitation response"); + color_eyre::eyre::bail!("connection closed before the elicitation response") }); let client = crate::connect_remote_app_server(endpoint).await?; let mode = if scenario == RpcScenario::RemoteWorkspace { diff --git a/codex-rs/tui/src/app_backtrack.rs b/codex-rs/tui/src/app_backtrack.rs index 227f8f11bf..691136baaf 100644 --- a/codex-rs/tui/src/app_backtrack.rs +++ b/codex-rs/tui/src/app_backtrack.rs @@ -671,7 +671,7 @@ pub(crate) fn backtrack_revert_before_turn_id( } } - bail!("the selected prompt was not found in the persisted thread"); + bail!("the selected prompt was not found in the persisted thread") } /// Returns whether a turn is the reconstructed inline-review child with duplicated prompt inputs. diff --git a/codex-rs/tui/src/app_server_connection.rs b/codex-rs/tui/src/app_server_connection.rs index afa82e07f4..ac3ab1cb2c 100644 --- a/codex-rs/tui/src/app_server_connection.rs +++ b/codex-rs/tui/src/app_server_connection.rs @@ -17,7 +17,7 @@ use codex_utils_absolute_path::AbsolutePathBuf; pub(crate) async fn connect(target: &AppServerTarget) -> color_eyre::Result { match target { AppServerTarget::Embedded => { - color_eyre::eyre::bail!("embedded sessions have no remote connection"); + color_eyre::eyre::bail!("embedded sessions have no remote connection") } #[cfg(windows)] AppServerTarget::LocalDaemon { diff --git a/codex-rs/tui/src/bottom_pane/async_questions/layout.rs b/codex-rs/tui/src/bottom_pane/async_questions/layout.rs index 43da721cb3..327d1e9954 100644 --- a/codex-rs/tui/src/bottom_pane/async_questions/layout.rs +++ b/codex-rs/tui/src/bottom_pane/async_questions/layout.rs @@ -52,8 +52,9 @@ impl AsyncQuestions { let mut spacer_after_input = 0; let progress_height; let footer_lines; + let notes_height; - let notes_height = if has_options { + if has_options { let min_options_height = remaining.min(1); // Reserve hints and spacers while retaining a row for the selected option. let reserved = footer_pref + progress_pref + DESIRED_SPACERS_BETWEEN_SECTIONS; @@ -70,7 +71,7 @@ impl AsyncQuestions { spacer_after_question = u16::from(remaining > 0); remaining -= spacer_after_question; options_height += remaining.min(full_options_height.saturating_sub(options_height)); - 0 + notes_height = 0; } else { // Freeform answers take their preferred input height before hints and progress. let preferred_notes = self @@ -89,8 +90,10 @@ impl AsyncQuestions { // Drop padding before input or prompt content in a constrained viewport. spacer_before_question = u16::from(remaining >= 2 && self.unanswered_count() > 1); spacer_after_question = u16::from(remaining >= 1); - min_notes + preferred_notes + remaining - spacer_before_question - spacer_after_question - }; + notes_height = min_notes + preferred_notes + remaining + - spacer_before_question + - spacer_after_question; + } let mut y = area.y; let mut take_rows = |height| { diff --git a/codex-rs/tui/src/bottom_pane/list_selection_view.rs b/codex-rs/tui/src/bottom_pane/list_selection_view.rs index 439717537c..6dca72b967 100644 --- a/codex-rs/tui/src/bottom_pane/list_selection_view.rs +++ b/codex-rs/tui/src/bottom_pane/list_selection_view.rs @@ -1119,7 +1119,7 @@ impl ListSelectionView { None } .or_else(|| self.footer_note.clone()); - let mut lines = note.map(wrap).unwrap_or_default(); + let mut lines = note.map(&wrap).unwrap_or_default(); if self.reserve_result_rows && show_selected_description { let height = self .items diff --git a/codex-rs/tui/src/bottom_pane/request_user_input/snapshots/codex_tui__bottom_pane__request_user_input__render__tests__request_user_input_halfwidth_sound_marks_truncation.snap b/codex-rs/tui/src/bottom_pane/request_user_input/snapshots/codex_tui__bottom_pane__request_user_input__render__tests__request_user_input_halfwidth_sound_marks_truncation.snap index 1efcc1a62e..4dc0fc13b7 100644 --- a/codex-rs/tui/src/bottom_pane/request_user_input/snapshots/codex_tui__bottom_pane__request_user_input__render__tests__request_user_input_halfwidth_sound_marks_truncation.snap +++ b/codex-rs/tui/src/bottom_pane/request_user_input/snapshots/codex_tui__bottom_pane__request_user_input__render__tests__request_user_input_halfwidth_sound_marks_truncation.snap @@ -22,12 +22,12 @@ Buffer { [ Line::from_iter([ Span::from("ab").bold(), - Span::from("ガ").cyan(), + Span::from("カ\u{ff9e}").cyan(), Span::from("…").cyan(), ]), Line::from_iter([ Span::from("xy").bold(), - Span::from("パ").magenta(), + Span::from("ハ\u{ff9f}").magenta(), Span::from("…").magenta(), ]), ] diff --git a/codex-rs/tui/src/pager_overlay.rs b/codex-rs/tui/src/pager_overlay.rs index dff8a56ded..43fb410e1c 100644 --- a/codex-rs/tui/src/pager_overlay.rs +++ b/codex-rs/tui/src/pager_overlay.rs @@ -150,9 +150,7 @@ fn render_navigation_hints(area: Rect, buf: &mut Buffer, keymap: &PagerKeymap) { ("jump_bottom", &keymap.jump_bottom), ]; let hints = actions - .as_chunks::<2>() - .0 - .iter() + .chunks_exact(2) .zip(["to scroll", "to page", "to jump"]) .map(|(actions, description)| { ( diff --git a/codex-rs/tui/src/pets/sixel.rs b/codex-rs/tui/src/pets/sixel.rs index c21ed652cd..624fd7bc16 100644 --- a/codex-rs/tui/src/pets/sixel.rs +++ b/codex-rs/tui/src/pets/sixel.rs @@ -216,7 +216,7 @@ struct Palette { impl Palette { fn from_rgba(rgba: &[u8]) -> Self { let mut used = [false; PALETTE_COLOR_COUNT]; - for pixel in rgba.as_chunks::<4>().0 { + for pixel in rgba.chunks_exact(4) { if pixel[3] < TRANSPARENT_ALPHA_THRESHOLD { continue; } diff --git a/codex-rs/utils/path-uri/src/api_path_string.rs b/codex-rs/utils/path-uri/src/api_path_string.rs index 83bbca906a..b2ecdf0aed 100644 --- a/codex-rs/utils/path-uri/src/api_path_string.rs +++ b/codex-rs/utils/path-uri/src/api_path_string.rs @@ -263,9 +263,7 @@ fn render_windows_opaque_fallback(path_bytes: &[u8]) -> Option { return None; } let path_wide = path_bytes - .as_chunks::<2>() - .0 - .iter() + .chunks_exact(2) .map(|bytes| u16::from_le_bytes([bytes[0], bytes[1]])) .collect::>(); diff --git a/codex-rs/utils/path-uri/src/lib.rs b/codex-rs/utils/path-uri/src/lib.rs index a0212ef2f7..7a42363dd1 100644 --- a/codex-rs/utils/path-uri/src/lib.rs +++ b/codex-rs/utils/path-uri/src/lib.rs @@ -587,11 +587,8 @@ impl PathUri { use std::os::windows::ffi::OsStringExt; path_bytes.len().is_multiple_of(2).then(|| { let path_wide = path_bytes - .as_chunks::<2>() - .0 - .iter() - .copied() - .map(u16::from_le_bytes) + .chunks_exact(2) + .map(|bytes| u16::from_le_bytes([bytes[0], bytes[1]])) .collect::>(); std::path::PathBuf::from(std::ffi::OsString::from_wide(&path_wide)) }) @@ -822,9 +819,7 @@ fn infer_opaque_path_convention(path_bytes: &[u8]) -> Option { } let mut path_wide = path_bytes - .as_chunks::<2>() - .0 - .iter() + .chunks_exact(2) .map(|bytes| u16::from_le_bytes([bytes[0], bytes[1]])); let first = path_wide.next()?; let second = path_wide.next()?; diff --git a/codex-rs/utils/stream-parser/src/inline_hidden_tag.rs b/codex-rs/utils/stream-parser/src/inline_hidden_tag.rs index ccb08d8637..0e0d44b427 100644 --- a/codex-rs/utils/stream-parser/src/inline_hidden_tag.rs +++ b/codex-rs/utils/stream-parser/src/inline_hidden_tag.rs @@ -92,7 +92,7 @@ where .iter() .map(|spec| longest_suffix_prefix_len(pending, spec.open)) .max() - .unwrap_or(0) + .map_or(0, std::convert::identity) } fn push_visible_prefix(out: &mut StreamTextChunk>, pending: &str) { diff --git a/codex-rs/voice-host/src/input_channel_tests.rs b/codex-rs/voice-host/src/input_channel_tests.rs index cd91d3a629..e3c7807f63 100644 --- a/codex-rs/voice-host/src/input_channel_tests.rs +++ b/codex-rs/voice-host/src/input_channel_tests.rs @@ -18,9 +18,7 @@ fn microphone_selection_excludes_playback_channels() { unplugged[0] = 0.0; let interleaved = [plugged_in, unplugged].concat(); let captured: Vec<_> = interleaved - .as_chunks::<16>() - .0 - .iter() + .chunks_exact(/*chunk_size*/ 16) .map(|frame| source.sample(frame)) .collect(); assert_eq!(captured, vec![0.25, 0.0]); diff --git a/codex-rs/voice-host/src/playback.rs b/codex-rs/voice-host/src/playback.rs index 2f98c3b6e0..199abfa5a9 100644 --- a/codex-rs/voice-host/src/playback.rs +++ b/codex-rs/voice-host/src/playback.rs @@ -67,8 +67,8 @@ impl PlaybackWriter { at: Instant::now(), generation: self.epoch, }; - for (sample, bytes) in frame.samples.iter_mut().zip(bytes.as_chunks::<4>().0) { - *sample = f32::from_le_bytes(*bytes); + for (sample, bytes) in frame.samples.iter_mut().zip(bytes.chunks_exact(4)) { + *sample = f32::from_le_bytes(bytes.try_into().map_err(|_| "invalid speaker buffer")?); if !sample.is_finite() { return Err("invalid speaker sample"); } diff --git a/codex-rs/websocket-auth/src/lib.rs b/codex-rs/websocket-auth/src/lib.rs index 18ac47b443..5a062ffdcb 100644 --- a/codex-rs/websocket-auth/src/lib.rs +++ b/codex-rs/websocket-auth/src/lib.rs @@ -444,7 +444,7 @@ fn sha256_digest_arg(flag_name: &str, value: &str) -> anyhow::Result<[u8; 32]> { } let mut digest = [0u8; 32]; - for (index, pair) in trimmed.as_bytes().as_chunks::<2>().0.iter().enumerate() { + for (index, pair) in trimmed.as_bytes().chunks_exact(2).enumerate() { let high = hex_nibble(flag_name, pair[0])?; let low = hex_nibble(flag_name, pair[1])?; digest[index] = (high << 4) | low; diff --git a/scripts/codex_package/smoke_tests/test_codex_package.py b/scripts/codex_package/smoke_tests/test_codex_package.py index c05818e031..ee613a1290 100644 --- a/scripts/codex_package/smoke_tests/test_codex_package.py +++ b/scripts/codex_package/smoke_tests/test_codex_package.py @@ -18,6 +18,7 @@ Each package contains one entrypoint, not both codex and codex-app-server. """ import json +import re import shutil import subprocess import sys @@ -176,7 +177,7 @@ def _code_mode_host_symbol_address( for line in symbol_output.splitlines() if len(parts := line.split(maxsplit=2)) == 3 and parts[1].lower() == "t" - and parts[2] == "codex_code_mode_host::main" + and re.fullmatch(r"codex_code_mode_host::main(?:::h[0-9a-f]{16})?", parts[2]) )