//! Tools Shared Utilities //! //! Provides common functionality for all Tools ecosystem CLIs: //! - Configuration discovery across multiple locations //! - Manifest management for resource tracking //! - Database path resolution //! - XDG Base Directory support //! - Project auto-detection and interactive selection //! //! # Configuration Discovery //! //! All Tools CLIs search for configuration in this order (uses first found): //! 1. `.project/{name}` - External projects using Tools //! 2. `.vapora/{name}` - VAPORA platform projects //! 3. `.coder/{name}` - Documentation tracking //! 4. Current directory - Fallback //! //! # Project Auto-Detection //! //! Tools can automatically detect projects by searching for `.project/` or `.vapora/` //! configuration files in the current working directory and parent directories: //! //! ```no_run //! use tools_shared::detect_project_from_cwd; //! //! if let Some(project) = detect_project_from_cwd("config.toml") { //! println!("Working on project: {}", project.name); //! } //! ``` //! //! # Global Database Support //! //! Tools can use a single global database to manage multiple projects: //! //! ```no_run //! use tools_shared::find_global_db_path; //! //! let db_path = find_global_db_path("my-tool"); //! // Returns: ~/.local/share/tools/my-tool/my-tool.db //! ``` //! //! # Database Migrations //! //! Tools can execute SQL migrations from files: //! //! ```no_run //! use tools_shared::run_migration_file; //! //! # fn example() -> anyhow::Result<()> { //! run_migration_file("migrations/001_initial.sql")?; //! # Ok(()) } //! ``` //! //! # Examples //! //! ```no_run //! use tools_shared::find_config_path; //! use std::path::Path; //! //! // Find a configuration file //! let config = find_config_path("tracking.toml") //! .unwrap_or_else(|| std::path::PathBuf::from("tracking.toml")); //! println!("Using config: {}", config.display()); //! ``` pub mod config_finder; pub mod db_migration; pub mod global_db; pub mod project_detection; pub mod project_selector; pub mod xdg; #[cfg(feature = "manifest")] pub mod manifest_manager; // Re-export commonly used items from config_finder pub use config_finder::{ find_config_path, find_config_path_or, find_config_path_warn_conflicts, get_global_syntaxis_config_dir, get_global_vapora_config_dir, get_local_syntaxis_config_dir, get_local_vapora_config_dir, }; // Re-export XDG utilities pub use xdg::{ensure_dir, tool_cache_dir, tool_config_dir, tool_data_dir}; // Re-export global database utilities pub use global_db::{find_global_db_path, find_global_db_path_custom, global_db_exists}; // Re-export project detection pub use project_detection::{ detect_project_from_cwd, detect_project_from_path, load_last_project, save_last_project, DetectedProject, }; // Re-export project selector #[cfg(feature = "interactive")] pub use project_selector::select_project; pub use project_selector::{format_project_option, SelectableProject}; // Re-export database migration utilities pub use db_migration::{ find_migration_files, has_migration_directory, list_migration_files, migration_directory, run_migration_file, }; #[cfg(feature = "manifest")] pub use manifest_manager::{ConfigEntry, Manifest, ResourceType};