yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
dev_assist_agent.h
Go to the documentation of this file.
1#ifndef YAZE_SRC_CLI_SERVICE_AGENT_DEV_ASSIST_AGENT_H_
2#define YAZE_SRC_CLI_SERVICE_AGENT_DEV_ASSIST_AGENT_H_
3
4#include <functional>
5#include <map>
6#include <memory>
7#include <regex>
8#include <string>
9#include <vector>
10
11#include "absl/status/status.h"
12#include "absl/status/statusor.h"
15
16namespace yaze {
17namespace cli {
18namespace agent {
19
20// Forward declarations
21class ToolDispatcher;
22
33 public:
38 // Error classification
53
55 std::string error_category; // High-level category (e.g., "Build", "Runtime")
56 std::string file_path; // File where error occurred
57 int line_number = 0; // Line number if applicable
58 std::string description; // Human-readable description
59 std::string raw_error; // Original error message
60
61 // Analysis and suggestions
62 std::vector<std::string> suggested_fixes; // Ordered fix suggestions
63 std::vector<std::string> related_files; // Files that may be involved
64 std::string root_cause; // Root cause analysis
65
66 // Confidence and metadata
67 double confidence = 0.0; // 0.0 to 1.0 confidence in analysis
68 bool ai_assisted = false; // Whether AI was used for suggestions
69 };
70
74 struct BuildConfig {
75 std::string build_dir = "build";
76 std::string preset = ""; // CMake preset to use
77 bool verbose = false;
78 bool parallel = true;
79 int parallel_jobs = 0; // 0 = auto-detect
80 bool stop_on_error = false;
81 };
82
87 std::string test_file; // Suggested test file path
88 std::string test_name; // Test case name
89 std::string reason; // Why this test is relevant
90 std::string test_code; // Suggested test code (if generated)
91 bool is_existing = true; // false if this is a new test suggestion
92 };
93
96
104 absl::Status Initialize(std::shared_ptr<ToolDispatcher> tool_dispatcher,
105 std::shared_ptr<yaze::cli::AIService> ai_service = nullptr);
106
113 std::vector<AnalysisResult> AnalyzeBuildOutput(const std::string& output);
114
121 AnalysisResult AnalyzeCrash(const std::string& stack_trace);
122
129 std::vector<TestSuggestion> GetAffectedTests(
130 const std::vector<std::string>& changed_files);
131
139 absl::StatusOr<std::string> GenerateTestCode(
140 const std::string& source_file,
141 const std::string& function_name = "");
142
150 absl::Status MonitorBuild(
151 const BuildConfig& config,
152 std::function<void(const AnalysisResult&)> on_error);
153
160 absl::StatusOr<std::vector<AnalysisResult>> RunBuildWithAnalysis(
161 const std::string& command);
162
169 absl::StatusOr<std::vector<AnalysisResult>> RunTestsWithAnalysis(
170 const std::string& test_pattern = "");
171
178 std::vector<AnalysisResult> AnalyzeCodeFile(const std::string& file_path);
179
185 std::string GetBuildStatus() const;
186
190 void SetAIEnabled(bool enabled) { use_ai_ = enabled; }
191
195 bool IsAIAvailable() const { return ai_service_ != nullptr; }
196
197 private:
198 // Error pattern matchers
200 std::regex pattern;
202 std::string category;
203 std::function<void(const std::smatch&, AnalysisResult&)> extractor;
204 };
205
206 // Initialize error patterns for various compilers
208
209 // Parse specific error types
210 AnalysisResult ParseCompilationError(const std::string& line);
211 AnalysisResult ParseLinkError(const std::string& line);
212 AnalysisResult ParseCMakeError(const std::string& line);
213 AnalysisResult ParseTestFailure(const std::string& output);
214 AnalysisResult ParseSegfault(const std::string& stack_trace);
215
216 // Extract information from error messages
217 void ExtractFileAndLine(const std::string& text, AnalysisResult& result);
218 void ExtractUndefinedSymbol(const std::string& text, AnalysisResult& result);
219
220 // Generate fix suggestions
225
226 // AI-enhanced analysis
227 absl::StatusOr<std::string> GetAISuggestion(const AnalysisResult& result);
228 absl::StatusOr<std::string> GenerateTestWithAI(
229 const std::string& source_code,
230 const std::string& function_name);
231
232 // Test discovery
233 std::vector<std::string> FindTestsForFile(const std::string& source_file);
234 bool IsTestFile(const std::string& file_path) const;
235 std::string GetTestFileForSource(const std::string& source_file) const;
236
237 // Build system interaction
238 absl::StatusOr<std::string> ExecuteCommand(const std::string& command);
239 absl::Status RunCMakeConfigure(const BuildConfig& config);
240 absl::Status RunCMakeBuild(const BuildConfig& config);
241
242 // Member variables
243 std::shared_ptr<ToolDispatcher> tool_dispatcher_;
244 std::shared_ptr<yaze::cli::AIService> ai_service_;
245 std::vector<ErrorPattern> error_patterns_;
246 bool use_ai_ = true;
247 bool initialized_ = false;
248
249 // Cache for test mappings
250 std::map<std::string, std::vector<std::string>> test_file_cache_;
251};
252
253} // namespace agent
254} // namespace cli
255} // namespace yaze
256
257#endif // YAZE_SRC_CLI_SERVICE_AGENT_DEV_ASSIST_AGENT_H_
Development Assistant Agent for AI-assisted yaze development.
absl::StatusOr< std::vector< AnalysisResult > > RunBuildWithAnalysis(const std::string &command)
Run a build command and analyze output.
std::shared_ptr< yaze::cli::AIService > ai_service_
std::string GetBuildStatus() const
Get build system status and health.
absl::StatusOr< std::string > GenerateTestCode(const std::string &source_file, const std::string &function_name="")
Generate test code for a function or class.
void SuggestTypeMismatchFix(AnalysisResult &result)
AnalysisResult AnalyzeCrash(const std::string &stack_trace)
Analyze a crash or stack trace.
absl::Status RunCMakeBuild(const BuildConfig &config)
absl::StatusOr< std::string > GenerateTestWithAI(const std::string &source_code, const std::string &function_name)
std::map< std::string, std::vector< std::string > > test_file_cache_
void SuggestMissingHeaderFix(AnalysisResult &result)
absl::Status RunCMakeConfigure(const BuildConfig &config)
AnalysisResult ParseSegfault(const std::string &stack_trace)
std::vector< std::string > FindTestsForFile(const std::string &source_file)
absl::StatusOr< std::vector< AnalysisResult > > RunTestsWithAnalysis(const std::string &test_pattern="")
Run tests and analyze failures.
void SuggestLinkOrderFix(AnalysisResult &result)
void ExtractUndefinedSymbol(const std::string &text, AnalysisResult &result)
absl::Status Initialize(std::shared_ptr< ToolDispatcher > tool_dispatcher, std::shared_ptr< yaze::cli::AIService > ai_service=nullptr)
Initialize the agent with optional AI service.
bool IsTestFile(const std::string &file_path) const
AnalysisResult ParseCompilationError(const std::string &line)
std::string GetTestFileForSource(const std::string &source_file) const
void GenerateFixSuggestions(AnalysisResult &result)
AnalysisResult ParseTestFailure(const std::string &output)
AnalysisResult ParseLinkError(const std::string &line)
std::vector< AnalysisResult > AnalyzeBuildOutput(const std::string &output)
Analyze build output for errors and warnings.
std::vector< TestSuggestion > GetAffectedTests(const std::vector< std::string > &changed_files)
Get suggested tests for changed files.
void ExtractFileAndLine(const std::string &text, AnalysisResult &result)
std::vector< AnalysisResult > AnalyzeCodeFile(const std::string &file_path)
Check code for common issues.
void SetAIEnabled(bool enabled)
Enable/disable AI-powered suggestions.
absl::StatusOr< std::string > ExecuteCommand(const std::string &command)
std::shared_ptr< ToolDispatcher > tool_dispatcher_
absl::StatusOr< std::string > GetAISuggestion(const AnalysisResult &result)
std::vector< ErrorPattern > error_patterns_
bool IsAIAvailable() const
Check if AI service is available.
AnalysisResult ParseCMakeError(const std::string &line)
absl::Status MonitorBuild(const BuildConfig &config, std::function< void(const AnalysisResult &)> on_error)
Monitor build process interactively.
Analysis result for build errors or crashes.
std::function< void(const std::smatch &, AnalysisResult &) extractor)