kotoba_cli/
lib.rs

1//! Kotoba CLI - Deno-inspired command line interface
2//!
3//! Merkle DAG: cli_interface (build_order: 10)
4//! Provides: Cli, Commands, ConfigManager, ProgressBar, LogFormatter
5//! Dependencies: types, distributed_engine, network_protocol, cid_system
6
7use clap::{Parser, Subcommand};
8
9// Re-export core types for CLI interface
10pub use config::ConfigManager;
11pub use logging::LogFormatter;
12pub use utils::ProgressBar;
13
14// Import modules
15pub mod commands;
16pub mod config;
17pub mod logging;
18pub mod utils;
19
20/// Kotoba CLIのメイン構造体
21/// Merkle DAG: cli_interface -> Cli component
22#[derive(Parser)]
23#[command(name = "kotoba")]
24#[command(about = "Kotoba - GP2-based Graph Rewriting Language")]
25#[command(version = env!("CARGO_PKG_VERSION"))]
26pub struct Cli {
27    #[command(subcommand)]
28    pub command: Commands,
29}
30
31/// Kotoba CLIのサブコマンド
32/// Merkle DAG: cli_interface -> Commands component
33#[derive(Subcommand)]
34pub enum Commands {
35    /// プロジェクト情報を表示
36    Info {
37        /// 詳細表示
38        #[arg(short, long)]
39        verbose: bool,
40    },
41
42    /// ドキュメント生成・管理コマンド
43    #[command(subcommand)]
44    Docs(DocsCommand),
45}
46
47/// ドキュメント関連サブコマンド
48/// Merkle DAG: docs_cli -> docs generate, docs serve, docs search, docs init
49#[derive(Subcommand)]
50pub enum DocsCommand {
51    /// ドキュメントを生成
52    Generate {
53        /// ソースディレクトリ
54        #[arg(short, long, default_value = "src")]
55        source: String,
56
57        /// 出力ディレクトリ
58        #[arg(short, long, default_value = "docs")]
59        output: String,
60
61        /// 設定ファイル
62        #[arg(short, long)]
63        config: Option<String>,
64
65        /// ウォッチモード
66        #[arg(short, long)]
67        watch: bool,
68    },
69
70    /// ドキュメントサーバーを起動
71    Serve {
72        /// ポート番号
73        #[arg(short, long, default_value = "3000")]
74        port: u16,
75
76        /// ホストアドレス
77        #[arg(short, long, default_value = "127.0.0.1")]
78        host: String,
79
80        /// ドキュメントディレクトリ
81        #[arg(short, long, default_value = "docs")]
82        dir: String,
83
84        /// オープン後にブラウザで開く
85        #[arg(short, long)]
86        open: bool,
87    },
88
89    /// ドキュメントを検索
90    Search {
91        /// 検索クエリ
92        query: String,
93
94        /// 検索対象ディレクトリ
95        #[arg(short, long, default_value = "docs")]
96        dir: String,
97
98        /// JSON形式で出力
99        #[arg(short, long)]
100        json: bool,
101    },
102
103    /// ドキュメント設定を初期化
104    Init {
105        /// 設定ファイル名
106        #[arg(short, long, default_value = "kdoc.toml")]
107        config: String,
108
109        /// 強制的に上書き
110        #[arg(short, long)]
111        force: bool,
112    },
113}