Forge
csharp4405de34
1namespace 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)]
11public 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)]
27public 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)]
37public 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)]
55public 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
View only · write via MCP/CIDE