Skip to main content

project_map_cli_rust/cli/
commands.rs

1use clap::{Parser, Subcommand};
2
3#[derive(Parser)]
4#[command(name = "project-map")]
5#[command(about = "Agent-Native architectural awareness CLI", long_about = None)]
6pub struct Cli {
7    #[command(subcommand)]
8    pub command: Commands,
9}
10
11#[derive(Subcommand)]
12pub enum Commands {
13    /// Build or refresh the project map index
14    Build {
15        #[arg(short, long, default_value = ".")]
16        root: String,
17        #[arg(short, long, default_value = ".project-map")]
18        out: String,
19    },
20    /// Alias for build
21    Refresh {
22        #[arg(short, long, default_value = ".")]
23        root: String,
24        #[arg(short, long, default_value = ".project-map")]
25        out: String,
26    },
27    /// Find a symbol or file across the codebase
28    Find {
29        #[arg(short, long)]
30        query: Option<String>,
31        #[arg(short, long)]
32        file: Option<String>,
33        #[arg(short, long, default_value = ".project-map")]
34        index: String,
35    },
36    /// Get a dense architectural overview of a specific file
37    Context {
38        #[arg(short, long)]
39        path: String,
40        #[arg(short, long, default_value = ".project-map")]
41        index: String,
42    },
43    /// Analyze the architectural impact of a symbol
44    Impact {
45        #[arg(short, long)]
46        fqn: String,
47        #[arg(short, long, default_value = ".project-map")]
48        index: String,
49    },
50    /// Returns current workspace context and available commands
51    Status {
52        #[arg(short, long, default_value = ".project-map")]
53        index: String,
54    },
55    /// Extract raw code for a specific symbol using AST parsing
56    Fetch {
57        #[arg(short, long)]
58        path: String,
59        #[arg(short, long)]
60        symbol: String,
61        #[arg(short, long, default_value = ".project-map")]
62        index: String,
63    },
64    /// Check the blast radius (dependencies) of a symbol
65    Blast {
66        #[arg(short, long)]
67        path: String,
68        #[arg(short, long)]
69        symbol: String,
70        #[arg(short, long, default_value = ".project-map")]
71        index: String,
72    },
73    /// Semantic keyword search over the codebase index
74    Search {
75        query: String,
76        #[arg(short, long, default_value = ".project-map")]
77        index: String,
78    },
79    /// Start the MCP server
80    Mcp,
81}