Forge
markdowndeeb25a2
1# ADR 0120: Primary work surface — Intercom или Editor (аналог Agent / Editor)
2
3**Статус:** Accepted · Implemented
4**Дата:** 2026-05-17
5
6## Связанные ADR
7
8| ADR | Роль |
9|-----|------|
10| [0017](0017-multi-window-workspace-and-agent-surfaces.md) | Топология PFD / Forward / MFD, `presentation`, мультиоконность |
11| [0021](0021-pfd-mfd-cockpit-attention-model.md) | Якоря внимания; Forward = лобовое поле зрения |
12| [0010](0010-ui-modes-toml-configuration.md) | Режимы UI в TOML; место для пресета «agent-central» |
13| [0028](0028-user-settings-toml-localappdata-and-secrets.md) | `%LocalAppData%\CascadeIDE\settings.toml` |
14| [0080](0080-intercom-naming-and-multi-party-channel-model.md) | Intercom — канал сессии, не «чат-виджет» |
15| [0098](0098-semantic-first-document-as-projection.md) | Редактор — мощный канал, не абсолют всей правды |
16| [0044](0044-avalonia-host-skia-agent-chat-surface.md) | Skia host для agent chat surface |
17| [0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md) | Topic cards в overview/detail |
18| [0119](0119-chat-slash-commands-intercom-surface.md) | Слэш-команды в `ChatInput` — усиливаются при Intercom в центре |
19| [0121](0121-intent-oriented-programming-paradigm.md) | IOP: дисциплина коммуникации; Intercom как центр вокруг цели; честные границы потока |
20| [0074](0074-settings-ui-mfd-compact-layout-overflow.md) | Плотность MFD при узкой колонке |
21
22### Вне ADR
23
24| Документ | Роль |
25|----------|------|
26| [ux/README.md](../ui-ux/README.md) | Актуальная линия Flight; legacy Focus/Balanced/Power — архив |
27| [iop-manifest-v1.md](../iop-manifest-v1.md) | IOP: Intercom — центр коммуникации; не обещать «переварить любой поток» |
28
29## Резюме
30
31- Вводится настройка **`primary_work_surface`**: **`intercom`** | **`editor`** (аналог **Agent / Editor** в Cursor).
32- Определяет, **что занимает якорь Forward** (лобовое поле): полноэкранный **Intercom** (чат + картотека + spine) или **редактор кода**.
33- Вторичный контур (MFD) показывает **другую** поверхность (редактор или страницы shell), без потери функций.
34- **Не** путать с primary-монитором ОС ([0017 § primary vs Forward](0017-multi-window-workspace-and-agent-surfaces.md#adr0017-p5-primary-vs-forward)).
35- Дефолт продукта: **`editor`**; пресет «как Cursor» — **`intercom`**. Связь с [0119](0119-chat-slash-commands-intercom-surface.md).
36- При **`intercom`** лобовой якорь — не «лента сообщений», а **центр коммуникации вокруг цели** (люди + агенты → намерение → реализация), см. [0121](0121-intent-oriented-programming-paradigm.md), [iop-manifest-v1.md](../iop-manifest-v1.md).
37
38---
39
40## Контекст
41
42Часть пользователей (в т.ч. при работе **в Cursor** с чатом на **главном экране**) проводит в диалоге с агентом **большую часть сессии**. Для них кокпитная метафора «Forward = редактор, чат на MFD» **инвертирована** относительно реального внимания: центр — **мысль и переписка**, код — **по запросу**.
43
44**Design thesis (ось, не только layout):** классические IDE оптимизируют **авторинг**; сопутствующая информация вокруг кода читается плохо. В agentic-цикле **писать в основном агент**, человеку — **восприятие и управление сессией**; ручное редактирование вторично (verify, surgical fix). `primary_work_surface = intercom` — продуктовое выражение этой оси; habitat и session graph — [0172](0172-conversation-first-habitat.md).
45
46В CIDE уже есть:
47
48- **три якоря** PFD / Forward / MFD ([0021](0021-pfd-mfd-cockpit-attention-model.md));
49- **Intercom** как продуктовая модель ([0080](0080-intercom-naming-and-multi-party-channel-model.md), [0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md), [0096](0096-intercom-topic-card-summary-and-product-spine.md));
50- **настраиваемая топология** экранов через `presentation` ([0017](0017-multi-window-workspace-and-agent-surfaces.md));
51- **режимы UI** в TOML ([0010](0010-ui-modes-toml-configuration.md)).
52
53Не хватает **явного переключателя «что в центре»** без ручной перекомпоновки мониторов и без смены всей строки `presentation`.
54
55---
56
57## Проблема
58
591. **Forward зашит как редактор** в ментальной модели и типовой раскладке — agent-central пользователь **периферийно** воспринимает чат.
602. **Путаница с монитором:** «центральный экран» ≠ **primary display** ОС — см. [0017](0017-multi-window-workspace-and-agent-surfaces.md); нужна отдельная ось **primary_work_surface**.
613. **0119 (слэши)** и **topic cards** выигрывают, когда Intercom уже в лобовом якоре; без 0120 архитектура остаётся «чат сбоку».
624. **Риск «убрать редактор»:** продуктовая цель — **сменить default фокус**, не отказ от кода ([0098](0098-semantic-first-document-as-projection.md)).
63
64---
65
66## Решение
67
68<a id="adr0120-p1"></a>
69
70### 1. Ось `primary_work_surface`
71
72Допустимые значения:
73
74| Значение | Лобовой якорь **Forward** | Типичное размещение редактора |
75|----------|---------------------------|-------------------------------|
76| **`editor`** *(дефолт CIDE)* | Редактор кода (AvaloniaEdit) | MFD: страница **Intercom** / чат в shell |
77| **`intercom`** | **Intercom** (полный `ChatPanel` + Skia surface: overview, spine, detail) | MFD: **Editor** как страница или докируемая панель; PFD без изменений по смыслу |
78
79**Инвариант:** обе поверхности **остаются доступны**; меняется **якорь внимания по умолчанию**, как переключение Agent / Editor в Cursor.
80
81<a id="adr0120-p2"></a>
82
83### 2. Ортогональность другим осям
84
85| Ось | Вопрос | Связь с `primary_work_surface` |
86|-----|--------|--------------------------------|
87| **`presentation`** ([0017](0017-multi-window-workspace-and-agent-surfaces.md)) | Сколько окон и долей P/F/M | Независима: можно `(P+F+M)` на одном дисплее **и** `intercom` в Forward |
88| **Primary monitor ОС** | Куда Windows ставит taskbar | **Не** задаёт Forward; см. [0017 §5](0017-multi-window-workspace-and-agent-surfaces.md#adr0017-p5-primary-vs-forward) |
89| **UiMode / Flight** ([0010](0010-ui-modes-toml-configuration.md)) | Видимость панелей, capabilities | Может **сужать** хром (Dark Cockpit); не подменяет якорь |
90| **Melody / Chords** ([0060](0060-keyboard-chord-stack-fms-tactical-strategic.md)) | Фокус зоны M/P/F | Сохраняются; `focus_forward` фокусирует **лобовой якорь** (чат или редактор) |
91
92<a id="adr0120-p3"></a>
93
94### 3. UX-контракт переключения
95
96- **Явный переключатель** в UI (toggle, пункт меню, опционально хоткей) — подписи **`Intercom`** / **`Editor`** или **`Agent`** / **`Editor`** (копирайт уточнить в UX; канон данных — `intercom` | `editor`).
97- Переключение **не сбрасывает** сессию чата и **не закрывает** открытые файлы; меняется только **хост в Forward** и **страница по умолчанию** на MFD.
98- Состояние **персистится** в `settings.toml` ([0028](0028-user-settings-toml-localappdata-and-secrets.md)).
99
100<a id="adr0120-p4"></a>
101
102### 4. Конфигурация (целевая схема)
103
104```toml
105# settings.toml (фрагмент)
106[workspace]
107primary_work_surface = "intercom" # "editor" | "intercom"
108```
109
110Опционально в **`UiModes/Flight.toml`** (или отдельный пресет `AgentCentral.toml`):
111
112```toml
113primary_work_surface = "intercom"
114# capabilities: шире чат, уже полоса IDE Health, …
115```
116
117**Дефолт при отсутствии ключа:** `editor` (совместимость с текущим CIDE).
118
119<a id="adr0120-p5"></a>
120
121### 5. Связь с Intercom и [0119](0119-chat-slash-commands-intercom-surface.md)
122
123При **`primary_work_surface = intercom`**:
124
125- Forward показывает **картотеку тем**, spine, detail — [0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md), [0096](0096-intercom-topic-card-summary-and-product-spine.md).
126- **`ChatInput`** — естественная **command line** сессии; слэш-команды ([0119](0119-chat-slash-commands-intercom-surface.md)) становятся **основным** путём к `build` / `test` / `card`, а не периферийным.
127
128При **`editor`** — поведение как сейчас; 0119 остаётся полезным, но чат не обязан быть в центре внимания.
129
130<a id="adr0120-p5b"></a>
131
132#### 5.1. Intercom в центре ≠ бесконечный поток
133
134`primary_work_surface = intercom` **не** означает «всё входящее в одну ленту» и **не** обещает, что продукт или агенты **вывезут любой объём** переписки от людей — без структуры его не вывозят и сами люди ([0121](0121-intent-oriented-programming-paradigm.md) § «Риски и границы», [iop-manifest-v1.md](../iop-manifest-v1.md) § «Честно о потоке»).
135
136Смысл центрального Intercom:
137
138- **линии работы** (topic cards, spine) вместо хаотичного чата;
139- **батчи уточнений** и треды ([0031](0031-agent-chat-clarification-batches-and-threading.md));
140- **intent-first** и слэши/MCP как один контракт ([0119](0119-chat-slash-commands-intercom-surface.md));
141- человек в Forward — **арбитр намерения и дельты**, а не диспетчер каждого сообщения.
142
1430120 меняет **якорь внимания**; IOP и картотека тем — **как** этот якорь не превращается в шум.
144
145<a id="adr0120-p6"></a>
146
147### 6. Редактор при Intercom-central
148
149- Редактор **не удаляется**: перенос на MFD-страницу «Code» / док / split — деталь вёрстки в реализации.
150- **Go to definition**, открытие файла из чата, якоря [0080](0080-intercom-naming-and-multi-party-channel-model.md) — по-прежнему переводят фокус на **редактор** (временно или с переключением surface), без отмены deep link.
151- Semantic map / PFD **не обязаны** переезжать в Forward.
152
153---
154
155## Non-goals
156
157- Замена трёхзонной модели PFD / Forward / MFD на «только чат».
158- Тождество `primary_work_surface` и **primary monitor** ОС.
159- Обязательная смена строки `presentation` при каждом переключении Agent/Editor.
160- Удаление режима **Editor** или отказ от AvaloniaEdit во Forward **навсегда**.
161- **Бесконечная лента** как целевой UX Intercom-central — против [0080](0080-intercom-naming-and-multi-party-channel-model.md), [0072](0072-chat-topic-cards-intent-melody-keyboard-contract.md), [0121](0121-intent-oriented-programming-paradigm.md).
162
163---
164
165## Якоря реализации (план)
166
167| Компонент | Роль |
168|-----------|------|
169| `settings.toml` | `workspace.primary_work_surface` |
170| `MainWindow` / `MainGrid` | условный host в колонке Forward |
171| `MfdShellView` / secondary pages | вторая поверхность при `intercom` |
172| `MainWindowViewModel` | свойство + команда переключения; сохранение в settings |
173| `IdeCommands` *(опционально)* | `set_primary_work_surface`, `toggle_primary_work_surface` для MCP |
174| [0119](0119-chat-slash-commands-intercom-surface.md) | реализация слэшей — после или параллельно с host-swap |
175
176**Порядок:**
177
1781. Настройка + переключатель + swap hosts в `MainWindow` (без смены `presentation`).
1792. MFD-страница редактора при `intercom`.
1803. Пресет TOML «agent-central» + документация UX.
1814. MCP / хоткей по необходимости.
182
183---
184
185## Открытые решения (до Accepted)
186
187| # | Вопрос | Направление |
188|---|--------|-------------|
189| 1 | Подписи UI: **Intercom** vs **Agent** | Продукт: Intercom ([0080](0080-intercom-naming-and-multi-party-channel-model.md)); для пользователей Cursor — alias «Agent» в toggle |
190| 2 | Редактор на MFD: отдельная **страница** vs **док** | Страница v1 (проще паритет с текущим shell) |
191| 3 | Авто-переключение на Editor при go-to-definition | Опционально v2; v1 — явный переход |
192
193---
194
195## Диаграмма
196
197```mermaid
198flowchart LR
199 subgraph editor_mode [primary_work_surface = editor]
200 F1[Forward: Editor]
201 M1[MFD: Intercom page]
202 end
203 subgraph intercom_mode [primary_work_surface = intercom]
204 F2[Forward: Intercom]
205 M2[MFD: Editor page]
206 end
207 toggle[User toggle / settings.toml]
208 toggle --> editor_mode
209 toggle --> intercom_mode
210```
211
212---
213
214## Отклонённые альтернативы
215
2161. **Только смена `presentation`** без отдельного ключа — недостаточно для одного монитора и для быстрого Agent/Editor toggle.
2172. **Чат всегда в Forward, редактор только во всплывающем окне** — ломает паритет MCP/отладки и привычный MFD shell.
2183. **Новый четвёртый якорь «Intercom»** вместо swap Forward — раздувает [0021](0021-pfd-mfd-cockpit-attention-model.md) без необходимости.
219
220---
221
222## История изменений
223
224<a id="adr0120-history"></a>
225
226| Дата | Изменение |
227|------|-----------|
228| 2026-05-17 | Proposed: `primary_work_surface` (intercom \| editor), swap Forward/MFD, связь с 0119. |
229| 2026-05-17 | §5.1: Intercom-central = центр коммуникации вокруг цели; границы потока (0121, IOP manifest). |
230
View only · write via MCP/CIDE