MCPcopy Create free account
hub / github.com/AI45Lab/Code / serve_agent_dir

Function serve_agent_dir

core/src/serve/daemon.rs:65–91  ·  view source on GitHub ↗

Serve an agent directory's schedules until `cancel` fires. Builds one durable session per enabled schedule (`schedule: `), injecting the agent dir's `prompt_slots`, `skill_dirs`, and `tools/`. `extra` merges into each schedule session's [`SessionOptions`] (model, `llm_client`, `session_store`, …); a host-set `prompt_slots` is honored, but `session_id` is always derived per schedule.

(
    agent: &Agent,
    agent_dir: &AgentDir,
    workspace: impl Into<String> + Clone,
    extra: Option<SessionOptions>,
    cancel: CancellationToken,
)

Source from the content-addressed store, hash-verified

63/// `session_store`, …); a host-set `prompt_slots` is honored, but `session_id` is
64/// always derived per schedule.
65pub async fn serve_agent_dir(
66 agent: &Agent,
67 agent_dir: &AgentDir,
68 workspace: impl Into<String> + Clone,
69 extra: Option<SessionOptions>,
70 cancel: CancellationToken,
71) -> Result<()> {
72 let extra = extra.unwrap_or_default();
73
74 let mut sessions = HashMap::new();
75 for spec in agent_dir.schedules.iter().filter(|s| s.enabled) {
76 let session = build_session(
77 agent,
78 agent_dir,
79 format!("schedule:{}", spec.name),
80 workspace.clone(),
81 &extra,
82 )
83 .await?;
84 sessions.insert(spec.name.clone(), Arc::new(session));
85 }
86
87 let scheduler = Scheduler::new(agent_dir.schedules.clone())?;
88 let sink: Arc<dyn ScheduleSink> = Arc::new(SessionScheduleSink { sessions });
89 scheduler.run(sink, cancel).await;
90 Ok(())
91}
92
93/// Build one durable serve session under the explicit `session_id`
94/// (`schedule:<name>`), injecting the agent dir's prompt slots, skills, and

Calls 4

build_sessionFunction · 0.85
cloneMethod · 0.45
insertMethod · 0.45
runMethod · 0.45