Skip to main content

deepstrike_sdk/
run_event.rs

1use crate::tools::ToolChunk;
2
3/// Streaming events from `RuntimeRunner` and `ExecutionPlane`.
4#[derive(Debug, Clone)]
5pub enum RunEvent {
6    TextDelta(String),
7    ThinkingDelta(String),
8    ToolCall {
9        id: String,
10        name: String,
11    },
12    ToolDelta {
13        call_id: String,
14        name: String,
15        chunk: ToolChunk,
16    },
17    ToolSuspend {
18        call_id: String,
19        name: String,
20        suspension_id: String,
21        payload: Option<serde_json::Value>,
22    },
23    ToolResult {
24        call_id: String,
25        content: String,
26        is_error: bool,
27        is_fatal: bool,
28        error_kind: Option<deepstrike_core::types::message::ToolErrorKind>,
29    },
30    ToolArgumentRepaired {
31        call_id: String,
32        name: String,
33        original_arguments: String,
34        repaired_arguments: String,
35    },
36    /// Governance pipeline denied a tool call before execution.
37    /// Emitted alongside `ToolResult { is_error: true }` so callers can
38    /// distinguish policy denials from tool-side errors and write the correct
39    /// `SessionEvent::ToolDenied` audit record.
40    ToolDenied {
41        call_id: String,
42        tool_name: String,
43        reason: String,
44    },
45    /// Governance pipeline requires user approval (ask_user verdict).
46    /// Emitted before `ToolResult { is_error: true }` so runners can write
47    /// `SessionEvent::PermissionRequested` + `SessionEvent::PermissionResolved`.
48    PermissionRequest {
49        call_id: String,
50        tool_name: String,
51        arguments: String,
52        reason: String,
53    },
54    PermissionResolved {
55        call_id: String,
56        tool_name: String,
57        approved: bool,
58        responder: String,
59        reason: Option<String>,
60    },
61    Done {
62        iterations: u32,
63        total_tokens: u64,
64        status: String,
65    },
66    Error(String),
67}