replay_and_fork/
replay_and_fork.rs1use 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}