feat(cli): shorten file paths in tool output display
Add three-level path shortening hierarchy for cleaner CLI output:
1. Project path -> <project_name>/... (when project loaded via /project)
2. Workspace path -> ./... (relative to current working directory)
3. Home path -> ~/... (fallback for paths under home directory)
Changes:
- Add shorten_path() and shorten_paths_in_command() functions in display.rs
- Add project_path/project_name fields to ConsoleUiWriter
- Add set_workspace_path(), set_project_path(), clear_project() to UiWriter trait
- Add ui_writer() getter to Agent struct
- Wire up project path setting in /project and /unproject commands
- Set workspace path when creating agents in all CLI modes
Before: ● read_file | /Users/dhanji/icloud/butler/projects/appa_estate/status.md
After: ● read_file | appa_estate/status.md (with project loaded)
● read_file | ./src/main.rs (workspace-relative)
● read_file | ~/Documents/file.txt (home-relative)
This commit is contained in:
@@ -126,6 +126,20 @@ pub trait UiWriter: Send + Sync {
|
||||
/// When in agent mode, tool names may be displayed differently (e.g., different color).
|
||||
/// Default implementation does nothing.
|
||||
fn set_agent_mode(&self, _is_agent_mode: bool) {}
|
||||
|
||||
/// Set the workspace path for shortening displayed paths.
|
||||
/// Paths under this directory will be shown as `./relative/path`.
|
||||
/// Default implementation does nothing.
|
||||
fn set_workspace_path(&self, _path: std::path::PathBuf) {}
|
||||
|
||||
/// Set the active project path and name for shortening displayed paths.
|
||||
/// Paths under this directory will be shown as `<project_name>/relative/path`.
|
||||
/// Default implementation does nothing.
|
||||
fn set_project_path(&self, _path: std::path::PathBuf, _name: String) {}
|
||||
|
||||
/// Clear the active project (when project is unloaded).
|
||||
/// Default implementation does nothing.
|
||||
fn clear_project(&self) {}
|
||||
}
|
||||
|
||||
/// A no-op implementation for when UI output is not needed
|
||||
|
||||
Reference in New Issue
Block a user