diff --git a/Cargo.lock b/Cargo.lock index 6b1a41df14..d8d5131be2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4751,6 +4751,7 @@ dependencies = [ "goose-server", "http 1.4.0", "ratatui", + "ratatui-textarea", "rmcp 0.16.0", "rustyline", "serde", @@ -4765,7 +4766,6 @@ dependencies = [ "tracing", "tracing-appender", "tracing-subscriber", - "tui-textarea", "unicode-width 0.2.2", "uuid", ] @@ -8158,6 +8158,18 @@ dependencies = [ "termwiz", ] +[[package]] +name = "ratatui-textarea" +version = "0.7.0" +source = "git+https://github.com/dotdash/ratatui-textarea?rev=a31abb7b0b999f4e35fed65b76f8d1cb41d6e85e#a31abb7b0b999f4e35fed65b76f8d1cb41d6e85e" +dependencies = [ + "ratatui-core", + "ratatui-crossterm", + "ratatui-widgets", + "regex", + "unicode-width 0.2.2", +] + [[package]] name = "ratatui-widgets" version = "0.3.0" @@ -11556,17 +11568,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tui-textarea" -version = "0.7.0" -source = "git+https://github.com/madsmao/tui-textarea?rev=48792febd9d454fefdd869de0e75849cad6e6007#48792febd9d454fefdd869de0e75849cad6e6007" -dependencies = [ - "crossterm", - "ratatui", - "regex", - "unicode-width 0.2.2", -] - [[package]] name = "tungstenite" version = "0.28.0" diff --git a/Cargo.toml b/Cargo.toml index b8f21e424f..7c4070e6f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -74,7 +74,3 @@ tracing-opentelemetry = "0.32" codegen-units = 1 lto = true -[patch.crates-io] -# Use PR #122 which updates to ratatui 0.30 (fixes unicode-width conflict with pctx) -# https://github.com/rhysd/tui-textarea/pull/122 -tui-textarea = { git = "https://github.com/madsmao/tui-textarea", rev = "48792febd9d454fefdd869de0e75849cad6e6007" } diff --git a/crates/goose-tui/Cargo.toml b/crates/goose-tui/Cargo.toml index 849aaca192..e1a8ec5a8a 100644 --- a/crates/goose-tui/Cargo.toml +++ b/crates/goose-tui/Cargo.toml @@ -15,7 +15,8 @@ rmcp = { workspace = true } anyhow = "1.0" ratatui = { version = "0.30.0", features = ["unstable-rendered-line-info"] } crossterm = { version = "0.29", features = ["event-stream"] } -tui-textarea = { version = "0.7.0", features = ["search"] } +# TODO: Move to ratatui/ratatui-textarea once https://github.com/ratatui/ratatui-textarea/pull/3 merges +ratatui-textarea = { git = "https://github.com/dotdash/ratatui-textarea", rev = "a31abb7b0b999f4e35fed65b76f8d1cb41d6e85e", features = ["search"] } tokio = { version = "1.43", features = ["full"] } tokio-util = { version = "0.7.10", features = ["full"] } axum = { version = "0.8.1", features = ["ws", "macros"] } diff --git a/crates/goose-tui/src/components/input.rs b/crates/goose-tui/src/components/input.rs index f7cfc7d956..2ee0bc86a5 100644 --- a/crates/goose-tui/src/components/input.rs +++ b/crates/goose-tui/src/components/input.rs @@ -13,7 +13,7 @@ use ratatui::style::Style; use ratatui::text::Span; use ratatui::widgets::{Block, BorderType, Borders, Clear, List, ListItem}; use ratatui::Frame; -use tui_textarea::TextArea; +use ratatui_textarea::TextArea; pub const MAX_HISTORY_ENTRIES: usize = 100; pub const MAX_HISTORY_ENTRY_SIZE: usize = 10_000; @@ -127,8 +127,9 @@ impl<'a> InputComponent<'a> { self.textarea = TextArea::new(lines); self.textarea.set_placeholder_text("Type a message..."); self.textarea.set_cursor_line_style(Style::default()); - self.textarea.move_cursor(tui_textarea::CursorMove::Bottom); - self.textarea.move_cursor(tui_textarea::CursorMove::End); + self.textarea + .move_cursor(ratatui_textarea::CursorMove::Bottom); + self.textarea.move_cursor(ratatui_textarea::CursorMove::End); } pub fn seed_history(&mut self, messages: &[goose::conversation::message::Message]) { diff --git a/crates/goose-tui/src/components/popups/builder/mod.rs b/crates/goose-tui/src/components/popups/builder/mod.rs index 9c305d957b..ab396db141 100644 --- a/crates/goose-tui/src/components/popups/builder/mod.rs +++ b/crates/goose-tui/src/components/popups/builder/mod.rs @@ -15,7 +15,7 @@ use goose_client::ToolInfo; use ratatui::layout::Rect; use ratatui::widgets::{Clear, ListState, ScrollbarState}; use ratatui::Frame; -use tui_textarea::TextArea; +use ratatui_textarea::TextArea; use widgets::new_text_input; #[derive(Clone, Copy, PartialEq, Default)] diff --git a/crates/goose-tui/src/components/popups/builder/widgets.rs b/crates/goose-tui/src/components/popups/builder/widgets.rs index c74b235f78..0c06b50bd9 100644 --- a/crates/goose-tui/src/components/popups/builder/widgets.rs +++ b/crates/goose-tui/src/components/popups/builder/widgets.rs @@ -4,7 +4,7 @@ use crate::utils::styles::Theme; use ratatui::style::{Modifier, Style}; use ratatui::text::{Line, Span}; use ratatui::widgets::{Block, BorderType, Borders, ListItem}; -use tui_textarea::TextArea; +use ratatui_textarea::TextArea; pub fn input_block(title: &str, focused: bool, theme: &Theme) -> Block<'static> { let border_color = if focused { diff --git a/crates/goose-tui/src/components/popups/schedule.rs b/crates/goose-tui/src/components/popups/schedule.rs index 7f408183f3..3055fc0842 100644 --- a/crates/goose-tui/src/components/popups/schedule.rs +++ b/crates/goose-tui/src/components/popups/schedule.rs @@ -15,7 +15,7 @@ use ratatui::widgets::{ Block, BorderType, Borders, Clear, List, ListItem, ListState, Paragraph, ScrollbarState, }; use ratatui::Frame; -use tui_textarea::TextArea; +use ratatui_textarea::TextArea; const CRON_PRESETS: [(&str, &str, &str); 5] = [ ("1", "0 * * * *", "Every hour"),