Skip to main content

starweaver_core/
events.rs

1//! Stable event records and event-kind identifiers shared across execution layers.
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use crate::Metadata;
7
8/// Product-neutral event published by runtime context and projected into streams.
9#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
10pub struct AgentEvent {
11    /// Event type.
12    pub kind: String,
13    /// Event payload.
14    #[serde(default)]
15    pub payload: Value,
16    /// Event metadata.
17    #[serde(default, skip_serializing_if = "Metadata::is_empty")]
18    pub metadata: Metadata,
19}
20
21impl AgentEvent {
22    /// Create an event.
23    #[must_use]
24    pub fn new(kind: impl Into<String>, payload: Value) -> Self {
25        Self {
26            kind: kind.into(),
27            payload,
28            metadata: Metadata::default(),
29        }
30    }
31
32    /// Attach event metadata.
33    #[must_use]
34    pub fn with_metadata(mut self, metadata: Metadata) -> Self {
35        self.metadata = metadata;
36        self
37    }
38}
39
40/// Custom event kind emitted when a tool call is handed to an external client.
41pub const DEFERRED_TOOL_REQUESTED_EVENT_KIND: &str = "deferred_requested";
42
43/// Custom event kind emitted with a full task board snapshot.
44pub const TASK_SNAPSHOT_EVENT_KIND: &str = "task_snapshot";