(
agent: &Agent,
workspace: String,
llm_client: Arc<dyn LlmClient>,
opts: &SessionOptions,
)
| 86 | } |
| 87 | |
| 88 | pub(super) fn build_agent_session( |
| 89 | agent: &Agent, |
| 90 | workspace: String, |
| 91 | llm_client: Arc<dyn LlmClient>, |
| 92 | opts: &SessionOptions, |
| 93 | ) -> Result<AgentSession> { |
| 94 | let canonical = safe_canonicalize(Path::new(&workspace)); |
| 95 | |
| 96 | let capabilities = build_session_capabilities(SessionCapabilityInput { |
| 97 | code_config: &agent.code_config, |
| 98 | base_config: &agent.config, |
| 99 | workspace: &canonical, |
| 100 | llm_client: Arc::clone(&llm_client), |
| 101 | opts, |
| 102 | global_mcp: agent.global_mcp.as_ref(), |
| 103 | cached_global_mcp_tools: agent |
| 104 | .global_mcp_tools |
| 105 | .lock() |
| 106 | .expect("global_mcp_tools lock poisoned") |
| 107 | .clone(), |
| 108 | }); |
| 109 | let tool_executor = capabilities.tool_executor; |
| 110 | let trace_sink = capabilities.trace_sink; |
| 111 | let agent_registry = capabilities.agent_registry; |
| 112 | let tool_defs = capabilities.tool_defs; |
| 113 | let context_providers = capabilities.context_providers; |
| 114 | let effective_registry = capabilities.skill_registry; |
| 115 | let subagent_tasks = capabilities.subagent_tasks; |
| 116 | |
| 117 | let prompt_slots = opts |
| 118 | .prompt_slots |
| 119 | .clone() |
| 120 | .unwrap_or_else(|| agent.config.prompt_slots.clone()); |
| 121 | |
| 122 | let session_id = opts |
| 123 | .session_id |
| 124 | .clone() |
| 125 | .unwrap_or_else(|| uuid::Uuid::new_v4().to_string()); |
| 126 | |
| 127 | let runtime = build_session_runtime(SessionRuntimeInput { |
| 128 | code_config: &agent.code_config, |
| 129 | workspace: &canonical, |
| 130 | session_id: &session_id, |
| 131 | opts, |
| 132 | tool_executor: Arc::clone(&tool_executor), |
| 133 | }); |
| 134 | |
| 135 | let resolved_memory = resolve_session_memory(opts); |
| 136 | let memory = resolved_memory.memory; |
| 137 | let init_warning = resolved_memory.init_warning; |
| 138 | |
| 139 | let base = agent.config.clone(); |
| 140 | let auto_delegation = resolve_auto_delegation_config(&agent.code_config, opts); |
| 141 | let config = AgentConfig { |
| 142 | prompt_slots, |
| 143 | tools: tool_defs, |
| 144 | security_provider: opts.security_provider.clone(), |
| 145 | permission_checker: opts.permission_checker.clone(), |
no test coverage detected