feat: implement mandatory explore phase with parallel subagents
- Added `ExploreService` trait and `ExploreServiceImpl` struct to handle the exploration of codebase context before agent turns. - Implemented three parallel subagents: Code Structure, Symbol Index, and Semantic Context, each with specific directives. - Integrated the explore phase into the agent turn process, ensuring that each turn starts with a consolidated context message. - Enhanced `spawn_agent_turn` function to include explore service wiring and context preparation.
This commit is contained in:
@@ -110,6 +110,11 @@ pub fn spawn_agent_turn(state: &mut AppStateRest, text: String) {
|
||||
api_base: api_base.clone(),
|
||||
};
|
||||
|
||||
// Clone credentials before moving into LlmClient.
|
||||
let explore_api_key = api_key.clone();
|
||||
let explore_model = model.clone();
|
||||
let explore_base_url = api_base.clone().unwrap_or_else(|| "https://api.openai.com/v1".to_string());
|
||||
|
||||
let client = std::sync::Arc::new(LlmClient::new(api_key, model, api_base));
|
||||
|
||||
let tool_ctx = ToolCtx::builder()
|
||||
@@ -118,13 +123,30 @@ pub fn spawn_agent_turn(state: &mut AppStateRest, text: String) {
|
||||
.turn_events(turn_events)
|
||||
.build();
|
||||
|
||||
// Clone ToolCtx for the explore service (before moving into executor).
|
||||
let explore_ctx = tool_ctx.clone();
|
||||
|
||||
let tool_executor =
|
||||
std::sync::Arc::new(InfrastructureToolExecutor::new(tool_ctx));
|
||||
|
||||
let tools = all_tools();
|
||||
let defs = tool_defs(&tools);
|
||||
|
||||
let turn_service = AgentTurnServiceImpl::new(client, tool_executor, defs);
|
||||
// Wire the mandatory explore phase (3+ parallel subagents).
|
||||
let explore_creds = zesdex_infrastructure::best_practice::explore::Credentials {
|
||||
base_url: explore_base_url,
|
||||
api_key: explore_api_key,
|
||||
model: explore_model,
|
||||
};
|
||||
let explore_service = std::sync::Arc::new(
|
||||
zesdex_infrastructure::best_practice::explore::ExploreServiceImpl::new(
|
||||
explore_ctx,
|
||||
explore_creds,
|
||||
),
|
||||
);
|
||||
|
||||
let turn_service = AgentTurnServiceImpl::new(client, tool_executor, defs)
|
||||
.with_explore(explore_service);
|
||||
|
||||
tokio::spawn(async move {
|
||||
let _ = turn_service.run_turn(params).await;
|
||||
|
||||
Reference in New Issue
Block a user