| 1 | # ADR 0145: Intercom Web — PWA team client |
| 2 | |
| 3 | | Поле | Значение | |
| 4 | |------|----------| |
| 5 | | **Статус** | Accepted | |
| 6 | | **Дата** | 2026-05-24 | |
| 7 | | **Amend** | 2026-05-24 — отдельный репозиторий org GitHub; wire/server — в [cascade-ide](https://github.com/AI-Guiders/cascade-ide) | |
| 8 | | **Связь** | [0144](0144-intercom-team-transport-cide-sync-and-reference-service.md) transport · [0146](0146-intercom-wire-canonical-protocol-package.md) wire · [0132](0132-intercom-federated-transport-and-multi-client-boundary.md) multi-client | |
| 9 | |
| 10 | ## Резюме |
| 11 | |
| 12 | **`intercom-web`** — браузерный team client (PWA): read+compose human channel через **reference** `host/intercom-service` и wire v1. Живёт в **отдельном репозитории** org GitHub, не в `cascade-ide`. |
| 13 | |
| 14 | ## Контекст |
| 15 | |
| 16 | CIDE покрывает разработчика; PO/Lead/QA — браузер ([0132](0132-intercom-federated-transport-and-multi-client-boundary.md) фаза 3). IDE, wire и reference server — один продуктовый репо **cascade-ide**; web — другой runtime (браузер), другой релизный цикл, отдельный deploy — логично вынести в org. |
| 17 | |
| 18 | ## Решения |
| 19 | |
| 20 | | Тема | Решение | |
| 21 | |------|---------| |
| 22 | | **Репозиторий** | **[AI-Guiders/intercom-web](https://github.com/AI-Guiders/intercom-web)** (MIT) | |
| 23 | | **Не в cascade-ide** | Не смешивать Node/Blazor web с Avalonia IDE в одном git | |
| 24 | | **Wire** | Канон: `cascade-ide/wire/intercom-wire/` — потребление через копию схем в CI, submodule, или raw URL на `main` (без NuGet на v1) | |
| 25 | | **API** | HTTP+SSE к развёрнутому `intercom-service` ([profile](../../wire/intercom-wire/profiles/reference-http-v1/openapi.yaml)); BFF не обязателен в v1 | |
| 26 | | **Стек (v1)** | SPA: Vite + React + TS + `vite-plugin-pwa` **или** Blazor WASM — выбор в репо web; ADR не диктует, если соблюдён wire | |
| 27 | | **Auth** | OAuth Authorization Code + **PKCE**; `redirect_uri` = `{origin}/auth/callback`; JWT + refresh (storage — решение web-репо) | |
| 28 | | **SSE** | `fetch` + stream parser + `Authorization: Bearer` (не голый `EventSource` без заголовка) | |
| 29 | | **CORS** | `Cors:AllowedOrigins` на сервере включает origin PWA | |
| 30 | | **Не v1** | Skia-лента, полный slash, agent BFF, attach re-resolve, team-console + Mission | |
| 31 | |
| 32 | ## Граница репозиториев |
| 33 | |
| 34 | ```mermaid |
| 35 | flowchart LR |
| 36 | subgraph cide_repo ["cascade-ide (AI-Guiders)"] |
| 37 | CIDE[CIDE] |
| 38 | Wire[wire/intercom-wire] |
| 39 | Host[host/intercom-service] |
| 40 | end |
| 41 | subgraph web_repo ["intercom-web (org, отдельный)"] |
| 42 | PWA[PWA / Blazor] |
| 43 | end |
| 44 | Wire -.->|schemas copy / submodule| PWA |
| 45 | PWA -->|HTTPS + SSE| Host |
| 46 | CIDE --> Host |
| 47 | ``` |
| 48 | |
| 49 | | Компонент | Репозиторий | |
| 50 | |-----------|-------------| |
| 51 | | Wire, ADR, reference server, IDE transport | **cascade-ide** | |
| 52 | | Browser client | **intercom-web** (org) | |
| 53 | | NuGet wire | Не v1 | |
| 54 | |
| 55 | ## Последствия |
| 56 | |
| 57 | - Web-релизы без пересборки IDE. |
| 58 | - В web-репо — свой CI (build PWA, lint, e2e). |
| 59 | - Нужны TLS + OAuth redirect URI production для домена PWA. |
| 60 | - Deep link в CIDE: `cascade-ide://` или документированный URL. |
| 61 | |
| 62 | ## Не цели (v1) |
| 63 | |
| 64 | - MCC / SA dashboard ([0132](0132-intercom-federated-transport-and-multi-client-boundary.md) фаза 4). |
| 65 | - Fan-out `message_stream_delta`, clarification events. |
| 66 | - E2EE, read receipts. |
| 67 | |