use crate::generator::{
step_forward_agent::{
AgentDataConfig, DataSource, FormatterConfig, LLMCallMode, PromptTemplate, StepForwardAgent,
}
};
use crate::generator::research::memory::MemoryScope;
use crate::generator::research::types::{AgentType, SystemContextReport};
#[derive(Default)]
pub struct SystemContextResearcher;
impl StepForwardAgent for SystemContextResearcher {
type Output = SystemContextReport;
fn agent_type(&self) -> String {
AgentType::SystemContextResearcher.to_string()
}
fn agent_type_enum(&self) -> Option<AgentType> {
Some(AgentType::SystemContextResearcher)
}
fn memory_scope_key(&self) -> String {
MemoryScope::STUDIES_RESEARCH.to_string()
}
fn data_config(&self) -> AgentDataConfig {
AgentDataConfig {
required_sources: vec![DataSource::PROJECT_STRUCTURE, DataSource::CODE_INSIGHTS],
optional_sources: vec![DataSource::README_CONTENT],
}
}
fn prompt_template(&self) -> PromptTemplate {
PromptTemplate {
system_prompt: r#"You are a professional software architecture analyst, specializing in project objective and system boundary analysis.
Your task is to analyze and determine based on the provided project information:
1. The project's core objectives and business value
2. Project type and technical characteristics
3. Target user groups and usage scenarios
4. External system interactions
5. System boundary definition
Please return the analysis results in structured JSON format."#
.to_string(),
opening_instruction: "Based on the following research materials, analyze the project's core objectives and system positioning:".to_string(),
closing_instruction: r#"
## Analysis Requirements:
- Accurately identify project type and technical characteristics
- Clearly define target users and usage scenarios
- Clearly delineate system boundaries
- Ensure analysis results conform to the C4 architecture model's system context level"#
.to_string(),
llm_call_mode: LLMCallMode::Extract,
formatter_config: FormatterConfig::default(),
}
}
}