| 1 | namespace CascadeIDE.Contracts.Experimental.Capabilities; |
| 2 | |
| 3 | /// <summary> |
| 4 | /// Общие поля capability-дескриптора. |
| 5 | /// </summary> |
| 6 | /// <remarks> |
| 7 | /// Дескрипторы являются частью capability-map (introspection) и должны быть стабильными по семантике полей: |
| 8 | /// их читают не только UI, но и диагностические/автоматизационные сценарии. |
| 9 | /// </remarks> |
| 10 | [ApiStability(ApiStability.Experimental)] |
| 11 | public abstract record CapabilityDescriptorBase |
| 12 | { |
| 13 | /// <summary>Строгий идентификатор capability (используется overlay’ями и ссылками по всему продукту).</summary> |
| 14 | public required string Id { get; init; } |
| 15 | /// <summary>Идентификатор модуля-владельца (см. <see cref="Experimental.ICascadeFeatureModule.Id"/>).</summary> |
| 16 | public required string OwnerModuleId { get; init; } |
| 17 | /// <summary>Внутренняя метка стабильности контракта/описания.</summary> |
| 18 | public ApiStability Stability { get; init; } = ApiStability.Experimental; |
| 19 | /// <summary>Набор коротких тегов для фильтрации/группировки.</summary> |
| 20 | public IReadOnlyList<string> Tags { get; init; } = Array.Empty<string>(); |
| 21 | /// <summary>Явные зависимости (ids), нужные для доступности capability.</summary> |
| 22 | public IReadOnlyList<string> Requires { get; init; } = Array.Empty<string>(); |
| 23 | } |
| 24 | |
| 25 | /// <summary>Service capability: “предоставляю сервис”.</summary> |
| 26 | [ApiStability(ApiStability.Experimental)] |
| 27 | public sealed record ServiceCapabilityDescriptor : CapabilityDescriptorBase |
| 28 | { |
| 29 | /// <summary>Тип контракта (обычно интерфейс), который предоставляет capability.</summary> |
| 30 | public required Type ContractType { get; init; } |
| 31 | /// <summary>Тип реализации контракта.</summary> |
| 32 | public required Type ImplementationType { get; init; } |
| 33 | } |
| 34 | |
| 35 | /// <summary>Command capability: “предоставляю команду”.</summary> |
| 36 | [ApiStability(ApiStability.Experimental)] |
| 37 | public sealed record CommandCapabilityDescriptor : CapabilityDescriptorBase |
| 38 | { |
| 39 | /// <summary>Отображаемое имя команды.</summary> |
| 40 | public string Title { get; init; } = ""; |
| 41 | /// <summary>Категория/группа для палитры/меню.</summary> |
| 42 | public string Category { get; init; } = ""; |
| 43 | /// <summary>Рекомендованный hotkey (если задан).</summary> |
| 44 | public string? DefaultHotkey { get; init; } |
| 45 | /// <summary> |
| 46 | /// Первичная зона внимания в модели кокпита (канонический id), если команда осмысленно с ней связана; иначе <see langword="null"/>. |
| 47 | /// Не задаёт презентацию (диалог vs панель). ADR 0025. |
| 48 | /// </summary> |
| 49 | /// <seealso cref="Experimental.AttentionZoneCanonicalIds"/> |
| 50 | public string? PrimaryAttentionZoneId { get; init; } |
| 51 | } |
| 52 | |
| 53 | /// <summary>UI surface capability: “предоставляю поверхность UI”.</summary> |
| 54 | [ApiStability(ApiStability.Experimental)] |
| 55 | public sealed record UiSurfaceCapabilityDescriptor : CapabilityDescriptorBase |
| 56 | { |
| 57 | /// <summary>Отображаемое имя поверхности UI.</summary> |
| 58 | public string DisplayName { get; init; } = ""; |
| 59 | /// <summary> |
| 60 | /// Первичная зона внимания в модели кокпита (канонический id). ADR 0025. Презентация (overlay, пиксели) — отдельно. |
| 61 | /// </summary> |
| 62 | /// <seealso cref="Experimental.AttentionZoneCanonicalIds"/> |
| 63 | public string? PrimaryAttentionZoneId { get; init; } |
| 64 | /// <summary> |
| 65 | /// Стабильный id панели shell (как в <c>attention_routing</c> / <see cref="Experimental.AttentionPanelCanonicalIds"/>), если поверхность привязана к конкретной панели. |
| 66 | /// Вместе с <see cref="PrimaryAttentionZoneId"/> позволяет проверить согласованность с <c>AttentionZonePanelRuntime</c>. ADR 0025. |
| 67 | /// </summary> |
| 68 | /// <seealso cref="Experimental.AttentionPanelCanonicalIds"/> |
| 69 | public string? HostAttentionPanelId { get; init; } |
| 70 | } |
| 71 | |
| 72 | |