Skip to main content

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}