Skip to main content

xz_skill/types/
context.rs

1use std::sync::Arc;
2
3/// Execution context passed to skill runtime — provides access to LLM, search, memory, etc.
4#[derive(Clone)]
5pub struct ExecutionContext {
6    pub user_id: String,
7    pub session_id: String,
8    pub messages: Vec<Message>,
9    pub provider: Option<Arc<dyn xz_provider::LlmProvider>>,
10    pub search: Option<Arc<dyn std::any::Any + Send + Sync>>,
11    pub memory: Option<Arc<dyn std::any::Any + Send + Sync>>,
12}
13
14impl std::fmt::Debug for ExecutionContext {
15    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16        f.debug_struct("ExecutionContext")
17            .field("user_id", &self.user_id)
18            .field("session_id", &self.session_id)
19            .field("messages", &self.messages)
20            .field("provider", &self.provider.is_some())
21            .field("search", &self.search.is_some())
22            .field("memory", &self.memory.is_some())
23            .finish()
24    }
25}
26
27/// A simple chat message in the execution context.
28#[derive(Debug, Clone)]
29pub struct Message {
30    pub role: String,
31    pub content: String,
32}
33
34impl Default for Message {
35    fn default() -> Self {
36        Self {
37            role: "user".into(),
38            content: String::new(),
39        }
40    }
41}