Skip to main content

vigil_types/
effect.rs

1//! EffectVector / EffectKind:Vigil 自己推断出来的真实影响(不依赖 tool description)。
2
3use serde::{Deserialize, Serialize};
4
5/// 单次调用被推断出的副作用向量。
6///
7/// 所有 policy / 风险评分 / UI 展示都基于此结构,而非 tool description。
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
9pub struct EffectVector {
10    /// 归类后的效应集合(可能多条同时成立)。
11    pub effects: Vec<EffectKind>,
12    /// 读文件:规范化后的绝对路径。
13    pub paths_read: Vec<String>,
14    /// 写文件:规范化后的绝对路径。
15    pub paths_write: Vec<String>,
16    /// 网络目标:`host[:port]`。
17    pub network_hosts: Vec<String>,
18    /// 引用的 secret alias(`secret://...` 形式,不含真实值)。
19    pub secret_refs: Vec<String>,
20    /// 对外发送的接收方(邮箱 / webhook / issue 仓库等)。
21    pub recipients: Vec<String>,
22    /// 是否具破坏性(rm -rf / DROP / DELETE 等)。
23    pub destructive: bool,
24    /// 是否可回滚(Outbox 模式 / dry-run 可用)。
25    pub reversible: bool,
26}
27
28/// 效应种类。
29#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
30#[non_exhaustive]
31#[serde(rename_all = "PascalCase")]
32pub enum EffectKind {
33    /// 读本地文件。
34    FsRead,
35    /// 写本地文件。
36    FsWrite,
37    /// 读数据库。
38    DbRead,
39    /// 写数据库。
40    DbWrite,
41    /// 出站网络。
42    NetOutbound,
43    /// Wasm 执行。
44    ExecWasm,
45    /// 原生进程执行。
46    ExecNative,
47    /// 使用 secret(走 lease)。
48    SecretUse,
49    /// 在浏览器中提交表单 / 发送消息。
50    BrowserSubmit,
51    /// 向第三方通讯渠道发送(邮件 / IM / PR comment)。
52    CommSend,
53    /// 凭据交换 / OAuth 回调等。
54    CredentialExchange,
55}