From deae3d36dc2210a36ded8d0190033d2399771c35 Mon Sep 17 00:00:00 2001 From: Sidharth Menon Date: Wed, 16 Sep 2026 21:48:00 -0700 Subject: [PATCH 1/5] Enable WASI HTTP for network-backed component plugins Add a WASI summarizer transport and an external-component HTTP retry test. AI-assisted implementation with Codex. Agent-Session: 01a0ad3b-6263-7fa2-a6ee-f271733eb69e Agent-Session: 0835dd48-809a-400f-9aa3-fb878ed53805 Agent-Session: 01a0adac-cfe9-7e91-a8d7-41321f7301ac --- Cargo.lock | 129 ++++++++++++++++++++++++++++++---- Cargo.toml | 4 +- docs/plugins.md | 28 ++++++-- plugins/summarize/Cargo.toml | 4 ++ plugins/summarize/src/http.rs | 92 ++++++++++++++++++++++++ plugins/summarize/src/lib.rs | 47 +++++++++++++ src/plugin/tests/summarize.rs | 38 ++++++++++ src/plugin/wasm.rs | 9 +++ 8 files changed, 333 insertions(+), 18 deletions(-) create mode 100644 plugins/summarize/src/http.rs diff --git a/Cargo.lock b/Cargo.lock index 665d3680b..719bed320 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -734,6 +734,7 @@ dependencies = [ "serde", "serde_json", "tokio", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -862,6 +863,7 @@ dependencies = [ "version_check", "wasmtime", "wasmtime-wasi", + "wasmtime-wasi-http", ] [[package]] @@ -1218,7 +1220,7 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] @@ -1371,6 +1373,12 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "humansize" version = "2.1.3" @@ -1400,6 +1408,7 @@ dependencies = [ "http", "http-body", "httparse", + "httpdate", "itoa", "pin-project-lite", "smallvec", @@ -1416,9 +1425,9 @@ dependencies = [ "http", "hyper", "hyper-util", - "rustls", + "rustls 0.23.44", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.5", "tower-service", ] @@ -1931,7 +1940,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b18443e9c262bfe8fa82f51666e2642c53393f7e5c27b3e1aeab922cff5b9d8" dependencies = [ "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", "windows-sys 0.61.2", ] @@ -2269,7 +2278,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls", + "rustls 0.23.44", "socket2", "thiserror 2.0.20", "tokio", @@ -2291,7 +2300,7 @@ dependencies = [ "rand_pcg", "ring", "rustc-hash", - "rustls", + "rustls 0.23.44", "rustls-pki-types", "slab", "thiserror 2.0.20", @@ -2538,14 +2547,14 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls", + "rustls 0.23.44", "rustls-pki-types", "rustls-platform-verifier", "serde", "serde_json", "sync_wrapper", "tokio", - "tokio-rustls", + "tokio-rustls 0.26.5", "tower", "tower-http", "tower-service", @@ -2620,6 +2629,20 @@ dependencies = [ "rustix 1.1.4", ] +[[package]] +name = "rustls" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + [[package]] name = "rustls" version = "0.23.44" @@ -2629,7 +2652,7 @@ dependencies = [ "aws-lc-rs", "once_cell", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.103.15", "subtle", "zeroize", ] @@ -2667,10 +2690,10 @@ dependencies = [ "jni", "log", "once_cell", - "rustls", + "rustls 0.23.44", "rustls-native-certs", "rustls-platform-verifier-android", - "rustls-webpki", + "rustls-webpki 0.103.15", "security-framework", "security-framework-sys", "webpki-root-certs", @@ -2683,6 +2706,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.103.15" @@ -3181,13 +3215,24 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "tokio-rustls" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" +dependencies = [ + "rustls 0.22.4", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0c85f2c3ef0b1cd58b36682f4b17aaa995f0e5db534d85692b4903abce21f67" dependencies = [ - "rustls", + "rustls 0.23.44", "tokio", ] @@ -4115,6 +4160,15 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasip2" version = "1.0.4+wasi-0.2.12" @@ -4482,6 +4536,30 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "wasmtime-wasi-http" +version = "34.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17748938e2c98db4b7710efafb4751836e440d2b2ea0036b92a1000c8b5f37f2" +dependencies = [ + "anyhow", + "async-trait", + "bytes", + "futures", + "http", + "http-body", + "http-body-util", + "hyper", + "rustls 0.22.4", + "tokio", + "tokio-rustls 0.25.0", + "tracing", + "wasmtime", + "wasmtime-wasi", + "wasmtime-wasi-io", + "webpki-roots 0.26.11", +] + [[package]] name = "wasmtime-wasi-io" version = "34.0.2" @@ -4553,6 +4631,24 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.9", +] + +[[package]] +name = "webpki-roots" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.3.9" @@ -4875,6 +4971,15 @@ dependencies = [ "wit-parser 0.254.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + [[package]] name = "wit-bindgen-rust" version = "0.60.0" diff --git a/Cargo.toml b/Cargo.toml index fad84f4e1..b1f934be5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -153,6 +153,7 @@ diffr-plugin-hide-files = { path = "plugins/hide-files" } diffr-plugin-removed-runs = { path = "plugins/removed-runs" } diffr-plugin-summarize = { path = "plugins/summarize" } diffr-plugin-test-bodies = { path = "plugins/test-bodies" } +wasmtime-wasi-http = { version = "34.0.2", default-features = false } [target.'cfg(not(any(windows, target_os = "illumos", target_os = "freebsd")))'.dependencies] @@ -199,9 +200,8 @@ default-members = [ "examples/plugins/fixtures", ] -# Test-only exception: the summarizer's HTTP client is native-only today. [workspace.metadata.diffr] -wasm-test-exclude = ["diffr-plugin-summarize"] +wasm-test-exclude = [] [profile.release] lto = "thin" diff --git a/docs/plugins.md b/docs/plugins.md index 7d0d37f5c..20e35bfc6 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -186,7 +186,7 @@ A component gets full access; diffr does not sandbox it: - WASI with the working directory preopened read-write as `.`. - The environment inherited. -- The network open, with name lookup. +- The network open, with name lookup and standard WASI HTTP/HTTPS outgoing requests. - Its stdout and stderr captured, and written to diffr's stderr a line at a time, each line prefixed with `[] `. Neither may reach diffr's stdout, which is the stream. A native plugin writes to diffr's stderr @@ -298,8 +298,28 @@ next run. path = "/path/to/diffr/plugins/deleted-bodies" ``` - The summarizer's HTTP client does not build for `wasm32-wasip2`, so it runs - natively only. +- `plugins/summarize`: a network-backed component example. Its WASM transport + uses `wasi:http/outgoing-handler` for HTTP/HTTPS, including request headers, + streaming bodies and timeouts; its native transport uses reqwest. Build it + with `cargo xtask build-plugins`, then load it without rebuilding diffr: + + ```toml + [plugins] + order = ["external.summarize", "bundled.test-bodies", "bundled.group"] + + [plugins.external.summarize] + path = "/path/to/diffr/plugins/summarize" + enabled = true + # Reads GEMINI_API_KEY or GOOGLE_API_KEY from the inherited environment. + ``` + + `plugins/summarize/src/http.rs` is a complete outgoing-request example for + plugin authors. The host provides TLS; components do not need to embed a + TLS implementation. WASM instances process files serially; `max_concurrency` + controls only native requests. WASI timeouts apply to connection, first-byte + and between-byte waits; the native client applies a whole-request timeout. + `cargo test --features wasm-plugin-tests --bin diffr external_component_summarizes_over_http` + checks the external component against a local model endpoint, including retries. Native plugin crates register their name and constructor through the same `export!("name", Type)` macro used for WASM exports. The linker gathers the @@ -312,7 +332,7 @@ Repository tooling discovers plugin crates through `cargo metadata` and bundled implementation into diffr; otherwise the plugin uses WASM. This does not add a WASM requirement to `cargo install`. `cargo xtask test-plugins` builds WASM variants and runs parity tests. The workspace's -`wasm-test-exclude` list records test-only exceptions such as the summarizer. +`wasm-test-exclude` list can record test-only exceptions; currently all plugins build as WASM. The host also discovers bundled manifests and query assets from its plugin dependencies, rather than maintaining a second file list. A dependency marked diff --git a/plugins/summarize/Cargo.toml b/plugins/summarize/Cargo.toml index 09fc44123..c3b7288cd 100644 --- a/plugins/summarize/Cargo.toml +++ b/plugins/summarize/Cargo.toml @@ -11,8 +11,12 @@ publish = false diffr-plugin-sdk = { path = "../../crates/diffr-plugin-sdk" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] reqwest = { version = "0.13", default-features = false, features = ["rustls", "json", "http2"] } tokio = { version = "1", default-features = false, features = ["rt-multi-thread", "time", "sync"] } +[target.'cfg(target_arch = "wasm32")'.dependencies] +wasi = "=0.14.2" + [package.metadata.diffr] native = true diff --git a/plugins/summarize/src/http.rs b/plugins/summarize/src/http.rs new file mode 100644 index 000000000..e9a2f1822 --- /dev/null +++ b/plugins/summarize/src/http.rs @@ -0,0 +1,92 @@ +//! Outgoing HTTP through the standard WASI interface, available to external +//! components without a diffr-specific network import. +use diffr_plugin_sdk::anyhow::{self, anyhow}; +use wasi::http::{outgoing_handler, types::*}; +use wasi::io::streams::StreamError; + +pub fn post(url: &str, key: &str, body: &str, timeout_ms: u64) -> anyhow::Result<(u16, Vec)> { + let (scheme, rest) = url + .split_once("://") + .ok_or_else(|| anyhow!("invalid endpoint URL"))?; + let scheme = match scheme { + "http" => Scheme::Http, + "https" => Scheme::Https, + _ => anyhow::bail!("endpoint must use http or https"), + }; + let (authority, path) = rest.split_once('/').unwrap_or((rest, "")); + let headers = Fields::from_list(&[ + ("content-type".into(), b"application/json".to_vec()), + ("content-length".into(), body.len().to_string().into_bytes()), + ("x-goog-api-key".into(), key.as_bytes().to_vec()), + ]) + .map_err(|e| anyhow!("HTTP headers: {e:?}"))?; + let request = OutgoingRequest::new(headers); + request + .set_method(&Method::Post) + .map_err(|_| anyhow!("HTTP method"))?; + request + .set_scheme(Some(&scheme)) + .map_err(|_| anyhow!("HTTP scheme"))?; + request + .set_authority(Some(authority)) + .map_err(|_| anyhow!("HTTP authority"))?; + request + .set_path_with_query(Some(&format!("/{path}"))) + .map_err(|_| anyhow!("HTTP path"))?; + let outgoing = request.body().map_err(|_| anyhow!("HTTP body"))?; + let options = RequestOptions::new(); + let timeout = Some(timeout_ms.saturating_mul(1_000_000)); + options + .set_connect_timeout(timeout) + .map_err(|_| anyhow!("connect timeout"))?; + options + .set_first_byte_timeout(timeout) + .map_err(|_| anyhow!("response timeout"))?; + options + .set_between_bytes_timeout(timeout) + .map_err(|_| anyhow!("read timeout"))?; + let response = outgoing_handler::handle(request, Some(options)) + .map_err(|e| anyhow!("HTTP request: {e:?}"))?; + { + let stream = outgoing + .write() + .map_err(|_| anyhow!("HTTP output stream"))?; + for chunk in body.as_bytes().chunks(4096) { + stream + .blocking_write_and_flush(chunk) + .map_err(|e| anyhow!("HTTP write: {e:?}"))?; + } + } + OutgoingBody::finish(outgoing, None).map_err(|e| anyhow!("HTTP finish: {e:?}"))?; + response.subscribe().block(); + let response = response + .get() + .ok_or_else(|| anyhow!("HTTP response not ready"))? + .map_err(|_| anyhow!("HTTP response already consumed"))? + .map_err(|e| anyhow!("HTTP response: {e:?}"))?; + let status = response.status(); + let incoming = response + .consume() + .map_err(|_| anyhow!("HTTP response body"))?; + let mut bytes = Vec::new(); + { + let stream = incoming + .stream() + .map_err(|_| anyhow!("HTTP input stream"))?; + loop { + match stream.blocking_read(64 * 1024) { + Ok(chunk) => bytes.extend_from_slice(&chunk), + Err(StreamError::Closed) => break, + Err(error) => anyhow::bail!("HTTP read: {error:?}"), + } + } + } + let trailers = IncomingBody::finish(incoming); + trailers.subscribe().block(); + trailers + .get() + .ok_or_else(|| anyhow!("HTTP trailers not ready"))? + .map_err(|_| anyhow!("HTTP trailers already consumed"))? + .map_err(|e| anyhow!("HTTP trailers: {e:?}"))?; + Ok((status, bytes)) +} diff --git a/plugins/summarize/src/lib.rs b/plugins/summarize/src/lib.rs index 65e265239..2dccd1105 100644 --- a/plugins/summarize/src/lib.rs +++ b/plugins/summarize/src/lib.rs @@ -15,8 +15,12 @@ use serde::Deserialize; use serde_json::json; use std::collections::BTreeMap; use std::time::Duration; +#[cfg(not(target_arch = "wasm32"))] use tokio::runtime::Runtime; +#[cfg(not(target_arch = "wasm32"))] use tokio::sync::Semaphore; +#[cfg(target_arch = "wasm32")] +mod http; /// The plugin's name, and the tags its queries set: a function body, and a /// test body, which is never summarized. @@ -54,8 +58,11 @@ pub struct Summarize { options: Options, api_key: String, endpoint: String, + #[cfg(not(target_arch = "wasm32"))] client: reqwest::Client, + #[cfg(not(target_arch = "wasm32"))] runtime: Runtime, + #[cfg(not(target_arch = "wasm32"))] limit: Semaphore, } @@ -154,6 +161,7 @@ impl Summarize { }); let url = self.url(); let failed = |message: String| anyhow!("{}: {message}", self.options.model); + #[cfg(not(target_arch = "wasm32"))] let text = self.runtime.block_on(async { let _permit = self .limit @@ -204,6 +212,40 @@ impl Summarize { tokio::time::sleep(Duration::from_millis(250 * (1 << attempt.min(6)))).await; } })?; + #[cfg(target_arch = "wasm32")] + let text: serde_json::Value = { + let mut attempt = 0; + loop { + let result = http::post( + &url, + &self.api_key, + &body.to_string(), + self.options.request_timeout_ms, + ); + let retry = match result { + Ok((status, body)) if (200..300).contains(&status) => { + break serde_json::from_slice(&body) + .map_err(|error| failed(error.to_string()))?; + } + Ok((status, _)) if status == 429 || status >= 500 => format!("HTTP {status}"), + Ok((status, body)) => { + return Err(failed(format!( + "HTTP {status} {}", + String::from_utf8_lossy(&body) + .chars() + .take(200) + .collect::() + ))) + } + Err(error) => error.to_string(), + }; + if attempt >= self.options.retries { + return Err(failed(format!("{retry} after {} attempts", attempt + 1))); + } + attempt += 1; + std::thread::sleep(Duration::from_millis(250 * (1 << attempt.min(6)))); + } + }; let content = text["candidates"][0]["content"]["parts"] .as_array() .and_then(|parts| parts.last()) @@ -369,9 +411,11 @@ impl Plugin for Summarize { fn new(options: Options) -> anyhow::Result { let api_key = resolve_key(&options)?; + #[cfg(not(target_arch = "wasm32"))] let client = reqwest::Client::builder() .timeout(Duration::from_millis(options.request_timeout_ms)) .build()?; + #[cfg(not(target_arch = "wasm32"))] let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) .thread_name("diffr-summarizer") @@ -383,8 +427,11 @@ impl Plugin for Summarize { .endpoint .clone() .unwrap_or_else(|| DEFAULT_ENDPOINT.to_owned()), + #[cfg(not(target_arch = "wasm32"))] client, + #[cfg(not(target_arch = "wasm32"))] runtime, + #[cfg(not(target_arch = "wasm32"))] limit: Semaphore::new(options.max_concurrency), options, }) diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 67584de1f..81c714eb6 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -400,3 +400,41 @@ fn small_files_never_call_the_model() { let moves = moves(&pipeline, &file, &sides).unwrap(); assert!(moves.is_empty()); } + +/// Exercise the same component a user loads from an external plugin folder. +#[cfg(feature = "wasm-plugin-tests")] +#[test] +fn external_component_summarizes_over_http() { + let (file, mut sides) = project("a.py", "", LARGE); + let id = select(&trees(&sides), 3)[0].0; + let (endpoint, server) = serve(vec![ + (429, "{}".into()), + (200, gemini_answer(&[(id, "call a, b, c")])), + ]); + let engine = super::super::wasm::engine().unwrap(); + let plugin = super::super::wasm::WasmPlugin::load( + &engine, + &super::super::config::ComponentSource::File( + std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("plugins/summarize/plugin.wasm"), + ), + ) + .unwrap(); + let mut options = builtin::manifest("summarize").unwrap().defaults(); + options.extend( + json!({"api_key": "test-key", "endpoint": endpoint, "min_lines": 3, "retries": 1}) + .as_object() + .unwrap() + .clone(), + ); + let mut pipeline = Pipeline::default(); + pipeline + .push( + "summarize", + serde_json::Value::Object(options), + &|host, options| plugin.create(host, options), + ) + .unwrap(); + pipeline.run(&file, &mut sides).unwrap(); + assert_eq!(fold_label(&trees(&sides)), "call a, b, c"); + assert_eq!(server.join().unwrap().len(), 2); +} diff --git a/src/plugin/wasm.rs b/src/plugin/wasm.rs index 03366ecce..90530d043 100644 --- a/src/plugin/wasm.rs +++ b/src/plugin/wasm.rs @@ -57,6 +57,7 @@ pub(crate) fn engine() -> anyhow::Result { /// progress, set before each call. struct State { wasi: WasiCtx, + http: wasmtime_wasi_http::WasiHttpCtx, table: ResourceTable, host: Host, } @@ -73,6 +74,12 @@ impl WasiView for State { } } +impl wasmtime_wasi_http::WasiHttpView for State { + fn ctx(&mut self) -> &mut wasmtime_wasi_http::WasiHttpCtx { + &mut self.http + } +} + impl types::Host for State {} impl host::Host for State { @@ -192,6 +199,7 @@ impl WasmPlugin { let component = component.with_context(|| format!("compiling {label}"))?; let mut linker = Linker::::new(engine); wasmtime_wasi::p2::add_to_linker_sync(&mut linker)?; + wasmtime_wasi_http::add_only_http_to_linker_sync(&mut linker)?; bindings::Plugin::add_to_linker::>(&mut linker, |state| state)?; let pre = bindings::PluginPre::new( linker @@ -222,6 +230,7 @@ impl WasmPlugin { &self.engine, State { wasi: wasi.build(), + http: wasmtime_wasi_http::WasiHttpCtx::new(), table: ResourceTable::new(), host, }, From f3d5c27b23fa299edec355847bd67b59e4a33108 Mon Sep 17 00:00:00 2001 From: Sidharth Menon Date: Wed, 16 Sep 2026 21:49:28 -0700 Subject: [PATCH 2/5] Summarize test bodies before collapsing test modules Select right-side tests independently of newness, preserve summary labels through test folding, and cover nested suites and grouping. AI-assisted implementation with Codex. Agent-Session: 0835dd48-809a-400f-9aa3-fb878ed53805 Agent-Session: 01a0adac-cfe9-7e91-a8d7-41321f7301ac --- docs/config.md | 10 +-- docs/plugins.md | 15 +++++ plugins/summarize/plugin.toml | 19 +++++- plugins/summarize/queries/javascript.scm | 2 +- plugins/summarize/src/lib.rs | 48 ++++++++++---- plugins/test-bodies/src/lib.rs | 25 ++++++-- src/config/default.toml | 4 +- src/plugin/tests/summarize.rs | 79 ++++++++++++++++++++++++ 8 files changed, 177 insertions(+), 25 deletions(-) diff --git a/docs/config.md b/docs/config.md index 7f43d12b0..2293c6b89 100644 --- a/docs/config.md +++ b/docs/config.md @@ -70,7 +70,7 @@ name = "default-dark" # a bundled terminal theme path = "/path/to/theme.toml" # or a Helix-style theme file [plugins] # see "Plugins" below -order = ["bundled.context", "bundled.hide-files", "bundled.deleted-bodies", "bundled.test-bodies", "bundled.removed-runs", "bundled.summarize", "bundled.group"] +order = ["bundled.context", "bundled.hide-files", "bundled.deleted-bodies", "bundled.summarize", "bundled.test-bodies", "bundled.removed-runs", "bundled.group"] ``` When a file exceeds a `[diff]` limit it falls back to a line diff: the file's @@ -92,7 +92,7 @@ produce on the wire. ```toml [plugins] -order = ["bundled.context", "bundled.hide-files", "bundled.deleted-bodies", "bundled.test-bodies", "bundled.removed-runs", "bundled.summarize", "bundled.group"] +order = ["bundled.context", "bundled.hide-files", "bundled.deleted-bodies", "bundled.summarize", "bundled.test-bodies", "bundled.removed-runs", "bundled.group"] [plugins.bundled.context] # unchanged lines far from any change collapse enabled = true @@ -115,11 +115,13 @@ min_lines = 3 enabled = true min_lines = 5 -[plugins.bundled.summarize] # pseudocode for large new function bodies +[plugins.bundled.summarize] # pseudocode for large new function bodies and right-side tests enabled = false # off by default: it needs an API key provider = "gemini" model = "gemini-3.8-flash" min_lines = 20 +tests = true # include right-side tests even when not newly added +test_min_lines = 20 api_key = "…" # or GEMINI_API_KEY / GOOGLE_API_KEY endpoint = "https://…" # optional base URL override request_timeout_ms = 60000 @@ -156,7 +158,7 @@ key. ```toml [plugins] -order = ["bundled.context", "bundled.hide-files", "bundled.deleted-bodies", "bundled.test-bodies", "bundled.removed-runs", "bundled.summarize", "bundled.group", "external.fixtures"] +order = ["bundled.context", "bundled.hide-files", "bundled.deleted-bodies", "bundled.summarize", "bundled.test-bodies", "bundled.removed-runs", "bundled.group", "external.fixtures"] [plugins.external.fixtures] path = "plugins/fixtures" diff --git a/docs/plugins.md b/docs/plugins.md index 20e35bfc6..668b8420a 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -339,3 +339,18 @@ dependencies, rather than maintaining a second file list. A dependency marked `native = true` contributes its registration; otherwise its prebuilt `plugin.wasm` is embedded alongside its manifest. The default configuration chooses which bundled plugins run; discovering an asset does not enable it. + +### Test summaries and folding order + +Enable `summarize` to get pseudocode for new functions and right-side test +bodies. `tests = false` disables test summaries independently; `test_min_lines` +(default 20) controls their size threshold. Modified and unchanged tests in a +diffed file qualify too; deleted tests do not. A summary must fit in half the +body's nonblank lines or the ordinary test fold remains. + +The default order runs `summarize` before `test-bodies`, then `group`. +`test-bodies` preserves existing labels and still collapses modules and bodies. +Opening a module or aggregate fold reveals each test's pseudocode; opening an +individual body reveals its source. JS/TS `describe` suites remain containers, +with summaries on their individual `it`/`test` callbacks. An explicit custom +`plugins.order` is respected; update it to this order to match the defaults. diff --git a/plugins/summarize/plugin.toml b/plugins/summarize/plugin.toml index 011dda573..a722c766d 100644 --- a/plugins/summarize/plugin.toml +++ b/plugins/summarize/plugin.toml @@ -1,12 +1,12 @@ name = "summarize" title = "Summaries" -description = "Pseudocode summaries for large new function bodies." +description = "Pseudocode summaries for large new function bodies and tests." # Off by default: the summarizer needs an API key, and diffr stops at # startup when a plugin that is on cannot be made. [enabled] -title = "Summarize new functions" -description = "Summarize large new function bodies as pseudocode. Needs an API key: `api_key`, or `GEMINI_API_KEY` or `GOOGLE_API_KEY` in the environment." +title = "Summarize functions and tests" +description = "Summarize large new function bodies and right-side tests as pseudocode. Needs an API key: `api_key`, or `GEMINI_API_KEY` or `GOOGLE_API_KEY` in the environment." default = false [options.provider] @@ -71,3 +71,16 @@ possible: about one pseudocode line per five source lines, and never more than a of the body's lines. When a fold lists a doc, also set "summary" to one sentence copied \ verbatim from that doc; otherwise leave it empty. Answer with a JSON array of \ {"id", "summary", "pseudocode"} objects, one per fold.""" + +[options.tests] +type = "boolean" +title = "Summarize tests" +description = "Summarize right-side test bodies, including modified and unchanged tests in diffed files." +default = true + +[options.test_min_lines] +type = "integer" +minimum = 0 +title = "Shortest test body to summarize (lines)" +description = "Test bodies shorter than this keep their ordinary fold labels." +default = 20 diff --git a/plugins/summarize/queries/javascript.scm b/plugins/summarize/queries/javascript.scm index 3f29fbeb6..b582737aa 100644 --- a/plugins/summarize/queries/javascript.scm +++ b/plugins/summarize/queries/javascript.scm @@ -18,5 +18,5 @@ (arrow_function body: (statement_block "{" @fold.open "}" @fold.close) @fold) (function_expression body: (statement_block "{" @fold.open "}" @fold.close) @fold) ])) - (#match? @_name "^(it|test|describe)$") + (#match? @_name "^(it|test)$") (#set! tag "summarize:test")) diff --git a/plugins/summarize/src/lib.rs b/plugins/summarize/src/lib.rs index 2dccd1105..2e0aa6348 100644 --- a/plugins/summarize/src/lib.rs +++ b/plugins/summarize/src/lib.rs @@ -23,7 +23,7 @@ use tokio::sync::Semaphore; mod http; /// The plugin's name, and the tags its queries set: a function body, and a -/// test body, which is never summarized. +/// test body, which can be summarized independently of whether it is new. const PLUGIN: &str = "summarize"; const FUNCTION: &str = "summarize:function"; const TEST: &str = "summarize:test"; @@ -35,6 +35,8 @@ pub struct Options { pub provider: Provider, pub model: String, pub min_lines: usize, + pub tests: bool, + pub test_min_lines: usize, pub api_key: Option, pub endpoint: Option, pub request_timeout_ms: u64, @@ -286,6 +288,16 @@ impl Summarize { /// any docstring, so a docstring matched across sides never makes the new /// body under it look paired. pub fn select(sides: &Pairing, min_lines: usize) -> Vec<(u32, u32, u32, Option)> { + select_with_tests(sides, min_lines, None) +} + +/// Include right-side tests regardless of newness or initial collapsed state. +/// Descend through suites/modules so each test gets its own summary. +pub fn select_with_tests( + sides: &Pairing, + min_lines: usize, + test_min_lines: Option, +) -> Vec<(u32, u32, u32, Option)> { let (lhs, rhs) = match sides { Pairing::Both { lhs, rhs } => (OtherSide::of(&lhs.regions), rhs), Pairing::RightOnly { rhs } => (OtherSide::default(), rhs), @@ -297,16 +309,19 @@ pub fn select(sides: &Pairing, min_lines: usize) -> Vec<(u32, u32, u32, regions: &[Region], lhs: &OtherSide, min_lines: usize, + test_min_lines: Option, selected: &mut Vec<(u32, u32, u32, Option)>, ) { for region in regions { - if is_fold(region) - && has_tag(region, FUNCTION) - && !has_tag(region, TEST) - && !region.visibility.collapsed - && one_sided(region, lhs) - && line_count(region) >= min_lines - { + let eligible = if has_tag(region, TEST) { + test_min_lines.is_some_and(|minimum| line_count(region) >= minimum) + } else { + has_tag(region, FUNCTION) + && !region.visibility.collapsed + && one_sided(region, lhs) + && line_count(region) >= min_lines + }; + if is_fold(region) && eligible { let lines = region.range.lines(); selected.push(( region.id, @@ -317,11 +332,18 @@ pub fn select(sides: &Pairing, min_lines: usize) -> Vec<(u32, u32, u32, continue; } if let Node::Fold { children } = ®ion.node { - visit(rhs, children, lhs, min_lines, selected); + visit(rhs, children, lhs, min_lines, test_min_lines, selected); } } } - visit(rhs, &rhs.regions, &lhs, min_lines, &mut selected); + visit( + rhs, + &rhs.regions, + &lhs, + min_lines, + test_min_lines, + &mut selected, + ); selected } @@ -482,7 +504,11 @@ impl Plugin for Summarize { } fn mutate(&self, file: &FileEntry, sides: &Pairing) -> anyhow::Result> { - let selected = select(sides, self.options.min_lines); + let selected = select_with_tests( + sides, + self.options.min_lines, + self.options.tests.then_some(self.options.test_min_lines), + ); let (Pairing::Both { rhs, .. } | Pairing::RightOnly { rhs }) = &sides else { return Ok(Vec::new()); }; diff --git a/plugins/test-bodies/src/lib.rs b/plugins/test-bodies/src/lib.rs index 8ee4c531b..059b58c86 100644 --- a/plugins/test-bodies/src/lib.rs +++ b/plugins/test-bodies/src/lib.rs @@ -84,18 +84,33 @@ impl Plugin for TestBodies { // Every fold has its own id, so each side's fold is its own target // and takes its own label. A test body's docstring, when it has one, // is linked after it collapses. - let mut labels: BTreeMap)> = BTreeMap::new(); + let mut labels: BTreeMap)> = BTreeMap::new(); for source in sides.sides() { walk(&source.regions, &mut |region| { if !is_fold(region) || line_count(region) < options.min_lines { return; } if has_tag(region, MODULE) { - labels.insert(region.id, ("test module", None)); + labels.insert( + region.id, + ( + if region.visibility.label.is_empty() { + "test module".to_owned() + } else { + region.visibility.label.clone() + }, + None, + ), + ); } else if has_tag(region, TEST) { - labels - .entry(region.id) - .or_insert(("test body", docstring_of(source, region, PLUGIN))); + labels.entry(region.id).or_insert(( + if region.visibility.label.is_empty() { + "test body".to_owned() + } else { + region.visibility.label.clone() + }, + docstring_of(source, region, PLUGIN), + )); } }); } diff --git a/src/config/default.toml b/src/config/default.toml index 3456af28d..6056aa8a7 100644 --- a/src/config/default.toml +++ b/src/config/default.toml @@ -6,9 +6,9 @@ order = [ "bundled.context", "bundled.hide-files", "bundled.deleted-bodies", + "bundled.summarize", "bundled.test-bodies", "bundled.removed-runs", - "bundled.summarize", "bundled.group", ] @@ -41,6 +41,8 @@ enabled = false provider = "gemini" model = "gemini-3.8-flash" min_lines = 20 +tests = true +test_min_lines = 20 request_timeout_ms = 60000 max_concurrency = 16 retries = 3 diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 81c714eb6..10450f721 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -438,3 +438,82 @@ fn external_component_summarizes_over_http() { assert_eq!(fold_label(&trees(&sides)), "call a, b, c"); assert_eq!(server.join().unwrap().len(), 2); } + +#[test] +fn tests_are_selected_when_added_modified_unchanged_or_already_collapsed() { + use diffr_plugin_summarize::select_with_tests; + for (path, before, after) in [ + ( + "a.py", + "def test_it():\n setup()\n act()\n check()\n", + "def test_it():\n setup()\n act()\n check_new()\n", + ), + ( + "a.rs", + "#[test]\nfn it_works() {\n setup();\n act();\n check();\n}\n", + "#[test]\nfn it_works() {\n setup();\n act();\n check_new();\n}\n", + ), + ( + "a.go", + "package a\nfunc TestIt(t *testing.T) {\n setup()\n act()\n check()\n}\n", + "package a\nfunc TestIt(t *testing.T) {\n setup()\n act()\n checkNew()\n}\n", + ), + ( + "a.ts", + "test('it', () => {\n setup();\n act();\n check();\n});\n", + "test('it', () => {\n setup();\n act();\n checkNew();\n});\n", + ), + ] { + for old in ["", before, after] { + // Entirely identical files bypass parsing. Keep a change outside + // the test to exercise an unchanged body in a diffed file. + let comment = if path.ends_with(".py") { "#" } else { "//" }; + let after = format!("{after}\n{comment} changed elsewhere\n"); + let (file, mut sides) = project(path, old, &after); + assert_eq!( + select_with_tests(&trees(&sides), 3, Some(3)).len(), + 1, + "{path}: {old}" + ); + assert!(select_with_tests(&trees(&sides), 3, None).is_empty()); + assert!(select_with_tests(&trees(&sides), 3, Some(30)).is_empty()); + run("test-bodies", json!({"min_lines": 3}), &file, &mut sides); + assert_eq!(select_with_tests(&trees(&sides), 3, Some(3)).len(), 1); + } + } +} + +#[test] +fn suites_select_individual_tests_and_preserve_nested_summary_folds() { + use diffr_plugin_summarize::select_with_tests; + for (path, after, outer_tag) in [ + ("a.rs", "#[cfg(test)]\nmod tests {\n #[test]\n fn one() {\n setup();\n act();\n check();\n }\n #[test]\n fn two() {\n setup();\n act();\n check();\n }\n}\n", "test-bodies:module"), + ("a.ts", "describe('suite', () => {\n it('one', () => {\n setup();\n act();\n check();\n });\n test('two', () => {\n setup();\n act();\n check();\n });\n});\n", "test-bodies:test"), + ] { + let (file, mut sides) = project(path, "", after); + let selected = select_with_tests(&trees(&sides), 3, Some(3)); + assert_eq!(selected.len(), 2, "{path}: {selected:?}"); + let (endpoint, server) = serve(vec![(200, gemini_answer(&[(selected[0].0, "setup; act; check one"), (selected[1].0, "setup; act; check two")]))]); + summarizer_with(json!({"api_key": "test", "endpoint": endpoint, "test_min_lines": 3})).run(&file, &mut sides).unwrap(); + run("test-bodies", json!({"min_lines": 3}), &file, &mut sides); + server.join().unwrap(); + run("group", json!({}), &file, &mut sides); + let sides = trees(&sides); + let mut found = 0; + let mut outer_state = None; + walk(&rhs(&sides).regions, &mut |region| { + if has_tag(region, outer_tag) && !selected.iter().any(|s| s.0 == region.id) { + assert!(region.visibility.collapsed); + outer_state = Some(region.fold_state_id); + } + if selected.iter().any(|s| s.0 == region.id) { + assert!(region.visibility.collapsed); + assert!(region.visibility.label.starts_with("setup; act; check")); + assert_ne!(Some(region.fold_state_id), outer_state); + found += 1; + } + }); + assert!(outer_state.is_some()); + assert_eq!(found, 2); + } +} From ebca304b043c1f61d9ddaaf5f4c555e8b8918bb0 Mon Sep 17 00:00:00 2001 From: Sidharth Menon Date: Wed, 16 Sep 2026 21:52:54 -0700 Subject: [PATCH 3/5] Run the bundled summarizer as a WASM component Ship the prebuilt component and remove the native HTTP transport and its dependencies. Exercise WASM requests directly against mock servers, including large prompts, and run component HTTP tests in CI. Select functions and tests through one signature. AI-assisted implementation with Codex. Agent-Session: 0835dd48-809a-400f-9aa3-fb878ed53805 Agent-Session: 01a0adac-cfe9-7e91-a8d7-41321f7301ac --- .github/workflows/test.yml | 2 +- .gitignore | 2 + Cargo.lock | 2 - docs/config.md | 2 +- docs/plugins.md | 20 ++++--- plugins/summarize/Cargo.toml | 7 +-- plugins/summarize/plugin.toml | 5 +- plugins/summarize/plugin.wasm | Bin 0 -> 545414 bytes plugins/summarize/src/http.rs | 17 +++++- plugins/summarize/src/lib.rs | 110 +++------------------------------- src/plugin/tests/mod.rs | 11 +++- src/plugin/tests/summarize.rs | 71 ++++++++++++++-------- xtask/src/main.rs | 2 + 13 files changed, 101 insertions(+), 150 deletions(-) create mode 100644 plugins/summarize/plugin.wasm diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 347be42f9..ba2a2cba2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,7 +62,7 @@ jobs: targets: wasm32-wasip2 # Component loading is host behaviour, so it is tested once, natively, # rather than on every target the matrix above cross-compiles for. - - run: cargo test --features wasm-plugin-tests --test wasm + - run: cargo xtask test-plugins test_mime_db: name: Test with MIME database diff --git a/.gitignore b/.gitignore index 4ee83031f..12465665a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ __pycache__/ # WASM plugin builds: scripts/build-wasm-plugins.sh plugin.wasm +# The bundled WASM summarizer ships ready to embed without a WASM toolchain. +!/plugins/summarize/plugin.wasm /crates/*/target # Generated data left behind by the retired review web viewer. diff --git a/Cargo.lock b/Cargo.lock index 719bed320..e978649b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -730,10 +730,8 @@ name = "diffr-plugin-summarize" version = "0.1.0" dependencies = [ "diffr-plugin-sdk", - "reqwest", "serde", "serde_json", - "tokio", "wasi 0.14.2+wasi-0.2.4", ] diff --git a/docs/config.md b/docs/config.md index 2293c6b89..216f43c99 100644 --- a/docs/config.md +++ b/docs/config.md @@ -125,7 +125,7 @@ test_min_lines = 20 api_key = "…" # or GEMINI_API_KEY / GOOGLE_API_KEY endpoint = "https://…" # optional base URL override request_timeout_ms = 60000 -max_concurrency = 16 +max_concurrency = 16 # legacy option; ignored by the WASM summarizer retries = 3 system_prompt = """…""" # the model's system instruction; defaults to diffr's own diff --git a/docs/plugins.md b/docs/plugins.md index 668b8420a..b24bd3dc8 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -270,8 +270,11 @@ cp target/wasm32-wasip2/release/hide_all.wasm plugin.wasm ``` `cargo xtask build-plugins` builds every plugin crate in this repository -that runs as a component into its folder's `plugin.wasm` (the outputs are not -committed). diffr compiles each component once per run, with wasmtime's +that runs as a component into its folder's `plugin.wasm`. The bundled +summarizer's component is committed because normal builds embed it without +requiring a WASM toolchain; rebuild and commit it whenever its source, manifest, +queries or SDK changes. Other plugin build outputs are not committed. +diffr compiles each component once per run, with wasmtime's compilation cache on disk, so an unchanged component is not recompiled on the next run. @@ -298,10 +301,11 @@ next run. path = "/path/to/diffr/plugins/deleted-bodies" ``` -- `plugins/summarize`: a network-backed component example. Its WASM transport +- `plugins/summarize`: a network-backed component example that runs as WASM + even when bundled. Its transport uses `wasi:http/outgoing-handler` for HTTP/HTTPS, including request headers, - streaming bodies and timeouts; its native transport uses reqwest. Build it - with `cargo xtask build-plugins`, then load it without rebuilding diffr: + streaming bodies and timeouts. Build it with `cargo xtask build-plugins`, + then load it without rebuilding diffr: ```toml [plugins] @@ -315,9 +319,9 @@ next run. `plugins/summarize/src/http.rs` is a complete outgoing-request example for plugin authors. The host provides TLS; components do not need to embed a - TLS implementation. WASM instances process files serially; `max_concurrency` - controls only native requests. WASI timeouts apply to connection, first-byte - and between-byte waits; the native client applies a whole-request timeout. + TLS implementation. WASM instances process files serially; the legacy + `max_concurrency` option is accepted but has no effect. Timeouts apply to + connection, first-byte and between-byte waits. `cargo test --features wasm-plugin-tests --bin diffr external_component_summarizes_over_http` checks the external component against a local model endpoint, including retries. diff --git a/plugins/summarize/Cargo.toml b/plugins/summarize/Cargo.toml index c3b7288cd..845148d86 100644 --- a/plugins/summarize/Cargo.toml +++ b/plugins/summarize/Cargo.toml @@ -11,12 +11,7 @@ publish = false diffr-plugin-sdk = { path = "../../crates/diffr-plugin-sdk" } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -[target.'cfg(not(target_arch = "wasm32"))'.dependencies] -reqwest = { version = "0.13", default-features = false, features = ["rustls", "json", "http2"] } -tokio = { version = "1", default-features = false, features = ["rt-multi-thread", "time", "sync"] } - -[target.'cfg(target_arch = "wasm32")'.dependencies] wasi = "=0.14.2" [package.metadata.diffr] -native = true +native = false diff --git a/plugins/summarize/plugin.toml b/plugins/summarize/plugin.toml index a722c766d..50a073898 100644 --- a/plugins/summarize/plugin.toml +++ b/plugins/summarize/plugin.toml @@ -42,14 +42,15 @@ description = "Override the provider's base URL, for proxies and tests." type = "integer" minimum = 1 title = "Request timeout (ms)" -description = "Per-request limit in milliseconds." +description = "Connect, first-byte and between-byte timeout, in milliseconds." default = 60000 [options.max_concurrency] type = "integer" minimum = 1 title = "Parallel requests" -description = "Requests in flight at once across files." +description = "Legacy option accepted for compatibility; WASM runs one file at a time. This setting has no effect." +"x-settings" = false default = 16 [options.retries] diff --git a/plugins/summarize/plugin.wasm b/plugins/summarize/plugin.wasm new file mode 100644 index 0000000000000000000000000000000000000000..542201db146b6c2c2f43fbbea1116e032bb229d3 GIT binary patch literal 545414 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
_+L&##1R`^Yi4|#@KKTZNfpRgDAj7LF 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 literal 0 HcmV?d00001 diff --git a/plugins/summarize/src/http.rs b/plugins/summarize/src/http.rs index e9a2f1822..cb30eba8b 100644 --- a/plugins/summarize/src/http.rs +++ b/plugins/summarize/src/http.rs @@ -51,11 +51,24 @@ pub fn post(url: &str, key: &str, body: &str, timeout_ms: u64) -> anyhow::Result let stream = outgoing .write() .map_err(|_| anyhow!("HTTP output stream"))?; - for chunk in body.as_bytes().chunks(4096) { + let mut remaining = body.as_bytes(); + while !remaining.is_empty() { + let capacity = stream + .check_write() + .map_err(|e| anyhow!("HTTP write: {e:?}"))? as usize; + if capacity == 0 { + stream.subscribe().block(); + continue; + } + let length = capacity.min(remaining.len()); stream - .blocking_write_and_flush(chunk) + .write(&remaining[..length]) .map_err(|e| anyhow!("HTTP write: {e:?}"))?; + remaining = &remaining[length..]; } + // Finish the body below without a separate flush: a peer can respond + // as soon as Content-Length bytes arrive, closing the write stream + // before a post-write flush even though the request succeeded. } OutgoingBody::finish(outgoing, None).map_err(|e| anyhow!("HTTP finish: {e:?}"))?; response.subscribe().block(); diff --git a/plugins/summarize/src/lib.rs b/plugins/summarize/src/lib.rs index 2e0aa6348..18aafbf89 100644 --- a/plugins/summarize/src/lib.rs +++ b/plugins/summarize/src/lib.rs @@ -3,9 +3,7 @@ //! //! It needs an API key: `new` fails without one, naming how to set it or //! turn the plugin off, which is why the bundled configuration ships it off. -//! The plugin holds its HTTP client and the runtime every request runs on, -//! and at most `max_concurrency` requests are in flight at once across -//! files. +//! Requests use WASI HTTP. The host calls one file at a time per instance. use diffr_plugin_sdk::anyhow::{self, anyhow, Context as _}; use diffr_plugin_sdk::{ docstring_of, export, has_tag, is_fold, line_count, one_sided, walk, Draft, FileEntry, Move, @@ -15,11 +13,6 @@ use serde::Deserialize; use serde_json::json; use std::collections::BTreeMap; use std::time::Duration; -#[cfg(not(target_arch = "wasm32"))] -use tokio::runtime::Runtime; -#[cfg(not(target_arch = "wasm32"))] -use tokio::sync::Semaphore; -#[cfg(target_arch = "wasm32")] mod http; /// The plugin's name, and the tags its queries set: a function body, and a @@ -40,6 +33,7 @@ pub struct Options { pub api_key: Option, pub endpoint: Option, pub request_timeout_ms: u64, + /// Accepted for compatibility with existing configs; WASM calls are serial. pub max_concurrency: usize, pub retries: u32, /// The system instruction sent with every request. @@ -54,18 +48,11 @@ pub enum Provider { const DEFAULT_ENDPOINT: &str = "https://generativelanguage.googleapis.com"; -/// The summarizer: its options, its API key and endpoint, its HTTP client, -/// the runtime its requests run on, and the requests in flight across files. +/// The summarizer's options, API key and endpoint. pub struct Summarize { options: Options, api_key: String, endpoint: String, - #[cfg(not(target_arch = "wasm32"))] - client: reqwest::Client, - #[cfg(not(target_arch = "wasm32"))] - runtime: Runtime, - #[cfg(not(target_arch = "wasm32"))] - limit: Semaphore, } /// One fold to summarize: its region id, 1-based inclusive line range, and @@ -163,58 +150,6 @@ impl Summarize { }); let url = self.url(); let failed = |message: String| anyhow!("{}: {message}", self.options.model); - #[cfg(not(target_arch = "wasm32"))] - let text = self.runtime.block_on(async { - let _permit = self - .limit - .acquire() - .await - .expect("semaphore is never closed"); - let mut attempt = 0; - loop { - let response = self - .client - .post(&url) - .header("x-goog-api-key", &self.api_key) - .json(&body) - .send() - .await; - let retry = match response { - Ok(response) if response.status().is_success() => { - return response - .json::() - .await - .map_err(|error| failed(error.to_string())); - } - Ok(response) - if response.status() == reqwest::StatusCode::TOO_MANY_REQUESTS - || response.status().is_server_error() => - { - format!("HTTP {}", response.status()) - } - Ok(response) => { - let status = response.status(); - let detail = response.text().await.unwrap_or_default(); - return Err(failed(format!( - "HTTP {status} {}", - detail.chars().take(200).collect::() - ))); - } - Err(error) - if error.is_timeout() || error.is_connect() || error.is_request() => - { - error.to_string() - } - Err(error) => return Err(failed(error.to_string())), - }; - if attempt >= self.options.retries { - return Err(failed(format!("{retry} after {} attempts", attempt + 1))); - } - attempt += 1; - tokio::time::sleep(Duration::from_millis(250 * (1 << attempt.min(6)))).await; - } - })?; - #[cfg(target_arch = "wasm32")] let text: serde_json::Value = { let mut attempt = 0; loop { @@ -278,22 +213,11 @@ impl Summarize { } } -/// New function bodies on the after side of at least `min_lines` lines: -/// function folds with no line inside them paired with the before side (see -/// `one_sided`), so a body that only moved, or a file diffed by line whose -/// bodies still align, is not new. Only the outermost qualifying body is -/// taken, never one nested inside it; test bodies and folds that already -/// start collapsed are skipped. Each is its id, its 1-based inclusive line -/// range, and its docstring's id. Selection runs before this plugin links -/// any docstring, so a docstring matched across sides never makes the new -/// body under it look paired. -pub fn select(sides: &Pairing, min_lines: usize) -> Vec<(u32, u32, u32, Option)> { - select_with_tests(sides, min_lines, None) -} - -/// Include right-side tests regardless of newness or initial collapsed state. -/// Descend through suites/modules so each test gets its own summary. -pub fn select_with_tests( +/// Select new right-side function bodies and, when a threshold is supplied, +/// right-side tests regardless of newness or initial collapsed state. Descend +/// through suites/modules so each test gets its own summary. Only the outermost +/// eligible body is selected; docstrings are linked after selection. +pub fn select( sides: &Pairing, min_lines: usize, test_min_lines: Option, @@ -433,28 +357,12 @@ impl Plugin for Summarize { fn new(options: Options) -> anyhow::Result { let api_key = resolve_key(&options)?; - #[cfg(not(target_arch = "wasm32"))] - let client = reqwest::Client::builder() - .timeout(Duration::from_millis(options.request_timeout_ms)) - .build()?; - #[cfg(not(target_arch = "wasm32"))] - let runtime = tokio::runtime::Builder::new_multi_thread() - .worker_threads(2) - .thread_name("diffr-summarizer") - .enable_all() - .build()?; Ok(Self { api_key, endpoint: options .endpoint .clone() .unwrap_or_else(|| DEFAULT_ENDPOINT.to_owned()), - #[cfg(not(target_arch = "wasm32"))] - client, - #[cfg(not(target_arch = "wasm32"))] - runtime, - #[cfg(not(target_arch = "wasm32"))] - limit: Semaphore::new(options.max_concurrency), options, }) } @@ -504,7 +412,7 @@ impl Plugin for Summarize { } fn mutate(&self, file: &FileEntry, sides: &Pairing) -> anyhow::Result> { - let selected = select_with_tests( + let selected = select( sides, self.options.min_lines, self.options.tests.then_some(self.options.test_min_lines), diff --git a/src/plugin/tests/mod.rs b/src/plugin/tests/mod.rs index 0274df267..a29e288b8 100644 --- a/src/plugin/tests/mod.rs +++ b/src/plugin/tests/mod.rs @@ -150,7 +150,16 @@ pub(crate) fn bundled(name: &str, overrides: serde_json::Value) -> Pipeline { name, serde_json::Value::Object(options), &|host, options| { - native::registered(native::lookup(name)?.expect("native code"), host, options) + if let Some(bytes) = builtin::component(name) { + let engine = super::wasm::engine()?; + super::wasm::WasmPlugin::load( + &engine, + &super::config::ComponentSource::Bundled(bytes), + )? + .create(host, options) + } else { + native::registered(native::lookup(name)?.expect("native code"), host, options) + } }, ) .unwrap(); diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 10450f721..83d369202 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -102,11 +102,11 @@ fn summarizer_with(overrides: serde_json::Value) -> Pipeline { #[test] fn selection_takes_new_bodies_of_at_least_min_lines() { let (_, sides) = project("a.py", "", LARGE); - let selected = select(&trees(&sides), 3); + let selected = select(&trees(&sides), 3, None); assert_eq!(selected.len(), 1); assert_eq!((selected[0].1, selected[0].2), (2, 4)); let (_, sides) = project("a.py", LARGE, LARGE); - assert!(select(&trees(&sides), 3).is_empty()); + assert!(select(&trees(&sides), 3, None).is_empty()); } #[test] @@ -124,7 +124,7 @@ fn selection_reads_newness_from_the_lines_when_the_match_fell_back() { ); // Nothing matched, so no fold is paired; the lines still are. Only the // added body, whose lines pair with nothing, is new. - let selected = select(&trees(&sides), 3); + let selected = select(&trees(&sides), 3, None); assert_eq!(selected.len(), 1, "{selected:?}"); assert_eq!((selected[0].1, selected[0].2), (7, 9)); } @@ -135,18 +135,18 @@ fn selection_takes_outermost_function_bodies_only() { // not a function, so the method is the outermost selection. let after = "impl A {\n fn m(&self) {\n a();\n b();\n c();\n let f = || {\n d();\n e();\n g();\n };\n f();\n }\n}\n"; let (_, sides) = project("a.rs", "", after); - let selected = select(&trees(&sides), 3); + let selected = select(&trees(&sides), 3, None); assert_eq!(selected.len(), 1, "{selected:?}"); assert_eq!((selected[0].1, selected[0].2), (3, 11)); // Below the threshold, nothing. - assert!(select(&trees(&sides), 30).is_empty()); + assert!(select(&trees(&sides), 30, None).is_empty()); } #[test] fn selection_skips_test_bodies_and_collapsed_folds() { let after = "#[test]\nfn t() {\n a();\n b();\n c();\n}\n\nfn f() {\n a();\n b();\n c();\n}\n"; let (file, mut sides) = project("a.rs", "", after); - let selected = select(&trees(&sides), 3); + let selected = select(&trees(&sides), 3, None); assert_eq!(selected.len(), 1, "{selected:?}"); assert_eq!((selected[0].1, selected[0].2), (9, 11)); run("test-bodies", json!({"min_lines": 3}), &file, &mut sides); @@ -159,13 +159,13 @@ fn selection_skips_test_bodies_and_collapsed_folds() { region.visibility.collapsed = true; } }); - assert!(select(&sides, 3).is_empty()); + assert!(select(&sides, 3, None).is_empty()); } #[test] fn long_summaries_are_discarded_and_the_body_stays_open() { let (file, mut sides) = project("a.py", "", LARGE); - let id = select(&trees(&sides), 3)[0].0; + let id = select(&trees(&sides), 3, None)[0].0; let (endpoint, server) = serve(vec![(200, gemini_answer(&[(id, "a()\nb()\nc()")]))]); summarizer(&endpoint, 0).run(&file, &mut sides).unwrap(); let sides = trees(&sides); @@ -183,7 +183,7 @@ fn long_summaries_are_discarded_and_the_body_stays_open() { #[test] fn summaries_collapse_selected_folds_behind_pseudocode() { let (file, mut sides) = project("a.py", "", LARGE); - let id = select(&trees(&sides), 3)[0].0; + let id = select(&trees(&sides), 3, None)[0].0; let (endpoint, server) = serve(vec![(200, gemini_answer(&[(id, "call a, b, c")]))]); summarizer(&endpoint, 0).run(&file, &mut sides).unwrap(); let sides = trees(&sides); @@ -220,7 +220,7 @@ fn a_docstring_is_sent_and_only_a_verbatim_sentence_from_it_is_kept() { labels.remove(0) }; let (file, mut sides) = project("a.rs", "", after); - let id = select(&trees(&sides), 3)[0].0; + let id = select(&trees(&sides), 3, None)[0].0; let (endpoint, server) = serve(vec![(200, answer(id, "Sums three numbers."))]); summarizer(&endpoint, 0).run(&file, &mut sides).unwrap(); let sides = trees(&sides); @@ -307,17 +307,17 @@ fn newness_is_the_lines_inside_the_body() { lhs_states.push(region.fold_state_id) }); assert!(!lhs_states.contains(&body.expect("a function body on the after side"))); - assert_eq!(select(&projected, 3).len(), 1); + assert_eq!(select(&projected, 3, None).len(), 1); // The same body grown from one that already had lines: `let x = a;` // still pairs, so this is a rewrite rather than a new body. let (_, sides) = project("a.rs", &grown, &after); - assert!(select(&trees(&sides), 3).is_empty()); + assert!(select(&trees(&sides), 3, None).is_empty()); } #[test] fn the_system_prompt_is_the_configured_one() { let (file, mut sides) = project("a.py", "", LARGE); - let id = select(&trees(&sides), 3)[0].0; + let id = select(&trees(&sides), 3, None)[0].0; let request = |overrides: serde_json::Value, sides: &mut Pairing| { let (endpoint, server) = serve(vec![(200, gemini_answer(&[(id, "call a, b, c")]))]); let mut overrides = overrides; @@ -354,7 +354,7 @@ fn the_system_prompt_is_the_configured_one() { #[test] fn transient_failures_are_retried_then_succeed() { let (file, mut sides) = project("a.py", "", LARGE); - let id = select(&trees(&sides), 3)[0].0; + let id = select(&trees(&sides), 3, None)[0].0; let (endpoint, server) = serve(vec![ (503, "{}".to_owned()), (429, "{}".to_owned()), @@ -406,7 +406,7 @@ fn small_files_never_call_the_model() { #[test] fn external_component_summarizes_over_http() { let (file, mut sides) = project("a.py", "", LARGE); - let id = select(&trees(&sides), 3)[0].0; + let id = select(&trees(&sides), 3, None)[0].0; let (endpoint, server) = serve(vec![ (429, "{}".into()), (200, gemini_answer(&[(id, "call a, b, c")])), @@ -441,7 +441,6 @@ fn external_component_summarizes_over_http() { #[test] fn tests_are_selected_when_added_modified_unchanged_or_already_collapsed() { - use diffr_plugin_summarize::select_with_tests; for (path, before, after) in [ ( "a.py", @@ -470,28 +469,23 @@ fn tests_are_selected_when_added_modified_unchanged_or_already_collapsed() { let comment = if path.ends_with(".py") { "#" } else { "//" }; let after = format!("{after}\n{comment} changed elsewhere\n"); let (file, mut sides) = project(path, old, &after); - assert_eq!( - select_with_tests(&trees(&sides), 3, Some(3)).len(), - 1, - "{path}: {old}" - ); - assert!(select_with_tests(&trees(&sides), 3, None).is_empty()); - assert!(select_with_tests(&trees(&sides), 3, Some(30)).is_empty()); + assert_eq!(select(&trees(&sides), 3, Some(3)).len(), 1, "{path}: {old}"); + assert!(select(&trees(&sides), 3, None).is_empty()); + assert!(select(&trees(&sides), 3, Some(30)).is_empty()); run("test-bodies", json!({"min_lines": 3}), &file, &mut sides); - assert_eq!(select_with_tests(&trees(&sides), 3, Some(3)).len(), 1); + assert_eq!(select(&trees(&sides), 3, Some(3)).len(), 1); } } } #[test] fn suites_select_individual_tests_and_preserve_nested_summary_folds() { - use diffr_plugin_summarize::select_with_tests; for (path, after, outer_tag) in [ ("a.rs", "#[cfg(test)]\nmod tests {\n #[test]\n fn one() {\n setup();\n act();\n check();\n }\n #[test]\n fn two() {\n setup();\n act();\n check();\n }\n}\n", "test-bodies:module"), ("a.ts", "describe('suite', () => {\n it('one', () => {\n setup();\n act();\n check();\n });\n test('two', () => {\n setup();\n act();\n check();\n });\n});\n", "test-bodies:test"), ] { let (file, mut sides) = project(path, "", after); - let selected = select_with_tests(&trees(&sides), 3, Some(3)); + let selected = select(&trees(&sides), 3, Some(3)); assert_eq!(selected.len(), 2, "{path}: {selected:?}"); let (endpoint, server) = serve(vec![(200, gemini_answer(&[(selected[0].0, "setup; act; check one"), (selected[1].0, "setup; act; check two")]))]); summarizer_with(json!({"api_key": "test", "endpoint": endpoint, "test_min_lines": 3})).run(&file, &mut sides).unwrap(); @@ -517,3 +511,28 @@ fn suites_select_individual_tests_and_preserve_nested_summary_folds() { assert_eq!(found, 2); } } + +#[test] +fn bundled_wasm_summarizer_streams_large_prompts() { + // Exceed the host's outgoing body buffer and close the server immediately + // after replying, exercising backpressure and the response/finish race. + let after = format!( + "def test_it():\n setup()\n act()\n check()\n# {}\n", + "context ".repeat(16_384) + ); + let (file, mut sides) = project("a.py", "", &after); + let id = select(&trees(&sides), 3, Some(3))[0].0; + let (endpoint, server) = serve(vec![(200, gemini_answer(&[(id, "setup; act; check")]))]); + let wasm = summarizer_with(json!({ + "api_key": "test", "endpoint": endpoint, "test_min_lines": 3, "retries": 0, + })); + assert!(builtin::component("summarize").is_some()); + wasm.run(&file, &mut sides).unwrap(); + assert_eq!(fold_label(&trees(&sides)), "setup; act; check"); + let requests = server.join().unwrap(); + assert_eq!(requests.len(), 1); + let request: serde_json::Value = serde_json::from_str(&requests[0]).unwrap(); + let prompt = request["contents"][0]["parts"][0]["text"].as_str().unwrap(); + assert!(prompt.contains(&"context ".repeat(16_384))); + assert!(prompt.contains(&format!("fold {id}: lines 2-4"))); +} diff --git a/xtask/src/main.rs b/xtask/src/main.rs index c4242da59..572b87ac3 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -198,6 +198,8 @@ fn main() -> Result<()> { "--locked", "--features", "wasm-plugin-tests", + "--bin", + "diffr", "--test", "wasm", ]) From 921874cdb2e6f3e395d491b6b5eb9a14e7b8eb2b Mon Sep 17 00:00:00 2001 From: Sidharth Menon Date: Wed, 16 Sep 2026 22:00:51 -0700 Subject: [PATCH 4/5] Show Git binary changes in the TUI Emit size-only binary diffs instead of rejecting files such as plugin.wasm during source loading. Cover added, modified, deleted, and working-tree binary files. AI-assisted implementation with Codex. Agent-Session: 0835dd48-809a-400f-9aa3-fb878ed53805 Agent-Session: 01a0adac-cfe9-7e91-a8d7-41321f7301ac --- docs/streaming.md | 8 ++++---- src/git.rs | 39 +++++++++++++++++++++-------------- tests/view.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 19 deletions(-) diff --git a/docs/streaming.md b/docs/streaming.md index c2e174d9c..94de5c62f 100644 --- a/docs/streaming.md +++ b/docs/streaming.md @@ -105,7 +105,7 @@ present. EOF without `complete` means the output was cut off. One shape everywhere: `{"code": "", "message": ""}`. - On a `file` record, `error` replaces `diff` and the run continues. Codes: - `binary`, `not_utf8`, `unsupported_file_type` (symlinks, submodules), + `not_utf8`, `unsupported_file_type` (symlinks, submodules), `unmerged`, `read_failed`, `query_conflict` (two query files capture one syntax node with different fold ranges; the message names the line and both files), or `internal` for a failure diffr did not classify. @@ -310,9 +310,9 @@ Closing stdout stops production once the files in flight finish. Terminate the process to cancel immediately. The CLI also retains its normal SIGPIPE behavior on Unix. -Regular UTF-8 text files are supported. Binary and non-UTF-8 files, symlinks, -submodules and unmerged index entries produce per-file errors. Non-UTF-8 paths -fail discovery. +Regular UTF-8 text files are supported. Binary files containing NUL bytes +produce size-only binary diffs. Non-UTF-8 text files, symlinks, submodules and +unmerged index entries produce per-file errors. Non-UTF-8 paths fail discovery. ## Plugins diff --git a/src/git.rs b/src/git.rs index 041b67e64..2f72e19c7 100644 --- a/src/git.rs +++ b/src/git.rs @@ -3,7 +3,7 @@ use crate::config::Params; use crate::pairing::Pairing; use crate::plugin::Pipeline; use crate::protocol; -use crate::summary::DiffResult; +use crate::summary::{DiffResult, FileContent, FileFormat}; use crate::tags::{self, Attributes, Prefix, PREFIX_BYTES}; use anyhow::Context as _; use git2::{Delta, Diff, DiffFindOptions, DiffOptions, Oid, Repository}; @@ -207,7 +207,6 @@ impl FileChange { pub(crate) enum FileError { UnsupportedFileType, ReadFailed, - Binary, NotUtf8, Unmerged, } @@ -217,7 +216,6 @@ impl FileError { match self { Self::UnsupportedFileType => "unsupported_file_type", Self::ReadFailed => "read_failed", - Self::Binary => "binary", Self::NotUtf8 => "not_utf8", Self::Unmerged => "unmerged", } @@ -231,7 +229,6 @@ impl fmt::Display for FileError { "structural diffs currently require regular text files (not symlinks or submodules)" } Self::ReadFailed => "could not read the source", - Self::Binary => "structural diffs currently support text files only", Self::NotUtf8 => "the source is not valid UTF-8", Self::Unmerged => { "unmerged index entry: resolve the conflict before requesting a structural diff" @@ -306,7 +303,7 @@ impl Source { /// The start of the source for the content rules, or `None` when they /// cannot apply: not a regular file, binary, or not UTF-8. Loading the - /// whole source reports those. + /// whole source handles those cases. fn prefix(&self, repo: &Repository) -> anyhow::Result, bool)>> { let Some(mut bytes) = self.head(repo, PREFIX_BYTES + 1)? else { return Ok(None); @@ -346,9 +343,9 @@ impl Source { } } - fn read(&self, repo: &Repository) -> anyhow::Result { + fn read(&self, repo: &Repository) -> anyhow::Result> { let mode = match self { - Self::Absent => return Ok(String::new()), + Self::Absent => return Ok(Vec::new()), Self::Blob { mode, .. } | Self::WorkingFile { mode, .. } => mode, }; if !matches!(mode, git2::FileMode::Blob | git2::FileMode::BlobExecutable) { @@ -363,10 +360,7 @@ impl Source { Self::WorkingFile { path, .. } => std::fs::read(path).context(FileError::ReadFailed)?, Self::Absent => unreachable!(), }; - if bytes.contains(&0) { - return Err(FileError::Binary.into()); - } - String::from_utf8(bytes).context(FileError::NotUtf8) + Ok(bytes) } } @@ -555,8 +549,8 @@ impl DiffSession { /// Sources read on the session thread; diffing needs no repository access. pub(crate) struct LoadedFile { pub(crate) file: FileChange, - before: String, - after: String, + before: Vec, + after: Vec, pub(crate) params: Arc, diff_options: crate::options::DiffOptions, } @@ -568,14 +562,29 @@ impl LoadedFile { /// A fold query conflict fails this file alone. pub(crate) fn diff(&self) -> anyhow::Result { + // Preserve binary files as successful, size-only records. Rejecting + // them while loading bypasses the protocol and TUI's binary support. + if self.before.contains(&0) || self.after.contains(&0) { + return Ok(DiffResult { + file_format: FileFormat::Binary, + lhs_src: FileContent::Binary, + rhs_src: FileContent::Binary, + lhs_positions: vec![], + rhs_positions: vec![], + lhs_folds: vec![], + rhs_folds: vec![], + }); + } + let before = std::str::from_utf8(&self.before).context(FileError::NotUtf8)?; + let after = std::str::from_utf8(&self.after).context(FileError::NotUtf8)?; let options = crate::options::DiffOptions { generated: self.file.tags.iter().any(|tag| tag == tags::GENERATED), ..self.diff_options.clone() }; Ok(DiffResult::from_sources_with_options( self.file.path(), - &self.before, - &self.after, + before, + after, &self.params, &options, )?) diff --git a/tests/view.rs b/tests/view.rs index adc97b08a..2ff7e94ef 100644 --- a/tests/view.rs +++ b/tests/view.rs @@ -226,3 +226,55 @@ fn syntax_spans_come_only_with_the_flag() { "{syntax:?}" ); } + +#[test] +fn git_binary_files_stream_as_diff_records_with_side_sizes() { + let fixture = Fixture::new(); + fixture.write("keep.txt", "unchanged\n"); + let empty = fixture.commit(); + fixture.write("plugin.wasm", "\0asm\x01\0\0\0"); + let added = fixture.commit(); + fixture.write("plugin.wasm", "\0asm\x01\0\0\0extra"); + let modified = fixture.commit(); + fixture.remove("plugin.wasm"); + let deleted = fixture.commit(); + for (base, head, expected) in [ + ( + &empty, + &added, + serde_json::json!({"type": "binary", "rhs": {"size": 8}}), + ), + ( + &added, + &modified, + serde_json::json!({"type": "binary", "lhs": {"size": 8}, "rhs": {"size": 13}}), + ), + ( + &modified, + &deleted, + serde_json::json!({"type": "binary", "lhs": {"size": 13}}), + ), + ] { + let output = fixture.run(base, head); + assert!( + output.status.success(), + "{}", + String::from_utf8_lossy(&output.stderr) + ); + let events = records(&output); + assert_eq!(events[1]["diff"], expected); + assert!(events[1].get("error").is_none()); + assert_eq!(events.last().unwrap()["succeeded"], 1); + assert_eq!(events.last().unwrap()["failed"], 0); + } + // The working-tree source uses the same binary path as a committed blob. + fixture.write("plugin.wasm", "\0asm"); + let mut index = fixture.repo.index().unwrap(); + index.add_path(std::path::Path::new("plugin.wasm")).unwrap(); + index.write().unwrap(); + let events = records(&fixture.diffr(&[&added, "--format", "ndjson"])); + assert_eq!( + events[1]["diff"], + serde_json::json!({"type": "binary", "lhs": {"size": 8}, "rhs": {"size": 4}}) + ); +} From fa9059bb27640fea6b4c89dfc96c19b54fbf48ac Mon Sep 17 00:00:00 2001 From: Sidharth Menon Date: Wed, 16 Sep 2026 22:10:57 -0700 Subject: [PATCH 5/5] Gently increase default dark theme contrast Brighten comments and muted text used by line numbers and collapsed summaries. AI-assisted implementation with Codex. Agent-Session: 0835dd48-809a-400f-9aa3-fb878ed53805 Agent-Session: 01a0adac-cfe9-7e91-a8d7-41321f7301ac --- tui/themes/README.md | 3 ++- tui/themes/onedark.toml | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tui/themes/README.md b/tui/themes/README.md index 26f0c0bda..5c36228bf 100644 --- a/tui/themes/README.md +++ b/tui/themes/README.md @@ -4,7 +4,8 @@ These are Helix editor themes, vendored from https://github.com/helix-editor/helix/tree/master/runtime/themes and licensed under the Mozilla Public License 2.0 (see LICENSE in this directory). -One Dark uses a lighter comment foreground for readability on diff highlights. +One Dark uses lighter comment and muted foregrounds for readability on diff +highlights and collapsed summaries. | name | file | | ----------------- | --------------------- | diff --git a/tui/themes/onedark.toml b/tui/themes/onedark.toml index d3a0fb66e..8470c5dac 100644 --- a/tui/themes/onedark.toml +++ b/tui/themes/onedark.toml @@ -115,5 +115,5 @@ light-black = "#2C323C" gray = "#3E4452" faint-gray = "#3B4048" light-gray = "#5C6370" -comment-gray = "#C0C6D0" -linenr = "#4B5263" +comment-gray = "#C8CED8" +linenr = "#687184"