(input: SessionCapabilityInput<'_>)
| 39 | } |
| 40 | |
| 41 | pub(super) fn build_session_capabilities(input: SessionCapabilityInput<'_>) -> SessionCapabilities { |
| 42 | let artifact_limits = input.opts.artifact_store_limits.unwrap_or_default(); |
| 43 | let workspace_services = input |
| 44 | .opts |
| 45 | .workspace_services |
| 46 | .clone() |
| 47 | .unwrap_or_else(|| crate::workspace::WorkspaceServices::local(input.workspace)); |
| 48 | let tool_executor = Arc::new( |
| 49 | ToolExecutor::new_with_workspace_services_and_artifact_limits( |
| 50 | input.workspace.display().to_string(), |
| 51 | workspace_services, |
| 52 | artifact_limits, |
| 53 | ), |
| 54 | ); |
| 55 | let trace_sink = match input.opts.retention_limits.and_then(|l| l.max_trace_events) { |
| 56 | Some(cap) => crate::trace::InMemoryTraceSink::with_max_events(cap), |
| 57 | None => crate::trace::InMemoryTraceSink::new(), |
| 58 | }; |
| 59 | tool_executor.set_trace_sink(Arc::new(trace_sink.clone())); |
| 60 | |
| 61 | if let Some(ref search_config) = input.code_config.search { |
| 62 | tool_executor |
| 63 | .registry() |
| 64 | .set_search_config(search_config.clone()); |
| 65 | } |
| 66 | |
| 67 | let subagent_tasks = Arc::new( |
| 68 | match input |
| 69 | .opts |
| 70 | .retention_limits |
| 71 | .and_then(|l| l.max_terminal_subagent_tasks) |
| 72 | { |
| 73 | Some(cap) => { |
| 74 | crate::subagent_task_tracker::InMemorySubagentTaskTracker::with_max_terminal_tasks( |
| 75 | cap, |
| 76 | ) |
| 77 | } |
| 78 | None => crate::subagent_task_tracker::InMemorySubagentTaskTracker::new(), |
| 79 | }, |
| 80 | ); |
| 81 | let agent_registry = register_task_capability( |
| 82 | input.code_config, |
| 83 | input.opts, |
| 84 | input.workspace, |
| 85 | Arc::clone(&input.llm_client), |
| 86 | &tool_executor, |
| 87 | Arc::clone(&subagent_tasks), |
| 88 | ); |
| 89 | |
| 90 | // Register generate_object tool (structured JSON output) |
| 91 | crate::tools::register_generate_object(tool_executor.registry(), Arc::clone(&input.llm_client)); |
| 92 | |
| 93 | register_mcp_capabilities( |
| 94 | &tool_executor, |
| 95 | input.opts, |
| 96 | input.global_mcp, |
| 97 | input.cached_global_mcp_tools, |
| 98 | ); |
no test coverage detected