use everruns_runtime::InProcessRuntimeBuilder;
use std::path::Path;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let plugin_dir = Path::new(concat!(
env!("CARGO_MANIFEST_DIR"),
"/../../testdata/plugins/microsoft-docs"
));
let builder = InProcessRuntimeBuilder::new()
.llm_sim(everruns_core::llmsim_driver::LlmSimConfig::fixed("ok"))
.with_plugin_dir(plugin_dir)?;
let plugin_cap = builder
.plugin_capability("microsoft-docs")
.expect("plugin must be available after with_plugin_dir");
println!("Loaded plugin: {}", plugin_cap.capability_id());
let runtime = builder
.single_session(|s| {
s.harness("example-harness", "You are an example harness.")
.agent("example-agent", "Use docs when needed.")
.agent_capability(plugin_cap)
})
.build()
.await?;
let warnings = runtime.plugin_warnings();
if warnings.is_empty() {
println!("No plugin compile warnings.");
} else {
for w in warnings {
println!("Plugin warning: {w}");
}
}
let session_id = runtime
.default_session_id()
.expect("single_session sets the default session id");
let ctx = runtime.load_context(session_id).await?;
let has_agent = ctx.runtime_agent.system_prompt.contains("docs-researcher");
println!("System prompt contains docs-researcher agent: {has_agent}");
let plugin_config = ctx
.resolved_capability_configs
.iter()
.find(|c| c.capability_id() == "plugin:microsoft-docs");
println!(
"plugin:microsoft-docs in resolved configs: {}",
plugin_config.is_some()
);
if let Some(cap) = plugin_config
&& let Ok(def) = serde_json::from_value::<everruns_core::DeclarativeCapabilityDefinition>(
cap.config.clone(),
)
{
if let Some(servers) = &def.mcp_servers
&& let Some(server) = servers.get("microsoft-learn")
{
println!("microsoft-learn MCP server URL: {}", server.url);
}
println!(
"Plugin skills: {}",
def.skills
.iter()
.map(|s| s.name.as_str())
.collect::<Vec<_>>()
.join(", ")
);
}
Ok(())
}