Skip to main content

roder_dynamic_workflows/
host_api.rs

1use serde::{Deserialize, Serialize};
2
3use crate::model::WorkflowDefinition;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6#[serde(rename_all = "camelCase")]
7pub struct WorkflowAgentLaunch {
8    pub index: u32,
9    pub role: String,
10    pub lane: String,
11    #[serde(default, skip_serializing_if = "Option::is_none")]
12    pub phase: Option<String>,
13    pub description: String,
14    pub prompt: String,
15    #[serde(default, skip_serializing_if = "Option::is_none")]
16    pub model: Option<String>,
17    pub timeout_seconds: u64,
18    #[serde(default)]
19    pub input: serde_json::Value,
20    pub output: String,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
24#[serde(rename_all = "camelCase")]
25pub struct WorkflowCheckpoint {
26    pub key: String,
27    #[serde(default)]
28    pub value: serde_json::Value,
29    pub byte_count: u64,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
33#[serde(rename_all = "camelCase")]
34pub struct WorkflowExecution {
35    pub definition: WorkflowDefinition,
36    pub report: String,
37    #[serde(default)]
38    pub phases: Vec<String>,
39    #[serde(default)]
40    pub agent_launches: Vec<WorkflowAgentLaunch>,
41    #[serde(default)]
42    pub checkpoints: Vec<WorkflowCheckpoint>,
43}
44
45#[derive(Debug, Clone, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub(crate) struct RawWorkflowExecution {
48    pub report: String,
49    #[serde(default)]
50    pub phases: Vec<String>,
51    #[serde(default)]
52    pub agent_launches: Vec<WorkflowAgentLaunch>,
53    #[serde(default)]
54    pub checkpoints: Vec<WorkflowCheckpoint>,
55}