Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/asmaa-elfatayry_ai-code-reviewer-murajea.json

1 line
21 KiB
JSON
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "asmaa-elfatayry/ai-code-reviewer-murajea", "files": {"AICodeReviewer.Core/AI/Providers/DeepSeekProvider.cs": {"a49c78ce3c45664272e2a33ff158d5f8d7cfcdc1": {"t": 1785746194.5632331, "n": 6828, "h": "d753ac7050a67c72", "c": "using AICodeReviewer.Core.Models;\nusing System.Net.Http.Headers;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace AICodeReviewer.Core.AI.Providers;\n\npublic class DeepSeekProvider : IAIProvider\n{\n private readonly HttpClient _httpClient;\n private readonly string _apiKey;\n private readonly string _model;\n private string _language = \"en\"; // 👈 إضافة\n\n public string ProviderName => \"DeepSeek\";\n public bool IsAvailable => !string.IsNullOrEmpty(_apiKey);\n\n public DeepSeekProvider(string apiKey, string model = \"deepseek-chat\")\n {\n _httpClient = new HttpClient();\n _apiKey = apiKey;\n _model = model;\n _httpClient.DefaultRequestHeaders.Authorization =\n new AuthenticationHeaderValue(\"Bearer\", _apiKey);\n }\n\n public void SetLanguage(string language) // 👈 إضافة\n {\n _language = language;\n }\n\n public async Task<FunctionReview> ReviewFunctionAsync(FunctionReview function)\n {\n // 👈 اختيار الـ System Prompt حسب اللغة\n var systemPrompt = _language == \"ar\"\n ? @\"أنت خبير متخصص في .NET و C# مع خبرة 10 سنوات.\nمهمتك هي تحليل كود C# وتقديم ملاحظات بناءة ودقيقة.\nيجب أن يكون الرد بصيغة JSON فقط بدون أي نص خارج JSON.\"\n : @\"You are a senior .NET backend developer. Respond with valid JSON only.\";\n\n // 👈 اختيار الـ User Prompt حسب اللغة\n var userPrompt = _language == \"ar\"\n ? $@\"\nقم بمراجعة دالة C# التالية:\n\nاسم الدالة: {function.FunctionName}\nرقم السطر: {function.LineNumber}\n\nالكود:\n```csharp\n{function.Code}\nقم بالرد بصيغة JSON بالهيكل التالي:\n{{\n\"\"issues\"\": [\n{{ \"\"severity\"\": \"\"Warning\"\", \"\"message\"\": \"\"وصف المشكلة\"\", \"\"codeSnippet\"\": \"\"السطر المرتبط\"\" }}\n],\n\"\"suggestion\"\": \"\"اقتراح التحسين الشامل\"\"\n}}\n\nدرجة الخطورة: \"\"Info\"\"، \"\"Warning\"\"، أو \"\"Critical\"\".\nقم بالرد باللغة العربية.\"\n: $@\"\nReview this C# function:\n\nFunction Name: {function.FunctionName}\nLine Number: {function.LineNumber}\n\nCode:\n\ncsharp\n{function.Code}\nReturn JSON with this exact structure:\n{{\n\"\"issues\"\": [\n{{ \"\"severity\"\": \"\"Warning\"\", \"\"message\"\": \"\"issue description\"\", \"\"codeSnippet\"\": \"\"relevant code line\"\" }}\n],\n\"\"suggestion\"\": \"\"overall improvement suggestion\"\"\n}}\n\nSeverity must be: \"\"Info\"\", \"\"Warning\"\", or \"\"Critical\"\".\";\n\n var request = new\n {\n model = _model,\n messages = new[]\n {\nnew { role = \"system\", content = systemPrompt },\nnew { role = \"user\", content = userPrompt }\n},\n temperature = 0.3,\n max_tokens = 800\n };\n\n try\n {\n var json = JsonSerializer.Serialize(request);\n var content = new StringContent(json, Encoding.UTF8, \"application/json\");\n\n var response = await _httpClient.PostAsync(\n \"https://api.deepseek.com/v1/chat/completions\",\n content);\n\n var responseJson = await response.Content.ReadAsStringAsync();\n\n using var doc = JsonDocument.Parse(responseJson);\n var result = doc.RootElement.GetProperty(\"choices\")[0].GetProperty(\"message\").GetProperty(\"content\").GetString() ?? \"\";\n\n var (issues, suggestion) = ParseResponse(result);\n\n function.Issues = issues;\n function.Suggestion = suggestion;\n }\n catch (Exception ex)\n {\n function.Suggestion = _language == \"ar\"\n ? $\"⚠️ خطأ في DeepSeek: {ex.Message}\"\n : $\"⚠️ DeepSeek Error: {ex.Message}\";\n function.Issues = new List<Issue>();\n }\n\n return function;\n }\n\n public async Task<string> GenerateSummaryAsync(List<FunctionReview> reviews)\n {\n var totalIssues = reviews.Sum(r => r.Issues.Count);\n var critical = reviews.Sum(r => r.Issues.Count(i => i.Severity == IssueSeverity.Critical));\n var warnings = reviews.Sum(r => r.Issues.Count(i => i.Severity == IssueSeverity.Warning));\n\n if (_language == \"ar\")\n {\n var result = $@\"\n📊 ملخص المراجعة\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n📝 عدد الدوال التي تمت مراجعتها: {reviews.Count}\n🐛 إجمالي المشاكل: {totalIssues}\n🔴 خطيرة: {critical}\n⚠️ تحذيرات: {warnings}\n\";\n\n if (critical > 0)\n {\n result += \"\\n⚠️ يرجى إصلاح المشاكل الخطيرة قبل المتابعة!\";\n }\n else if (totalIssues == 0)\n {\n result += \"\\n✨ ممتاز! لم يتم العثور على أي مشاكل.\";\n }\n\n return await Task.FromResult(result);\n }\n else\n {\n var result = $@\"\n📊 Review Summary\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n📝 Functions reviewed: {reviews.Count}\n🐛 Total issues: {totalIssues}\n🔴 Critical: {critical}\n⚠️ Warnings: {warnings}\n\";\n\n if (critical > 0)\n {\n result += \"\\n⚠️ Please fix critical issues before merging!\";\n }\n else if (totalIssues == 0)\n {\n result += \"\\n✨ Excellent! No issues found.\";\n }\n\n return await Task.FromResult(result);\n }\n }\n\n private (List<Issue> issues, string suggestion) ParseResponse(string response)\n {\n try\n {\n var json = response.Trim();\n var start = json.IndexOf('{');\n var end = json.LastIndexOf('}');\n\n if (start >= 0 && end > start)\n {\n json = json.Substring(start, end - start + 1);\n }\n\n using var doc = JsonDocument.Parse(json);\n var root = doc.RootElement;\n\n var issues = new List<Issue>();\n\n if (root.TryGetProperty(\"issues\", out var issuesArray))\n {\n foreach (var item in issuesArray.EnumerateArray())\n {\n var severityStr = item.GetProperty(\"severity\").GetString();\n var severity = severityStr?.ToLower() switch\n {\n \"critical\" => IssueSeverity.Critical,\n \"warning\" => IssueSeverity.Warning,\n _ => IssueSeverity.Info\n };\n\n issues.Add(new Issue\n {\n Severity = severity,\n Message = item.GetProperty(\"message\").GetString() ?? \"\",\n CodeSnippet = item.TryGetProperty(\"codeSnippet\", out var snippet)\n ? snippet.GetString()\n : null\n });\n }\n }\n\n var suggestion = root.TryGetProperty(\"suggestion\", out var suggestionProp)\n ? suggestionProp.GetString() ?? \"\"\n : \"\";\n\n return (issues, suggestion);\n }\n catch\n {\n return (new List<Issue>(), _language == \"ar\" ? \"تعذر تحليل استجابة الذكاء الاصطناعي\" : \"Unable to parse response\");\n }\n }\n}"}, "e0fc575fcf2216ac99e8d37a900882e9210f0987": {"t": 1785760507.9815562, "n": 6828, "h": "d753ac7050a67c72", "c": "using AICodeReviewer.Core.Models;\nusing System.Net.Http.Headers;\nusing System.Text;\nusing System.Text.Json;\n\nnamespace AICodeReviewer.Core.AI.Providers;\n\npublic class DeepSeekProvider : IAIProvider\n{\n private readonly HttpClient _httpClient;\n private readonly string _apiKey;\n private readonly string _model;\n private string _language = \"en\"; // 👈 إضافة\n\n public string ProviderName => \"DeepSeek\";\n public bool IsAvailable => !string.IsNullOrEmpty(_apiKey);\n\n public DeepSeekProvider(string apiKey, string model = \"deepseek-chat\")\n {\n _httpClient = new HttpClient();\n _apiKey = apiKey;\n _model = model;\n _httpClient.DefaultRequestHeaders.Authorization =\n new AuthenticationHeaderValue(\"Bearer\", _apiKey);\n }\n\n public void SetLanguage(string language) // 👈 إضافة\n {\n _language = language;\n }\n\n public async Task<FunctionReview> ReviewFunctionAsync(FunctionReview function)\n {\n // 👈 اختيار الـ System Prompt حسب اللغة\n var systemPrompt = _language == \"ar\"\n ? @\"أنت خبير متخصص في .NET و C# مع خبرة 10 سنوات.\nمهمتك هي تحليل كود C# وتقديم ملاحظات بناءة ودقيقة.\nيجب أن يكون الرد بصيغة JSON فقط بدون أي نص خارج JSON.\"\n : @\"You are a senior .NET backend developer. Respond with valid JSON only.\";\n\n // 👈 اختيار الـ User Prompt حسب اللغة\n var userPrompt = _language == \"ar\"\n ? $@\"\nقم بمراجعة دالة C# التالية:\n\nاسم الدالة: {function.FunctionName}\nرقم السطر: {function.LineNumber}\n\nالكود:\n```csharp\n{function.Code}\nقم بالرد بصيغة JSON بالهيكل التالي:\n{{\n\"\"issues\"\": [\n{{ \"\"severity\"\": \"\"Warning\"\", \"\"message\"\": \"\"وصف المشكلة\"\", \"\"codeSnippet\"\": \"\"السطر المرتبط\"\" }}\n],\n\"\"suggestion\"\": \"\"اقتراح التحسين الشامل\"\"\n}}\n\nدرجة الخطورة: \"\"Info\"\"، \"\"Warning\"\"، أو \"\"Critical\"\".\nقم بالرد باللغة العربية.\"\n: $@\"\nReview this C# function:\n\nFunction Name: {function.FunctionName}\nLine Number: {function.LineNumber}\n\nCode:\n\ncsharp\n{function.Code}\nReturn JSON with this exact structure:\n{{\n\"\"issues\"\": [\n{{ \"\"severity\"\": \"\"Warning\"\", \"\"message\"\": \"\"issue description\"\", \"\"codeSnippet\"\": \"\"relevant code line\"\" }}\n],\n\"\"suggestion\"\": \"\"overall improvement suggestion\"\"\n}}\n\nSeverity must be: \"\"Info\"\", \"\"Warning\"\", or \"\"Critical\"\".\";\n\n var request = new\n {\n model = _model,\n messages = new[]\n {\nnew { role = \"system\", content = systemPrompt },\nnew { role = \"user\", content = userPrompt }\n},\n temperature = 0.3,\n max_tokens = 800\n };\n\n try\n {\n var json = JsonSerializer.Serialize(request);\n var content = new StringContent(json, Encoding.UTF8, \"application/json\");\n\n var response = await _httpClient.PostAsync(\n \"https://api.deepseek.com/v1/chat/completions\",\n content);\n\n var responseJson = await response.Content.ReadAsStringAsync();\n\n using var doc = JsonDocument.Parse(responseJson);\n var result = doc.RootElement.GetProperty(\"choices\")[0].GetProperty(\"message\").GetProperty(\"content\").GetString() ?? \"\";\n\n var (issues, suggestion) = ParseResponse(result);\n\n function.Issues = issues;\n function.Suggestion = suggestion;\n }\n catch (Exception ex)\n {\n function.Suggestion = _language == \"ar\"\n ? $\"⚠️ خطأ في DeepSeek: {ex.Message}\"\n : $\"⚠️ DeepSeek Error: {ex.Message}\";\n function.Issues = new List<Issue>();\n }\n\n return function;\n }\n\n public async Task<string> GenerateSummaryAsync(List<FunctionReview> reviews)\n {\n var totalIssues = reviews.Sum(r => r.Issues.Count);\n var critical = reviews.Sum(r => r.Issues.Count(i => i.Severity == IssueSeverity.Critical));\n var warnings = reviews.Sum(r => r.Issues.Count(i => i.Severity == IssueSeverity.Warning));\n\n if (_language == \"ar\")\n {\n var result = $@\"\n📊 ملخص المراجعة\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n📝 عدد الدوال التي تمت مراجعتها: {reviews.Count}\n🐛 إجمالي المشاكل: {totalIssues}\n🔴 خطيرة: {critical}\n⚠️ تحذيرات: {warnings}\n\";\n\n if (critical > 0)\n {\n result += \"\\n⚠️ يرجى إصلاح المشاكل الخطيرة قبل المتابعة!\";\n }\n else if (totalIssues == 0)\n {\n result += \"\\n✨ ممتاز! لم يتم العثور على أي مشاكل.\";\n }\n\n return await Task.FromResult(result);\n }\n else\n {\n var result = $@\"\n📊 Review Summary\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n📝 Functions reviewed: {reviews.Count}\n🐛 Total issues: {totalIssues}\n🔴 Critical: {critical}\n⚠️ Warnings: {warnings}\n\";\n\n if (critical > 0)\n {\n result += \"\\n⚠️ Please fix critical issues before merging!\";\n }\n else if (totalIssues == 0)\n {\n result += \"\\n✨ Excellent! No issues found.\";\n }\n\n return await Task.FromResult(result);\n }\n }\n\n private (List<Issue> issues, string suggestion) ParseResponse(string response)\n {\n try\n {\n var json = response.Trim();\n var start = json.IndexOf('{');\n var end = json.LastIndexOf('}');\n\n if (start >= 0 && end > start)\n {\n json = json.Substring(start, end - start + 1);\n }\n\n using var doc = JsonDocument.Parse(json);\n var root = doc.RootElement;\n\n var issues = new List<Issue>();\n\n if (root.TryGetProperty(\"issues\", out var issuesArray))\n {\n foreach (var item in issuesArray.EnumerateArray())\n {\n var severityStr = item.GetProperty(\"severity\").GetString();\n var severity = severityStr?.ToLower() switch\n {\n \"critical\" => IssueSeverity.Critical,\n \"warning\" => IssueSeverity.Warning,\n _ => IssueSeverity.Info\n };\n\n issues.Add(new Issue\n {\n Severity = severity,\n Message = item.GetProperty(\"message\").GetString() ?? \"\",\n CodeSnippet = item.TryGetProperty(\"codeSnippet\", out var snippet)\n ? snippet.GetString()\n : null\n });\n }\n }\n\n var suggestion = root.TryGetProperty(\"suggestion\", out var suggestionProp)\n ? suggestionProp.GetString() ?? \"\"\n : \"\";\n\n return (issues, suggestion);\n }\n catch\n {\n return (new List<Issue>(), _language == \"ar\" ? \"تعذر تحليل استجابة الذكاء الاصطناعي\" : \"Unable to parse response\");\n }\n }\n}"}, "912456da43cc1535e360a3712a371744f901b4b5": {"t": 1785760509.3278568, "n": 5020, "h": "9fd99a7561b7ed7f", "c": "using AICodeReviewer.Core.Models;\nusing System.Net.Http.Headers;\nusing System.Text;\nusing System.Text.Json;\n\n\nnamespace AICodeReviewer.Core.AI.Providers;\n\npublic class DeepSeekProvider : IAIProvider\n{\n private readonly HttpClient _httpClient;\n private readonly string _apiKey;\n private readonly string _model;\n\n public string ProviderName => \"DeepSeek\";\n public bool IsAvailable => !string.IsNullOrEmpty(_apiKey);\n\n public DeepSeekProvider(string apiKey, string model = \"deepseek-chat\")\n {\n _httpClient = new HttpClient();\n _apiKey = apiKey;\n _model = model;\n _httpClient.DefaultRequestHeaders.Authorization =\n new AuthenticationHeaderValue(\"Bearer\", _apiKey);\n }\n\n public async Task<FunctionReview> ReviewFunctionAsync(FunctionReview function)\n {\n var request = new\n {\n model = _model,\n messages = new[]\n {\n new {\n role = \"system\",\n content = @\"You are a senior .NET backend developer. Respond with valid JSON only.\"\n },\n new {\n role = \"user\",\n content = $@\"\nReview this C# function:\n\nFunction: {function.FunctionName}\nCode:\n```csharp\n{function.Code}\nReturn JSON: {{ \"\"issues\"\": [{{ \"\"severity\"\": \"\"Warning\"\", \"\"message\"\": \"\"...\"\" }}], \"\"suggestion\"\": \"\"...\"\" }}\"\n}\n},\n temperature = 0.3,\n max_tokens = 800\n };\n\n try\n {\n var json = JsonSerializer.Serialize(request);\n var content = new StringContent(json, Encoding.UTF8, \"application/json\");\n\n var response = await _httpClient.PostAsync(\n \"https://api.deepseek.com/v1/chat/completions\",\n content);\n\n var responseJson = await response.Content.ReadAsStringAsync();\n\n using var doc = JsonDocument.Parse(responseJson);\n var result = doc.RootElement.GetProperty(\"choices\")[0].GetProperty(\"message\").GetProperty(\"content\").GetString() ?? \"\";\n\n var (issues, suggestion) = ParseResponse(result);\n\n function.Issues = issues;\n function.Suggestion = suggestion;\n }\n catch (Exception ex)\n {\n function.Suggestion = $\"⚠️ DeepSeek Error: {ex.Message}\";\n function.Issues = new List<Issue>();\n }\n\n return function;\n }\n\n public async Task<string> GenerateSummaryAsync(List<FunctionReview> reviews)\n {\n var totalIssues = reviews.Sum(r => r.Issues.Count);\n var critical = reviews.Sum(r => r.Issues.Count(i => i.Severity == IssueSeverity.Critical));\n var warnings = reviews.Sum(r => r.Issues.Count(i => i.Severity == IssueSeverity.Warning));\n\n var result = $@\"\n📊 Review Summary\n━━━━━━━━━━━━━━━━━━━━━━━━━━\n📝 Functions reviewed: {reviews.Count}\n🐛 Total issues: {totalIssues}\n🔴 Critical: {critical}\n⚠️ Warnings: {warnings}\n\";\n\n if (critical > 0)\n {\n result += \"\\n⚠️ Please fix critical issues before merging!\";\n }\n else if (totalIssues == 0)\n {\n result += \"\\n✨ Excellent! No issues found.\";\n }\n\n return await Task.FromResult(result);\n }\n\n private (List<Issue> issues, string suggestion) ParseResponse(string response)\n {\n // نفس الـ ParseResponse من OllamaProvider\n try\n {\n var json = response.Trim();\n var start = json.IndexOf('{');\n var end = json.LastIndexOf('}');\n\n if (start >= 0 && end > start)\n {\n json = json.Substring(start, end - start + 1);\n }\n\n using var doc = JsonDocument.Parse(json);\n var root = doc.RootElement;\n\n var issues = new List<Issue>();\n\n if (root.TryGetProperty(\"issues\", out var issuesArray))\n {\n foreach (var item in issuesArray.EnumerateArray())\n {\n var severityStr = item.GetProperty(\"severity\").GetString();\n var severity = severityStr?.ToLower() switch\n {\n \"critical\" => IssueSeverity.Critical,\n \"warning\" => IssueSeverity.Warning,\n _ => IssueSeverity.Info\n };\n\n issues.Add(new Issue\n {\n Severity = severity,\n Message = item.GetProperty(\"message\").GetString() ?? \"\",\n CodeSnippet = item.TryGetProperty(\"codeSnippet\", out var snippet)\n ? snippet.GetString()\n : null\n });\n }\n }\n\n var suggestion = root.TryGetProperty(\"suggestion\", out var suggestionProp)\n ? suggestionProp.GetString() ?? \"\"\n : \"\";\n\n return (issues, suggestion);\n }\n catch\n {\n return (new List<Issue>(), \"Unable to parse response\");\n }\n }\n}\n"}}}}