activity-simulator / src /core /codeReviewEngine.js
abedelbahnasy55's picture
feat: cloud simulator - Docker, dashboard, auto-start
ccb6b75
import logger from '../utils/logger.js';
class CodeReviewEngine {
constructor(aiProvider, memory, developer) {
this.ai = aiProvider;
this.memory = memory;
this.developer = developer;
}
async reviewPullRequest(pr, files) {
const reviews = [];
for (const file of files.slice(0, 5)) {
const content = file.patch || file.content || '';
if (!content || content.length < 50) continue;
try {
const review = await this._reviewFile(file, content);
if (review) {
reviews.push(review);
}
} catch (error) {
logger.error(`Failed to review file ${file.filename}: ${error.message}`);
}
}
return reviews;
}
async _reviewFile(file, content) {
const roleContext = this.developer.getRoleContext();
const prompt = `أنت تراجع كود في Pull Request.
الملف: ${file.filename}
نوع التغيير: ${file.status}
الدور: ${roleContext.role}
الكود:
\`\`\`
${content.slice(0, 2000)}
\`\`\`
قم بمراجعة الكود واذكر:
1. هل هناك مشاكل أمنية؟
2. هل هناك مشاكل أداء؟
3. هل الكود نظيف ومقروء؟
4. هل هناك أخطاء محتملة؟
5. اقتراحات للتحسين
اكتب مراجعة مختصرة (3-5 نقاط) بالعربية أو الإنجليزية.`;
const review = await this.ai.generate(prompt, {
maxTokens: 500,
temperature: 0.7,
});
return {
file: file.filename,
review: review.trim(),
type: this._determineReviewType(review),
};
}
_determineReviewType(review) {
const lower = review.toLowerCase();
if (lower.includes('security') || lower.includes('vulnerability') || lower.includes('xss') || lower.includes('sql injection')) {
return 'security';
}
if (lower.includes('performance') || lower.includes('slow') || lower.includes('n+1') || lower.includes('optimize')) {
return 'performance';
}
if (lower.includes('bug') || lower.includes('error') || lower.includes('crash') || lower.includes('null')) {
return 'bug';
}
if (lower.includes('good') || lower.includes('clean') || lower.includes('nice') || lower.includes('excellent')) {
return 'positive';
}
return 'suggestion';
}
async generateLineComment(line, context, file) {
try {
const prompt = `تعليق على سطر كود في ملف ${file}.
السطر: ${line}
السياق: ${context?.slice(0, 200) || ''}
اكتب تعليق قصير (جملة واحدة) على هذا السطر.`;
const comment = await this.ai.generate(prompt, {
maxTokens: 100,
temperature: 0.8,
});
return comment.trim();
} catch (error) {
logger.error(`Failed to generate line comment: ${error.message}`);
return 'Consider reviewing this line.';
}
}
async suggestImprovements(code, language) {
try {
const prompt = `اقترح تحسينات على هذا الكود (${language}):
\`\`\`
${code.slice(0, 1500)}
\`\`\`
اذكر 2-3 تحسينات محددة.`;
const suggestions = await this.ai.generate(prompt, {
maxTokens: 300,
temperature: 0.7,
});
return suggestions.trim();
} catch (error) {
logger.error(`Failed to suggest improvements: ${error.message}`);
return 'Consider adding error handling and tests.';
}
}
async checkForBugs(code, language) {
try {
const prompt = `هل ترى أي أخطاء في هذا الكود (${language}
\`\`\`
${code.slice(0, 1500)}
\`\`\`
اكتب أي أخطاء محتملة أو "No bugs found" إذا لم تجد شيء.`;
const result = await this.ai.generate(prompt, {
maxTokens: 200,
temperature: 0.6,
});
return result.trim();
} catch (error) {
logger.error(`Failed to check for bugs: ${error.message}`);
return 'Unable to check for bugs.';
}
}
}
export default CodeReviewEngine;