2026-04-09 08:01:24 +00:00
|
|
|
using AIStudio.Agents.AssistantAudit;
|
|
|
|
|
|
|
|
|
|
namespace AIStudio.Tools.PluginSystem.Assistants;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Runs an assistant security audit and maps the agent result to the persisted audit model.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed class AssistantPluginAuditService(AssistantAuditAgent auditAgent)
|
|
|
|
|
{
|
2026-07-21 06:17:13 +00:00
|
|
|
/// <summary>
|
|
|
|
|
/// Runs an assistant plugin audit, optionally falling back to the supplied provider when no audit provider is configured.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public async Task<PluginAssistantAudit> RunAuditAsync(PluginAssistants plugin, CancellationToken token = default, Settings.Provider? fallbackProvider = null)
|
2026-04-09 08:01:24 +00:00
|
|
|
{
|
2026-07-21 06:17:13 +00:00
|
|
|
var result = await auditAgent.AuditAsync(plugin, token, fallbackProvider);
|
2026-04-09 08:01:24 +00:00
|
|
|
var provider = auditAgent.ProviderSettings;
|
|
|
|
|
var promptPreview = await plugin.BuildAuditPromptPreviewAsync(token);
|
|
|
|
|
|
|
|
|
|
return new PluginAssistantAudit
|
|
|
|
|
{
|
|
|
|
|
PluginId = plugin.Id,
|
|
|
|
|
PluginHash = plugin.ComputeAuditHash(),
|
|
|
|
|
AuditedAtUtc = DateTimeOffset.UtcNow,
|
|
|
|
|
AuditProviderId = provider.Id,
|
|
|
|
|
AuditProviderName = provider == Settings.Provider.NONE
|
|
|
|
|
? string.Empty
|
|
|
|
|
: provider.InstanceName,
|
|
|
|
|
Level = AssistantAuditLevelExtensions.Parse(result.Level),
|
|
|
|
|
Summary = result.Summary,
|
|
|
|
|
Confidence = result.Confidence,
|
|
|
|
|
PromptPreview = promptPreview,
|
|
|
|
|
Findings = result.Findings,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|