Skip to main content

kaizen/shell/
projects.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2//! `kaizen projects list` — enumerate registered workspaces on this machine.
3
4use anyhow::Result;
5use std::path::Path;
6
7pub fn cmd_projects_list() -> Result<()> {
8    let paths = crate::core::machine_registry::list_paths()?;
9    if paths.is_empty() {
10        println!("no registered projects (run kaizen init inside a workspace first)");
11        return Ok(());
12    }
13    print_table(&paths);
14    Ok(())
15}
16
17fn print_table(paths: &[std::path::PathBuf]) {
18    let header = format!("{:<24}  {:<40}  {}", "NAME", "SLUG", "PATH");
19    println!("{header}");
20    println!("{}", "-".repeat(header.len()));
21    for path in paths {
22        let name = segment(path);
23        let slug = crate::core::paths::workspace_slug(path);
24        println!("{name:<24}  {slug:<40}  {}", path.display());
25    }
26}
27
28fn segment(path: &Path) -> &str {
29    path.file_name().and_then(|n| n.to_str()).unwrap_or("?")
30}