#![allow(clippy::expect_used, clippy::doc_markdown)]
use std::sync::Arc;
use loopctl::config::SessionConfig;
use loopctl::engine::BareLoop;
use loopctl::engine::RunConfig;
use loopctl::engine::core::Loop;
use loopctl::testing::MockApiClient;
use loopctl::tool::ToolRegistry;
#[tokio::main]
async fn main() {
let client = MockApiClient::new("hello-model").with_text_response("Hello, world!");
let tools = ToolRegistry::new();
let config = SessionConfig::default();
let mut agent = BareLoop::new(Arc::new(client), tools, config);
let cancel_signal = agent.cancel_signal();
tokio::spawn(async move {
if tokio::signal::ctrl_c().await.is_ok() {
cancel_signal.cancel();
}
});
let result = agent
.run("Say hello!", &RunConfig::default())
.await
.expect("session should succeed");
println!("Turns: {}", result.turn_count());
println!("Output: {}", result.output.unwrap_or_default());
}