From df8ebdc1899154b675d6c76951f36cc9a46a8ffb Mon Sep 17 00:00:00 2001 From: ketan0 Date: Sat, 19 Sep 2026 00:48:38 -0700 Subject: [PATCH] Separate initial plugin presentation from deferred annotations Add label-only enrichment against stable region IDs; reserve summary folds before network requests. Rebuild bundled summarizer for plugin ABI 0.2. AI-assisted implementation with Codex. --- crates/diffr-plugin-sdk/src/guest.rs | 10 +++ crates/diffr-plugin-sdk/src/lib.rs | 13 +++- crates/diffr-plugin-sdk/src/native.rs | 12 ++++ crates/diffr-plugin-sdk/src/types.rs | 4 +- docs/plugins.md | 17 ++++- plugins/summarize/plugin.wasm | Bin 545414 -> 568784 bytes plugins/summarize/src/lib.rs | 76 ++++++++++++++-------- src/plugin/mod.rs | 90 +++++++++++++++++++++++++- src/plugin/native.rs | 8 +++ src/plugin/tests/summarize.rs | 51 ++++++++++++++- src/plugin/wasm.rs | 26 ++++++++ src/protocol/mod.rs | 7 ++ wit/plugin.wit | 16 ++++- 13 files changed, 291 insertions(+), 39 deletions(-) diff --git a/crates/diffr-plugin-sdk/src/guest.rs b/crates/diffr-plugin-sdk/src/guest.rs index 0e8088c48..dd614327d 100644 --- a/crates/diffr-plugin-sdk/src/guest.rs +++ b/crates/diffr-plugin-sdk/src/guest.rs @@ -18,6 +18,16 @@ impl guest::GuestPlugin for Instance

{ Ok(guest::Plugin::new(Instance(plugin))) } + fn enrich( + &self, + file: FileEntry, + sides: SourceSides, + ) -> Result, String> { + let sides = tree::sides(&sides).map_err(|error| format!("{error:#}"))?; + self.0 + .enrich(&file, &sides) + .map_err(|error| format!("{error:#}")) + } fn queries(&self) -> Result, String> { self.0.queries().map_err(|error| format!("{error:#}")) } diff --git a/crates/diffr-plugin-sdk/src/lib.rs b/crates/diffr-plugin-sdk/src/lib.rs index 66fab82f7..271ce2f99 100644 --- a/crates/diffr-plugin-sdk/src/lib.rs +++ b/crates/diffr-plugin-sdk/src/lib.rs @@ -42,8 +42,8 @@ pub use tree::{ siblings_of, sides_with_other_ids, walk, walk_mut, Node, OtherSide, Pairing, Region, Source, }; pub use types::{ - FileEntry, FileRef, FileSides, FileStatus, Move, Position, QuerySource, Range, Side, Span, - Visibility, ROOT, + Annotation, FileEntry, FileRef, FileSides, FileStatus, Move, Position, QuerySource, Range, + Side, Span, Visibility, ROOT, }; /// A diffr plugin: the `plugin` resource of `wit/plugin.wit`. diffr makes one @@ -71,6 +71,15 @@ pub trait Plugin: Sized { /// The moves that shape how the diffed file starts out. `sides` are the /// sides the file has, already rebuilt as trees. fn mutate(&self, file: &FileEntry, sides: &Pairing) -> anyhow::Result>; + + /// Deferred labels for stable region IDs, after all initial mutations. + fn enrich( + &self, + _file: &FileEntry, + _sides: &Pairing, + ) -> anyhow::Result> { + Ok(Vec::new()) + } } /// The contract generated from `wit/plugin.wit`. Its records are plain Rust diff --git a/crates/diffr-plugin-sdk/src/native.rs b/crates/diffr-plugin-sdk/src/native.rs index 3261808de..5f6e8770d 100644 --- a/crates/diffr-plugin-sdk/src/native.rs +++ b/crates/diffr-plugin-sdk/src/native.rs @@ -5,6 +5,11 @@ use crate::{tree, FileEntry, Move, Plugin, QuerySource}; /// The object-safe form of a plugin, after its options have been deserialized. pub trait Instance: Send + Sync { fn queries(&self) -> anyhow::Result>; + fn enrich( + &self, + file: &FileEntry, + sides: &SourceSides, + ) -> anyhow::Result>; fn classify(&self, file: &FileEntry) -> anyhow::Result>; fn mutate(&self, file: &FileEntry, sides: &SourceSides) -> anyhow::Result>; } @@ -27,6 +32,13 @@ pub fn create( struct Adapter

(P); impl Instance for Adapter

{ + fn enrich( + &self, + file: &FileEntry, + sides: &SourceSides, + ) -> anyhow::Result> { + self.0.enrich(file, &tree::sides(sides)?) + } fn queries(&self) -> anyhow::Result> { self.0.queries() } diff --git a/crates/diffr-plugin-sdk/src/types.rs b/crates/diffr-plugin-sdk/src/types.rs index 39a5da4a9..80a68f43c 100644 --- a/crates/diffr-plugin-sdk/src/types.rs +++ b/crates/diffr-plugin-sdk/src/types.rs @@ -6,8 +6,8 @@ //! This module adds only what the WIT cannot say: [`ROOT`], the id that names //! the file rather than a region, and the impls below. pub use crate::bindings::diffr::plugin::types::{ - Cut, FileEntry, FileRef, FileSides, FileStatus, Kind, Leaf, Move, Position, QuerySource, Range, - Region, Side, Source, SourceSides, Span, Visibility, + Annotation, Cut, FileEntry, FileRef, FileSides, FileStatus, Kind, Leaf, Move, Position, + QuerySource, Range, Region, Side, Source, SourceSides, Span, Visibility, }; use crate::tree::Pairing; diff --git a/docs/plugins.md b/docs/plugins.md index b24bd3dc8..468166f95 100644 --- a/docs/plugins.md +++ b/docs/plugins.md @@ -86,7 +86,7 @@ external plugin never requires rebuilding diffr. ## The contract [`wit/plugin.wit`](../wit/plugin.wit) is the contract: the package -`diffr:plugin@0.1.0`, world `plugin`. A plugin exports the interface `guest`, +`diffr:plugin@0.2.0`, world `plugin`. A plugin exports the interface `guest`, which holds one resource, the plugin itself (the component model has no optional exports; a plugin that does not classify returns an empty list): @@ -358,3 +358,18 @@ 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. + +## Deferred annotations + +The 0.2 plugin ABI adds `enrich(file, sides) -> list`. Rebuild +external components against the updated SDK (`cargo xtask build-plugins` rebuilds +bundled components). SDK plugins default to returning no annotations. + +`mutate` performs initial presentation only. After all mutations finish, `enrich` +may do slow work and return `{region-id, label}` records. IDs refer to the final +region trees and are validated by the host. Annotations cannot change ranges, +alignment, fold-state IDs, or collapsed state. The summarizer reserves its folds +and links docstrings during mutation; enrichment only attaches pseudocode. +Rejected or absent summaries leave the initial fold available to expand. + +The ordinary stream still applies both phases before emitting a file. diff --git a/plugins/summarize/plugin.wasm b/plugins/summarize/plugin.wasm index 542201db146b6c2c2f43fbbea1116e032bb229d3..1a575b1c3a73f8930640e825e005ab322e25fbc0 100644 GIT binary patch delta 94446 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 Tps1~~ZVEG-tW(6$LoEFtq7h_^ diff --git a/plugins/summarize/src/lib.rs b/plugins/summarize/src/lib.rs index 18aafbf89..f4abd5118 100644 --- a/plugins/summarize/src/lib.rs +++ b/plugins/summarize/src/lib.rs @@ -6,8 +6,8 @@ //! 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, - Node, OtherSide, Pairing, Plugin, Region, Source, + docstring_of, export, has_tag, is_fold, line_count, one_sided, walk, Annotation, Draft, + FileEntry, Move, Node, OtherSide, Pairing, Plugin, Region, Source, }; use serde::Deserialize; use serde_json::json; @@ -61,7 +61,6 @@ struct Request { id: u32, first_line: u32, last_line: u32, - docstring: Option, doc: Option, } @@ -320,7 +319,7 @@ fn quoted(doc: Option<&str>, summary: &str) -> Option { /// Pseudocode earns its place only when it is clearly shorter than the /// code: a summary with more than half the body's non-blank lines is -/// dropped and the body stays open. +/// dropped; the initially folded body remains expandable. fn compresses(summary: &str, body: &[&str]) -> bool { let summary_lines = summary .lines() @@ -411,12 +410,46 @@ impl Plugin for Summarize { Ok(Vec::new()) } - fn mutate(&self, file: &FileEntry, sides: &Pairing) -> anyhow::Result> { + fn mutate(&self, _file: &FileEntry, sides: &Pairing) -> anyhow::Result> { let selected = select( sides, self.options.min_lines, self.options.tests.then_some(self.options.test_min_lines), ); + let mut draft = Draft::new(sides); + let mut tags = BTreeMap::new(); + if let Pairing::Both { rhs, .. } | Pairing::RightOnly { rhs } = sides { + walk(&rhs.regions, &mut |region| { + tags.insert(region.id, region.tags.clone()); + }); + } + for (id, _, _, docstring) in selected { + let mut region_tags = tags.remove(&id).expect("selected region exists"); + region_tags.push("summarize:pending".into()); + draft.push(Move::SetTags((id, region_tags)))?; + draft.collapse(id, String::new())?; + if let Some(docstring) = docstring { + draft.link(&[id, docstring])?; + } + } + Ok(draft.into_moves()) + } + + fn enrich(&self, file: &FileEntry, sides: &Pairing) -> anyhow::Result> { + let mut selected = Vec::new(); + if let Pairing::Both { rhs, .. } | Pairing::RightOnly { rhs } = sides { + walk(&rhs.regions, &mut |region| { + if has_tag(region, "summarize:pending") { + let lines = region.range.lines(); + selected.push(( + region.id, + lines.start + 1, + lines.end, + docstring_of(rhs, region, PLUGIN), + )); + } + }); + } let (Pairing::Both { rhs, .. } | Pairing::RightOnly { rhs }) = &sides else { return Ok(Vec::new()); }; @@ -426,7 +459,6 @@ impl Plugin for Summarize { id, first_line, last_line, - docstring, doc: docstring.and_then(|docstring| documentation(rhs, docstring)), }) .collect(); @@ -445,28 +477,16 @@ impl Plugin for Summarize { let body = &lines[fold.first_line as usize - 1..fold.last_line as usize]; compresses(&summary.pseudocode, body) }); - // Collapse every summarized body first, then link each to its - // docstring: a summary and its docstring are one thing. - let mut draft = Draft::new(sides); - let mut links = Vec::new(); - for (id, summary) in texts { - let text = match &summary.quote { - Some(quote) => format!("{quote}\n{}", summary.pseudocode), - None => summary.pseudocode.clone(), - }; - draft.collapse(id, text)?; - let fold = folds - .iter() - .find(|fold| fold.id == id) - .expect("answered fold"); - if let Some(docstring) = fold.docstring { - links.push([id, docstring]); - } - } - for link in links { - draft.link(&link)?; - } - Ok(draft.into_moves()) + Ok(texts + .into_iter() + .map(|(region_id, summary)| Annotation { + region_id, + label: match summary.quote { + Some(quote) => format!("{quote}\n{}", summary.pseudocode), + None => summary.pseudocode, + }, + }) + .collect()) } } diff --git a/src/plugin/mod.rs b/src/plugin/mod.rs index 93e02ed5d..6a48f908a 100644 --- a/src/plugin/mod.rs +++ b/src/plugin/mod.rs @@ -55,6 +55,15 @@ use std::time::Instant; /// its options, behind the contract's two calls on a file. Each call gets /// the host for that call. pub(crate) trait Runner: Send + Sync { + fn enrich( + &self, + _host: Host, + _file: &types::FileEntry, + _sides: &types::SourceSides, + ) -> anyhow::Result> { + Ok(Vec::new()) + } + fn queries(&self, host: Host) -> anyhow::Result>; fn classify(&self, host: Host, file: &types::FileEntry) -> anyhow::Result>; @@ -201,9 +210,88 @@ impl Pipeline { Ok(entry.tags) } + /// Compatibility path: return the fully enriched file in one operation. + pub(crate) fn run( + &self, + file: &FileChange, + sides: &mut Pairing, + ) -> anyhow::Result { + let visibility = self.prepare(file, sides)?; + let annotations = self.enrich(file, sides)?; + Self::apply_annotations(sides, &annotations)?; + Ok(visibility) + } + + /// Deferred plugins may only attach labels to existing regions. + pub(crate) fn enrich( + &self, + file: &FileChange, + sides: &Pairing, + ) -> anyhow::Result> { + let trees = match sides { + Pairing::Both { lhs, rhs } => tree::Pairing::Both { + lhs: to_tree(lhs), + rhs: to_tree(rhs), + }, + Pairing::LeftOnly { lhs } => tree::Pairing::LeftOnly { lhs: to_tree(lhs) }, + Pairing::RightOnly { rhs } => tree::Pairing::RightOnly { rhs: to_tree(rhs) }, + }; + let records = source_sides(&trees); + let entry = file_entry(file); + let mut annotations = Vec::new(); + for plugin in &self.plugins { + let labels = plugin + .runner + .enrich(self.host(&plugin.name), &entry, &records) + .with_context(|| MutationFailed(plugin.name.to_string()))?; + annotations.extend(labels.into_iter().map(|label| protocol::Annotation { + region_id: label.region_id, + label: label.label, + })); + } + // Validate the complete batch before it can leave the host. + Self::apply_annotations(&mut sides.clone(), &annotations)?; + Ok(annotations) + } + + pub(crate) fn apply_annotations( + sides: &mut Pairing, + annotations: &[protocol::Annotation], + ) -> anyhow::Result<()> { + fn find(regions: &mut [protocol::Region], id: u32) -> Option<&mut protocol::Region> { + for region in regions { + if region.id == id { + return Some(region); + } + if let protocol::Node::Fold { children } = &mut region.node { + if let Some(found) = find(children, id) { + return Some(found); + } + } + } + None + } + for annotation in annotations { + let region = match sides { + Pairing::Both { lhs, rhs } => find(&mut lhs.regions, annotation.region_id) + .or_else(|| find(&mut rhs.regions, annotation.region_id)), + Pairing::LeftOnly { lhs } => find(&mut lhs.regions, annotation.region_id), + Pairing::RightOnly { rhs } => find(&mut rhs.regions, annotation.region_id), + } + .ok_or_else(|| { + anyhow!( + "annotation refers to missing region {}", + annotation.region_id + ) + })?; + region.visibility.label = annotation.label.clone(); + } + Ok(()) + } + /// Run every plugin on one file's sides, returning the file's own /// visibility. - pub(crate) fn run( + pub(crate) fn prepare( &self, file: &FileChange, sides: &mut Pairing, diff --git a/src/plugin/native.rs b/src/plugin/native.rs index c7b016f52..3c8c4daa8 100644 --- a/src/plugin/native.rs +++ b/src/plugin/native.rs @@ -62,6 +62,14 @@ fn call(host: Host, call: impl FnOnce() -> anyhow::Result) -> anyhow::Resu struct Native(Box); impl Runner for Native { + fn enrich( + &self, + host: Host, + file: &FileEntry, + sides: &SourceSides, + ) -> anyhow::Result> { + call(host, || self.0.enrich(file, sides)) + } fn queries(&self, host: Host) -> anyhow::Result> { call(host, || self.0.queries()) } diff --git a/src/plugin/tests/summarize.rs b/src/plugin/tests/summarize.rs index 83d369202..7b5e8f96a 100644 --- a/src/plugin/tests/summarize.rs +++ b/src/plugin/tests/summarize.rs @@ -163,7 +163,7 @@ fn selection_skips_test_bodies_and_collapsed_folds() { } #[test] -fn long_summaries_are_discarded_and_the_body_stays_open() { +fn long_summaries_are_discarded_without_changing_initial_folding() { let (file, mut sides) = project("a.py", "", LARGE); let id = select(&trees(&sides), 3, None)[0].0; let (endpoint, server) = serve(vec![(200, gemini_answer(&[(id, "a()\nb()\nc()")]))]); @@ -176,8 +176,8 @@ fn long_summaries_are_discarded_and_the_body_stays_open() { folds.push((region.visibility.collapsed, region.visibility.label.clone())); } }); - // No plugin collapsed it, so it has no label. - assert_eq!(folds, vec![(false, String::new())]); + // Enrichment cannot reopen a fold after the initial file was displayed. + assert_eq!(folds, vec![(true, String::new())]); } #[test] @@ -536,3 +536,48 @@ fn bundled_wasm_summarizer_streams_large_prompts() { assert!(prompt.contains(&"context ".repeat(16_384))); assert!(prompt.contains(&format!("fold {id}: lines 2-4"))); } + +#[test] +fn deferred_summary_preserves_user_fold_state_and_region_identity() { + let (file, mut sides) = project("a.py", "", LARGE); + let id = select(&trees(&sides), 3, None)[0].0; + let (endpoint, server) = serve(vec![(200, gemini_answer(&[(id, "call a, b, c")]))]); + let pipeline = summarizer(&endpoint, 0); + pipeline.prepare(&file, &mut sides).unwrap(); + // No HTTP is required for prepare. The selected fold already exists. + assert_eq!(fold_label(&trees(&sides)), ""); + let annotations = pipeline.enrich(&file, &sides).unwrap(); + fn open(regions: &mut [protocol::Region]) { + for region in regions { + region.visibility.collapsed = false; + if let protocol::Node::Fold { children } = &mut region.node { + open(children); + } + } + } + match &mut sides { + Pairing::Both { lhs, rhs } => { + open(&mut lhs.regions); + open(&mut rhs.regions); + } + Pairing::RightOnly { rhs } => open(&mut rhs.regions), + _ => panic!("right side required"), + } + let before = sides.clone(); + Pipeline::apply_annotations(&mut sides, &annotations).unwrap(); + assert_eq!(fold_label(&trees(&sides)), "call a, b, c"); + walk(&rhs(&trees(&sides)).regions, &mut |region| { + assert!(!region.visibility.collapsed); + }); + // Removing only the added label recovers the exact initial tree. + Pipeline::apply_annotations( + &mut sides, + &[protocol::Annotation { + region_id: id, + label: String::new(), + }], + ) + .unwrap(); + assert_eq!(sides, before); + server.join().unwrap(); +} diff --git a/src/plugin/wasm.rs b/src/plugin/wasm.rs index e36f42740..b2d3cc545 100644 --- a/src/plugin/wasm.rs +++ b/src/plugin/wasm.rs @@ -277,6 +277,32 @@ impl WasmInstance { } impl Runner for WasmInstance { + fn enrich( + &self, + host: Host, + file: &contract::FileEntry, + sides: &contract::SourceSides, + ) -> anyhow::Result> { + let instance = &mut *self.enter(host); + let labels = instance + .exports + .diffr_plugin_guest() + .plugin() + .call_enrich( + &mut instance.store, + instance.plugin, + &file_entry(file), + &source_sides(sides), + )? + .map_err(anyhow::Error::msg)?; + Ok(labels + .into_iter() + .map(|label| contract::Annotation { + region_id: label.region_id, + label: label.label, + }) + .collect()) + } fn queries(&self, host: Host) -> anyhow::Result> { let instance = &mut *self.enter(host); let sources = instance diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs index c3ad45705..d0dcf57a9 100644 --- a/src/protocol/mod.rs +++ b/src/protocol/mod.rs @@ -24,6 +24,13 @@ pub(crate) mod stream; /// The current wire version. Changes within a version are additive. pub const VERSION: u32 = 3; +/// Deferred content for an existing region; never changes fold state. +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct Annotation { + pub region_id: u32, + pub label: String, +} + // ── stream ──────────────────────────────────────────────────────────────── #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] diff --git a/wit/plugin.wit b/wit/plugin.wit index afc494227..c6843a6c3 100644 --- a/wit/plugin.wit +++ b/wit/plugin.wit @@ -15,9 +15,16 @@ /// /// diffr makes one instance of each enabled plugin per run and calls it for /// every file, so what a plugin keeps from `new` lasts the whole run. -package diffr:plugin@0.1.0; +package diffr:plugin@0.2.0; interface types { + /// Deferred presentation content for an existing region. This cannot + /// change topology, alignment, fold identity, or collapsed state. + record annotation { + region-id: u32, + label: string, + } + /// A named query source. diffr compiles all enabled sources per language. /// Names identify sources for imports and diagnostics; shared names must /// have identical text. Relative imports resolve against this name. @@ -206,7 +213,7 @@ interface host { /// What every plugin exports: the plugin itself, as a resource. interface guest { - use types.{file-entry, source-sides, move, query-source}; + use types.{file-entry, source-sides, move, query-source, annotation}; resource plugin { /// Make the plugin from `options`, its bundled or external config @@ -232,6 +239,11 @@ interface guest { /// the sides the file has, the same sides as its entry's `file`. An /// error aborts the run with `mutation_failed`. mutate: func(file: file-entry, sides: source-sides) -> result, string>; + + /// Optional slow enrichment after every plugin has shaped the file. + /// Errors leave the initial diff usable. Return no annotations when + /// this plugin has no deferred work. + enrich: func(file: file-entry, sides: source-sides) -> result, string>; } }