| 1 | using CascadeIDE.Features.WebAiPortal.Application; |
| 2 | using CommunityToolkit.Mvvm.ComponentModel; |
| 3 | |
| 4 | namespace CascadeIDE.ViewModels; |
| 5 | |
| 6 | /// <summary>Страница MFD «веб-портал» (ADR 0108): URL, результат последнего вызова моста, <see cref="WebAiPortalCommandBridge"/>.</summary> |
| 7 | public partial class MainWindowViewModel |
| 8 | { |
| 9 | private readonly WebAiPortalCommandBridge _webAiPortalBridge; |
| 10 | |
| 11 | /// <summary>Мост <c>invokeCSharpAction</c> → IdeCommands (whitelist).</summary> |
| 12 | public WebAiPortalCommandBridge WebAiPortalBridge => _webAiPortalBridge; |
| 13 | |
| 14 | [ObservableProperty] |
| 15 | private string _webAiPortalUrlText = "about:blank"; |
| 16 | |
| 17 | [ObservableProperty] |
| 18 | private string _webAiPortalLastBridgeResult = ""; |
| 19 | |
| 20 | /// <summary>После ответа моста копировать полный текст в системный буфер (удобная вставка в веб-чат).</summary> |
| 21 | [ObservableProperty] |
| 22 | private bool _webAiPortalCopyFullBridgeResultToClipboard = true; |
| 23 | |
| 24 | /// <summary>Пробовать дописать ответ IDE в активное поле страницы (textarea/input/contenteditable; эвристика).</summary> |
| 25 | [ObservableProperty] |
| 26 | private bool _webAiPortalTryInjectResultIntoFocusedComposer; |
| 27 | |
| 28 | /// <summary>Если ответ моста длинный — подмешивать компакт с HCI/<c>json-cascade</c>, а не сырой JSON (лимиты веб-чата).</summary> |
| 29 | [ObservableProperty] |
| 30 | private bool _webAiPortalPreferCompactComposerForChat = true; |
| 31 | |
| 32 | /// <summary> |
| 33 | /// Авто-цикл ADR 0108: периодически искать последнюю <c>json-cascade</c> в DOM и выполнять мост без кнопки и без буфера обмена. |
| 34 | /// Требует «Принял политику» и «Мост включён». Отправка сообщения на стороне сайта — по-прежнему задача веб-UI (IDE не жмёт Send). |
| 35 | /// </summary> |
| 36 | [ObservableProperty] |
| 37 | private bool _webAiPortalAutoDomBridgePolling; |
| 38 | } |
| 39 | |