Skip to main content

replay_and_fork/
replay_and_fork.rs

1use serde_json::json;
2use yoagent_state::{
3    ActorRef, ForkId, MemoryEventStore, NodeId, StateOp, YoAgentState, diff_graphs,
4};
5
6#[tokio::main]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let state = YoAgentState::load(MemoryEventStore::new()).await?;
9    let first = state
10        .apply_ops(
11            ActorRef::agent("demo"),
12            vec![StateOp::CreateNode {
13                id: NodeId::new("goal_1"),
14                kind: "goal".to_string(),
15                props: json!({ "title": "Improve retry reliability" }),
16            }],
17        )
18        .await?;
19    state
20        .apply_ops(
21            ActorRef::agent("demo"),
22            vec![StateOp::CreateNode {
23                id: NodeId::new("task_1"),
24                kind: "task".to_string(),
25                props: json!({ "title": "Investigate timeout" }),
26            }],
27        )
28        .await?;
29
30    let fork = state
31        .fork_at_event(ForkId::new("fork_before_task"), Some(first))
32        .await?;
33    let diff = diff_graphs(&fork.graph, &state.graph().await);
34    println!("fork_nodes={}", fork.graph.nodes.len());
35    println!("current_nodes={}", state.graph().await.nodes.len());
36    println!("added_nodes={:?}", diff.added_nodes);
37    Ok(())
38}