| 1 | namespace AgentForge.Abstractions; |
| 2 | |
| 3 | /// <summary>Human-layer org catalog repo list grouping (FORGE-ADR-0027).</summary> |
| 4 | public sealed record ForgeOrgCatalogRepoItem( |
| 5 | string Name, |
| 6 | string Visibility, |
| 7 | string DriveMode, |
| 8 | string UrlPath, |
| 9 | string? Org = null, |
| 10 | string? Group = null, |
| 11 | DateTimeOffset? CreatedAt = null); |
| 12 | |
| 13 | /// <summary>Catalog view state for grouping toolbar and repo lists.</summary> |
| 14 | public sealed record ForgeOrgCatalogViewContext( |
| 15 | string CatalogBasePath, |
| 16 | string? ActiveGroupPath, |
| 17 | IReadOnlyList<string> GroupStack, |
| 18 | int EditorRowCount = 0); |
| 19 | |
| 20 | public interface IForgeOrgCatalogGrouping |
| 21 | { |
| 22 | IReadOnlyList<string> ParseGroupStack(string? groupStackQuery); |
| 23 | |
| 24 | int ParseEditorRowCount(string? groupStackRowsQuery, int stackCount); |
| 25 | |
| 26 | string BuildCatalogUrl( |
| 27 | in ForgeOrgCatalogViewContext context, |
| 28 | string? groupPath = null, |
| 29 | IReadOnlyList<string>? groupStack = null, |
| 30 | int? editorRowCount = null); |
| 31 | |
| 32 | string RenderToolbar(in ForgeOrgCatalogViewContext context); |
| 33 | |
| 34 | void AppendRepoNodes( |
| 35 | ICollection<string> childNodes, |
| 36 | IReadOnlyList<ForgeOrgCatalogRepoItem> repos, |
| 37 | in ForgeOrgCatalogViewContext context); |
| 38 | |
| 39 | string RenderRepoBody( |
| 40 | IReadOnlyList<ForgeOrgCatalogRepoItem> repos, |
| 41 | in ForgeOrgCatalogViewContext context); |
| 42 | } |
| 43 | |