Fix plan tool UI formatting
- Fix vertical bar continuation: │ continues all the way down, only the
very last sub-line (boundary of last item) gets └
- Add visual gap before plan file path and change 📄 to ->
- Dedent file path to align with tree root
- Fix plan_approve to use proper compact tool format (was missing from
is_compact_tool matches! in print_tool_compact, causing it to fall
through to regular output with | prefix)
This commit is contained in:
@@ -473,7 +473,7 @@ impl UiWriter for ConsoleUiWriter {
|
|||||||
self.hint_state.handle_hint(ToolParsingHint::Complete);
|
self.hint_state.handle_hint(ToolParsingHint::Complete);
|
||||||
|
|
||||||
// Handle file operation tools and other compact tools
|
// Handle file operation tools and other compact tools
|
||||||
let is_compact_tool = matches!(tool_name, "read_file" | "write_file" | "str_replace" | "remember" | "screenshot" | "coverage" | "rehydrate" | "code_search");
|
let is_compact_tool = matches!(tool_name, "read_file" | "write_file" | "str_replace" | "remember" | "screenshot" | "coverage" | "rehydrate" | "code_search" | "plan_approve");
|
||||||
if !is_compact_tool {
|
if !is_compact_tool {
|
||||||
// Reset continuation tracking for non-compact tools
|
// Reset continuation tracking for non-compact tools
|
||||||
*self.last_read_file_path.lock().unwrap() = None;
|
*self.last_read_file_path.lock().unwrap() = None;
|
||||||
@@ -754,8 +754,11 @@ impl UiWriter for ConsoleUiWriter {
|
|||||||
let items_len = plan.items.len();
|
let items_len = plan.items.len();
|
||||||
for (i, item) in plan.items.iter().enumerate() {
|
for (i, item) in plan.items.iter().enumerate() {
|
||||||
let is_last_item = i == items_len - 1;
|
let is_last_item = i == items_len - 1;
|
||||||
let item_prefix = if is_last_item { "└" } else { "├" };
|
// All items use ├, sub-lines use │
|
||||||
let child_prefix = if is_last_item { " " } else { "│" };
|
// Only the very last sub-line (boundary of last item) uses └
|
||||||
|
let item_prefix = "├";
|
||||||
|
let child_prefix = "│";
|
||||||
|
let last_child_prefix = if is_last_item { "└" } else { "│" };
|
||||||
|
|
||||||
// State indicator: □ = todo, ◐ = doing, ■ = done, ⊘ = blocked
|
// State indicator: □ = todo, ◐ = doing, ■ = done, ⊘ = blocked
|
||||||
let (state_icon, state_color) = match item.state.as_str() {
|
let (state_icon, state_color) = match item.state.as_str() {
|
||||||
@@ -773,17 +776,18 @@ impl UiWriter for ConsoleUiWriter {
|
|||||||
|
|
||||||
// Touches (dimmed)
|
// Touches (dimmed)
|
||||||
let touches_str = item.touches.join(", ");
|
let touches_str = item.touches.join(", ");
|
||||||
println!(" \x1b[2m{} → {}\x1b[0m", child_prefix, touches_str);
|
println!(" \x1b[2m{} → {}\x1b[0m", child_prefix, touches_str);
|
||||||
|
|
||||||
// Checks (dimmed, compact)
|
// Checks (dimmed, compact)
|
||||||
println!(" \x1b[2m{} ✓ happy: {}\x1b[0m", child_prefix, item.checks.happy.desc);
|
println!(" \x1b[2m{} ✓ happy: {}\x1b[0m", child_prefix, item.checks.happy.desc);
|
||||||
println!(" \x1b[2m{} ✗ negative: {}\x1b[0m", child_prefix, item.checks.negative.desc);
|
println!(" \x1b[2m{} ✗ negative: {}\x1b[0m", child_prefix, item.checks.negative.desc);
|
||||||
println!(" \x1b[2m{} ◇ boundary: {}\x1b[0m", child_prefix, item.checks.boundary.desc);
|
println!(" \x1b[2m{} ◇ boundary: {}\x1b[0m", last_child_prefix, item.checks.boundary.desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// File path link at the end
|
// File path link at the end
|
||||||
if let Some(path) = plan_file_path {
|
if let Some(path) = plan_file_path {
|
||||||
println!(" \x1b[2m 📄 {}\x1b[0m", path);
|
println!(); // Blank line gap
|
||||||
|
println!(" \x1b[2m-> {}\x1b[0m", path);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add blank line after content for readability
|
// Add blank line after content for readability
|
||||||
|
|||||||
Reference in New Issue
Block a user