agcodex_core/tools/
integration_example.rs

1//! Integration example for the Double-Planning Strategy Tool
2//!
3//! This example demonstrates how to use the PlanTool with the AGCodex subagent system
4//! to create, decompose, and execute complex development tasks.
5
6use crate::tools::plan::PlanTool;
7
8/// Example usage of the simplified planning tool
9pub async fn example_usage() -> Result<(), Box<dyn std::error::Error>> {
10    println!("šŸŽÆ AGCodex Double-Planning Strategy Tool Example");
11    println!("=================================================");
12
13    // Initialize the planning tool
14    let plan_tool = PlanTool::new();
15
16    // Example 1: Simple Feature Addition
17    println!("\nšŸ“‹ Example 1: Adding a Dark Mode Toggle");
18    println!("-----------------------------------------");
19
20    let goal = "Add dark mode toggle to the application settings with persistent user preferences";
21
22    // Step 1: Create simple plan
23    let plan_result = plan_tool.plan(goal)?;
24    println!("āœ… Plan Created with {} tasks", plan_result.tasks.len());
25
26    // For demonstration purposes, create a simple meta task
27    let meta_task = crate::tools::plan::MetaTask {
28        name: "Dark Mode Toggle".to_string(),
29        description: goal.to_string(),
30    };
31
32    println!("āœ… Meta Task Created:");
33    println!("   Name: {}", meta_task.name);
34    println!("   Description: {}", meta_task.description);
35
36    // Step 2: Use the tasks from our plan result
37    let sub_tasks = &plan_result.tasks;
38
39    println!("\nšŸ”§ Sub-Tasks Generated ({}):", sub_tasks.len());
40    for (i, task) in sub_tasks.iter().enumerate() {
41        println!("   {}. {} [ID: {}]", i + 1, task.description, task.id);
42        println!(
43            "      Dependencies: {} | Parallelizable: {}",
44            task.depends_on.len(),
45            task.can_parallelize
46        );
47    }
48
49    // Step 3: Use parallelization from plan result
50    let task_groups = &plan_result.parallel_groups;
51
52    println!(
53        "\n⚔ Task Groups for Parallel Execution ({}):",
54        task_groups.len()
55    );
56    for (i, group) in task_groups.iter().enumerate() {
57        println!("   Group {}: {} tasks", i + 1, group.len());
58        for task_id in group {
59            if let Some(task) = sub_tasks.iter().find(|t| &t.id == task_id) {
60                println!("     - {}", task.description);
61            }
62        }
63    }
64
65    // Step 4: Show execution summary
66    println!("\nšŸš€ Plan Summary:");
67    println!("   Total Tasks: {}", plan_result.tasks.len());
68    println!("   Complexity: {:?}", plan_result.estimated_complexity);
69    println!("   Parallel Groups: {}", plan_result.parallel_groups.len());
70
71    println!("\nšŸŽ‰ Planning completed successfully!");
72
73    // Example 2: Complex Refactoring
74    println!("\n\nšŸ“‹ Example 2: Complex Refactoring Task");
75    println!("--------------------------------------");
76
77    let refactor_goal = "Refactor the authentication system to use async/await patterns and add comprehensive error handling";
78
79    let refactor_result = plan_tool.plan(refactor_goal)?;
80    println!("āœ… Refactoring Plan:");
81    println!("   Complexity: {:?}", refactor_result.estimated_complexity);
82    println!("   Tasks: {}", refactor_result.tasks.len());
83    println!(
84        "   Parallel Groups: {}",
85        refactor_result.parallel_groups.len()
86    );
87
88    // Show refactoring tasks
89    println!("\nšŸ”§ Refactoring Sub-Tasks:");
90    for (i, task) in refactor_result.tasks.iter().enumerate() {
91        println!("   {}. {}", i + 1, task.description);
92    }
93
94    println!("\n✨ All examples completed successfully!");
95
96    Ok(())
97}
98
99/// Helper function to create example context (simplified)
100#[allow(dead_code)]
101fn create_example_context() -> crate::tools::plan::PlanContext {
102    crate::tools::plan::PlanContext {
103        goal: "Example context".to_string(),
104        constraints: vec!["No breaking changes".to_string()],
105    }
106}
107
108/// Simulate analysis functionality (simplified)
109pub async fn demonstrate_analysis_capabilities() -> Result<(), Box<dyn std::error::Error>> {
110    println!("\nšŸ” AGCodex Analysis Capabilities");
111    println!("=================================");
112
113    let plan_tool = PlanTool::new();
114
115    // Test different types of goals
116    let test_goals = vec![
117        "Fix memory leak in user session management",
118        "Optimize database query performance",
119        "Add comprehensive test suite",
120        "Implement rate limiting for API endpoints",
121        "Refactor legacy code to modern patterns",
122    ];
123
124    for goal in test_goals {
125        println!("\nšŸŽÆ Planning: {}", goal);
126
127        let result = plan_tool.plan(goal)?;
128        println!("   Tasks: {}", result.tasks.len());
129        println!("   Complexity: {:?}", result.estimated_complexity);
130        println!("   Parallel Groups: {}", result.parallel_groups.len());
131
132        if !result.tasks.is_empty() {
133            println!("   First Task: {}", result.tasks[0].description);
134        }
135    }
136
137    println!("\nāœ… Analysis demonstration completed!");
138    Ok(())
139}