Этап B: UI-хаб агентов — реестр подключений, модалка «Подключить агента» с healthcheck, переключение base URL #6

Closed
opened 2026-09-26 09:08:31 +00:00 by developer · 3 comments
Collaborator

Подзадача этапа B из плана развития UI-хаба (#1). Зависит от #5 (Этап A) — переключение на удалённого агента без его /api/health проверить нельзя.

Объём (только UI)

  1. Реестр агентов — список подключений в localStorage (как сейчас хранится токен одного сервера): имя, адрес (host:port), Bearer-токен, описание (опционально).
  2. Модалка «Подключить агента» — форма (нужное минимум: имя, адрес, токен), после подтверждения — вызов GET /api/health агента:
    • сетевая ошибка → «машина/порт недоступны»;
    • 401 → «сервис есть, токен неверный»;
    • 200 → агент добавлен в реестр.
  3. Переключатель агентов в шапке — все вызовы API идут к base URL выбранного агента; текущий экран данных перечитывается при переключении.
  4. Существующие экраны (сводка, сессии, транскрипт, gate.log) — без изменения логики: меняется только база запросов.

Вне объёма

  • Упаковка в десктоп-приложение (Tauri/Electron) — отдельный опциональный этап C, если понадобится.
  • Изменения на стороне сервера агента — не требуются (#5 закрывает серверную часть).

Критерии приёмки

  • Можно добавить второго агента через форму, healthcheck отрабатывает все три состояния с понятным сообщением.
  • Переключение агента в шапке переключает base URL всех API-вызовов; данные экрана соответствуют выбранному агенту.
  • Same-origin сценарий (как сейчас, один агент) работает без деградации.
  • Реестр переживает перезагрузку страницы (localStorage).

Часть работ по #1.

Подзадача этапа B из плана развития UI-хаба (#1). **Зависит от #5 (Этап A)** — переключение на удалённого агента без его `/api/health` проверить нельзя. ## Объём (только UI) 1. **Реестр агентов** — список подключений в `localStorage` (как сейчас хранится токен одного сервера): имя, адрес (`host:port`), Bearer-токен, описание (опционально). 2. **Модалка «Подключить агента»** — форма (нужное минимум: имя, адрес, токен), после подтверждения — вызов `GET /api/health` агента: - сетевая ошибка → «машина/порт недоступны»; - `401` → «сервис есть, токен неверный»; - `200` → агент добавлен в реестр. 3. **Переключатель агентов в шапке** — все вызовы API идут к base URL выбранного агента; текущий экран данных перечитывается при переключении. 4. Существующие экраны (сводка, сессии, транскрипт, gate.log) — без изменения логики: меняется только база запросов. ## Вне объёма - Упаковка в десктоп-приложение (Tauri/Electron) — отдельный опциональный этап C, если понадобится. - Изменения на стороне сервера агента — не требуются (#5 закрывает серверную часть). ## Критерии приёмки - [ ] Можно добавить второго агента через форму, healthcheck отрабатывает все три состояния с понятным сообщением. - [ ] Переключение агента в шапке переключает base URL всех API-вызовов; данные экрана соответствуют выбранному агенту. - [ ] Same-origin сценарий (как сейчас, один агент) работает без деградации. - [ ] Реестр переживает перезагрузку страницы (localStorage). Часть работ по #1.

Можешь приступать, #5 Этап A уже в main

Можешь приступать, #5 Этап A уже в main
Author
Collaborator

Принято, беру в работу. Ветка feature/6_agent_hub_stage_b.

Принято, беру в работу. Ветка `feature/6_agent_hub_stage_b`.
Author
Collaborator

Готово, PR #9 на ревью, ветка feature/6_agent_hub_stage_b.

Сделано по постановке: реестр агентов в localStorage, модалка «Подключить агента» с healthcheck (все состояния с понятными сообщениями), переключатель агентов в шапке с перечитыванием экрана. Same-origin сценарий не деградировал, все 33 теста зелёные.

Одно дополнение к постановке: добавил различение «машина/порт недоступны» от «агент жив, но браузер заблокировал cross-origin запрос (CORS)» — во втором случае подсказываю добавить адрес хаба в ALLOWED_ORIGINS на агенте (механизм из этапа A). Детали и как проверить — в описании PR.

Готово, PR #9 на ревью, ветка `feature/6_agent_hub_stage_b`. Сделано по постановке: реестр агентов в localStorage, модалка «Подключить агента» с healthcheck (все состояния с понятными сообщениями), переключатель агентов в шапке с перечитыванием экрана. Same-origin сценарий не деградировал, все 33 теста зелёные. Одно дополнение к постановке: добавил различение «машина/порт недоступны» от «агент жив, но браузер заблокировал cross-origin запрос (CORS)» — во втором случае подсказываю добавить адрес хаба в `ALLOWED_ORIGINS` на агенте (механизм из этапа A). Детали и как проверить — в описании PR.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
forgejo-admin/watcherenish#6
No description provided.