markdowndeeb25a2 | 1 | # Skia chat entities |
| 2 | |
| 3 | ## Два пути «карточек» |
| 4 | |
| 5 | | Сущность | Рендер | Когда | |
| 6 | |----------|--------|--------| |
| 7 | | **Topic** (`SkiaChatTopicCard`) | `SkiaKit.SkiaSectionedCard` — секции Тема / Теги / Саммари; `SkiaTileGridLayout` | Картотека тем в overview | |
| 8 | | **Product spine** (`SkiaChatBubbleEntity` + `CardPanel`) | `SkiaChatBubbleRenderer` | Сквозная линия продукта над лентой | |
| 9 | |
| 10 | Topic и spine **намеренно разделены**: topic = drill-in по `ThreadId`; spine = ортогональная линия ([ADR 0096](../../../docs/adr/0096-intercom-topic-card-summary-and-product-spine.md)). |
| 11 | |
| 12 | ## Лента сообщений (flat feed) |
| 13 | |
| 14 | | Сущность | `SkiaChatBubbleKind` | Когда | |
| 15 | |----------|----------------------|--------| |
| 16 | | **Сообщения** (`SkiaChatMessageFeedEntity`) | `Feed` | user / agent / thinking / tool — role rail + тело через **`SkiaChatFeedLayout`** ([ADR 0123](../../../docs/adr/0123-intercom-full-skia-surface-evolution.md)) | |
| 17 | | **Slash outcome** (`SkiaChatSlashCommandEntity`) | отдельный flat row | `/help`, `/build run`, … | |
| 18 | | **Clarification** | `Feed` | пакеты уточнений | |
| 19 | | **Навигация** (заголовок ветки, «Назад к темам») | `Feed` | компактные meta-строки | |
| 20 | |
| 21 | `SkiaChatBubbleKind.Standard` остаётся для legacy/особых случаев; **не** для обычных реплик в detail-ленте. |
| 22 | |
| 23 | ## Пайплайн |
| 24 | |
| 25 | `ChatSurfaceSnapshot` → `ChatSurfaceEntityFactory` (Creator) → `ISkiaChatEntity` → `SkiaChatLayoutEngine` → `SkiaChatSurfaceControl`. |
| 26 | |
| 27 | Примитивы карточек/сетки/темы: [`Views/SkiaKit/README.md`](../../SkiaKit/README.md). |
| 28 | |
| 29 | UI-строки: `ChatProductSpinePresentation`, `ChatThreadOverviewPresentation` (Features/Chat). |
| 30 | |
View only · write via MCP/CIDE