Skip to main content

evorule_cli/
cli.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (C) 2026 EvoRule Project
3// This file is part of EvoRule, licensed under GNU Affero General Public License v3 or later.
4//! CLI 参数定义(clap derive)
5//!
6//! 子命令:
7//! - `run`:加载并执行 JSON 规则,输出 fact log
8//! - `replay`:重放 fact log(pretty-print)
9//! - `diff`:对比两个 fact log(按 FactId 对齐)
10//! - `validate`:校验 JSON 规则文件(用 tier1 RuleValidator)
11//! - `verify-chain`:验证 fact log 哈希链完整性
12//! - `anchor-keygen`:生成 G-A1 审计锚点签名密钥对(一次性运维)
13//! - `verify-anchors`:离线校验 G-A1 审计锚点真实性(防抵赖)
14
15use std::path::PathBuf;
16
17use clap::{Parser, Subcommand};
18
19/// evorule: 没有智能,只有执行的最佳实践
20#[derive(Parser, Debug)]
21#[command(
22    name = "evorule",
23    version,
24    about = "evorule: no intelligence, only best practices of execution",
25    long_about = "evorule CLI - 加载并执行用户编写的 JSON 规则。\n\
26                  零网络、零遥测、零系统依赖,适合合规敏感用户本地使用。\n\
27                  fact log 采用 evorule-reactor WAL 格式,与 evorule-governance 审计链互通。"
28)]
29pub struct Cli {
30    #[command(subcommand)]
31    pub command: Command,
32}
33
34#[derive(Subcommand, Debug)]
35pub enum Command {
36    /// 加载并执行 JSON 规则(输出 fact log)
37    Run {
38        /// 规则目录(包含 *.json 文件)
39        rules_dir: PathBuf,
40
41        /// 初始 payload(JSON 字符串,可选,默认 {})
42        #[arg(long, conflicts_with = "payload_file")]
43        payload: Option<String>,
44
45        /// 从文件读取初始 payload(JSON 格式)
46        #[arg(long)]
47        payload_file: Option<PathBuf>,
48
49        /// 输出文件(默认 stdout)
50        #[arg(long, short = 'o')]
51        output: Option<PathBuf>,
52
53        /// 最大执行步数上界(默认 10000,超限发 Fact::Error 退出)
54        #[arg(long, default_value_t = crate::executor::DEFAULT_MAX_STEPS)]
55        max_steps: usize,
56    },
57
58    /// 重放 fact log(pretty-print 每个 Fact)
59    Replay {
60        /// fact log 文件(JSON Lines 格式,与 tier1 reactor WAL 互通)
61        fact_log: PathBuf,
62    },
63
64    /// 对比两个 fact log(按 FactId 对齐,非 HashSet)
65    Diff {
66        /// 第一个 fact log
67        a: PathBuf,
68        /// 第二个 fact log
69        b: PathBuf,
70    },
71
72    /// 校验 JSON 规则文件(用 tier1 RuleValidator,语法+语义验证)
73    Validate {
74        /// 规则目录
75        rules_dir: PathBuf,
76    },
77
78    /// 验证 fact log 哈希链完整性(blake3,与 evorule-governance 互通)
79    VerifyChain {
80        /// fact log 文件
81        fact_log: PathBuf,
82    },
83
84    /// 生成 G-A1 审计锚点签名密钥对(一次性运维操作)
85    ///
86    /// 产出私钥种子(32 字节, 64 位 hex)与公钥(32 字节, 64 位 hex)。
87    /// 私钥必须私密保存,用于配置审计器签名锚点;公钥可分发给第三方用 `verify-anchors` 离线验证。
88    AnchorKeygen {
89        /// 私钥种子写入文件(缺省打印到 stdout)
90        #[arg(long)]
91        output: Option<PathBuf>,
92    },
93
94    /// 离线校验 G-A1 审计锚点真实性(防抵赖)
95    ///
96    /// 输入为 `evorule-governance` `Auditor::export()` 产生的审计导出 JSON。
97    /// 校验每个锚点的链式链接 + 用公钥重算载荷验签,证明审计链确由私钥持有者生成。
98    VerifyAnchors {
99        /// 审计导出 JSON 文件
100        audit: PathBuf,
101        /// 公钥 hex(缺省使用导出物内嵌 verifying_key)
102        #[arg(long)]
103        pubkey: Option<String>,
104    },
105}