vigil_types/session.rs
1//! Session:一次 agent / browser / MCP 活动上下文。
2
3use serde::{Deserialize, Serialize};
4
5/// 一次活动上下文的起止 + 来源。
6///
7/// `risk_score` 为该 session 的累计风险评分(0-100),由 firewall 增量累加。
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
9pub struct Session {
10 /// 唯一 id(UUIDv4 文本形式)。
11 pub id: String,
12 /// 来源通道。
13 pub source: SessionSource,
14 /// 可选:发起端应用标识(如 "Cursor" / "Claude Desktop" / "Chrome")。
15 pub app_name: Option<String>,
16 /// Unix epoch 秒。
17 pub started_at: i64,
18 /// Unix epoch 秒;None 表示仍在活动中。
19 pub ended_at: Option<i64>,
20 /// 累计风险评分(0-100)。
21 pub risk_score: u8,
22}
23
24/// session 的发起通道。
25///
26/// `#[non_exhaustive]` 是故意的:后续迭代新增通道(如 Ide / IdeExtension)时,
27/// 下游消费者必须显式处理 _,避免漏分支导致安全失败。
28#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
29#[non_exhaustive]
30#[serde(rename_all = "PascalCase")]
31pub enum SessionSource {
32 /// 通过 MCP 协议进入。
33 McpClient,
34 /// 通过浏览器扩展进入。
35 Browser,
36 /// 直接由桌面 UI 发起。
37 Desktop,
38 /// 命令行 / 脚本。
39 Cli,
40}