adk_computer_use/contracts/
session.rs1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5use std::collections::BTreeMap;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct SessionEvent {
11 pub schema_version: u32,
13 pub event_id: String,
15 pub sequence: u64,
17 pub session_id: String,
19 #[serde(skip_serializing_if = "Option::is_none")]
21 pub action_id: Option<String>,
22 #[serde(rename = "type")]
24 pub event_type: String,
25 pub at: String,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub principal_id: Option<String>,
30 pub payload: Value,
32}
33
34#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct SessionFollowUp {
38 pub follow_up_id: String,
40 pub sequence: u64,
42 pub session_id: String,
44 pub principal_id: String,
46 pub instruction: String,
48 pub created_at: String,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
54pub struct SessionFollowUpPage {
55 #[serde(rename = "follow_ups")]
57 pub follow_ups: Vec<SessionFollowUp>,
58 #[serde(rename = "next_sequence")]
60 pub next_sequence: u64,
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct RuntimeSession {
67 pub session_id: String,
69 pub principal_id: String,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub execution_group_id: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub objective: Option<String>,
77 pub state: String,
79 pub revision: u64,
81 pub created_at: String,
83 pub updated_at: String,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub waiting_reason: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub recovered: Option<bool>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub completion: Option<SessionCompletionEvidence>,
94}
95
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct SessionCompletionEvidence {
100 pub summary: String,
102 pub postconditions: Vec<PostconditionEvidence>,
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub last_app_id: Option<String>,
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub last_window_id: Option<Value>,
110 pub action_counts: BTreeMap<String, u64>,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub reason: Option<String>,
115 pub completed_at: String,
117}
118
119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
121#[serde(rename_all = "camelCase")]
122pub struct PostconditionEvidence {
123 pub description: String,
125 pub satisfied: bool,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub evidence_hash: Option<String>,
130}
131
132#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
134#[serde(rename_all = "camelCase")]
135pub struct SessionDeletionResult {
136 pub session_id: String,
138 pub deleted: bool,
140 pub deleted_events: u64,
142 pub deleted_receipts: u64,
144 pub deleted_evidence_frames: u64,
146 pub revoked_grants: u64,
148 pub retained_events: u64,
150 #[serde(skip_serializing_if = "Option::is_none")]
152 pub retention_marker_id: Option<String>,
153}