Remove the unused realtime WebRTC crate (#33639)

## What changed

- Remove `codex-realtime-webrtc` from the Cargo workspace and Bazel build,
  along with its native WebRTC dependency graph.
- Use `blake3`'s pure Rust implementation on
  `x86_64-pc-windows-gnullvm`, where the Bazel lint toolchain cannot
  reliably materialize the crate's native x86 assembly archives.

GitOrigin-RevId: c382d888cd7ada7a17a7a0dcbdecbe00744f5055
This commit is contained in:
Charlie Marsh
2026-07-16 16:33:22 +00:00
committed by copyberry
parent aff7c69659
commit b93dcf341c
8 changed files with 44 additions and 916 deletions

View File

@@ -220,6 +220,13 @@ crate.from_cargo(
bazel_dep(name = "zstd", version = "1.5.7")
crate.annotation(
# The Windows lint toolchain cannot reliably materialize blake3's native x86 assembly archives.
crate = "blake3",
crate_features_select = {
"x86_64-pc-windows-gnullvm": ["pure"],
},
)
crate.annotation(
crate = "zstd-sys",
gen_build_script = "on",

40
MODULE.bazel.lock generated

File diff suppressed because one or more lines are too long

567
codex-rs/Cargo.lock generated
View File

@@ -1349,7 +1349,7 @@ dependencies = [
"arrayvec",
"cc",
"cfg-if",
"constant_time_eq 0.3.1",
"constant_time_eq",
"digest 0.10.7",
"rayon-core",
]
@@ -1500,16 +1500,6 @@ dependencies = [
"bytes",
]
[[package]]
name = "bzip2"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
dependencies = [
"bzip2-sys",
"libc",
]
[[package]]
name = "bzip2"
version = "0.5.2"
@@ -1623,16 +1613,6 @@ dependencies = [
"nom 7.1.3",
]
[[package]]
name = "cfg-expr"
version = "0.20.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c6b04e07d8080154ed4ac03546d9a2b303cc2fe1901ba0b35b301516e289368"
dependencies = [
"smallvec",
"target-lexicon",
]
[[package]]
name = "cfg-if"
version = "1.0.4"
@@ -1777,7 +1757,7 @@ version = "4.5.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -1855,17 +1835,6 @@ dependencies = [
"thiserror 2.0.18",
]
[[package]]
name = "codespan-reporting"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681"
dependencies = [
"serde",
"termcolor",
"unicode-width 0.2.1",
]
[[package]]
name = "codex-agent-extension"
version = "0.0.0"
@@ -2191,7 +2160,7 @@ dependencies = [
"codex-uds",
"codex-utils-absolute-path",
"codex-utils-rustls-provider",
"constant_time_eq 0.3.1",
"constant_time_eq",
"futures",
"gethostname",
"hmac 0.12.1",
@@ -2573,7 +2542,7 @@ dependencies = [
"libc",
"multimap",
"pretty_assertions",
"prost 0.14.3",
"prost",
"regex-lite",
"schemars 0.8.22",
"serde",
@@ -2763,7 +2732,7 @@ dependencies = [
"which 8.0.0",
"whoami 1.6.1",
"wiremock",
"zstd 0.13.3",
"zstd",
]
[[package]]
@@ -2833,7 +2802,7 @@ dependencies = [
"url",
"which 8.0.0",
"wiremock",
"zip 2.4.2",
"zip",
]
[[package]]
@@ -2867,7 +2836,7 @@ dependencies = [
"tokio",
"toml 0.9.11+spec-1.1.0",
"tracing",
"zip 2.4.2",
"zip",
]
[[package]]
@@ -2946,7 +2915,7 @@ dependencies = [
"opentelemetry",
"opentelemetry_sdk",
"pretty_assertions",
"prost 0.14.3",
"prost",
"rcgen",
"reqwest 0.12.28",
"rustls",
@@ -3247,7 +3216,7 @@ dependencies = [
"tracing-opentelemetry",
"tracing-subscriber",
"windows-sys 0.52.0",
"zstd 0.13.3",
"zstd",
]
[[package]]
@@ -3777,15 +3746,6 @@ dependencies = [
"wildmatch",
]
[[package]]
name = "codex-realtime-webrtc"
version = "0.0.0"
dependencies = [
"libwebrtc",
"thiserror 2.0.18",
"tokio",
]
[[package]]
name = "codex-response-debug-context"
version = "0.0.0"
@@ -3877,7 +3837,7 @@ dependencies = [
"tokio",
"tracing",
"uuid",
"zstd 0.13.3",
"zstd",
]
[[package]]
@@ -4672,12 +4632,6 @@ dependencies = [
"unicode-xid",
]
[[package]]
name = "constant_time_eq"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
[[package]]
name = "constant_time_eq"
version = "0.3.1"
@@ -4816,7 +4770,7 @@ dependencies = [
"tracing-subscriber",
"walkdir",
"wiremock",
"zstd 0.13.3",
"zstd",
]
[[package]]
@@ -5095,68 +5049,6 @@ dependencies = [
"syn 2.0.117",
]
[[package]]
name = "cxx"
version = "1.0.194"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "747d8437319e3a2f43d93b341c137927ca70c0f5dabeea7a005a73665e247c7e"
dependencies = [
"cc",
"cxx-build",
"cxxbridge-cmd",
"cxxbridge-flags",
"cxxbridge-macro",
"foldhash 0.2.0",
"link-cplusplus",
]
[[package]]
name = "cxx-build"
version = "1.0.194"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0f4697d190a142477b16aef7da8a99bfdc41e7e8b1687583c0d23a79c7afc1e"
dependencies = [
"cc",
"codespan-reporting",
"indexmap 2.14.0",
"proc-macro2",
"quote",
"scratch",
"syn 2.0.117",
]
[[package]]
name = "cxxbridge-cmd"
version = "1.0.194"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0956799fa8678d4c50eed028f2de1c0552ae183c76e976cf7ca8c4e36a7c328"
dependencies = [
"clap",
"codespan-reporting",
"indexmap 2.14.0",
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]]
name = "cxxbridge-flags"
version = "1.0.194"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23384a836ab4f0ad98ace7e3955ad2de39de42378ab487dc28d3990392cb283a"
[[package]]
name = "cxxbridge-macro"
version = "1.0.194"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6acc6b5822b9526adfb4fc377b67128fdd60aac757cc4a741a6278603f763cf"
dependencies = [
"indexmap 2.14.0",
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]]
name = "darling"
version = "0.20.11"
@@ -5841,7 +5733,7 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -6136,12 +6028,6 @@ dependencies = [
"writeable",
]
[[package]]
name = "fixedbitset"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "fixedbitset"
version = "0.5.7"
@@ -6275,16 +6161,6 @@ dependencies = [
"percent-encoding",
]
[[package]]
name = "fs2"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "fs_extra"
version = "1.3.0"
@@ -6543,19 +6419,6 @@ version = "0.32.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7"
[[package]]
name = "gio-sys"
version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps",
"windows-sys 0.61.2",
]
[[package]]
name = "gix"
version = "0.81.0"
@@ -7411,50 +7274,6 @@ dependencies = [
"parking_lot",
]
[[package]]
name = "glib"
version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b"
dependencies = [
"bitflags 2.10.0",
"futures-channel",
"futures-core",
"futures-executor",
"futures-task",
"futures-util",
"gio-sys",
"glib-macros",
"glib-sys",
"gobject-sys",
"libc",
"memchr",
"smallvec",
]
[[package]]
name = "glib-macros"
version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17"
dependencies = [
"heck 0.5.0",
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]]
name = "glib-sys"
version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c"
dependencies = [
"libc",
"system-deps",
]
[[package]]
name = "glob"
version = "0.3.3"
@@ -7474,17 +7293,6 @@ dependencies = [
"regex-syntax",
]
[[package]]
name = "gobject-sys"
version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294"
dependencies = [
"glib-sys",
"libc",
"system-deps",
]
[[package]]
name = "group"
version = "0.13.0"
@@ -7650,12 +7458,6 @@ dependencies = [
"stable_deref_trait",
]
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "heck"
version = "0.5.0"
@@ -8532,15 +8334,6 @@ version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itertools"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.13.0"
@@ -8872,40 +8665,6 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "libwebrtc"
version = "0.3.26"
source = "git+https://github.com/juberti-oai/rust-sdks.git?rev=e2d1d1d230c6fc9df171ccb181423f957bb3c1f0#e2d1d1d230c6fc9df171ccb181423f957bb3c1f0"
dependencies = [
"cxx",
"glib",
"jni 0.21.1",
"js-sys",
"lazy_static",
"livekit-protocol",
"livekit-runtime",
"log",
"parking_lot",
"rtrb",
"serde",
"serde_json",
"thiserror 1.0.69",
"tokio",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"webrtc-sys",
]
[[package]]
name = "link-cplusplus"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f78c730aaa7d0b9336a299029ea49f9ee53b0ed06e9202e8cb7db9bae7b8c82"
dependencies = [
"cc",
]
[[package]]
name = "link-section"
version = "0.17.2"
@@ -8958,31 +8717,6 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092"
[[package]]
name = "livekit-protocol"
version = "0.7.1"
source = "git+https://github.com/juberti-oai/rust-sdks.git?rev=e2d1d1d230c6fc9df171ccb181423f957bb3c1f0#e2d1d1d230c6fc9df171ccb181423f957bb3c1f0"
dependencies = [
"futures-util",
"livekit-runtime",
"parking_lot",
"pbjson",
"pbjson-types",
"prost 0.12.6",
"serde",
"thiserror 1.0.69",
"tokio",
]
[[package]]
name = "livekit-runtime"
version = "0.4.0"
source = "git+https://github.com/juberti-oai/rust-sdks.git?rev=e2d1d1d230c6fc9df171ccb181423f957bb3c1f0#e2d1d1d230c6fc9df171ccb181423f957bb3c1f0"
dependencies = [
"tokio",
"tokio-stream",
]
[[package]]
name = "local-waker"
version = "0.1.4"
@@ -9930,7 +9664,7 @@ dependencies = [
"opentelemetry-http",
"opentelemetry-proto",
"opentelemetry_sdk",
"prost 0.14.3",
"prost",
"reqwest 0.12.28",
"serde_json",
"thiserror 2.0.18",
@@ -9949,7 +9683,7 @@ dependencies = [
"const-hex",
"opentelemetry",
"opentelemetry_sdk",
"prost 0.14.3",
"prost",
"serde",
"serde_json",
"tonic",
@@ -10125,17 +9859,6 @@ dependencies = [
"windows-link",
]
[[package]]
name = "password-hash"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
dependencies = [
"base64ct",
"rand_core 0.6.4",
"subtle",
]
[[package]]
name = "paste"
version = "1.0.15"
@@ -10154,55 +9877,6 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
[[package]]
name = "pbjson"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1030c719b0ec2a2d25a5df729d6cff1acf3cc230bf766f4f97833591f7577b90"
dependencies = [
"base64 0.21.7",
"serde",
]
[[package]]
name = "pbjson-build"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2580e33f2292d34be285c5bc3dba5259542b083cfad6037b6d70345f24dcb735"
dependencies = [
"heck 0.4.1",
"itertools 0.11.0",
"prost 0.12.6",
"prost-types 0.12.6",
]
[[package]]
name = "pbjson-types"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18f596653ba4ac51bdecbb4ef6773bc7f56042dc13927910de1684ad3d32aa12"
dependencies = [
"bytes",
"chrono",
"pbjson",
"pbjson-build",
"prost 0.12.6",
"prost-build 0.12.6",
"serde",
]
[[package]]
name = "pbkdf2"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
dependencies = [
"digest 0.10.7",
"hmac 0.12.1",
"password-hash",
"sha2 0.10.9",
]
[[package]]
name = "pbkdf2"
version = "0.12.2"
@@ -10238,23 +9912,13 @@ version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "petgraph"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
dependencies = [
"fixedbitset 0.4.2",
"indexmap 2.14.0",
]
[[package]]
name = "petgraph"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
dependencies = [
"fixedbitset 0.5.7",
"fixedbitset",
"hashbrown 0.15.5",
"indexmap 2.14.0",
]
@@ -10594,16 +10258,6 @@ dependencies = [
"unarray",
]
[[package]]
name = "prost"
version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29"
dependencies = [
"bytes",
"prost-derive 0.12.6",
]
[[package]]
name = "prost"
version = "0.14.3"
@@ -10611,28 +10265,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
dependencies = [
"bytes",
"prost-derive 0.14.3",
]
[[package]]
name = "prost-build"
version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
dependencies = [
"bytes",
"heck 0.5.0",
"itertools 0.11.0",
"log",
"multimap",
"once_cell",
"petgraph 0.6.5",
"prettyplease",
"prost 0.12.6",
"prost-types 0.12.6",
"regex",
"syn 2.0.117",
"tempfile",
"prost-derive",
]
[[package]]
@@ -10641,32 +10274,19 @@ version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7"
dependencies = [
"heck 0.5.0",
"heck",
"itertools 0.14.0",
"log",
"multimap",
"petgraph 0.8.3",
"petgraph",
"prettyplease",
"prost 0.14.3",
"prost-types 0.14.3",
"prost",
"prost-types",
"regex",
"syn 2.0.117",
"tempfile",
]
[[package]]
name = "prost-derive"
version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1"
dependencies = [
"anyhow",
"itertools 0.11.0",
"proc-macro2",
"quote",
"syn 2.0.117",
]
[[package]]
name = "prost-derive"
version = "0.14.3"
@@ -10680,22 +10300,13 @@ dependencies = [
"syn 2.0.117",
]
[[package]]
name = "prost-types"
version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0"
dependencies = [
"prost 0.12.6",
]
[[package]]
name = "prost-types"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
dependencies = [
"prost 0.14.3",
"prost",
]
[[package]]
@@ -11616,12 +11227,6 @@ dependencies = [
"syn 2.0.117",
]
[[package]]
name = "rtrb"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7204ed6420f698836b76d4d5c2ec5dec7585fd5c3a788fd1cde855d1de598239"
[[package]]
name = "runfiles"
version = "0.1.0"
@@ -11996,19 +11601,13 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "scratch"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2"
[[package]]
name = "scrypt"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f"
dependencies = [
"pbkdf2 0.12.2",
"pbkdf2",
"salsa20",
"sha2 0.10.9",
]
@@ -12792,7 +12391,7 @@ dependencies = [
"cfg-if",
"dotenvy",
"either",
"heck 0.5.0",
"heck",
"hex",
"proc-macro2",
"quote",
@@ -13125,7 +12724,7 @@ version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"rustversion",
@@ -13138,7 +12737,7 @@ version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -13150,7 +12749,7 @@ version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"syn 2.0.117",
@@ -13274,19 +12873,6 @@ dependencies = [
"libc",
]
[[package]]
name = "system-deps"
version = "7.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c8f33736f986f16d69b6cb8b03f55ddcad5c41acc4ccc39dd88e84aa805e7f"
dependencies = [
"cfg-expr",
"heck 0.5.0",
"pkg-config",
"toml 0.9.11+spec-1.1.0",
"version-compare",
]
[[package]]
name = "tagptr"
version = "0.2.0"
@@ -13309,12 +12895,6 @@ dependencies = [
"libc",
]
[[package]]
name = "target-lexicon"
version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c"
[[package]]
name = "tempfile"
version = "3.27.0"
@@ -13866,7 +13446,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6c55a2d6a14174563de34409c9f92ff981d006f56da9c6ecd40d9d4a31500b0"
dependencies = [
"bytes",
"prost 0.14.3",
"prost",
"tonic",
]
@@ -13878,8 +13458,8 @@ checksum = "a4556786613791cfef4ed134aa670b61a85cfcacf71543ef33e8d801abae988f"
dependencies = [
"prettyplease",
"proc-macro2",
"prost-build 0.14.3",
"prost-types 0.14.3",
"prost-build",
"prost-types",
"quote",
"syn 2.0.117",
"tempfile",
@@ -14107,7 +13687,7 @@ checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6"
dependencies = [
"memchr",
"nom 8.0.0",
"petgraph 0.8.3",
"petgraph",
]
[[package]]
@@ -14463,12 +14043,6 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "version-compare"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
[[package]]
name = "version_check"
version = "0.9.5"
@@ -14803,34 +14377,6 @@ dependencies = [
"rustls-pki-types",
]
[[package]]
name = "webrtc-sys"
version = "0.3.24"
source = "git+https://github.com/juberti-oai/rust-sdks.git?rev=e2d1d1d230c6fc9df171ccb181423f957bb3c1f0#e2d1d1d230c6fc9df171ccb181423f957bb3c1f0"
dependencies = [
"cc",
"cxx",
"cxx-build",
"glob",
"log",
"pkg-config",
"webrtc-sys-build",
]
[[package]]
name = "webrtc-sys-build"
version = "0.3.13"
source = "git+https://github.com/juberti-oai/rust-sdks.git?rev=e2d1d1d230c6fc9df171ccb181423f957bb3c1f0#e2d1d1d230c6fc9df171ccb181423f957bb3c1f0"
dependencies = [
"anyhow",
"fs2",
"regex",
"reqwest 0.12.28",
"scratch",
"semver",
"zip 0.6.6",
]
[[package]]
name = "weezl"
version = "0.1.12"
@@ -15490,7 +15036,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck 0.5.0",
"heck",
"wit-parser",
]
@@ -15501,7 +15047,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck 0.5.0",
"heck",
"indexmap 2.14.0",
"prettyplease",
"syn 2.0.117",
@@ -15864,26 +15410,6 @@ dependencies = [
"syn 2.0.117",
]
[[package]]
name = "zip"
version = "0.6.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
dependencies = [
"aes",
"byteorder",
"bzip2 0.4.4",
"constant_time_eq 0.1.5",
"crc32fast",
"crossbeam-utils",
"flate2",
"hmac 0.12.1",
"pbkdf2 0.11.0",
"sha1 0.10.6",
"time",
"zstd 0.11.2+zstd.1.5.2",
]
[[package]]
name = "zip"
version = "2.4.2"
@@ -15892,8 +15418,8 @@ checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50"
dependencies = [
"aes",
"arbitrary",
"bzip2 0.5.2",
"constant_time_eq 0.3.1",
"bzip2",
"constant_time_eq",
"crc32fast",
"crossbeam-utils",
"deflate64",
@@ -15904,14 +15430,14 @@ dependencies = [
"indexmap 2.14.0",
"lzma-rs",
"memchr",
"pbkdf2 0.12.2",
"pbkdf2",
"sha1 0.10.6",
"thiserror 2.0.18",
"time",
"xz2",
"zeroize",
"zopfli",
"zstd 0.13.3",
"zstd",
]
[[package]]
@@ -15957,32 +15483,13 @@ dependencies = [
"simd-adler32",
]
[[package]]
name = "zstd"
version = "0.11.2+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
dependencies = [
"zstd-safe 5.0.2+zstd.1.5.2",
]
[[package]]
name = "zstd"
version = "0.13.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
dependencies = [
"zstd-safe 7.2.4",
]
[[package]]
name = "zstd-safe"
version = "5.0.2+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
dependencies = [
"libc",
"zstd-sys",
"zstd-safe",
]
[[package]]

View File

@@ -76,7 +76,6 @@ members = [
"ollama",
"process-hardening",
"protocol",
"realtime-webrtc",
"prompts",
"rollout",
"rollout-trace",

View File

@@ -1,7 +0,0 @@
load("//:defs.bzl", "MACOS_WEBRTC_RUSTC_LINK_FLAGS", "codex_rust_crate")
codex_rust_crate(
name = "realtime-webrtc",
crate_name = "codex_realtime_webrtc",
rustc_flags_extra = MACOS_WEBRTC_RUSTC_LINK_FLAGS,
)

View File

@@ -1,21 +0,0 @@
[package]
name = "codex-realtime-webrtc"
version.workspace = true
edition.workspace = true
license.workspace = true
[lib]
name = "codex_realtime_webrtc"
path = "src/lib.rs"
test = false
doctest = false
[dependencies]
thiserror = { workspace = true }
tokio = { workspace = true, features = ["rt-multi-thread"] }
[target.'cfg(target_os = "macos")'.dependencies]
libwebrtc = { version = "0.3.26", git = "https://github.com/juberti-oai/rust-sdks.git", rev = "e2d1d1d230c6fc9df171ccb181423f957bb3c1f0" }
[lints]
workspace = true

View File

@@ -1,90 +0,0 @@
#[cfg(target_os = "macos")]
mod native;
use std::fmt;
use std::sync::Arc;
use std::sync::atomic::AtomicU16;
use std::sync::mpsc;
#[derive(Debug, thiserror::Error)]
pub enum RealtimeWebrtcError {
#[error("{0}")]
Message(String),
#[error("realtime WebRTC is not supported on this platform")]
UnsupportedPlatform,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum RealtimeWebrtcEvent {
Connected,
LocalAudioLevel(u16),
Closed,
Failed(String),
}
pub type Result<T> = std::result::Result<T, RealtimeWebrtcError>;
pub struct StartedRealtimeWebrtcSession {
pub offer_sdp: String,
pub handle: RealtimeWebrtcSessionHandle,
pub events: mpsc::Receiver<RealtimeWebrtcEvent>,
}
pub struct RealtimeWebrtcSessionHandle {
#[cfg(target_os = "macos")]
inner: native::SessionHandle,
local_audio_peak: Arc<AtomicU16>,
}
impl fmt::Debug for RealtimeWebrtcSessionHandle {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("RealtimeWebrtcSessionHandle")
.finish_non_exhaustive()
}
}
impl RealtimeWebrtcSessionHandle {
pub fn apply_answer_sdp(&self, answer_sdp: String) -> Result<()> {
#[cfg(target_os = "macos")]
{
self.inner.apply_answer_sdp(answer_sdp)
}
#[cfg(not(target_os = "macos"))]
{
let _ = answer_sdp;
Err(RealtimeWebrtcError::UnsupportedPlatform)
}
}
pub fn close(&self) {
#[cfg(target_os = "macos")]
self.inner.close();
}
pub fn local_audio_peak(&self) -> Arc<AtomicU16> {
self.local_audio_peak.clone()
}
}
pub struct RealtimeWebrtcSession;
impl RealtimeWebrtcSession {
pub fn start() -> Result<StartedRealtimeWebrtcSession> {
#[cfg(target_os = "macos")]
{
let started = native::start()?;
Ok(StartedRealtimeWebrtcSession {
offer_sdp: started.offer_sdp,
handle: RealtimeWebrtcSessionHandle {
inner: started.handle,
local_audio_peak: Arc::new(AtomicU16::new(0)),
},
events: started.events,
})
}
#[cfg(not(target_os = "macos"))]
{
Err(RealtimeWebrtcError::UnsupportedPlatform)
}
}
}

View File

@@ -1,227 +0,0 @@
use std::fmt::Display;
use std::sync::mpsc;
use std::thread;
use libwebrtc::MediaType;
use libwebrtc::peer_connection::OfferOptions;
use libwebrtc::peer_connection::PeerConnection;
use libwebrtc::peer_connection_factory::PeerConnectionFactory;
use libwebrtc::peer_connection_factory::RtcConfiguration;
use libwebrtc::peer_connection_factory::native::PeerConnectionFactoryExt;
use libwebrtc::rtp_transceiver::RtpTransceiverDirection;
use libwebrtc::rtp_transceiver::RtpTransceiverInit;
use libwebrtc::session_description::SdpType;
use libwebrtc::session_description::SessionDescription;
use libwebrtc::stats::RtcStats;
use crate::RealtimeWebrtcError;
use crate::RealtimeWebrtcEvent;
use crate::Result;
enum Command {
ApplyAnswer {
answer_sdp: String,
reply: mpsc::Sender<Result<()>>,
},
Close,
}
pub(crate) struct StartedSession {
pub(crate) offer_sdp: String,
pub(crate) handle: SessionHandle,
pub(crate) events: mpsc::Receiver<RealtimeWebrtcEvent>,
}
pub(crate) struct SessionHandle {
command_tx: mpsc::Sender<Command>,
}
impl SessionHandle {
pub(crate) fn apply_answer_sdp(&self, answer_sdp: String) -> Result<()> {
let (reply, reply_rx) = mpsc::channel();
self.command_tx
.send(Command::ApplyAnswer { answer_sdp, reply })
.map_err(|_| RealtimeWebrtcError::Message("realtime WebRTC worker stopped".into()))?;
reply_rx
.recv()
.map_err(|_| RealtimeWebrtcError::Message("realtime WebRTC worker stopped".into()))?
}
pub(crate) fn close(&self) {
let _ = self.command_tx.send(Command::Close);
}
}
pub(crate) fn start() -> Result<StartedSession> {
let (command_tx, command_rx) = mpsc::channel();
let (events_tx, events_rx) = mpsc::channel();
let (offer_tx, offer_rx) = mpsc::channel();
thread::Builder::new()
.name("codex-realtime-webrtc".to_string())
.spawn(move || worker_main(command_rx, events_tx, offer_tx))
.map_err(|err| {
RealtimeWebrtcError::Message(format!("failed to spawn realtime WebRTC worker: {err}"))
})?;
let offer_sdp = offer_rx
.recv()
.map_err(|_| RealtimeWebrtcError::Message("realtime WebRTC worker stopped".into()))??;
Ok(StartedSession {
offer_sdp,
handle: SessionHandle { command_tx },
events: events_rx,
})
}
fn worker_main(
command_rx: mpsc::Receiver<Command>,
events_tx: mpsc::Sender<RealtimeWebrtcEvent>,
offer_tx: mpsc::Sender<Result<String>>,
) {
let runtime = match tokio::runtime::Builder::new_multi_thread()
.enable_all()
.thread_name("codex-realtime-webrtc-tokio")
.build()
{
Ok(runtime) => runtime,
Err(err) => {
let message = format!("failed to start realtime WebRTC runtime: {err}");
let _ = offer_tx.send(Err(RealtimeWebrtcError::Message(message.clone())));
let _ = events_tx.send(RealtimeWebrtcEvent::Failed(message));
return;
}
};
let peer_connection = match runtime.block_on(create_peer_connection_and_offer()) {
Ok((peer_connection, offer_sdp)) => {
let _ = offer_tx.send(Ok(offer_sdp));
peer_connection
}
Err(err) => {
let message = err.to_string();
let _ = offer_tx.send(Err(err));
let _ = events_tx.send(RealtimeWebrtcEvent::Failed(message));
return;
}
};
for command in command_rx {
match command {
Command::ApplyAnswer { answer_sdp, reply } => {
let result = runtime.block_on(apply_answer(&peer_connection, answer_sdp));
if result.is_ok() {
let _ = events_tx.send(RealtimeWebrtcEvent::Connected);
start_local_audio_level_task(
&runtime,
peer_connection.clone(),
events_tx.clone(),
);
}
let _ = reply.send(result);
}
Command::Close => {
peer_connection.close();
let _ = events_tx.send(RealtimeWebrtcEvent::Closed);
return;
}
}
}
peer_connection.close();
let _ = events_tx.send(RealtimeWebrtcEvent::Closed);
}
async fn create_peer_connection_and_offer() -> Result<(PeerConnection, String)> {
let factory = PeerConnectionFactory::with_platform_adm();
let peer_connection = factory
.create_peer_connection(RtcConfiguration::default())
.map_err(|err| message_error("failed to create WebRTC peer connection", err))?;
let audio_transceiver = peer_connection
.add_transceiver_for_media(
MediaType::Audio,
RtpTransceiverInit {
direction: RtpTransceiverDirection::SendRecv,
stream_ids: vec!["realtime".to_string()],
send_encodings: Vec::new(),
},
)
.map_err(|err| message_error("failed to add audio transceiver", err))?;
let local_audio_source = factory.create_audio_source();
let local_audio_track = factory.create_audio_track("realtime-mic", local_audio_source);
audio_transceiver
.sender()
.set_track(Some(local_audio_track.into()))
.map_err(|err| message_error("failed to attach WebRTC audio track", err))?;
let offer = peer_connection
.create_offer(OfferOptions {
ice_restart: false,
offer_to_receive_audio: true,
offer_to_receive_video: false,
})
.await
.map_err(|err| message_error("failed to create WebRTC offer", err))?;
peer_connection
.set_local_description(offer.clone())
.await
.map_err(|err| message_error("failed to set local WebRTC description", err))?;
Ok((peer_connection, offer.to_string()))
}
async fn apply_answer(peer_connection: &PeerConnection, answer_sdp: String) -> Result<()> {
let answer = SessionDescription::parse(&answer_sdp, SdpType::Answer)
.map_err(|err| message_error("failed to parse WebRTC answer SDP", err))?;
peer_connection
.set_remote_description(answer)
.await
.map_err(|err| message_error("failed to set remote WebRTC description", err))?;
Ok(())
}
fn message_error(prefix: &str, err: impl Display) -> RealtimeWebrtcError {
RealtimeWebrtcError::Message(format!("{prefix}: {err}"))
}
fn start_local_audio_level_task(
runtime: &tokio::runtime::Runtime,
peer_connection: PeerConnection,
events_tx: mpsc::Sender<RealtimeWebrtcEvent>,
) {
runtime.spawn(async move {
let mut interval = tokio::time::interval(std::time::Duration::from_millis(200));
loop {
interval.tick().await;
if matches!(
peer_connection.connection_state(),
libwebrtc::peer_connection::PeerConnectionState::Closed
| libwebrtc::peer_connection::PeerConnectionState::Failed
) {
return;
}
if let Some(peak) = local_audio_level(&peer_connection).await {
let _ = events_tx.send(RealtimeWebrtcEvent::LocalAudioLevel(peak));
}
}
});
}
async fn local_audio_level(peer_connection: &PeerConnection) -> Option<u16> {
let stats = peer_connection.get_stats().await.ok()?;
stats.into_iter().find_map(|stat| match stat {
RtcStats::MediaSource(stats) if stats.source.kind == "audio" => {
Some(audio_level_to_peak(stats.audio.audio_level))
}
_ => None,
})
}
fn audio_level_to_peak(audio_level: f64) -> u16 {
(audio_level.clamp(0.0, 1.0) * i16::MAX as f64).round() as u16
}