ADR 0120: Primary work surface — Intercom или Editor (аналог Agent / Editor)¶
Статус: Accepted · Implemented
Дата: 2026-05-17
Связанные ADR¶
| ADR | Роль |
|---|---|
| 0017 | Топология PFD / Forward / MFD, presentation, мультиоконность |
| 0021 | Якоря внимания; Forward = лобовое поле зрения |
| 0010 | Режимы UI в TOML; место для пресета «agent-central» |
| 0028 | %LocalAppData%\CascadeIDE\settings.toml |
| 0080 | Intercom — канал сессии, не «чат-виджет» |
| 0098 | Редактор — мощный канал, не абсолют всей правды |
| 0044 | Skia host для agent chat surface |
| 0072 | Topic cards в overview/detail |
| 0119 | Слэш-команды в ChatInput — усиливаются при Intercom в центре |
| 0121 | IOP: дисциплина коммуникации; Intercom как центр вокруг цели; честные границы потока |
| 0074 | Плотность MFD при узкой колонке |
Вне ADR¶
| Документ | Роль |
|---|---|
| ux/README.md | Актуальная линия Flight; legacy Focus/Balanced/Power — архив |
| iop-manifest-v1.md | IOP: Intercom — центр коммуникации; не обещать «переварить любой поток» |
Резюме¶
- Вводится настройка
primary_work_surface:intercom|editor(аналог Agent / Editor в Cursor). - Определяет, что занимает якорь Forward (лобовое поле): полноэкранный Intercom (чат + картотека + spine) или редактор кода.
- Вторичный контур (MFD) показывает другую поверхность (редактор или страницы shell), без потери функций.
- Не путать с primary-монитором ОС (0017 § primary vs Forward).
- Дефолт продукта:
editor; пресет «как Cursor» —intercom. Связь с 0119. - При
intercomлобовой якорь — не «лента сообщений», а центр коммуникации вокруг цели (люди + агенты → намерение → реализация), см. 0121, iop-manifest-v1.md.
Контекст¶
Часть пользователей (в т.ч. при работе в Cursor с чатом на главном экране) проводит в диалоге с агентом большую часть сессии. Для них кокпитная метафора «Forward = редактор, чат на MFD» инвертирована относительно реального внимания: центр — мысль и переписка, код — по запросу.
В CIDE уже есть:
- три якоря PFD / Forward / MFD (0021);
- Intercom как продуктовая модель (0080, 0072, 0096);
- настраиваемая топология экранов через
presentation(0017); - режимы UI в TOML (0010).
Не хватает явного переключателя «что в центре» без ручной перекомпоновки мониторов и без смены всей строки presentation.
Проблема¶
- Forward зашит как редактор в ментальной модели и типовой раскладке — agent-central пользователь периферийно воспринимает чат.
- Путаница с монитором: «центральный экран» ≠ primary display ОС — см. 0017; нужна отдельная ось primary_work_surface.
- 0119 (слэши) и topic cards выигрывают, когда Intercom уже в лобовом якоре; без 0120 архитектура остаётся «чат сбоку».
- Риск «убрать редактор»: продуктовая цель — сменить default фокус, не отказ от кода (0098).
Решение¶
1. Ось primary_work_surface¶
Допустимые значения:
| Значение | Лобовой якорь Forward | Типичное размещение редактора |
|---|---|---|
editor (дефолт CIDE) |
Редактор кода (AvaloniaEdit) | MFD: страница Intercom / чат в shell |
intercom |
Intercom (полный ChatPanel + Skia surface: overview, spine, detail) |
MFD: Editor как страница или докируемая панель; PFD без изменений по смыслу |
Инвариант: обе поверхности остаются доступны; меняется якорь внимания по умолчанию, как переключение Agent / Editor в Cursor.
2. Ортогональность другим осям¶
| Ось | Вопрос | Связь с primary_work_surface |
|---|---|---|
presentation (0017) |
Сколько окон и долей P/F/M | Независима: можно (P+F+M) на одном дисплее и intercom в Forward |
| Primary monitor ОС | Куда Windows ставит taskbar | Не задаёт Forward; см. 0017 §5 |
| UiMode / Flight (0010) | Видимость панелей, capabilities | Может сужать хром (Dark Cockpit); не подменяет якорь |
| Melody / Chords (0060) | Фокус зоны M/P/F | Сохраняются; focus_forward фокусирует лобовой якорь (чат или редактор) |
3. UX-контракт переключения¶
- Явный переключатель в UI (toggle, пункт меню, опционально хоткей) — подписи
Intercom/EditorилиAgent/Editor(копирайт уточнить в UX; канон данных —intercom|editor). - Переключение не сбрасывает сессию чата и не закрывает открытые файлы; меняется только хост в Forward и страница по умолчанию на MFD.
- Состояние персистится в
settings.toml(0028).
4. Конфигурация (целевая схема)¶
# settings.toml (фрагмент)
[workspace]
primary_work_surface = "intercom" # "editor" | "intercom"
Опционально в UiModes/Flight.toml (или отдельный пресет AgentCentral.toml):
primary_work_surface = "intercom"
# capabilities: шире чат, уже полоса IDE Health, …
Дефолт при отсутствии ключа: editor (совместимость с текущим CIDE).
5. Связь с Intercom и 0119¶
При primary_work_surface = intercom:
- Forward показывает картотеку тем, spine, detail — 0072, 0096.
ChatInput— естественная command line сессии; слэш-команды (0119) становятся основным путём кbuild/test/card, а не периферийным.
При editor — поведение как сейчас; 0119 остаётся полезным, но чат не обязан быть в центре внимания.
5.1. Intercom в центре ≠ бесконечный поток¶
primary_work_surface = intercom не означает «всё входящее в одну ленту» и не обещает, что продукт или агенты вывезут любой объём переписки от людей — без структуры его не вывозят и сами люди (0121 § «Риски и границы», iop-manifest-v1.md § «Честно о потоке»).
Смысл центрального Intercom:
- линии работы (topic cards, spine) вместо хаотичного чата;
- батчи уточнений и треды (0031);
- intent-first и слэши/MCP как один контракт (0119);
- человек в Forward — арбитр намерения и дельты, а не диспетчер каждого сообщения.
0120 меняет якорь внимания; IOP и картотека тем — как этот якорь не превращается в шум.
6. Редактор при Intercom-central¶
- Редактор не удаляется: перенос на MFD-страницу «Code» / док / split — деталь вёрстки в реализации.
- Go to definition, открытие файла из чата, якоря 0080 — по-прежнему переводят фокус на редактор (временно или с переключением surface), без отмены deep link.
- Semantic map / PFD не обязаны переезжать в Forward.
Non-goals¶
- Замена трёхзонной модели PFD / Forward / MFD на «только чат».
- Тождество
primary_work_surfaceи primary monitor ОС. - Обязательная смена строки
presentationпри каждом переключении Agent/Editor. - Удаление режима Editor или отказ от AvaloniaEdit во Forward навсегда.
- Бесконечная лента как целевой UX Intercom-central — против 0080, 0072, 0121.
Якоря реализации (план)¶
| Компонент | Роль |
|---|---|
settings.toml |
workspace.primary_work_surface |
MainWindow / MainGrid |
условный host в колонке Forward |
MfdShellView / secondary pages |
вторая поверхность при intercom |
MainWindowViewModel |
свойство + команда переключения; сохранение в settings |
IdeCommands (опционально) |
set_primary_work_surface, toggle_primary_work_surface для MCP |
| 0119 | реализация слэшей — после или параллельно с host-swap |
Порядок:
- Настройка + переключатель + swap hosts в
MainWindow(без сменыpresentation). - MFD-страница редактора при
intercom. - Пресет TOML «agent-central» + документация UX.
- MCP / хоткей по необходимости.
Открытые решения (до Accepted)¶
| # | Вопрос | Направление |
|---|---|---|
| 1 | Подписи UI: Intercom vs Agent | Продукт: Intercom (0080); для пользователей Cursor — alias «Agent» в toggle |
| 2 | Редактор на MFD: отдельная страница vs док | Страница v1 (проще паритет с текущим shell) |
| 3 | Авто-переключение на Editor при go-to-definition | Опционально v2; v1 — явный переход |
Диаграмма¶
flowchart LR
subgraph editor_mode [primary_work_surface = editor]
F1[Forward: Editor]
M1[MFD: Intercom page]
end
subgraph intercom_mode [primary_work_surface = intercom]
F2[Forward: Intercom]
M2[MFD: Editor page]
end
toggle[User toggle / settings.toml]
toggle --> editor_mode
toggle --> intercom_mode
Отклонённые альтернативы¶
- Только смена
presentationбез отдельного ключа — недостаточно для одного монитора и для быстрого Agent/Editor toggle. - Чат всегда в Forward, редактор только во всплывающем окне — ломает паритет MCP/отладки и привычный MFD shell.
- Новый четвёртый якорь «Intercom» вместо swap Forward — раздувает 0021 без необходимости.
История изменений¶
| Дата | Изменение |
|---|---|
| 2026-05-17 | Proposed: primary_work_surface (intercom | editor), swap Forward/MFD, связь с 0119. |
| 2026-05-17 | §5.1: Intercom-central = центр коммуникации вокруг цели; границы потока (0121, IOP manifest). |