namespace Volcanic.AgenticCore.Extensions.ClaudeCode; /// /// The built-in Claude Code plugins every request disables through enabledPlugins. Built-ins load whatever the /// setting sources say, and which ones load depends on the CLI version and the account's feature flags, so the set /// starts with the known ones and learns new ones from system/init (the request is then replayed once). /// public sealed class BuiltinPlugins { public const string Suffix = "@builtin"; /// The built-ins known to the CLI versions this provider was tested with. public static readonly IReadOnlyList Known = [ "agents-md@builtin", "telemetry@builtin", "cc-plugin-agents-md@builtin", "cc-plugin-claude-test@builtin", "cc-plugin-diff@builtin", "cc-plugin-mermaid@builtin", "cc-plugin-mods-guide@builtin", "cc-plugin-plugin-authoring@builtin", "cc-plugin-responsive-mode@builtin", "cc-plugin-sec-default@builtin", "cc-plugin-telemetry@builtin", "cc-plugin-tips@builtin", "cc-plugin-you-should-know@builtin", ]; /// Process-wide: a built-in learned in one session is disabled for every later request. public static BuiltinPlugins Shared { get; } = new(); private readonly Lock _gate = new(); private readonly SortedSet _disabled; public BuiltinPlugins(IEnumerable? initial = null) => _disabled = new SortedSet(initial ?? Known, StringComparer.Ordinal); /// A sorted snapshot of the plugins to disable. public IReadOnlyList Disabled { get { lock (_gate) return [.. _disabled]; } } /// Adds built-in plugin ids; true when at least one was new. public bool Disable(IEnumerable plugins) { ArgumentNullException.ThrowIfNull(plugins); var added = false; lock (_gate) { foreach (var plugin in plugins) if (IsBuiltin(plugin)) added |= _disabled.Add(plugin); } return added; } public static bool IsBuiltin(string? source) => source is { Length: > 9 } s && s.EndsWith(Suffix, StringComparison.Ordinal) && !s.Contains('/') && !s.Contains('\\'); }