Skip to main content

loong_contracts/
audit_types.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::contracts::{Capability, CapabilityToken, ExecutionRoute};
6
7#[non_exhaustive]
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
9pub enum ExecutionPlane {
10    Connector,
11    Runtime,
12    Tool,
13    Memory,
14}
15
16#[non_exhaustive]
17#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
18pub enum PlaneTier {
19    Legacy,
20    Core,
21    Extension,
22}
23
24#[non_exhaustive]
25#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
26pub enum AuditEventKind {
27    TokenIssued {
28        token: CapabilityToken,
29    },
30    TokenRevoked {
31        token_id: String,
32    },
33    TaskDispatched {
34        pack_id: String,
35        task_id: String,
36        route: ExecutionRoute,
37        required_capabilities: Vec<Capability>,
38    },
39    ConnectorInvoked {
40        pack_id: String,
41        connector_name: String,
42        operation: String,
43        required_capabilities: Vec<Capability>,
44    },
45    PlaneInvoked {
46        pack_id: String,
47        plane: ExecutionPlane,
48        tier: PlaneTier,
49        primary_adapter: String,
50        delegated_core_adapter: Option<String>,
51        operation: String,
52        required_capabilities: Vec<Capability>,
53    },
54    SecurityScanEvaluated {
55        pack_id: String,
56        scanned_plugins: usize,
57        total_findings: usize,
58        high_findings: usize,
59        medium_findings: usize,
60        low_findings: usize,
61        blocked: bool,
62        block_reason: Option<String>,
63        categories: Vec<String>,
64        finding_ids: Vec<String>,
65    },
66    PluginTrustEvaluated {
67        pack_id: String,
68        scanned_plugins: usize,
69        official_plugins: usize,
70        verified_community_plugins: usize,
71        unverified_plugins: usize,
72        high_risk_plugins: usize,
73        high_risk_unverified_plugins: usize,
74        blocked_auto_apply_plugins: usize,
75        review_required_plugin_ids: Vec<String>,
76        review_required_bridges: Vec<String>,
77    },
78    ToolSearchEvaluated {
79        pack_id: String,
80        query: String,
81        returned: usize,
82        trust_filter_applied: bool,
83        query_requested_tiers: Vec<String>,
84        structured_requested_tiers: Vec<String>,
85        effective_tiers: Vec<String>,
86        conflicting_requested_tiers: bool,
87        filtered_out_candidates: usize,
88        filtered_out_tier_counts: BTreeMap<String, usize>,
89        top_provider_ids: Vec<String>,
90    },
91    ProviderFailover {
92        pack_id: String,
93        provider_id: String,
94        reason: String,
95        stage: String,
96        model: String,
97        attempt: usize,
98        max_attempts: usize,
99        status_code: Option<u16>,
100        try_next_model: bool,
101        auto_model_mode: bool,
102        candidate_index: usize,
103        candidate_count: usize,
104    },
105    AuthorizationDenied {
106        pack_id: String,
107        token_id: String,
108        reason: String,
109    },
110}
111
112#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
113pub struct AuditEvent {
114    pub event_id: String,
115    pub timestamp_epoch_s: u64,
116    pub agent_id: Option<String>,
117    pub kind: AuditEventKind,
118}