111 lines
3.8 KiB
C#
Executable File
111 lines
3.8 KiB
C#
Executable File
using MarketAlly.AIPlugin.Refactoring.Plugins;
|
|
using MarketAlly.AIPlugin.Refactoring.Services;
|
|
using Microsoft.Extensions.Logging;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace MarketAlly.AIPlugin.Refactoring
|
|
{
|
|
/// <summary>
|
|
/// Enhanced version of ReadmeGeneratorPlugin that integrates AI capabilities
|
|
/// </summary>
|
|
[AIPlugin("AIReadmeGenerator", "AI-powered README generator that creates intelligent, comprehensive documentation")]
|
|
public class AIReadmeGeneratorPlugin : IAIPlugin
|
|
{
|
|
[AIParameter("Path to project directory or solution file", required: true)]
|
|
public string ProjectPath { get; set; }
|
|
|
|
[AIParameter("Type of project: auto, library, application, tool, maui", required: false)]
|
|
public string ProjectType { get; set; } = "auto";
|
|
|
|
[AIParameter("Enable AI-powered content enhancement", required: false)]
|
|
public bool EnableAIEnhancement { get; set; } = true;
|
|
|
|
[AIParameter("Include AI-generated usage examples", required: false)]
|
|
public bool AIGeneratedExamples { get; set; } = true;
|
|
|
|
[AIParameter("Include AI-enhanced API documentation", required: false)]
|
|
public bool AIEnhancedApiDocs { get; set; } = true;
|
|
|
|
[AIParameter("Apply changes and create README.md file", required: false)]
|
|
public bool ApplyChanges { get; set; } = false;
|
|
|
|
public IReadOnlyDictionary<string, Type> SupportedParameters => new Dictionary<string, Type>
|
|
{
|
|
["projectPath"] = typeof(string),
|
|
["projectpath"] = typeof(string),
|
|
["projectType"] = typeof(string),
|
|
["projecttype"] = typeof(string),
|
|
["enableAIEnhancement"] = typeof(bool),
|
|
["enableaienhancement"] = typeof(bool),
|
|
["aiGeneratedExamples"] = typeof(bool),
|
|
["aigeneratedexamples"] = typeof(bool),
|
|
["aiEnhancedApiDocs"] = typeof(bool),
|
|
["aienhancedapidocs"] = typeof(bool),
|
|
["applyChanges"] = typeof(bool),
|
|
["applychanges"] = typeof(bool)
|
|
};
|
|
|
|
public async Task<AIPluginResult> ExecuteAsync(IReadOnlyDictionary<string, object> parameters)
|
|
{
|
|
try
|
|
{
|
|
// First, run the basic README generator
|
|
var basicGenerator = new ReadmeGeneratorPlugin();
|
|
var basicResult = await basicGenerator.ExecuteAsync(parameters);
|
|
|
|
if (!basicResult.Success)
|
|
{
|
|
return basicResult;
|
|
}
|
|
|
|
// If AI enhancement is disabled, return basic result
|
|
bool enableAI = GetBoolParameter(parameters, "enableAIEnhancement", "enableaienhancement", true);
|
|
if (!enableAI)
|
|
{
|
|
return basicResult;
|
|
}
|
|
|
|
// FIXED: Create registry instance properly (this is a simplified version)
|
|
// In a real implementation, you'd inject this or get it from the calling context
|
|
var tempRegistry = new AIPluginRegistry(null); // Pass null logger for now
|
|
var aiService = new AIReadmeEnhancementService(tempRegistry, null);
|
|
|
|
// For now, just return the basic result with AI enhancement flag
|
|
// This can be enhanced later when Claude integration is ready
|
|
var resultData = JsonSerializer.Deserialize<Dictionary<string, object>>(
|
|
JsonSerializer.Serialize(basicResult.Data));
|
|
|
|
resultData["AIEnhancementAvailable"] = true;
|
|
resultData["AIEnhancementNote"] = "AI enhancement ready for Claude integration";
|
|
|
|
return new AIPluginResult(resultData);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return new AIPluginResult(ex, $"AI README generation failed: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
private object GetParameterValue(IReadOnlyDictionary<string, object> parameters, params string[] keys)
|
|
{
|
|
foreach (var key in keys)
|
|
{
|
|
if (parameters.TryGetValue(key, out var value))
|
|
return value;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private bool GetBoolParameter(IReadOnlyDictionary<string, object> parameters, string key1, string key2, bool defaultValue)
|
|
{
|
|
var value = GetParameterValue(parameters, key1, key2);
|
|
return value != null ? Convert.ToBoolean(value) : defaultValue;
|
|
}
|
|
}
|
|
}
|