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}