Skip to main content

typed_pack/
typed_pack.rs

1use serde_json::json;
2use yoagent_state::{
3    ActorRef, MemoryEventStore, NodeId, ObjectType, Pack, PackId, RelationType, YoAgentRuntime,
4    YoAgentState,
5};
6
7#[tokio::main]
8async fn main() -> Result<(), Box<dyn std::error::Error>> {
9    let state = YoAgentState::load(MemoryEventStore::new()).await?;
10    let mut runtime = YoAgentRuntime::new(state.clone());
11    runtime.register_pack(
12        Pack::new(PackId::new("pack_lineage"), "lineage", "0.1.0")
13            .add_object_type(ObjectType::new("goal").require("title"))
14            .add_object_type(ObjectType::new("task").require("title"))
15            .add_relation_type(
16                RelationType::new("serves")
17                    .from_kind("task")
18                    .to_kind("goal"),
19            ),
20    );
21
22    runtime
23        .create_typed_node(
24            ActorRef::agent("demo"),
25            NodeId::new("goal_1"),
26            "goal",
27            json!({ "title": "Improve retry reliability" }),
28        )
29        .await?;
30    runtime
31        .create_typed_node(
32            ActorRef::agent("demo"),
33            NodeId::new("task_1"),
34            "task",
35            json!({ "title": "Investigate timeout" }),
36        )
37        .await?;
38    runtime
39        .create_typed_relation(
40            ActorRef::agent("demo"),
41            NodeId::new("task_1"),
42            "serves",
43            NodeId::new("goal_1"),
44            json!({}),
45        )
46        .await?;
47
48    println!("{}", serde_json::to_string_pretty(&state.graph().await)?);
49    Ok(())
50}