From a4809b3026d1b90e01c4e0628c7a7bd121b672c6 Mon Sep 17 00:00:00 2001 From: iris <2+iris@noreply.localhost> Date: Sun, 6 Sep 2026 21:33:24 -0400 Subject: [PATCH] WIP: tool-call cards and grouping (P1b) `transcript-ui::tool` draws a card per call and a group per run, with the states, the collapsed-lays-out-nothing discipline and the one-card-per-result update. Screenshots in docs/bench/p1b-2026-09-06/. Includes a local fix to `List::place`'s reposition-vs-mov clash, which is about to be dropped for rustify's own. Co-Authored-By: Claude Fable 5.1 --- .../p1b-2026-09-06/iris-tools-collapsed.png | Bin 0 -> 100602 bytes .../p1b-2026-09-06/iris-tools-expanded.png | Bin 0 -> 117167 bytes iris/core/src/ui/render_state.rs | 11 + iris/src/widget/list.rs | 24 +- iris/transcript-ui/examples/transcript.rs | 165 +++- iris/transcript-ui/src/lib.rs | 393 +++++++- iris/transcript-ui/src/markdown.rs | 2 +- iris/transcript-ui/src/row.rs | 160 +--- iris/transcript-ui/src/tool.rs | 876 ++++++++++++++++++ 9 files changed, 1443 insertions(+), 188 deletions(-) create mode 100644 docs/bench/p1b-2026-09-06/iris-tools-collapsed.png create mode 100644 docs/bench/p1b-2026-09-06/iris-tools-expanded.png create mode 100644 iris/transcript-ui/src/tool.rs diff --git a/docs/bench/p1b-2026-09-06/iris-tools-collapsed.png b/docs/bench/p1b-2026-09-06/iris-tools-collapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..d46ff6be435bd79cd40a7730d978b6a5e0097e60 GIT binary patch literal 100602 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 literal 0 HcmV?d00001 diff --git a/docs/bench/p1b-2026-09-06/iris-tools-expanded.png b/docs/bench/p1b-2026-09-06/iris-tools-expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9ea853fb547f6b50b4cca1fcc551899dba0f97 GIT binary patch literal 117167 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 #B#gLxx|o+o~fQ# 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 aJuOQKk;gnz$;n%73+5(gjz2~@NB FoldedRow { }) } +/// One tool call. `result` is `None` for a call with no result yet and +/// `Some((output, failed))` for one that answered. +fn tool_call(id: &str, tool: &str, input: &str, result: Option<(&str, bool)>) -> TranscriptItem { + TranscriptItem::ToolRun { + seq: 3, + id: id.into(), + run_id: "run1".into(), + tool: tool.into(), + input: input.into(), + output: result.map(|(out, _)| out.to_string()).unwrap_or_default(), + done: result.is_some(), + failed: result.is_some_and(|(_, failed)| failed), + asks: Vec::new(), + images: Vec::new(), + } +} + +/// A call stopped on the reader: one unanswered permission question. +fn asking(id: &str, tool: &str, input: &str) -> TranscriptItem { + let mut call = tool_call(id, tool, input, None); + if let TranscriptItem::ToolRun { asks, .. } = &mut call { + asks.push(QuestionCard { + seq: 9, + id: format!("{id}-q"), + prompt: "Allow this command?".into(), + header: None, + options: vec![ + QuestionOption { + label: "Allow".into(), + description: None, + preview: None, + }, + QuestionOption { + label: "Deny".into(), + description: None, + preview: None, + }, + ], + multi_select: false, + answers: Vec::new(), + }); + } + call +} + +/// Longer than the card's own cap, so the "Show all N lines" control is on +/// screen in the expanded shot. +fn long_output() -> String { + (0..200) + .map(|i| format!("test transcript_ui::case_{i} ... ok")) + .collect::>() + .join("\n") +} + fn synthetic_rows() -> Vec { vec![ msg( @@ -55,41 +110,39 @@ fn synthetic_rows() -> Vec { false, "# Sure\n\nHere's a [link to the repo](https://example.com/ai-app-2) and a fenced block:\n\n```rust\nfn main() {\n println!(\"hi\");\n}\n```", ), + // Every state a tool card has to draw, in one run (P1b): a call + // that worked, one the tool reported as failed, one whose result + // never arrived, and one still running. The last two look the same + // in the events -- an empty output and `done: false` -- and are + // told apart only by whether the session is still working, which + // is what `TranscriptScreen::set_session_working` says. FoldedRow::Tools(vec![ - TranscriptItem::ToolRun { - seq: 3, - id: "t1".into(), - run_id: "run1".into(), - tool: "Read".into(), - input: "{\"file\": \"src/main.rs\"}".into(), - output: "fn main() {}\n".into(), - done: true, - asks: Vec::new(), - images: Vec::new(), - }, - TranscriptItem::ToolRun { - seq: 4, - id: "t2".into(), - run_id: "run1".into(), - tool: "Edit".into(), - input: "{\"file\": \"src/main.rs\"}".into(), - output: "ok".into(), - done: true, - asks: Vec::new(), - images: Vec::new(), - }, - TranscriptItem::ToolRun { - seq: 5, - id: "t3".into(), - run_id: "run1".into(), - tool: "Bash".into(), - input: "cargo build".into(), - output: "Compiling...\nFinished.".into(), - done: true, - asks: Vec::new(), - images: Vec::new(), - }, + tool_call( + "t1", + "Read", + r#"{"file_path": "src/main.rs"}"#, + Some(("fn main() {}\n", false)), + ), + tool_call( + "t2", + "Bash", + r#"{"command": "cargo build --release", "timeout": 480000, "description": "Build it"}"#, + Some(( + "error: could not compile `iris`\nCaused by: linker not found", + true, + )), + ), + tool_call("t3", "Grep", r#"{"pattern": "fn fold_event"}"#, None), ]), + // A lone call is a card too rather than a group of one -- and this + // one carries the kilobyte output a collapsed card must not lay + // out. + FoldedRow::Single(tool_call( + "t5", + "Bash", + r#"{"command": "cargo test -p transcript-ui -- --nocapture"}"#, + Some((&long_output(), false)), + )), msg(6, true, "Looks good, thanks!"), // Every block kind `client_core::markdown_blocks` names, in one // row, so P1a's appearance can be looked at against the Compose @@ -151,6 +204,50 @@ impl DefaultAppState for Client { text: "clear".into(), }), ); + // A second run at the live end, so the *running* state is on + // screen too. It cannot share a row with "no result": the two are + // the same events and are told apart only by whether the session + // is working, which is a property of the row rather than of the + // call (`TranscriptScreen::set_session_working`). + screen.push_row( + rsc, + &FoldedRow::Tools(vec![ + tool_call( + "t6", + "Read", + r#"{"file_path": "docs/RUST.md"}"#, + Some(("# Moving the app to Rust\n", false)), + ), + tool_call( + "t7", + "Bash", + r#"{"command": "cargo clippy --workspace --all-targets"}"#, + Some(("error: unused variable `x`", true)), + ), + tool_call("t8", "Glob", r#"{"pattern": "**/*.rs"}"#, None), + // Waiting on a permission, so this card is drawn *open* + // whatever the reader last chose -- the command is the + // thing being decided, and a row saying only "Bash" + // cannot be decided on. It is also how the expanded card + // (input block, output block, timeout) gets into the + // screenshot without a finger. + asking( + "t9", + "Bash", + r#"{"command": "rm -rf target", "timeout": 120000, "description": "Clear the build"}"#, + ), + ]), + ); + screen.set_session_working(rsc, true); + // The expanded picture has no other way to be looked at on a + // machine with no display and no finger -- see `run-headless.sh` + // and docs/RUST.md's P1b box. + if std::env::var_os("IRIS_TOOLS_EXPANDED").is_some() { + assert!( + screen.expand_tail_tools(rsc, true), + "the newest row must be the tool run this flag is about" + ); + } Self { ui_state, screen } } } diff --git a/iris/transcript-ui/src/lib.rs b/iris/transcript-ui/src/lib.rs index 7ca5fa9..df82adf 100644 --- a/iris/transcript-ui/src/lib.rs +++ b/iris/transcript-ui/src/lib.rs @@ -47,6 +47,7 @@ pub mod composer; pub mod markdown; pub mod row; pub mod selection; +pub mod tool; use client_core::transcript_fold::TranscriptRow as FoldedRow; use iris::prelude::*; @@ -66,14 +67,17 @@ pub struct TranscriptScreen { /// interior mutability, per `push_row`'s existing `&self`). Drained by /// [`Self::take_rebuilds`]. rebuilds: std::cell::Cell, - /// The per-block widgets of the row at the live end of the list -- - /// the only row a streamed delta ever lands in -- so - /// [`Self::apply`]'s `ReplaceLast` can replace one markdown block - /// instead of rebuilding the message - /// (`row::RowBlocks::apply_delta`). `None` for a tail that has no - /// delta path (a tool run) or before anything has been pushed. Its - /// removal is every path that replaces or drops the tail row, below. - tail: RefCell>, + /// What the row at the live end of the list kept so the next event + /// can change part of it rather than all of it -- one markdown block + /// of a streaming message (`row::RowBlocks::apply_delta`), or one card + /// of a tool run whose result just arrived (`tool::ToolRow:: + /// apply_calls`). `None` before anything has been pushed. Its removal + /// is every path that replaces or drops the tail row, below. + tail: RefCell>, + /// Whether the session is still working -- see + /// [`Self::set_session_working`], which is the only thing that writes + /// it. `Cell`, like `rebuilds`, so every method here stays `&self`. + session_working: std::cell::Cell, } impl TranscriptScreen { @@ -85,39 +89,114 @@ impl TranscriptScreen { where Rsc::State: FocusHost + OpenUrl, { - let (key, widget, blocks) = row::build_row(rsc, self.list, self.selection.clone(), row); + let (key, widget, tail) = row::build_row( + rsc, + self.list, + self.selection.clone(), + row, + self.session_working.get(), + ); (self.list)(rsc).push_back(ListRow::new(key, widget)); - *self.tail.borrow_mut() = blocks.map(|b| (key, b)); + *self.tail.borrow_mut() = tail.map(|t| (key, t)); } - /// The `ReplaceLast` fast path: update the tail row's blocks in place - /// if this really is a delta into the same message, and say whether - /// that worked. `false` for anything the caller must rebuild instead - /// -- a tail with no block state (a tool run), a row that is not a - /// `Single`, or a change `RowBlocks::apply_delta` will not take. + /// Whether the session this transcript belongs to is still doing + /// something (`client_core::transcript_fold::session_working`). + /// + /// The one thing a tool card cannot read off its own call: a call with + /// no result is *running* while the session works and *never came + /// back* once it stops, and those are different things to tell a + /// reader. Only the newest row is affected -- every row behind it + /// belongs to a turn that has already ended -- so changing it re-draws + /// that row and nothing else. + pub fn set_session_working(&self, rsc: &mut Rsc, working: bool) + where + Rsc::State: FocusHost + OpenUrl, + { + if self.session_working.replace(working) == working { + return; + } + let mut tail = self.tail.borrow_mut(); + if let Some((_, row::TailRow::Tools(tools))) = tail.as_mut() { + let calls = tools.calls(); + tools.apply_calls(rsc, &calls, working); + } + } + + /// How many tool cards the newest row is drawing, `0` when it is not a + /// tool row or its group is closed. Only the tests read it; nothing on + /// screen is decided by it. + #[cfg(test)] + fn tail_card_count(&self) -> usize { + match self.tail.borrow().as_ref() { + Some((_, row::TailRow::Tools(tools))) => tools.card_count(), + _ => 0, + } + } + + /// Open or close the newest row's tool run, when it is one -- what a + /// caller with no finger needs (`run-headless.sh`'s screenshot on this + /// displayless machine, and the tests below). Answers whether there + /// was such a row to act on, so a caller that expected one can say so + /// rather than silently producing the collapsed picture. + pub fn expand_tail_tools(&self, rsc: &mut Rsc, expanded: bool) -> bool + where + Rsc::State: FocusHost + OpenUrl, + { + let tail = self.tail.borrow(); + let Some((_, row::TailRow::Tools(tools))) = tail.as_ref() else { + return false; + }; + tools.set_group_expanded(rsc, expanded); + true + } + + /// The `ReplaceLast` fast path: update the tail row in place if this + /// really is a change to the same row, and say whether that worked. + /// `false` for anything the caller must rebuild instead. + /// + /// Two kinds of row have such a path and they are asked the same + /// question: a message's blocks take a delta into the last block, and + /// a tool row's cards take an arriving result on one card. Which one + /// this is comes from what the row kept, not from a second decision + /// here. fn apply_tail_delta(&self, rsc: &mut Rsc, key: RowKey, row: &FoldedRow) -> bool where Rsc::State: FocusHost + OpenUrl, { - let FoldedRow::Single(item) = row else { - return false; - }; let mut tail = self.tail.borrow_mut(); - let Some((tail_key, blocks)) = tail.as_mut() else { + let Some((tail_key, kept)) = tail.as_mut() else { return false; }; if *tail_key != key { return false; } - let (sender, markdown_src) = row::item_content(item); - blocks.apply_delta( - rsc, - self.list, - self.selection.clone(), - key, - sender, - &markdown_src, - ) + match (kept, row) { + (row::TailRow::Blocks(blocks), FoldedRow::Single(item)) => { + let (sender, markdown_src) = row::item_content(item); + // A tool call is drawn as a card, never as markdown, so a + // row that kept blocks and now holds one is a different + // row -- rebuild it. + if matches!(item, client_core::transcript_fold::TranscriptItem::ToolRun { .. }) { + return false; + } + blocks.apply_delta( + rsc, + self.list, + self.selection.clone(), + key, + sender, + &markdown_src, + ) + } + (row::TailRow::Tools(tools), FoldedRow::Tools(calls)) => { + tools.apply_calls(rsc, calls, self.session_working.get()) + } + (row::TailRow::Tools(tools), FoldedRow::Single(item)) => { + tools.apply_calls(rsc, std::slice::from_ref(item), self.session_working.get()) + } + (row::TailRow::Blocks(_), FoldedRow::Tools(_)) => false, + } } /// Apply the effect of one more folded event without rebuilding the @@ -196,11 +275,16 @@ impl TranscriptScreen { // pointing at widgets the `drop` below frees (the shape // docs/REVIEW-2026-09-06.md's finding 1 called out). self.selection.borrow_mut().unregister(old_key); - let (new_key, widget, blocks) = - row::build_row(rsc, self.list, self.selection.clone(), &new_rows[common]); + let (new_key, widget, kept) = row::build_row( + rsc, + self.list, + self.selection.clone(), + &new_rows[common], + self.session_working.get(), + ); let evicted = (self.list)(rsc).replace_back(ListRow::new(new_key, widget)); drop(evicted); // frees the old row's widget, same as a pop would - *self.tail.borrow_mut() = blocks.map(|b| (new_key, b)); + *self.tail.borrow_mut() = kept.map(|t| (new_key, t)); for row in &new_rows[common + 1..] { self.push_row(rsc, row); } @@ -279,9 +363,13 @@ where // say so. let mut tail = None; for row in &rows { - let (key, widget, blocks) = row::build_row(rsc, list, selection.clone(), row); + // `false`: a row built here is history until the caller says the + // session is working (`TranscriptScreen::set_session_working`), + // and claiming a call is running because the screen happens to be + // opening is exactly the inferred-as-measured mistake. + let (key, widget, kept) = row::build_row(rsc, list, selection.clone(), row, false); list(rsc).push_back(ListRow::new(key, widget)); - tail = blocks.map(|b| (key, b)); + tail = kept.map(|t| (key, t)); } // Wheel/trackpad scrolling -- the same idiom `trait_fns.rs`'s @@ -339,6 +427,7 @@ where ( TranscriptScreen { tail: RefCell::new(tail), + session_working: std::cell::Cell::new(false), list, composer, selection, @@ -421,6 +510,7 @@ mod diff_tests { input: "x".to_string(), output: String::new(), done: false, + failed: false, asks: Vec::new(), images: Vec::new(), } @@ -577,6 +667,7 @@ mod apply_tests { input: "x".to_string(), output: String::new(), done: false, + failed: false, asks: Vec::new(), images: Vec::new(), } @@ -765,4 +856,240 @@ mod apply_tests { Vec2::new(10.0, 10.0), ); } + + /// A tool call with `output` bytes of output, `done` or not. + fn call(id: &str, output: &str, done: bool) -> TranscriptItem { + TranscriptItem::ToolRun { + seq: 1, + id: id.to_string(), + run_id: "run".to_string(), + tool: "Bash".to_string(), + input: format!(r#"{{"command":"grep -rn {id} ."}}"#), + output: output.to_string(), + done, + failed: false, + asks: Vec::new(), + images: Vec::new(), + } + } + + fn run_of(count: usize, output: &str, done: bool) -> Vec { + (0..count) + .map(|i| call(&format!("t{i}"), output, done)) + .collect() + } + + /// A screen holding one tool run, with the group opened the way a tap + /// opens it, plus the counters drained -- so what a caller measures + /// next is only what it asked for. + fn open_run( + rsc: &mut TestRsc, + items: &[TranscriptItem], + ) -> (TranscriptScreen, StrongWidget, UiRenderState) { + let (screen, tree) = build_tree( + rsc, + client_core::transcript_fold::group_tool_runs(items), + ); + let mut render = UiRenderState::new(); + render.resize((1080.0, 20000.0)); + render.update(&tree, rsc); + assert!( + screen.expand_tail_tools(rsc, true), + "the fixture's only row must be the tool run" + ); + render.update(&tree, rsc); + render.take_counters(); + (screen, tree, render) + } + + /// The text shapes it costs to *open* a group of three cards whose + /// calls carry `output` -- the cards themselves, since the collapsed + /// group before the expansion drew none. + fn shapes_to_open(output: &str) -> u64 { + let mut rsc = TestRsc { + ui: UiData::default(), + events: EventManager::default(), + }; + let items = run_of(3, output, true); + let (screen, tree) = build_tree( + &mut rsc, + client_core::transcript_fold::group_tool_runs(&items), + ); + let mut render = UiRenderState::new(); + render.resize((1080.0, 20000.0)); + render.update(&tree, &mut rsc); + render.take_counters(); + + assert!( + screen.expand_tail_tools(&mut rsc, true), + "the fixture's only row must be the tool run" + ); + render.update(&tree, &mut rsc); + let (_, _, _, shapes) = render.take_counters(); + shapes + } + + /// **The O(last block) discipline, for tool cards** (RUST.md's P1b). + /// A collapsed card draws its summary line and nothing else, so the + /// kilobyte outputs the bench fixture carries cost nothing until + /// somebody opens one. Counted in *text shapes*, the number a draw + /// counter cannot stand in for: the widgets are the same either way, + /// and it is parley's work that would grow with the output. + /// + /// The group is *opened* here, so all three cards are really drawn -- + /// the cheap version of this test (a closed group, which draws no + /// cards at all) would pass without saying anything about a card. + #[test] + fn collapsed_cards_shape_only_their_summary_lines() { + let long: String = std::iter::repeat_n("a line of tool output\n", 4_000).collect(); + assert!(long.len() > 80_000, "the long case must actually be long"); + + let short_shapes = shapes_to_open("ok\n"); + let long_shapes = shapes_to_open(&long); + assert!( + short_shapes > 0, + "opening a group must shape something, or this compares two zeroes" + ); + assert_eq!( + short_shapes, long_shapes, + "three collapsed cards shaped {long_shapes} text layouts over 80 kB of output \ + against {short_shapes} over three bytes -- a collapsed card is laying out \ + something it does not draw" + ); + } + + /// What one arriving result costs, in `Widget::draw` calls, in a run of + /// `count` calls -- with the group open, so every card is really on + /// screen and a rebuild of the wrong scope would show. + fn cost_of_one_result(count: usize) -> u64 { + let mut rsc = TestRsc { + ui: UiData::default(), + events: EventManager::default(), + }; + let before = run_of(count, "", false); + let mut after = before.clone(); + after[0] = call("t0", "the result", true); + + let (screen, tree, mut render) = open_run(&mut rsc, &before); + screen.apply(&mut rsc, &before, &after); + render.update(&tree, &mut rsc); + assert_eq!( + screen.take_rebuilds(), + 0, + "a result arriving must not rebuild the whole screen" + ); + let (draws, _, _, _) = render.take_counters(); + draws + } + + /// **A result changes one card**, whatever else is in the run -- + /// `RowBlocks::apply_delta`'s discipline applied to a group, which is + /// a column of cards (`tool::ToolRow::apply_calls`). Stated as a + /// comparison rather than a number, because the number is whatever a + /// card happens to be made of and would have to be edited every time + /// the card gains a widget; what must not change is that it does not + /// grow with the run. + #[test] + fn a_result_arriving_redraws_one_card_whatever_the_run_holds() { + let small = cost_of_one_result(3); + let large = cost_of_one_result(12); + assert!( + small > 0, + "a result must redraw *something*, or this compares two zeroes" + ); + assert_eq!( + small, large, + "one result redrew {large} widgets in a twelve-call run against {small} in a \ + three-call one -- the other cards are being rebuilt with it" + ); + } + + /// The group's own state: opening it draws the cards, closing it takes + /// them away again, and the reader's choice survives a result arriving + /// in the middle of it. + #[test] + fn a_group_opens_and_closes_and_keeps_its_state_across_a_result() { + let mut rsc = TestRsc { + ui: UiData::default(), + events: EventManager::default(), + }; + let before = run_of(3, "", false); + let mut after = before.clone(); + after[1] = call("t1", "done", true); + + let (screen, tree) = build_tree( + &mut rsc, + client_core::transcript_fold::group_tool_runs(&before), + ); + let mut render = UiRenderState::new(); + render.resize((1080.0, 20000.0)); + render.update(&tree, &mut rsc); + + // Closed, a group is one line: no card is registered at all, which + // is what makes the kilobyte outputs free. + assert_eq!(screen.tail_card_count(), 0); + assert!(screen.expand_tail_tools(&mut rsc, true)); + assert_eq!(screen.tail_card_count(), 3); + + // A result arriving must not close what the reader opened -- the + // card is rebuilt, and being open is the reader's state rather + // than the event's. + screen.apply(&mut rsc, &before, &after); + render.update(&tree, &mut rsc); + assert_eq!(screen.take_rebuilds(), 0); + assert_eq!(screen.tail_card_count(), 3, "the group closed under a result"); + + assert!(screen.expand_tail_tools(&mut rsc, false)); + assert_eq!(screen.tail_card_count(), 0); + } + + /// A call that joins a run while it is the live row appends one card + /// rather than rebuilding the row -- the other half of `apply_calls`, + /// and the case a page join does *not* produce (that one goes through + /// `Rebuild`). + #[test] + fn a_call_joining_an_open_run_appends_one_card() { + let mut rsc = TestRsc { + ui: UiData::default(), + events: EventManager::default(), + }; + let before = run_of(2, "ok", true); + let mut after = before.clone(); + after.push(call("t2", "", false)); + + let (screen, tree, mut render) = open_run(&mut rsc, &before); + assert_eq!(screen.tail_card_count(), 2); + screen.apply(&mut rsc, &before, &after); + render.update(&tree, &mut rsc); + assert_eq!(screen.take_rebuilds(), 0, "an appended call is not a rebuild"); + assert_eq!(screen.tail_card_count(), 3); + } + + /// A tool row that becomes something else is a different row, not a + /// changed one. Without the guard in `apply_calls` a `UserMsg` would + /// reach the card builder, whose `debug_assert` is the last line of + /// defence rather than the first. + #[test] + fn a_tail_that_stops_being_tool_calls_falls_back_to_a_rebuild() { + let mut rsc = TestRsc { + ui: UiData::default(), + events: EventManager::default(), + }; + let before = vec![user(1, "stable"), call("t0", "", false)]; + let after = vec![user(1, "stable"), user(2, "not a tool call at all")]; + let (screen, _tree) = build_tree( + &mut rsc, + client_core::transcript_fold::group_tool_runs(&before), + ); + screen.apply(&mut rsc, &before, &after); + assert_eq!( + screen.take_rebuilds(), + 0, + "this is a ReplaceLast, not a whole-screen rebuild" + ); + // The row that replaced it is a message, so it keeps blocks rather + // than cards -- and nothing panicked on the way. + assert_eq!(screen.tail_card_count(), 0); + } + } diff --git a/iris/transcript-ui/src/markdown.rs b/iris/transcript-ui/src/markdown.rs index 3cc9c94..e704345 100644 --- a/iris/transcript-ui/src/markdown.rs +++ b/iris/transcript-ui/src/markdown.rs @@ -399,7 +399,7 @@ fn options() -> Options { /// (`highlight`'s module doc), so the offsets are walked once rather than /// converted per span -- a fence is scanned on every delta that lands in /// it, and it is the only block a delta re-renders. -fn highlight_into(spans: &mut Vec, text: &str, range: Range, language: Language) { +pub(crate) fn highlight_into(spans: &mut Vec, text: &str, range: Range, language: Language) { let code = &text[range.clone()]; // char index -> byte offset within `code`, plus the end, so a span's // `end` is always in range. diff --git a/iris/transcript-ui/src/row.rs b/iris/transcript-ui/src/row.rs index 9256a1b..39ee8c2 100644 --- a/iris/transcript-ui/src/row.rs +++ b/iris/transcript-ui/src/row.rs @@ -25,6 +25,7 @@ use crate::markdown::{BlockFrame, Link, frame_of, render_block}; use crate::selection::{SelKey, Selection}; +use crate::tool::ToolRow; use client_core::markdown_blocks::{Block, BlockKind, common_prefix, split_blocks}; use client_core::transcript_fold::{QuestionCard, TranscriptItem, TranscriptRow as FoldedRow}; use iris::prelude::*; @@ -461,105 +462,20 @@ where build_text_row(rsc, list, selection, key, sender, &markdown_src) } -/// A run of adjacent tool calls: collapsed to a one-line summary by -/// default, expanding in place to every call's own tool/input/output on -/// tap -- see the module doc for the hold-the-edge contract this wires -/// against `list`. -fn build_tools( - rsc: &mut Rsc, - list: WeakWidget, - selection: Rc>, - key: RowKey, - calls: Vec, -) -> StrongWidget -where - Rsc::State: FocusHost + OpenUrl, -{ - let expanded = Rc::new(RefCell::new(false)); - // `.add_strong` (not `.add`) because nothing else in the tree holds a - // strong reference to this `WidgetPtr` the way a container's own - // `add_strong`-on-its-children does for an ordinary child -- this row - // *is* the top of its own subtree, so it has to own itself. - let ptr_strong = WidgetPtr::new().add_strong(rsc); - let ptr = ptr_strong.weak(); - - let summary_text = format!("\u{25b8} {} tool calls", calls.len()); - let full_text = calls - .iter() - .map(|c| match c { - TranscriptItem::ToolRun { - tool, - input, - output, - .. - } => tool_call_markdown(tool, input, output), - other => item_content(other).1, - }) - .collect::>() - .join("\n\n"); - - fn build_content( - rsc: &mut Rsc, - list: WeakWidget, - selection: Rc>, - key: RowKey, - expanded: bool, - summary: &str, - full: &str, - ) -> StrongWidget - where - Rsc::State: FocusHost + OpenUrl, - { - // Every block of the previous content goes first: collapsing a - // five-block expansion back to a one-line summary registers only - // `(key, 0)`, and blocks 1..5 would be left in `Selection` - // pointing at widgets `ptr.replace` is about to free -- the same - // class of bug docs/REVIEW-2026-09-06.md's finding 1 found in the - // `Rebuild` arm, reached the other way. - selection.borrow_mut().unregister(key); - let text = if expanded { full } else { summary }; - build_text_row(rsc, list, selection, key, Some("Tools"), text).0 - } - - let content = build_content( - rsc, - list, - selection.clone(), - key, - false, - &summary_text, - &full_text, - ); - ptr(rsc).set(content); - - ptr.on(CursorSense::click(), move |ctx, rsc| { - // `List::note_tap` wants a viewport-relative position, but the - // click event only knows where inside *this row* it landed - // (`ctx.data.pos`) -- `List::extent` (last frame's on-screen box - // for this row's key) is what turns the two into the position - // `list.rs`'s hold-the-edge layout pass resolves against, per the - // module doc's contract. - let (top, _bottom) = list(rsc).extent(key).unwrap_or((0.0, 0.0)); - list(rsc).note_tap(top + ctx.data.pos.y); - - let was_expanded = *expanded.borrow(); - *expanded.borrow_mut() = !was_expanded; - let content = build_content( - rsc, - list, - selection.clone(), - key, - !was_expanded, - &summary_text, - &full_text, - ); - // The old content's `StrongWidget` is freed when this drops -- - // the removal half of the row this click just replaced. - let _old = ptr(rsc).replace(content); - }) - .add(rsc); - - ptr_strong.any() +/// What a row keeps so the next event can change part of it instead of +/// all of it -- one variant per kind of row that has such a path. +/// +/// Two mechanisms would have been two answers to the same question ("what +/// can this row do cheaply?"), so the caller holds one of these for its +/// tail row and asks it, rather than holding a `RowBlocks` and a +/// `ToolRow` and choosing between them at each call site. +pub enum TailRow { + /// A message: a column of one text widget per markdown block, so a + /// streamed delta costs the last block. + Blocks(RowBlocks), + /// A tool call or a run of them: a column of cards, so an arriving + /// result costs one card. + Tools(ToolRow), } pub fn build_row( @@ -567,26 +483,38 @@ pub fn build_row( list: WeakWidget, selection: Rc>, row: &FoldedRow, -) -> (RowKey, StrongWidget, Option) + working: bool, +) -> (RowKey, StrongWidget, Option) where Rsc::State: FocusHost + OpenUrl, { - match row { - FoldedRow::Single(item) => { - let key = row_key(&item.key()); - let (widget, blocks) = build_single(rsc, list, selection, key, item); - (key, widget, Some(blocks)) - } - FoldedRow::Tools(calls) => { - let key = row_key(&calls[0].key()); - // `None`: a run of tool calls is never what a reply streams - // into, and its own expand/collapse replaces the whole - // content anyway, so there is no delta path to keep state for. - ( - key, - build_tools(rsc, list, selection, key, calls.clone()), - None, - ) + // A lone tool call is a card too, not a message with markdown in it: + // `group_tool_runs` leaves one call as a `Single` because "Called 1 + // tool" hides a card to say the same thing in more words, and the + // *card* is what both cases draw (`ToolRows.kt`). + let calls = match row { + FoldedRow::Single(item @ TranscriptItem::ToolRun { .. }) => { + Some(std::slice::from_ref(item)) } + FoldedRow::Tools(calls) => Some(calls.as_slice()), + FoldedRow::Single(_) => None, + }; + if let Some(calls) = calls { + let key = row_key(&calls[0].key()); + let (widget, tools) = crate::tool::build_tool_row( + rsc, + list, + selection, + key, + calls.to_vec(), + working, + ); + return (key, widget, Some(TailRow::Tools(tools))); } + let FoldedRow::Single(item) = row else { + unreachable!("every Tools row took the branch above"); + }; + let key = row_key(&item.key()); + let (widget, blocks) = build_single(rsc, list, selection, key, item); + (key, widget, Some(TailRow::Blocks(blocks))) } diff --git a/iris/transcript-ui/src/tool.rs b/iris/transcript-ui/src/tool.rs new file mode 100644 index 0000000..6840ce8 --- /dev/null +++ b/iris/transcript-ui/src/tool.rs @@ -0,0 +1,876 @@ +//! Tool-call cards and the runs they are grouped into -- the port of +//! `ToolRows.kt`/`ToolInput.kt` (RUST.md's P1b). +//! +//! One card per call. Closed, it is a single line: the tool's name and +//! what the call is for ([`client_core::tool_summary::parse_tool_input`]'s +//! `title`). The command itself is not on it, because a wrapped command +//! turns one row into four and a run of them into a wall. Open, it shows +//! the description, the input and the output. +//! +//! **A collapsed card lays out its summary line and nothing else.** Not an +//! optimisation -- the discipline this crate is built to. The bench +//! fixture carries tool outputs of tens of kilobytes, and a collapsed card +//! that built a text widget for one would pay parley for text nobody can +//! see. `collapsed_cards_shape_only_their_summary_lines` in `lib.rs` holds +//! it, counting `UiRenderState`'s text-shape counter the same way +//! `a_delta_into_a_long_reply_...` counts it for a streamed delta. +//! +//! **Two or more adjacent calls are one group** -- decided in +//! `client_core::transcript_fold::group_tool_runs`/`adopt_run` and never +//! re-derived here. A group is a header, a column of cards on its own +//! surface, and a bar at its foot: it closes from either end, because a +//! long group's header scrolls off while its last call is still on screen, +//! and the reader who wants it shut is looking at the bottom. +//! +//! **A result arriving replaces one card.** [`ToolRow::apply_calls`] is +//! the group's half of `RowBlocks::apply_delta`'s discipline: a group is a +//! column of cards, and a `ToolEnd` changes exactly one of them. +//! +//! **Every tap here is a tap** -- `GestureOutcome::Tapped` out of the one +//! `DragArbiter` `Selection` already owns, never a second detector. A +//! finger that panned the list past a card must not also open it; that +//! rule is written once, in the gesture machine, and this file only reads +//! its answer. + +use crate::markdown::{TEXT_COLOR, VERBATIM_BACKGROUND, highlight_into}; +use crate::selection::Selection; +use client_core::tool_summary::{ToolInput, parse_tool_input}; +use client_core::transcript_fold::{ToolState, TranscriptItem}; +use iris::prelude::*; +use std::{cell::Cell, cell::RefCell, collections::HashMap, rc::Rc, time::Instant}; + +/// A card's own fill: Surface 0, what Material's filled `Card` resolves to +/// under `Theme.kt`'s scheme. One step *above* the page, so a card reads +/// as an object on it. +const CARD_FILL: UiColor = UiColor::new(0x31, 0x32, 0x44, 255); +/// The surface a group's cards sit on: Mantle, one step *below* the page. +/// That surface is the single cue saying these calls belong together, and +/// it goes below rather than above because the cards are already above -- +/// two steps in the same direction render as one flat block. +const GROUP_FILL: UiColor = UiColor::new(0x18, 0x18, 0x25, 255); +/// A tool's name, and any of the call's own words. +const NAME_COLOR: UiColor = TEXT_COLOR; +/// The summary line and the leftover input fields: Subtext 0, the Compose +/// app's `onSurfaceVariant` -- structure about the call rather than the +/// call's own words. +const MUTED_COLOR: UiColor = UiColor::new(0xA6, 0xAD, 0xC8, 255); + +/// Waiting on a person -- Peach, `Theme.kt`'s `awaitingColor`. The same +/// colour a question card takes, because it is the same fact. +const AWAITING_COLOR: UiColor = UiColor::new(0xFA, 0xB3, 0x87, 255); +/// The call itself failed -- Red, the scheme's `error`/`failedColor`. +const FAILED_COLOR: UiColor = UiColor::new(0xF3, 0x8B, 0xA8, 255); +/// **Nobody found out** -- Yellow, `Theme.kt`'s `warningColor`. Its own +/// colour *and* its own word: the expensive confusion is between this and +/// a call that finished having printed nothing, those two share an empty +/// output, and a difference in kind cannot be carried by colour alone. +const UNKNOWN_COLOR: UiColor = UiColor::new(0xF9, 0xE2, 0xAF, 255); + +/// A tool's name (Material `titleSmall`). +const NAME_SIZE: f32 = 14.0; +/// The summary line, and the input and output text (`bodySmall`). +const BODY_SIZE: f32 = 12.0; +/// The state word, the "Output" heading and the group's own count +/// (`labelSmall`). +const LABEL_SIZE: f32 = 11.0; + +/// The room inside a card, and so the height a bar of one line of text +/// comes to (`ToolRows.kt`'s `GROUP_INSET_LARGE`). +const CARD_PAD_DP: f32 = 12.0; +/// How far the stack of calls is held off the edge of the surface it sits +/// on -- the container's own padding, not an indent. +const GROUP_INSET_DP: f32 = 4.0; +/// Enough to read the join as a join rather than as one tall card. +const GROUP_GAP_DP: f32 = 2.0; +/// A card's corner: `shapes.medium`, the same as every other card in the +/// app. +const CARD_RADIUS_DP: f32 = 12.0; +/// The gap between the parts of a card's header line, and between the +/// stacked parts of an open card. +const GAP_DP: f32 = 8.0; +/// Smaller than a card's radius, and deliberately: a verbatim block sits +/// *inside* one, and a rounded rectangle drawn at the same radius as the +/// one behind it reads as a misprint (`RawBlock.kt`). +const RAW_RADIUS_DP: f32 = 4.0; +/// The room inside a verbatim block. +const RAW_PAD_DP: f32 = 8.0; + +/// How much of a tool's output an open card draws before it offers the +/// rest behind a tap. +/// +/// **A divergence from Compose, on purpose.** `ToolCard` draws the whole +/// output however long, and gets away with it because a Compose `Text` +/// inside a `LazyColumn` is laid out lazily; here the output is one text +/// widget, and shaping a hundred kilobytes of it through parley is the +/// cost `docs/EXPLORER.md`'s `EDIT_LIMIT` was measured against. Lines +/// *and* bytes because the two run out at different times -- a diff is +/// many short lines, a minified file is one enormous one. +const OUTPUT_LINES: usize = 80; +const OUTPUT_BYTES: usize = 4096; + +/// The mark that says a card opens, always drawn from the **monospace** +/// face. +/// +/// Not a style choice: `NotoSans-Regular.ttf`, which every other string +/// here is set in, has no glyph at U+25B8/U+25BE/U+25B4 at all, while +/// `NotoSansMono-Regular.ttf` does -- read out of both bundled `cmap`s on +/// 2026-09-06. A missing glyph is the failure nobody who wrote the code +/// ever sees, so the face that has the glyph is named at the one place the +/// character is written. IRIS_TODO's "a drawn chevron" has the real fix, +/// which needs a line primitive iris does not have. +const CLOSED_MARK: &str = "\u{25b8}"; +const OPEN_MARK: &str = "\u{25be}"; +const UP_MARK: &str = "\u{25b4}"; + +/// Which cards the reader has opened, and which have had their whole +/// output asked for. +/// +/// Outside the widget tree on purpose: a card is rebuilt when its result +/// arrives, and being open is the reader's state rather than the event's +/// -- held in the widget, it would silently close the moment the tool +/// answered. Keyed by the call's own id, which survives a regroup. Its +/// path out is [`ToolRow::apply_calls`], which drops the entry for any +/// call no longer in the row. +#[derive(Default)] +struct ToolRowState { + group_expanded: bool, + open: HashMap, + whole_output: HashMap, +} + +/// Everything a handler needs to redraw part of this row, in one `Rc` so +/// that a handler registered once keeps working against calls that arrive +/// later. The rebuild functions read `calls` fresh rather than capturing a +/// call, which is what lets [`ToolRow::apply_calls`] replace a card's +/// content without re-registering its gesture. +struct Shared { + calls: RefCell>, + state: RefCell, + /// One `WidgetPtr` per call, in order -- what makes a result cost one + /// card. Empty while the group is collapsed, because a collapsed group + /// draws no cards at all. Its path out is [`build_content`], which + /// clears it before building whatever replaces them. + cards: RefCell>>, + /// The column those cards sit in, so a call appended to a run can be + /// pushed into it. `None` unless the group is open. + column: RefCell>>, + /// The whole row's content, swapped when the group opens or closes. + /// Filled in immediately after construction -- the `WidgetPtr` cannot + /// exist before the `Rc` every handler inside it captures. + content: RefCell>>, + list: WeakWidget, + selection: Rc>, + key: RowKey, + /// Whether a call in this row could still be running -- the caller's + /// `session_working`, and `false` for every row behind the newest, + /// whose turn has already ended. The one input to [`ToolState`] that + /// is not a property of the call itself, and what separates "still + /// going" from "nobody found out". + working: Cell, +} + +/// One transcript row's worth of tool calls, kept by the caller for the +/// row a result can still land in -- the tool-call counterpart of +/// [`crate::row::RowBlocks`], and the reason a `ToolEnd` costs one card +/// rather than a row. +pub struct ToolRow { + shared: Rc, +} + +/// Register `f` as this widget's **tap**, panning the list instead when +/// the finger moves. +/// +/// The one gesture entry point in this file. `Selection::drag` with no row +/// is the same call `row.rs` makes with one: it drives the shared +/// `DragArbiter`, so a drag starting on a card scrolls (and flings) the +/// transcript exactly as one starting on a paragraph does, and only a +/// press that committed to nothing comes back as `Tapped`. A bare +/// `CursorSense::click()` here would be a second, disagreeing detector -- +/// it fires at the end of a pan too, so every scroll that began on a card +/// would also toggle it. +fn on_tap( + rsc: &mut Rsc, + ptr: WeakWidget, + shared: &Rc, + f: impl Fn(&mut Rsc) + 'static, +) where + Rsc::State: FocusHost + OpenUrl, +{ + let (list, selection) = (shared.list, shared.selection.clone()); + ptr.on( + CursorSense::click_or_drag() | CursorSense::unclick(), + move |ctx, rsc| { + let outcome = selection.borrow_mut().drag( + rsc, + list, + None, + ctx.data.cursor.pos, + ctx.data.sense, + Instant::now(), + ctx.data.render, + ); + if outcome == GestureOutcome::Tapped { + f(rsc); + } + }, + ) + .add(rsc); +} + +/// Hold the edge the reader is looking at while this row changes height. +/// +/// `List::note_tap` wants a viewport-relative position and this row only +/// knows its own box, so `List::extent` (last frame's on-screen box for +/// this key) turns the two into the position `list.rs`'s hold-the-edge +/// pass resolves against -- the two-step contract that module's doc +/// describes for `AGENTS.md`'s `holdTopEdge`. +fn note_tap(rsc: &mut impl UiRsc, shared: &Shared) { + let (top, _bottom) = (shared.list)(rsc).extent(shared.key).unwrap_or((0.0, 0.0)); + (shared.list)(rsc).note_tap(top); +} + +fn text(content: impl Into, size: f32, color: UiColor) -> TextBuilder { + wtext(content).size(size).color(color).text_align(Align::LEFT) +} + +/// A verbatim block: monospace on the surface everything verbatim in this +/// app sits on, not wrapped, panning sideways on a finger. +/// +/// Not wrapped for `ToolInput.kt`'s reason -- a wrapped command hides +/// where its arguments end, and the long one is the one being read +/// closely. The same `scrollable_on(Axis::X).masked()` a markdown fence +/// gets in `row.rs`, so a command and a fence behave the same way under a +/// finger. +fn raw_block(rsc: &mut Rsc, body: TextBuilder) -> StrongWidget +where + Rsc::State: FocusHost, +{ + let field = body + .family(Family::Monospace) + .size(BODY_SIZE) + .wrap(false) + .add(rsc); + field + .scrollable_on(Axis::X) + .masked() + .pad(dp(RAW_PAD_DP)) + .background(rect(VERBATIM_BACKGROUND).radius(dp(RAW_RADIUS_DP))) + .width(rest(1)) + .add_strong(rsc) + .any() +} + +/// The word a card shows for what became of the call, and the colour it is +/// in. `None` for a call that simply worked -- the ordinary outcome says +/// nothing, the way it says nothing in Compose. +/// +/// Colour by consequence: the same red wherever something failed, the same +/// peach wherever the turn is stopped on a person, yellow where the answer +/// is that nobody knows. +fn state_mark(state: ToolState) -> Option<(&'static str, UiColor)> { + match state { + // A spinner would say the machine is working; while this call + // waits on an answer the machine is doing nothing at all, so the + // card says whose move it is instead (`ToolRows.kt`). + ToolState::Deciding => Some(("your turn", AWAITING_COLOR)), + ToolState::Running => Some(("running", MUTED_COLOR)), + ToolState::Failed => Some(("failed", FAILED_COLOR)), + ToolState::NoResult => Some(("no result", UNKNOWN_COLOR)), + ToolState::Succeeded => None, + } +} + +/// What a screen reader is given for one card, and what a `ui-trace` +/// script taps by: the tool, what the call is for, and how it went when +/// that is anything but "fine" -- the same three things the Compose card's +/// own text says, in the order it says them. +fn card_label(tool: &str, parsed: &ToolInput, state: ToolState) -> String { + let mut name = tool.to_string(); + if let Some(title) = parsed.title() { + name.push_str(": "); + name.push_str(title); + } + if let Some((word, _)) = state_mark(state) { + name.push_str(" ("); + name.push_str(word); + name.push(')'); + } + name +} + +/// The heading a group carries, closed or open. Compose's exact wording, +/// because it is also the name every `ui-trace` script taps it by. +fn group_label(count: usize) -> String { + format!("Called {count} tools") +} + +/// `output` cut to what an open card draws, with the line count it was cut +/// from; `None` when the whole of it fits. +/// +/// Cut at the **head**, keeping the beginning: a tool's output is read +/// from the top, and the line saying what went wrong is nearly always the +/// first. (A path is identified by its other end; this is not a path.) +fn capped(output: &str) -> Option<(&str, usize)> { + debug_assert!(OUTPUT_LINES > 0 && OUTPUT_BYTES > 0, "an empty cap shows nothing at all"); + let by_lines = output + .char_indices() + .filter(|(_, c)| *c == '\n') + .nth(OUTPUT_LINES - 1) + .map(|(i, _)| i); + let by_bytes = (output.len() > OUTPUT_BYTES).then(|| { + let mut end = OUTPUT_BYTES; + while !output.is_char_boundary(end) { + end -= 1; + } + end + }); + let cut = match (by_lines, by_bytes) { + (Some(a), Some(b)) => a.min(b), + (a, b) => a.or(b)?, + }; + Some((&output[..cut], output.lines().count())) +} + +/// The tool's output, or the reason there is none to show. +/// +/// The empty cases are drawn rather than left blank: "it printed nothing" +/// and "nothing ever came back" are the pair [`ToolState`] exists to keep +/// apart, and a card that drew neither would show the same thing for both. +fn output_block( + rsc: &mut Rsc, + shared: &Rc, + index: usize, + id: &str, + output: &str, + call_state: ToolState, +) -> StrongWidget +where + Rsc::State: FocusHost + OpenUrl, +{ + if output.is_empty() { + let (words, colour) = match call_state { + ToolState::Succeeded => ("No output", MUTED_COLOR), + ToolState::Failed => ("Failed, with no output", FAILED_COLOR), + ToolState::NoResult => ("No result ever arrived", UNKNOWN_COLOR), + ToolState::Running | ToolState::Deciding => ("No output yet", MUTED_COLOR), + }; + return text(words, LABEL_SIZE, colour).add_strong(rsc).any(); + } + + let whole = shared + .state + .borrow() + .whole_output + .get(id) + .copied() + .unwrap_or(false); + let shown = if whole { None } else { capped(output) }; + let mut column = Span::empty(Dir::DOWN).gap(dp(2)); + column.push(text("Output", LABEL_SIZE, NAME_COLOR).add_strong(rsc).any()); + // What the tool printed, in the face it was written for: this is + // column-aligned far more often than it is prose, and a proportional + // font destroys the alignment that carried the meaning. + let body = text( + shown.map_or(output, |(head, _)| head).to_string(), + BODY_SIZE, + NAME_COLOR, + ); + column.push(raw_block(rsc, body)); + if let Some((_, lines)) = shown { + let label = format!("Show all {lines} lines"); + let more_strong = WidgetPtr::new().add_strong(rsc); + let more = more_strong.weak(); + let words = text(label.clone(), LABEL_SIZE, MUTED_COLOR) + .label(label) + .add_strong(rsc); + more(rsc).set(words); + let shared_for_tap = shared.clone(); + let id = id.to_string(); + on_tap(rsc, more, shared, move |rsc| { + note_tap(rsc, &shared_for_tap); + shared_for_tap + .state + .borrow_mut() + .whole_output + .insert(id.clone(), true); + redraw_card(rsc, &shared_for_tap, index); + }); + column.push(more_strong.any()); + } + column.width(rest(1)).add_strong(rsc).any() +} + +/// One tool call's card content. +/// +/// Collapsed, this is one `Span` of at most four short strings -- no +/// input, no output, nothing whose size is the call's size. +fn build_card(rsc: &mut Rsc, shared: &Rc, index: usize) -> StrongWidget +where + Rsc::State: FocusHost + OpenUrl, +{ + let call = shared.calls.borrow()[index].clone(); + let TranscriptItem::ToolRun { + id, + tool, + input, + output, + .. + } = &call + else { + debug_assert!(false, "a tool row holds only tool calls, not {call:?}"); + return Span::empty(Dir::DOWN).add_strong(rsc).any(); + }; + let parsed = parse_tool_input(tool, input); + let call_state = ToolState::of(&call, shared.working.get()).expect("matched ToolRun above"); + // A call waiting on permission is shown open whatever the reader last + // chose: the command is the thing being decided, and a row saying only + // "Bash" cannot be decided on (`ToolRows.kt`). + let open = + shared.state.borrow().open.get(id).copied().unwrap_or(false) || call_state == ToolState::Deciding; + + let mut header = Span::empty(Dir::RIGHT).gap(dp(GAP_DP)); + header.push( + text(if open { OPEN_MARK } else { CLOSED_MARK }, BODY_SIZE, MUTED_COLOR) + .family(Family::Monospace) + .add_strong(rsc) + .any(), + ); + header.push(text(tool.clone(), NAME_SIZE, NAME_COLOR).add_strong(rsc).any()); + match (open, parsed.title()) { + // Open, the summary is redundant -- the input below is the same + // thing in full -- and the space goes to the timeout instead, at + // the far end, since it is a limit on the call rather than part of + // what the call does. + (true, _) | (false, None) => { + header.push(Span::empty(Dir::RIGHT).width(rest(1)).add_strong(rsc).any()) + } + // One line, clipped rather than shrunk or wrapped: a wrapped + // command turns one row into four and a run of them into a wall. + (false, Some(title)) => header.push( + text(title.to_string(), BODY_SIZE, MUTED_COLOR) + .wrap(false) + .masked() + .width(rest(1)) + .add_strong(rsc) + .any(), + ), + } + if open && let Some(timeout) = &parsed.timeout { + header.push( + text(format!("timeout {timeout}"), LABEL_SIZE, MUTED_COLOR) + .add_strong(rsc) + .any(), + ); + } + if let Some((word, colour)) = state_mark(call_state) { + header.push(text(word, LABEL_SIZE, colour).add_strong(rsc).any()); + } + + let mut column = Span::empty(Dir::DOWN).gap(dp(GAP_DP / 2.0)); + column.push(header.width(rest(1)).add_strong(rsc).any()); + if open { + if let Some(description) = &parsed.description { + // The tool's own prose about what it is doing, so it belongs + // with the reader's text rather than inside the machine's -- + // above the input block rather than in it (`ToolInput.kt`). + column.push( + text(description.clone(), BODY_SIZE, MUTED_COLOR) + .width(rest(1)) + .add_strong(rsc) + .any(), + ); + } + if let Some(subject) = &parsed.subject { + let spans = match parsed.language { + Some(language) => { + let mut spans = Vec::new(); + highlight_into(&mut spans, subject, 0..subject.len(), language); + spans + } + // An unknown language is drawn plain rather than coloured + // by the nearest one -- P1a's rule for a fence, and the + // same reason: a wrong highlight is read as a fact. + None => Vec::new(), + }; + let body = text(subject.clone(), BODY_SIZE, NAME_COLOR).spans(spans); + column.push(raw_block(rsc, body)); + } + if !parsed.rest.is_empty() { + // Never dropped: a field left out would be claiming the tool + // had no other input when it might (`ToolInput.kt`). + let body = text(parsed.rest.join("\n"), BODY_SIZE, MUTED_COLOR); + column.push(raw_block(rsc, body)); + } + column.push(output_block(rsc, shared, index, id, output, call_state)); + } + + column + .width(rest(1)) + .pad(dp(CARD_PAD_DP)) + .background(rect(CARD_FILL).radius(dp(CARD_RADIUS_DP))) + .width(rest(1)) + .label(card_label(tool, &parsed, call_state)) + .add_strong(rsc) + .any() +} + +/// Rebuild card `index` in place. The removal half is the returned +/// `StrongWidget` being dropped, which frees the content this replaced. +fn redraw_card(rsc: &mut Rsc, shared: &Rc, index: usize) +where + Rsc::State: FocusHost + OpenUrl, +{ + let Some(ptr) = shared.card_ptr(index) else { + // Reached only if a handler outlives the card it was registered + // on, which `apply_calls` is written to prevent. + debug_assert!(false, "card {index} has no widget to redraw"); + return; + }; + let content = build_card(rsc, shared, index); + let _old = ptr(rsc).replace(content); +} + +/// A card and the tap that opens it. The gesture is registered **once**, +/// on a `WidgetPtr` whose content is replaced as often as needed -- which +/// is why every rebuild reads the call out of [`Shared`] rather than +/// capturing one. +fn build_card_ptr( + rsc: &mut Rsc, + shared: &Rc, + index: usize, +) -> (StrongWidget, WeakWidget) +where + Rsc::State: FocusHost + OpenUrl, +{ + // The strong handle is the card's one real registration and goes to + // whatever container holds it; the weak one is what the gesture and + // every later redraw address it by. + let strong = WidgetPtr::new().add_strong(rsc); + let ptr = strong.weak(); + shared.cards.borrow_mut().push(ptr); + debug_assert_eq!( + shared.cards.borrow().len(), + index + 1, + "a card's index is its position, and both are the call's" + ); + let content = build_card(rsc, shared, index); + ptr(rsc).set(content); + let for_tap = shared.clone(); + on_tap(rsc, ptr, shared, move |rsc| { + note_tap(rsc, &for_tap); + let Some(id) = for_tap.call_id(index) else { + debug_assert!(false, "tapped card {index} is no longer in the row"); + return; + }; + let was = for_tap.state.borrow().open.get(&id).copied().unwrap_or(false); + for_tap.state.borrow_mut().open.insert(id, !was); + redraw_card(rsc, &for_tap, index); + }); + (strong.any(), ptr) +} + +/// A bar the height of one line of `LABEL_SIZE` text, carrying `mark` +/// centred -- the group's collapse control at its foot. +/// +/// Given the same content as the heading above rather than a height that +/// looks close, so the surface the calls sit on is the same thickness at +/// both ends (`ToolRows.kt`'s `groupBarHeight`, which derives the number +/// from the type for the same reason). +fn collapse_bar(rsc: &mut Rsc, shared: &Rc) -> StrongWidget +where + Rsc::State: FocusHost + OpenUrl, +{ + let strong = WidgetPtr::new().add_strong(rsc); + let ptr = strong.weak(); + let mark = text(UP_MARK, BODY_SIZE, MUTED_COLOR) + .family(Family::Monospace) + .center() + .width(rest(1)) + .pad(dp(CARD_PAD_DP)) + // Anything shown only as a mark still needs a name: this is what + // a screen reader reads and what a `ui-trace` script taps. + .label("Collapse these tool calls") + .add_strong(rsc); + ptr(rsc).set(mark); + let for_tap = shared.clone(); + on_tap(rsc, ptr, shared, move |rsc| toggle_group(rsc, &for_tap)); + strong.any() +} + +/// The row's whole content: a lone card, a closed group's one line, or an +/// open group's header, cards and foot. +/// +/// Rebuilt whole when the group opens or closes, because that is a change +/// of what the row *is* rather than of one card in it. Everything a single +/// card's tap does goes through [`redraw_card`] instead. +fn build_content(rsc: &mut Rsc, shared: &Rc) -> StrongWidget +where + Rsc::State: FocusHost + OpenUrl, +{ + shared.cards.borrow_mut().clear(); + *shared.column.borrow_mut() = None; + let count = shared.calls.borrow().len(); + debug_assert!(count > 0, "a tool row with no calls has nothing to draw"); + + // One call is left alone: "Called 1 tool" hides a card to say the same + // thing in more words, and the run this grouping exists for is the + // burst of five greps nobody wants to scroll past (`ToolRows.kt`). + if count == 1 { + return build_card_ptr(rsc, shared, 0).0; + } + + if !shared.state.borrow().group_expanded { + let heading = group_label(count); + return text(heading.clone(), NAME_SIZE, NAME_COLOR) + .pad(dp(CARD_PAD_DP)) + .width(rest(1)) + .background(rect(CARD_FILL).radius(dp(CARD_RADIUS_DP))) + .width(rest(1)) + .label(heading) + .add_strong(rsc) + .any(); + } + + let heading = group_label(count); + let mut group = Span::empty(Dir::DOWN); + group.push( + text(heading.clone(), NAME_SIZE, NAME_COLOR) + .pad(dp(CARD_PAD_DP)) + .width(rest(1)) + .label(heading) + .add_strong(rsc) + .any(), + ); + let mut column = Span::empty(Dir::DOWN).gap(dp(GROUP_GAP_DP)); + for index in 0..count { + column.push(build_card_ptr(rsc, shared, index).0); + } + let column = column.add(rsc); + *shared.column.borrow_mut() = Some(column); + group.push( + column + .width(rest(1)) + .pad(Padding { + left: dp(GROUP_INSET_DP), + right: dp(GROUP_INSET_DP), + ..Padding::ZERO + }) + .add_strong(rsc) + .any(), + ); + // Shutting it from here anchors the other end: the reader is at the + // bottom of a long group, and what they are looking at is what follows + // it (`ToolRows.kt`'s `CollapseBar`). + group.push(collapse_bar(rsc, shared)); + group + .width(rest(1)) + .background(rect(GROUP_FILL).radius(dp(CARD_RADIUS_DP))) + .width(rest(1)) + .add_strong(rsc) + .any() +} + +fn toggle_group(rsc: &mut Rsc, shared: &Rc) +where + Rsc::State: FocusHost + OpenUrl, +{ + note_tap(rsc, shared); + let was = shared.state.borrow().group_expanded; + shared.state.borrow_mut().group_expanded = !was; + let content = build_content(rsc, shared); + shared.set_content(rsc, content); +} + +impl Shared { + /// Swap the row's whole content. The old `StrongWidget` is freed as it + /// drops here, which is the removal half of what replaced it. + fn set_content(&self, rsc: &mut impl UiRsc, content: StrongWidget) { + let Some(ptr) = *self.content.borrow() else { + debug_assert!( + false, + "the row's content pointer is set before anything can tap it" + ); + return; + }; + let _old = ptr(rsc).replace(content); + } + + fn call_id(&self, index: usize) -> Option { + match self.calls.borrow().get(index) { + Some(TranscriptItem::ToolRun { id, .. }) => Some(id.clone()), + _ => None, + } + } + + fn card_ptr(&self, index: usize) -> Option> { + self.cards.borrow().get(index).copied() + } +} + +/// Build a tool row: one card, or a run of them under one heading. +/// +/// `working` is the caller's `session_working` **for this row** -- true +/// only for the newest row of a session that is still doing something. +/// Every row behind it belongs to a turn that has ended, so a call in one +/// with no result never came back rather than still running. +pub fn build_tool_row( + rsc: &mut Rsc, + list: WeakWidget, + selection: Rc>, + key: RowKey, + calls: Vec, + working: bool, +) -> (StrongWidget, ToolRow) +where + Rsc::State: FocusHost + OpenUrl, +{ + let shared = Rc::new(Shared { + calls: RefCell::new(calls), + state: RefCell::new(ToolRowState::default()), + cards: RefCell::new(Vec::new()), + column: RefCell::new(None), + content: RefCell::new(None), + list, + selection, + key, + working: Cell::new(working), + }); + // `.add_strong`, not `.add`: this row *is* the top of its own subtree, + // so nothing else holds it and it has to own itself (`row.rs`). + let content_strong = WidgetPtr::new().add_strong(rsc); + let content = content_strong.weak(); + *shared.content.borrow_mut() = Some(content); + let inner = build_content(rsc, &shared); + content(rsc).set(inner); + (content_strong.any(), ToolRow { shared }) +} + +impl ToolRow { + /// The calls this row is currently drawing -- what a caller passes + /// back to [`Self::apply_calls`] when something other than the calls + /// themselves changed (the session's status). + pub fn calls(&self) -> Vec { + self.shared.calls.borrow().clone() + } + + /// How many cards this row currently draws -- zero for a closed + /// group, which is the whole reason its calls' outputs cost nothing. + /// Only the tests ask; nothing on screen is decided by it. + #[cfg(test)] + pub(crate) fn card_count(&self) -> usize { + self.shared.cards.borrow().len() + } + + /// Open or close this row's group without a tap. + /// + /// Exists because the expanded appearance is otherwise unreachable + /// from anything that cannot press the screen -- a headless + /// screenshot on this displayless machine, and a test. Same path a tap + /// takes, including `List::note_tap`, so what it produces is what a + /// reader would have got. + pub fn set_group_expanded(&self, rsc: &mut Rsc, expanded: bool) + where + Rsc::State: FocusHost + OpenUrl, + { + if self.shared.state.borrow().group_expanded != expanded { + toggle_group(rsc, &self.shared); + } + } + + /// Bring this row up to date with `calls` **without** rebuilding the + /// cards that did not change, and say whether that was possible. + /// `false` means the caller must rebuild the row the ordinary way. + /// + /// This is what the per-card `WidgetPtr` exists for: a `ToolEnd` + /// changes one call, so it costs one card, whatever else is in the + /// run. The same rule `RowBlocks::apply_delta` follows for the blocks + /// of a message. + /// + /// Refused when a call *left* the row or the calls were reordered: a + /// card's index is its call's position, and every registered handler + /// closed over that index. A run only ever grows at its end while it + /// is the live row, so the refused cases are the ones a page join + /// produces -- and those go through `Rebuild` already. + pub fn apply_calls( + &mut self, + rsc: &mut Rsc, + calls: &[TranscriptItem], + working: bool, + ) -> bool + where + Rsc::State: FocusHost + OpenUrl, + { + // A row that was tool calls and now holds something else is a + // different row, not a changed one -- and nothing here could draw + // a message anyway. + if calls.is_empty() + || !calls + .iter() + .all(|c| matches!(c, TranscriptItem::ToolRun { .. })) + { + return false; + } + let old = self.shared.calls.borrow().clone(); + if calls.len() < old.len() { + return false; + } + // Whether the group is drawn as one card or as a stack changes at + // exactly one call, and that is a different row, not a changed + // one. + if (old.len() == 1) != (calls.len() == 1) { + return false; + } + let changed: Vec = (0..old.len()).filter(|&i| old[i] != calls[i]).collect(); + self.shared.working.set(working); + *self.shared.calls.borrow_mut() = calls.to_vec(); + // The path out for the reader's own state: a call that is no + // longer in this row keeps no entry in `open`/`whole_output`. + let ids: std::collections::HashSet = calls + .iter() + .filter_map(|c| match c { + TranscriptItem::ToolRun { id, .. } => Some(id.clone()), + _ => None, + }) + .collect(); + { + let mut state = self.shared.state.borrow_mut(); + state.open.retain(|id, _| ids.contains(id)); + state.whole_output.retain(|id, _| ids.contains(id)); + } + + // A collapsed group draws no cards, so a changed call is worth + // nothing on screen -- unless the *count* changed, which is the + // whole of what its one line says. + if self.shared.cards.borrow().is_empty() { + if calls.len() != old.len() { + let content = build_content(rsc, &self.shared); + self.shared.set_content(rsc, content); + } + return true; + } + debug_assert_eq!( + self.shared.cards.borrow().len(), + old.len(), + "an open row draws exactly one card per call" + ); + + for index in changed { + redraw_card(rsc, &self.shared, index); + } + for index in old.len()..calls.len() { + let Some(column) = *self.shared.column.borrow() else { + // Only a group has a column to append to, and a lone card + // that gained a neighbour is a different row. + return false; + }; + let (widget, _card) = build_card_ptr(rsc, &self.shared, index); + // `get_mut` marks the column dirty, which is what gets the new + // card drawn; its removal half is the row's own, since the + // column owns the child strongly (`RowBlocks::apply_delta`). + if let Some(column) = rsc.ui_mut().widgets.get_mut(&column) { + column.push(widget); + } + } + true + } +}

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