From d317180dc2f417f1c9db80012aeadb39554ba516 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Tue, 17 Mar 2026 10:04:41 -0700 Subject: [PATCH 01/19] Setup a new v8-poc package This is a new package that depends on rusty-v8 for embedding a v8 engine. This builds and works on non-musl platforms now because rusty-v8 provides versions for that. But we mocked out the loading of a musl built library. TODO: iterate on providing the musl built version for musl-linux builds. TODO: create a release workflow for publishing the artifact that rusty-v8 can link against --- MODULE.bazel | 15 +++ MODULE.bazel.lock | 19 +++ codex-rs/Cargo.lock | 238 ++++++++++++++++++++++++++++++++++-- codex-rs/Cargo.toml | 3 + codex-rs/docs/bazel.md | 7 ++ codex-rs/v8-poc/BUILD.bazel | 12 ++ codex-rs/v8-poc/Cargo.toml | 22 ++++ codex-rs/v8-poc/src/lib.rs | 72 +++++++++++ third_party/v8/BUILD.bazel | 11 ++ third_party/v8/README.md | 15 +++ 10 files changed, 407 insertions(+), 7 deletions(-) create mode 100644 codex-rs/v8-poc/BUILD.bazel create mode 100644 codex-rs/v8-poc/Cargo.toml create mode 100644 codex-rs/v8-poc/src/lib.rs create mode 100644 third_party/v8/BUILD.bazel create mode 100644 third_party/v8/README.md diff --git a/MODULE.bazel b/MODULE.bazel index e6ad1c71005..3086008f53a 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -132,6 +132,21 @@ crate.annotation( workspace_cargo_toml = "rust/runfiles/Cargo.toml", ) +crate.annotation( + build_script_data_select = { + "aarch64-unknown-linux-musl": ["//third_party/v8:rusty_v8_archive"], + "x86_64-unknown-linux-musl": ["//third_party/v8:rusty_v8_archive"], + }, + build_script_env_select = { + # Replace the placeholder archive with a musl-built librusty_v8 artifact before + # enabling codex-v8-poc's `rusty_v8` feature for musl Cargo or Bazel builds. + "aarch64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive)\"}", + "x86_64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive)\"}", + }, + crate = "v8", + gen_build_script = "on", +) + llvm = use_extension("@llvm//extensions:llvm.bzl", "llvm") use_repo(llvm, "llvm-project") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index b3769567932..2cc3d6cc296 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -674,6 +674,7 @@ "cached_0.56.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ahash\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"attributes\"],\"kind\":\"dev\",\"name\":\"async-std\",\"req\":\"^1.6\"},{\"name\":\"async-trait\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"cached_proc_macro\",\"optional\":true,\"req\":\"^0.25.0\"},{\"name\":\"cached_proc_macro_types\",\"optional\":true,\"req\":\"^0.1.1\"},{\"kind\":\"dev\",\"name\":\"copy_dir\",\"req\":\"^0.1.3\"},{\"name\":\"directories\",\"optional\":true,\"req\":\"^6.0\"},{\"default_features\":false,\"name\":\"futures\",\"optional\":true,\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"googletest\",\"req\":\"^0.11.0\"},{\"default_features\":false,\"features\":[\"inline-more\"],\"name\":\"hashbrown\",\"req\":\"^0.15\"},{\"name\":\"once_cell\",\"req\":\"^1\"},{\"name\":\"r2d2\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"r2d2\"],\"name\":\"redis\",\"optional\":true,\"req\":\"^0.32\"},{\"name\":\"rmp-serde\",\"optional\":true,\"req\":\"^1.1\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^3\"},{\"name\":\"sled\",\"optional\":true,\"req\":\"^0.34\"},{\"kind\":\"dev\",\"name\":\"smartstring\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.10.1\"},{\"name\":\"thiserror\",\"req\":\"^2\"},{\"features\":[\"macros\",\"time\",\"sync\",\"parking_lot\"],\"name\":\"tokio\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"web-time\",\"req\":\"^1.1.0\"}],\"features\":{\"ahash\":[\"dep:ahash\",\"hashbrown/default\"],\"async\":[\"futures\",\"tokio\",\"async-trait\"],\"async_tokio_rt_multi_thread\":[\"async\",\"tokio/rt-multi-thread\"],\"default\":[\"proc_macro\",\"ahash\"],\"disk_store\":[\"sled\",\"serde\",\"rmp-serde\",\"directories\"],\"proc_macro\":[\"cached_proc_macro\",\"cached_proc_macro_types\"],\"redis_ahash\":[\"redis_store\",\"redis/ahash\"],\"redis_async_std\":[\"redis_store\",\"async\",\"redis/aio\",\"redis/async-std-comp\",\"redis/tls\",\"redis/async-std-tls-comp\"],\"redis_connection_manager\":[\"redis_store\",\"redis/connection-manager\"],\"redis_store\":[\"redis\",\"r2d2\",\"serde\",\"serde_json\"],\"redis_tokio\":[\"redis_store\",\"async\",\"redis/aio\",\"redis/tokio-comp\",\"redis/tls\",\"redis/tokio-native-tls-comp\"],\"wasm\":[]}}", "cached_proc_macro_0.25.0": "{\"dependencies\":[{\"name\":\"darling\",\"req\":\"^0.20.8\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.49\"},{\"name\":\"quote\",\"req\":\"^1.0.6\"},{\"name\":\"syn\",\"req\":\"^2.0.52\"}],\"features\":{}}", "cached_proc_macro_types_0.1.1": "{\"dependencies\":[],\"features\":{}}", + "calendrical_calculations_0.2.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"core_maths\",\"req\":\"^0.1.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.17\"}],\"features\":{\"logging\":[\"dep:log\"]}}", "cassowary_0.3.0": "{\"dependencies\":[],\"features\":{}}", "castaway_0.2.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1\"},{\"name\":\"rustversion\",\"req\":\"^1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "cbc_0.1.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"aes\",\"req\":\"^0.8\"},{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"}],\"features\":{\"alloc\":[\"cipher/alloc\"],\"block-padding\":[\"cipher/block-padding\"],\"default\":[\"block-padding\"],\"std\":[\"cipher/std\",\"alloc\"],\"zeroize\":[\"cipher/zeroize\"]}}", @@ -717,6 +718,7 @@ "core-foundation-sys_0.8.7": "{\"dependencies\":[],\"features\":{\"default\":[\"link\"],\"link\":[],\"mac_os_10_7_support\":[],\"mac_os_10_8_features\":[]}}", "core-foundation_0.10.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"core-foundation-sys\",\"req\":\"^0.8\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[\"link\"],\"link\":[\"core-foundation-sys/link\"],\"mac_os_10_7_support\":[\"core-foundation-sys/mac_os_10_7_support\"],\"mac_os_10_8_features\":[\"core-foundation-sys/mac_os_10_8_features\"],\"with-uuid\":[\"dep:uuid\"]}}", "core-foundation_0.9.4": "{\"dependencies\":[{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"core-foundation-sys\",\"req\":\"^0.8.6\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^0.5\"}],\"features\":{\"default\":[\"link\"],\"link\":[\"core-foundation-sys/link\"],\"mac_os_10_7_support\":[\"core-foundation-sys/mac_os_10_7_support\"],\"mac_os_10_8_features\":[\"core-foundation-sys/mac_os_10_8_features\"],\"with-chrono\":[\"chrono\"],\"with-uuid\":[\"uuid\"]}}", + "core_maths_0.1.1": "{\"dependencies\":[{\"name\":\"libm\",\"req\":\"^0.2\"}],\"features\":{}}", "coreaudio-rs_0.11.3": "{\"dependencies\":[{\"name\":\"bitflags\",\"req\":\"^1.0\"},{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.3\"},{\"default_features\":false,\"name\":\"coreaudio-sys\",\"req\":\"^0.2\"}],\"features\":{\"audio_toolbox\":[\"coreaudio-sys/audio_toolbox\"],\"audio_unit\":[\"coreaudio-sys/audio_unit\"],\"core_audio\":[\"coreaudio-sys/core_audio\"],\"core_midi\":[\"coreaudio-sys/core_midi\"],\"default\":[\"audio_toolbox\",\"audio_unit\",\"core_audio\",\"open_al\",\"core_midi\"],\"open_al\":[\"coreaudio-sys/open_al\"]}}", "coreaudio-sys_0.2.17": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"runtime\"],\"kind\":\"build\",\"name\":\"bindgen\",\"req\":\"^0.72\"}],\"features\":{\"audio_server_plugin\":[],\"audio_toolbox\":[],\"audio_unit\":[],\"core_audio\":[],\"core_midi\":[],\"default\":[\"audio_toolbox\",\"audio_unit\",\"core_audio\",\"audio_server_plugin\",\"open_al\",\"core_midi\"],\"io_kit_audio\":[],\"open_al\":[]}}", "cpal_0.15.3": "{\"dependencies\":[{\"name\":\"alsa\",\"req\":\"^0.9\",\"target\":\"cfg(any(target_os = \\\"linux\\\", target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"netbsd\\\"))\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0\"},{\"name\":\"asio-sys\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^4.0\"},{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.2\",\"target\":\"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\"))\"},{\"default_features\":false,\"features\":[\"audio_unit\",\"core_audio\",\"audio_toolbox\"],\"name\":\"coreaudio-rs\",\"req\":\"^0.11\",\"target\":\"cfg(target_os = \\\"ios\\\")\"},{\"default_features\":false,\"features\":[\"audio_unit\",\"core_audio\"],\"name\":\"coreaudio-rs\",\"req\":\"^0.11\",\"target\":\"cfg(target_os = \\\"macos\\\")\"},{\"name\":\"dasp_sample\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hound\",\"req\":\"^3.5\"},{\"name\":\"jack\",\"optional\":true,\"req\":\"^0.11\",\"target\":\"cfg(any(target_os = \\\"linux\\\", target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"netbsd\\\"))\"},{\"name\":\"jni\",\"req\":\"^0.21\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"name\":\"js-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"js-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_os = \\\"linux\\\", target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"netbsd\\\"))\"},{\"name\":\"mach2\",\"req\":\"^0.4\",\"target\":\"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\"))\"},{\"default_features\":false,\"name\":\"ndk\",\"req\":\"^0.8\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"name\":\"ndk-context\",\"req\":\"^0.1\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"kind\":\"dev\",\"name\":\"ndk-glue\",\"req\":\"^0.7\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"name\":\"num-traits\",\"optional\":true,\"req\":\"^0.2.6\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"features\":[\"java-interface\"],\"name\":\"oboe\",\"req\":\"^0.6\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"kind\":\"dev\",\"name\":\"ringbuf\",\"req\":\"^0.3\"},{\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2.58\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.33\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"features\":[\"AudioContext\",\"AudioContextOptions\",\"AudioBuffer\",\"AudioBufferSourceNode\",\"AudioNode\",\"AudioDestinationNode\",\"Window\",\"AudioContextState\"],\"name\":\"web-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"features\":[\"AudioContext\",\"AudioContextOptions\",\"AudioBuffer\",\"AudioBufferSourceNode\",\"AudioNode\",\"AudioDestinationNode\",\"Window\",\"AudioContextState\"],\"name\":\"web-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"features\":[\"Win32_Media_Audio\",\"Win32_Foundation\",\"Win32_Devices_Properties\",\"Win32_Media_KernelStreaming\",\"Win32_System_Com_StructuredStorage\",\"Win32_System_Threading\",\"Win32_Security\",\"Win32_System_SystemServices\",\"Win32_System_Variant\",\"Win32_Media_Multimedia\",\"Win32_UI_Shell_PropertiesSystem\"],\"name\":\"windows\",\"req\":\"^0.54.0\",\"target\":\"cfg(target_os = \\\"windows\\\")\"}],\"features\":{\"asio\":[\"asio-sys\",\"num-traits\"],\"oboe-shared-stdcxx\":[\"oboe/shared-stdcxx\"]}}", @@ -772,6 +774,9 @@ "difflib_0.4.0": "{\"dependencies\":[],\"features\":{}}", "diffy_0.4.2": "{\"dependencies\":[{\"name\":\"nu-ansi-term\",\"req\":\"^0.50\"}],\"features\":{}}", "digest_0.10.7": "{\"dependencies\":[{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"block-buffer\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"const-oid\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"crypto-common\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2.4\"}],\"features\":{\"alloc\":[],\"core-api\":[\"block-buffer\"],\"default\":[\"core-api\"],\"dev\":[\"blobby\"],\"mac\":[\"subtle\"],\"oid\":[\"const-oid\"],\"rand_core\":[\"crypto-common/rand_core\"],\"std\":[\"alloc\",\"crypto-common/std\"]}}", + "diplomat-runtime_0.14.0": "{\"dependencies\":[{\"name\":\"jni\",\"optional\":true,\"req\":\"^0.21\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4\"}],\"features\":{\"jvm-callback-support\":[\"dep:jni\"],\"log\":[\"dep:log\"]}}", + "diplomat_0.14.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"diplomat_core\",\"req\":\"^0.14.0\"},{\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.7.1\"},{\"kind\":\"dev\",\"name\":\"prettyplease\",\"req\":\"^0.2.30\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.27\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2.0\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.2.0\"}],\"features\":{}}", + "diplomat_core_0.14.0": "{\"dependencies\":[{\"name\":\"displaydoc\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"either\",\"optional\":true,\"req\":\"^1.9.0\"},{\"features\":[\"yaml\"],\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.7.1\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.27\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"derive\",\"alloc\"],\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"smallvec\",\"req\":\"^1.9.0\"},{\"features\":[\"ident\"],\"name\":\"strck\",\"req\":\"^1.0\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{\"hir\":[\"either\"]}}", "dirs-next_2.0.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"dirs-sys-next\",\"req\":\"^0.1\"}],\"features\":{}}", "dirs-sys-next_0.1.2": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"default_features\":false,\"name\":\"redox_users\",\"req\":\"^0.4.0\",\"target\":\"cfg(target_os = \\\"redox\\\")\"},{\"features\":[\"knownfolders\",\"objbase\",\"shlobj\",\"winbase\",\"winerror\"],\"name\":\"winapi\",\"req\":\"^0.3\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "dirs-sys_0.5.0": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"name\":\"option-ext\",\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"redox_users\",\"req\":\"^0.5\",\"target\":\"cfg(target_os = \\\"redox\\\")\"},{\"features\":[\"Win32_UI_Shell\",\"Win32_Foundation\",\"Win32_Globalization\",\"Win32_System_Com\"],\"name\":\"windows-sys\",\"req\":\">=0.59.0\",\"target\":\"cfg(windows)\"}],\"features\":{}}", @@ -840,6 +845,7 @@ "form_urlencoded_1.2.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"percent-encoding\",\"req\":\"^2.3.0\"}],\"features\":{\"alloc\":[\"percent-encoding/alloc\"],\"default\":[\"std\"],\"std\":[\"alloc\",\"percent-encoding/std\"]}}", "fs_extra_1.3.0": "{\"dependencies\":[],\"features\":{}}", "fsevent-sys_4.1.0": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2.68\"}],\"features\":{}}", + "fslock_0.2.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.66\",\"target\":\"cfg(unix)\"},{\"features\":[\"minwindef\",\"minwinbase\",\"winbase\",\"errhandlingapi\",\"winerror\",\"winnt\",\"synchapi\",\"handleapi\",\"fileapi\",\"processthreadsapi\"],\"name\":\"winapi\",\"req\":\"^0.3.8\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "futures-channel_0.3.31": "{\"dependencies\":[{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.31\"},{\"default_features\":false,\"name\":\"futures-sink\",\"optional\":true,\"req\":\"^0.3.31\"}],\"features\":{\"alloc\":[\"futures-core/alloc\"],\"cfg-target-has-atomic\":[],\"default\":[\"std\"],\"sink\":[\"futures-sink\"],\"std\":[\"alloc\",\"futures-core/std\"],\"unstable\":[]}}", "futures-core_0.3.31": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"require-cas\"],\"name\":\"portable-atomic\",\"optional\":true,\"req\":\"^1.3\"}],\"features\":{\"alloc\":[],\"cfg-target-has-atomic\":[],\"default\":[\"std\"],\"std\":[\"alloc\"],\"unstable\":[]}}", "futures-executor_0.3.31": "{\"dependencies\":[{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.31\"},{\"default_features\":false,\"name\":\"futures-task\",\"req\":\"^0.3.31\"},{\"default_features\":false,\"name\":\"futures-util\",\"req\":\"^0.3.31\"},{\"name\":\"num_cpus\",\"optional\":true,\"req\":\"^1.8.0\"}],\"features\":{\"default\":[\"std\"],\"std\":[\"futures-core/std\",\"futures-task/std\",\"futures-util/std\"],\"thread-pool\":[\"std\",\"num_cpus\"]}}", @@ -869,6 +875,7 @@ "git+https://github.com/openai-oss-forks/tungstenite-rs?rev=9200079d3b54a1ff51072e24d81fd354f085156f#9200079d3b54a1ff51072e24d81fd354f085156f_tungstenite": "{\"dependencies\":[{\"name\":\"bytes\"},{\"default_features\":true,\"features\":[],\"name\":\"data-encoding\",\"optional\":true},{\"default_features\":false,\"features\":[\"zlib\"],\"name\":\"flate2\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"headers\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"http\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"httparse\",\"optional\":true},{\"name\":\"log\"},{\"default_features\":true,\"features\":[],\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\"},{\"name\":\"rand\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"rustls\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"rustls-native-certs\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"rustls-pki-types\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"sha1\",\"optional\":true},{\"name\":\"thiserror\"},{\"default_features\":true,\"features\":[],\"name\":\"url\",\"optional\":true},{\"name\":\"utf-8\"},{\"default_features\":true,\"features\":[],\"name\":\"webpki-roots\",\"optional\":true}],\"features\":{\"__rustls-tls\":[\"rustls\",\"rustls-pki-types\"],\"default\":[\"handshake\"],\"deflate\":[\"headers\",\"flate2\"],\"handshake\":[\"data-encoding\",\"headers\",\"httparse\",\"sha1\"],\"headers\":[\"http\",\"dep:headers\"],\"native-tls\":[\"native-tls-crate\"],\"native-tls-vendored\":[\"native-tls\",\"native-tls-crate/vendored\"],\"proxy\":[\"handshake\"],\"rustls-tls-native-roots\":[\"__rustls-tls\",\"rustls-native-certs\"],\"rustls-tls-webpki-roots\":[\"__rustls-tls\",\"webpki-roots\"],\"url\":[\"dep:url\"]},\"strip_prefix\":\"\"}", "glob_0.3.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3\"}],\"features\":{}}", "globset_0.4.18": "{\"dependencies\":[{\"name\":\"aho-corasick\",\"req\":\"^1.1.1\"},{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.3.2\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"bstr\",\"req\":\"^1.6.2\"},{\"kind\":\"dev\",\"name\":\"glob\",\"req\":\"^0.3.1\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.20\"},{\"default_features\":false,\"features\":[\"std\",\"perf\",\"syntax\",\"meta\",\"nfa\",\"hybrid\"],\"name\":\"regex-automata\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"regex-syntax\",\"req\":\"^0.8.0\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.188\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.107\"}],\"features\":{\"arbitrary\":[\"dep:arbitrary\"],\"default\":[\"log\"],\"serde1\":[\"serde\"],\"simd-accel\":[]}}", + "gzip-header_1.0.0": "{\"dependencies\":[{\"name\":\"crc32fast\",\"req\":\"^1.2.1\"}],\"features\":{}}", "h2_0.4.13": "{\"dependencies\":[{\"name\":\"atomic-waker\",\"req\":\"^1.0.0\"},{\"name\":\"bytes\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\"},{\"name\":\"fnv\",\"req\":\"^1.0.5\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-sink\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"http\",\"req\":\"^1\"},{\"features\":[\"std\"],\"name\":\"indexmap\",\"req\":\"^2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.0\"},{\"name\":\"slab\",\"req\":\"^0.4.2\"},{\"features\":[\"io-util\"],\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"rt-multi-thread\",\"macros\",\"sync\",\"net\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tokio-rustls\",\"req\":\"^0.26\"},{\"features\":[\"codec\",\"io\"],\"name\":\"tokio-util\",\"req\":\"^0.7.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"tracing\",\"req\":\"^0.1.35\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.3.2\"},{\"kind\":\"dev\",\"name\":\"webpki-roots\",\"req\":\"^1\"}],\"features\":{\"stream\":[],\"unstable\":[]}}", "half_2.7.1": "{\"dependencies\":[{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.4.1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.4.1\"},{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"name\":\"crunchy\",\"req\":\"^0.2.2\",\"target\":\"cfg(target_arch = \\\"spirv\\\")\"},{\"kind\":\"dev\",\"name\":\"crunchy\",\"req\":\"^0.2.2\"},{\"default_features\":false,\"features\":[\"libm\"],\"name\":\"num-traits\",\"optional\":true,\"req\":\"^0.2.16\"},{\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"quickcheck_macros\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9.0\"},{\"default_features\":false,\"name\":\"rand_distr\",\"optional\":true,\"req\":\"^0.5.0\"},{\"name\":\"rkyv\",\"optional\":true,\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"derive\",\"simd\"],\"name\":\"zerocopy\",\"req\":\"^0.8.26\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"nightly\":[],\"rand_distr\":[\"dep:rand\",\"dep:rand_distr\"],\"std\":[\"alloc\"],\"use-intrinsics\":[],\"zerocopy\":[]}}", "hashbrown_0.12.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ahash\",\"optional\":true,\"req\":\"^0.7.0\"},{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"name\":\"bumpalo\",\"optional\":true,\"req\":\"^3.5.0\"},{\"name\":\"compiler_builtins\",\"optional\":true,\"req\":\"^0.1.2\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3.1\"},{\"kind\":\"dev\",\"name\":\"fnv\",\"req\":\"^1.0.7\"},{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1.4\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.3\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.25\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"ahash-compile-time-rng\":[\"ahash/compile-time-rng\"],\"default\":[\"ahash\",\"inline-more\"],\"inline-more\":[],\"nightly\":[],\"raw\":[],\"rustc-dep-of-std\":[\"nightly\",\"core\",\"compiler_builtins\",\"alloc\",\"rustc-internal-api\"],\"rustc-internal-api\":[]}}", @@ -906,6 +913,8 @@ "i18n-embed_0.15.4": "{\"dependencies\":[{\"name\":\"arc-swap\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"name\":\"fluent\",\"optional\":true,\"req\":\"^0.16\"},{\"name\":\"fluent-langneg\",\"req\":\"^0.13\"},{\"name\":\"fluent-syntax\",\"optional\":true,\"req\":\"^0.11\"},{\"name\":\"gettext\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"i18n-embed-impl\",\"optional\":true,\"req\":\"^0.8.4\"},{\"name\":\"intl-memoizer\",\"req\":\"^0.5\"},{\"name\":\"locale_config\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"log\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"maplit\",\"req\":\"^1.0\"},{\"name\":\"notify\",\"optional\":true,\"req\":\"^8.0.0\"},{\"name\":\"parking_lot\",\"optional\":true,\"req\":\"^0.12\"},{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^1.4\"},{\"name\":\"rust-embed\",\"optional\":true,\"req\":\"^8.0\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^3.0\"},{\"name\":\"thiserror\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"tr\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"unic-langid\",\"req\":\"^0.9\"},{\"name\":\"walkdir\",\"optional\":true,\"req\":\"^2.4\"},{\"features\":[\"Window\",\"Navigator\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\"}],\"features\":{\"autoreload\":[\"notify\"],\"default\":[\"rust-embed\"],\"desktop-requester\":[\"locale_config\"],\"filesystem-assets\":[\"walkdir\"],\"fluent-system\":[\"fluent\",\"fluent-syntax\",\"parking_lot\",\"i18n-embed-impl\",\"i18n-embed-impl/fluent-system\",\"arc-swap\"],\"gettext-system\":[\"tr\",\"tr/gettext\",\"dep:gettext\",\"parking_lot\",\"i18n-embed-impl\",\"i18n-embed-impl/gettext-system\"],\"web-sys-requester\":[\"web-sys\"]}}", "iana-time-zone-haiku_0.1.2": "{\"dependencies\":[{\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.0.79\"}],\"features\":{}}", "iana-time-zone_0.1.65": "{\"dependencies\":[{\"name\":\"android_system_properties\",\"req\":\"^0.1.5\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"kind\":\"dev\",\"name\":\"chrono-tz\",\"req\":\"^0.10.1\"},{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.6\",\"target\":\"cfg(target_vendor = \\\"apple\\\")\"},{\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2.1\"},{\"features\":[\"js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2.1\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"iana-time-zone-haiku\",\"req\":\"^0.1.1\",\"target\":\"cfg(target_os = \\\"haiku\\\")\"},{\"name\":\"js-sys\",\"req\":\"^0.3.66\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"log\",\"req\":\"^0.4.14\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.46\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"windows-core\",\"req\":\">=0.56, <=0.62\",\"target\":\"cfg(target_os = \\\"windows\\\")\"}],\"features\":{\"fallback\":[]}}", + "icu_calendar_2.1.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"calendrical_calculations\",\"req\":\"^0.2.3\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"name\":\"icu_calendar_data\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale_core\",\"req\":\"^2.1.1\"},{\"default_features\":false,\"name\":\"icu_provider\",\"req\":\"^2.1.1\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"name\":\"ixdtf\",\"optional\":true,\"req\":\"^0.6.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"derive\",\"alloc\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"kind\":\"dev\",\"name\":\"simple_logger\",\"req\":\"^5.0.0\"},{\"default_features\":false,\"features\":[\"zerovec\"],\"name\":\"tinystr\",\"req\":\"^0.8.0\"},{\"kind\":\"dev\",\"name\":\"ureq\",\"req\":\"^3.0.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"zerovec\",\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"icu_locale_core/alloc\",\"tinystr/alloc\",\"serde?/alloc\"],\"compiled_data\":[\"dep:icu_calendar_data\",\"dep:icu_locale\",\"icu_locale?/compiled_data\",\"icu_provider/baked\"],\"datagen\":[\"serde\",\"dep:databake\",\"zerovec/databake\",\"tinystr/databake\",\"alloc\",\"icu_provider/export\"],\"default\":[\"compiled_data\",\"ixdtf\"],\"ixdtf\":[\"dep:ixdtf\"],\"logging\":[\"calendrical_calculations/logging\"],\"serde\":[\"dep:serde\",\"zerovec/serde\",\"tinystr/serde\",\"icu_provider/serde\"],\"unstable\":[]}}", + "icu_calendar_data_2.1.1": "{\"dependencies\":[],\"features\":{}}", "icu_collections_2.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"kind\":\"dev\",\"name\":\"iai\",\"req\":\"^0.1.1\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"default_features\":false,\"features\":[\"zerovec\"],\"name\":\"potential_utf\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"features\":[\"parse\"],\"kind\":\"dev\",\"name\":\"toml\",\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"yoke\",\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"zerofrom\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"features\":[\"derive\",\"yoke\"],\"name\":\"zerovec\",\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde?/alloc\",\"zerovec/alloc\"],\"databake\":[\"dep:databake\",\"zerovec/databake\"],\"serde\":[\"dep:serde\",\"zerovec/serde\",\"potential_utf/serde\",\"alloc\"]}}", "icu_decimal_2.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"fixed_decimal\",\"req\":\"^0.7.0\"},{\"features\":[\"wasm_js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"icu_decimal_data\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale_core\",\"req\":\"^2.1.1\"},{\"default_features\":false,\"name\":\"icu_provider\",\"req\":\"^2.1.1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand_distr\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"name\":\"writeable\",\"req\":\"^0.6.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"zerovec\",\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde?/alloc\",\"zerovec/alloc\"],\"compiled_data\":[\"dep:icu_decimal_data\",\"dep:icu_locale\",\"icu_locale?/compiled_data\",\"icu_provider/baked\"],\"datagen\":[\"serde\",\"dep:databake\",\"zerovec/databake\",\"icu_provider/export\",\"alloc\"],\"default\":[\"compiled_data\"],\"ryu\":[\"fixed_decimal/ryu\"],\"serde\":[\"dep:serde\",\"icu_provider/serde\",\"zerovec/serde\"]}}", "icu_decimal_data_2.1.1": "{\"dependencies\":[],\"features\":{}}", @@ -949,6 +958,7 @@ "itertools_0.13.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"name\":\"either\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"permutohedron\",\"req\":\"^0.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.7\"}],\"features\":{\"default\":[\"use_std\"],\"use_alloc\":[],\"use_std\":[\"use_alloc\",\"either/use_std\"]}}", "itertools_0.14.0": "{\"dependencies\":[{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"name\":\"either\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"permutohedron\",\"req\":\"^0.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.7\"}],\"features\":{\"default\":[\"use_std\"],\"use_alloc\":[],\"use_std\":[\"use_alloc\",\"either/use_std\"]}}", "itoa_1.0.17": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(not(miri))\"},{\"name\":\"no-panic\",\"optional\":true,\"req\":\"^0.1\"}],\"features\":{}}", + "ixdtf_0.6.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"serde-json-core\",\"req\":\"^0.6.0\"}],\"features\":{\"default\":[\"duration\"],\"duration\":[]}}", "jiff-static_0.2.18": "{\"dependencies\":[{\"name\":\"jiff-tzdb\",\"optional\":true,\"req\":\"^0.1.4\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.93\"},{\"name\":\"quote\",\"req\":\"^1.0.38\"},{\"name\":\"syn\",\"req\":\"^2.0.98\"}],\"features\":{\"default\":[],\"perf-inline\":[],\"tz-fat\":[],\"tzdb\":[\"dep:jiff-tzdb\"]}}", "jiff_0.2.18": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.81\"},{\"features\":[\"serde\"],\"kind\":\"dev\",\"name\":\"chrono\",\"req\":\"^0.4.38\"},{\"kind\":\"dev\",\"name\":\"chrono-tz\",\"req\":\"^0.10.0\"},{\"kind\":\"dev\",\"name\":\"hifitime\",\"req\":\"^3.9.0\",\"target\":\"cfg(not(target_family = \\\"wasm\\\"))\"},{\"kind\":\"dev\",\"name\":\"humantime\",\"req\":\"^2.1.0\"},{\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.39.0\"},{\"name\":\"jiff-static\",\"req\":\"=0.2.18\",\"target\":\"cfg(any())\"},{\"name\":\"jiff-static\",\"optional\":true,\"req\":\"^0.2\"},{\"name\":\"jiff-tzdb\",\"optional\":true,\"req\":\"^0.1.5\"},{\"name\":\"jiff-tzdb-platform\",\"optional\":true,\"req\":\"^0.1.3\",\"target\":\"cfg(any(windows, target_family = \\\"wasm\\\"))\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3.50\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.21\"},{\"kind\":\"dev\",\"name\":\"log\",\"req\":\"^0.4.21\"},{\"default_features\":false,\"name\":\"portable-atomic\",\"req\":\"^1.10.0\",\"target\":\"cfg(not(target_has_atomic = \\\"ptr\\\"))\"},{\"default_features\":false,\"name\":\"portable-atomic-util\",\"req\":\"^0.2.4\",\"target\":\"cfg(not(target_has_atomic = \\\"ptr\\\"))\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.203\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.117\"},{\"kind\":\"dev\",\"name\":\"serde_yaml\",\"req\":\"^0.9.34\"},{\"kind\":\"dev\",\"name\":\"tabwriter\",\"req\":\"^1.4.0\"},{\"features\":[\"local-offset\",\"macros\",\"parsing\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3.36\"},{\"kind\":\"dev\",\"name\":\"tzfile\",\"req\":\"^0.1.3\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.5.0\"},{\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2.70\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"default_features\":false,\"features\":[\"Win32_Foundation\",\"Win32_System_Time\"],\"name\":\"windows-sys\",\"optional\":true,\"req\":\">=0.52.0, <=0.61\",\"target\":\"cfg(windows)\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\",\"portable-atomic-util/alloc\"],\"default\":[\"std\",\"tz-system\",\"tz-fat\",\"tzdb-bundle-platform\",\"tzdb-zoneinfo\",\"tzdb-concatenated\",\"perf-inline\"],\"js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"],\"logging\":[\"dep:log\"],\"perf-inline\":[],\"serde\":[\"dep:serde_core\"],\"static\":[\"static-tz\",\"jiff-static?/tzdb\"],\"static-tz\":[\"dep:jiff-static\"],\"std\":[\"alloc\",\"log?/std\",\"serde_core?/std\"],\"tz-fat\":[\"jiff-static?/tz-fat\"],\"tz-system\":[\"std\",\"dep:windows-sys\"],\"tzdb-bundle-always\":[\"dep:jiff-tzdb\",\"alloc\"],\"tzdb-bundle-platform\":[\"dep:jiff-tzdb-platform\",\"alloc\"],\"tzdb-concatenated\":[\"std\"],\"tzdb-zoneinfo\":[\"std\"]}}", "jni-sys_0.3.0": "{\"dependencies\":[],\"features\":{}}", @@ -1115,6 +1125,7 @@ "predicates-tree_1.0.12": "{\"dependencies\":[{\"features\":[\"color\"],\"kind\":\"dev\",\"name\":\"predicates\",\"req\":\"^3.1\"},{\"name\":\"predicates-core\",\"req\":\"^1.0\"},{\"name\":\"termtree\",\"req\":\"^0.5.0\"}],\"features\":{}}", "predicates_3.1.3": "{\"dependencies\":[{\"name\":\"anstyle\",\"req\":\"^1.0.0\"},{\"name\":\"difflib\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"float-cmp\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"normalize-line-endings\",\"optional\":true,\"req\":\"^0.3.0\"},{\"name\":\"predicates-core\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"predicates-tree\",\"req\":\"^1.0\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"color\":[],\"default\":[\"diff\",\"regex\",\"float-cmp\",\"normalize-line-endings\",\"color\"],\"diff\":[\"dep:difflib\"],\"unstable\":[]}}", "pretty_assertions_1.4.1": "{\"dependencies\":[{\"name\":\"diff\",\"req\":\"^0.1.12\"},{\"name\":\"yansi\",\"req\":\"^1.0.1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[],\"unstable\":[]}}", + "prettyplease_0.2.37": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"indoc\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0.35\"},{\"default_features\":false,\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0.105\"},{\"default_features\":false,\"features\":[\"clone-impls\",\"extra-traits\",\"parsing\",\"printing\",\"visit-mut\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0.105\"}],\"features\":{\"verbatim\":[\"syn/parsing\"]}}", "proc-macro-crate_3.4.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"proc-macro2\",\"req\":\"^1.0.94\"},{\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0.39\"},{\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0.99\"},{\"default_features\":false,\"features\":[\"parse\"],\"name\":\"toml_edit\",\"req\":\"^0.23.2\"}],\"features\":{}}", "proc-macro-error-attr2_2.0.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"}],\"features\":{}}", "proc-macro-error2_2.0.1": "{\"dependencies\":[{\"name\":\"proc-macro-error-attr2\",\"req\":\"=2.0.0\"},{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"syn\",\"optional\":true,\"req\":\"^2\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.99\"}],\"features\":{\"default\":[\"syn-error\"],\"nightly\":[],\"syn-error\":[\"dep:syn\"]}}", @@ -1176,6 +1187,7 @@ "regex-syntax_0.8.8": "{\"dependencies\":[{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.3.0\"}],\"features\":{\"arbitrary\":[\"dep:arbitrary\"],\"default\":[\"std\",\"unicode\"],\"std\":[],\"unicode\":[\"unicode-age\",\"unicode-bool\",\"unicode-case\",\"unicode-gencat\",\"unicode-perl\",\"unicode-script\",\"unicode-segment\"],\"unicode-age\":[],\"unicode-bool\":[],\"unicode-case\":[],\"unicode-gencat\":[],\"unicode-perl\":[],\"unicode-script\":[],\"unicode-segment\":[]}}", "regex_1.12.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aho-corasick\",\"optional\":true,\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.69\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"atty\",\"humantime\",\"termcolor\"],\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.9.3\"},{\"default_features\":false,\"name\":\"memchr\",\"optional\":true,\"req\":\"^2.6.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"default_features\":false,\"features\":[\"alloc\",\"syntax\",\"meta\",\"nfa-pikevm\"],\"name\":\"regex-automata\",\"req\":\"^0.4.12\"},{\"default_features\":false,\"name\":\"regex-syntax\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"regex-test\",\"req\":\"^0.1.0\"}],\"features\":{\"default\":[\"std\",\"perf\",\"unicode\",\"regex-syntax/default\"],\"logging\":[\"aho-corasick?/logging\",\"memchr?/logging\",\"regex-automata/logging\"],\"pattern\":[],\"perf\":[\"perf-cache\",\"perf-dfa\",\"perf-onepass\",\"perf-backtrack\",\"perf-inline\",\"perf-literal\"],\"perf-backtrack\":[\"regex-automata/nfa-backtrack\"],\"perf-cache\":[],\"perf-dfa\":[\"regex-automata/hybrid\"],\"perf-dfa-full\":[\"regex-automata/dfa-build\",\"regex-automata/dfa-search\"],\"perf-inline\":[\"regex-automata/perf-inline\"],\"perf-literal\":[\"dep:aho-corasick\",\"dep:memchr\",\"regex-automata/perf-literal\"],\"perf-onepass\":[\"regex-automata/dfa-onepass\"],\"std\":[\"aho-corasick?/std\",\"memchr?/std\",\"regex-automata/std\",\"regex-syntax/std\"],\"unicode\":[\"unicode-age\",\"unicode-bool\",\"unicode-case\",\"unicode-gencat\",\"unicode-perl\",\"unicode-script\",\"unicode-segment\",\"regex-automata/unicode\",\"regex-syntax/unicode\"],\"unicode-age\":[\"regex-automata/unicode-age\",\"regex-syntax/unicode-age\"],\"unicode-bool\":[\"regex-automata/unicode-bool\",\"regex-syntax/unicode-bool\"],\"unicode-case\":[\"regex-automata/unicode-case\",\"regex-syntax/unicode-case\"],\"unicode-gencat\":[\"regex-automata/unicode-gencat\",\"regex-syntax/unicode-gencat\"],\"unicode-perl\":[\"regex-automata/unicode-perl\",\"regex-automata/unicode-word-boundary\",\"regex-syntax/unicode-perl\"],\"unicode-script\":[\"regex-automata/unicode-script\",\"regex-syntax/unicode-script\"],\"unicode-segment\":[\"regex-automata/unicode-segment\",\"regex-syntax/unicode-segment\"],\"unstable\":[\"pattern\"],\"use_std\":[\"std\"]}}", "reqwest_0.12.28": "{\"dependencies\":[{\"name\":\"base64\",\"req\":\"^0.22\"},{\"kind\":\"dev\",\"name\":\"brotli_crate\",\"package\":\"brotli\",\"req\":\"^8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"bytes\",\"req\":\"^1.2\"},{\"name\":\"cookie_crate\",\"optional\":true,\"package\":\"cookie\",\"req\":\"^0.18.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"cookie_store\",\"optional\":true,\"req\":\"^0.22.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"encoding_rs\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"flate2\",\"req\":\"^1.0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"futures-channel\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.28\"},{\"default_features\":false,\"name\":\"futures-util\",\"optional\":true,\"req\":\"^0.3.28\"},{\"default_features\":false,\"features\":[\"std\",\"alloc\"],\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3.28\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h2\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3\",\"optional\":true,\"req\":\"^0.0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3-quinn\",\"optional\":true,\"req\":\"^0.0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"tokio\"],\"name\":\"hickory-resolver\",\"optional\":true,\"req\":\"^0.25\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http\",\"req\":\"^1.1\"},{\"name\":\"http-body\",\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http-body-util\",\"req\":\"^0.1.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\"],\"name\":\"hyper\",\"req\":\"^1.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"http2\",\"client\",\"server\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^1.1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"tls12\"],\"name\":\"hyper-rustls\",\"optional\":true,\"req\":\"^0.27.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"hyper-tls\",\"optional\":true,\"req\":\"^0.6\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\",\"client-legacy\",\"client-proxy\",\"tokio\"],\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"http2\",\"client\",\"client-legacy\",\"server-auto\",\"server-graceful\",\"tokio\"],\"kind\":\"dev\",\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"js-sys\",\"req\":\"^0.3.77\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0\"},{\"name\":\"log\",\"req\":\"^0.4.17\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"mime\",\"optional\":true,\"req\":\"^0.3.16\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"mime_guess\",\"optional\":true,\"req\":\"^2.0\"},{\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\",\"req\":\"^0.2.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.0\"},{\"name\":\"once_cell\",\"optional\":true,\"req\":\"^1.18\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"percent-encoding\",\"req\":\"^2.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2.11\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"rustls\",\"runtime-tokio\"],\"name\":\"quinn\",\"optional\":true,\"req\":\"^0.11.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"std\",\"tls12\"],\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.8.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"std\"],\"name\":\"rustls-pki-types\",\"optional\":true,\"req\":\"^1.9.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde\",\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde_json\",\"req\":\"^1.0\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_urlencoded\",\"req\":\"^0.7.1\"},{\"features\":[\"futures\"],\"name\":\"sync_wrapper\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"net\",\"time\"],\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tokio-native-tls\",\"optional\":true,\"req\":\"^0.3.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"tls12\"],\"name\":\"tokio-rustls\",\"optional\":true,\"req\":\"^0.26\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"io\"],\"name\":\"tokio-util\",\"optional\":true,\"req\":\"^0.7.9\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"retry\",\"timeout\",\"util\"],\"name\":\"tower\",\"req\":\"^0.5.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"limit\"],\"kind\":\"dev\",\"name\":\"tower\",\"req\":\"^0.5.2\"},{\"default_features\":false,\"features\":[\"follow-redirect\"],\"name\":\"tower-http\",\"req\":\"^0.6.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tower-service\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"url\",\"req\":\"^2.4\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"serde-serialize\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.18\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-streams\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"AbortController\",\"AbortSignal\",\"Headers\",\"Request\",\"RequestInit\",\"RequestMode\",\"Response\",\"Window\",\"FormData\",\"Blob\",\"BlobPropertyBag\",\"ServiceWorkerGlobalScope\",\"RequestCredentials\",\"File\",\"ReadableStream\",\"RequestCache\"],\"name\":\"web-sys\",\"req\":\"^0.3.28\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"zstd_crate\",\"package\":\"zstd\",\"req\":\"^0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"}],\"features\":{\"__rustls\":[\"dep:hyper-rustls\",\"dep:tokio-rustls\",\"dep:rustls\",\"__tls\"],\"__rustls-ring\":[\"hyper-rustls?/ring\",\"tokio-rustls?/ring\",\"rustls?/ring\",\"quinn?/ring\"],\"__tls\":[\"dep:rustls-pki-types\",\"tokio/io-util\"],\"blocking\":[\"dep:futures-channel\",\"futures-channel?/sink\",\"dep:futures-util\",\"futures-util?/io\",\"futures-util?/sink\",\"tokio/sync\"],\"brotli\":[\"tower-http/decompression-br\"],\"charset\":[\"dep:encoding_rs\",\"dep:mime\"],\"cookies\":[\"dep:cookie_crate\",\"dep:cookie_store\"],\"default\":[\"default-tls\",\"charset\",\"http2\",\"system-proxy\"],\"default-tls\":[\"dep:hyper-tls\",\"dep:native-tls-crate\",\"__tls\",\"dep:tokio-native-tls\"],\"deflate\":[\"tower-http/decompression-deflate\"],\"gzip\":[\"tower-http/decompression-gzip\"],\"hickory-dns\":[\"dep:hickory-resolver\",\"dep:once_cell\"],\"http2\":[\"h2\",\"hyper/http2\",\"hyper-util/http2\",\"hyper-rustls?/http2\"],\"http3\":[\"rustls-tls-manual-roots\",\"dep:h3\",\"dep:h3-quinn\",\"dep:quinn\",\"tokio/macros\"],\"json\":[\"dep:serde_json\"],\"macos-system-configuration\":[\"system-proxy\"],\"multipart\":[\"dep:mime_guess\",\"dep:futures-util\"],\"native-tls\":[\"default-tls\"],\"native-tls-alpn\":[\"native-tls\",\"native-tls-crate?/alpn\",\"hyper-tls?/alpn\"],\"native-tls-vendored\":[\"native-tls\",\"native-tls-crate?/vendored\"],\"rustls-tls\":[\"rustls-tls-webpki-roots\"],\"rustls-tls-manual-roots\":[\"rustls-tls-manual-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-manual-roots-no-provider\":[\"__rustls\"],\"rustls-tls-native-roots\":[\"rustls-tls-native-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-native-roots-no-provider\":[\"dep:rustls-native-certs\",\"hyper-rustls?/native-tokio\",\"__rustls\"],\"rustls-tls-no-provider\":[\"rustls-tls-manual-roots-no-provider\"],\"rustls-tls-webpki-roots\":[\"rustls-tls-webpki-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-webpki-roots-no-provider\":[\"dep:webpki-roots\",\"hyper-rustls?/webpki-tokio\",\"__rustls\"],\"socks\":[],\"stream\":[\"tokio/fs\",\"dep:futures-util\",\"dep:tokio-util\",\"dep:wasm-streams\"],\"system-proxy\":[\"hyper-util/client-proxy-system\"],\"trust-dns\":[],\"zstd\":[\"tower-http/decompression-zstd\"]}}", + "resb_0.1.1": "{\"dependencies\":[{\"name\":\"indexmap\",\"optional\":true,\"req\":\"^2.0.0\"},{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.17\"},{\"name\":\"nom\",\"optional\":true,\"req\":\"^7.0.0\"},{\"default_features\":false,\"name\":\"potential_utf\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serde_core\",\"req\":\"^1.0.220\"}],\"features\":{\"default\":[],\"logging\":[\"dep:log\"],\"serialize\":[\"std\"],\"std\":[],\"text\":[\"dep:indexmap\",\"dep:nom\",\"std\"]}}", "resolv-conf_0.7.6": "{\"dependencies\":[],\"features\":{\"system\":[]}}", "ring_0.17.14": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.2.8\"},{\"default_features\":false,\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"getrandom\",\"req\":\"^0.2.10\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.148\",\"target\":\"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2.148\",\"target\":\"cfg(any(unix, windows, target_os = \\\"wasi\\\"))\"},{\"name\":\"untrusted\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.37\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"features\":[\"Win32_Foundation\",\"Win32_System_Threading\"],\"name\":\"windows-sys\",\"req\":\"^0.52\",\"target\":\"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\",\"dev_urandom_fallback\"],\"dev_urandom_fallback\":[],\"less-safe-getrandom-custom-or-rdrand\":[],\"less-safe-getrandom-espidf\":[],\"slow_tests\":[],\"std\":[\"alloc\"],\"test_logging\":[],\"unstable-testing-arm-no-hw\":[],\"unstable-testing-arm-no-neon\":[],\"wasm32_unknown_unknown_js\":[\"getrandom/js\"]}}", "rmcp-macros_0.15.0": "{\"dependencies\":[{\"name\":\"darling\",\"req\":\"^0.23\"},{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", @@ -1287,6 +1299,7 @@ "starlark_syntax_0.13.0": "{\"dependencies\":[{\"name\":\"allocative\",\"req\":\"^0.3.4\"},{\"name\":\"annotate-snippets\",\"req\":\"^0.9.0\"},{\"name\":\"anyhow\",\"req\":\"^1.0.65\"},{\"name\":\"derivative\",\"req\":\"^2.2\"},{\"features\":[\"full\"],\"name\":\"derive_more\",\"req\":\"^1.0.0\"},{\"name\":\"dupe\",\"req\":\"^0.9.0\"},{\"kind\":\"build\",\"name\":\"lalrpop\",\"req\":\"^0.19.7\"},{\"name\":\"lalrpop-util\",\"req\":\"^0.19.7\"},{\"name\":\"logos\",\"req\":\"^0.12\"},{\"name\":\"lsp-types\",\"req\":\"^0.94.1\"},{\"name\":\"memchr\",\"req\":\"^2.4.1\"},{\"name\":\"num-bigint\",\"req\":\"^0.4.3\"},{\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"name\":\"once_cell\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"name\":\"starlark_map\",\"req\":\"^0.13.0\"},{\"name\":\"thiserror\",\"req\":\"^1.0.36\"}],\"features\":{}}", "static_assertions_1.1.0": "{\"dependencies\":[],\"features\":{\"nightly\":[]}}", "stop-words_0.9.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"human_regex\",\"req\":\"^0.3.0\"},{\"kind\":\"build\",\"name\":\"serde_json\",\"req\":\"^1\"}],\"features\":{\"constructed\":[],\"default\":[\"iso\"],\"iso\":[],\"nltk\":[],\"unimplemented\":[]}}", + "strck_1.0.0": "{\"dependencies\":[{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"smol_str\",\"req\":\"^0.3\"},{\"name\":\"unicode-ident\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"ident\":[\"dep:unicode-ident\"]}}", "streaming-iterator_0.1.9": "{\"dependencies\":[],\"features\":{\"alloc\":[],\"std\":[\"alloc\"]}}", "string_cache_0.8.9": "{\"dependencies\":[{\"default_features\":false,\"name\":\"malloc_size_of\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"new_debug_unreachable\",\"req\":\"^1.0.2\"},{\"name\":\"parking_lot\",\"req\":\"^0.12\"},{\"name\":\"phf_shared\",\"req\":\"^0.11\"},{\"name\":\"precomputed-hash\",\"req\":\"^0.1\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[\"serde_support\"],\"serde_support\":[\"serde\"]}}", "stringprep_0.1.5": "{\"dependencies\":[{\"name\":\"unicode-bidi\",\"req\":\"^0.3\"},{\"name\":\"unicode-normalization\",\"req\":\"^0.1\"},{\"name\":\"unicode-properties\",\"req\":\"^0.1.1\"}],\"features\":{}}", @@ -1311,6 +1324,8 @@ "tagptr_0.2.0": "{\"dependencies\":[],\"features\":{}}", "tar_0.4.44": "{\"dependencies\":[{\"name\":\"filetime\",\"req\":\"^0.2.8\"},{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"},{\"name\":\"xattr\",\"optional\":true,\"req\":\"^1.1.3\",\"target\":\"cfg(unix)\"}],\"features\":{\"default\":[\"xattr\"]}}", "tempfile_3.24.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"name\":\"fastrand\",\"req\":\"^2.1.1\"},{\"default_features\":false,\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.0\",\"target\":\"cfg(any(unix, windows, target_os = \\\"wasi\\\"))\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"once_cell\",\"req\":\"^1.19.0\"},{\"features\":[\"fs\"],\"name\":\"rustix\",\"req\":\"^1.1.3\",\"target\":\"cfg(any(unix, target_os = \\\"wasi\\\"))\"},{\"features\":[\"Win32_Storage_FileSystem\",\"Win32_Foundation\"],\"name\":\"windows-sys\",\"req\":\">=0.52, <0.62\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"getrandom\"],\"nightly\":[]}}", + "temporal_capi_0.1.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"diplomat\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"name\":\"diplomat-runtime\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"features\":[\"unstable\"],\"name\":\"icu_calendar\",\"req\":\"^2.1.0\"},{\"name\":\"icu_locale\",\"req\":\"^2.1.0\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.19\"},{\"default_features\":false,\"name\":\"temporal_rs\",\"req\":\"^0.1.2\"},{\"name\":\"timezone_provider\",\"req\":\"^0.1.2\"},{\"name\":\"writeable\",\"req\":\"^0.6.0\"},{\"name\":\"zoneinfo64\",\"optional\":true,\"req\":\"^0.2.0\"}],\"features\":{\"compiled_data\":[\"temporal_rs/compiled_data\"],\"zoneinfo64\":[\"dep:zoneinfo64\",\"timezone_provider/zoneinfo64\"]}}", + "temporal_rs_0.1.2": "{\"dependencies\":[{\"name\":\"core_maths\",\"req\":\"^0.1.1\"},{\"name\":\"iana-time-zone\",\"optional\":true,\"req\":\"^0.1.64\"},{\"default_features\":false,\"features\":[\"unstable\",\"compiled_data\"],\"name\":\"icu_calendar\",\"req\":\"^2.1.0\"},{\"name\":\"icu_locale\",\"req\":\"^2.1.0\"},{\"features\":[\"duration\"],\"name\":\"ixdtf\",\"req\":\"^0.6.4\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.28\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.19\"},{\"name\":\"timezone_provider\",\"req\":\"^0.1.2\"},{\"name\":\"tinystr\",\"req\":\"^0.8.0\"},{\"name\":\"web-time\",\"optional\":true,\"req\":\"^1.1.0\"},{\"name\":\"writeable\",\"req\":\"^0.6.0\"}],\"features\":{\"compiled_data\":[\"tzdb\"],\"default\":[\"sys\"],\"float64_representable_durations\":[],\"log\":[\"dep:log\"],\"std\":[],\"sys\":[\"std\",\"compiled_data\",\"dep:web-time\",\"dep:iana-time-zone\"],\"tzdb\":[\"std\",\"timezone_provider/tzif\"]}}", "term_0.7.0": "{\"dependencies\":[{\"name\":\"dirs-next\",\"req\":\"^2\"},{\"name\":\"rustversion\",\"req\":\"^1\",\"target\":\"cfg(windows)\"},{\"features\":[\"consoleapi\",\"wincon\",\"handleapi\",\"fileapi\"],\"name\":\"winapi\",\"req\":\"^0.3\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[]}}", "termcolor_1.4.1": "{\"dependencies\":[{\"name\":\"winapi-util\",\"req\":\"^0.1.3\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "terminal_size_0.4.3": "{\"dependencies\":[{\"features\":[\"termios\"],\"name\":\"rustix\",\"req\":\"^1.0.1\",\"target\":\"cfg(unix)\"},{\"features\":[\"Win32_Foundation\",\"Win32_System_Console\"],\"name\":\"windows-sys\",\"req\":\"^0.60.0\",\"target\":\"cfg(windows)\"}],\"features\":{}}", @@ -1331,6 +1346,7 @@ "time-core_0.1.8": "{\"dependencies\":[],\"features\":{\"large-dates\":[]}}", "time-macros_0.2.27": "{\"dependencies\":[{\"name\":\"num-conv\",\"req\":\"^0.2.0\"},{\"name\":\"time-core\",\"req\":\"=0.1.8\"}],\"features\":{\"formatting\":[],\"large-dates\":[],\"parsing\":[],\"serde\":[]}}", "time_0.3.47": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8.1\",\"target\":\"cfg(bench)\"},{\"features\":[\"powerfmt\"],\"name\":\"deranged\",\"req\":\"^0.5.2\"},{\"name\":\"itoa\",\"optional\":true,\"req\":\"^1.0.1\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3.58\",\"target\":\"cfg(all(target_family = \\\"wasm\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2.98\",\"target\":\"cfg(target_family = \\\"unix\\\")\"},{\"name\":\"num-conv\",\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"num-conv\",\"req\":\"^0.2.0\"},{\"name\":\"num_threads\",\"optional\":true,\"req\":\"^0.1.2\",\"target\":\"cfg(target_family = \\\"unix\\\")\"},{\"default_features\":false,\"name\":\"powerfmt\",\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"quickcheck\",\"optional\":true,\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"quickcheck_macros\",\"req\":\"^1.0.0\"},{\"default_features\":false,\"name\":\"rand08\",\"optional\":true,\"package\":\"rand\",\"req\":\"^0.8.4\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand08\",\"package\":\"rand\",\"req\":\"^0.8.4\"},{\"default_features\":false,\"name\":\"rand09\",\"optional\":true,\"package\":\"rand\",\"req\":\"^0.9.2\"},{\"default_features\":false,\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand09\",\"package\":\"rand\",\"req\":\"^0.9.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.26.1\"},{\"kind\":\"dev\",\"name\":\"rstest_reuse\",\"req\":\"^0.7.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.184\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.68\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.126\"},{\"name\":\"time-core\",\"req\":\"=0.1.8\"},{\"name\":\"time-macros\",\"optional\":true,\"req\":\"=0.2.27\"},{\"kind\":\"dev\",\"name\":\"time-macros\",\"req\":\"=0.2.27\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.102\",\"target\":\"cfg(__ui_tests)\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\"],\"default\":[\"std\"],\"formatting\":[\"dep:itoa\",\"std\",\"time-macros?/formatting\"],\"large-dates\":[\"time-core/large-dates\",\"time-macros?/large-dates\"],\"local-offset\":[\"std\",\"dep:libc\",\"dep:num_threads\"],\"macros\":[\"dep:time-macros\"],\"parsing\":[\"time-macros?/parsing\"],\"quickcheck\":[\"dep:quickcheck\",\"alloc\",\"deranged/quickcheck\"],\"rand\":[\"rand08\",\"rand09\"],\"rand08\":[\"dep:rand08\",\"deranged/rand08\"],\"rand09\":[\"dep:rand09\",\"deranged/rand09\"],\"serde\":[\"dep:serde_core\",\"time-macros?/serde\",\"deranged/serde\"],\"serde-human-readable\":[\"serde\",\"formatting\",\"parsing\"],\"serde-well-known\":[\"serde\",\"formatting\",\"parsing\"],\"std\":[\"alloc\"],\"wasm-bindgen\":[\"dep:js-sys\"]}}", + "timezone_provider_0.1.2": "{\"dependencies\":[{\"name\":\"combine\",\"optional\":true,\"req\":\"^4.6.7\"},{\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"name\":\"jiff-tzdb\",\"optional\":true,\"req\":\"^0.1.4\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.225\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0.145\"},{\"features\":[\"zerovec\"],\"name\":\"tinystr\",\"req\":\"^0.8.0\"},{\"name\":\"tzif\",\"optional\":true,\"req\":\"^0.4.0\"},{\"features\":[\"derive\"],\"name\":\"yoke\",\"optional\":true,\"req\":\"^0.8.0\"},{\"name\":\"zerotrie\",\"req\":\"^0.2.0\"},{\"features\":[\"derive\",\"alloc\"],\"name\":\"zerovec\",\"req\":\"^0.11.0\"},{\"name\":\"zoneinfo64\",\"optional\":true,\"req\":\"^0.2.0\"},{\"features\":[\"std\"],\"name\":\"zoneinfo_rs\",\"optional\":true,\"req\":\"^0.0.18\"}],\"features\":{\"datagen\":[\"std\",\"dep:serde\",\"dep:databake\",\"dep:yoke\",\"dep:serde_json\",\"tinystr/serde\",\"tinystr/databake\",\"zerotrie/serde\",\"zerotrie/databake\",\"zerovec/serde\",\"zerovec/databake\",\"zerovec/derive\",\"dep:zoneinfo_rs\",\"experimental_tzif\"],\"default\":[],\"experimental_tzif\":[],\"std\":[],\"tzif\":[\"dep:tzif\",\"dep:jiff-tzdb\",\"dep:combine\",\"std\"],\"zoneinfo64\":[\"dep:zoneinfo64\"]}}", "tiny-keccak_2.0.2": "{\"dependencies\":[{\"name\":\"crunchy\",\"req\":\"^0.2.2\"}],\"features\":{\"cshake\":[],\"default\":[],\"fips202\":[\"keccak\",\"shake\",\"sha3\"],\"k12\":[],\"keccak\":[],\"kmac\":[\"cshake\"],\"parallel_hash\":[\"cshake\"],\"sha3\":[],\"shake\":[],\"sp800\":[\"cshake\",\"kmac\",\"tuple_hash\"],\"tuple_hash\":[\"cshake\"]}}", "tiny_http_0.12.0": "{\"dependencies\":[{\"name\":\"ascii\",\"req\":\"^1.0\"},{\"name\":\"chunked_transfer\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"fdlimit\",\"req\":\"^0.1\"},{\"name\":\"httpdate\",\"req\":\"^1.0.2\"},{\"name\":\"log\",\"req\":\"^0.4.4\"},{\"name\":\"openssl\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rustc-serialize\",\"req\":\"^0.3\"},{\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.20\"},{\"name\":\"rustls-pemfile\",\"optional\":true,\"req\":\"^0.2.1\"},{\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.6.0\"},{\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[],\"ssl\":[\"ssl-openssl\"],\"ssl-openssl\":[\"openssl\",\"zeroize\"],\"ssl-rustls\":[\"rustls\",\"rustls-pemfile\",\"zeroize\"]}}", "tinystr_0.8.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"features\":[\"use-std\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.220\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"name\":\"zerovec\",\"optional\":true,\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\",\"zerovec?/alloc\"],\"databake\":[\"dep:databake\"],\"default\":[\"alloc\"],\"serde\":[\"dep:serde_core\"],\"std\":[],\"zerovec\":[\"dep:zerovec\"]}}", @@ -1406,6 +1422,7 @@ "utf8_iter_1.0.4": "{\"dependencies\":[],\"features\":{}}", "utf8parse_0.2.2": "{\"dependencies\":[],\"features\":{\"default\":[],\"nightly\":[]}}", "uuid_1.20.0": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.1.3\"},{\"default_features\":false,\"name\":\"atomic\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"borsh\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"borsh-derive\",\"optional\":true,\"req\":\"^1\"},{\"features\":[\"derive\"],\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.20.0\"},{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\"},{\"default_features\":false,\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"), target_feature = \\\"atomics\\\"))\"},{\"default_features\":false,\"name\":\"md-5\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.221\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.56\"},{\"default_features\":false,\"name\":\"sha1_smol\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"slog\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.52\"},{\"name\":\"uuid-rng-internal-lib\",\"optional\":true,\"package\":\"uuid-rng-internal\",\"req\":\"^1.20.0\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"default_features\":false,\"features\":[\"msrv\"],\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"features\":[\"derive\"],\"name\":\"zerocopy\",\"optional\":true,\"req\":\"^0.8\"}],\"features\":{\"atomic\":[\"dep:atomic\"],\"borsh\":[\"dep:borsh\",\"dep:borsh-derive\"],\"default\":[\"std\"],\"fast-rng\":[\"rng\",\"dep:rand\"],\"js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"],\"macro-diagnostics\":[],\"md5\":[\"dep:md-5\"],\"rng\":[\"dep:getrandom\"],\"rng-getrandom\":[\"rng\",\"dep:getrandom\",\"uuid-rng-internal-lib\",\"uuid-rng-internal-lib/getrandom\"],\"rng-rand\":[\"rng\",\"dep:rand\",\"uuid-rng-internal-lib\",\"uuid-rng-internal-lib/rand\"],\"serde\":[\"dep:serde_core\"],\"sha1\":[\"dep:sha1_smol\"],\"std\":[\"wasm-bindgen?/std\",\"js-sys?/std\"],\"v1\":[\"atomic\"],\"v3\":[\"md5\"],\"v4\":[\"rng\"],\"v5\":[\"sha1\"],\"v6\":[\"atomic\"],\"v7\":[\"rng\"],\"v8\":[]}}", + "v8_142.2.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"align-data\",\"req\":\"^0.1.0\"},{\"kind\":\"build\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"kind\":\"dev\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"name\":\"bitflags\",\"req\":\"^2.5\"},{\"kind\":\"dev\",\"name\":\"bytes\",\"req\":\"^1\"},{\"kind\":\"build\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"build\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"build\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"dev\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"build\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"kind\":\"dev\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"name\":\"paste\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"features\":[\"zoneinfo64\"],\"name\":\"temporal_capi\",\"req\":\"^0.1.0\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.96\"},{\"kind\":\"build\",\"name\":\"which\",\"req\":\"^6\"},{\"kind\":\"dev\",\"name\":\"which\",\"req\":\"^6\"}],\"features\":{\"default\":[\"use_custom_libcxx\"],\"use_custom_libcxx\":[],\"v8_enable_pointer_compression\":[],\"v8_enable_v8_checks\":[]}}", "valuable_0.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"name\":\"valuable-derive\",\"optional\":true,\"req\":\"=0.1.1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"derive\":[\"valuable-derive\"],\"std\":[\"alloc\"]}}", "vcpkg_0.2.15": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3.7\"}],\"features\":{}}", "version_check_0.9.5": "{\"dependencies\":[],\"features\":{}}", @@ -1436,6 +1453,7 @@ "webpki-roots_0.26.11": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"parent\",\"package\":\"webpki-roots\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"percent-encoding\",\"req\":\"^2.3\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"pki-types\",\"package\":\"rustls-pki-types\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"rcgen\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"ring\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"rustls\",\"req\":\"^0.23\"},{\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"webpki\",\"package\":\"rustls-webpki\",\"req\":\"^0.102\"},{\"kind\":\"dev\",\"name\":\"x509-parser\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"yasna\",\"req\":\"^0.5.2\"}],\"features\":{}}", "webpki-roots_1.0.5": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"percent-encoding\",\"req\":\"^2.3\"},{\"default_features\":false,\"name\":\"pki-types\",\"package\":\"rustls-pki-types\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"rcgen\",\"req\":\"^0.14.3\"},{\"kind\":\"dev\",\"name\":\"ring\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"rustls\",\"req\":\"^0.23\"},{\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"webpki\",\"package\":\"rustls-webpki\",\"req\":\"^0.103\"},{\"kind\":\"dev\",\"name\":\"x509-parser\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"yasna\",\"req\":\"^0.5.2\"}],\"features\":{}}", "weezl_0.1.12": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"futures\",\"optional\":true,\"req\":\"^0.3.12\"},{\"default_features\":false,\"features\":[\"macros\",\"io-util\",\"net\",\"rt\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"compat\"],\"kind\":\"dev\",\"name\":\"tokio-util\",\"req\":\"^0.6.2\"}],\"features\":{\"alloc\":[],\"async\":[\"futures\",\"std\"],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", + "which_6.0.3": "{\"dependencies\":[{\"name\":\"either\",\"req\":\"^1.9.0\"},{\"name\":\"home\",\"req\":\"^0.5.9\",\"target\":\"cfg(any(windows, unix, target_os = \\\"redox\\\"))\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.10.2\"},{\"default_features\":false,\"features\":[\"fs\",\"std\"],\"name\":\"rustix\",\"req\":\"^0.38.30\",\"target\":\"cfg(any(unix, target_os = \\\"wasi\\\", target_os = \\\"redox\\\"))\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.9.0\"},{\"default_features\":false,\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1.40\"},{\"features\":[\"kernel\"],\"name\":\"winsafe\",\"req\":\"^0.0.19\",\"target\":\"cfg(windows)\"}],\"features\":{\"regex\":[\"dep:regex\"],\"tracing\":[\"dep:tracing\"]}}", "which_8.0.0": "{\"dependencies\":[{\"name\":\"env_home\",\"optional\":true,\"req\":\"^0.1.0\",\"target\":\"cfg(any(windows, unix, target_os = \\\"redox\\\"))\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.10.2\"},{\"default_features\":false,\"features\":[\"fs\",\"std\"],\"name\":\"rustix\",\"optional\":true,\"req\":\"^1.0.5\",\"target\":\"cfg(any(unix, target_os = \\\"wasi\\\", target_os = \\\"redox\\\"))\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.9.0\"},{\"default_features\":false,\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1.40\"},{\"features\":[\"kernel\"],\"name\":\"winsafe\",\"optional\":true,\"req\":\"^0.0.19\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"real-sys\"],\"real-sys\":[\"dep:env_home\",\"dep:rustix\",\"dep:winsafe\"],\"regex\":[\"dep:regex\"],\"tracing\":[\"dep:tracing\"]}}", "whoami_1.6.1": "{\"dependencies\":[{\"name\":\"libredox\",\"req\":\"^0.1.1\",\"target\":\"cfg(all(target_os = \\\"redox\\\", not(target_arch = \\\"wasm32\\\")))\"},{\"name\":\"wasite\",\"req\":\"^0.1\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\"))\"},{\"features\":[\"Navigator\",\"Document\",\"Window\",\"Location\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(target_os = \\\"wasi\\\"), not(daku)))\"}],\"features\":{\"default\":[\"web\"],\"web\":[\"web-sys\"]}}", "widestring_1.2.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"debugger_test\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"debugger_test_parser\",\"req\":\"^0.1\"},{\"features\":[\"Win32_System_Diagnostics_Debug\"],\"kind\":\"dev\",\"name\":\"windows-sys\",\"req\":\"^0.59\"}],\"features\":{\"alloc\":[],\"debugger_visualizer\":[\"alloc\"],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", @@ -1542,6 +1560,7 @@ "zerovec_0.11.5": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"xxhash64\"],\"name\":\"twox-hash\",\"optional\":true,\"req\":\"^2.0.0\"},{\"default_features\":false,\"name\":\"yoke\",\"optional\":true,\"req\":\"^0.8.0\"},{\"default_features\":false,\"name\":\"zerofrom\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"zerovec-derive\",\"optional\":true,\"req\":\"^0.11.1\"}],\"features\":{\"alloc\":[\"serde?/alloc\"],\"databake\":[\"dep:databake\"],\"derive\":[\"dep:zerovec-derive\"],\"hashmap\":[\"dep:twox-hash\",\"alloc\"],\"serde\":[\"dep:serde\"],\"std\":[],\"yoke\":[\"dep:yoke\"]}}", "zip_2.4.2": "{\"dependencies\":[{\"name\":\"aes\",\"optional\":true,\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.95\"},{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"req\":\"^1.4.1\",\"target\":\"cfg(fuzzing)\"},{\"kind\":\"dev\",\"name\":\"bencher\",\"req\":\"^0.1.5\"},{\"name\":\"bzip2\",\"optional\":true,\"req\":\"^0.5.0\"},{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"=4.4.18\"},{\"name\":\"constant_time_eq\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"crc32fast\",\"req\":\"^1.4\"},{\"name\":\"crossbeam-utils\",\"req\":\"^0.8.21\",\"target\":\"cfg(any(all(target_arch = \\\"arm\\\", target_pointer_width = \\\"32\\\"), target_arch = \\\"mips\\\", target_arch = \\\"powerpc\\\"))\"},{\"name\":\"deflate64\",\"optional\":true,\"req\":\"^0.1.9\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"flate2\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"wasm_js\",\"std\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.1\"},{\"features\":[\"wasm_js\",\"std\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3.1\"},{\"features\":[\"reset\"],\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.12\"},{\"name\":\"indexmap\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"lzma-rs\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"memchr\",\"req\":\"^2.7\"},{\"default_features\":false,\"name\":\"nt-time\",\"optional\":true,\"req\":\"^0.10.6\"},{\"name\":\"pbkdf2\",\"optional\":true,\"req\":\"^0.12\"},{\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.15\"},{\"name\":\"thiserror\",\"req\":\"^2\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"time\",\"optional\":true,\"req\":\"^0.3.37\"},{\"default_features\":false,\"features\":[\"formatting\",\"macros\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3.37\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.5\"},{\"name\":\"xz2\",\"optional\":true,\"req\":\"^0.1.7\"},{\"features\":[\"zeroize_derive\"],\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8\"},{\"name\":\"zopfli\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"zstd\",\"optional\":true,\"req\":\"^0.13\"}],\"features\":{\"_all-features\":[],\"_deflate-any\":[],\"aes-crypto\":[\"aes\",\"constant_time_eq\",\"hmac\",\"pbkdf2\",\"sha1\",\"getrandom\",\"zeroize\"],\"chrono\":[\"chrono/default\"],\"default\":[\"aes-crypto\",\"bzip2\",\"deflate64\",\"deflate\",\"lzma\",\"time\",\"zstd\",\"xz\"],\"deflate\":[\"flate2/rust_backend\",\"deflate-zopfli\",\"deflate-flate2\"],\"deflate-flate2\":[\"_deflate-any\"],\"deflate-miniz\":[\"deflate\",\"deflate-flate2\"],\"deflate-zlib\":[\"flate2/zlib\",\"deflate-flate2\"],\"deflate-zlib-ng\":[\"flate2/zlib-ng\",\"deflate-flate2\"],\"deflate-zopfli\":[\"zopfli\",\"_deflate-any\"],\"lzma\":[\"lzma-rs/stream\"],\"nt-time\":[\"dep:nt-time\"],\"unreserved\":[],\"xz\":[\"dep:xz2\"]}}", "zmij_1.0.19": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(not(miri))\"},{\"name\":\"no-panic\",\"optional\":true,\"req\":\"^0.1.36\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"opt-level\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"ryu\",\"req\":\"^1\"}],\"features\":{}}", + "zoneinfo64_0.2.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"calendrical_calculations\",\"req\":\"^0.2.3\"},{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"chrono-tz\",\"req\":\"^0.10.4\"},{\"default_features\":false,\"name\":\"icu_locale_core\",\"req\":\"^2.1.0\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"features\":[\"tzdb-bundle-always\",\"std\"],\"kind\":\"dev\",\"name\":\"jiff\",\"req\":\"^0.2.15\"},{\"default_features\":false,\"name\":\"potential_utf\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"resb\",\"req\":\"^0.1.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0.220\"}],\"features\":{\"chrono\":[\"dep:chrono\"]}}", "zopfli_0.8.3": "{\"dependencies\":[{\"name\":\"bumpalo\",\"req\":\"^3.19.0\"},{\"default_features\":false,\"name\":\"crc32fast\",\"optional\":true,\"req\":\"^1.5.0\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.28\"},{\"kind\":\"dev\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.9\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.7.0\"},{\"kind\":\"dev\",\"name\":\"proptest-derive\",\"req\":\"^0.6.0\"},{\"default_features\":false,\"name\":\"simd-adler32\",\"optional\":true,\"req\":\"^0.3.7\"}],\"features\":{\"default\":[\"gzip\",\"std\",\"zlib\"],\"gzip\":[\"dep:crc32fast\"],\"nightly\":[\"crc32fast?/nightly\"],\"std\":[\"crc32fast?/std\",\"dep:log\",\"simd-adler32?/std\"],\"zlib\":[\"dep:simd-adler32\"]}}", "zstd-safe_7.2.4": "{\"dependencies\":[{\"default_features\":false,\"name\":\"zstd-sys\",\"req\":\"^2.0.15\"}],\"features\":{\"arrays\":[],\"bindgen\":[\"zstd-sys/bindgen\"],\"debug\":[\"zstd-sys/debug\"],\"default\":[\"legacy\",\"arrays\",\"zdict_builder\"],\"doc-cfg\":[],\"experimental\":[\"zstd-sys/experimental\"],\"fat-lto\":[\"zstd-sys/fat-lto\"],\"legacy\":[\"zstd-sys/legacy\"],\"no_asm\":[\"zstd-sys/no_asm\"],\"pkg-config\":[\"zstd-sys/pkg-config\"],\"seekable\":[\"zstd-sys/seekable\"],\"std\":[\"zstd-sys/std\"],\"thin\":[\"zstd-sys/thin\"],\"thin-lto\":[\"zstd-sys/thin-lto\"],\"zdict_builder\":[\"zstd-sys/zdict_builder\"],\"zstdmt\":[\"zstd-sys/zstdmt\"]}}", "zstd-sys_2.0.16+zstd.1.5.7": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"runtime\"],\"kind\":\"build\",\"name\":\"bindgen\",\"optional\":true,\"req\":\"^0.72\"},{\"features\":[\"parallel\"],\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.0.45\"},{\"kind\":\"build\",\"name\":\"pkg-config\",\"req\":\"^0.3.28\"}],\"features\":{\"debug\":[],\"default\":[\"legacy\",\"zdict_builder\",\"bindgen\"],\"experimental\":[],\"fat-lto\":[],\"legacy\":[],\"no_asm\":[],\"no_wasm_shim\":[],\"non-cargo\":[],\"pkg-config\":[],\"seekable\":[],\"std\":[],\"thin\":[],\"thin-lto\":[],\"zdict_builder\":[],\"zstdmt\":[]}}", diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index d00aa454562..6c4684e35ff 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -948,6 +948,8 @@ dependencies = [ "cexpr", "clang-sys", "itertools 0.13.0", + "log", + "prettyplease", "proc-macro2", "quote", "regex", @@ -1151,6 +1153,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" +[[package]] +name = "calendrical_calculations" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a0b39595c6ee54a8d0900204ba4c401d0ab4eb45adaf07178e8d017541529e7" +dependencies = [ + "core_maths", + "displaydoc", +] + [[package]] name = "cassowary" version = "0.3.0" @@ -1581,7 +1593,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "url", - "which", + "which 8.0.0", "wiremock", "zip", ] @@ -1929,7 +1941,7 @@ dependencies = [ "url", "uuid", "walkdir", - "which", + "which 8.0.0", "wildmatch", "windows-sys 0.52.0", "wiremock", @@ -2163,7 +2175,7 @@ dependencies = [ "serde_json", "tokio", "tracing", - "which", + "which 8.0.0", "wiremock", ] @@ -2403,7 +2415,7 @@ dependencies = [ "tracing", "urlencoding", "webbrowser", - "which", + "which 8.0.0", ] [[package]] @@ -2443,7 +2455,7 @@ dependencies = [ "tree-sitter", "tree-sitter-bash", "url", - "which", + "which 8.0.0", ] [[package]] @@ -2613,7 +2625,7 @@ dependencies = [ "uuid", "vt100", "webbrowser", - "which", + "which 8.0.0", "windows-sys 0.52.0", "winsplit", ] @@ -2704,7 +2716,7 @@ dependencies = [ "uuid", "vt100", "webbrowser", - "which", + "which 8.0.0", "windows-sys 0.52.0", "winsplit", ] @@ -2875,6 +2887,14 @@ dependencies = [ "regex-lite", ] +[[package]] +name = "codex-v8-poc" +version = "0.0.0" +dependencies = [ + "pretty_assertions", + "v8", +] + [[package]] name = "codex-windows-sandbox" version = "0.0.0" @@ -3080,6 +3100,15 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + [[package]] name = "core_test_support" version = "0.0.0" @@ -3682,6 +3711,38 @@ dependencies = [ "subtle", ] +[[package]] +name = "diplomat" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9adb46b05e2f53dcf6a7dfc242e4ce9eb60c369b6b6eb10826a01e93167f59c6" +dependencies = [ + "diplomat_core", + "proc-macro2", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "diplomat-runtime" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0569bd3caaf13829da7ee4e83dbf9197a0e1ecd72772da6d08f0b4c9285c8d29" + +[[package]] +name = "diplomat_core" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51731530ed7f2d4495019abc7df3744f53338e69e2863a6a64ae91821c763df1" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "smallvec", + "strck", + "syn 2.0.114", +] + [[package]] name = "dirs" version = "6.0.0" @@ -4288,6 +4349,16 @@ dependencies = [ "libc", ] +[[package]] +name = "fslock" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "futures" version = "0.3.31" @@ -4516,6 +4587,15 @@ dependencies = [ "regex-syntax 0.8.8", ] +[[package]] +name = "gzip-header" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" +dependencies = [ + "crc32fast", +] + [[package]] name = "h2" version = "0.4.13" @@ -4973,6 +5053,28 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_calendar" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f0e52e009b6b16ba9c0693578796f2dd4aaa59a7f8f920423706714a89ac4e" +dependencies = [ + "calendrical_calculations", + "displaydoc", + "icu_calendar_data", + "icu_locale", + "icu_locale_core", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_calendar_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527f04223b17edfe0bd43baf14a0cb1b017830db65f3950dc00224860a9a446d" + [[package]] name = "icu_collections" version = "2.1.1" @@ -5407,6 +5509,12 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +[[package]] +name = "ixdtf" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84de9d95a6d2547d9b77ee3f25fa0ee32e3c3a6484d47a55adebc0439c077992" + [[package]] name = "jiff" version = "0.2.18" @@ -7132,6 +7240,16 @@ dependencies = [ "yansi", ] +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.114", +] + [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -7965,6 +8083,16 @@ dependencies = [ "webpki-roots 1.0.5", ] +[[package]] +name = "resb" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a067ab3b5ca3b4dc307d0de9cf75f9f5e6ca9717b192b2f28a36c83e5de9e76" +dependencies = [ + "potential_utf", + "serde_core", +] + [[package]] name = "resolv-conf" version = "0.7.6" @@ -9345,6 +9473,15 @@ dependencies = [ "serde_json", ] +[[package]] +name = "strck" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42316e70da376f3d113a68d138a60d8a9883c604fe97942721ec2068dab13a9f" +dependencies = [ + "unicode-ident", +] + [[package]] name = "streaming-iterator" version = "0.1.9" @@ -9589,6 +9726,39 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "temporal_capi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a151e402c2bdb6a3a2a2f3f225eddaead2e7ce7dd5d3fa2090deb11b17aa4ed8" +dependencies = [ + "diplomat", + "diplomat-runtime", + "icu_calendar", + "icu_locale", + "num-traits", + "temporal_rs", + "timezone_provider", + "writeable", + "zoneinfo64", +] + +[[package]] +name = "temporal_rs" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88afde3bd75d2fc68d77a914bece426aa08aa7649ffd0cdd4a11c3d4d33474d1" +dependencies = [ + "core_maths", + "icu_calendar", + "icu_locale", + "ixdtf", + "num-traits", + "timezone_provider", + "tinystr", + "writeable", +] + [[package]] name = "term" version = "0.7.0" @@ -9796,6 +9966,18 @@ dependencies = [ "time-core", ] +[[package]] +name = "timezone_provider" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9ba0000e9e73862f3e7ca1ff159e2ddf915c9d8bb11e38a7874760f445d993" +dependencies = [ + "tinystr", + "zerotrie", + "zerovec", + "zoneinfo64", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -10595,6 +10777,23 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "v8" +version = "142.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f566072bd76b2631d0dca1d90a766c943863b1fd6b01312281dc919816de976d" +dependencies = [ + "bindgen", + "bitflags 2.10.0", + "fslock", + "gzip-header", + "home", + "miniz_oxide", + "paste", + "temporal_capi", + "which 6.0.3", +] + [[package]] name = "valuable" version = "0.1.1" @@ -10894,6 +11093,18 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" +[[package]] +name = "which" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +dependencies = [ + "either", + "home", + "rustix 0.38.44", + "winsafe", +] + [[package]] name = "which" version = "8.0.0" @@ -11897,6 +12108,19 @@ version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" +[[package]] +name = "zoneinfo64" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb2e5597efbe7c421da8a7fd396b20b571704e787c21a272eecf35dfe9d386f0" +dependencies = [ + "calendrical_calculations", + "icu_locale_core", + "potential_utf", + "resb", + "serde", +] + [[package]] name = "zopfli" version = "0.8.3" diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 961c4ef9f98..e9c66a45356 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -44,6 +44,7 @@ members = [ "otel", "tui", "tui_app_server", + "v8-poc", "utils/absolute-path", "utils/cargo-bin", "utils/git", @@ -135,6 +136,7 @@ codex-test-macros = { path = "test-macros" } codex-terminal-detection = { path = "terminal-detection" } codex-tui = { path = "tui" } codex-tui-app-server = { path = "tui_app_server" } +codex-v8-poc = { path = "v8-poc" } codex-utils-absolute-path = { path = "utils/absolute-path" } codex-utils-approval-presets = { path = "utils/approval-presets" } codex-utils-cache = { path = "utils/cache" } @@ -243,6 +245,7 @@ regex-lite = "0.1.8" reqwest = "0.12" rmcp = { version = "0.15.0", default-features = false } runfiles = { git = "https://github.com/dzbarsky/rules_rust", rev = "b56cbaa8465e74127f1ea216f813cd377295ad81" } +v8 = "142.1.0" rustls = { version = "0.23", default-features = false, features = [ "ring", "std", diff --git a/codex-rs/docs/bazel.md b/codex-rs/docs/bazel.md index a124688a24c..2c9e1504480 100644 --- a/codex-rs/docs/bazel.md +++ b/codex-rs/docs/bazel.md @@ -42,6 +42,13 @@ In some cases, an upstream crate may need a patch or a `crate.annotation` in `.. to have it build in Bazel's sandbox or make it cross-compilation-friendly. If you see issues, feel free to ping zbarsky or mbolin. +One current example is `rusty_v8`: normal workspace builds should consume a prebuilt archive +through `RUSTY_V8_ARCHIVE` rather than trying to build V8 from source inside every Bazel action. +The placeholder Bazel label lives at `//third_party/v8:rusty_v8_archive`; replace that target's +underlying file with the musl-built archive before enabling the `codex-v8-poc` crate's +`rusty_v8` feature for musl targets in Cargo or Bazel. Non-musl Bazel targets are left to the +crate's default build-script behavior. + When you add a new crate or binary: 1. Add it to the Cargo workspace as usual. diff --git a/codex-rs/v8-poc/BUILD.bazel b/codex-rs/v8-poc/BUILD.bazel new file mode 100644 index 00000000000..4d5521dae6f --- /dev/null +++ b/codex-rs/v8-poc/BUILD.bazel @@ -0,0 +1,12 @@ +load("//:defs.bzl", "codex_rust_crate") + +codex_rust_crate( + name = "v8-poc", + crate_name = "codex_v8_poc", +) + +codex_rust_crate( + name = "v8-poc-rusty-v8", + crate_features = ["rusty_v8"], + crate_name = "codex_v8_poc", +) diff --git a/codex-rs/v8-poc/Cargo.toml b/codex-rs/v8-poc/Cargo.toml new file mode 100644 index 00000000000..308f6479c18 --- /dev/null +++ b/codex-rs/v8-poc/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "codex-v8-poc" +version.workspace = true +edition.workspace = true +license.workspace = true + +[lib] +name = "codex_v8_poc" +path = "src/lib.rs" + +[features] +default = [] +rusty_v8 = ["dep:v8"] + +[lints] +workspace = true + +[dependencies] +v8 = { workspace = true, optional = true } + +[dev-dependencies] +pretty_assertions = { workspace = true } diff --git a/codex-rs/v8-poc/src/lib.rs b/codex-rs/v8-poc/src/lib.rs new file mode 100644 index 00000000000..980a5e47aba --- /dev/null +++ b/codex-rs/v8-poc/src/lib.rs @@ -0,0 +1,72 @@ +//! Bazel-wired proof-of-concept crate reserved for future V8 experiments. + +/// Returns the Bazel label for this proof-of-concept crate. +#[must_use] +pub fn bazel_target() -> &'static str { + "//codex-rs/v8-poc:v8-poc" +} + +/// Returns the embedded V8 version when the optional `rusty_v8` feature is enabled. +#[cfg(feature = "rusty_v8")] +#[must_use] +pub fn embedded_v8_version() -> &'static str { + v8::V8::get_version() +} + +#[cfg(test)] +mod tests { + use pretty_assertions::assert_eq; + + use super::bazel_target; + #[cfg(feature = "rusty_v8")] + use std::sync::Once; + + #[cfg(feature = "rusty_v8")] + fn initialize_v8() { + static INIT: Once = Once::new(); + + INIT.call_once(|| { + v8::V8::initialize_platform(v8::new_default_platform(0, false).make_shared()); + v8::V8::initialize(); + }); + } + + #[cfg(feature = "rusty_v8")] + fn evaluate_expression(expression: &str) -> String { + initialize_v8(); + + let isolate = &mut v8::Isolate::new(Default::default()); + v8::scope!(let scope, isolate); + + let context = v8::Context::new(scope, Default::default()); + let scope = &mut v8::ContextScope::new(scope, context); + let source = v8::String::new(scope, expression).expect("expression should be valid UTF-8"); + let script = v8::Script::compile(scope, source, None).expect("expression should compile"); + let result = script.run(scope).expect("expression should evaluate"); + + result.to_rust_string_lossy(scope) + } + + #[test] + fn exposes_expected_bazel_target() { + assert_eq!(bazel_target(), "//codex-rs/v8-poc:v8-poc"); + } + + #[cfg(feature = "rusty_v8")] + #[test] + fn exposes_embedded_v8_version() { + assert!(!super::embedded_v8_version().is_empty()); + } + + #[cfg(feature = "rusty_v8")] + #[test] + fn evaluates_integer_addition() { + assert_eq!(evaluate_expression("1 + 2"), "3"); + } + + #[cfg(feature = "rusty_v8")] + #[test] + fn evaluates_string_concatenation() { + assert_eq!(evaluate_expression("'hello ' + 'world'"), "hello world"); + } +} diff --git a/third_party/v8/BUILD.bazel b/third_party/v8/BUILD.bazel new file mode 100644 index 00000000000..6d5081c67ba --- /dev/null +++ b/third_party/v8/BUILD.bazel @@ -0,0 +1,11 @@ +package(default_visibility = ["//visibility:public"]) + +alias( + name = "rusty_v8_archive", + actual = ":rusty_v8_archive_placeholder", +) + +filegroup( + name = "rusty_v8_archive_placeholder", + srcs = ["README.md"], +) diff --git a/third_party/v8/README.md b/third_party/v8/README.md new file mode 100644 index 00000000000..cc9dd511474 --- /dev/null +++ b/third_party/v8/README.md @@ -0,0 +1,15 @@ +# `rusty_v8` Artifact Placeholder + +The Bazel label `//third_party/v8:rusty_v8_archive` currently resolves to this placeholder file. + +Replace the filegroup target in `third_party/v8/BUILD.bazel` with the real musl-built +`librusty_v8` archive before enabling the `codex-v8-poc` crate's `rusty_v8` feature for musl +targets. + +Expected artifact examples: + +- `librusty_v8_release_x86_64-unknown-linux-musl.a` +- `librusty_v8_release_aarch64-unknown-linux-musl.a` + +Non-musl Bazel builds intentionally do not receive `RUSTY_V8_ARCHIVE`; they fall back to +`rusty_v8`'s default build-script behavior instead. From 6c2e61f810939ae228caf7521015bfd3c72c4688 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Tue, 17 Mar 2026 19:52:12 +0000 Subject: [PATCH 02/19] Merge the v8 building for musl --- .github/scripts/rusty_v8_bazel.py | 135 +++++++++++++++ .github/workflows/rusty-v8-release.yml | 176 ++++++++++++++++++++ MODULE.bazel | 46 +++++- MODULE.bazel.lock | 5 + codex-rs/Cargo.toml | 2 +- codex-rs/docs/bazel.md | 13 +- codex-rs/v8-poc/.gitignore | 2 + patches/BUILD.bazel | 8 + patches/v8_bazel_rules.patch | 209 ++++++++++++++++++++++++ patches/v8_custom_archive_out_dir.patch | 141 ++++++++++++++++ patches/v8_module_deps.patch | 71 ++++++++ patches/v8_source_portability.patch | 78 +++++++++ third_party/v8/BUILD.bazel | 127 +++++++++++++- third_party/v8/README.md | 44 +++-- third_party/v8/v8_crate.BUILD.bazel | 21 +++ 15 files changed, 1050 insertions(+), 28 deletions(-) create mode 100644 .github/scripts/rusty_v8_bazel.py create mode 100644 .github/workflows/rusty-v8-release.yml create mode 100644 codex-rs/v8-poc/.gitignore create mode 100644 patches/v8_bazel_rules.patch create mode 100644 patches/v8_custom_archive_out_dir.patch create mode 100644 patches/v8_module_deps.patch create mode 100644 patches/v8_source_portability.patch create mode 100644 third_party/v8/v8_crate.BUILD.bazel diff --git a/.github/scripts/rusty_v8_bazel.py b/.github/scripts/rusty_v8_bazel.py new file mode 100644 index 00000000000..4da1471adce --- /dev/null +++ b/.github/scripts/rusty_v8_bazel.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import argparse +import gzip +import shutil +import subprocess +import sys +import tomllib +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[2] + + +def bazel_execroot() -> Path: + result = subprocess.run( + ["bazel", "info", "execution_root"], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + return Path(result.stdout.strip()) + + +def bazel_output_files(platform: str, labels: list[str]) -> list[Path]: + expression = "set(" + " ".join(labels) + ")" + result = subprocess.run( + [ + "bazel", + "cquery", + f"--platforms=@llvm//platforms:{platform}", + "--output=files", + expression, + ], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + execroot = bazel_execroot() + return [execroot / line.strip() for line in result.stdout.splitlines() if line.strip()] + + +def release_pair_label(target: str) -> str: + target_suffix = target.replace("-", "_") + return f"//third_party/v8:rusty_v8_release_pair_{target_suffix}" + + +def resolved_v8_crate_version() -> str: + cargo_lock = tomllib.loads((ROOT / "codex-rs" / "Cargo.lock").read_text()) + versions = sorted( + { + package["version"] + for package in cargo_lock["package"] + if package["name"] == "v8" + } + ) + if len(versions) != 1: + raise SystemExit(f"expected exactly one resolved v8 version, found: {versions}") + return versions[0] + + +def staged_archive_name(target: str, source_path: Path) -> str: + if source_path.suffix == ".lib": + return f"rusty_v8_release_{target}.lib.gz" + return f"librusty_v8_release_{target}.a.gz" + + +def stage_release_pair(platform: str, target: str, output_dir: Path) -> None: + outputs = bazel_output_files(platform, [release_pair_label(target)]) + + try: + lib_path = next(path for path in outputs if path.suffix in {".a", ".lib"}) + except StopIteration as exc: + raise SystemExit(f"missing static library output for {target}") from exc + + try: + binding_path = next(path for path in outputs if path.suffix == ".rs") + except StopIteration as exc: + raise SystemExit(f"missing Rust binding output for {target}") from exc + + output_dir.mkdir(parents=True, exist_ok=True) + staged_library = output_dir / staged_archive_name(target, lib_path) + staged_binding = output_dir / f"src_binding_release_{target}.rs" + + with lib_path.open("rb") as src, staged_library.open("wb") as dst: + with gzip.GzipFile( + filename="", + mode="wb", + fileobj=dst, + compresslevel=6, + mtime=0, + ) as gz: + shutil.copyfileobj(src, gz) + + shutil.copyfile(binding_path, staged_binding) + + print(staged_library) + print(staged_binding) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest="command", required=True) + + stage_release_pair_parser = subparsers.add_parser("stage-release-pair") + stage_release_pair_parser.add_argument("--platform", required=True) + stage_release_pair_parser.add_argument("--target", required=True) + stage_release_pair_parser.add_argument("--output-dir", required=True) + + subparsers.add_parser("resolved-v8-crate-version") + + return parser.parse_args() + + +def main() -> int: + args = parse_args() + if args.command == "stage-release-pair": + stage_release_pair( + platform=args.platform, + target=args.target, + output_dir=Path(args.output_dir), + ) + return 0 + if args.command == "resolved-v8-crate-version": + print(resolved_v8_crate_version()) + return 0 + raise SystemExit(f"unsupported command: {args.command}") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml new file mode 100644 index 00000000000..89cdca774ba --- /dev/null +++ b/.github/workflows/rusty-v8-release.yml @@ -0,0 +1,176 @@ +name: rusty-v8-release + +on: + workflow_dispatch: + inputs: + release_tag: + description: Optional release tag. Defaults to rusty-v8-v. + required: false + type: string + publish: + description: Publish the staged musl artifacts to a GitHub release. + required: false + default: true + type: boolean + +concurrency: + group: ${{ github.workflow }}::${{ inputs.release_tag || github.run_id }} + cancel-in-progress: false + +jobs: + metadata: + runs-on: ubuntu-latest + outputs: + release_tag: ${{ steps.release_tag.outputs.release_tag }} + v8_version: ${{ steps.v8_version.outputs.version }} + + steps: + - uses: actions/checkout@v6 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Resolve exact v8 crate version + id: v8_version + shell: bash + run: | + set -euo pipefail + version="$(python3 .github/scripts/rusty_v8_bazel.py resolved-v8-crate-version)" + echo "version=${version}" >> "$GITHUB_OUTPUT" + + - name: Resolve release tag + id: release_tag + env: + RELEASE_TAG_INPUT: ${{ inputs.release_tag }} + V8_VERSION: ${{ steps.v8_version.outputs.version }} + shell: bash + run: | + set -euo pipefail + + release_tag="${RELEASE_TAG_INPUT}" + if [[ -z "${release_tag}" ]]; then + release_tag="rusty-v8-v${V8_VERSION}" + fi + + echo "release_tag=${release_tag}" >> "$GITHUB_OUTPUT" + + build: + name: Build ${{ matrix.target }} + needs: metadata + runs-on: ${{ matrix.runner }} + permissions: + contents: read + actions: read + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-24.04 + platform: linux_amd64_musl + target: x86_64-unknown-linux-musl + - runner: ubuntu-24.04-arm + platform: linux_arm64_musl + target: aarch64-unknown-linux-musl + + steps: + - uses: actions/checkout@v6 + + - name: Set up Bazel + uses: bazelbuild/setup-bazelisk@v3 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Build Bazel V8 release pair + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + PLATFORM: ${{ matrix.platform }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + target_suffix="${TARGET//-/_}" + pair_target="//third_party/v8:rusty_v8_release_pair_${target_suffix}" + + bazel_args=( + build + "--platforms=@llvm//platforms:${PLATFORM}" + "${pair_target}" + --build_metadata=REPO_URL=https://github.com/${GITHUB_REPOSITORY}.git + --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) + --build_metadata=ROLE=CI + --build_metadata=VISIBILITY=PUBLIC + ) + + if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then + bazel \ + --noexperimental_remote_repo_contents_cache \ + --bazelrc=.github/workflows/ci.bazelrc \ + "${bazel_args[@]}" \ + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + else + bazel \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_args[@]}" \ + --remote_cache= \ + --remote_executor= + fi + + - name: Stage release pair + env: + PLATFORM: ${{ matrix.platform }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + python3 .github/scripts/rusty_v8_bazel.py stage-release-pair \ + --platform "${PLATFORM}" \ + --target "${TARGET}" \ + --output-dir "dist/${TARGET}" + + - name: Upload staged musl artifacts + uses: actions/upload-artifact@v7 + with: + name: rusty-v8-${{ needs.metadata.outputs.v8_version }}-${{ matrix.target }} + path: dist/${{ matrix.target }}/* + + publish-release: + if: ${{ inputs.publish }} + needs: + - metadata + - build + runs-on: ubuntu-latest + permissions: + contents: write + actions: read + + steps: + - name: Ensure release tag is new + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ needs.metadata.outputs.release_tag }} + shell: bash + run: | + set -euo pipefail + + if gh release view "${RELEASE_TAG}" > /dev/null 2>&1; then + echo "Release tag ${RELEASE_TAG} already exists; musl artifact tags are immutable." >&2 + exit 1 + fi + + - uses: actions/download-artifact@v8 + with: + path: dist + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.metadata.outputs.release_tag }} + name: ${{ needs.metadata.outputs.release_tag }} + files: dist/** diff --git a/MODULE.bazel b/MODULE.bazel index 3086008f53a..1ca34746c95 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -132,16 +132,27 @@ crate.annotation( workspace_cargo_toml = "rust/runfiles/Cargo.toml", ) +http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + crate.annotation( + patch_args = ["-p1"], + patches = [ + "//patches:v8_custom_archive_out_dir.patch", + ], build_script_data_select = { - "aarch64-unknown-linux-musl": ["//third_party/v8:rusty_v8_archive"], - "x86_64-unknown-linux-musl": ["//third_party/v8:rusty_v8_archive"], + "aarch64-unknown-linux-musl": [ + "//third_party/v8:rusty_v8_archive_aarch64_unknown_linux_musl", + "//third_party/v8:rusty_v8_binding_aarch64_unknown_linux_musl", + ], + "x86_64-unknown-linux-musl": [ + "//third_party/v8:rusty_v8_archive_x86_64_unknown_linux_musl", + "//third_party/v8:rusty_v8_binding_x86_64_unknown_linux_musl", + ], }, build_script_env_select = { - # Replace the placeholder archive with a musl-built librusty_v8 artifact before - # enabling codex-v8-poc's `rusty_v8` feature for musl Cargo or Bazel builds. - "aarch64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive)\"}", - "x86_64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive)\"}", + # Musl consumers must use version-aligned archive and binding artifacts. + "aarch64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive_aarch64_unknown_linux_musl)\",\"RUSTY_V8_SRC_BINDING_PATH\":\"$(execpath //third_party/v8:rusty_v8_binding_aarch64_unknown_linux_musl)\"}", + "x86_64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive_x86_64_unknown_linux_musl)\",\"RUSTY_V8_SRC_BINDING_PATH\":\"$(execpath //third_party/v8:rusty_v8_binding_x86_64_unknown_linux_musl)\"}", }, crate = "v8", gen_build_script = "on", @@ -189,6 +200,29 @@ crate.annotation( inject_repo(crate, "alsa_lib") +bazel_dep(name = "v8", version = "14.2.231.17") +archive_override( + module_name = "v8", + integrity = "sha256-cBaRBeVxRiQD6sbmStc467b1t6AtyT3ipE1xrJaLIfg=", + patch_strip = 3, + patches = [ + "//patches:v8_module_deps.patch", + "//patches:v8_bazel_rules.patch", + "//patches:v8_source_portability.patch", + ], + strip_prefix = "v8-14.2.231.17", + urls = ["https://github.com/v8/v8/archive/refs/tags/14.2.231.17.tar.gz"], +) + +http_archive( + name = "v8_crate_pinned", + build_file = "//third_party/v8:v8_crate.BUILD.bazel", + sha256 = "f566072bd76b2631d0dca1d90a766c943863b1fd6b01312281dc919816de976d", + strip_prefix = "v8-142.2.0", + type = "tar.gz", + urls = ["https://static.crates.io/crates/v8/v8-142.2.0.crate"], +) + use_repo(crate, "crates") bazel_dep(name = "libcap", version = "2.27.bcr.1") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 2cc3d6cc296..87ed8576a7f 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,6 +12,7 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.2/MODULE.bazel": "73939767a4686cd9a520d16af5ab440071ed75cec1a876bf2fcfaf1f71987a16", "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1", "https://bcr.bazel.build/modules/abseil-cpp/20250512.1/MODULE.bazel": "d209fdb6f36ffaf61c509fcc81b19e81b411a999a934a032e10cd009a0226215", + "https://bcr.bazel.build/modules/abseil-cpp/20250814.0/MODULE.bazel": "c43c16ca2c432566cdb78913964497259903ebe8fb7d9b57b38e9f1425b427b8", "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2", "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/source.json": "cea3901d7e299da7320700abbaafe57a65d039f10d0d7ea601c4a66938ea4b0c", "https://bcr.bazel.build/modules/alsa_lib/1.2.9.bcr.4/MODULE.bazel": "66842efc2b50b7c12274a5218d468119a5d6f9dc46a5164d9496fb517f64aba6", @@ -104,6 +105,7 @@ "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", + "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", @@ -167,6 +169,7 @@ "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", + "https://bcr.bazel.build/modules/rules_license/0.0.4/MODULE.bazel": "6a88dd22800cf1f9f79ba32cacad0d3a423ed28efa2c2ed5582eaa78dd3ac1e5", "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", @@ -181,6 +184,7 @@ "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.0-rc1/MODULE.bazel": "1e5b502e2e1a9e825eef74476a5a1ee524a92297085015a052510b09a1a09483", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96", "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", @@ -190,6 +194,7 @@ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.33.2/MODULE.bazel": "3e036c4ad8d804a4dad897d333d8dce200d943df4827cb849840055be8d2e937", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13", "https://bcr.bazel.build/modules/rules_python/1.4.1/MODULE.bazel": "8991ad45bdc25018301d6b7e1d3626afc3c8af8aaf4bc04f23d0b99c938b73a6", "https://bcr.bazel.build/modules/rules_python/1.6.0/MODULE.bazel": "7e04ad8f8d5bea40451cf80b1bd8262552aa73f841415d20db96b7241bd027d8", diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index e9c66a45356..a7ed69aa874 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -245,7 +245,7 @@ regex-lite = "0.1.8" reqwest = "0.12" rmcp = { version = "0.15.0", default-features = false } runfiles = { git = "https://github.com/dzbarsky/rules_rust", rev = "b56cbaa8465e74127f1ea216f813cd377295ad81" } -v8 = "142.1.0" +v8 = "=142.2.0" rustls = { version = "0.23", default-features = false, features = [ "ring", "std", diff --git a/codex-rs/docs/bazel.md b/codex-rs/docs/bazel.md index 2c9e1504480..2968229185f 100644 --- a/codex-rs/docs/bazel.md +++ b/codex-rs/docs/bazel.md @@ -42,12 +42,13 @@ In some cases, an upstream crate may need a patch or a `crate.annotation` in `.. to have it build in Bazel's sandbox or make it cross-compilation-friendly. If you see issues, feel free to ping zbarsky or mbolin. -One current example is `rusty_v8`: normal workspace builds should consume a prebuilt archive -through `RUSTY_V8_ARCHIVE` rather than trying to build V8 from source inside every Bazel action. -The placeholder Bazel label lives at `//third_party/v8:rusty_v8_archive`; replace that target's -underlying file with the musl-built archive before enabling the `codex-v8-poc` crate's -`rusty_v8` feature for musl targets in Cargo or Bazel. Non-musl Bazel targets are left to the -crate's default build-script behavior. +One current example is `rusty_v8`: musl workspace builds should consume explicit, version-aligned +artifacts through both `RUSTY_V8_ARCHIVE` and `RUSTY_V8_SRC_BINDING_PATH` rather than trying to +build V8 from source inside every Bazel action. Those musl artifacts are produced by +`.github/workflows/rusty-v8-release.yml` and surfaced to Bazel through `//third_party/v8`. +Keep the archive and binding file aligned to the exact resolved `v8` crate version in +`codex-rs/Cargo.lock`. Non-musl Bazel targets are left to the crate's default build-script +behavior. When you add a new crate or binary: diff --git a/codex-rs/v8-poc/.gitignore b/codex-rs/v8-poc/.gitignore new file mode 100644 index 00000000000..8384df19c70 --- /dev/null +++ b/codex-rs/v8-poc/.gitignore @@ -0,0 +1,2 @@ +/target/ +/target-rs/ diff --git a/patches/BUILD.bazel b/patches/BUILD.bazel index e69de29bb2d..4fc47c94133 100644 --- a/patches/BUILD.bazel +++ b/patches/BUILD.bazel @@ -0,0 +1,8 @@ +exports_files([ + "aws-lc-sys_memcmp_check.patch", + "v8_bazel_rules.patch", + "v8_custom_archive_out_dir.patch", + "v8_module_deps.patch", + "v8_source_portability.patch", + "windows-link.patch", +]) diff --git a/patches/v8_bazel_rules.patch b/patches/v8_bazel_rules.patch new file mode 100644 index 00000000000..5b41bc97cd8 --- /dev/null +++ b/patches/v8_bazel_rules.patch @@ -0,0 +1,209 @@ +diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel +--- a/orig/v8-14.2.231.17/BUILD.bazel 2025-11-03 08:05:43.000000000 +0000 ++++ b/mod/v8-14.2.231.17/BUILD.bazel 2026-03-17 19:06:26.743990008 +0000 +@@ -296,7 +296,7 @@ + # If no explicit value for v8_enable_pointer_compression, we set it to 'none'. + v8_string( + name = "v8_enable_pointer_compression", +- default = "none", ++ default = "False", + ) + + # Default setting for v8_enable_pointer_compression. +@@ -3998,28 +3998,14 @@ + }), + ) + +-v8_library( +- name = "lib_dragonbox", +- srcs = ["third_party/dragonbox/src/include/dragonbox/dragonbox.h"], +- hdrs = [ +- "third_party/dragonbox/src/include/dragonbox/dragonbox.h", +- ], +- includes = [ +- "third_party/dragonbox/src/include", +- ], ++alias( ++ name = "lib_dragonbox", ++ actual = "@dragonbox//:dragonbox", + ) + +-v8_library( +- name = "lib_fp16", +- srcs = ["third_party/fp16/src/include/fp16.h"], +- hdrs = [ +- "third_party/fp16/src/include/fp16/fp16.h", +- "third_party/fp16/src/include/fp16/bitcasts.h", +- "third_party/fp16/src/include/fp16/macros.h", +- ], +- includes = [ +- "third_party/fp16/src/include", +- ], ++alias( ++ name = "lib_fp16", ++ actual = "@fp16//:fp16", + ) + + filegroup( +@@ -4326,6 +4312,20 @@ + srcs = [ + "include/js_protocol.pdl", + "src/inspector/inspector_protocol_config.json", ++ "third_party/inspector_protocol/code_generator.py", ++ "third_party/inspector_protocol/pdl.py", ++ "third_party/inspector_protocol/lib/Forward_h.template", ++ "third_party/inspector_protocol/lib/Object_cpp.template", ++ "third_party/inspector_protocol/lib/Object_h.template", ++ "third_party/inspector_protocol/lib/Protocol_cpp.template", ++ "third_party/inspector_protocol/lib/ValueConversions_cpp.template", ++ "third_party/inspector_protocol/lib/ValueConversions_h.template", ++ "third_party/inspector_protocol/lib/Values_cpp.template", ++ "third_party/inspector_protocol/lib/Values_h.template", ++ "third_party/inspector_protocol/templates/Exported_h.template", ++ "third_party/inspector_protocol/templates/Imported_h.template", ++ "third_party/inspector_protocol/templates/TypeBuilder_cpp.template", ++ "third_party/inspector_protocol/templates/TypeBuilder_h.template", + ], + outs = [ + "include/inspector/Debugger.h", +@@ -4347,15 +4347,18 @@ + "src/inspector/protocol/Schema.cpp", + "src/inspector/protocol/Schema.h", + ], +- cmd = "$(location :code_generator) --jinja_dir . \ +- --inspector_protocol_dir third_party/inspector_protocol \ ++ cmd = "INSPECTOR_PROTOCOL_DIR=$$(dirname $(execpath third_party/inspector_protocol/code_generator.py)); \ ++ PYTHONPATH=$$INSPECTOR_PROTOCOL_DIR:external/rules_python++pip+v8_python_deps_311_jinja2/site-packages:external/rules_python++pip+v8_python_deps_311_markupsafe/site-packages:$${PYTHONPATH-} \ ++ python3 $(execpath third_party/inspector_protocol/code_generator.py) --jinja_dir . \ ++ --inspector_protocol_dir $$INSPECTOR_PROTOCOL_DIR \ + --config $(location :src/inspector/inspector_protocol_config.json) \ + --config_value protocol.path=$(location :include/js_protocol.pdl) \ + --output_base $(@D)/src/inspector", + local = 1, + message = "Generating inspector files", + tools = [ +- ":code_generator", ++ requirement("jinja2"), ++ requirement("markupsafe"), + ], + ) + +@@ -4369,6 +4372,15 @@ + ], + ) + ++cc_library( ++ name = "rusty_v8_internal_headers", ++ hdrs = [ ++ "src/libplatform/default-platform.h", ++ ], ++ strip_include_prefix = "", ++ visibility = ["//visibility:public"], ++) ++ + filegroup( + name = "d8_files", + srcs = [ +@@ -4486,16 +4498,9 @@ + ], + ) + +-cc_library( +- name = "simdutf", +- srcs = ["third_party/simdutf/simdutf.cpp"], +- hdrs = ["third_party/simdutf/simdutf.h"], +- copts = select({ +- "@v8//bazel/config:is_clang": ["-std=c++20"], +- "@v8//bazel/config:is_gcc": ["-std=gnu++2a"], +- "@v8//bazel/config:is_windows": ["/std:c++20"], +- "//conditions:default": [], +- }), ++alias( ++ name = "simdutf", ++ actual = "@simdutf//:simdutf", + ) + + v8_library( +@@ -4512,7 +4517,7 @@ + copts = ["-Wno-implicit-fallthrough"], + icu_deps = [ + ":icu/generated_torque_definitions_headers", +- "//external:icu", ++ "@icu//:icu", + ], + icu_srcs = [ + ":generated_regexp_special_case", +@@ -4527,7 +4532,7 @@ + ], + deps = [ + ":lib_dragonbox", +- "//third_party/fast_float/src:fast_float", ++ "@fast_float//:fast_float", + ":lib_fp16", + ":simdutf", + ":v8_libbase", +@@ -4583,6 +4588,7 @@ + alias( + name = "core_lib_icu", + actual = "icu/v8", ++ visibility = ["//visibility:public"], + ) + + v8_library( +@@ -4634,7 +4640,7 @@ + ], + deps = [ + ":v8_libbase", +- "//external:icu", ++ "@icu//:icu", + ], + ) + +diff --git a/orig/v8-14.2.231.17/bazel/BUILD.icu b/mod/v8-14.2.231.17/bazel/BUILD.icu +--- a/orig/v8-14.2.231.17/bazel/BUILD.icu 2025-11-03 08:05:43.000000000 +0000 ++++ b/mod/v8-14.2.231.17/bazel/BUILD.icu 2026-03-17 19:06:26.743990008 +0000 +@@ -1,3 +1,5 @@ ++load("@rules_cc//cc:defs.bzl", "cc_library") ++ + # Copyright 2021 the V8 project authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/orig/v8-14.2.231.17/bazel/defs.bzl b/mod/v8-14.2.231.17/bazel/defs.bzl +--- a/orig/v8-14.2.231.17/bazel/defs.bzl 2025-11-03 08:05:43.000000000 +0000 ++++ b/mod/v8-14.2.231.17/bazel/defs.bzl 2026-03-17 19:07:03.223824543 +0000 +@@ -127,12 +127,6 @@ + ], + "//conditions:default": [], + }) + select({ +- "@v8//bazel/config:is_clang": [ +- "-Wno-invalid-offsetof", +- "-Wno-deprecated-this-capture", +- "-Wno-deprecated-declarations", +- "-std=c++20", +- ], + "@v8//bazel/config:is_gcc": [ + "-Wno-extra", + "-Wno-array-bounds", +@@ -154,7 +148,12 @@ + "@v8//bazel/config:is_windows": [ + "/std:c++20", + ], +- "//conditions:default": [], ++ "//conditions:default": [ ++ "-Wno-invalid-offsetof", ++ "-Wno-deprecated-this-capture", ++ "-Wno-deprecated-declarations", ++ "-std=c++20", ++ ], + }) + select({ + "@v8//bazel/config:is_gcc_fastbuild": [ + # Non-debug builds without optimizations fail because +@@ -183,7 +182,7 @@ + "Advapi32.lib", + ], + "@v8//bazel/config:is_macos": ["-pthread"], +- "//conditions:default": ["-Wl,--no-as-needed -ldl -latomic -pthread"], ++ "//conditions:default": ["-Wl,--no-as-needed -ldl -pthread"], + }) + select({ + ":should_add_rdynamic": ["-rdynamic"], + "//conditions:default": [], diff --git a/patches/v8_custom_archive_out_dir.patch b/patches/v8_custom_archive_out_dir.patch new file mode 100644 index 00000000000..e5b2750849e --- /dev/null +++ b/patches/v8_custom_archive_out_dir.patch @@ -0,0 +1,141 @@ +# What: teach the Rust v8 crate build script to consume Bazel-provided prebuilt +# archive and binding paths, including runfiles path resolution. +# Scope: build.rs only; affects prebuilt artifact discovery and link setup, not +# V8 engine source or runtime behavior. + +--- a/build.rs ++++ b/build.rs +@@ -550,8 +550,83 @@ + } + } + +-fn static_lib_url() -> String { ++fn resolve_custom_path(path: String) -> String { ++ let path_buf = PathBuf::from(&path); ++ if path_buf.is_absolute() || path_buf.exists() { ++ return path; ++ } ++ ++ let mut candidate_roots = Vec::new(); ++ if let Ok(current_dir) = env::current_dir() { ++ candidate_roots.push(current_dir); ++ } ++ if let Ok(cargo_manifest_dir) = env::var("CARGO_MANIFEST_DIR") { ++ candidate_roots.push(PathBuf::from(cargo_manifest_dir)); ++ } ++ ++ for root in candidate_roots { ++ for ancestor in root.ancestors() { ++ let candidate = ancestor.join(&path); ++ if candidate.exists() { ++ return candidate.to_string_lossy().into_owned(); ++ } ++ } ++ } ++ ++ if let Ok(current_exe) = env::current_exe() { ++ if let Some(exe_name) = current_exe.file_name().and_then(|name| name.to_str()) ++ { ++ let runfiles_dir = ++ current_exe.with_file_name(format!("{exe_name}.runfiles")); ++ for base in [runfiles_dir.join("_main"), runfiles_dir] { ++ let candidate = base.join(&path); ++ if candidate.exists() { ++ return candidate.to_string_lossy().into_owned(); ++ } ++ } ++ } ++ } ++ ++ if let Ok(runfiles_dir) = env::var("RUNFILES_DIR") { ++ let candidate = PathBuf::from(runfiles_dir).join(&path); ++ if candidate.exists() { ++ return candidate.to_string_lossy().into_owned(); ++ } ++ } ++ ++ if let Ok(runfiles_manifest_file) = env::var("RUNFILES_MANIFEST_FILE") { ++ if let Ok(runfiles_manifest) = fs::read_to_string(runfiles_manifest_file) { ++ for line in runfiles_manifest.lines() { ++ if let Some((short_path, real_path)) = line.split_once(' ') { ++ if short_path == path { ++ return real_path.to_owned(); ++ } ++ } ++ } ++ } ++ } ++ ++ path ++} ++ ++fn custom_archive() -> Option { + if let Ok(custom_archive) = env::var("RUSTY_V8_ARCHIVE") { ++ return Some(resolve_custom_path(custom_archive)); ++ } ++ ++ None ++} ++ ++fn custom_src_binding_path() -> Option { ++ if let Ok(binding) = env::var("RUSTY_V8_SRC_BINDING_PATH") { ++ return Some(resolve_custom_path(binding)); ++ } ++ ++ None ++} ++ ++fn static_lib_url() -> String { ++ if let Some(custom_archive) = custom_archive() { + return custom_archive; + } + let default_base = "https://github.com/denoland/rusty_v8/releases/download"; +@@ -578,6 +653,16 @@ + } + + fn static_lib_dir() -> PathBuf { ++ if custom_archive().is_some() { ++ return PathBuf::from( ++ env::var_os("OUT_DIR").expect( ++ "The 'OUT_DIR' environment is not set (it should be something like \ ++ 'target/debug/rusty_v8-{hash}').", ++ ), ++ ) ++ .join("gn_out") ++ .join("obj"); ++ } + build_dir().join("gn_out").join("obj") + } + +@@ -793,8 +878,14 @@ + + fn print_link_flags() { + println!("cargo:rustc-link-lib=static=rusty_v8"); ++ let target = env::var("TARGET").unwrap(); + let should_dyn_link_libcxx = env::var("CARGO_FEATURE_USE_CUSTOM_LIBCXX") + .is_err() ++ || (custom_archive().is_some() ++ && (target.contains("apple") ++ || target.contains("freebsd") ++ || target.contains("openbsd") ++ || target.contains("android"))) + || env::var("GN_ARGS").is_ok_and(|gn_args| { + gn_args + .split_whitespace() +@@ -808,7 +899,6 @@ + println!("cargo:rustc-link-lib=dylib={stdlib}"); + } + } else { +- let target = env::var("TARGET").unwrap(); + if target.contains("msvc") { + // nothing to link to + } else if target.contains("apple") +@@ -843,7 +933,7 @@ + } + + fn print_prebuilt_src_binding_path() { +- if let Ok(binding) = env::var("RUSTY_V8_SRC_BINDING_PATH") { ++ if let Some(binding) = custom_src_binding_path() { + println!("cargo:rustc-env=RUSTY_V8_SRC_BINDING_PATH={binding}"); + return; + } diff --git a/patches/v8_module_deps.patch b/patches/v8_module_deps.patch new file mode 100644 index 00000000000..2c1d4f4d422 --- /dev/null +++ b/patches/v8_module_deps.patch @@ -0,0 +1,71 @@ +diff --git a/orig/v8-14.2.231.17/MODULE.bazel b/mod/v8-14.2.231.17/MODULE.bazel +--- a/orig/v8-14.2.231.17/MODULE.bazel 2026-03-17 19:06:16.296039877 +0000 ++++ b/mod/v8-14.2.231.17/MODULE.bazel 2026-03-17 19:06:16.296039877 +0000 +@@ -8,13 +8,65 @@ + bazel_dep(name = "rules_python", version = "1.0.0") + bazel_dep(name = "platforms", version = "0.0.11") + bazel_dep(name = "abseil-cpp", version = "20250814.0") +-bazel_dep(name = "highway", version = "1.2.0") ++bazel_dep(name = "rules_license", version = "0.0.4") ++ ++git_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") ++http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") ++ ++http_archive( ++ name = "highway", ++ patch_cmds = ['python3 - <<\'PY\'\nfrom pathlib import Path\n\nbuild = Path("BUILD")\ntext = build.read_text()\ntext = text.replace(\n \'load("@rules_cc//cc:defs.bzl", "cc_test")\',\n \'load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")\',\n)\nbuild.write_text(text)\nPY'], ++ sha256 = "7e0be78b8318e8bdbf6fa545d2ecb4c90f947df03f7aadc42c1967f019e63343", ++ strip_prefix = "highway-1.2.0", ++ urls = ["https://github.com/google/highway/archive/refs/tags/1.2.0.tar.gz"], ++) ++ ++git_repository( ++ name = "icu", ++ build_file = "@v8//:bazel/BUILD.icu", ++ commit = "a86a32e67b8d1384b33f8fa48c83a6079b86f8cd", ++ patch_cmds = ["find source -name BUILD.bazel | xargs rm"], ++ patch_cmds_win = ["Get-ChildItem -Path source -File -Include BUILD.bazel -Recurse | Remove-Item"], ++ remote = "https://chromium.googlesource.com/chromium/deps/icu.git", ++) ++ ++http_archive( ++ name = "fast_float", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fast_float",\n hdrs = glob(["include/fast_float/*.h"]),\n include_prefix = "third_party/fast_float/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', ++ sha256 = "e14a33089712b681d74d94e2a11362643bd7d769ae8f7e7caefe955f57f7eacd", ++ strip_prefix = "fast_float-8.0.2", ++ urls = ["https://github.com/fastfloat/fast_float/archive/refs/tags/v8.0.2.tar.gz"], ++) ++ ++git_repository( ++ name = "simdutf", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "simdutf",\n srcs = ["simdutf.cpp"],\n hdrs = ["simdutf.h"],\n copts = ["-std=c++20"],\n include_prefix = "third_party/simdutf",\n visibility = ["//visibility:public"],\n)\n', ++ commit = "93b35aec29256f705c97f675fe4623578bd7a395", ++ remote = "https://chromium.googlesource.com/chromium/src/third_party/simdutf", ++) ++ ++git_repository( ++ name = "dragonbox", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "dragonbox",\n hdrs = ["include/dragonbox/dragonbox.h"],\n include_prefix = "third_party/dragonbox/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', ++ commit = "beeeef91cf6fef89a4d4ba5e95d47ca64ccb3a44", ++ remote = "https://chromium.googlesource.com/external/github.com/jk-jeon/dragonbox.git", ++) ++ ++git_repository( ++ name = "fp16", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fp16",\n hdrs = glob(["include/**/*.h"]),\n include_prefix = "third_party/fp16/src/include",\n includes = ["include"],\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', ++ commit = "3d2de1816307bac63c16a297e8c4dc501b4076df", ++ remote = "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git", ++) + + pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") + pip.parse( + hub_name = "v8_python_deps", + python_version = "3.11", + requirements_lock = "//:bazel/requirements.txt", +- extra_pip_args = ["--require-hashes"], ++ extra_pip_args = [ ++ "--require-hashes", ++ "--index-url=https://pypi.org/simple", ++ ], + ) + use_repo(pip, "v8_python_deps") diff --git a/patches/v8_source_portability.patch b/patches/v8_source_portability.patch new file mode 100644 index 00000000000..ca11610f1a6 --- /dev/null +++ b/patches/v8_source_portability.patch @@ -0,0 +1,78 @@ +# What: make upstream V8 sources build cleanly in this hermetic toolchain setup. +# Scope: minimal source-level portability fixes only, such as libexecinfo guards, +# weak glibc symbol handling, and warning annotations; no dependency +# include-path rewrites or intentional V8 feature changes. + +diff --git a/orig/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc b/mod/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc +index 6176ed4..a02043d 100644 +--- a/orig/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc ++++ b/mod/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc +@@ -64,6 +64,7 @@ namespace { + volatile sig_atomic_t in_signal_handler = 0; + bool dump_stack_in_signal_handler = true; + ++#if HAVE_EXECINFO_H + // The prefix used for mangled symbols, per the Itanium C++ ABI: + // http://www.codesourcery.com/cxx-abi/abi.html#mangling + const char kMangledSymbolPrefix[] = "_Z"; +@@ -73,7 +74,6 @@ const char kMangledSymbolPrefix[] = "_Z"; + const char kSymbolCharacters[] = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"; + +-#if HAVE_EXECINFO_H + // Demangles C++ symbols in the given text. Example: + // + // "out/Debug/base_unittests(_ZN10StackTraceC1Ev+0x20) [0x817778c]" + +diff --git a/orig/v8-14.2.231.17/src/base/platform/platform-posix.cc b/mod/v8-14.2.231.17/src/base/platform/platform-posix.cc +index 4c7d878..0e45eb3 100644 +--- a/orig/v8-14.2.231.17/src/base/platform/platform-posix.cc ++++ b/mod/v8-14.2.231.17/src/base/platform/platform-posix.cc +@@ -95,7 +95,7 @@ + #endif + + #if defined(V8_LIBC_GLIBC) +-extern "C" void* __libc_stack_end; ++extern "C" void* __libc_stack_end V8_WEAK; + #endif + + namespace v8 { +@@ -1461,10 +1461,13 @@ + // pthread_getattr_np can fail for the main thread. + // For the main thread we prefer using __libc_stack_end (if it exists) since + // it generally provides a tighter limit for CSS. +- return __libc_stack_end; ++ if (__libc_stack_end != nullptr) { ++ return __libc_stack_end; ++ } + #else + return nullptr; + #endif // !defined(V8_LIBC_GLIBC) ++ return nullptr; + } + void* base; + size_t size; +@@ -1476,7 +1479,8 @@ + // __libc_stack_end is process global and thus is only valid for + // the main thread. Check whether this is the main thread by checking + // __libc_stack_end is within the thread's stack. +- if ((base <= __libc_stack_end) && (__libc_stack_end <= stack_start)) { ++ if (__libc_stack_end != nullptr && ++ (base <= __libc_stack_end) && (__libc_stack_end <= stack_start)) { + DCHECK(MainThreadIsCurrentThread()); + return __libc_stack_end; + } + +diff --git a/orig/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc b/mod/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc +index bda0e43..b44f1d9 100644 +--- a/orig/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc ++++ b/mod/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc +@@ -23,7 +23,7 @@ extern int pkey_free(int pkey) V8_WEAK; + + namespace { + +-bool KernelHasPkruFix() { ++[[maybe_unused]] bool KernelHasPkruFix() { + // PKU was broken on Linux kernels before 5.13 (see + // https://lore.kernel.org/all/20210623121456.399107624@linutronix.de/). + // A fix is also included in the 5.4.182 and 5.10.103 versions ("x86/fpu: diff --git a/third_party/v8/BUILD.bazel b/third_party/v8/BUILD.bazel index 6d5081c67ba..c786ccb05d6 100644 --- a/third_party/v8/BUILD.bazel +++ b/third_party/v8/BUILD.bazel @@ -1,11 +1,128 @@ +load("@rules_cc//cc:cc_static_library.bzl", "cc_static_library") +load("@rules_cc//cc:defs.bzl", "cc_library") + package(default_visibility = ["//visibility:public"]) -alias( - name = "rusty_v8_archive", - actual = ":rusty_v8_archive_placeholder", +V8_COPTS = ["-std=c++20"] + +V8_STATIC_LIBRARY_FEATURES = [ + "-symbol_check", + "-validate-static-library", +] + +genrule( + name = "binding_cc", + srcs = ["@v8_crate_pinned//:binding_cc"], + outs = ["binding.cc"], + cmd = """ + sed \ + -e '/#include "v8\\/src\\/flags\\/flags.h"/d' \ + -e 's|"v8/src/libplatform/default-platform.h"|"src/libplatform/default-platform.h"|' \ + -e 's| namespace i = v8::internal;| (void)usage;|' \ + -e '/using HelpOptions = i::FlagList::HelpOptions;/d' \ + -e '/HelpOptions help_options = HelpOptions(HelpOptions::kExit, usage);/d' \ + -e 's| i::FlagList::SetFlagsFromCommandLine(argc, argv, true, help_options);| v8::V8::SetFlagsFromCommandLine(argc, argv, true);|' \ + -e 's|icu_[0-9][0-9]*::|icu::|g' \ + $(location @v8_crate_pinned//:binding_cc) > "$@" + """, +) + +genrule( + name = "support_h", + srcs = ["@v8_crate_pinned//:support_h"], + outs = ["support.h"], + cmd = "cp $(location @v8_crate_pinned//:support_h) $@", +) + +cc_library( + name = "v8_binding", + srcs = [":binding_cc"], + hdrs = [":support_h"], + copts = V8_COPTS, + deps = [ + "@v8//:core_lib_icu", + "@v8//:rusty_v8_internal_headers", + ], +) + +cc_static_library( + name = "v8_x86_64_unknown_linux_musl", + deps = [":v8_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +cc_static_library( + name = "v8_aarch64_unknown_linux_musl_base", + deps = [":v8_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +genrule( + name = "v8_aarch64_unknown_linux_musl", + srcs = [ + ":v8_aarch64_unknown_linux_musl_base", + "@llvm//runtimes/compiler-rt:clang_rt.builtins.static", + ], + tools = [ + "@llvm//tools:llvm-ar", + "@llvm//tools:llvm-ranlib", + ], + outs = ["libv8_aarch64_unknown_linux_musl.a"], + cmd = """ + cat > "$(@D)/merge.mri" <<'EOF' +create $@ +addlib $(location :v8_aarch64_unknown_linux_musl_base) +addlib $(location @llvm//runtimes/compiler-rt:clang_rt.builtins.static) +save +end +EOF + $(location @llvm//tools:llvm-ar) -M < "$(@D)/merge.mri" + $(location @llvm//tools:llvm-ranlib) "$@" + """, ) filegroup( - name = "rusty_v8_archive_placeholder", - srcs = ["README.md"], + name = "src_binding_release_x86_64_unknown_linux_musl", + srcs = ["@v8_crate_pinned//:src_binding_release_x86_64_unknown_linux_gnu"], +) + +filegroup( + name = "src_binding_release_aarch64_unknown_linux_musl", + srcs = ["@v8_crate_pinned//:src_binding_release_aarch64_unknown_linux_gnu"], +) + +filegroup( + name = "rusty_v8_release_pair_x86_64_unknown_linux_musl", + srcs = [ + ":v8_x86_64_unknown_linux_musl", + ":src_binding_release_x86_64_unknown_linux_musl", + ], +) + +filegroup( + name = "rusty_v8_release_pair_aarch64_unknown_linux_musl", + srcs = [ + ":v8_aarch64_unknown_linux_musl", + ":src_binding_release_aarch64_unknown_linux_musl", + ], +) + +alias( + name = "rusty_v8_archive_x86_64_unknown_linux_musl", + actual = ":v8_x86_64_unknown_linux_musl", +) + +alias( + name = "rusty_v8_archive_aarch64_unknown_linux_musl", + actual = ":v8_aarch64_unknown_linux_musl", +) + +alias( + name = "rusty_v8_binding_x86_64_unknown_linux_musl", + actual = ":src_binding_release_x86_64_unknown_linux_musl", +) + +alias( + name = "rusty_v8_binding_aarch64_unknown_linux_musl", + actual = ":src_binding_release_aarch64_unknown_linux_musl", ) diff --git a/third_party/v8/README.md b/third_party/v8/README.md index cc9dd511474..8ddd276d757 100644 --- a/third_party/v8/README.md +++ b/third_party/v8/README.md @@ -1,15 +1,39 @@ -# `rusty_v8` Artifact Placeholder +# `rusty_v8` Musl Artifacts -The Bazel label `//third_party/v8:rusty_v8_archive` currently resolves to this placeholder file. +This directory contains the Bazel packaging used to build and stage musl +`rusty_v8` release artifacts for `codex-rs/v8-poc`. -Replace the filegroup target in `third_party/v8/BUILD.bazel` with the real musl-built -`librusty_v8` archive before enabling the `codex-v8-poc` crate's `rusty_v8` feature for musl -targets. +Current pinned versions: -Expected artifact examples: +- Rust crate: `v8 = =142.2.0` +- Embedded upstream V8 source: `14.2.231.17` -- `librusty_v8_release_x86_64-unknown-linux-musl.a` -- `librusty_v8_release_aarch64-unknown-linux-musl.a` +The generated musl release pairs are: -Non-musl Bazel builds intentionally do not receive `RUSTY_V8_ARCHIVE`; they fall back to -`rusty_v8`'s default build-script behavior instead. +- `//third_party/v8:rusty_v8_release_pair_x86_64_unknown_linux_musl` +- `//third_party/v8:rusty_v8_release_pair_aarch64_unknown_linux_musl` + +Each release pair contains: + +- a static library built from source +- a Rust binding file copied from the matching GNU Linux binding shipped in the + exact same `v8` crate version + +Musl consumers in this repo should be wired with explicit paths: + +- `RUSTY_V8_ARCHIVE` +- `RUSTY_V8_SRC_BINDING_PATH` + +Do not mix artifacts across crate versions. The archive and binding must match +the exact resolved `v8` crate version from `codex-rs/Cargo.lock`. + +The dedicated publishing workflow is: + +- `.github/workflows/rusty-v8-release.yml` + +That workflow stages: + +- `librusty_v8_release_x86_64-unknown-linux-musl.a.gz` +- `librusty_v8_release_aarch64-unknown-linux-musl.a.gz` +- `src_binding_release_x86_64-unknown-linux-musl.rs` +- `src_binding_release_aarch64-unknown-linux-musl.rs` diff --git a/third_party/v8/v8_crate.BUILD.bazel b/third_party/v8/v8_crate.BUILD.bazel new file mode 100644 index 00000000000..d1dc9227d3c --- /dev/null +++ b/third_party/v8/v8_crate.BUILD.bazel @@ -0,0 +1,21 @@ +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "binding_cc", + srcs = ["src/binding.cc"], +) + +filegroup( + name = "support_h", + srcs = ["src/support.h"], +) + +filegroup( + name = "src_binding_release_aarch64_unknown_linux_gnu", + srcs = ["gen/src_binding_release_aarch64-unknown-linux-gnu.rs"], +) + +filegroup( + name = "src_binding_release_x86_64_unknown_linux_gnu", + srcs = ["gen/src_binding_release_x86_64-unknown-linux-gnu.rs"], +) From ca8204a0d08db305547312905dc19d86b7a946b1 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Wed, 18 Mar 2026 05:06:12 +0000 Subject: [PATCH 03/19] Update v8 version --- MODULE.bazel | 43 +++--- MODULE.bazel.lock | 2 +- codex-rs/Cargo.lock | 4 +- codex-rs/Cargo.toml | 2 +- patches/v8_bazel_rules.patch | 127 +++++++++------- patches/v8_module_deps.patch | 219 +++++++++++++++++++++++++--- patches/v8_source_portability.patch | 18 +-- third_party/v8/BUILD.bazel | 205 ++++++++++++++++++++++---- third_party/v8/README.md | 31 ++-- third_party/v8/v8_crate.BUILD.bazel | 20 +++ 10 files changed, 516 insertions(+), 155 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 1ca34746c95..4943855367a 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -135,27 +135,20 @@ crate.annotation( http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") crate.annotation( - patch_args = ["-p1"], - patches = [ - "//patches:v8_custom_archive_out_dir.patch", + build_script_data = [ + "//third_party/v8:rusty_v8_archive_for_target", + "//third_party/v8:rusty_v8_binding_for_target", ], - build_script_data_select = { - "aarch64-unknown-linux-musl": [ - "//third_party/v8:rusty_v8_archive_aarch64_unknown_linux_musl", - "//third_party/v8:rusty_v8_binding_aarch64_unknown_linux_musl", - ], - "x86_64-unknown-linux-musl": [ - "//third_party/v8:rusty_v8_archive_x86_64_unknown_linux_musl", - "//third_party/v8:rusty_v8_binding_x86_64_unknown_linux_musl", - ], - }, - build_script_env_select = { - # Musl consumers must use version-aligned archive and binding artifacts. - "aarch64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive_aarch64_unknown_linux_musl)\",\"RUSTY_V8_SRC_BINDING_PATH\":\"$(execpath //third_party/v8:rusty_v8_binding_aarch64_unknown_linux_musl)\"}", - "x86_64-unknown-linux-musl": "{\"RUSTY_V8_ARCHIVE\":\"$(execpath //third_party/v8:rusty_v8_archive_x86_64_unknown_linux_musl)\",\"RUSTY_V8_SRC_BINDING_PATH\":\"$(execpath //third_party/v8:rusty_v8_binding_x86_64_unknown_linux_musl)\"}", + build_script_env = { + "RUSTY_V8_ARCHIVE": "$(execpath //third_party/v8:rusty_v8_archive_for_target)", + "RUSTY_V8_SRC_BINDING_PATH": "$(execpath //third_party/v8:rusty_v8_binding_for_target)", }, crate = "v8", gen_build_script = "on", + patch_args = ["-p1"], + patches = [ + "//patches:v8_custom_archive_out_dir.patch", + ], ) llvm = use_extension("@llvm//extensions:llvm.bzl", "llvm") @@ -200,27 +193,27 @@ crate.annotation( inject_repo(crate, "alsa_lib") -bazel_dep(name = "v8", version = "14.2.231.17") +bazel_dep(name = "v8", version = "14.6.202.11") archive_override( module_name = "v8", - integrity = "sha256-cBaRBeVxRiQD6sbmStc467b1t6AtyT3ipE1xrJaLIfg=", + integrity = "sha256-Ju45oFJMyCWyT/r+d+MDsCbCeoDBisGaj4+KZYIIYSU=", patch_strip = 3, patches = [ "//patches:v8_module_deps.patch", "//patches:v8_bazel_rules.patch", "//patches:v8_source_portability.patch", ], - strip_prefix = "v8-14.2.231.17", - urls = ["https://github.com/v8/v8/archive/refs/tags/14.2.231.17.tar.gz"], + strip_prefix = "v8-14.6.202.11", + urls = ["https://github.com/v8/v8/archive/refs/tags/14.6.202.11.tar.gz"], ) http_archive( - name = "v8_crate_pinned", + name = "v8_crate_146_4_0", build_file = "//third_party/v8:v8_crate.BUILD.bazel", - sha256 = "f566072bd76b2631d0dca1d90a766c943863b1fd6b01312281dc919816de976d", - strip_prefix = "v8-142.2.0", + sha256 = "d97bcac5cdc5a195a4813f1855a6bc658f240452aac36caa12fd6c6f16026ab1", + strip_prefix = "v8-146.4.0", type = "tar.gz", - urls = ["https://static.crates.io/crates/v8/v8-142.2.0.crate"], + urls = ["https://static.crates.io/crates/v8/v8-146.4.0.crate"], ) use_repo(crate, "crates") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 87ed8576a7f..75d8e99221c 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1427,7 +1427,7 @@ "utf8_iter_1.0.4": "{\"dependencies\":[],\"features\":{}}", "utf8parse_0.2.2": "{\"dependencies\":[],\"features\":{\"default\":[],\"nightly\":[]}}", "uuid_1.20.0": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.1.3\"},{\"default_features\":false,\"name\":\"atomic\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"borsh\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"borsh-derive\",\"optional\":true,\"req\":\"^1\"},{\"features\":[\"derive\"],\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.20.0\"},{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\"},{\"default_features\":false,\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"), target_feature = \\\"atomics\\\"))\"},{\"default_features\":false,\"name\":\"md-5\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.221\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.56\"},{\"default_features\":false,\"name\":\"sha1_smol\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"slog\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.52\"},{\"name\":\"uuid-rng-internal-lib\",\"optional\":true,\"package\":\"uuid-rng-internal\",\"req\":\"^1.20.0\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"default_features\":false,\"features\":[\"msrv\"],\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"features\":[\"derive\"],\"name\":\"zerocopy\",\"optional\":true,\"req\":\"^0.8\"}],\"features\":{\"atomic\":[\"dep:atomic\"],\"borsh\":[\"dep:borsh\",\"dep:borsh-derive\"],\"default\":[\"std\"],\"fast-rng\":[\"rng\",\"dep:rand\"],\"js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"],\"macro-diagnostics\":[],\"md5\":[\"dep:md-5\"],\"rng\":[\"dep:getrandom\"],\"rng-getrandom\":[\"rng\",\"dep:getrandom\",\"uuid-rng-internal-lib\",\"uuid-rng-internal-lib/getrandom\"],\"rng-rand\":[\"rng\",\"dep:rand\",\"uuid-rng-internal-lib\",\"uuid-rng-internal-lib/rand\"],\"serde\":[\"dep:serde_core\"],\"sha1\":[\"dep:sha1_smol\"],\"std\":[\"wasm-bindgen?/std\",\"js-sys?/std\"],\"v1\":[\"atomic\"],\"v3\":[\"md5\"],\"v4\":[\"rng\"],\"v5\":[\"sha1\"],\"v6\":[\"atomic\"],\"v7\":[\"rng\"],\"v8\":[]}}", - "v8_142.2.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"align-data\",\"req\":\"^0.1.0\"},{\"kind\":\"build\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"kind\":\"dev\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"name\":\"bitflags\",\"req\":\"^2.5\"},{\"kind\":\"dev\",\"name\":\"bytes\",\"req\":\"^1\"},{\"kind\":\"build\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"build\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"build\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"dev\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"build\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"kind\":\"dev\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"name\":\"paste\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"features\":[\"zoneinfo64\"],\"name\":\"temporal_capi\",\"req\":\"^0.1.0\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.96\"},{\"kind\":\"build\",\"name\":\"which\",\"req\":\"^6\"},{\"kind\":\"dev\",\"name\":\"which\",\"req\":\"^6\"}],\"features\":{\"default\":[\"use_custom_libcxx\"],\"use_custom_libcxx\":[],\"v8_enable_pointer_compression\":[],\"v8_enable_v8_checks\":[]}}", + "v8_146.4.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"align-data\",\"req\":\"^0.1.0\"},{\"kind\":\"build\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"kind\":\"dev\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"name\":\"bitflags\",\"req\":\"^2.5\"},{\"kind\":\"dev\",\"name\":\"bytes\",\"req\":\"^1\"},{\"kind\":\"build\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"build\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"build\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"dev\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"build\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"kind\":\"dev\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"name\":\"paste\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"features\":[\"zoneinfo64\"],\"name\":\"temporal_capi\",\"req\":\"^0.1.2\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.96\"},{\"kind\":\"build\",\"name\":\"which\",\"req\":\"^6\"},{\"kind\":\"dev\",\"name\":\"which\",\"req\":\"^6\"}],\"features\":{\"default\":[\"use_custom_libcxx\"],\"use_custom_libcxx\":[],\"v8_enable_pointer_compression\":[],\"v8_enable_sandbox\":[\"v8_enable_pointer_compression\"],\"v8_enable_v8_checks\":[]}}", "valuable_0.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"name\":\"valuable-derive\",\"optional\":true,\"req\":\"=0.1.1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"derive\":[\"valuable-derive\"],\"std\":[\"alloc\"]}}", "vcpkg_0.2.15": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3.7\"}],\"features\":{}}", "version_check_0.9.5": "{\"dependencies\":[],\"features\":{}}", diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 6c4684e35ff..6b355cec15e 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -10779,9 +10779,9 @@ dependencies = [ [[package]] name = "v8" -version = "142.2.0" +version = "146.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f566072bd76b2631d0dca1d90a766c943863b1fd6b01312281dc919816de976d" +checksum = "d97bcac5cdc5a195a4813f1855a6bc658f240452aac36caa12fd6c6f16026ab1" dependencies = [ "bindgen", "bitflags 2.10.0", diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index a7ed69aa874..3d299df9282 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -245,7 +245,7 @@ regex-lite = "0.1.8" reqwest = "0.12" rmcp = { version = "0.15.0", default-features = false } runfiles = { git = "https://github.com/dzbarsky/rules_rust", rev = "b56cbaa8465e74127f1ea216f813cd377295ad81" } -v8 = "=142.2.0" +v8 = "=146.4.0" rustls = { version = "0.23", default-features = false, features = [ "ring", "std", diff --git a/patches/v8_bazel_rules.patch b/patches/v8_bazel_rules.patch index 5b41bc97cd8..65a77aa5c06 100644 --- a/patches/v8_bazel_rules.patch +++ b/patches/v8_bazel_rules.patch @@ -1,7 +1,62 @@ -diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ---- a/orig/v8-14.2.231.17/BUILD.bazel 2025-11-03 08:05:43.000000000 +0000 -+++ b/mod/v8-14.2.231.17/BUILD.bazel 2026-03-17 19:06:26.743990008 +0000 -@@ -296,7 +296,7 @@ +# What: adapt upstream V8 Bazel rules to this workspace's hermetic toolchains +# and externally provided dependencies. +# Scope: Bazel BUILD/defs/BUILD.icu integration only, including dependency +# wiring, generated sources, and visibility; no standalone V8 source patching. + +diff --git a/orig/v8-14.6.202.11/bazel/defs.bzl b/mod/v8-14.6.202.11/bazel/defs.bzl +index 9648e4a..88efd41 100644 +--- a/orig/v8-14.6.202.11/bazel/defs.bzl ++++ b/mod/v8-14.6.202.11/bazel/defs.bzl +@@ -97,7 +97,7 @@ v8_config = rule( + + def _default_args(): + return struct( +- deps = [":define_flags", "@libcxx//:libc++"], ++ deps = [":define_flags"], + defines = select({ + "@v8//bazel/config:is_windows": [ + "UNICODE", +@@ -128,12 +128,6 @@ def _default_args(): + ], + "//conditions:default": [], + }) + select({ +- "@v8//bazel/config:is_clang": [ +- "-Wno-invalid-offsetof", +- "-Wno-deprecated-this-capture", +- "-Wno-deprecated-declarations", +- "-std=c++20", +- ], + "@v8//bazel/config:is_gcc": [ + "-Wno-extra", + "-Wno-array-bounds", +@@ -155,7 +149,12 @@ def _default_args(): + "@v8//bazel/config:is_windows": [ + "/std:c++20", + ], +- "//conditions:default": [], ++ "//conditions:default": [ ++ "-Wno-invalid-offsetof", ++ "-Wno-deprecated-this-capture", ++ "-Wno-deprecated-declarations", ++ "-std=c++20", ++ ], + }) + select({ + "@v8//bazel/config:is_gcc_fastbuild": [ + # Non-debug builds without optimizations fail because +@@ -184,7 +183,7 @@ def _default_args(): + "Advapi32.lib", + ], + "@v8//bazel/config:is_macos": ["-pthread"], +- "//conditions:default": ["-Wl,--no-as-needed -ldl -latomic -pthread"], ++ "//conditions:default": ["-Wl,--no-as-needed -ldl -pthread"], + }) + select({ + ":should_add_rdynamic": ["-rdynamic"], + "//conditions:default": [], +diff --git a/orig/v8-14.6.202.11/BUILD.bazel b/mod/v8-14.6.202.11/BUILD.bazel +index 85f31b7..7314584 100644 +--- a/orig/v8-14.6.202.11/BUILD.bazel ++++ b/mod/v8-14.6.202.11/BUILD.bazel +@@ -303,7 +303,7 @@ v8_int( # If no explicit value for v8_enable_pointer_compression, we set it to 'none'. v8_string( name = "v8_enable_pointer_compression", @@ -10,7 +65,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ) # Default setting for v8_enable_pointer_compression. -@@ -3998,28 +3998,14 @@ +@@ -4077,28 +4077,14 @@ filegroup( }), ) @@ -45,7 +100,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ) filegroup( -@@ -4326,6 +4312,20 @@ +@@ -4405,6 +4391,20 @@ genrule( srcs = [ "include/js_protocol.pdl", "src/inspector/inspector_protocol_config.json", @@ -66,7 +121,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ], outs = [ "include/inspector/Debugger.h", -@@ -4347,15 +4347,18 @@ +@@ -4426,15 +4426,18 @@ genrule( "src/inspector/protocol/Schema.cpp", "src/inspector/protocol/Schema.h", ], @@ -88,7 +143,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ], ) -@@ -4369,6 +4372,15 @@ +@@ -4448,6 +4451,15 @@ filegroup( ], ) @@ -104,7 +159,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel filegroup( name = "d8_files", srcs = [ -@@ -4486,16 +4498,9 @@ +@@ -4567,16 +4579,9 @@ cc_library( ], ) @@ -124,7 +179,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ) v8_library( -@@ -4512,7 +4517,7 @@ +@@ -4593,7 +4598,7 @@ v8_library( copts = ["-Wno-implicit-fallthrough"], icu_deps = [ ":icu/generated_torque_definitions_headers", @@ -133,7 +188,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ], icu_srcs = [ ":generated_regexp_special_case", -@@ -4527,7 +4532,7 @@ +@@ -4608,7 +4613,7 @@ v8_library( ], deps = [ ":lib_dragonbox", @@ -142,7 +197,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ":lib_fp16", ":simdutf", ":v8_libbase", -@@ -4583,6 +4588,7 @@ +@@ -4664,6 +4669,7 @@ alias( alias( name = "core_lib_icu", actual = "icu/v8", @@ -150,7 +205,7 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ) v8_library( -@@ -4634,7 +4640,7 @@ +@@ -4715,7 +4721,7 @@ v8_binary( ], deps = [ ":v8_libbase", @@ -159,51 +214,13 @@ diff --git a/orig/v8-14.2.231.17/BUILD.bazel b/mod/v8-14.2.231.17/BUILD.bazel ], ) -diff --git a/orig/v8-14.2.231.17/bazel/BUILD.icu b/mod/v8-14.2.231.17/bazel/BUILD.icu ---- a/orig/v8-14.2.231.17/bazel/BUILD.icu 2025-11-03 08:05:43.000000000 +0000 -+++ b/mod/v8-14.2.231.17/bazel/BUILD.icu 2026-03-17 19:06:26.743990008 +0000 +diff --git a/orig/v8-14.6.202.11/bazel/BUILD.icu b/mod/v8-14.6.202.11/bazel/BUILD.icu +index 5fda2f4..381386c 100644 +--- a/orig/v8-14.6.202.11/bazel/BUILD.icu ++++ b/mod/v8-14.6.202.11/bazel/BUILD.icu @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_library") + # Copyright 2021 the V8 project authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -diff --git a/orig/v8-14.2.231.17/bazel/defs.bzl b/mod/v8-14.2.231.17/bazel/defs.bzl ---- a/orig/v8-14.2.231.17/bazel/defs.bzl 2025-11-03 08:05:43.000000000 +0000 -+++ b/mod/v8-14.2.231.17/bazel/defs.bzl 2026-03-17 19:07:03.223824543 +0000 -@@ -127,12 +127,6 @@ - ], - "//conditions:default": [], - }) + select({ -- "@v8//bazel/config:is_clang": [ -- "-Wno-invalid-offsetof", -- "-Wno-deprecated-this-capture", -- "-Wno-deprecated-declarations", -- "-std=c++20", -- ], - "@v8//bazel/config:is_gcc": [ - "-Wno-extra", - "-Wno-array-bounds", -@@ -154,7 +148,12 @@ - "@v8//bazel/config:is_windows": [ - "/std:c++20", - ], -- "//conditions:default": [], -+ "//conditions:default": [ -+ "-Wno-invalid-offsetof", -+ "-Wno-deprecated-this-capture", -+ "-Wno-deprecated-declarations", -+ "-std=c++20", -+ ], - }) + select({ - "@v8//bazel/config:is_gcc_fastbuild": [ - # Non-debug builds without optimizations fail because -@@ -183,7 +182,7 @@ - "Advapi32.lib", - ], - "@v8//bazel/config:is_macos": ["-pthread"], -- "//conditions:default": ["-Wl,--no-as-needed -ldl -latomic -pthread"], -+ "//conditions:default": ["-Wl,--no-as-needed -ldl -pthread"], - }) + select({ - ":should_add_rdynamic": ["-rdynamic"], - "//conditions:default": [], diff --git a/patches/v8_module_deps.patch b/patches/v8_module_deps.patch index 2c1d4f4d422..efa3bf9c119 100644 --- a/patches/v8_module_deps.patch +++ b/patches/v8_module_deps.patch @@ -1,24 +1,159 @@ -diff --git a/orig/v8-14.2.231.17/MODULE.bazel b/mod/v8-14.2.231.17/MODULE.bazel ---- a/orig/v8-14.2.231.17/MODULE.bazel 2026-03-17 19:06:16.296039877 +0000 -+++ b/mod/v8-14.2.231.17/MODULE.bazel 2026-03-17 19:06:16.296039877 +0000 -@@ -8,13 +8,65 @@ +# What: replace upstream V8 module dependency bootstrapping with repository +# declarations and dependency setup that match this Bazel workspace. +# Scope: upstream MODULE.bazel only; affects external repo resolution and Bazel +# module wiring, not V8 source files. + +diff --git a/orig/v8-14.6.202.11/MODULE.bazel b/mod/v8-14.6.202.11/MODULE.bazel +index 7d7ba53..66e1df5 100644 +--- a/orig/v8-14.6.202.11/MODULE.bazel ++++ b/mod/v8-14.6.202.11/MODULE.bazel +@@ -8,185 +8,66 @@ bazel_dep(name = "rules_cc", version = "0.2.0") bazel_dep(name = "rules_python", version = "1.0.0") - bazel_dep(name = "platforms", version = "0.0.11") + bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "abseil-cpp", version = "20250814.0") -bazel_dep(name = "highway", version = "1.2.0") +bazel_dep(name = "rules_license", version = "0.0.4") -+ + +-pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") +-pip.parse( +- hub_name = "v8_python_deps", +- python_version = "3.11", +- requirements_lock = "//:bazel/requirements.txt", +- extra_pip_args = [ +- "--require-hashes", +- "--index-url=https://pypi.org/simple", +- ], +-) +-use_repo(pip, "v8_python_deps") +- +-# Define the local LLVM toolchain repository +-llvm_toolchain_repository = use_repo_rule("//bazel/toolchain:llvm_repository.bzl", "llvm_toolchain_repository") +- +-llvm_toolchain_repository( +- name = "llvm_toolchain", +- path = "third_party/llvm-build/Release+Asserts", +- config_file_content = """ +-load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "feature", "flag_group", "flag_set", "tool_path") +git_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") +http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -+ + +-def _impl(ctx): +- tool_paths = [ +- tool_path(name = "gcc", path = "bin/clang"), +- tool_path(name = "ld", path = "bin/lld"), +- tool_path(name = "ar", path = "bin/llvm-ar"), +- tool_path(name = "cpp", path = "bin/clang++"), +- tool_path(name = "gcov", path = "/bin/false"), +- tool_path(name = "nm", path = "bin/llvm-nm"), +- tool_path(name = "objdump", path = "bin/llvm-objdump"), +- tool_path(name = "strip", path = "bin/llvm-strip"), +- ] +- +- features = [ +- feature( +- name = "default_compile_flags", +- enabled = True, +- flag_sets = [ +- flag_set( +- actions = [ +- "c-compile", +- "c++-compile", +- "c++-header-parsing", +- "c++-module-compile", +- "c++-module-codegen", +- "linkstamp-compile", +- "assemble", +- "preprocess-assemble", +- ], +- flag_groups = [ +- flag_group( +- flags = [ +- "--sysroot={WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot", +- "-nostdinc++", +- "-isystem", +- "{WORKSPACE_ROOT}/buildtools/third_party/libc++", +- "-isystem", +- "{WORKSPACE_ROOT}/third_party/libc++/src/include", +- "-isystem", +- "{WORKSPACE_ROOT}/third_party/libc++abi/src/include", +- "-isystem", +- "{WORKSPACE_ROOT}/third_party/libc++/src/src", +- "-isystem", +- "{WORKSPACE_ROOT}/third_party/llvm-libc/src", +- "-D_LIBCPP_HARDENING_MODE_DEFAULT=_LIBCPP_HARDENING_MODE_NONE", +- "-DLIBC_NAMESPACE=__llvm_libc_cr", +- ], +- ), +- ], +- ), +- ], +- ), +- feature( +- name = "default_linker_flags", +- enabled = True, +- flag_sets = [ +- flag_set( +- actions = [ +- "c++-link-executable", +- "c++-link-dynamic-library", +- "c++-link-nodeps-dynamic-library", +- ], +- flag_groups = [ +- flag_group( +- flags = [ +- "--sysroot={WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot", +- "-fuse-ld=lld", +- "-lm", +- "-lpthread", +- ], +- ), +- ], +- ), +- ], +- ), +- ] +- +- return cc_common.create_cc_toolchain_config_info( +- ctx = ctx, +- features = features, +- cxx_builtin_include_directories = [ +- "{WORKSPACE_ROOT}/buildtools/third_party/libc++", +- "{WORKSPACE_ROOT}/third_party/libc++/src/include", +- "{WORKSPACE_ROOT}/third_party/libc++abi/src/include", +- "{WORKSPACE_ROOT}/third_party/libc++/src/src", +- "{WORKSPACE_ROOT}/third_party/llvm-libc/src", +- "{WORKSPACE_ROOT}/third_party/llvm-build/Release+Asserts/lib/clang/22/include", +- "{WORKSPACE_ROOT}/third_party/llvm-build/Release+Asserts/lib/clang/23/include", +- "{WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot/usr/include", +- "{WORKSPACE_ROOT}/build/linux/debian_bullseye_amd64-sysroot/usr/local/include", +- ], +- toolchain_identifier = "local_clang", +- host_system_name = "local", +- target_system_name = "local", +- target_cpu = "k8", +- target_libc = "unknown", +- compiler = "clang", +- abi_version = "unknown", +- abi_libc_version = "unknown", +- tool_paths = tool_paths, +- ) +- +-cc_toolchain_config = rule( +- implementation = _impl, +- attrs = {}, +- provides = [CcToolchainConfigInfo], +http_archive( + name = "highway", + patch_cmds = ['python3 - <<\'PY\'\nfrom pathlib import Path\n\nbuild = Path("BUILD")\ntext = build.read_text()\ntext = text.replace(\n \'load("@rules_cc//cc:defs.bzl", "cc_test")\',\n \'load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")\',\n)\nbuild.write_text(text)\nPY'], + sha256 = "7e0be78b8318e8bdbf6fa545d2ecb4c90f947df03f7aadc42c1967f019e63343", + strip_prefix = "highway-1.2.0", + urls = ["https://github.com/google/highway/archive/refs/tags/1.2.0.tar.gz"], -+) -+ + ) +-""", +- build_file_content = """ +-load(":cc_toolchain_config.bzl", "cc_toolchain_config") + +-package(default_visibility = ["//visibility:public"]) +git_repository( + name = "icu", + build_file = "@v8//:bazel/BUILD.icu", @@ -27,45 +162,83 @@ diff --git a/orig/v8-14.2.231.17/MODULE.bazel b/mod/v8-14.2.231.17/MODULE.bazel + patch_cmds_win = ["Get-ChildItem -Path source -File -Include BUILD.bazel -Recurse | Remove-Item"], + remote = "https://chromium.googlesource.com/chromium/deps/icu.git", +) -+ + +-filegroup( +- name = "all_files", +- srcs = glob(["**/*"]), +http_archive( + name = "fast_float", + build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fast_float",\n hdrs = glob(["include/fast_float/*.h"]),\n include_prefix = "third_party/fast_float/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', + sha256 = "e14a33089712b681d74d94e2a11362643bd7d769ae8f7e7caefe955f57f7eacd", + strip_prefix = "fast_float-8.0.2", + urls = ["https://github.com/fastfloat/fast_float/archive/refs/tags/v8.0.2.tar.gz"], -+) -+ + ) + +-filegroup(name = "empty") +git_repository( + name = "simdutf", + build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "simdutf",\n srcs = ["simdutf.cpp"],\n hdrs = ["simdutf.h"],\n copts = ["-std=c++20"],\n include_prefix = "third_party/simdutf",\n visibility = ["//visibility:public"],\n)\n', + commit = "93b35aec29256f705c97f675fe4623578bd7a395", + remote = "https://chromium.googlesource.com/chromium/src/third_party/simdutf", +) -+ + +-cc_toolchain_config(name = "k8_toolchain_config") +git_repository( + name = "dragonbox", + build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "dragonbox",\n hdrs = ["include/dragonbox/dragonbox.h"],\n include_prefix = "third_party/dragonbox/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', + commit = "beeeef91cf6fef89a4d4ba5e95d47ca64ccb3a44", + remote = "https://chromium.googlesource.com/external/github.com/jk-jeon/dragonbox.git", +) -+ + +-cc_toolchain( +- name = "k8_toolchain", +- all_files = ":all_files", +- ar_files = ":all_files", +- compiler_files = ":all_files", +- dwp_files = ":empty", +- linker_files = ":all_files", +- objcopy_files = ":all_files", +- strip_files = ":all_files", +- supports_param_files = 0, +- toolchain_config = ":k8_toolchain_config", +- toolchain_identifier = "local_clang", +git_repository( + name = "fp16", + build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fp16",\n hdrs = glob(["include/**/*.h"]),\n include_prefix = "third_party/fp16/src/include",\n includes = ["include"],\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', + commit = "3d2de1816307bac63c16a297e8c4dc501b4076df", + remote = "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git", -+) + ) - pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") - pip.parse( - hub_name = "v8_python_deps", - python_version = "3.11", - requirements_lock = "//:bazel/requirements.txt", -- extra_pip_args = ["--require-hashes"], +-toolchain( +- name = "cc_toolchain_k8", +- exec_compatible_with = [ +- "@platforms//cpu:x86_64", +- "@platforms//os:linux", +- ], +- target_compatible_with = [ +- "@platforms//cpu:x86_64", +- "@platforms//os:linux", ++pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") ++pip.parse( ++ hub_name = "v8_python_deps", ++ python_version = "3.11", ++ requirements_lock = "//:bazel/requirements.txt", + extra_pip_args = [ + "--require-hashes", + "--index-url=https://pypi.org/simple", -+ ], + ], +- toolchain = ":k8_toolchain", +- toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", +-) +-""", ) - use_repo(pip, "v8_python_deps") ++use_repo(pip, "v8_python_deps") + +-register_toolchains("@llvm_toolchain//:cc_toolchain_k8") +- +-# Define local repository for libc++ from third_party sources +-libcxx_repository = use_repo_rule("//bazel/toolchain:libcxx_repository.bzl", "libcxx_repository") +- +-libcxx_repository( +- name = "libcxx", +-) diff --git a/patches/v8_source_portability.patch b/patches/v8_source_portability.patch index ca11610f1a6..81433cae624 100644 --- a/patches/v8_source_portability.patch +++ b/patches/v8_source_portability.patch @@ -3,10 +3,10 @@ # weak glibc symbol handling, and warning annotations; no dependency # include-path rewrites or intentional V8 feature changes. -diff --git a/orig/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc b/mod/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc +diff --git a/orig/v8-14.6.202.11/src/base/debug/stack_trace_posix.cc b/mod/v8-14.6.202.11/src/base/debug/stack_trace_posix.cc index 6176ed4..a02043d 100644 ---- a/orig/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc -+++ b/mod/v8-14.2.231.17/src/base/debug/stack_trace_posix.cc +--- a/orig/v8-14.6.202.11/src/base/debug/stack_trace_posix.cc ++++ b/mod/v8-14.6.202.11/src/base/debug/stack_trace_posix.cc @@ -64,6 +64,7 @@ namespace { volatile sig_atomic_t in_signal_handler = 0; bool dump_stack_in_signal_handler = true; @@ -24,10 +24,10 @@ index 6176ed4..a02043d 100644 // // "out/Debug/base_unittests(_ZN10StackTraceC1Ev+0x20) [0x817778c]" -diff --git a/orig/v8-14.2.231.17/src/base/platform/platform-posix.cc b/mod/v8-14.2.231.17/src/base/platform/platform-posix.cc +diff --git a/orig/v8-14.6.202.11/src/base/platform/platform-posix.cc b/mod/v8-14.6.202.11/src/base/platform/platform-posix.cc index 4c7d878..0e45eb3 100644 ---- a/orig/v8-14.2.231.17/src/base/platform/platform-posix.cc -+++ b/mod/v8-14.2.231.17/src/base/platform/platform-posix.cc +--- a/orig/v8-14.6.202.11/src/base/platform/platform-posix.cc ++++ b/mod/v8-14.6.202.11/src/base/platform/platform-posix.cc @@ -95,7 +95,7 @@ #endif @@ -63,10 +63,10 @@ index 4c7d878..0e45eb3 100644 return __libc_stack_end; } -diff --git a/orig/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc b/mod/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc +diff --git a/orig/v8-14.6.202.11/src/libplatform/default-thread-isolated-allocator.cc b/mod/v8-14.6.202.11/src/libplatform/default-thread-isolated-allocator.cc index bda0e43..b44f1d9 100644 ---- a/orig/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc -+++ b/mod/v8-14.2.231.17/src/libplatform/default-thread-isolated-allocator.cc +--- a/orig/v8-14.6.202.11/src/libplatform/default-thread-isolated-allocator.cc ++++ b/mod/v8-14.6.202.11/src/libplatform/default-thread-isolated-allocator.cc @@ -23,7 +23,7 @@ extern int pkey_free(int pkey) V8_WEAK; namespace { diff --git a/third_party/v8/BUILD.bazel b/third_party/v8/BUILD.bazel index c786ccb05d6..b209a4a658d 100644 --- a/third_party/v8/BUILD.bazel +++ b/third_party/v8/BUILD.bazel @@ -12,7 +12,7 @@ V8_STATIC_LIBRARY_FEATURES = [ genrule( name = "binding_cc", - srcs = ["@v8_crate_pinned//:binding_cc"], + srcs = ["@v8_crate_146_4_0//:binding_cc"], outs = ["binding.cc"], cmd = """ sed \ @@ -22,20 +22,19 @@ genrule( -e '/using HelpOptions = i::FlagList::HelpOptions;/d' \ -e '/HelpOptions help_options = HelpOptions(HelpOptions::kExit, usage);/d' \ -e 's| i::FlagList::SetFlagsFromCommandLine(argc, argv, true, help_options);| v8::V8::SetFlagsFromCommandLine(argc, argv, true);|' \ - -e 's|icu_[0-9][0-9]*::|icu::|g' \ - $(location @v8_crate_pinned//:binding_cc) > "$@" + $(location @v8_crate_146_4_0//:binding_cc) > "$@" """, ) genrule( name = "support_h", - srcs = ["@v8_crate_pinned//:support_h"], + srcs = ["@v8_crate_146_4_0//:support_h"], outs = ["support.h"], - cmd = "cp $(location @v8_crate_pinned//:support_h) $@", + cmd = "cp $(location @v8_crate_146_4_0//:support_h) $@", ) cc_library( - name = "v8_binding", + name = "v8_146_4_0_binding", srcs = [":binding_cc"], hdrs = [":support_h"], copts = V8_COPTS, @@ -46,32 +45,50 @@ cc_library( ) cc_static_library( - name = "v8_x86_64_unknown_linux_musl", - deps = [":v8_binding"], + name = "v8_146_4_0_x86_64_apple_darwin", + deps = [":v8_146_4_0_binding"], features = V8_STATIC_LIBRARY_FEATURES, ) cc_static_library( - name = "v8_aarch64_unknown_linux_musl_base", - deps = [":v8_binding"], + name = "v8_146_4_0_aarch64_apple_darwin", + deps = [":v8_146_4_0_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +cc_static_library( + name = "v8_146_4_0_aarch64_unknown_linux_gnu", + deps = [":v8_146_4_0_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +cc_static_library( + name = "v8_146_4_0_x86_64_unknown_linux_gnu", + deps = [":v8_146_4_0_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +cc_static_library( + name = "v8_146_4_0_aarch64_unknown_linux_musl_base", + deps = [":v8_146_4_0_binding"], features = V8_STATIC_LIBRARY_FEATURES, ) genrule( - name = "v8_aarch64_unknown_linux_musl", + name = "v8_146_4_0_aarch64_unknown_linux_musl", srcs = [ - ":v8_aarch64_unknown_linux_musl_base", + ":v8_146_4_0_aarch64_unknown_linux_musl_base", "@llvm//runtimes/compiler-rt:clang_rt.builtins.static", ], tools = [ "@llvm//tools:llvm-ar", "@llvm//tools:llvm-ranlib", ], - outs = ["libv8_aarch64_unknown_linux_musl.a"], + outs = ["libv8_146_4_0_aarch64_unknown_linux_musl.a"], cmd = """ cat > "$(@D)/merge.mri" <<'EOF' create $@ -addlib $(location :v8_aarch64_unknown_linux_musl_base) +addlib $(location :v8_146_4_0_aarch64_unknown_linux_musl_base) addlib $(location @llvm//runtimes/compiler-rt:clang_rt.builtins.static) save end @@ -81,20 +98,120 @@ EOF """, ) +cc_static_library( + name = "v8_146_4_0_x86_64_unknown_linux_musl", + deps = [":v8_146_4_0_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +cc_static_library( + name = "v8_146_4_0_aarch64_pc_windows_msvc", + deps = [":v8_146_4_0_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +cc_static_library( + name = "v8_146_4_0_x86_64_pc_windows_msvc", + deps = [":v8_146_4_0_binding"], + features = V8_STATIC_LIBRARY_FEATURES, +) + +alias( + name = "v8_146_4_0_aarch64_pc_windows_gnullvm", + actual = ":v8_146_4_0_aarch64_pc_windows_msvc", +) + +alias( + name = "v8_146_4_0_x86_64_pc_windows_gnullvm", + actual = ":v8_146_4_0_x86_64_pc_windows_msvc", +) + filegroup( - name = "src_binding_release_x86_64_unknown_linux_musl", - srcs = ["@v8_crate_pinned//:src_binding_release_x86_64_unknown_linux_gnu"], + name = "src_binding_release_x86_64_apple_darwin", + srcs = ["@v8_crate_146_4_0//:src_binding_release_x86_64_apple_darwin"], +) + +filegroup( + name = "src_binding_release_aarch64_apple_darwin", + srcs = ["@v8_crate_146_4_0//:src_binding_release_aarch64_apple_darwin"], +) + +filegroup( + name = "src_binding_release_aarch64_unknown_linux_gnu", + srcs = ["@v8_crate_146_4_0//:src_binding_release_aarch64_unknown_linux_gnu"], +) + +filegroup( + name = "src_binding_release_x86_64_unknown_linux_gnu", + srcs = ["@v8_crate_146_4_0//:src_binding_release_x86_64_unknown_linux_gnu"], ) filegroup( name = "src_binding_release_aarch64_unknown_linux_musl", - srcs = ["@v8_crate_pinned//:src_binding_release_aarch64_unknown_linux_gnu"], + srcs = ["@v8_crate_146_4_0//:src_binding_release_aarch64_unknown_linux_gnu"], +) + +filegroup( + name = "src_binding_release_x86_64_unknown_linux_musl", + srcs = ["@v8_crate_146_4_0//:src_binding_release_x86_64_unknown_linux_gnu"], +) + +filegroup( + name = "src_binding_release_x86_64_pc_windows_msvc", + srcs = ["@v8_crate_146_4_0//:src_binding_release_x86_64_pc_windows_msvc"], +) + +filegroup( + name = "src_binding_release_aarch64_pc_windows_msvc", + srcs = ["@v8_crate_146_4_0//:src_binding_release_aarch64_pc_windows_msvc"], +) + +alias( + name = "src_binding_release_x86_64_pc_windows_gnullvm", + actual = ":src_binding_release_x86_64_pc_windows_msvc", +) + +alias( + name = "src_binding_release_aarch64_pc_windows_gnullvm", + actual = ":src_binding_release_aarch64_pc_windows_msvc", +) + +filegroup( + name = "rusty_v8_release_pair_x86_64_apple_darwin", + srcs = [ + ":v8_146_4_0_x86_64_apple_darwin", + ":src_binding_release_x86_64_apple_darwin", + ], +) + +filegroup( + name = "rusty_v8_release_pair_aarch64_apple_darwin", + srcs = [ + ":v8_146_4_0_aarch64_apple_darwin", + ":src_binding_release_aarch64_apple_darwin", + ], +) + +filegroup( + name = "rusty_v8_release_pair_x86_64_unknown_linux_gnu", + srcs = [ + ":v8_146_4_0_x86_64_unknown_linux_gnu", + ":src_binding_release_x86_64_unknown_linux_gnu", + ], +) + +filegroup( + name = "rusty_v8_release_pair_aarch64_unknown_linux_gnu", + srcs = [ + ":v8_146_4_0_aarch64_unknown_linux_gnu", + ":src_binding_release_aarch64_unknown_linux_gnu", + ], ) filegroup( name = "rusty_v8_release_pair_x86_64_unknown_linux_musl", srcs = [ - ":v8_x86_64_unknown_linux_musl", + ":v8_146_4_0_x86_64_unknown_linux_musl", ":src_binding_release_x86_64_unknown_linux_musl", ], ) @@ -102,27 +219,57 @@ filegroup( filegroup( name = "rusty_v8_release_pair_aarch64_unknown_linux_musl", srcs = [ - ":v8_aarch64_unknown_linux_musl", + ":v8_146_4_0_aarch64_unknown_linux_musl", ":src_binding_release_aarch64_unknown_linux_musl", ], ) -alias( - name = "rusty_v8_archive_x86_64_unknown_linux_musl", - actual = ":v8_x86_64_unknown_linux_musl", +filegroup( + name = "rusty_v8_release_pair_x86_64_pc_windows_msvc", + srcs = [ + ":v8_146_4_0_x86_64_pc_windows_msvc", + ":src_binding_release_x86_64_pc_windows_msvc", + ], ) -alias( - name = "rusty_v8_archive_aarch64_unknown_linux_musl", - actual = ":v8_aarch64_unknown_linux_musl", +filegroup( + name = "rusty_v8_release_pair_aarch64_pc_windows_msvc", + srcs = [ + ":v8_146_4_0_aarch64_pc_windows_msvc", + ":src_binding_release_aarch64_pc_windows_msvc", + ], ) alias( - name = "rusty_v8_binding_x86_64_unknown_linux_musl", - actual = ":src_binding_release_x86_64_unknown_linux_musl", + name = "rusty_v8_archive_for_target", + actual = select({ + "@rules_rs//rs/experimental/platforms/config:aarch64-apple-darwin": ":v8_146_4_0_aarch64_apple_darwin", + "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-gnullvm": ":v8_146_4_0_aarch64_pc_windows_gnullvm", + "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-msvc": ":v8_146_4_0_aarch64_pc_windows_msvc", + "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-gnu": ":v8_146_4_0_aarch64_unknown_linux_gnu", + "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-musl": ":v8_146_4_0_aarch64_unknown_linux_musl", + "@rules_rs//rs/experimental/platforms/config:x86_64-apple-darwin": ":v8_146_4_0_x86_64_apple_darwin", + "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-gnullvm": ":v8_146_4_0_x86_64_pc_windows_gnullvm", + "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-msvc": ":v8_146_4_0_x86_64_pc_windows_msvc", + "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-gnu": ":v8_146_4_0_x86_64_unknown_linux_gnu", + "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-musl": ":v8_146_4_0_x86_64_unknown_linux_musl", + "//conditions:default": ":v8_146_4_0_x86_64_unknown_linux_gnu", + }), ) alias( - name = "rusty_v8_binding_aarch64_unknown_linux_musl", - actual = ":src_binding_release_aarch64_unknown_linux_musl", + name = "rusty_v8_binding_for_target", + actual = select({ + "@rules_rs//rs/experimental/platforms/config:aarch64-apple-darwin": ":src_binding_release_aarch64_apple_darwin", + "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-gnullvm": ":src_binding_release_aarch64_pc_windows_gnullvm", + "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-msvc": ":src_binding_release_aarch64_pc_windows_msvc", + "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-gnu": ":src_binding_release_aarch64_unknown_linux_gnu", + "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-musl": ":src_binding_release_aarch64_unknown_linux_musl", + "@rules_rs//rs/experimental/platforms/config:x86_64-apple-darwin": ":src_binding_release_x86_64_apple_darwin", + "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-gnullvm": ":src_binding_release_x86_64_pc_windows_gnullvm", + "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-msvc": ":src_binding_release_x86_64_pc_windows_msvc", + "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-gnu": ":src_binding_release_x86_64_unknown_linux_gnu", + "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-musl": ":src_binding_release_x86_64_unknown_linux_musl", + "//conditions:default": ":src_binding_release_x86_64_unknown_linux_gnu", + }), ) diff --git a/third_party/v8/README.md b/third_party/v8/README.md index 8ddd276d757..ceac33821b2 100644 --- a/third_party/v8/README.md +++ b/third_party/v8/README.md @@ -1,25 +1,31 @@ -# `rusty_v8` Musl Artifacts +# `rusty_v8` Release Artifacts -This directory contains the Bazel packaging used to build and stage musl -`rusty_v8` release artifacts for `codex-rs/v8-poc`. +This directory contains the Bazel packaging used to build and stage +target-specific `rusty_v8` release artifacts for `codex-rs/v8-poc`. Current pinned versions: -- Rust crate: `v8 = =142.2.0` -- Embedded upstream V8 source: `14.2.231.17` +- Rust crate: `v8 = =146.4.0` +- Embedded upstream V8 source: `14.6.202.11` -The generated musl release pairs are: +The generated release pairs include: +- `//third_party/v8:rusty_v8_release_pair_x86_64_apple_darwin` +- `//third_party/v8:rusty_v8_release_pair_aarch64_apple_darwin` +- `//third_party/v8:rusty_v8_release_pair_x86_64_unknown_linux_gnu` +- `//third_party/v8:rusty_v8_release_pair_aarch64_unknown_linux_gnu` - `//third_party/v8:rusty_v8_release_pair_x86_64_unknown_linux_musl` - `//third_party/v8:rusty_v8_release_pair_aarch64_unknown_linux_musl` +- `//third_party/v8:rusty_v8_release_pair_x86_64_pc_windows_msvc` +- `//third_party/v8:rusty_v8_release_pair_aarch64_pc_windows_msvc` Each release pair contains: - a static library built from source -- a Rust binding file copied from the matching GNU Linux binding shipped in the - exact same `v8` crate version +- a Rust binding file copied from the exact same `v8` crate version for that + target -Musl consumers in this repo should be wired with explicit paths: +Consumers in this repo should be wired with explicit paths: - `RUSTY_V8_ARCHIVE` - `RUSTY_V8_SRC_BINDING_PATH` @@ -27,11 +33,16 @@ Musl consumers in this repo should be wired with explicit paths: Do not mix artifacts across crate versions. The archive and binding must match the exact resolved `v8` crate version from `codex-rs/Cargo.lock`. +The target-select aliases used by the `v8` build script are: + +- `//third_party/v8:rusty_v8_archive_for_target` +- `//third_party/v8:rusty_v8_binding_for_target` + The dedicated publishing workflow is: - `.github/workflows/rusty-v8-release.yml` -That workflow stages: +That workflow currently stages musl artifacts: - `librusty_v8_release_x86_64-unknown-linux-musl.a.gz` - `librusty_v8_release_aarch64-unknown-linux-musl.a.gz` diff --git a/third_party/v8/v8_crate.BUILD.bazel b/third_party/v8/v8_crate.BUILD.bazel index d1dc9227d3c..f9b2a1998ca 100644 --- a/third_party/v8/v8_crate.BUILD.bazel +++ b/third_party/v8/v8_crate.BUILD.bazel @@ -10,6 +10,16 @@ filegroup( srcs = ["src/support.h"], ) +filegroup( + name = "src_binding_release_aarch64_apple_darwin", + srcs = ["gen/src_binding_release_aarch64-apple-darwin.rs"], +) + +filegroup( + name = "src_binding_release_x86_64_apple_darwin", + srcs = ["gen/src_binding_release_x86_64-apple-darwin.rs"], +) + filegroup( name = "src_binding_release_aarch64_unknown_linux_gnu", srcs = ["gen/src_binding_release_aarch64-unknown-linux-gnu.rs"], @@ -19,3 +29,13 @@ filegroup( name = "src_binding_release_x86_64_unknown_linux_gnu", srcs = ["gen/src_binding_release_x86_64-unknown-linux-gnu.rs"], ) + +filegroup( + name = "src_binding_release_x86_64_pc_windows_msvc", + srcs = ["gen/src_binding_release_x86_64-pc-windows-msvc.rs"], +) + +filegroup( + name = "src_binding_release_aarch64_pc_windows_msvc", + srcs = ["gen/src_binding_release_aarch64-pc-windows-msvc.rs"], +) From cef4b7715dd828920074e14d05eaee2099ff0ce9 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Wed, 18 Mar 2026 06:21:29 +0000 Subject: [PATCH 04/19] Link in the missing llvm runtime archives --- .github/scripts/rusty_v8_bazel.py | 103 ++++++++++++++++++++++++- .github/workflows/rusty-v8-release.yml | 8 ++ codex-rs/Cargo.toml | 1 + third_party/v8/README.md | 5 ++ 4 files changed, 113 insertions(+), 4 deletions(-) diff --git a/.github/scripts/rusty_v8_bazel.py b/.github/scripts/rusty_v8_bazel.py index 4da1471adce..0f7ad49be1f 100644 --- a/.github/scripts/rusty_v8_bazel.py +++ b/.github/scripts/rusty_v8_bazel.py @@ -7,11 +7,18 @@ import shutil import subprocess import sys +import tempfile import tomllib from pathlib import Path ROOT = Path(__file__).resolve().parents[2] +MUSL_RUNTIME_ARCHIVE_LABELS = [ + "@llvm//runtimes/libcxx:libcxx.static", + "@llvm//runtimes/libcxx:libcxxabi.static", +] +LLVM_AR_LABEL = "@llvm//tools:llvm-ar" +LLVM_RANLIB_LABEL = "@llvm//tools:llvm-ranlib" def bazel_execroot() -> Path: @@ -25,6 +32,23 @@ def bazel_execroot() -> Path: return Path(result.stdout.strip()) +def bazel_output_base() -> Path: + result = subprocess.run( + ["bazel", "info", "output_base"], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ) + return Path(result.stdout.strip()) + + +def bazel_output_path(path: str) -> Path: + if path.startswith("external/"): + return bazel_output_base() / path + return bazel_execroot() / path + + def bazel_output_files(platform: str, labels: list[str]) -> list[Path]: expression = "set(" + " ".join(labels) + ")" result = subprocess.run( @@ -40,8 +64,33 @@ def bazel_output_files(platform: str, labels: list[str]) -> list[Path]: capture_output=True, text=True, ) - execroot = bazel_execroot() - return [execroot / line.strip() for line in result.stdout.splitlines() if line.strip()] + return [bazel_output_path(line.strip()) for line in result.stdout.splitlines() if line.strip()] + + +def bazel_build(platform: str, labels: list[str]) -> None: + subprocess.run( + [ + "bazel", + "build", + f"--platforms=@llvm//platforms:{platform}", + *labels, + ], + cwd=ROOT, + check=True, + ) + + +def ensure_bazel_output_files(platform: str, labels: list[str]) -> list[Path]: + outputs = bazel_output_files(platform, labels) + if all(path.exists() for path in outputs): + return outputs + + bazel_build(platform, labels) + outputs = bazel_output_files(platform, labels) + missing = [str(path) for path in outputs if not path.exists()] + if missing: + raise SystemExit(f"missing built outputs for {labels}: {missing}") + return outputs def release_pair_label(target: str) -> str: @@ -69,8 +118,49 @@ def staged_archive_name(target: str, source_path: Path) -> str: return f"librusty_v8_release_{target}.a.gz" +def is_musl_archive_target(target: str, source_path: Path) -> bool: + return target.endswith("-unknown-linux-musl") and source_path.suffix == ".a" + + +def single_bazel_output_file(platform: str, label: str) -> Path: + outputs = ensure_bazel_output_files(platform, [label]) + if len(outputs) != 1: + raise SystemExit(f"expected exactly one output for {label}, found {outputs}") + return outputs[0] + + +def merged_musl_archive(platform: str, lib_path: Path) -> Path: + llvm_ar = single_bazel_output_file(platform, LLVM_AR_LABEL) + llvm_ranlib = single_bazel_output_file(platform, LLVM_RANLIB_LABEL) + runtime_archives = [ + single_bazel_output_file(platform, label) + for label in MUSL_RUNTIME_ARCHIVE_LABELS + ] + + temp_dir = Path(tempfile.mkdtemp(prefix="rusty-v8-musl-stage-")) + merged_archive = temp_dir / lib_path.name + merge_commands = "\n".join( + [ + f"create {merged_archive}", + f"addlib {lib_path}", + *[f"addlib {archive}" for archive in runtime_archives], + "save", + "end", + ] + ) + subprocess.run( + [str(llvm_ar), "-M"], + cwd=ROOT, + check=True, + input=merge_commands, + text=True, + ) + subprocess.run([str(llvm_ranlib), str(merged_archive)], cwd=ROOT, check=True) + return merged_archive + + def stage_release_pair(platform: str, target: str, output_dir: Path) -> None: - outputs = bazel_output_files(platform, [release_pair_label(target)]) + outputs = ensure_bazel_output_files(platform, [release_pair_label(target)]) try: lib_path = next(path for path in outputs if path.suffix in {".a", ".lib"}) @@ -85,8 +175,13 @@ def stage_release_pair(platform: str, target: str, output_dir: Path) -> None: output_dir.mkdir(parents=True, exist_ok=True) staged_library = output_dir / staged_archive_name(target, lib_path) staged_binding = output_dir / f"src_binding_release_{target}.rs" + source_archive = ( + merged_musl_archive(platform, lib_path) + if is_musl_archive_target(target, lib_path) + else lib_path + ) - with lib_path.open("rb") as src, staged_library.open("wb") as dst: + with source_archive.open("rb") as src, staged_library.open("wb") as dst: with gzip.GzipFile( filename="", mode="wb", diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml index 89cdca774ba..465f6c5bd1d 100644 --- a/.github/workflows/rusty-v8-release.yml +++ b/.github/workflows/rusty-v8-release.yml @@ -96,11 +96,19 @@ jobs: target_suffix="${TARGET//-/_}" pair_target="//third_party/v8:rusty_v8_release_pair_${target_suffix}" + extra_targets=() + if [[ "${TARGET}" == *-unknown-linux-musl ]]; then + extra_targets=( + "@llvm//runtimes/libcxx:libcxx.static" + "@llvm//runtimes/libcxx:libcxxabi.static" + ) + fi bazel_args=( build "--platforms=@llvm//platforms:${PLATFORM}" "${pair_target}" + "${extra_targets[@]}" --build_metadata=REPO_URL=https://github.com/${GITHUB_REPOSITORY}.git --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) --build_metadata=ROLE=CI diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 3d299df9282..881e4364463 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -368,6 +368,7 @@ unwrap_used = "deny" # silence the false positive here instead of deleting a real dependency. [workspace.metadata.cargo-shear] ignored = [ + "codex-v8-poc", "icu_provider", "openssl-sys", "codex-utils-readiness", diff --git a/third_party/v8/README.md b/third_party/v8/README.md index ceac33821b2..af222e68250 100644 --- a/third_party/v8/README.md +++ b/third_party/v8/README.md @@ -48,3 +48,8 @@ That workflow currently stages musl artifacts: - `librusty_v8_release_aarch64-unknown-linux-musl.a.gz` - `src_binding_release_x86_64-unknown-linux-musl.rs` - `src_binding_release_aarch64-unknown-linux-musl.rs` + +During musl staging, the produced static archive is merged with the target's +LLVM `libc++` and `libc++abi` static runtime archives. Rust's musl toolchain +already provides the matching `libunwind`, so staging does not bundle a second +copy. From f49672657e2ece0a989337ee53f8016628a8b12e Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Wed, 18 Mar 2026 06:55:53 +0000 Subject: [PATCH 05/19] Version match --- MODULE.bazel | 8 ++++---- third_party/v8/README.md | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 4943855367a..214c7a70c0c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -193,18 +193,18 @@ crate.annotation( inject_repo(crate, "alsa_lib") -bazel_dep(name = "v8", version = "14.6.202.11") +bazel_dep(name = "v8", version = "14.6.202.9") archive_override( module_name = "v8", - integrity = "sha256-Ju45oFJMyCWyT/r+d+MDsCbCeoDBisGaj4+KZYIIYSU=", + integrity = "sha256-JphDwLAzsd9KvgRZ7eQvNtPU6qGd3XjFt/a/1QITAJU=", patch_strip = 3, patches = [ "//patches:v8_module_deps.patch", "//patches:v8_bazel_rules.patch", "//patches:v8_source_portability.patch", ], - strip_prefix = "v8-14.6.202.11", - urls = ["https://github.com/v8/v8/archive/refs/tags/14.6.202.11.tar.gz"], + strip_prefix = "v8-14.6.202.9", + urls = ["https://github.com/v8/v8/archive/refs/tags/14.6.202.9.tar.gz"], ) http_archive( diff --git a/third_party/v8/README.md b/third_party/v8/README.md index af222e68250..4f6d1366330 100644 --- a/third_party/v8/README.md +++ b/third_party/v8/README.md @@ -6,7 +6,7 @@ target-specific `rusty_v8` release artifacts for `codex-rs/v8-poc`. Current pinned versions: - Rust crate: `v8 = =146.4.0` -- Embedded upstream V8 source: `14.6.202.11` +- Embedded upstream V8 source: `14.6.202.9` The generated release pairs include: From d040eda677b4a253e2d78e21c751911048eb1ea4 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Wed, 18 Mar 2026 23:13:43 +0000 Subject: [PATCH 06/19] Do not test this package by default --- codex-rs/v8-poc/BUILD.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/codex-rs/v8-poc/BUILD.bazel b/codex-rs/v8-poc/BUILD.bazel index 4d5521dae6f..cf50ba933c1 100644 --- a/codex-rs/v8-poc/BUILD.bazel +++ b/codex-rs/v8-poc/BUILD.bazel @@ -9,4 +9,5 @@ codex_rust_crate( name = "v8-poc-rusty-v8", crate_features = ["rusty_v8"], crate_name = "codex_v8_poc", + test_tags = ["manual"], ) From dc98f8e77c501282670dc4555c09ba49ff762cf6 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 05:57:02 +0000 Subject: [PATCH 07/19] Add canary workflow for now --- .github/workflows/bazel.yml | 8 +- .github/workflows/v8-poc-canary.yml | 123 ++++++++++++++++++++++++++++ codex-rs/v8-poc/BUILD.bazel | 1 + defs.bzl | 4 + 4 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/v8-poc-canary.yml diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 64e831e5fd3..898a8bffa05 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -156,12 +156,18 @@ jobs: bazel_args=( test - //... --test_verbose_timeout_warnings --build_metadata=REPO_URL=https://github.com/openai/codex.git --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) --build_metadata=ROLE=CI --build_metadata=VISIBILITY=PUBLIC + -- + //... + # Keep `rusty_v8` out of the ordinary Bazel CI path. The musl + # release workflow is the only place that should build/stage it. + -//codex-rs/v8-poc:v8-poc-rusty-v8 + -//codex-rs/v8-poc:v8-poc-rusty-v8-unit-tests + -//codex-rs/v8-poc:v8-poc-rusty-v8-unit-tests-bin ) if [[ "${RUNNER_OS:-}" != "Windows" ]]; then diff --git a/.github/workflows/v8-poc-canary.yml b/.github/workflows/v8-poc-canary.yml new file mode 100644 index 00000000000..8af0324a36c --- /dev/null +++ b/.github/workflows/v8-poc-canary.yml @@ -0,0 +1,123 @@ +name: v8-poc-canary + +on: + pull_request: {} + push: + branches: + - main + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}::${{ github.event.pull_request.number > 0 && format('pr-{0}', github.event.pull_request.number) || github.ref_name }} + cancel-in-progress: ${{ github.ref_name != 'main' }} + +jobs: + metadata: + runs-on: ubuntu-latest + outputs: + v8_version: ${{ steps.v8_version.outputs.version }} + + steps: + - uses: actions/checkout@v6 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Resolve exact v8 crate version + id: v8_version + shell: bash + run: | + set -euo pipefail + version="$(python3 .github/scripts/rusty_v8_bazel.py resolved-v8-crate-version)" + echo "version=${version}" >> "$GITHUB_OUTPUT" + + build: + name: Build ${{ matrix.target }} + needs: metadata + runs-on: ${{ matrix.runner }} + permissions: + contents: read + actions: read + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-24.04 + platform: linux_amd64_musl + target: x86_64-unknown-linux-musl + - runner: ubuntu-24.04-arm + platform: linux_arm64_musl + target: aarch64-unknown-linux-musl + + steps: + - uses: actions/checkout@v6 + + - name: Set up Bazel + uses: bazelbuild/setup-bazelisk@v3 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Build Bazel V8 release pair + env: + BUILDBUDDY_API_KEY: ${{ secrets.BUILDBUDDY_API_KEY }} + PLATFORM: ${{ matrix.platform }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + target_suffix="${TARGET//-/_}" + pair_target="//third_party/v8:rusty_v8_release_pair_${target_suffix}" + extra_targets=( + "@llvm//runtimes/libcxx:libcxx.static" + "@llvm//runtimes/libcxx:libcxxabi.static" + ) + + bazel_args=( + build + "--platforms=@llvm//platforms:${PLATFORM}" + "${pair_target}" + "${extra_targets[@]}" + --build_metadata=REPO_URL=https://github.com/${GITHUB_REPOSITORY}.git + --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) + --build_metadata=ROLE=CI + --build_metadata=VISIBILITY=PUBLIC + ) + + if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then + bazel \ + --noexperimental_remote_repo_contents_cache \ + --bazelrc=.github/workflows/ci.bazelrc \ + "${bazel_args[@]}" \ + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" + else + bazel \ + --noexperimental_remote_repo_contents_cache \ + "${bazel_args[@]}" \ + --remote_cache= \ + --remote_executor= + fi + + - name: Stage release pair + env: + PLATFORM: ${{ matrix.platform }} + TARGET: ${{ matrix.target }} + shell: bash + run: | + set -euo pipefail + + python3 .github/scripts/rusty_v8_bazel.py stage-release-pair \ + --platform "${PLATFORM}" \ + --target "${TARGET}" \ + --output-dir "dist/${TARGET}" + + - name: Upload staged musl artifacts + uses: actions/upload-artifact@v7 + with: + name: v8-poc-canary-${{ needs.metadata.outputs.v8_version }}-${{ matrix.target }} + path: dist/${{ matrix.target }}/* diff --git a/codex-rs/v8-poc/BUILD.bazel b/codex-rs/v8-poc/BUILD.bazel index cf50ba933c1..8b85f1fc6be 100644 --- a/codex-rs/v8-poc/BUILD.bazel +++ b/codex-rs/v8-poc/BUILD.bazel @@ -9,5 +9,6 @@ codex_rust_crate( name = "v8-poc-rusty-v8", crate_features = ["rusty_v8"], crate_name = "codex_v8_poc", + tags = ["manual"], test_tags = ["manual"], ) diff --git a/defs.bzl b/defs.bzl index 058c1906a83..0b4b54630d8 100644 --- a/defs.bzl +++ b/defs.bzl @@ -90,6 +90,7 @@ def codex_rust_crate( name, crate_name, crate_features = [], + tags = [], crate_srcs = None, crate_edition = None, proc_macro = False, @@ -120,6 +121,7 @@ def codex_rust_crate( Crates are only compiled in a single configuration across the workspace, i.e. with all features in this list enabled. So use sparingly, and prefer to refactor optional functionality to a separate crate. + tags: Tags applied to the library and binary targets for this crate. crate_srcs: Optional explicit srcs; defaults to `src/**/*.rs`. crate_edition: Rust edition override, if not default. You probably don't want this, it's only here for a single caller. @@ -180,6 +182,7 @@ def codex_rust_crate( edition = crate_edition, rustc_flags = rustc_flags_extra, rustc_env = rustc_env, + tags = tags, visibility = ["//visibility:public"], ) @@ -226,6 +229,7 @@ def codex_rust_crate( edition = crate_edition, rustc_flags = rustc_flags_extra, srcs = native.glob(["src/**/*.rs"]), + tags = tags, visibility = ["//visibility:public"], ) From 4809cd10763964578fdb3cbc45d9418aae8f9437 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 06:47:05 +0000 Subject: [PATCH 08/19] I swear no v8 --- .github/workflows/bazel.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 898a8bffa05..fd49b7f48e9 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -163,8 +163,11 @@ jobs: --build_metadata=VISIBILITY=PUBLIC -- //... - # Keep `rusty_v8` out of the ordinary Bazel CI path. The musl - # release workflow is the only place that should build/stage it. + # Keep V8 out of the ordinary Bazel CI path. Only the dedicated + # canary and release workflows should build `third_party/v8`. + -//third_party/v8:all + # Belt-and-suspenders exclusion for the consumer-side `rusty_v8` + # proof-of-concept targets. -//codex-rs/v8-poc:v8-poc-rusty-v8 -//codex-rs/v8-poc:v8-poc-rusty-v8-unit-tests -//codex-rs/v8-poc:v8-poc-rusty-v8-unit-tests-bin From 1ab65666bc7a5e18f3e45350da604937f4a97595 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 06:52:23 +0000 Subject: [PATCH 09/19] Split v8-poc consumer to follow-up branch Remove codex-v8-poc from the release branch so CI can validate only the Bazel build and release machinery. Keep V8 version resolution working by falling back to MODULE.bazel when Cargo.lock no longer carries the v8 crate. --- .github/scripts/rusty_v8_bazel.py | 22 ++- .github/workflows/bazel.yml | 5 - MODULE.bazel.lock | 19 --- codex-rs/Cargo.lock | 238 +----------------------------- codex-rs/Cargo.toml | 3 - codex-rs/docs/bazel.md | 6 +- codex-rs/v8-poc/.gitignore | 2 - codex-rs/v8-poc/BUILD.bazel | 14 -- codex-rs/v8-poc/Cargo.toml | 22 --- codex-rs/v8-poc/src/lib.rs | 72 --------- defs.bzl | 4 - third_party/v8/README.md | 5 +- 12 files changed, 33 insertions(+), 379 deletions(-) delete mode 100644 codex-rs/v8-poc/.gitignore delete mode 100644 codex-rs/v8-poc/BUILD.bazel delete mode 100644 codex-rs/v8-poc/Cargo.toml delete mode 100644 codex-rs/v8-poc/src/lib.rs diff --git a/.github/scripts/rusty_v8_bazel.py b/.github/scripts/rusty_v8_bazel.py index 0f7ad49be1f..1d2e417c707 100644 --- a/.github/scripts/rusty_v8_bazel.py +++ b/.github/scripts/rusty_v8_bazel.py @@ -4,6 +4,7 @@ import argparse import gzip +import re import shutil import subprocess import sys @@ -107,9 +108,26 @@ def resolved_v8_crate_version() -> str: if package["name"] == "v8" } ) - if len(versions) != 1: + if len(versions) == 1: + return versions[0] + if len(versions) > 1: raise SystemExit(f"expected exactly one resolved v8 version, found: {versions}") - return versions[0] + + module_bazel = (ROOT / "MODULE.bazel").read_text() + matches = sorted( + set( + re.findall( + r'https://static\.crates\.io/crates/v8/v8-([0-9]+\.[0-9]+\.[0-9]+)\.crate', + module_bazel, + ) + ) + ) + if len(matches) != 1: + raise SystemExit( + "expected exactly one pinned v8 crate version in MODULE.bazel, " + f"found: {matches}" + ) + return matches[0] def staged_archive_name(target: str, source_path: Path) -> str: diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index fd49b7f48e9..18d92f84edb 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -166,11 +166,6 @@ jobs: # Keep V8 out of the ordinary Bazel CI path. Only the dedicated # canary and release workflows should build `third_party/v8`. -//third_party/v8:all - # Belt-and-suspenders exclusion for the consumer-side `rusty_v8` - # proof-of-concept targets. - -//codex-rs/v8-poc:v8-poc-rusty-v8 - -//codex-rs/v8-poc:v8-poc-rusty-v8-unit-tests - -//codex-rs/v8-poc:v8-poc-rusty-v8-unit-tests-bin ) if [[ "${RUNNER_OS:-}" != "Windows" ]]; then diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 75d8e99221c..2ee57d74267 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -679,7 +679,6 @@ "cached_0.56.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ahash\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"attributes\"],\"kind\":\"dev\",\"name\":\"async-std\",\"req\":\"^1.6\"},{\"name\":\"async-trait\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"cached_proc_macro\",\"optional\":true,\"req\":\"^0.25.0\"},{\"name\":\"cached_proc_macro_types\",\"optional\":true,\"req\":\"^0.1.1\"},{\"kind\":\"dev\",\"name\":\"copy_dir\",\"req\":\"^0.1.3\"},{\"name\":\"directories\",\"optional\":true,\"req\":\"^6.0\"},{\"default_features\":false,\"name\":\"futures\",\"optional\":true,\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"googletest\",\"req\":\"^0.11.0\"},{\"default_features\":false,\"features\":[\"inline-more\"],\"name\":\"hashbrown\",\"req\":\"^0.15\"},{\"name\":\"once_cell\",\"req\":\"^1\"},{\"name\":\"r2d2\",\"optional\":true,\"req\":\"^0.8\"},{\"features\":[\"r2d2\"],\"name\":\"redis\",\"optional\":true,\"req\":\"^0.32\"},{\"name\":\"rmp-serde\",\"optional\":true,\"req\":\"^1.1\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^3\"},{\"name\":\"sled\",\"optional\":true,\"req\":\"^0.34\"},{\"kind\":\"dev\",\"name\":\"smartstring\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.10.1\"},{\"name\":\"thiserror\",\"req\":\"^2\"},{\"features\":[\"macros\",\"time\",\"sync\",\"parking_lot\"],\"name\":\"tokio\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"web-time\",\"req\":\"^1.1.0\"}],\"features\":{\"ahash\":[\"dep:ahash\",\"hashbrown/default\"],\"async\":[\"futures\",\"tokio\",\"async-trait\"],\"async_tokio_rt_multi_thread\":[\"async\",\"tokio/rt-multi-thread\"],\"default\":[\"proc_macro\",\"ahash\"],\"disk_store\":[\"sled\",\"serde\",\"rmp-serde\",\"directories\"],\"proc_macro\":[\"cached_proc_macro\",\"cached_proc_macro_types\"],\"redis_ahash\":[\"redis_store\",\"redis/ahash\"],\"redis_async_std\":[\"redis_store\",\"async\",\"redis/aio\",\"redis/async-std-comp\",\"redis/tls\",\"redis/async-std-tls-comp\"],\"redis_connection_manager\":[\"redis_store\",\"redis/connection-manager\"],\"redis_store\":[\"redis\",\"r2d2\",\"serde\",\"serde_json\"],\"redis_tokio\":[\"redis_store\",\"async\",\"redis/aio\",\"redis/tokio-comp\",\"redis/tls\",\"redis/tokio-native-tls-comp\"],\"wasm\":[]}}", "cached_proc_macro_0.25.0": "{\"dependencies\":[{\"name\":\"darling\",\"req\":\"^0.20.8\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.49\"},{\"name\":\"quote\",\"req\":\"^1.0.6\"},{\"name\":\"syn\",\"req\":\"^2.0.52\"}],\"features\":{}}", "cached_proc_macro_types_0.1.1": "{\"dependencies\":[],\"features\":{}}", - "calendrical_calculations_0.2.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"core_maths\",\"req\":\"^0.1.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.17\"}],\"features\":{\"logging\":[\"dep:log\"]}}", "cassowary_0.3.0": "{\"dependencies\":[],\"features\":{}}", "castaway_0.2.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1\"},{\"name\":\"rustversion\",\"req\":\"^1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", "cbc_0.1.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"aes\",\"req\":\"^0.8\"},{\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"features\":[\"dev\"],\"kind\":\"dev\",\"name\":\"cipher\",\"req\":\"^0.4.2\"},{\"kind\":\"dev\",\"name\":\"hex-literal\",\"req\":\"^0.3.3\"}],\"features\":{\"alloc\":[\"cipher/alloc\"],\"block-padding\":[\"cipher/block-padding\"],\"default\":[\"block-padding\"],\"std\":[\"cipher/std\",\"alloc\"],\"zeroize\":[\"cipher/zeroize\"]}}", @@ -723,7 +722,6 @@ "core-foundation-sys_0.8.7": "{\"dependencies\":[],\"features\":{\"default\":[\"link\"],\"link\":[],\"mac_os_10_7_support\":[],\"mac_os_10_8_features\":[]}}", "core-foundation_0.10.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"core-foundation-sys\",\"req\":\"^0.8\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[\"link\"],\"link\":[\"core-foundation-sys/link\"],\"mac_os_10_7_support\":[\"core-foundation-sys/mac_os_10_7_support\"],\"mac_os_10_8_features\":[\"core-foundation-sys/mac_os_10_8_features\"],\"with-uuid\":[\"dep:uuid\"]}}", "core-foundation_0.9.4": "{\"dependencies\":[{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"default_features\":false,\"name\":\"core-foundation-sys\",\"req\":\"^0.8.6\"},{\"name\":\"libc\",\"req\":\"^0.2\"},{\"name\":\"uuid\",\"optional\":true,\"req\":\"^0.5\"}],\"features\":{\"default\":[\"link\"],\"link\":[\"core-foundation-sys/link\"],\"mac_os_10_7_support\":[\"core-foundation-sys/mac_os_10_7_support\"],\"mac_os_10_8_features\":[\"core-foundation-sys/mac_os_10_8_features\"],\"with-chrono\":[\"chrono\"],\"with-uuid\":[\"uuid\"]}}", - "core_maths_0.1.1": "{\"dependencies\":[{\"name\":\"libm\",\"req\":\"^0.2\"}],\"features\":{}}", "coreaudio-rs_0.11.3": "{\"dependencies\":[{\"name\":\"bitflags\",\"req\":\"^1.0\"},{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.3\"},{\"default_features\":false,\"name\":\"coreaudio-sys\",\"req\":\"^0.2\"}],\"features\":{\"audio_toolbox\":[\"coreaudio-sys/audio_toolbox\"],\"audio_unit\":[\"coreaudio-sys/audio_unit\"],\"core_audio\":[\"coreaudio-sys/core_audio\"],\"core_midi\":[\"coreaudio-sys/core_midi\"],\"default\":[\"audio_toolbox\",\"audio_unit\",\"core_audio\",\"open_al\",\"core_midi\"],\"open_al\":[\"coreaudio-sys/open_al\"]}}", "coreaudio-sys_0.2.17": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"runtime\"],\"kind\":\"build\",\"name\":\"bindgen\",\"req\":\"^0.72\"}],\"features\":{\"audio_server_plugin\":[],\"audio_toolbox\":[],\"audio_unit\":[],\"core_audio\":[],\"core_midi\":[],\"default\":[\"audio_toolbox\",\"audio_unit\",\"core_audio\",\"audio_server_plugin\",\"open_al\",\"core_midi\"],\"io_kit_audio\":[],\"open_al\":[]}}", "cpal_0.15.3": "{\"dependencies\":[{\"name\":\"alsa\",\"req\":\"^0.9\",\"target\":\"cfg(any(target_os = \\\"linux\\\", target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"netbsd\\\"))\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0\"},{\"name\":\"asio-sys\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"^4.0\"},{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.2\",\"target\":\"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\"))\"},{\"default_features\":false,\"features\":[\"audio_unit\",\"core_audio\",\"audio_toolbox\"],\"name\":\"coreaudio-rs\",\"req\":\"^0.11\",\"target\":\"cfg(target_os = \\\"ios\\\")\"},{\"default_features\":false,\"features\":[\"audio_unit\",\"core_audio\"],\"name\":\"coreaudio-rs\",\"req\":\"^0.11\",\"target\":\"cfg(target_os = \\\"macos\\\")\"},{\"name\":\"dasp_sample\",\"req\":\"^0.11\"},{\"kind\":\"dev\",\"name\":\"hound\",\"req\":\"^3.5\"},{\"name\":\"jack\",\"optional\":true,\"req\":\"^0.11\",\"target\":\"cfg(any(target_os = \\\"linux\\\", target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"netbsd\\\"))\"},{\"name\":\"jni\",\"req\":\"^0.21\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"name\":\"js-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"js-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(any(target_os = \\\"linux\\\", target_os = \\\"dragonfly\\\", target_os = \\\"freebsd\\\", target_os = \\\"netbsd\\\"))\"},{\"name\":\"mach2\",\"req\":\"^0.4\",\"target\":\"cfg(any(target_os = \\\"macos\\\", target_os = \\\"ios\\\"))\"},{\"default_features\":false,\"name\":\"ndk\",\"req\":\"^0.8\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"name\":\"ndk-context\",\"req\":\"^0.1\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"kind\":\"dev\",\"name\":\"ndk-glue\",\"req\":\"^0.7\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"name\":\"num-traits\",\"optional\":true,\"req\":\"^0.2.6\",\"target\":\"cfg(target_os = \\\"windows\\\")\"},{\"features\":[\"java-interface\"],\"name\":\"oboe\",\"req\":\"^0.6\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"kind\":\"dev\",\"name\":\"ringbuf\",\"req\":\"^0.3\"},{\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2.58\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.33\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"features\":[\"AudioContext\",\"AudioContextOptions\",\"AudioBuffer\",\"AudioBufferSourceNode\",\"AudioNode\",\"AudioDestinationNode\",\"Window\",\"AudioContextState\"],\"name\":\"web-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"features\":[\"AudioContext\",\"AudioContextOptions\",\"AudioBuffer\",\"AudioBufferSourceNode\",\"AudioNode\",\"AudioDestinationNode\",\"Window\",\"AudioContextState\"],\"name\":\"web-sys\",\"req\":\"^0.3.35\",\"target\":\"cfg(target_os = \\\"emscripten\\\")\"},{\"features\":[\"Win32_Media_Audio\",\"Win32_Foundation\",\"Win32_Devices_Properties\",\"Win32_Media_KernelStreaming\",\"Win32_System_Com_StructuredStorage\",\"Win32_System_Threading\",\"Win32_Security\",\"Win32_System_SystemServices\",\"Win32_System_Variant\",\"Win32_Media_Multimedia\",\"Win32_UI_Shell_PropertiesSystem\"],\"name\":\"windows\",\"req\":\"^0.54.0\",\"target\":\"cfg(target_os = \\\"windows\\\")\"}],\"features\":{\"asio\":[\"asio-sys\",\"num-traits\"],\"oboe-shared-stdcxx\":[\"oboe/shared-stdcxx\"]}}", @@ -779,9 +777,6 @@ "difflib_0.4.0": "{\"dependencies\":[],\"features\":{}}", "diffy_0.4.2": "{\"dependencies\":[{\"name\":\"nu-ansi-term\",\"req\":\"^0.50\"}],\"features\":{}}", "digest_0.10.7": "{\"dependencies\":[{\"name\":\"blobby\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"block-buffer\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"const-oid\",\"optional\":true,\"req\":\"^0.9\"},{\"name\":\"crypto-common\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"subtle\",\"optional\":true,\"req\":\"^2.4\"}],\"features\":{\"alloc\":[],\"core-api\":[\"block-buffer\"],\"default\":[\"core-api\"],\"dev\":[\"blobby\"],\"mac\":[\"subtle\"],\"oid\":[\"const-oid\"],\"rand_core\":[\"crypto-common/rand_core\"],\"std\":[\"alloc\",\"crypto-common/std\"]}}", - "diplomat-runtime_0.14.0": "{\"dependencies\":[{\"name\":\"jni\",\"optional\":true,\"req\":\"^0.21\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4\"}],\"features\":{\"jvm-callback-support\":[\"dep:jni\"],\"log\":[\"dep:log\"]}}", - "diplomat_0.14.0": "{\"dependencies\":[{\"default_features\":false,\"name\":\"diplomat_core\",\"req\":\"^0.14.0\"},{\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.7.1\"},{\"kind\":\"dev\",\"name\":\"prettyplease\",\"req\":\"^0.2.30\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.27\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2.0\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.2.0\"}],\"features\":{}}", - "diplomat_core_0.14.0": "{\"dependencies\":[{\"name\":\"displaydoc\",\"optional\":true,\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"either\",\"optional\":true,\"req\":\"^1.9.0\"},{\"features\":[\"yaml\"],\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.7.1\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.27\"},{\"name\":\"quote\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"derive\",\"alloc\"],\"name\":\"serde\",\"req\":\"^1.0\"},{\"name\":\"smallvec\",\"req\":\"^1.9.0\"},{\"features\":[\"ident\"],\"name\":\"strck\",\"req\":\"^1.0\"},{\"features\":[\"full\",\"extra-traits\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{\"hir\":[\"either\"]}}", "dirs-next_2.0.0": "{\"dependencies\":[{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"dirs-sys-next\",\"req\":\"^0.1\"}],\"features\":{}}", "dirs-sys-next_0.1.2": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"default_features\":false,\"name\":\"redox_users\",\"req\":\"^0.4.0\",\"target\":\"cfg(target_os = \\\"redox\\\")\"},{\"features\":[\"knownfolders\",\"objbase\",\"shlobj\",\"winbase\",\"winerror\"],\"name\":\"winapi\",\"req\":\"^0.3\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "dirs-sys_0.5.0": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"name\":\"option-ext\",\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"redox_users\",\"req\":\"^0.5\",\"target\":\"cfg(target_os = \\\"redox\\\")\"},{\"features\":[\"Win32_UI_Shell\",\"Win32_Foundation\",\"Win32_Globalization\",\"Win32_System_Com\"],\"name\":\"windows-sys\",\"req\":\">=0.59.0\",\"target\":\"cfg(windows)\"}],\"features\":{}}", @@ -850,7 +845,6 @@ "form_urlencoded_1.2.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"percent-encoding\",\"req\":\"^2.3.0\"}],\"features\":{\"alloc\":[\"percent-encoding/alloc\"],\"default\":[\"std\"],\"std\":[\"alloc\",\"percent-encoding/std\"]}}", "fs_extra_1.3.0": "{\"dependencies\":[],\"features\":{}}", "fsevent-sys_4.1.0": "{\"dependencies\":[{\"name\":\"libc\",\"req\":\"^0.2.68\"}],\"features\":{}}", - "fslock_0.2.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.66\",\"target\":\"cfg(unix)\"},{\"features\":[\"minwindef\",\"minwinbase\",\"winbase\",\"errhandlingapi\",\"winerror\",\"winnt\",\"synchapi\",\"handleapi\",\"fileapi\",\"processthreadsapi\"],\"name\":\"winapi\",\"req\":\"^0.3.8\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"std\"],\"std\":[]}}", "futures-channel_0.3.31": "{\"dependencies\":[{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.31\"},{\"default_features\":false,\"name\":\"futures-sink\",\"optional\":true,\"req\":\"^0.3.31\"}],\"features\":{\"alloc\":[\"futures-core/alloc\"],\"cfg-target-has-atomic\":[],\"default\":[\"std\"],\"sink\":[\"futures-sink\"],\"std\":[\"alloc\",\"futures-core/std\"],\"unstable\":[]}}", "futures-core_0.3.31": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"require-cas\"],\"name\":\"portable-atomic\",\"optional\":true,\"req\":\"^1.3\"}],\"features\":{\"alloc\":[],\"cfg-target-has-atomic\":[],\"default\":[\"std\"],\"std\":[\"alloc\"],\"unstable\":[]}}", "futures-executor_0.3.31": "{\"dependencies\":[{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.31\"},{\"default_features\":false,\"name\":\"futures-task\",\"req\":\"^0.3.31\"},{\"default_features\":false,\"name\":\"futures-util\",\"req\":\"^0.3.31\"},{\"name\":\"num_cpus\",\"optional\":true,\"req\":\"^1.8.0\"}],\"features\":{\"default\":[\"std\"],\"std\":[\"futures-core/std\",\"futures-task/std\",\"futures-util/std\"],\"thread-pool\":[\"std\",\"num_cpus\"]}}", @@ -880,7 +874,6 @@ "git+https://github.com/openai-oss-forks/tungstenite-rs?rev=9200079d3b54a1ff51072e24d81fd354f085156f#9200079d3b54a1ff51072e24d81fd354f085156f_tungstenite": "{\"dependencies\":[{\"name\":\"bytes\"},{\"default_features\":true,\"features\":[],\"name\":\"data-encoding\",\"optional\":true},{\"default_features\":false,\"features\":[\"zlib\"],\"name\":\"flate2\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"headers\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"http\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"httparse\",\"optional\":true},{\"name\":\"log\"},{\"default_features\":true,\"features\":[],\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\"},{\"name\":\"rand\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"rustls\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"rustls-native-certs\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"rustls-pki-types\",\"optional\":true},{\"default_features\":true,\"features\":[],\"name\":\"sha1\",\"optional\":true},{\"name\":\"thiserror\"},{\"default_features\":true,\"features\":[],\"name\":\"url\",\"optional\":true},{\"name\":\"utf-8\"},{\"default_features\":true,\"features\":[],\"name\":\"webpki-roots\",\"optional\":true}],\"features\":{\"__rustls-tls\":[\"rustls\",\"rustls-pki-types\"],\"default\":[\"handshake\"],\"deflate\":[\"headers\",\"flate2\"],\"handshake\":[\"data-encoding\",\"headers\",\"httparse\",\"sha1\"],\"headers\":[\"http\",\"dep:headers\"],\"native-tls\":[\"native-tls-crate\"],\"native-tls-vendored\":[\"native-tls\",\"native-tls-crate/vendored\"],\"proxy\":[\"handshake\"],\"rustls-tls-native-roots\":[\"__rustls-tls\",\"rustls-native-certs\"],\"rustls-tls-webpki-roots\":[\"__rustls-tls\",\"webpki-roots\"],\"url\":[\"dep:url\"]},\"strip_prefix\":\"\"}", "glob_0.3.3": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3\"}],\"features\":{}}", "globset_0.4.18": "{\"dependencies\":[{\"name\":\"aho-corasick\",\"req\":\"^1.1.1\"},{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.3.2\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"bstr\",\"req\":\"^1.6.2\"},{\"kind\":\"dev\",\"name\":\"glob\",\"req\":\"^0.3.1\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.20\"},{\"default_features\":false,\"features\":[\"std\",\"perf\",\"syntax\",\"meta\",\"nfa\",\"hybrid\"],\"name\":\"regex-automata\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"regex-syntax\",\"req\":\"^0.8.0\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.188\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.107\"}],\"features\":{\"arbitrary\":[\"dep:arbitrary\"],\"default\":[\"log\"],\"serde1\":[\"serde\"],\"simd-accel\":[]}}", - "gzip-header_1.0.0": "{\"dependencies\":[{\"name\":\"crc32fast\",\"req\":\"^1.2.1\"}],\"features\":{}}", "h2_0.4.13": "{\"dependencies\":[{\"name\":\"atomic-waker\",\"req\":\"^1.0.0\"},{\"name\":\"bytes\",\"req\":\"^1\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\"},{\"name\":\"fnv\",\"req\":\"^1.0.5\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"futures-sink\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"http\",\"req\":\"^1\"},{\"features\":[\"std\"],\"name\":\"indexmap\",\"req\":\"^2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.4\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.0\"},{\"name\":\"slab\",\"req\":\"^0.4.2\"},{\"features\":[\"io-util\"],\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"rt-multi-thread\",\"macros\",\"sync\",\"net\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tokio-rustls\",\"req\":\"^0.26\"},{\"features\":[\"codec\",\"io\"],\"name\":\"tokio-util\",\"req\":\"^0.7.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"tracing\",\"req\":\"^0.1.35\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.3.2\"},{\"kind\":\"dev\",\"name\":\"webpki-roots\",\"req\":\"^1\"}],\"features\":{\"stream\":[],\"unstable\":[]}}", "half_2.7.1": "{\"dependencies\":[{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.4.1\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.4.1\"},{\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5\"},{\"name\":\"crunchy\",\"req\":\"^0.2.2\",\"target\":\"cfg(target_arch = \\\"spirv\\\")\"},{\"kind\":\"dev\",\"name\":\"crunchy\",\"req\":\"^0.2.2\"},{\"default_features\":false,\"features\":[\"libm\"],\"name\":\"num-traits\",\"optional\":true,\"req\":\"^0.2.16\"},{\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"quickcheck_macros\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"thread_rng\"],\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9.0\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9.0\"},{\"default_features\":false,\"name\":\"rand_distr\",\"optional\":true,\"req\":\"^0.5.0\"},{\"name\":\"rkyv\",\"optional\":true,\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"derive\",\"simd\"],\"name\":\"zerocopy\",\"req\":\"^0.8.26\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"nightly\":[],\"rand_distr\":[\"dep:rand\",\"dep:rand_distr\"],\"std\":[\"alloc\"],\"use-intrinsics\":[],\"zerocopy\":[]}}", "hashbrown_0.12.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"ahash\",\"optional\":true,\"req\":\"^0.7.0\"},{\"name\":\"alloc\",\"optional\":true,\"package\":\"rustc-std-workspace-alloc\",\"req\":\"^1.0.0\"},{\"name\":\"bumpalo\",\"optional\":true,\"req\":\"^3.5.0\"},{\"name\":\"compiler_builtins\",\"optional\":true,\"req\":\"^0.1.2\"},{\"name\":\"core\",\"optional\":true,\"package\":\"rustc-std-workspace-core\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3.1\"},{\"kind\":\"dev\",\"name\":\"fnv\",\"req\":\"^1.0.7\"},{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1.4\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.8.3\"},{\"name\":\"rayon\",\"optional\":true,\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rayon\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.25\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0\"}],\"features\":{\"ahash-compile-time-rng\":[\"ahash/compile-time-rng\"],\"default\":[\"ahash\",\"inline-more\"],\"inline-more\":[],\"nightly\":[],\"raw\":[],\"rustc-dep-of-std\":[\"nightly\",\"core\",\"compiler_builtins\",\"alloc\",\"rustc-internal-api\"],\"rustc-internal-api\":[]}}", @@ -918,8 +911,6 @@ "i18n-embed_0.15.4": "{\"dependencies\":[{\"name\":\"arc-swap\",\"optional\":true,\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.11\"},{\"name\":\"fluent\",\"optional\":true,\"req\":\"^0.16\"},{\"name\":\"fluent-langneg\",\"req\":\"^0.13\"},{\"name\":\"fluent-syntax\",\"optional\":true,\"req\":\"^0.11\"},{\"name\":\"gettext\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"i18n-embed-impl\",\"optional\":true,\"req\":\"^0.8.4\"},{\"name\":\"intl-memoizer\",\"req\":\"^0.5\"},{\"name\":\"locale_config\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"log\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"maplit\",\"req\":\"^1.0\"},{\"name\":\"notify\",\"optional\":true,\"req\":\"^8.0.0\"},{\"name\":\"parking_lot\",\"optional\":true,\"req\":\"^0.12\"},{\"kind\":\"dev\",\"name\":\"pretty_assertions\",\"req\":\"^1.4\"},{\"name\":\"rust-embed\",\"optional\":true,\"req\":\"^8.0\"},{\"kind\":\"dev\",\"name\":\"serial_test\",\"req\":\"^3.0\"},{\"name\":\"thiserror\",\"req\":\"^1.0\"},{\"default_features\":false,\"name\":\"tr\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"unic-langid\",\"req\":\"^0.9\"},{\"name\":\"walkdir\",\"optional\":true,\"req\":\"^2.4\"},{\"features\":[\"Window\",\"Navigator\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\"}],\"features\":{\"autoreload\":[\"notify\"],\"default\":[\"rust-embed\"],\"desktop-requester\":[\"locale_config\"],\"filesystem-assets\":[\"walkdir\"],\"fluent-system\":[\"fluent\",\"fluent-syntax\",\"parking_lot\",\"i18n-embed-impl\",\"i18n-embed-impl/fluent-system\",\"arc-swap\"],\"gettext-system\":[\"tr\",\"tr/gettext\",\"dep:gettext\",\"parking_lot\",\"i18n-embed-impl\",\"i18n-embed-impl/gettext-system\"],\"web-sys-requester\":[\"web-sys\"]}}", "iana-time-zone-haiku_0.1.2": "{\"dependencies\":[{\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.0.79\"}],\"features\":{}}", "iana-time-zone_0.1.65": "{\"dependencies\":[{\"name\":\"android_system_properties\",\"req\":\"^0.1.5\",\"target\":\"cfg(target_os = \\\"android\\\")\"},{\"kind\":\"dev\",\"name\":\"chrono-tz\",\"req\":\"^0.10.1\"},{\"name\":\"core-foundation-sys\",\"req\":\"^0.8.6\",\"target\":\"cfg(target_vendor = \\\"apple\\\")\"},{\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2.1\"},{\"features\":[\"js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.2.1\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"iana-time-zone-haiku\",\"req\":\"^0.1.1\",\"target\":\"cfg(target_os = \\\"haiku\\\")\"},{\"name\":\"js-sys\",\"req\":\"^0.3.66\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"log\",\"req\":\"^0.4.14\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.46\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"name\":\"windows-core\",\"req\":\">=0.56, <=0.62\",\"target\":\"cfg(target_os = \\\"windows\\\")\"}],\"features\":{\"fallback\":[]}}", - "icu_calendar_2.1.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"calendrical_calculations\",\"req\":\"^0.2.3\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"name\":\"icu_calendar_data\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale_core\",\"req\":\"^2.1.1\"},{\"default_features\":false,\"name\":\"icu_provider\",\"req\":\"^2.1.1\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"name\":\"ixdtf\",\"optional\":true,\"req\":\"^0.6.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"derive\",\"alloc\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"kind\":\"dev\",\"name\":\"simple_logger\",\"req\":\"^5.0.0\"},{\"default_features\":false,\"features\":[\"zerovec\"],\"name\":\"tinystr\",\"req\":\"^0.8.0\"},{\"kind\":\"dev\",\"name\":\"ureq\",\"req\":\"^3.0.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"zerovec\",\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"icu_locale_core/alloc\",\"tinystr/alloc\",\"serde?/alloc\"],\"compiled_data\":[\"dep:icu_calendar_data\",\"dep:icu_locale\",\"icu_locale?/compiled_data\",\"icu_provider/baked\"],\"datagen\":[\"serde\",\"dep:databake\",\"zerovec/databake\",\"tinystr/databake\",\"alloc\",\"icu_provider/export\"],\"default\":[\"compiled_data\",\"ixdtf\"],\"ixdtf\":[\"dep:ixdtf\"],\"logging\":[\"calendrical_calculations/logging\"],\"serde\":[\"dep:serde\",\"zerovec/serde\",\"tinystr/serde\",\"icu_provider/serde\"],\"unstable\":[]}}", - "icu_calendar_data_2.1.1": "{\"dependencies\":[],\"features\":{}}", "icu_collections_2.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"kind\":\"dev\",\"name\":\"iai\",\"req\":\"^0.1.1\"},{\"default_features\":false,\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"default_features\":false,\"features\":[\"zerovec\"],\"name\":\"potential_utf\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"features\":[\"parse\"],\"kind\":\"dev\",\"name\":\"toml\",\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"yoke\",\"req\":\"^0.8.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"zerofrom\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"features\":[\"derive\",\"yoke\"],\"name\":\"zerovec\",\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde?/alloc\",\"zerovec/alloc\"],\"databake\":[\"dep:databake\",\"zerovec/databake\"],\"serde\":[\"dep:serde\",\"zerovec/serde\",\"potential_utf/serde\",\"alloc\"]}}", "icu_decimal_2.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"fixed_decimal\",\"req\":\"^0.7.0\"},{\"features\":[\"wasm_js\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3\"},{\"default_features\":false,\"name\":\"icu_decimal_data\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale\",\"optional\":true,\"req\":\"~2.1.1\"},{\"default_features\":false,\"name\":\"icu_locale_core\",\"req\":\"^2.1.1\"},{\"default_features\":false,\"name\":\"icu_provider\",\"req\":\"^2.1.1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand_distr\",\"req\":\"^0.5\"},{\"kind\":\"dev\",\"name\":\"rand_pcg\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"name\":\"writeable\",\"req\":\"^0.6.0\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"zerovec\",\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde?/alloc\",\"zerovec/alloc\"],\"compiled_data\":[\"dep:icu_decimal_data\",\"dep:icu_locale\",\"icu_locale?/compiled_data\",\"icu_provider/baked\"],\"datagen\":[\"serde\",\"dep:databake\",\"zerovec/databake\",\"icu_provider/export\",\"alloc\"],\"default\":[\"compiled_data\"],\"ryu\":[\"fixed_decimal/ryu\"],\"serde\":[\"dep:serde\",\"icu_provider/serde\",\"zerovec/serde\"]}}", "icu_decimal_data_2.1.1": "{\"dependencies\":[],\"features\":{}}", @@ -963,7 +954,6 @@ "itertools_0.13.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"name\":\"either\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"permutohedron\",\"req\":\"^0.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.7\"}],\"features\":{\"default\":[\"use_std\"],\"use_alloc\":[],\"use_std\":[\"use_alloc\",\"either/use_std\"]}}", "itertools_0.14.0": "{\"dependencies\":[{\"features\":[\"html_reports\"],\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.4.0\"},{\"default_features\":false,\"name\":\"either\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"paste\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"permutohedron\",\"req\":\"^0.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.7\"}],\"features\":{\"default\":[\"use_std\"],\"use_alloc\":[],\"use_std\":[\"use_alloc\",\"either/use_std\"]}}", "itoa_1.0.17": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(not(miri))\"},{\"name\":\"no-panic\",\"optional\":true,\"req\":\"^0.1\"}],\"features\":{}}", - "ixdtf_0.6.4": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"serde-json-core\",\"req\":\"^0.6.0\"}],\"features\":{\"default\":[\"duration\"],\"duration\":[]}}", "jiff-static_0.2.18": "{\"dependencies\":[{\"name\":\"jiff-tzdb\",\"optional\":true,\"req\":\"^0.1.4\"},{\"name\":\"proc-macro2\",\"req\":\"^1.0.93\"},{\"name\":\"quote\",\"req\":\"^1.0.38\"},{\"name\":\"syn\",\"req\":\"^2.0.98\"}],\"features\":{\"default\":[],\"perf-inline\":[],\"tz-fat\":[],\"tzdb\":[\"dep:jiff-tzdb\"]}}", "jiff_0.2.18": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.81\"},{\"features\":[\"serde\"],\"kind\":\"dev\",\"name\":\"chrono\",\"req\":\"^0.4.38\"},{\"kind\":\"dev\",\"name\":\"chrono-tz\",\"req\":\"^0.10.0\"},{\"kind\":\"dev\",\"name\":\"hifitime\",\"req\":\"^3.9.0\",\"target\":\"cfg(not(target_family = \\\"wasm\\\"))\"},{\"kind\":\"dev\",\"name\":\"humantime\",\"req\":\"^2.1.0\"},{\"kind\":\"dev\",\"name\":\"insta\",\"req\":\"^1.39.0\"},{\"name\":\"jiff-static\",\"req\":\"=0.2.18\",\"target\":\"cfg(any())\"},{\"name\":\"jiff-static\",\"optional\":true,\"req\":\"^0.2\"},{\"name\":\"jiff-tzdb\",\"optional\":true,\"req\":\"^0.1.5\"},{\"name\":\"jiff-tzdb-platform\",\"optional\":true,\"req\":\"^0.1.3\",\"target\":\"cfg(any(windows, target_family = \\\"wasm\\\"))\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3.50\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.21\"},{\"kind\":\"dev\",\"name\":\"log\",\"req\":\"^0.4.21\"},{\"default_features\":false,\"name\":\"portable-atomic\",\"req\":\"^1.10.0\",\"target\":\"cfg(not(target_has_atomic = \\\"ptr\\\"))\"},{\"default_features\":false,\"name\":\"portable-atomic-util\",\"req\":\"^0.2.4\",\"target\":\"cfg(not(target_has_atomic = \\\"ptr\\\"))\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.203\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.117\"},{\"kind\":\"dev\",\"name\":\"serde_yaml\",\"req\":\"^0.9.34\"},{\"kind\":\"dev\",\"name\":\"tabwriter\",\"req\":\"^1.4.0\"},{\"features\":[\"local-offset\",\"macros\",\"parsing\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3.36\"},{\"kind\":\"dev\",\"name\":\"tzfile\",\"req\":\"^0.1.3\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.5.0\"},{\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2.70\",\"target\":\"cfg(all(any(target_arch = \\\"wasm32\\\", target_arch = \\\"wasm64\\\"), target_os = \\\"unknown\\\"))\"},{\"default_features\":false,\"features\":[\"Win32_Foundation\",\"Win32_System_Time\"],\"name\":\"windows-sys\",\"optional\":true,\"req\":\">=0.52.0, <=0.61\",\"target\":\"cfg(windows)\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\",\"portable-atomic-util/alloc\"],\"default\":[\"std\",\"tz-system\",\"tz-fat\",\"tzdb-bundle-platform\",\"tzdb-zoneinfo\",\"tzdb-concatenated\",\"perf-inline\"],\"js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"],\"logging\":[\"dep:log\"],\"perf-inline\":[],\"serde\":[\"dep:serde_core\"],\"static\":[\"static-tz\",\"jiff-static?/tzdb\"],\"static-tz\":[\"dep:jiff-static\"],\"std\":[\"alloc\",\"log?/std\",\"serde_core?/std\"],\"tz-fat\":[\"jiff-static?/tz-fat\"],\"tz-system\":[\"std\",\"dep:windows-sys\"],\"tzdb-bundle-always\":[\"dep:jiff-tzdb\",\"alloc\"],\"tzdb-bundle-platform\":[\"dep:jiff-tzdb-platform\",\"alloc\"],\"tzdb-concatenated\":[\"std\"],\"tzdb-zoneinfo\":[\"std\"]}}", "jni-sys_0.3.0": "{\"dependencies\":[],\"features\":{}}", @@ -1130,7 +1120,6 @@ "predicates-tree_1.0.12": "{\"dependencies\":[{\"features\":[\"color\"],\"kind\":\"dev\",\"name\":\"predicates\",\"req\":\"^3.1\"},{\"name\":\"predicates-core\",\"req\":\"^1.0\"},{\"name\":\"termtree\",\"req\":\"^0.5.0\"}],\"features\":{}}", "predicates_3.1.3": "{\"dependencies\":[{\"name\":\"anstyle\",\"req\":\"^1.0.0\"},{\"name\":\"difflib\",\"optional\":true,\"req\":\"^0.4\"},{\"name\":\"float-cmp\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"normalize-line-endings\",\"optional\":true,\"req\":\"^0.3.0\"},{\"name\":\"predicates-core\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"predicates-tree\",\"req\":\"^1.0\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.0\"}],\"features\":{\"color\":[],\"default\":[\"diff\",\"regex\",\"float-cmp\",\"normalize-line-endings\",\"color\"],\"diff\":[\"dep:difflib\"],\"unstable\":[]}}", "pretty_assertions_1.4.1": "{\"dependencies\":[{\"name\":\"diff\",\"req\":\"^0.1.12\"},{\"name\":\"yansi\",\"req\":\"^1.0.1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"std\":[],\"unstable\":[]}}", - "prettyplease_0.2.37": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"indoc\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"proc-macro2\",\"req\":\"^1.0.80\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0.35\"},{\"default_features\":false,\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2.0.105\"},{\"default_features\":false,\"features\":[\"clone-impls\",\"extra-traits\",\"parsing\",\"printing\",\"visit-mut\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0.105\"}],\"features\":{\"verbatim\":[\"syn/parsing\"]}}", "proc-macro-crate_3.4.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"proc-macro2\",\"req\":\"^1.0.94\"},{\"kind\":\"dev\",\"name\":\"quote\",\"req\":\"^1.0.39\"},{\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2.0.99\"},{\"default_features\":false,\"features\":[\"parse\"],\"name\":\"toml_edit\",\"req\":\"^0.23.2\"}],\"features\":{}}", "proc-macro-error-attr2_2.0.0": "{\"dependencies\":[{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"}],\"features\":{}}", "proc-macro-error2_2.0.1": "{\"dependencies\":[{\"name\":\"proc-macro-error-attr2\",\"req\":\"=2.0.0\"},{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"default_features\":false,\"name\":\"syn\",\"optional\":true,\"req\":\"^2\"},{\"features\":[\"full\"],\"kind\":\"dev\",\"name\":\"syn\",\"req\":\"^2\"},{\"features\":[\"diff\"],\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.99\"}],\"features\":{\"default\":[\"syn-error\"],\"nightly\":[],\"syn-error\":[\"dep:syn\"]}}", @@ -1192,7 +1181,6 @@ "regex-syntax_0.8.8": "{\"dependencies\":[{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.3.0\"}],\"features\":{\"arbitrary\":[\"dep:arbitrary\"],\"default\":[\"std\",\"unicode\"],\"std\":[],\"unicode\":[\"unicode-age\",\"unicode-bool\",\"unicode-case\",\"unicode-gencat\",\"unicode-perl\",\"unicode-script\",\"unicode-segment\"],\"unicode-age\":[],\"unicode-bool\":[],\"unicode-case\":[],\"unicode-gencat\":[],\"unicode-perl\":[],\"unicode-script\":[],\"unicode-segment\":[]}}", "regex_1.12.3": "{\"dependencies\":[{\"default_features\":false,\"name\":\"aho-corasick\",\"optional\":true,\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.69\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"default_features\":false,\"features\":[\"atty\",\"humantime\",\"termcolor\"],\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.9.3\"},{\"default_features\":false,\"name\":\"memchr\",\"optional\":true,\"req\":\"^2.6.0\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"quickcheck\",\"req\":\"^1.0.3\"},{\"default_features\":false,\"features\":[\"alloc\",\"syntax\",\"meta\",\"nfa-pikevm\"],\"name\":\"regex-automata\",\"req\":\"^0.4.12\"},{\"default_features\":false,\"name\":\"regex-syntax\",\"req\":\"^0.8.5\"},{\"kind\":\"dev\",\"name\":\"regex-test\",\"req\":\"^0.1.0\"}],\"features\":{\"default\":[\"std\",\"perf\",\"unicode\",\"regex-syntax/default\"],\"logging\":[\"aho-corasick?/logging\",\"memchr?/logging\",\"regex-automata/logging\"],\"pattern\":[],\"perf\":[\"perf-cache\",\"perf-dfa\",\"perf-onepass\",\"perf-backtrack\",\"perf-inline\",\"perf-literal\"],\"perf-backtrack\":[\"regex-automata/nfa-backtrack\"],\"perf-cache\":[],\"perf-dfa\":[\"regex-automata/hybrid\"],\"perf-dfa-full\":[\"regex-automata/dfa-build\",\"regex-automata/dfa-search\"],\"perf-inline\":[\"regex-automata/perf-inline\"],\"perf-literal\":[\"dep:aho-corasick\",\"dep:memchr\",\"regex-automata/perf-literal\"],\"perf-onepass\":[\"regex-automata/dfa-onepass\"],\"std\":[\"aho-corasick?/std\",\"memchr?/std\",\"regex-automata/std\",\"regex-syntax/std\"],\"unicode\":[\"unicode-age\",\"unicode-bool\",\"unicode-case\",\"unicode-gencat\",\"unicode-perl\",\"unicode-script\",\"unicode-segment\",\"regex-automata/unicode\",\"regex-syntax/unicode\"],\"unicode-age\":[\"regex-automata/unicode-age\",\"regex-syntax/unicode-age\"],\"unicode-bool\":[\"regex-automata/unicode-bool\",\"regex-syntax/unicode-bool\"],\"unicode-case\":[\"regex-automata/unicode-case\",\"regex-syntax/unicode-case\"],\"unicode-gencat\":[\"regex-automata/unicode-gencat\",\"regex-syntax/unicode-gencat\"],\"unicode-perl\":[\"regex-automata/unicode-perl\",\"regex-automata/unicode-word-boundary\",\"regex-syntax/unicode-perl\"],\"unicode-script\":[\"regex-automata/unicode-script\",\"regex-syntax/unicode-script\"],\"unicode-segment\":[\"regex-automata/unicode-segment\",\"regex-syntax/unicode-segment\"],\"unstable\":[\"pattern\"],\"use_std\":[\"std\"]}}", "reqwest_0.12.28": "{\"dependencies\":[{\"name\":\"base64\",\"req\":\"^0.22\"},{\"kind\":\"dev\",\"name\":\"brotli_crate\",\"package\":\"brotli\",\"req\":\"^8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"bytes\",\"req\":\"^1.2\"},{\"name\":\"cookie_crate\",\"optional\":true,\"package\":\"cookie\",\"req\":\"^0.18.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"cookie_store\",\"optional\":true,\"req\":\"^0.22.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"encoding_rs\",\"optional\":true,\"req\":\"^0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"env_logger\",\"req\":\"^0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"flate2\",\"req\":\"^1.0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"futures-channel\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"futures-core\",\"req\":\"^0.3.28\"},{\"default_features\":false,\"name\":\"futures-util\",\"optional\":true,\"req\":\"^0.3.28\"},{\"default_features\":false,\"features\":[\"std\",\"alloc\"],\"kind\":\"dev\",\"name\":\"futures-util\",\"req\":\"^0.3.28\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h2\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3\",\"optional\":true,\"req\":\"^0.0.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"h3-quinn\",\"optional\":true,\"req\":\"^0.0.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"tokio\"],\"name\":\"hickory-resolver\",\"optional\":true,\"req\":\"^0.25\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http\",\"req\":\"^1.1\"},{\"name\":\"http-body\",\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"http-body-util\",\"req\":\"^0.1.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\"],\"name\":\"hyper\",\"req\":\"^1.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"http2\",\"client\",\"server\"],\"kind\":\"dev\",\"name\":\"hyper\",\"req\":\"^1.1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"http1\",\"tls12\"],\"name\":\"hyper-rustls\",\"optional\":true,\"req\":\"^0.27.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"hyper-tls\",\"optional\":true,\"req\":\"^0.6\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"client\",\"client-legacy\",\"client-proxy\",\"tokio\"],\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"http1\",\"http2\",\"client\",\"client-legacy\",\"server-auto\",\"server-graceful\",\"tokio\"],\"kind\":\"dev\",\"name\":\"hyper-util\",\"req\":\"^0.1.12\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"js-sys\",\"req\":\"^0.3.77\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0\"},{\"name\":\"log\",\"req\":\"^0.4.17\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"mime\",\"optional\":true,\"req\":\"^0.3.16\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"mime_guess\",\"optional\":true,\"req\":\"^2.0\"},{\"name\":\"native-tls-crate\",\"optional\":true,\"package\":\"native-tls\",\"req\":\"^0.2.10\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.0\"},{\"name\":\"once_cell\",\"optional\":true,\"req\":\"^1.18\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"percent-encoding\",\"req\":\"^2.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"pin-project-lite\",\"req\":\"^0.2.11\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"rustls\",\"runtime-tokio\"],\"name\":\"quinn\",\"optional\":true,\"req\":\"^0.11.1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"std\",\"tls12\"],\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.23.4\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"rustls-native-certs\",\"optional\":true,\"req\":\"^0.8.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"features\":[\"std\"],\"name\":\"rustls-pki-types\",\"optional\":true,\"req\":\"^1.9.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde\",\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"serde_json\",\"req\":\"^1.0\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0\"},{\"name\":\"serde_urlencoded\",\"req\":\"^0.7.1\"},{\"features\":[\"futures\"],\"name\":\"sync_wrapper\",\"req\":\"^1.0\"},{\"default_features\":false,\"features\":[\"net\",\"time\"],\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tokio-native-tls\",\"optional\":true,\"req\":\"^0.3.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"tls12\"],\"name\":\"tokio-rustls\",\"optional\":true,\"req\":\"^0.26\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"io\"],\"name\":\"tokio-util\",\"optional\":true,\"req\":\"^0.7.9\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"retry\",\"timeout\",\"util\"],\"name\":\"tower\",\"req\":\"^0.5.2\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"features\":[\"limit\"],\"kind\":\"dev\",\"name\":\"tower\",\"req\":\"^0.5.2\"},{\"default_features\":false,\"features\":[\"follow-redirect\"],\"name\":\"tower-http\",\"req\":\"^0.6.8\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"tower-service\",\"req\":\"^0.3\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"name\":\"url\",\"req\":\"^2.4\"},{\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"serde-serialize\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2.89\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-bindgen-futures\",\"req\":\"^0.4.18\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"wasm-streams\",\"optional\":true,\"req\":\"^0.4\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"features\":[\"AbortController\",\"AbortSignal\",\"Headers\",\"Request\",\"RequestInit\",\"RequestMode\",\"Response\",\"Window\",\"FormData\",\"Blob\",\"BlobPropertyBag\",\"ServiceWorkerGlobalScope\",\"RequestCredentials\",\"File\",\"ReadableStream\",\"RequestCache\"],\"name\":\"web-sys\",\"req\":\"^0.3.28\",\"target\":\"cfg(target_arch = \\\"wasm32\\\")\"},{\"name\":\"webpki-roots\",\"optional\":true,\"req\":\"^1\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"kind\":\"dev\",\"name\":\"zstd_crate\",\"package\":\"zstd\",\"req\":\"^0.13\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"}],\"features\":{\"__rustls\":[\"dep:hyper-rustls\",\"dep:tokio-rustls\",\"dep:rustls\",\"__tls\"],\"__rustls-ring\":[\"hyper-rustls?/ring\",\"tokio-rustls?/ring\",\"rustls?/ring\",\"quinn?/ring\"],\"__tls\":[\"dep:rustls-pki-types\",\"tokio/io-util\"],\"blocking\":[\"dep:futures-channel\",\"futures-channel?/sink\",\"dep:futures-util\",\"futures-util?/io\",\"futures-util?/sink\",\"tokio/sync\"],\"brotli\":[\"tower-http/decompression-br\"],\"charset\":[\"dep:encoding_rs\",\"dep:mime\"],\"cookies\":[\"dep:cookie_crate\",\"dep:cookie_store\"],\"default\":[\"default-tls\",\"charset\",\"http2\",\"system-proxy\"],\"default-tls\":[\"dep:hyper-tls\",\"dep:native-tls-crate\",\"__tls\",\"dep:tokio-native-tls\"],\"deflate\":[\"tower-http/decompression-deflate\"],\"gzip\":[\"tower-http/decompression-gzip\"],\"hickory-dns\":[\"dep:hickory-resolver\",\"dep:once_cell\"],\"http2\":[\"h2\",\"hyper/http2\",\"hyper-util/http2\",\"hyper-rustls?/http2\"],\"http3\":[\"rustls-tls-manual-roots\",\"dep:h3\",\"dep:h3-quinn\",\"dep:quinn\",\"tokio/macros\"],\"json\":[\"dep:serde_json\"],\"macos-system-configuration\":[\"system-proxy\"],\"multipart\":[\"dep:mime_guess\",\"dep:futures-util\"],\"native-tls\":[\"default-tls\"],\"native-tls-alpn\":[\"native-tls\",\"native-tls-crate?/alpn\",\"hyper-tls?/alpn\"],\"native-tls-vendored\":[\"native-tls\",\"native-tls-crate?/vendored\"],\"rustls-tls\":[\"rustls-tls-webpki-roots\"],\"rustls-tls-manual-roots\":[\"rustls-tls-manual-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-manual-roots-no-provider\":[\"__rustls\"],\"rustls-tls-native-roots\":[\"rustls-tls-native-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-native-roots-no-provider\":[\"dep:rustls-native-certs\",\"hyper-rustls?/native-tokio\",\"__rustls\"],\"rustls-tls-no-provider\":[\"rustls-tls-manual-roots-no-provider\"],\"rustls-tls-webpki-roots\":[\"rustls-tls-webpki-roots-no-provider\",\"__rustls-ring\"],\"rustls-tls-webpki-roots-no-provider\":[\"dep:webpki-roots\",\"hyper-rustls?/webpki-tokio\",\"__rustls\"],\"socks\":[],\"stream\":[\"tokio/fs\",\"dep:futures-util\",\"dep:tokio-util\",\"dep:wasm-streams\"],\"system-proxy\":[\"hyper-util/client-proxy-system\"],\"trust-dns\":[],\"zstd\":[\"tower-http/decompression-zstd\"]}}", - "resb_0.1.1": "{\"dependencies\":[{\"name\":\"indexmap\",\"optional\":true,\"req\":\"^2.0.0\"},{\"default_features\":false,\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.17\"},{\"name\":\"nom\",\"optional\":true,\"req\":\"^7.0.0\"},{\"default_features\":false,\"name\":\"potential_utf\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"features\":[\"alloc\"],\"name\":\"serde_core\",\"req\":\"^1.0.220\"}],\"features\":{\"default\":[],\"logging\":[\"dep:log\"],\"serialize\":[\"std\"],\"std\":[],\"text\":[\"dep:indexmap\",\"dep:nom\",\"std\"]}}", "resolv-conf_0.7.6": "{\"dependencies\":[],\"features\":{\"system\":[]}}", "ring_0.17.14": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.2.8\"},{\"default_features\":false,\"name\":\"cfg-if\",\"req\":\"^1.0.0\"},{\"name\":\"getrandom\",\"req\":\"^0.2.10\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.148\",\"target\":\"cfg(all(any(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), all(target_arch = \\\"arm\\\", target_endian = \\\"little\\\")), any(target_os = \\\"android\\\", target_os = \\\"linux\\\")))\"},{\"default_features\":false,\"name\":\"libc\",\"req\":\"^0.2.155\",\"target\":\"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_vendor = \\\"apple\\\", any(target_os = \\\"ios\\\", target_os = \\\"macos\\\", target_os = \\\"tvos\\\", target_os = \\\"visionos\\\", target_os = \\\"watchos\\\")))\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"libc\",\"req\":\"^0.2.148\",\"target\":\"cfg(any(unix, windows, target_os = \\\"wasi\\\"))\"},{\"name\":\"untrusted\",\"req\":\"^0.9\"},{\"default_features\":false,\"features\":[\"std\"],\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3.37\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"unknown\\\"))\"},{\"features\":[\"Win32_Foundation\",\"Win32_System_Threading\"],\"name\":\"windows-sys\",\"req\":\"^0.52\",\"target\":\"cfg(all(all(target_arch = \\\"aarch64\\\", target_endian = \\\"little\\\"), target_os = \\\"windows\\\"))\"}],\"features\":{\"alloc\":[],\"default\":[\"alloc\",\"dev_urandom_fallback\"],\"dev_urandom_fallback\":[],\"less-safe-getrandom-custom-or-rdrand\":[],\"less-safe-getrandom-espidf\":[],\"slow_tests\":[],\"std\":[\"alloc\"],\"test_logging\":[],\"unstable-testing-arm-no-hw\":[],\"unstable-testing-arm-no-neon\":[],\"wasm32_unknown_unknown_js\":[\"getrandom/js\"]}}", "rmcp-macros_0.15.0": "{\"dependencies\":[{\"name\":\"darling\",\"req\":\"^0.23\"},{\"name\":\"proc-macro2\",\"req\":\"^1\"},{\"name\":\"quote\",\"req\":\"^1\"},{\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"features\":[\"full\"],\"name\":\"syn\",\"req\":\"^2\"}],\"features\":{}}", @@ -1304,7 +1292,6 @@ "starlark_syntax_0.13.0": "{\"dependencies\":[{\"name\":\"allocative\",\"req\":\"^0.3.4\"},{\"name\":\"annotate-snippets\",\"req\":\"^0.9.0\"},{\"name\":\"anyhow\",\"req\":\"^1.0.65\"},{\"name\":\"derivative\",\"req\":\"^2.2\"},{\"features\":[\"full\"],\"name\":\"derive_more\",\"req\":\"^1.0.0\"},{\"name\":\"dupe\",\"req\":\"^0.9.0\"},{\"kind\":\"build\",\"name\":\"lalrpop\",\"req\":\"^0.19.7\"},{\"name\":\"lalrpop-util\",\"req\":\"^0.19.7\"},{\"name\":\"logos\",\"req\":\"^0.12\"},{\"name\":\"lsp-types\",\"req\":\"^0.94.1\"},{\"name\":\"memchr\",\"req\":\"^2.4.1\"},{\"name\":\"num-bigint\",\"req\":\"^0.4.3\"},{\"name\":\"num-traits\",\"req\":\"^0.2\"},{\"name\":\"once_cell\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"name\":\"starlark_map\",\"req\":\"^0.13.0\"},{\"name\":\"thiserror\",\"req\":\"^1.0.36\"}],\"features\":{}}", "static_assertions_1.1.0": "{\"dependencies\":[],\"features\":{\"nightly\":[]}}", "stop-words_0.9.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"human_regex\",\"req\":\"^0.3.0\"},{\"kind\":\"build\",\"name\":\"serde_json\",\"req\":\"^1\"}],\"features\":{\"constructed\":[],\"default\":[\"iso\"],\"iso\":[],\"nltk\":[],\"unimplemented\":[]}}", - "strck_1.0.0": "{\"dependencies\":[{\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"smol_str\",\"req\":\"^0.3\"},{\"name\":\"unicode-ident\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"ident\":[\"dep:unicode-ident\"]}}", "streaming-iterator_0.1.9": "{\"dependencies\":[],\"features\":{\"alloc\":[],\"std\":[\"alloc\"]}}", "string_cache_0.8.9": "{\"dependencies\":[{\"default_features\":false,\"name\":\"malloc_size_of\",\"optional\":true,\"req\":\"^0.1\"},{\"name\":\"new_debug_unreachable\",\"req\":\"^1.0.2\"},{\"name\":\"parking_lot\",\"req\":\"^0.12\"},{\"name\":\"phf_shared\",\"req\":\"^0.11\"},{\"name\":\"precomputed-hash\",\"req\":\"^0.1\"},{\"name\":\"serde\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[\"serde_support\"],\"serde_support\":[\"serde\"]}}", "stringprep_0.1.5": "{\"dependencies\":[{\"name\":\"unicode-bidi\",\"req\":\"^0.3\"},{\"name\":\"unicode-normalization\",\"req\":\"^0.1\"},{\"name\":\"unicode-properties\",\"req\":\"^0.1.1\"}],\"features\":{}}", @@ -1329,8 +1316,6 @@ "tagptr_0.2.0": "{\"dependencies\":[],\"features\":{}}", "tar_0.4.44": "{\"dependencies\":[{\"name\":\"filetime\",\"req\":\"^0.2.8\"},{\"name\":\"libc\",\"req\":\"^0.2\",\"target\":\"cfg(unix)\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3\"},{\"name\":\"xattr\",\"optional\":true,\"req\":\"^1.1.3\",\"target\":\"cfg(unix)\"}],\"features\":{\"default\":[\"xattr\"]}}", "tempfile_3.24.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"doc-comment\",\"req\":\"^0.3\"},{\"name\":\"fastrand\",\"req\":\"^2.1.1\"},{\"default_features\":false,\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.0\",\"target\":\"cfg(any(unix, windows, target_os = \\\"wasi\\\"))\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"once_cell\",\"req\":\"^1.19.0\"},{\"features\":[\"fs\"],\"name\":\"rustix\",\"req\":\"^1.1.3\",\"target\":\"cfg(any(unix, target_os = \\\"wasi\\\"))\"},{\"features\":[\"Win32_Storage_FileSystem\",\"Win32_Foundation\"],\"name\":\"windows-sys\",\"req\":\">=0.52, <0.62\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"getrandom\"],\"nightly\":[]}}", - "temporal_capi_0.1.2": "{\"dependencies\":[{\"default_features\":false,\"name\":\"diplomat\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"name\":\"diplomat-runtime\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"features\":[\"unstable\"],\"name\":\"icu_calendar\",\"req\":\"^2.1.0\"},{\"name\":\"icu_locale\",\"req\":\"^2.1.0\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.19\"},{\"default_features\":false,\"name\":\"temporal_rs\",\"req\":\"^0.1.2\"},{\"name\":\"timezone_provider\",\"req\":\"^0.1.2\"},{\"name\":\"writeable\",\"req\":\"^0.6.0\"},{\"name\":\"zoneinfo64\",\"optional\":true,\"req\":\"^0.2.0\"}],\"features\":{\"compiled_data\":[\"temporal_rs/compiled_data\"],\"zoneinfo64\":[\"dep:zoneinfo64\",\"timezone_provider/zoneinfo64\"]}}", - "temporal_rs_0.1.2": "{\"dependencies\":[{\"name\":\"core_maths\",\"req\":\"^0.1.1\"},{\"name\":\"iana-time-zone\",\"optional\":true,\"req\":\"^0.1.64\"},{\"default_features\":false,\"features\":[\"unstable\",\"compiled_data\"],\"name\":\"icu_calendar\",\"req\":\"^2.1.0\"},{\"name\":\"icu_locale\",\"req\":\"^2.1.0\"},{\"features\":[\"duration\"],\"name\":\"ixdtf\",\"req\":\"^0.6.4\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.28\"},{\"default_features\":false,\"name\":\"num-traits\",\"req\":\"^0.2.19\"},{\"name\":\"timezone_provider\",\"req\":\"^0.1.2\"},{\"name\":\"tinystr\",\"req\":\"^0.8.0\"},{\"name\":\"web-time\",\"optional\":true,\"req\":\"^1.1.0\"},{\"name\":\"writeable\",\"req\":\"^0.6.0\"}],\"features\":{\"compiled_data\":[\"tzdb\"],\"default\":[\"sys\"],\"float64_representable_durations\":[],\"log\":[\"dep:log\"],\"std\":[],\"sys\":[\"std\",\"compiled_data\",\"dep:web-time\",\"dep:iana-time-zone\"],\"tzdb\":[\"std\",\"timezone_provider/tzif\"]}}", "term_0.7.0": "{\"dependencies\":[{\"name\":\"dirs-next\",\"req\":\"^2\"},{\"name\":\"rustversion\",\"req\":\"^1\",\"target\":\"cfg(windows)\"},{\"features\":[\"consoleapi\",\"wincon\",\"handleapi\",\"fileapi\"],\"name\":\"winapi\",\"req\":\"^0.3\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[]}}", "termcolor_1.4.1": "{\"dependencies\":[{\"name\":\"winapi-util\",\"req\":\"^0.1.3\",\"target\":\"cfg(windows)\"}],\"features\":{}}", "terminal_size_0.4.3": "{\"dependencies\":[{\"features\":[\"termios\"],\"name\":\"rustix\",\"req\":\"^1.0.1\",\"target\":\"cfg(unix)\"},{\"features\":[\"Win32_Foundation\",\"Win32_System_Console\"],\"name\":\"windows-sys\",\"req\":\"^0.60.0\",\"target\":\"cfg(windows)\"}],\"features\":{}}", @@ -1351,7 +1336,6 @@ "time-core_0.1.8": "{\"dependencies\":[],\"features\":{\"large-dates\":[]}}", "time-macros_0.2.27": "{\"dependencies\":[{\"name\":\"num-conv\",\"req\":\"^0.2.0\"},{\"name\":\"time-core\",\"req\":\"=0.1.8\"}],\"features\":{\"formatting\":[],\"large-dates\":[],\"parsing\":[],\"serde\":[]}}", "time_0.3.47": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8.1\",\"target\":\"cfg(bench)\"},{\"features\":[\"powerfmt\"],\"name\":\"deranged\",\"req\":\"^0.5.2\"},{\"name\":\"itoa\",\"optional\":true,\"req\":\"^1.0.1\"},{\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3.58\",\"target\":\"cfg(all(target_family = \\\"wasm\\\", not(any(target_os = \\\"emscripten\\\", target_os = \\\"wasi\\\"))))\"},{\"name\":\"libc\",\"optional\":true,\"req\":\"^0.2.98\",\"target\":\"cfg(target_family = \\\"unix\\\")\"},{\"name\":\"num-conv\",\"req\":\"^0.2.0\"},{\"kind\":\"dev\",\"name\":\"num-conv\",\"req\":\"^0.2.0\"},{\"name\":\"num_threads\",\"optional\":true,\"req\":\"^0.1.2\",\"target\":\"cfg(target_family = \\\"unix\\\")\"},{\"default_features\":false,\"name\":\"powerfmt\",\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"quickcheck\",\"optional\":true,\"req\":\"^1.0.3\"},{\"kind\":\"dev\",\"name\":\"quickcheck_macros\",\"req\":\"^1.0.0\"},{\"default_features\":false,\"name\":\"rand08\",\"optional\":true,\"package\":\"rand\",\"req\":\"^0.8.4\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rand08\",\"package\":\"rand\",\"req\":\"^0.8.4\"},{\"default_features\":false,\"name\":\"rand09\",\"optional\":true,\"package\":\"rand\",\"req\":\"^0.9.2\"},{\"default_features\":false,\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand09\",\"package\":\"rand\",\"req\":\"^0.9.2\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"rstest\",\"req\":\"^0.26.1\"},{\"kind\":\"dev\",\"name\":\"rstest_reuse\",\"req\":\"^0.7.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.184\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.220\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.68\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.126\"},{\"name\":\"time-core\",\"req\":\"=0.1.8\"},{\"name\":\"time-macros\",\"optional\":true,\"req\":\"=0.2.27\"},{\"kind\":\"dev\",\"name\":\"time-macros\",\"req\":\"=0.2.27\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.102\",\"target\":\"cfg(__ui_tests)\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\"],\"default\":[\"std\"],\"formatting\":[\"dep:itoa\",\"std\",\"time-macros?/formatting\"],\"large-dates\":[\"time-core/large-dates\",\"time-macros?/large-dates\"],\"local-offset\":[\"std\",\"dep:libc\",\"dep:num_threads\"],\"macros\":[\"dep:time-macros\"],\"parsing\":[\"time-macros?/parsing\"],\"quickcheck\":[\"dep:quickcheck\",\"alloc\",\"deranged/quickcheck\"],\"rand\":[\"rand08\",\"rand09\"],\"rand08\":[\"dep:rand08\",\"deranged/rand08\"],\"rand09\":[\"dep:rand09\",\"deranged/rand09\"],\"serde\":[\"dep:serde_core\",\"time-macros?/serde\",\"deranged/serde\"],\"serde-human-readable\":[\"serde\",\"formatting\",\"parsing\"],\"serde-well-known\":[\"serde\",\"formatting\",\"parsing\"],\"std\":[\"alloc\"],\"wasm-bindgen\":[\"dep:js-sys\"]}}", - "timezone_provider_0.1.2": "{\"dependencies\":[{\"name\":\"combine\",\"optional\":true,\"req\":\"^4.6.7\"},{\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"name\":\"jiff-tzdb\",\"optional\":true,\"req\":\"^0.1.4\"},{\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.225\"},{\"name\":\"serde_json\",\"optional\":true,\"req\":\"^1.0.145\"},{\"features\":[\"zerovec\"],\"name\":\"tinystr\",\"req\":\"^0.8.0\"},{\"name\":\"tzif\",\"optional\":true,\"req\":\"^0.4.0\"},{\"features\":[\"derive\"],\"name\":\"yoke\",\"optional\":true,\"req\":\"^0.8.0\"},{\"name\":\"zerotrie\",\"req\":\"^0.2.0\"},{\"features\":[\"derive\",\"alloc\"],\"name\":\"zerovec\",\"req\":\"^0.11.0\"},{\"name\":\"zoneinfo64\",\"optional\":true,\"req\":\"^0.2.0\"},{\"features\":[\"std\"],\"name\":\"zoneinfo_rs\",\"optional\":true,\"req\":\"^0.0.18\"}],\"features\":{\"datagen\":[\"std\",\"dep:serde\",\"dep:databake\",\"dep:yoke\",\"dep:serde_json\",\"tinystr/serde\",\"tinystr/databake\",\"zerotrie/serde\",\"zerotrie/databake\",\"zerovec/serde\",\"zerovec/databake\",\"zerovec/derive\",\"dep:zoneinfo_rs\",\"experimental_tzif\"],\"default\":[],\"experimental_tzif\":[],\"std\":[],\"tzif\":[\"dep:tzif\",\"dep:jiff-tzdb\",\"dep:combine\",\"std\"],\"zoneinfo64\":[\"dep:zoneinfo64\"]}}", "tiny-keccak_2.0.2": "{\"dependencies\":[{\"name\":\"crunchy\",\"req\":\"^0.2.2\"}],\"features\":{\"cshake\":[],\"default\":[],\"fips202\":[\"keccak\",\"shake\",\"sha3\"],\"k12\":[],\"keccak\":[],\"kmac\":[\"cshake\"],\"parallel_hash\":[\"cshake\"],\"sha3\":[],\"shake\":[],\"sp800\":[\"cshake\",\"kmac\",\"tuple_hash\"],\"tuple_hash\":[\"cshake\"]}}", "tiny_http_0.12.0": "{\"dependencies\":[{\"name\":\"ascii\",\"req\":\"^1.0\"},{\"name\":\"chunked_transfer\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"fdlimit\",\"req\":\"^0.1\"},{\"name\":\"httpdate\",\"req\":\"^1.0.2\"},{\"name\":\"log\",\"req\":\"^0.4.4\"},{\"name\":\"openssl\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"rustc-serialize\",\"req\":\"^0.3\"},{\"name\":\"rustls\",\"optional\":true,\"req\":\"^0.20\"},{\"name\":\"rustls-pemfile\",\"optional\":true,\"req\":\"^0.2.1\"},{\"kind\":\"dev\",\"name\":\"sha1\",\"req\":\"^0.6.0\"},{\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1\"}],\"features\":{\"default\":[],\"ssl\":[\"ssl-openssl\"],\"ssl-openssl\":[\"openssl\",\"zeroize\"],\"ssl-rustls\":[\"rustls\",\"rustls-pemfile\",\"zeroize\"]}}", "tinystr_0.8.2": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"bincode\",\"req\":\"^1.3.1\"},{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.5.0\",\"target\":\"cfg(not(target_arch = \\\"wasm32\\\"))\"},{\"default_features\":false,\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2.3\"},{\"default_features\":false,\"features\":[\"use-std\"],\"kind\":\"dev\",\"name\":\"postcard\",\"req\":\"^1.0.3\"},{\"features\":[\"small_rng\"],\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.220\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0.45\"},{\"default_features\":false,\"name\":\"zerovec\",\"optional\":true,\"req\":\"^0.11.3\"}],\"features\":{\"alloc\":[\"serde_core?/alloc\",\"zerovec?/alloc\"],\"databake\":[\"dep:databake\"],\"default\":[\"alloc\"],\"serde\":[\"dep:serde_core\"],\"std\":[],\"zerovec\":[\"dep:zerovec\"]}}", @@ -1427,7 +1411,6 @@ "utf8_iter_1.0.4": "{\"dependencies\":[],\"features\":{}}", "utf8parse_0.2.2": "{\"dependencies\":[],\"features\":{\"default\":[],\"nightly\":[]}}", "uuid_1.20.0": "{\"dependencies\":[{\"name\":\"arbitrary\",\"optional\":true,\"req\":\"^1.1.3\"},{\"default_features\":false,\"name\":\"atomic\",\"optional\":true,\"req\":\"^0.6\"},{\"default_features\":false,\"name\":\"borsh\",\"optional\":true,\"req\":\"^1\"},{\"default_features\":false,\"name\":\"borsh-derive\",\"optional\":true,\"req\":\"^1\"},{\"features\":[\"derive\"],\"name\":\"bytemuck\",\"optional\":true,\"req\":\"^1.20.0\"},{\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\"},{\"default_features\":false,\"name\":\"js-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"), target_feature = \\\"atomics\\\"))\"},{\"default_features\":false,\"name\":\"md-5\",\"optional\":true,\"req\":\"^0.10\"},{\"name\":\"rand\",\"optional\":true,\"req\":\"^0.9\",\"target\":\"cfg(not(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\"))))\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"serde\",\"req\":\"^1.0.221\"},{\"default_features\":false,\"name\":\"serde_core\",\"optional\":true,\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_derive\",\"req\":\"^1.0.221\"},{\"kind\":\"dev\",\"name\":\"serde_json\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"serde_test\",\"req\":\"^1.0.56\"},{\"default_features\":false,\"name\":\"sha1_smol\",\"optional\":true,\"req\":\"^1\"},{\"name\":\"slog\",\"optional\":true,\"req\":\"^2\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.52\"},{\"name\":\"uuid-rng-internal-lib\",\"optional\":true,\"package\":\"uuid-rng-internal\",\"req\":\"^1.20.0\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"default_features\":false,\"features\":[\"msrv\"],\"name\":\"wasm-bindgen\",\"optional\":true,\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen\",\"req\":\"^0.2\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"kind\":\"dev\",\"name\":\"wasm-bindgen-test\",\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", any(target_os = \\\"unknown\\\", target_os = \\\"none\\\")))\"},{\"features\":[\"derive\"],\"name\":\"zerocopy\",\"optional\":true,\"req\":\"^0.8\"}],\"features\":{\"atomic\":[\"dep:atomic\"],\"borsh\":[\"dep:borsh\",\"dep:borsh-derive\"],\"default\":[\"std\"],\"fast-rng\":[\"rng\",\"dep:rand\"],\"js\":[\"dep:wasm-bindgen\",\"dep:js-sys\"],\"macro-diagnostics\":[],\"md5\":[\"dep:md-5\"],\"rng\":[\"dep:getrandom\"],\"rng-getrandom\":[\"rng\",\"dep:getrandom\",\"uuid-rng-internal-lib\",\"uuid-rng-internal-lib/getrandom\"],\"rng-rand\":[\"rng\",\"dep:rand\",\"uuid-rng-internal-lib\",\"uuid-rng-internal-lib/rand\"],\"serde\":[\"dep:serde_core\"],\"sha1\":[\"dep:sha1_smol\"],\"std\":[\"wasm-bindgen?/std\",\"js-sys?/std\"],\"v1\":[\"atomic\"],\"v3\":[\"md5\"],\"v4\":[\"rng\"],\"v5\":[\"sha1\"],\"v6\":[\"atomic\"],\"v7\":[\"rng\"],\"v8\":[]}}", - "v8_146.4.0": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"align-data\",\"req\":\"^0.1.0\"},{\"kind\":\"build\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"kind\":\"dev\",\"name\":\"bindgen\",\"req\":\"^0.72\"},{\"name\":\"bitflags\",\"req\":\"^2.5\"},{\"kind\":\"dev\",\"name\":\"bytes\",\"req\":\"^1\"},{\"kind\":\"build\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"dev\",\"name\":\"fslock\",\"req\":\"^0.2\"},{\"kind\":\"build\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"dev\",\"name\":\"gzip-header\",\"req\":\"^1.0.0\"},{\"kind\":\"build\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"dev\",\"name\":\"home\",\"req\":\"^0\"},{\"kind\":\"build\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"kind\":\"dev\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.8\"},{\"name\":\"paste\",\"req\":\"^1.0\"},{\"kind\":\"dev\",\"name\":\"rustversion\",\"req\":\"^1\"},{\"features\":[\"zoneinfo64\"],\"name\":\"temporal_capi\",\"req\":\"^0.1.2\"},{\"kind\":\"dev\",\"name\":\"trybuild\",\"req\":\"^1.0.96\"},{\"kind\":\"build\",\"name\":\"which\",\"req\":\"^6\"},{\"kind\":\"dev\",\"name\":\"which\",\"req\":\"^6\"}],\"features\":{\"default\":[\"use_custom_libcxx\"],\"use_custom_libcxx\":[],\"v8_enable_pointer_compression\":[],\"v8_enable_sandbox\":[\"v8_enable_pointer_compression\"],\"v8_enable_v8_checks\":[]}}", "valuable_0.1.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3\"},{\"name\":\"valuable-derive\",\"optional\":true,\"req\":\"=0.1.1\"}],\"features\":{\"alloc\":[],\"default\":[\"std\"],\"derive\":[\"valuable-derive\"],\"std\":[\"alloc\"]}}", "vcpkg_0.2.15": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"lazy_static\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"tempdir\",\"req\":\"^0.3.7\"}],\"features\":{}}", "version_check_0.9.5": "{\"dependencies\":[],\"features\":{}}", @@ -1458,7 +1441,6 @@ "webpki-roots_0.26.11": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"name\":\"parent\",\"package\":\"webpki-roots\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"percent-encoding\",\"req\":\"^2.3\"},{\"default_features\":false,\"kind\":\"dev\",\"name\":\"pki-types\",\"package\":\"rustls-pki-types\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"rcgen\",\"req\":\"^0.13\"},{\"kind\":\"dev\",\"name\":\"ring\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"rustls\",\"req\":\"^0.23\"},{\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"webpki\",\"package\":\"rustls-webpki\",\"req\":\"^0.102\"},{\"kind\":\"dev\",\"name\":\"x509-parser\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"yasna\",\"req\":\"^0.5.2\"}],\"features\":{}}", "webpki-roots_1.0.5": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"hex\",\"req\":\"^0.4.3\"},{\"kind\":\"dev\",\"name\":\"percent-encoding\",\"req\":\"^2.3\"},{\"default_features\":false,\"name\":\"pki-types\",\"package\":\"rustls-pki-types\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"rcgen\",\"req\":\"^0.14.3\"},{\"kind\":\"dev\",\"name\":\"ring\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"rustls\",\"req\":\"^0.23\"},{\"features\":[\"macros\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"features\":[\"alloc\"],\"kind\":\"dev\",\"name\":\"webpki\",\"package\":\"rustls-webpki\",\"req\":\"^0.103\"},{\"kind\":\"dev\",\"name\":\"x509-parser\",\"req\":\"^0.17.0\"},{\"kind\":\"dev\",\"name\":\"yasna\",\"req\":\"^0.5.2\"}],\"features\":{}}", "weezl_0.1.12": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.3.1\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"futures\",\"optional\":true,\"req\":\"^0.3.12\"},{\"default_features\":false,\"features\":[\"macros\",\"io-util\",\"net\",\"rt\",\"rt-multi-thread\"],\"kind\":\"dev\",\"name\":\"tokio\",\"req\":\"^1\"},{\"default_features\":false,\"features\":[\"compat\"],\"kind\":\"dev\",\"name\":\"tokio-util\",\"req\":\"^0.6.2\"}],\"features\":{\"alloc\":[],\"async\":[\"futures\",\"std\"],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", - "which_6.0.3": "{\"dependencies\":[{\"name\":\"either\",\"req\":\"^1.9.0\"},{\"name\":\"home\",\"req\":\"^0.5.9\",\"target\":\"cfg(any(windows, unix, target_os = \\\"redox\\\"))\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.10.2\"},{\"default_features\":false,\"features\":[\"fs\",\"std\"],\"name\":\"rustix\",\"req\":\"^0.38.30\",\"target\":\"cfg(any(unix, target_os = \\\"wasi\\\", target_os = \\\"redox\\\"))\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.9.0\"},{\"default_features\":false,\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1.40\"},{\"features\":[\"kernel\"],\"name\":\"winsafe\",\"req\":\"^0.0.19\",\"target\":\"cfg(windows)\"}],\"features\":{\"regex\":[\"dep:regex\"],\"tracing\":[\"dep:tracing\"]}}", "which_8.0.0": "{\"dependencies\":[{\"name\":\"env_home\",\"optional\":true,\"req\":\"^0.1.0\",\"target\":\"cfg(any(windows, unix, target_os = \\\"redox\\\"))\"},{\"name\":\"regex\",\"optional\":true,\"req\":\"^1.10.2\"},{\"default_features\":false,\"features\":[\"fs\",\"std\"],\"name\":\"rustix\",\"optional\":true,\"req\":\"^1.0.5\",\"target\":\"cfg(any(unix, target_os = \\\"wasi\\\", target_os = \\\"redox\\\"))\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.9.0\"},{\"default_features\":false,\"name\":\"tracing\",\"optional\":true,\"req\":\"^0.1.40\"},{\"features\":[\"kernel\"],\"name\":\"winsafe\",\"optional\":true,\"req\":\"^0.0.19\",\"target\":\"cfg(windows)\"}],\"features\":{\"default\":[\"real-sys\"],\"real-sys\":[\"dep:env_home\",\"dep:rustix\",\"dep:winsafe\"],\"regex\":[\"dep:regex\"],\"tracing\":[\"dep:tracing\"]}}", "whoami_1.6.1": "{\"dependencies\":[{\"name\":\"libredox\",\"req\":\"^0.1.1\",\"target\":\"cfg(all(target_os = \\\"redox\\\", not(target_arch = \\\"wasm32\\\")))\"},{\"name\":\"wasite\",\"req\":\"^0.1\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", target_os = \\\"wasi\\\"))\"},{\"features\":[\"Navigator\",\"Document\",\"Window\",\"Location\"],\"name\":\"web-sys\",\"optional\":true,\"req\":\"^0.3\",\"target\":\"cfg(all(target_arch = \\\"wasm32\\\", not(target_os = \\\"wasi\\\"), not(daku)))\"}],\"features\":{\"default\":[\"web\"],\"web\":[\"web-sys\"]}}", "widestring_1.2.1": "{\"dependencies\":[{\"kind\":\"dev\",\"name\":\"debugger_test\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"debugger_test_parser\",\"req\":\"^0.1\"},{\"features\":[\"Win32_System_Diagnostics_Debug\"],\"kind\":\"dev\",\"name\":\"windows-sys\",\"req\":\"^0.59\"}],\"features\":{\"alloc\":[],\"debugger_visualizer\":[\"alloc\"],\"default\":[\"std\"],\"std\":[\"alloc\"]}}", @@ -1565,7 +1547,6 @@ "zerovec_0.11.5": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"databake\",\"optional\":true,\"req\":\"^0.2.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"optional\":true,\"req\":\"^1.0.220\"},{\"default_features\":false,\"features\":[\"xxhash64\"],\"name\":\"twox-hash\",\"optional\":true,\"req\":\"^2.0.0\"},{\"default_features\":false,\"name\":\"yoke\",\"optional\":true,\"req\":\"^0.8.0\"},{\"default_features\":false,\"name\":\"zerofrom\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"zerovec-derive\",\"optional\":true,\"req\":\"^0.11.1\"}],\"features\":{\"alloc\":[\"serde?/alloc\"],\"databake\":[\"dep:databake\"],\"derive\":[\"dep:zerovec-derive\"],\"hashmap\":[\"dep:twox-hash\",\"alloc\"],\"serde\":[\"dep:serde\"],\"std\":[],\"yoke\":[\"dep:yoke\"]}}", "zip_2.4.2": "{\"dependencies\":[{\"name\":\"aes\",\"optional\":true,\"req\":\"^0.8\"},{\"kind\":\"dev\",\"name\":\"anyhow\",\"req\":\"^1.0.95\"},{\"features\":[\"derive\"],\"name\":\"arbitrary\",\"req\":\"^1.4.1\",\"target\":\"cfg(fuzzing)\"},{\"kind\":\"dev\",\"name\":\"bencher\",\"req\":\"^0.1.5\"},{\"name\":\"bzip2\",\"optional\":true,\"req\":\"^0.5.0\"},{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"features\":[\"derive\"],\"kind\":\"dev\",\"name\":\"clap\",\"req\":\"=4.4.18\"},{\"name\":\"constant_time_eq\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"crc32fast\",\"req\":\"^1.4\"},{\"name\":\"crossbeam-utils\",\"req\":\"^0.8.21\",\"target\":\"cfg(any(all(target_arch = \\\"arm\\\", target_pointer_width = \\\"32\\\"), target_arch = \\\"mips\\\", target_arch = \\\"powerpc\\\"))\"},{\"name\":\"deflate64\",\"optional\":true,\"req\":\"^0.1.9\"},{\"default_features\":false,\"name\":\"displaydoc\",\"req\":\"^0.2\"},{\"default_features\":false,\"name\":\"flate2\",\"optional\":true,\"req\":\"^1.0\"},{\"features\":[\"wasm_js\",\"std\"],\"name\":\"getrandom\",\"optional\":true,\"req\":\"^0.3.1\"},{\"features\":[\"wasm_js\",\"std\"],\"kind\":\"dev\",\"name\":\"getrandom\",\"req\":\"^0.3.1\"},{\"features\":[\"reset\"],\"name\":\"hmac\",\"optional\":true,\"req\":\"^0.12\"},{\"name\":\"indexmap\",\"req\":\"^2\"},{\"default_features\":false,\"name\":\"lzma-rs\",\"optional\":true,\"req\":\"^0.3\"},{\"name\":\"memchr\",\"req\":\"^2.7\"},{\"default_features\":false,\"name\":\"nt-time\",\"optional\":true,\"req\":\"^0.10.6\"},{\"name\":\"pbkdf2\",\"optional\":true,\"req\":\"^0.12\"},{\"name\":\"sha1\",\"optional\":true,\"req\":\"^0.10\"},{\"kind\":\"dev\",\"name\":\"tempfile\",\"req\":\"^3.15\"},{\"name\":\"thiserror\",\"req\":\"^2\"},{\"default_features\":false,\"features\":[\"std\"],\"name\":\"time\",\"optional\":true,\"req\":\"^0.3.37\"},{\"default_features\":false,\"features\":[\"formatting\",\"macros\"],\"kind\":\"dev\",\"name\":\"time\",\"req\":\"^0.3.37\"},{\"kind\":\"dev\",\"name\":\"walkdir\",\"req\":\"^2.5\"},{\"name\":\"xz2\",\"optional\":true,\"req\":\"^0.1.7\"},{\"features\":[\"zeroize_derive\"],\"name\":\"zeroize\",\"optional\":true,\"req\":\"^1.8\"},{\"name\":\"zopfli\",\"optional\":true,\"req\":\"^0.8\"},{\"default_features\":false,\"name\":\"zstd\",\"optional\":true,\"req\":\"^0.13\"}],\"features\":{\"_all-features\":[],\"_deflate-any\":[],\"aes-crypto\":[\"aes\",\"constant_time_eq\",\"hmac\",\"pbkdf2\",\"sha1\",\"getrandom\",\"zeroize\"],\"chrono\":[\"chrono/default\"],\"default\":[\"aes-crypto\",\"bzip2\",\"deflate64\",\"deflate\",\"lzma\",\"time\",\"zstd\",\"xz\"],\"deflate\":[\"flate2/rust_backend\",\"deflate-zopfli\",\"deflate-flate2\"],\"deflate-flate2\":[\"_deflate-any\"],\"deflate-miniz\":[\"deflate\",\"deflate-flate2\"],\"deflate-zlib\":[\"flate2/zlib\",\"deflate-flate2\"],\"deflate-zlib-ng\":[\"flate2/zlib-ng\",\"deflate-flate2\"],\"deflate-zopfli\":[\"zopfli\",\"_deflate-any\"],\"lzma\":[\"lzma-rs/stream\"],\"nt-time\":[\"dep:nt-time\"],\"unreserved\":[],\"xz\":[\"dep:xz2\"]}}", "zmij_1.0.19": "{\"dependencies\":[{\"default_features\":false,\"kind\":\"dev\",\"name\":\"criterion\",\"req\":\"^0.8\",\"target\":\"cfg(not(miri))\"},{\"name\":\"no-panic\",\"optional\":true,\"req\":\"^0.1.36\"},{\"kind\":\"dev\",\"name\":\"num-bigint\",\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"num-integer\",\"req\":\"^0.1\"},{\"kind\":\"dev\",\"name\":\"num_cpus\",\"req\":\"^1.8\"},{\"kind\":\"dev\",\"name\":\"opt-level\",\"req\":\"^1\"},{\"kind\":\"dev\",\"name\":\"rand\",\"req\":\"^0.9\"},{\"kind\":\"dev\",\"name\":\"ryu\",\"req\":\"^1\"}],\"features\":{}}", - "zoneinfo64_0.2.1": "{\"dependencies\":[{\"default_features\":false,\"name\":\"calendrical_calculations\",\"req\":\"^0.2.3\"},{\"name\":\"chrono\",\"optional\":true,\"req\":\"^0.4\"},{\"kind\":\"dev\",\"name\":\"chrono-tz\",\"req\":\"^0.10.4\"},{\"default_features\":false,\"name\":\"icu_locale_core\",\"req\":\"^2.1.0\"},{\"kind\":\"dev\",\"name\":\"itertools\",\"req\":\"^0.14.0\"},{\"default_features\":false,\"features\":[\"tzdb-bundle-always\",\"std\"],\"kind\":\"dev\",\"name\":\"jiff\",\"req\":\"^0.2.15\"},{\"default_features\":false,\"name\":\"potential_utf\",\"req\":\"^0.1.3\"},{\"default_features\":false,\"name\":\"resb\",\"req\":\"^0.1.0\"},{\"default_features\":false,\"features\":[\"derive\"],\"name\":\"serde\",\"req\":\"^1.0.220\"}],\"features\":{\"chrono\":[\"dep:chrono\"]}}", "zopfli_0.8.3": "{\"dependencies\":[{\"name\":\"bumpalo\",\"req\":\"^3.19.0\"},{\"default_features\":false,\"name\":\"crc32fast\",\"optional\":true,\"req\":\"^1.5.0\"},{\"name\":\"log\",\"optional\":true,\"req\":\"^0.4.28\"},{\"kind\":\"dev\",\"name\":\"miniz_oxide\",\"req\":\"^0.8.9\"},{\"kind\":\"dev\",\"name\":\"proptest\",\"req\":\"^1.7.0\"},{\"kind\":\"dev\",\"name\":\"proptest-derive\",\"req\":\"^0.6.0\"},{\"default_features\":false,\"name\":\"simd-adler32\",\"optional\":true,\"req\":\"^0.3.7\"}],\"features\":{\"default\":[\"gzip\",\"std\",\"zlib\"],\"gzip\":[\"dep:crc32fast\"],\"nightly\":[\"crc32fast?/nightly\"],\"std\":[\"crc32fast?/std\",\"dep:log\",\"simd-adler32?/std\"],\"zlib\":[\"dep:simd-adler32\"]}}", "zstd-safe_7.2.4": "{\"dependencies\":[{\"default_features\":false,\"name\":\"zstd-sys\",\"req\":\"^2.0.15\"}],\"features\":{\"arrays\":[],\"bindgen\":[\"zstd-sys/bindgen\"],\"debug\":[\"zstd-sys/debug\"],\"default\":[\"legacy\",\"arrays\",\"zdict_builder\"],\"doc-cfg\":[],\"experimental\":[\"zstd-sys/experimental\"],\"fat-lto\":[\"zstd-sys/fat-lto\"],\"legacy\":[\"zstd-sys/legacy\"],\"no_asm\":[\"zstd-sys/no_asm\"],\"pkg-config\":[\"zstd-sys/pkg-config\"],\"seekable\":[\"zstd-sys/seekable\"],\"std\":[\"zstd-sys/std\"],\"thin\":[\"zstd-sys/thin\"],\"thin-lto\":[\"zstd-sys/thin-lto\"],\"zdict_builder\":[\"zstd-sys/zdict_builder\"],\"zstdmt\":[\"zstd-sys/zstdmt\"]}}", "zstd-sys_2.0.16+zstd.1.5.7": "{\"dependencies\":[{\"default_features\":false,\"features\":[\"runtime\"],\"kind\":\"build\",\"name\":\"bindgen\",\"optional\":true,\"req\":\"^0.72\"},{\"features\":[\"parallel\"],\"kind\":\"build\",\"name\":\"cc\",\"req\":\"^1.0.45\"},{\"kind\":\"build\",\"name\":\"pkg-config\",\"req\":\"^0.3.28\"}],\"features\":{\"debug\":[],\"default\":[\"legacy\",\"zdict_builder\",\"bindgen\"],\"experimental\":[],\"fat-lto\":[],\"legacy\":[],\"no_asm\":[],\"no_wasm_shim\":[],\"non-cargo\":[],\"pkg-config\":[],\"seekable\":[],\"std\":[],\"thin\":[],\"thin-lto\":[],\"zdict_builder\":[],\"zstdmt\":[]}}", diff --git a/codex-rs/Cargo.lock b/codex-rs/Cargo.lock index 6b355cec15e..d00aa454562 100644 --- a/codex-rs/Cargo.lock +++ b/codex-rs/Cargo.lock @@ -948,8 +948,6 @@ dependencies = [ "cexpr", "clang-sys", "itertools 0.13.0", - "log", - "prettyplease", "proc-macro2", "quote", "regex", @@ -1153,16 +1151,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" -[[package]] -name = "calendrical_calculations" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a0b39595c6ee54a8d0900204ba4c401d0ab4eb45adaf07178e8d017541529e7" -dependencies = [ - "core_maths", - "displaydoc", -] - [[package]] name = "cassowary" version = "0.3.0" @@ -1593,7 +1581,7 @@ dependencies = [ "thiserror 2.0.18", "tokio", "url", - "which 8.0.0", + "which", "wiremock", "zip", ] @@ -1941,7 +1929,7 @@ dependencies = [ "url", "uuid", "walkdir", - "which 8.0.0", + "which", "wildmatch", "windows-sys 0.52.0", "wiremock", @@ -2175,7 +2163,7 @@ dependencies = [ "serde_json", "tokio", "tracing", - "which 8.0.0", + "which", "wiremock", ] @@ -2415,7 +2403,7 @@ dependencies = [ "tracing", "urlencoding", "webbrowser", - "which 8.0.0", + "which", ] [[package]] @@ -2455,7 +2443,7 @@ dependencies = [ "tree-sitter", "tree-sitter-bash", "url", - "which 8.0.0", + "which", ] [[package]] @@ -2625,7 +2613,7 @@ dependencies = [ "uuid", "vt100", "webbrowser", - "which 8.0.0", + "which", "windows-sys 0.52.0", "winsplit", ] @@ -2716,7 +2704,7 @@ dependencies = [ "uuid", "vt100", "webbrowser", - "which 8.0.0", + "which", "windows-sys 0.52.0", "winsplit", ] @@ -2887,14 +2875,6 @@ dependencies = [ "regex-lite", ] -[[package]] -name = "codex-v8-poc" -version = "0.0.0" -dependencies = [ - "pretty_assertions", - "v8", -] - [[package]] name = "codex-windows-sandbox" version = "0.0.0" @@ -3100,15 +3080,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core_maths" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" -dependencies = [ - "libm", -] - [[package]] name = "core_test_support" version = "0.0.0" @@ -3711,38 +3682,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "diplomat" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9adb46b05e2f53dcf6a7dfc242e4ce9eb60c369b6b6eb10826a01e93167f59c6" -dependencies = [ - "diplomat_core", - "proc-macro2", - "quote", - "syn 2.0.114", -] - -[[package]] -name = "diplomat-runtime" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0569bd3caaf13829da7ee4e83dbf9197a0e1ecd72772da6d08f0b4c9285c8d29" - -[[package]] -name = "diplomat_core" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51731530ed7f2d4495019abc7df3744f53338e69e2863a6a64ae91821c763df1" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "smallvec", - "strck", - "syn 2.0.114", -] - [[package]] name = "dirs" version = "6.0.0" @@ -4349,16 +4288,6 @@ dependencies = [ "libc", ] -[[package]] -name = "fslock" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "futures" version = "0.3.31" @@ -4587,15 +4516,6 @@ dependencies = [ "regex-syntax 0.8.8", ] -[[package]] -name = "gzip-header" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" -dependencies = [ - "crc32fast", -] - [[package]] name = "h2" version = "0.4.13" @@ -5053,28 +4973,6 @@ dependencies = [ "cc", ] -[[package]] -name = "icu_calendar" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6f0e52e009b6b16ba9c0693578796f2dd4aaa59a7f8f920423706714a89ac4e" -dependencies = [ - "calendrical_calculations", - "displaydoc", - "icu_calendar_data", - "icu_locale", - "icu_locale_core", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_calendar_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527f04223b17edfe0bd43baf14a0cb1b017830db65f3950dc00224860a9a446d" - [[package]] name = "icu_collections" version = "2.1.1" @@ -5509,12 +5407,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" -[[package]] -name = "ixdtf" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84de9d95a6d2547d9b77ee3f25fa0ee32e3c3a6484d47a55adebc0439c077992" - [[package]] name = "jiff" version = "0.2.18" @@ -7240,16 +7132,6 @@ dependencies = [ "yansi", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn 2.0.114", -] - [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -8083,16 +7965,6 @@ dependencies = [ "webpki-roots 1.0.5", ] -[[package]] -name = "resb" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a067ab3b5ca3b4dc307d0de9cf75f9f5e6ca9717b192b2f28a36c83e5de9e76" -dependencies = [ - "potential_utf", - "serde_core", -] - [[package]] name = "resolv-conf" version = "0.7.6" @@ -9473,15 +9345,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "strck" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42316e70da376f3d113a68d138a60d8a9883c604fe97942721ec2068dab13a9f" -dependencies = [ - "unicode-ident", -] - [[package]] name = "streaming-iterator" version = "0.1.9" @@ -9726,39 +9589,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "temporal_capi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a151e402c2bdb6a3a2a2f3f225eddaead2e7ce7dd5d3fa2090deb11b17aa4ed8" -dependencies = [ - "diplomat", - "diplomat-runtime", - "icu_calendar", - "icu_locale", - "num-traits", - "temporal_rs", - "timezone_provider", - "writeable", - "zoneinfo64", -] - -[[package]] -name = "temporal_rs" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88afde3bd75d2fc68d77a914bece426aa08aa7649ffd0cdd4a11c3d4d33474d1" -dependencies = [ - "core_maths", - "icu_calendar", - "icu_locale", - "ixdtf", - "num-traits", - "timezone_provider", - "tinystr", - "writeable", -] - [[package]] name = "term" version = "0.7.0" @@ -9966,18 +9796,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "timezone_provider" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9ba0000e9e73862f3e7ca1ff159e2ddf915c9d8bb11e38a7874760f445d993" -dependencies = [ - "tinystr", - "zerotrie", - "zerovec", - "zoneinfo64", -] - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -10777,23 +10595,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "v8" -version = "146.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97bcac5cdc5a195a4813f1855a6bc658f240452aac36caa12fd6c6f16026ab1" -dependencies = [ - "bindgen", - "bitflags 2.10.0", - "fslock", - "gzip-header", - "home", - "miniz_oxide", - "paste", - "temporal_capi", - "which 6.0.3", -] - [[package]] name = "valuable" version = "0.1.1" @@ -11093,18 +10894,6 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" -[[package]] -name = "which" -version = "6.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" -dependencies = [ - "either", - "home", - "rustix 0.38.44", - "winsafe", -] - [[package]] name = "which" version = "8.0.0" @@ -12108,19 +11897,6 @@ version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445" -[[package]] -name = "zoneinfo64" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2e5597efbe7c421da8a7fd396b20b571704e787c21a272eecf35dfe9d386f0" -dependencies = [ - "calendrical_calculations", - "icu_locale_core", - "potential_utf", - "resb", - "serde", -] - [[package]] name = "zopfli" version = "0.8.3" diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 881e4364463..099809f1b32 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -44,7 +44,6 @@ members = [ "otel", "tui", "tui_app_server", - "v8-poc", "utils/absolute-path", "utils/cargo-bin", "utils/git", @@ -136,7 +135,6 @@ codex-test-macros = { path = "test-macros" } codex-terminal-detection = { path = "terminal-detection" } codex-tui = { path = "tui" } codex-tui-app-server = { path = "tui_app_server" } -codex-v8-poc = { path = "v8-poc" } codex-utils-absolute-path = { path = "utils/absolute-path" } codex-utils-approval-presets = { path = "utils/approval-presets" } codex-utils-cache = { path = "utils/cache" } @@ -368,7 +366,6 @@ unwrap_used = "deny" # silence the false positive here instead of deleting a real dependency. [workspace.metadata.cargo-shear] ignored = [ - "codex-v8-poc", "icu_provider", "openssl-sys", "codex-utils-readiness", diff --git a/codex-rs/docs/bazel.md b/codex-rs/docs/bazel.md index 2968229185f..fc7944b14ca 100644 --- a/codex-rs/docs/bazel.md +++ b/codex-rs/docs/bazel.md @@ -46,9 +46,9 @@ One current example is `rusty_v8`: musl workspace builds should consume explicit artifacts through both `RUSTY_V8_ARCHIVE` and `RUSTY_V8_SRC_BINDING_PATH` rather than trying to build V8 from source inside every Bazel action. Those musl artifacts are produced by `.github/workflows/rusty-v8-release.yml` and surfaced to Bazel through `//third_party/v8`. -Keep the archive and binding file aligned to the exact resolved `v8` crate version in -`codex-rs/Cargo.lock`. Non-musl Bazel targets are left to the crate's default build-script -behavior. +Keep the archive and binding file aligned to the exact pinned `v8` crate version used by the +repo. On consumer branches, that should also align with `codex-rs/Cargo.lock`. Non-musl Bazel +targets are left to the crate's default build-script behavior. When you add a new crate or binary: diff --git a/codex-rs/v8-poc/.gitignore b/codex-rs/v8-poc/.gitignore deleted file mode 100644 index 8384df19c70..00000000000 --- a/codex-rs/v8-poc/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target/ -/target-rs/ diff --git a/codex-rs/v8-poc/BUILD.bazel b/codex-rs/v8-poc/BUILD.bazel deleted file mode 100644 index 8b85f1fc6be..00000000000 --- a/codex-rs/v8-poc/BUILD.bazel +++ /dev/null @@ -1,14 +0,0 @@ -load("//:defs.bzl", "codex_rust_crate") - -codex_rust_crate( - name = "v8-poc", - crate_name = "codex_v8_poc", -) - -codex_rust_crate( - name = "v8-poc-rusty-v8", - crate_features = ["rusty_v8"], - crate_name = "codex_v8_poc", - tags = ["manual"], - test_tags = ["manual"], -) diff --git a/codex-rs/v8-poc/Cargo.toml b/codex-rs/v8-poc/Cargo.toml deleted file mode 100644 index 308f6479c18..00000000000 --- a/codex-rs/v8-poc/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "codex-v8-poc" -version.workspace = true -edition.workspace = true -license.workspace = true - -[lib] -name = "codex_v8_poc" -path = "src/lib.rs" - -[features] -default = [] -rusty_v8 = ["dep:v8"] - -[lints] -workspace = true - -[dependencies] -v8 = { workspace = true, optional = true } - -[dev-dependencies] -pretty_assertions = { workspace = true } diff --git a/codex-rs/v8-poc/src/lib.rs b/codex-rs/v8-poc/src/lib.rs deleted file mode 100644 index 980a5e47aba..00000000000 --- a/codex-rs/v8-poc/src/lib.rs +++ /dev/null @@ -1,72 +0,0 @@ -//! Bazel-wired proof-of-concept crate reserved for future V8 experiments. - -/// Returns the Bazel label for this proof-of-concept crate. -#[must_use] -pub fn bazel_target() -> &'static str { - "//codex-rs/v8-poc:v8-poc" -} - -/// Returns the embedded V8 version when the optional `rusty_v8` feature is enabled. -#[cfg(feature = "rusty_v8")] -#[must_use] -pub fn embedded_v8_version() -> &'static str { - v8::V8::get_version() -} - -#[cfg(test)] -mod tests { - use pretty_assertions::assert_eq; - - use super::bazel_target; - #[cfg(feature = "rusty_v8")] - use std::sync::Once; - - #[cfg(feature = "rusty_v8")] - fn initialize_v8() { - static INIT: Once = Once::new(); - - INIT.call_once(|| { - v8::V8::initialize_platform(v8::new_default_platform(0, false).make_shared()); - v8::V8::initialize(); - }); - } - - #[cfg(feature = "rusty_v8")] - fn evaluate_expression(expression: &str) -> String { - initialize_v8(); - - let isolate = &mut v8::Isolate::new(Default::default()); - v8::scope!(let scope, isolate); - - let context = v8::Context::new(scope, Default::default()); - let scope = &mut v8::ContextScope::new(scope, context); - let source = v8::String::new(scope, expression).expect("expression should be valid UTF-8"); - let script = v8::Script::compile(scope, source, None).expect("expression should compile"); - let result = script.run(scope).expect("expression should evaluate"); - - result.to_rust_string_lossy(scope) - } - - #[test] - fn exposes_expected_bazel_target() { - assert_eq!(bazel_target(), "//codex-rs/v8-poc:v8-poc"); - } - - #[cfg(feature = "rusty_v8")] - #[test] - fn exposes_embedded_v8_version() { - assert!(!super::embedded_v8_version().is_empty()); - } - - #[cfg(feature = "rusty_v8")] - #[test] - fn evaluates_integer_addition() { - assert_eq!(evaluate_expression("1 + 2"), "3"); - } - - #[cfg(feature = "rusty_v8")] - #[test] - fn evaluates_string_concatenation() { - assert_eq!(evaluate_expression("'hello ' + 'world'"), "hello world"); - } -} diff --git a/defs.bzl b/defs.bzl index 0b4b54630d8..058c1906a83 100644 --- a/defs.bzl +++ b/defs.bzl @@ -90,7 +90,6 @@ def codex_rust_crate( name, crate_name, crate_features = [], - tags = [], crate_srcs = None, crate_edition = None, proc_macro = False, @@ -121,7 +120,6 @@ def codex_rust_crate( Crates are only compiled in a single configuration across the workspace, i.e. with all features in this list enabled. So use sparingly, and prefer to refactor optional functionality to a separate crate. - tags: Tags applied to the library and binary targets for this crate. crate_srcs: Optional explicit srcs; defaults to `src/**/*.rs`. crate_edition: Rust edition override, if not default. You probably don't want this, it's only here for a single caller. @@ -182,7 +180,6 @@ def codex_rust_crate( edition = crate_edition, rustc_flags = rustc_flags_extra, rustc_env = rustc_env, - tags = tags, visibility = ["//visibility:public"], ) @@ -229,7 +226,6 @@ def codex_rust_crate( edition = crate_edition, rustc_flags = rustc_flags_extra, srcs = native.glob(["src/**/*.rs"]), - tags = tags, visibility = ["//visibility:public"], ) diff --git a/third_party/v8/README.md b/third_party/v8/README.md index 4f6d1366330..430615217ff 100644 --- a/third_party/v8/README.md +++ b/third_party/v8/README.md @@ -1,7 +1,7 @@ # `rusty_v8` Release Artifacts This directory contains the Bazel packaging used to build and stage -target-specific `rusty_v8` release artifacts for `codex-rs/v8-poc`. +target-specific `rusty_v8` release artifacts for Bazel-managed consumers. Current pinned versions: @@ -31,7 +31,8 @@ Consumers in this repo should be wired with explicit paths: - `RUSTY_V8_SRC_BINDING_PATH` Do not mix artifacts across crate versions. The archive and binding must match -the exact resolved `v8` crate version from `codex-rs/Cargo.lock`. +the exact pinned `v8` crate version used by this repo. On consumer branches, +that should also align with `codex-rs/Cargo.lock`. The target-select aliases used by the `v8` build script are: From 2d05604751793517db54b8c3517ed873d2e451d4 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 06:57:56 +0000 Subject: [PATCH 10/19] rename to v8-canary --- .../{v8-poc-canary.yml => v8-canary.yml} | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) rename .github/workflows/{v8-poc-canary.yml => v8-canary.yml} (82%) diff --git a/.github/workflows/v8-poc-canary.yml b/.github/workflows/v8-canary.yml similarity index 82% rename from .github/workflows/v8-poc-canary.yml rename to .github/workflows/v8-canary.yml index 8af0324a36c..262e5f9995c 100644 --- a/.github/workflows/v8-poc-canary.yml +++ b/.github/workflows/v8-canary.yml @@ -1,10 +1,30 @@ -name: v8-poc-canary +name: v8-canary on: - pull_request: {} + pull_request: + paths: + - ".github/scripts/rusty_v8_bazel.py" + - ".github/workflows/rusty-v8-release.yml" + - ".github/workflows/v8-canary.yml" + - "MODULE.bazel" + - "MODULE.bazel.lock" + - "codex-rs/Cargo.toml" + - "patches/BUILD.bazel" + - "patches/v8_*.patch" + - "third_party/v8/**" push: branches: - main + paths: + - ".github/scripts/rusty_v8_bazel.py" + - ".github/workflows/rusty-v8-release.yml" + - ".github/workflows/v8-canary.yml" + - "MODULE.bazel" + - "MODULE.bazel.lock" + - "codex-rs/Cargo.toml" + - "patches/BUILD.bazel" + - "patches/v8_*.patch" + - "third_party/v8/**" workflow_dispatch: concurrency: @@ -119,5 +139,5 @@ jobs: - name: Upload staged musl artifacts uses: actions/upload-artifact@v7 with: - name: v8-poc-canary-${{ needs.metadata.outputs.v8_version }}-${{ matrix.target }} + name: v8-canary-${{ needs.metadata.outputs.v8_version }}-${{ matrix.target }} path: dist/${{ matrix.target }}/* From 93dbe4852cb49fec48bdc0e8e9b1f7bedb7ad56d Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 06:59:45 +0000 Subject: [PATCH 11/19] Remove v8 from cargo.toml for now --- codex-rs/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/codex-rs/Cargo.toml b/codex-rs/Cargo.toml index 099809f1b32..961c4ef9f98 100644 --- a/codex-rs/Cargo.toml +++ b/codex-rs/Cargo.toml @@ -243,7 +243,6 @@ regex-lite = "0.1.8" reqwest = "0.12" rmcp = { version = "0.15.0", default-features = false } runfiles = { git = "https://github.com/dzbarsky/rules_rust", rev = "b56cbaa8465e74127f1ea216f813cd377295ad81" } -v8 = "=146.4.0" rustls = { version = "0.23", default-features = false, features = [ "ring", "std", From 3b573d19c837d19d927d51753ec2de34bf03b7e9 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 07:32:27 +0000 Subject: [PATCH 12/19] Fix build --- .github/workflows/bazel.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 18d92f84edb..b2ef107ca74 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -161,7 +161,9 @@ jobs: --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) --build_metadata=ROLE=CI --build_metadata=VISIBILITY=PUBLIC - -- + ) + + bazel_targets=( //... # Keep V8 out of the ordinary Bazel CI path. Only the dedicated # canary and release workflows should build `third_party/v8`. @@ -187,6 +189,8 @@ jobs: --bazelrc=.github/workflows/ci.bazelrc \ "${bazel_args[@]}" \ "--remote_header=x-buildbuddy-api-key=$BUILDBUDDY_API_KEY" \ + -- \ + "${bazel_targets[@]}" \ 2>&1 | tee "$bazel_console_log" bazel_status=${PIPESTATUS[0]} set -e @@ -214,6 +218,8 @@ jobs: "${bazel_args[@]}" \ --remote_cache= \ --remote_executor= \ + -- \ + "${bazel_targets[@]}" \ 2>&1 | tee "$bazel_console_log" bazel_status=${PIPESTATUS[0]} set -e From e35858585c85884c20c4ddac864a61dc6bbe5fdd Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 17:18:51 +0000 Subject: [PATCH 13/19] Hermetic python + cleanup --- patches/v8_bazel_rules.patch | 5 +- patches/v8_module_deps.patch | 162 +++++++++++++++++++---------------- third_party/v8/BUILD.bazel | 8 +- 3 files changed, 94 insertions(+), 81 deletions(-) diff --git a/patches/v8_bazel_rules.patch b/patches/v8_bazel_rules.patch index 65a77aa5c06..0596ea83967 100644 --- a/patches/v8_bazel_rules.patch +++ b/patches/v8_bazel_rules.patch @@ -121,7 +121,7 @@ index 85f31b7..7314584 100644 ], outs = [ "include/inspector/Debugger.h", -@@ -4426,15 +4426,18 @@ genrule( +@@ -4426,15 +4426,19 @@ genrule( "src/inspector/protocol/Schema.cpp", "src/inspector/protocol/Schema.h", ], @@ -129,7 +129,7 @@ index 85f31b7..7314584 100644 - --inspector_protocol_dir third_party/inspector_protocol \ + cmd = "INSPECTOR_PROTOCOL_DIR=$$(dirname $(execpath third_party/inspector_protocol/code_generator.py)); \ + PYTHONPATH=$$INSPECTOR_PROTOCOL_DIR:external/rules_python++pip+v8_python_deps_311_jinja2/site-packages:external/rules_python++pip+v8_python_deps_311_markupsafe/site-packages:$${PYTHONPATH-} \ -+ python3 $(execpath third_party/inspector_protocol/code_generator.py) --jinja_dir . \ ++ $(execpath @rules_python//python/bin:python) $(execpath third_party/inspector_protocol/code_generator.py) --jinja_dir . \ + --inspector_protocol_dir $$INSPECTOR_PROTOCOL_DIR \ --config $(location :src/inspector/inspector_protocol_config.json) \ --config_value protocol.path=$(location :include/js_protocol.pdl) \ @@ -138,6 +138,7 @@ index 85f31b7..7314584 100644 message = "Generating inspector files", tools = [ - ":code_generator", ++ "@rules_python//python/bin:python", + requirement("jinja2"), + requirement("markupsafe"), ], diff --git a/patches/v8_module_deps.patch b/patches/v8_module_deps.patch index efa3bf9c119..ec4c8afb29e 100644 --- a/patches/v8_module_deps.patch +++ b/patches/v8_module_deps.patch @@ -4,28 +4,71 @@ # module wiring, not V8 source files. diff --git a/orig/v8-14.6.202.11/MODULE.bazel b/mod/v8-14.6.202.11/MODULE.bazel -index 7d7ba53..66e1df5 100644 --- a/orig/v8-14.6.202.11/MODULE.bazel +++ b/mod/v8-14.6.202.11/MODULE.bazel -@@ -8,185 +8,66 @@ bazel_dep(name = "rules_cc", version = "0.2.0") +@@ -8,7 +8,57 @@ bazel_dep(name = "rules_python", version = "1.0.0") bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "abseil-cpp", version = "20250814.0") -bazel_dep(name = "highway", version = "1.2.0") +bazel_dep(name = "rules_license", version = "0.0.4") ++ ++git_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") ++http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") ++ ++http_archive( ++ name = "highway", ++ patch_args = ["-p1"], ++ patches = ["@v8//:bazel/highway.patch"], ++ sha256 = "7e0be78b8318e8bdbf6fa545d2ecb4c90f947df03f7aadc42c1967f019e63343", ++ strip_prefix = "highway-1.2.0", ++ urls = ["https://github.com/google/highway/archive/refs/tags/1.2.0.tar.gz"], ++) ++ ++git_repository( ++ name = "icu", ++ build_file = "@v8//:bazel/BUILD.icu", ++ commit = "a86a32e67b8d1384b33f8fa48c83a6079b86f8cd", ++ patch_cmds = ["find source -name BUILD.bazel | xargs rm"], ++ patch_cmds_win = ["Get-ChildItem -Path source -File -Include BUILD.bazel -Recurse | Remove-Item"], ++ remote = "https://chromium.googlesource.com/chromium/deps/icu.git", ++) ++ ++http_archive( ++ name = "fast_float", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fast_float",\n hdrs = glob(["include/fast_float/*.h"]),\n include_prefix = "third_party/fast_float/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', ++ sha256 = "e14a33089712b681d74d94e2a11362643bd7d769ae8f7e7caefe955f57f7eacd", ++ strip_prefix = "fast_float-8.0.2", ++ urls = ["https://github.com/fastfloat/fast_float/archive/refs/tags/v8.0.2.tar.gz"], ++) ++ ++git_repository( ++ name = "simdutf", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "simdutf",\n srcs = ["simdutf.cpp"],\n hdrs = ["simdutf.h"],\n copts = ["-std=c++20"],\n include_prefix = "third_party/simdutf",\n visibility = ["//visibility:public"],\n)\n', ++ commit = "93b35aec29256f705c97f675fe4623578bd7a395", ++ remote = "https://chromium.googlesource.com/chromium/src/third_party/simdutf", ++) ++ ++git_repository( ++ name = "dragonbox", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "dragonbox",\n hdrs = ["include/dragonbox/dragonbox.h"],\n include_prefix = "third_party/dragonbox/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', ++ commit = "beeeef91cf6fef89a4d4ba5e95d47ca64ccb3a44", ++ remote = "https://chromium.googlesource.com/external/github.com/jk-jeon/dragonbox.git", ++) ++ ++git_repository( ++ name = "fp16", ++ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fp16",\n hdrs = glob(["include/**/*.h"]),\n include_prefix = "third_party/fp16/src/include",\n includes = ["include"],\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', ++ commit = "3d2de1816307bac63c16a297e8c4dc501b4076df", ++ remote = "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git", ++) + + pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") + pip.parse( +@@ -22,171 +72,3 @@ + ) + use_repo(pip, "v8_python_deps") --pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") --pip.parse( -- hub_name = "v8_python_deps", -- python_version = "3.11", -- requirements_lock = "//:bazel/requirements.txt", -- extra_pip_args = [ -- "--require-hashes", -- "--index-url=https://pypi.org/simple", -- ], --) --use_repo(pip, "v8_python_deps") -- -# Define the local LLVM toolchain repository -llvm_toolchain_repository = use_repo_rule("//bazel/toolchain:llvm_repository.bzl", "llvm_toolchain_repository") - @@ -34,9 +77,7 @@ index 7d7ba53..66e1df5 100644 - path = "third_party/llvm-build/Release+Asserts", - config_file_content = """ -load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl", "feature", "flag_group", "flag_set", "tool_path") -+git_repository = use_repo_rule("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") -+http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - +- -def _impl(ctx): - tool_paths = [ - tool_path(name = "gcc", path = "bin/clang"), @@ -142,54 +183,22 @@ index 7d7ba53..66e1df5 100644 - implementation = _impl, - attrs = {}, - provides = [CcToolchainConfigInfo], -+http_archive( -+ name = "highway", -+ patch_cmds = ['python3 - <<\'PY\'\nfrom pathlib import Path\n\nbuild = Path("BUILD")\ntext = build.read_text()\ntext = text.replace(\n \'load("@rules_cc//cc:defs.bzl", "cc_test")\',\n \'load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test")\',\n)\nbuild.write_text(text)\nPY'], -+ sha256 = "7e0be78b8318e8bdbf6fa545d2ecb4c90f947df03f7aadc42c1967f019e63343", -+ strip_prefix = "highway-1.2.0", -+ urls = ["https://github.com/google/highway/archive/refs/tags/1.2.0.tar.gz"], - ) +-) -""", - build_file_content = """ -load(":cc_toolchain_config.bzl", "cc_toolchain_config") - +- -package(default_visibility = ["//visibility:public"]) -+git_repository( -+ name = "icu", -+ build_file = "@v8//:bazel/BUILD.icu", -+ commit = "a86a32e67b8d1384b33f8fa48c83a6079b86f8cd", -+ patch_cmds = ["find source -name BUILD.bazel | xargs rm"], -+ patch_cmds_win = ["Get-ChildItem -Path source -File -Include BUILD.bazel -Recurse | Remove-Item"], -+ remote = "https://chromium.googlesource.com/chromium/deps/icu.git", -+) - +- -filegroup( - name = "all_files", - srcs = glob(["**/*"]), -+http_archive( -+ name = "fast_float", -+ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fast_float",\n hdrs = glob(["include/fast_float/*.h"]),\n include_prefix = "third_party/fast_float/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', -+ sha256 = "e14a33089712b681d74d94e2a11362643bd7d769ae8f7e7caefe955f57f7eacd", -+ strip_prefix = "fast_float-8.0.2", -+ urls = ["https://github.com/fastfloat/fast_float/archive/refs/tags/v8.0.2.tar.gz"], - ) - +-) +- -filegroup(name = "empty") -+git_repository( -+ name = "simdutf", -+ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "simdutf",\n srcs = ["simdutf.cpp"],\n hdrs = ["simdutf.h"],\n copts = ["-std=c++20"],\n include_prefix = "third_party/simdutf",\n visibility = ["//visibility:public"],\n)\n', -+ commit = "93b35aec29256f705c97f675fe4623578bd7a395", -+ remote = "https://chromium.googlesource.com/chromium/src/third_party/simdutf", -+) - +- -cc_toolchain_config(name = "k8_toolchain_config") -+git_repository( -+ name = "dragonbox", -+ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "dragonbox",\n hdrs = ["include/dragonbox/dragonbox.h"],\n include_prefix = "third_party/dragonbox/src/include",\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', -+ commit = "beeeef91cf6fef89a4d4ba5e95d47ca64ccb3a44", -+ remote = "https://chromium.googlesource.com/external/github.com/jk-jeon/dragonbox.git", -+) - +- -cc_toolchain( - name = "k8_toolchain", - all_files = ":all_files", @@ -202,13 +211,8 @@ index 7d7ba53..66e1df5 100644 - supports_param_files = 0, - toolchain_config = ":k8_toolchain_config", - toolchain_identifier = "local_clang", -+git_repository( -+ name = "fp16", -+ build_file_content = 'load("@rules_cc//cc:defs.bzl", "cc_library")\n\ncc_library(\n name = "fp16",\n hdrs = glob(["include/**/*.h"]),\n include_prefix = "third_party/fp16/src/include",\n includes = ["include"],\n strip_include_prefix = "include",\n visibility = ["//visibility:public"],\n)\n', -+ commit = "3d2de1816307bac63c16a297e8c4dc501b4076df", -+ remote = "https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16.git", - ) - +-) +- -toolchain( - name = "cc_toolchain_k8", - exec_compatible_with = [ @@ -218,22 +222,13 @@ index 7d7ba53..66e1df5 100644 - target_compatible_with = [ - "@platforms//cpu:x86_64", - "@platforms//os:linux", -+pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") -+pip.parse( -+ hub_name = "v8_python_deps", -+ python_version = "3.11", -+ requirements_lock = "//:bazel/requirements.txt", -+ extra_pip_args = [ -+ "--require-hashes", -+ "--index-url=https://pypi.org/simple", - ], +- ], - toolchain = ":k8_toolchain", - toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", -) -""", - ) -+use_repo(pip, "v8_python_deps") - +-) +- -register_toolchains("@llvm_toolchain//:cc_toolchain_k8") - -# Define local repository for libc++ from third_party sources @@ -242,3 +237,20 @@ index 7d7ba53..66e1df5 100644 -libcxx_repository( - name = "libcxx", -) +diff --git a/orig/v8-14.6.202.11/bazel/highway.patch b/mod/v8-14.6.202.11/bazel/highway.patch +new file mode 100644 +--- /dev/null ++++ b/mod/v8-14.6.202.11/bazel/highway.patch +@@ -0,0 +1,12 @@ ++diff --git a/BUILD b/BUILD ++--- a/BUILD +++++ b/BUILD ++@@ -2,7 +2,7 @@ ++ load("@bazel_skylib//lib:selects.bzl", "selects") ++ load("@rules_license//rules:license.bzl", "license") ++ ++-load("@rules_cc//cc:defs.bzl", "cc_test") +++load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") ++ # Placeholder#2 for Guitar, do not remove ++ ++ package( diff --git a/third_party/v8/BUILD.bazel b/third_party/v8/BUILD.bazel index b209a4a658d..6002f68b6cc 100644 --- a/third_party/v8/BUILD.bazel +++ b/third_party/v8/BUILD.bazel @@ -1,3 +1,4 @@ +load("@bazel_skylib//rules:copy_file.bzl", "copy_file") load("@rules_cc//cc:cc_static_library.bzl", "cc_static_library") load("@rules_cc//cc:defs.bzl", "cc_library") @@ -26,11 +27,10 @@ genrule( """, ) -genrule( +copy_file( name = "support_h", - srcs = ["@v8_crate_146_4_0//:support_h"], - outs = ["support.h"], - cmd = "cp $(location @v8_crate_146_4_0//:support_h) $@", + src = "@v8_crate_146_4_0//:support_h", + out = "support.h", ) cc_library( From b9f276129e7cc51ad9d51a86c86eab2998be74cd Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 17:28:59 +0000 Subject: [PATCH 14/19] skylib --- MODULE.bazel | 1 + 1 file changed, 1 insertion(+) diff --git a/MODULE.bazel b/MODULE.bazel index 214c7a70c0c..4f865687f07 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,5 +1,6 @@ module(name = "codex") +bazel_dep(name = "bazel_skylib", version = "1.8.2") bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "llvm", version = "0.6.7") From abc472b79a81b88b90a58d9cbc28abbb9537c928 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 18:34:30 +0000 Subject: [PATCH 15/19] Build opt for release --- .github/workflows/rusty-v8-release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml index 465f6c5bd1d..021fe3cbeca 100644 --- a/.github/workflows/rusty-v8-release.yml +++ b/.github/workflows/rusty-v8-release.yml @@ -106,6 +106,8 @@ jobs: bazel_args=( build + -c + opt "--platforms=@llvm//platforms:${PLATFORM}" "${pair_target}" "${extra_targets[@]}" From d0289aa1a207fade6efff0b2374d08edf778d904 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 19:01:14 +0000 Subject: [PATCH 16/19] Release fixes --- .github/workflows/rusty-v8-release.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml index 021fe3cbeca..bff2cfc0388 100644 --- a/.github/workflows/rusty-v8-release.yml +++ b/.github/workflows/rusty-v8-release.yml @@ -161,6 +161,16 @@ jobs: actions: read steps: + - name: Ensure publishing from default branch + if: ${{ github.ref_name != github.event.repository.default_branch }} + env: + DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + shell: bash + run: | + set -euo pipefail + echo "Publishing is only allowed from ${DEFAULT_BRANCH}; current ref is ${GITHUB_REF_NAME}." >&2 + exit 1 + - name: Ensure release tag is new env: GH_TOKEN: ${{ github.token }} @@ -169,7 +179,7 @@ jobs: run: | set -euo pipefail - if gh release view "${RELEASE_TAG}" > /dev/null 2>&1; then + if gh release view "${RELEASE_TAG}" --repo "${GITHUB_REPOSITORY}" > /dev/null 2>&1; then echo "Release tag ${RELEASE_TAG} already exists; musl artifact tags are immutable." >&2 exit 1 fi @@ -184,3 +194,5 @@ jobs: tag_name: ${{ needs.metadata.outputs.release_tag }} name: ${{ needs.metadata.outputs.release_tag }} files: dist/** + # Keep V8 artifact releases out of Codex's normal "latest release" channel. + prerelease: true From 14f4bd9e9b023ec7dd44a10e1b70bdd07bdf8a50 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 20:25:46 +0000 Subject: [PATCH 17/19] Stronger lean in to opt --- .github/scripts/rusty_v8_bazel.py | 69 ++++++++++++++++++++------ .github/workflows/rusty-v8-release.yml | 1 + 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/.github/scripts/rusty_v8_bazel.py b/.github/scripts/rusty_v8_bazel.py index 1d2e417c707..c11e67263e9 100644 --- a/.github/scripts/rusty_v8_bazel.py +++ b/.github/scripts/rusty_v8_bazel.py @@ -50,12 +50,18 @@ def bazel_output_path(path: str) -> Path: return bazel_execroot() / path -def bazel_output_files(platform: str, labels: list[str]) -> list[Path]: +def bazel_output_files( + platform: str, + labels: list[str], + compilation_mode: str = "fastbuild", +) -> list[Path]: expression = "set(" + " ".join(labels) + ")" result = subprocess.run( [ "bazel", "cquery", + "-c", + compilation_mode, f"--platforms=@llvm//platforms:{platform}", "--output=files", expression, @@ -68,11 +74,17 @@ def bazel_output_files(platform: str, labels: list[str]) -> list[Path]: return [bazel_output_path(line.strip()) for line in result.stdout.splitlines() if line.strip()] -def bazel_build(platform: str, labels: list[str]) -> None: +def bazel_build( + platform: str, + labels: list[str], + compilation_mode: str = "fastbuild", +) -> None: subprocess.run( [ "bazel", "build", + "-c", + compilation_mode, f"--platforms=@llvm//platforms:{platform}", *labels, ], @@ -81,13 +93,17 @@ def bazel_build(platform: str, labels: list[str]) -> None: ) -def ensure_bazel_output_files(platform: str, labels: list[str]) -> list[Path]: - outputs = bazel_output_files(platform, labels) +def ensure_bazel_output_files( + platform: str, + labels: list[str], + compilation_mode: str = "fastbuild", +) -> list[Path]: + outputs = bazel_output_files(platform, labels, compilation_mode) if all(path.exists() for path in outputs): return outputs - bazel_build(platform, labels) - outputs = bazel_output_files(platform, labels) + bazel_build(platform, labels, compilation_mode) + outputs = bazel_output_files(platform, labels, compilation_mode) missing = [str(path) for path in outputs if not path.exists()] if missing: raise SystemExit(f"missing built outputs for {labels}: {missing}") @@ -140,18 +156,26 @@ def is_musl_archive_target(target: str, source_path: Path) -> bool: return target.endswith("-unknown-linux-musl") and source_path.suffix == ".a" -def single_bazel_output_file(platform: str, label: str) -> Path: - outputs = ensure_bazel_output_files(platform, [label]) +def single_bazel_output_file( + platform: str, + label: str, + compilation_mode: str = "fastbuild", +) -> Path: + outputs = ensure_bazel_output_files(platform, [label], compilation_mode) if len(outputs) != 1: raise SystemExit(f"expected exactly one output for {label}, found {outputs}") return outputs[0] -def merged_musl_archive(platform: str, lib_path: Path) -> Path: - llvm_ar = single_bazel_output_file(platform, LLVM_AR_LABEL) - llvm_ranlib = single_bazel_output_file(platform, LLVM_RANLIB_LABEL) +def merged_musl_archive( + platform: str, + lib_path: Path, + compilation_mode: str = "fastbuild", +) -> Path: + llvm_ar = single_bazel_output_file(platform, LLVM_AR_LABEL, compilation_mode) + llvm_ranlib = single_bazel_output_file(platform, LLVM_RANLIB_LABEL, compilation_mode) runtime_archives = [ - single_bazel_output_file(platform, label) + single_bazel_output_file(platform, label, compilation_mode) for label in MUSL_RUNTIME_ARCHIVE_LABELS ] @@ -177,8 +201,17 @@ def merged_musl_archive(platform: str, lib_path: Path) -> Path: return merged_archive -def stage_release_pair(platform: str, target: str, output_dir: Path) -> None: - outputs = ensure_bazel_output_files(platform, [release_pair_label(target)]) +def stage_release_pair( + platform: str, + target: str, + output_dir: Path, + compilation_mode: str = "fastbuild", +) -> None: + outputs = ensure_bazel_output_files( + platform, + [release_pair_label(target)], + compilation_mode, + ) try: lib_path = next(path for path in outputs if path.suffix in {".a", ".lib"}) @@ -194,7 +227,7 @@ def stage_release_pair(platform: str, target: str, output_dir: Path) -> None: staged_library = output_dir / staged_archive_name(target, lib_path) staged_binding = output_dir / f"src_binding_release_{target}.rs" source_archive = ( - merged_musl_archive(platform, lib_path) + merged_musl_archive(platform, lib_path, compilation_mode) if is_musl_archive_target(target, lib_path) else lib_path ) @@ -223,6 +256,11 @@ def parse_args() -> argparse.Namespace: stage_release_pair_parser.add_argument("--platform", required=True) stage_release_pair_parser.add_argument("--target", required=True) stage_release_pair_parser.add_argument("--output-dir", required=True) + stage_release_pair_parser.add_argument( + "--compilation-mode", + default="fastbuild", + choices=["fastbuild", "opt", "dbg"], + ) subparsers.add_parser("resolved-v8-crate-version") @@ -236,6 +274,7 @@ def main() -> int: platform=args.platform, target=args.target, output_dir=Path(args.output_dir), + compilation_mode=args.compilation_mode, ) return 0 if args.command == "resolved-v8-crate-version": diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml index bff2cfc0388..97b8cdf09fa 100644 --- a/.github/workflows/rusty-v8-release.yml +++ b/.github/workflows/rusty-v8-release.yml @@ -142,6 +142,7 @@ jobs: python3 .github/scripts/rusty_v8_bazel.py stage-release-pair \ --platform "${PLATFORM}" \ --target "${TARGET}" \ + --compilation-mode opt \ --output-dir "dist/${TARGET}" - name: Upload staged musl artifacts From f92d13094c3819239c1c182419ebaca489464825 Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 22:55:40 +0000 Subject: [PATCH 18/19] Address PR feedback Drop doc comment. Assume buildbuddy always and common bazelci --- .github/workflows/rusty-v8-release.yml | 21 +++++---------------- .github/workflows/v8-canary.yml | 21 +++++---------------- .github/workflows/v8-ci.bazelrc | 5 +++++ codex-rs/docs/bazel.md | 8 -------- 4 files changed, 15 insertions(+), 40 deletions(-) create mode 100644 .github/workflows/v8-ci.bazelrc diff --git a/.github/workflows/rusty-v8-release.yml b/.github/workflows/rusty-v8-release.yml index 97b8cdf09fa..bb191b88cbd 100644 --- a/.github/workflows/rusty-v8-release.yml +++ b/.github/workflows/rusty-v8-release.yml @@ -111,25 +111,14 @@ jobs: "--platforms=@llvm//platforms:${PLATFORM}" "${pair_target}" "${extra_targets[@]}" - --build_metadata=REPO_URL=https://github.com/${GITHUB_REPOSITORY}.git --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) - --build_metadata=ROLE=CI - --build_metadata=VISIBILITY=PUBLIC ) - if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then - bazel \ - --noexperimental_remote_repo_contents_cache \ - --bazelrc=.github/workflows/ci.bazelrc \ - "${bazel_args[@]}" \ - "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" - else - bazel \ - --noexperimental_remote_repo_contents_cache \ - "${bazel_args[@]}" \ - --remote_cache= \ - --remote_executor= - fi + bazel \ + --noexperimental_remote_repo_contents_cache \ + --bazelrc=.github/workflows/v8-ci.bazelrc \ + "${bazel_args[@]}" \ + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" - name: Stage release pair env: diff --git a/.github/workflows/v8-canary.yml b/.github/workflows/v8-canary.yml index 262e5f9995c..213c6a7b608 100644 --- a/.github/workflows/v8-canary.yml +++ b/.github/workflows/v8-canary.yml @@ -103,25 +103,14 @@ jobs: "--platforms=@llvm//platforms:${PLATFORM}" "${pair_target}" "${extra_targets[@]}" - --build_metadata=REPO_URL=https://github.com/${GITHUB_REPOSITORY}.git --build_metadata=COMMIT_SHA=$(git rev-parse HEAD) - --build_metadata=ROLE=CI - --build_metadata=VISIBILITY=PUBLIC ) - if [[ -n "${BUILDBUDDY_API_KEY:-}" ]]; then - bazel \ - --noexperimental_remote_repo_contents_cache \ - --bazelrc=.github/workflows/ci.bazelrc \ - "${bazel_args[@]}" \ - "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" - else - bazel \ - --noexperimental_remote_repo_contents_cache \ - "${bazel_args[@]}" \ - --remote_cache= \ - --remote_executor= - fi + bazel \ + --noexperimental_remote_repo_contents_cache \ + --bazelrc=.github/workflows/v8-ci.bazelrc \ + "${bazel_args[@]}" \ + "--remote_header=x-buildbuddy-api-key=${BUILDBUDDY_API_KEY}" - name: Stage release pair env: diff --git a/.github/workflows/v8-ci.bazelrc b/.github/workflows/v8-ci.bazelrc new file mode 100644 index 00000000000..df1b4bec3dc --- /dev/null +++ b/.github/workflows/v8-ci.bazelrc @@ -0,0 +1,5 @@ +import %workspace%/.github/workflows/ci.bazelrc + +common --build_metadata=REPO_URL=https://github.com/openai/codex.git +common --build_metadata=ROLE=CI +common --build_metadata=VISIBILITY=PUBLIC diff --git a/codex-rs/docs/bazel.md b/codex-rs/docs/bazel.md index fc7944b14ca..a124688a24c 100644 --- a/codex-rs/docs/bazel.md +++ b/codex-rs/docs/bazel.md @@ -42,14 +42,6 @@ In some cases, an upstream crate may need a patch or a `crate.annotation` in `.. to have it build in Bazel's sandbox or make it cross-compilation-friendly. If you see issues, feel free to ping zbarsky or mbolin. -One current example is `rusty_v8`: musl workspace builds should consume explicit, version-aligned -artifacts through both `RUSTY_V8_ARCHIVE` and `RUSTY_V8_SRC_BINDING_PATH` rather than trying to -build V8 from source inside every Bazel action. Those musl artifacts are produced by -`.github/workflows/rusty-v8-release.yml` and surfaced to Bazel through `//third_party/v8`. -Keep the archive and binding file aligned to the exact pinned `v8` crate version used by the -repo. On consumer branches, that should also align with `codex-rs/Cargo.lock`. Non-musl Bazel -targets are left to the crate's default build-script behavior. - When you add a new crate or binary: 1. Add it to the Cargo workspace as usual. From cef0a87eb78aac31eee5a1debfef087503e6f6db Mon Sep 17 00:00:00 2001 From: Channing Conger Date: Thu, 19 Mar 2026 23:02:42 +0000 Subject: [PATCH 19/19] Drop patch to prebuilt v8 --- MODULE.bazel | 17 --- patches/BUILD.bazel | 1 - patches/v8_custom_archive_out_dir.patch | 141 ------------------------ third_party/v8/BUILD.bazel | 34 ------ third_party/v8/README.md | 13 +-- 5 files changed, 1 insertion(+), 205 deletions(-) delete mode 100644 patches/v8_custom_archive_out_dir.patch diff --git a/MODULE.bazel b/MODULE.bazel index 4f865687f07..f6f0fd09066 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -135,23 +135,6 @@ crate.annotation( http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -crate.annotation( - build_script_data = [ - "//third_party/v8:rusty_v8_archive_for_target", - "//third_party/v8:rusty_v8_binding_for_target", - ], - build_script_env = { - "RUSTY_V8_ARCHIVE": "$(execpath //third_party/v8:rusty_v8_archive_for_target)", - "RUSTY_V8_SRC_BINDING_PATH": "$(execpath //third_party/v8:rusty_v8_binding_for_target)", - }, - crate = "v8", - gen_build_script = "on", - patch_args = ["-p1"], - patches = [ - "//patches:v8_custom_archive_out_dir.patch", - ], -) - llvm = use_extension("@llvm//extensions:llvm.bzl", "llvm") use_repo(llvm, "llvm-project") diff --git a/patches/BUILD.bazel b/patches/BUILD.bazel index 4fc47c94133..339c54a6576 100644 --- a/patches/BUILD.bazel +++ b/patches/BUILD.bazel @@ -1,7 +1,6 @@ exports_files([ "aws-lc-sys_memcmp_check.patch", "v8_bazel_rules.patch", - "v8_custom_archive_out_dir.patch", "v8_module_deps.patch", "v8_source_portability.patch", "windows-link.patch", diff --git a/patches/v8_custom_archive_out_dir.patch b/patches/v8_custom_archive_out_dir.patch deleted file mode 100644 index e5b2750849e..00000000000 --- a/patches/v8_custom_archive_out_dir.patch +++ /dev/null @@ -1,141 +0,0 @@ -# What: teach the Rust v8 crate build script to consume Bazel-provided prebuilt -# archive and binding paths, including runfiles path resolution. -# Scope: build.rs only; affects prebuilt artifact discovery and link setup, not -# V8 engine source or runtime behavior. - ---- a/build.rs -+++ b/build.rs -@@ -550,8 +550,83 @@ - } - } - --fn static_lib_url() -> String { -+fn resolve_custom_path(path: String) -> String { -+ let path_buf = PathBuf::from(&path); -+ if path_buf.is_absolute() || path_buf.exists() { -+ return path; -+ } -+ -+ let mut candidate_roots = Vec::new(); -+ if let Ok(current_dir) = env::current_dir() { -+ candidate_roots.push(current_dir); -+ } -+ if let Ok(cargo_manifest_dir) = env::var("CARGO_MANIFEST_DIR") { -+ candidate_roots.push(PathBuf::from(cargo_manifest_dir)); -+ } -+ -+ for root in candidate_roots { -+ for ancestor in root.ancestors() { -+ let candidate = ancestor.join(&path); -+ if candidate.exists() { -+ return candidate.to_string_lossy().into_owned(); -+ } -+ } -+ } -+ -+ if let Ok(current_exe) = env::current_exe() { -+ if let Some(exe_name) = current_exe.file_name().and_then(|name| name.to_str()) -+ { -+ let runfiles_dir = -+ current_exe.with_file_name(format!("{exe_name}.runfiles")); -+ for base in [runfiles_dir.join("_main"), runfiles_dir] { -+ let candidate = base.join(&path); -+ if candidate.exists() { -+ return candidate.to_string_lossy().into_owned(); -+ } -+ } -+ } -+ } -+ -+ if let Ok(runfiles_dir) = env::var("RUNFILES_DIR") { -+ let candidate = PathBuf::from(runfiles_dir).join(&path); -+ if candidate.exists() { -+ return candidate.to_string_lossy().into_owned(); -+ } -+ } -+ -+ if let Ok(runfiles_manifest_file) = env::var("RUNFILES_MANIFEST_FILE") { -+ if let Ok(runfiles_manifest) = fs::read_to_string(runfiles_manifest_file) { -+ for line in runfiles_manifest.lines() { -+ if let Some((short_path, real_path)) = line.split_once(' ') { -+ if short_path == path { -+ return real_path.to_owned(); -+ } -+ } -+ } -+ } -+ } -+ -+ path -+} -+ -+fn custom_archive() -> Option { - if let Ok(custom_archive) = env::var("RUSTY_V8_ARCHIVE") { -+ return Some(resolve_custom_path(custom_archive)); -+ } -+ -+ None -+} -+ -+fn custom_src_binding_path() -> Option { -+ if let Ok(binding) = env::var("RUSTY_V8_SRC_BINDING_PATH") { -+ return Some(resolve_custom_path(binding)); -+ } -+ -+ None -+} -+ -+fn static_lib_url() -> String { -+ if let Some(custom_archive) = custom_archive() { - return custom_archive; - } - let default_base = "https://github.com/denoland/rusty_v8/releases/download"; -@@ -578,6 +653,16 @@ - } - - fn static_lib_dir() -> PathBuf { -+ if custom_archive().is_some() { -+ return PathBuf::from( -+ env::var_os("OUT_DIR").expect( -+ "The 'OUT_DIR' environment is not set (it should be something like \ -+ 'target/debug/rusty_v8-{hash}').", -+ ), -+ ) -+ .join("gn_out") -+ .join("obj"); -+ } - build_dir().join("gn_out").join("obj") - } - -@@ -793,8 +878,14 @@ - - fn print_link_flags() { - println!("cargo:rustc-link-lib=static=rusty_v8"); -+ let target = env::var("TARGET").unwrap(); - let should_dyn_link_libcxx = env::var("CARGO_FEATURE_USE_CUSTOM_LIBCXX") - .is_err() -+ || (custom_archive().is_some() -+ && (target.contains("apple") -+ || target.contains("freebsd") -+ || target.contains("openbsd") -+ || target.contains("android"))) - || env::var("GN_ARGS").is_ok_and(|gn_args| { - gn_args - .split_whitespace() -@@ -808,7 +899,6 @@ - println!("cargo:rustc-link-lib=dylib={stdlib}"); - } - } else { -- let target = env::var("TARGET").unwrap(); - if target.contains("msvc") { - // nothing to link to - } else if target.contains("apple") -@@ -843,7 +933,7 @@ - } - - fn print_prebuilt_src_binding_path() { -- if let Ok(binding) = env::var("RUSTY_V8_SRC_BINDING_PATH") { -+ if let Some(binding) = custom_src_binding_path() { - println!("cargo:rustc-env=RUSTY_V8_SRC_BINDING_PATH={binding}"); - return; - } diff --git a/third_party/v8/BUILD.bazel b/third_party/v8/BUILD.bazel index 6002f68b6cc..cfdbabf4685 100644 --- a/third_party/v8/BUILD.bazel +++ b/third_party/v8/BUILD.bazel @@ -239,37 +239,3 @@ filegroup( ":src_binding_release_aarch64_pc_windows_msvc", ], ) - -alias( - name = "rusty_v8_archive_for_target", - actual = select({ - "@rules_rs//rs/experimental/platforms/config:aarch64-apple-darwin": ":v8_146_4_0_aarch64_apple_darwin", - "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-gnullvm": ":v8_146_4_0_aarch64_pc_windows_gnullvm", - "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-msvc": ":v8_146_4_0_aarch64_pc_windows_msvc", - "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-gnu": ":v8_146_4_0_aarch64_unknown_linux_gnu", - "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-musl": ":v8_146_4_0_aarch64_unknown_linux_musl", - "@rules_rs//rs/experimental/platforms/config:x86_64-apple-darwin": ":v8_146_4_0_x86_64_apple_darwin", - "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-gnullvm": ":v8_146_4_0_x86_64_pc_windows_gnullvm", - "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-msvc": ":v8_146_4_0_x86_64_pc_windows_msvc", - "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-gnu": ":v8_146_4_0_x86_64_unknown_linux_gnu", - "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-musl": ":v8_146_4_0_x86_64_unknown_linux_musl", - "//conditions:default": ":v8_146_4_0_x86_64_unknown_linux_gnu", - }), -) - -alias( - name = "rusty_v8_binding_for_target", - actual = select({ - "@rules_rs//rs/experimental/platforms/config:aarch64-apple-darwin": ":src_binding_release_aarch64_apple_darwin", - "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-gnullvm": ":src_binding_release_aarch64_pc_windows_gnullvm", - "@rules_rs//rs/experimental/platforms/config:aarch64-pc-windows-msvc": ":src_binding_release_aarch64_pc_windows_msvc", - "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-gnu": ":src_binding_release_aarch64_unknown_linux_gnu", - "@rules_rs//rs/experimental/platforms/config:aarch64-unknown-linux-musl": ":src_binding_release_aarch64_unknown_linux_musl", - "@rules_rs//rs/experimental/platforms/config:x86_64-apple-darwin": ":src_binding_release_x86_64_apple_darwin", - "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-gnullvm": ":src_binding_release_x86_64_pc_windows_gnullvm", - "@rules_rs//rs/experimental/platforms/config:x86_64-pc-windows-msvc": ":src_binding_release_x86_64_pc_windows_msvc", - "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-gnu": ":src_binding_release_x86_64_unknown_linux_gnu", - "@rules_rs//rs/experimental/platforms/config:x86_64-unknown-linux-musl": ":src_binding_release_x86_64_unknown_linux_musl", - "//conditions:default": ":src_binding_release_x86_64_unknown_linux_gnu", - }), -) diff --git a/third_party/v8/README.md b/third_party/v8/README.md index 430615217ff..3931bbca46c 100644 --- a/third_party/v8/README.md +++ b/third_party/v8/README.md @@ -25,19 +25,8 @@ Each release pair contains: - a Rust binding file copied from the exact same `v8` crate version for that target -Consumers in this repo should be wired with explicit paths: - -- `RUSTY_V8_ARCHIVE` -- `RUSTY_V8_SRC_BINDING_PATH` - Do not mix artifacts across crate versions. The archive and binding must match -the exact pinned `v8` crate version used by this repo. On consumer branches, -that should also align with `codex-rs/Cargo.lock`. - -The target-select aliases used by the `v8` build script are: - -- `//third_party/v8:rusty_v8_archive_for_target` -- `//third_party/v8:rusty_v8_binding_for_target` +the exact pinned `v8` crate version used by this repo. The dedicated publishing workflow is: