Skip to main content

beam_core/
session.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4use crate::config::BackendType;
5use crate::ipc::{CliUsageLimitState, DisplayMode, ScreenStatus};
6
7#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
8#[serde(rename_all = "snake_case")]
9pub enum SessionScope {
10    Thread,
11    Chat,
12}
13
14#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
15#[serde(rename_all = "snake_case")]
16pub enum ChatMode {
17    Group,
18    Topic,
19    P2p,
20}
21
22impl From<&str> for ChatMode {
23    fn from(value: &str) -> Self {
24        match value {
25            "p2p" | "P2P" => ChatMode::P2p,
26            "topic" | "TOPIC" => ChatMode::Topic,
27            _ => ChatMode::Group,
28        }
29    }
30}
31
32impl Default for SessionScope {
33    fn default() -> Self {
34        Self::Thread
35    }
36}
37
38#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
39#[serde(rename_all = "snake_case")]
40pub enum SessionStatus {
41    Active,
42    Closed,
43}
44
45impl Default for SessionStatus {
46    fn default() -> Self {
47        Self::Active
48    }
49}
50
51#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
52#[serde(rename_all = "snake_case")]
53pub enum PendingResponseCardState {
54    Open,
55    Patched,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Default)]
59pub struct AdoptedFrom {
60    #[serde(default)]
61    pub tmux_target: Option<String>,
62    #[serde(default)]
63    pub zellij_session: Option<String>,
64    #[serde(default)]
65    pub zellij_pane_id: Option<String>,
66    pub original_cli_pid: i32,
67    #[serde(default)]
68    pub session_id: Option<String>,
69    #[serde(default)]
70    pub cli_id: Option<String>,
71    pub cwd: String,
72    #[serde(default)]
73    pub pane_cols: Option<u16>,
74    #[serde(default)]
75    pub pane_rows: Option<u16>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
79pub struct Session {
80    pub session_id: String,
81    pub title: String,
82    pub chat_id: String,
83    pub root_message_id: String,
84    #[serde(default)]
85    pub chat_type: Option<String>,
86    #[serde(default)]
87    pub quote_target_id: Option<String>,
88    #[serde(default)]
89    pub scope: SessionScope,
90    #[serde(default)]
91    pub status: SessionStatus,
92    pub created_at: DateTime<Utc>,
93    #[serde(default)]
94    pub closed_at: Option<DateTime<Utc>>,
95    #[serde(default)]
96    pub working_dir: Option<String>,
97    #[serde(default)]
98    pub web_port: Option<u16>,
99    #[serde(default)]
100    pub worker_token: Option<String>,
101    pub lark_app_id: String,
102    #[serde(default)]
103    pub owner_open_id: Option<String>,
104    #[serde(default)]
105    pub worker_pid: Option<u32>,
106    #[serde(default)]
107    pub cli_id: Option<String>,
108    #[serde(default)]
109    pub cli_bin: Option<String>,
110    #[serde(default)]
111    pub cli_args: Vec<String>,
112    #[serde(default)]
113    pub backend_type: BackendType,
114    #[serde(default)]
115    pub cli_session_id: Option<String>,
116    #[serde(default)]
117    pub last_cli_input: Option<String>,
118    #[serde(default)]
119    pub stream_card_id: Option<String>,
120    #[serde(default)]
121    pub stream_card_nonce: Option<String>,
122    #[serde(default)]
123    pub display_mode: Option<DisplayMode>,
124    #[serde(default)]
125    pub current_screen: Option<String>,
126    #[serde(default)]
127    pub last_screen_status: Option<ScreenStatus>,
128    #[serde(default)]
129    pub usage_limit: Option<CliUsageLimitState>,
130    #[serde(default)]
131    pub current_image_key: Option<String>,
132    #[serde(default)]
133    pub tui_prompt_card_id: Option<String>,
134    #[serde(default)]
135    pub tui_prompt_options: Vec<crate::ipc::TuiPromptOption>,
136    #[serde(default)]
137    pub tui_prompt_multi_select: Option<bool>,
138    #[serde(default)]
139    pub tui_toggled_indices: Vec<usize>,
140    #[serde(default)]
141    pub pending_response_card_id: Option<String>,
142    #[serde(default)]
143    pub pending_response_card_state: Option<PendingResponseCardState>,
144    #[serde(default)]
145    pub last_patched_response_card_id: Option<String>,
146    #[serde(default)]
147    pub terminal_url: Option<String>,
148    #[serde(default)]
149    pub last_final_output_turn_id: Option<String>,
150    #[serde(default)]
151    pub last_final_output: Option<String>,
152    #[serde(default)]
153    pub adopted_from: Option<AdoptedFrom>,
154    #[serde(default)]
155    pub model: Option<String>,
156    #[serde(default)]
157    pub locale: Option<String>,
158    #[serde(default)]
159    pub bot_name: Option<String>,
160    #[serde(default)]
161    pub bot_open_id: Option<String>,
162    #[serde(default)]
163    pub resume_session_id: Option<String>,
164    #[serde(default)]
165    pub disable_cli_bypass: bool,
166    #[serde(default)]
167    pub initial_prompt: Option<String>,
168}