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}