mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-02-12 11:21:38 +00:00
Some checks are pending
Build and Release / Read metadata (push) Waiting to run
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-apple-darwin, osx-arm64, macos-latest, aarch64-apple-darwin, dmg updater) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-pc-windows-msvc.exe, win-arm64, windows-latest, aarch64-pc-windows-msvc, nsis updater) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-unknown-linux-gnu, linux-arm64, ubuntu-22.04-arm, aarch64-unknown-linux-gnu, appimage deb updater) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-apple-darwin, osx-x64, macos-latest, x86_64-apple-darwin, dmg updater) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-pc-windows-msvc.exe, win-x64, windows-latest, x86_64-pc-windows-msvc, nsis updater) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-unknown-linux-gnu, linux-x64, ubuntu-22.04, x86_64-unknown-linux-gnu, appimage deb updater) (push) Blocked by required conditions
Build and Release / Prepare & create release (push) Blocked by required conditions
Build and Release / Publish release (push) Blocked by required conditions
Co-authored-by: Claude <noreply@anthropic.com>
101 lines
5.6 KiB
C#
101 lines
5.6 KiB
C#
using AIStudio.Settings;
|
|
using AIStudio.Settings.DataModel;
|
|
|
|
namespace AIStudio.Tools;
|
|
|
|
/// <summary>
|
|
/// Extension methods for checking assistant visibility based on configuration and preview features.
|
|
/// </summary>
|
|
public static class AssistantVisibilityExtensions
|
|
{
|
|
private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger(nameof(AssistantVisibilityExtensions));
|
|
|
|
/// <summary>
|
|
/// Checks if an assistant should be visible based on configuration and optional preview feature requirements.
|
|
/// </summary>
|
|
/// <param name="settingsManager">The settings manager to check configuration against.</param>
|
|
/// <param name="withLogging">Whether to log visibility decisions.</param>
|
|
/// <param name="assistantName">The name of the assistant to check (for logging purposes).</param>
|
|
/// <param name="component">The assistant component to check.</param>
|
|
/// <param name="requiredPreviewFeature">Optional preview feature that must be enabled for the assistant to be visible.</param>
|
|
/// <returns>True if the assistant should be visible, false otherwise.</returns>
|
|
public static bool IsAssistantVisible(this SettingsManager settingsManager, Components component, bool withLogging = true, string assistantName = "", PreviewFeatures requiredPreviewFeature = PreviewFeatures.NONE)
|
|
{
|
|
withLogging = withLogging && !string.IsNullOrWhiteSpace(assistantName);
|
|
|
|
// Check if a preview feature is required and enabled:
|
|
if (requiredPreviewFeature != PreviewFeatures.NONE && !requiredPreviewFeature.IsEnabled(settingsManager))
|
|
{
|
|
if(withLogging)
|
|
LOGGER.LogInformation("Assistant '{AssistantName}' is not visible because the required preview feature '{PreviewFeature}' is not enabled.", assistantName, requiredPreviewFeature);
|
|
|
|
return false;
|
|
}
|
|
|
|
// If no component is specified, it's always visible:
|
|
if (component is Components.NONE)
|
|
{
|
|
if(withLogging)
|
|
LOGGER.LogWarning("Assistant '{AssistantName}' is visible because no component is specified.", assistantName);
|
|
|
|
return true;
|
|
}
|
|
|
|
// Map Components enum to ConfigurableAssistant enum:
|
|
var configurableAssistant = component switch
|
|
{
|
|
Components.GRAMMAR_SPELLING_ASSISTANT => ConfigurableAssistant.GRAMMAR_SPELLING_ASSISTANT,
|
|
Components.ICON_FINDER_ASSISTANT => ConfigurableAssistant.ICON_FINDER_ASSISTANT,
|
|
Components.REWRITE_ASSISTANT => ConfigurableAssistant.REWRITE_ASSISTANT,
|
|
Components.TRANSLATION_ASSISTANT => ConfigurableAssistant.TRANSLATION_ASSISTANT,
|
|
Components.AGENDA_ASSISTANT => ConfigurableAssistant.AGENDA_ASSISTANT,
|
|
Components.CODING_ASSISTANT => ConfigurableAssistant.CODING_ASSISTANT,
|
|
Components.TEXT_SUMMARIZER_ASSISTANT => ConfigurableAssistant.TEXT_SUMMARIZER_ASSISTANT,
|
|
Components.EMAIL_ASSISTANT => ConfigurableAssistant.EMAIL_ASSISTANT,
|
|
Components.LEGAL_CHECK_ASSISTANT => ConfigurableAssistant.LEGAL_CHECK_ASSISTANT,
|
|
Components.SYNONYMS_ASSISTANT => ConfigurableAssistant.SYNONYMS_ASSISTANT,
|
|
Components.MY_TASKS_ASSISTANT => ConfigurableAssistant.MY_TASKS_ASSISTANT,
|
|
Components.JOB_POSTING_ASSISTANT => ConfigurableAssistant.JOB_POSTING_ASSISTANT,
|
|
Components.BIAS_DAY_ASSISTANT => ConfigurableAssistant.BIAS_DAY_ASSISTANT,
|
|
Components.ERI_ASSISTANT => ConfigurableAssistant.ERI_ASSISTANT,
|
|
Components.DOCUMENT_ANALYSIS_ASSISTANT => ConfigurableAssistant.DOCUMENT_ANALYSIS_ASSISTANT,
|
|
Components.I18N_ASSISTANT => ConfigurableAssistant.I18N_ASSISTANT,
|
|
|
|
_ => ConfigurableAssistant.UNKNOWN,
|
|
};
|
|
|
|
// If the component doesn't map to a configurable assistant, it's always visible:
|
|
if (configurableAssistant is ConfigurableAssistant.UNKNOWN)
|
|
{
|
|
if(withLogging)
|
|
LOGGER.LogWarning("Assistant '{AssistantName}' is visible because its component '{Component}' does not map to a configurable assistant.", assistantName, component);
|
|
|
|
return true;
|
|
}
|
|
|
|
// Check if the assistant is hidden by any configuration plugin:
|
|
var isHidden = settingsManager.ConfigurationData.App.HiddenAssistants.Contains(configurableAssistant);
|
|
if (isHidden && withLogging)
|
|
LOGGER.LogInformation("Assistant '{AssistantName}' is hidden based on the configuration.", assistantName);
|
|
|
|
return !isHidden;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Checks if any assistant in a category should be visible.
|
|
/// </summary>
|
|
/// <param name="settingsManager">The settings manager to check configuration against.</param>
|
|
/// <param name="categoryName">The name of the assistant category (for logging purposes).</param>
|
|
/// <param name="assistants">The assistants in the category with their optional preview feature requirements.</param>
|
|
/// <returns>True if at least one assistant in the category should be visible, false otherwise.</returns>
|
|
public static bool IsAnyCategoryAssistantVisible(this SettingsManager settingsManager, string categoryName, params (Components Component, PreviewFeatures RequiredPreviewFeature)[] assistants)
|
|
{
|
|
foreach (var (component, requiredPreviewFeature) in assistants)
|
|
if (settingsManager.IsAssistantVisible(component, withLogging: false, requiredPreviewFeature: requiredPreviewFeature))
|
|
return true;
|
|
|
|
LOGGER.LogInformation("No assistants in category '{CategoryName}' are visible.", categoryName);
|
|
return false;
|
|
}
|
|
}
|