1pub mod application;
6pub mod dashboard;
7pub mod domain;
8pub mod infrastructure;
9pub mod ports;
10pub mod sdk;
11
12pub use stasis_macros::stasis_tool;
13
14#[doc(hidden)]
15pub mod macro_support {
16 pub use async_trait;
17 pub use schemars;
18 pub use serde;
19 pub use serde_json;
20}
21
22pub mod runtime_prelude {
24 pub use crate::application::runtime::in_memory_runtime::{
25 InMemoryRuntime, JobExecutionOutcome, JobHandler,
26 };
27 pub use crate::application::runtime::runtime_factory::{
28 RuntimeBackend, RuntimeComposition, RuntimeFactory, SurrealAuth,
29 };
30 pub use crate::application::runtime::stasis_runtime_builder::StasisRuntimeBuilder;
31 pub use crate::domain::errors::{Result, StasisError};
32 pub use crate::domain::runtime::job::{BackoffPolicy, JobState, NewJob};
33 pub use crate::domain::runtime::recurring::RecurringDefinition;
34}
35
36pub mod runtime_prelude_ext {
38 pub use crate::application::dto::{
39 HeartbeatClusterNodeRequest, RegisterClusterNodeRequest,
40 RegisterDeliveryEndpointRequest,
41 };
42 pub use crate::application::orchestration::runtime_job_payloads::{
43 AgentSessionJobPayload, AgentTurnJobPayload, ConcurrentPatternJobPayload,
44 HandoffPatternJobPayload, OrchestratorPatternJobPayload, PromptJobPayload,
45 SequentialPatternJobPayload, ToolLoopJobPayload,
46 };
47 pub use crate::application::orchestration::runtime_workflow_job_builder::RuntimeWorkflowJobBuilder;
48 pub use crate::application::runtime::in_memory_runtime::{
49 InMemoryRuntime, JobExecutionOutcome, JobHandler,
50 };
51 pub use crate::application::runtime::stasis_runtime_builder::StasisRuntimeBuilder;
52 pub use crate::domain::runtime::cluster_node::ClusterNodeRole;
53 pub use crate::domain::runtime::delivery_endpoint::{
54 DeliveryEndpoint, DeliveryProtocol, NewDeliveryEndpoint,
55 };
56 pub use crate::domain::runtime::outbox::OutboxEvent;
57 pub use crate::infrastructure::runtime::composite_control_plane_store::CompositeControlPlaneStore;
58 pub use crate::infrastructure::runtime::endpoint_routing_event_publisher::EndpointRoutingEventPublisher;
59 pub use crate::infrastructure::runtime::in_memory_cluster_node_store::InMemoryClusterNodeStore;
60 pub use crate::infrastructure::runtime::in_memory_delivery_endpoint_store::InMemoryDeliveryEndpointStore;
61 pub use crate::infrastructure::runtime::in_memory_endpoint_delivery_status_store::InMemoryEndpointDeliveryStatusStore;
62 pub use crate::infrastructure::runtime::surreal_cluster_node_store::SurrealClusterNodeStore;
63 pub use crate::infrastructure::runtime::surreal_delivery_endpoint_store::SurrealDeliveryEndpointStore;
64 pub use crate::infrastructure::runtime::surreal_endpoint_delivery_status_store::SurrealEndpointDeliveryStatusStore;
65 pub use crate::ports::outbound::runtime::delivery_endpoint_store::DeliveryEndpointStore;
66 pub use crate::ports::outbound::runtime::endpoint_delivery_status_store::EndpointDeliveryStatusStore;
67 pub use crate::ports::outbound::runtime::endpoint_transport_publisher::EndpointTransportPublisher;
68}
69
70pub mod memory_prelude {
72 pub use crate::ports::outbound::memory::memory_models::{
73 MemoryAggregateRequest, MemoryRecallRequest, MemoryRollupRequest, MemoryScope,
74 MemoryStoreRequest, MemoryTransformRequest,
75 };
76 pub use crate::ports::outbound::memory::memory_operations::MemoryOperations;
77}
78
79pub mod memory_prelude_ext {
81 pub use crate::infrastructure::memory::locus_context_reader::LocusContextReader;
82 pub use crate::infrastructure::memory::locus_context_writer::LocusContextWriter;
83 pub use crate::infrastructure::memory::locus_memory_operations::LocusMemoryOperations;
84 pub use crate::infrastructure::memory::locus_node_store_factory::LocusNodeStoreFactory;
85 pub use crate::ports::outbound::memory::memory_context_reader::MemoryContextReader;
86 pub use crate::ports::outbound::memory::memory_context_writer::MemoryContextWriter;
87 pub use crate::ports::outbound::memory::memory_models::{
88 MemoryAggregateRequest, MemoryRecallRequest, MemoryRollupRequest, MemoryScope,
89 MemoryStoreRequest, MemoryTransformRequest,
90 };
91 pub use crate::ports::outbound::memory::memory_operations::MemoryOperations;
92}
93
94pub mod sdk_prelude {
96 pub use crate::application::dto::{InvokeAgentRequest, RegisterAgentRequest};
97 pub use crate::domain::errors::{Result, StasisError};
98 pub use crate::domain::runtime::job::{BackoffPolicy, NewJob};
99 pub use crate::application::runtime::runtime_factory::{RuntimeBackend, RuntimeFactory, SurrealAuth};
100 pub use crate::infrastructure::llm::mock_gateway::MockLlmGateway;
101 pub use crate::infrastructure::persistence::in_memory_agent_repository::InMemoryAgentRepository;
102 pub use crate::sdk::runtime_sdk::{RuntimeSdk, StasisRuntime};
103 pub use crate::sdk::stasis_sdk::StasisSdk;
104}
105
106pub mod sdk_prelude_ext {
108 pub use crate::application::dto::InvokeAgentResponse;
109 pub use crate::application::runtime::runtime_factory::RuntimeComposition;
110 pub use crate::domain::runtime::job::JobState;
111 pub use crate::domain::runtime::recurring::RecurringDefinition;
112 pub use crate::infrastructure::llm::genai_gateway::GenaiLlmGateway;
113 pub use crate::sdk::control_plane_sdk::ControlPlaneSdk;
114 pub use crate::sdk::runtime_sdk::RuntimeStatsSnapshot;
115}
116
117pub mod prelude {
119 pub use crate::memory_prelude::*;
120 pub use crate::runtime_prelude::*;
121 pub use crate::sdk_prelude::*;
122}
123
124pub mod prelude_ext {
126 pub use crate::memory_prelude_ext::*;
127 pub use crate::runtime_prelude_ext::*;
128 pub use crate::sdk_prelude_ext::*;
129}
130
131#[cfg(test)]
132mod tests {
133 use crate::application::dto::{InvokeAgentRequest, RegisterAgentRequest};
134 use crate::infrastructure::llm::mock_gateway::MockLlmGateway;
135 use crate::infrastructure::persistence::in_memory_agent_repository::InMemoryAgentRepository;
136 use crate::sdk::stasis_sdk::StasisSdk;
137
138 #[tokio::test]
139 async fn end_to_end_agent_registration_and_invocation_works() {
140 let repository = InMemoryAgentRepository::default();
141 let llm = MockLlmGateway::new("mock completion");
142 let sdk = StasisSdk::new(repository, llm);
143
144 let registration = RegisterAgentRequest {
145 id: "planner".to_string(),
146 name: "Task Planner".to_string(),
147 system_prompt: "Break work down into ordered steps".to_string(),
148 };
149
150 sdk.register_agent(registration)
151 .await
152 .expect("agent should register");
153
154 let response = sdk
155 .invoke_agent(InvokeAgentRequest {
156 agent_id: "planner".to_string(),
157 user_prompt: "Plan a release checklist".to_string(),
158 })
159 .await
160 .expect("agent should invoke");
161
162 assert_eq!(response.completion, "mock completion");
163 }
164}