chore: release 0.10.0 (agent control plane phase 1)

Minor release: RDG flap, qwinsta/logoff queue, dashboard UI, agent poll API.
This commit is contained in:
2026-06-19 23:42:03 +10:00
parent db95be39f3
commit df4c93d243
8 changed files with 9 additions and 9 deletions
+1 -1
View File
@@ -15,7 +15,7 @@
## Статус ## Статус
**Версия:** `0.9.13` **Версия:** `0.10.0`
**Стек:** FastAPI, PostgreSQL, Vue 3, JWT, SSE **Стек:** FastAPI, PostgreSQL, Vue 3, JWT, SSE
**Деплой:** `sudo /opt/sac-deploy.sh` (см. `deploy/sac-deploy.sh`) **Деплой:** `sudo /opt/sac-deploy.sh` (см. `deploy/sac-deploy.sh`)
+1 -1
View File
@@ -14,7 +14,7 @@ Self-hosted hub for collecting, storing, and displaying security events from Lin
## Status ## Status
**Version:** `0.9.13` **Version:** `0.10.0`
**Stack:** FastAPI, PostgreSQL, Vue 3, JWT, SSE **Stack:** FastAPI, PostgreSQL, Vue 3, JWT, SSE
**Deploy:** `sudo /opt/sac-deploy.sh` (see `deploy/sac-deploy.sh`) **Deploy:** `sudo /opt/sac-deploy.sh` (see `deploy/sac-deploy.sh`)
+1 -1
View File
@@ -1,5 +1,5 @@
"""Единый источник версии SAC (API, health, логи, OpenAPI).""" """Единый источник версии SAC (API, health, логи, OpenAPI)."""
APP_NAME = "Security Alert Center" APP_NAME = "Security Alert Center"
APP_VERSION = "0.9.13" APP_VERSION = "0.10.0"
APP_VERSION_LABEL = f"{APP_NAME} v.{APP_VERSION}" APP_VERSION_LABEL = f"{APP_NAME} v.{APP_VERSION}"
+2 -2
View File
@@ -4,6 +4,6 @@ from app.version import APP_NAME, APP_VERSION, APP_VERSION_LABEL
def test_version_constants(): def test_version_constants():
assert APP_VERSION == "0.9.13" assert APP_VERSION == "0.10.0"
assert APP_NAME == "Security Alert Center" assert APP_NAME == "Security Alert Center"
assert APP_VERSION_LABEL == "Security Alert Center v.0.9.13" assert APP_VERSION_LABEL == "Security Alert Center v.0.10.0"
+1 -1
View File
@@ -286,7 +286,7 @@ Authorization: Bearer sac_xxx
|------|------------|--------| |------|------------|--------|
| **1** | `rule:rdg_session_flap`, Problem, notify, флаг `rdg_flap` | ✅ SAC | | **1** | `rule:rdg_session_flap`, Problem, notify, флаг `rdg_flap` | ✅ SAC |
| **2** | Кнопка **qwinsta** на «Обзоре» | ✅ SAC UI | | **2** | Кнопка **qwinsta** на «Обзоре» | ✅ SAC UI |
| **3** | Poll API, `agent_commands`, env admin | ✅ SAC; ✅ RDP ≥ 2.0.39-SAC | | **3** | Poll API, `agent_commands`, env admin | ✅ SAC; ✅ RDP ≥ 2.1.0-SAC |
| **4** | logoff в модалке | ✅ SAC UI | | **4** | logoff в модалке | ✅ SAC UI |
| **5** | Settings «Обновления агентов» | ⏳ | | **5** | Settings «Обновления агентов» | ⏳ |
| **6** | Self-update B1 | ⏳ | | **6** | Self-update B1 | ⏳ |
+1 -1
View File
@@ -274,7 +274,7 @@ SAC применяет cooldown по `dedup_key` (события, по умол
- `Send-SacEvent` + замена вызовов `Send-TelegramMessage` для событий мониторинга. - `Send-SacEvent` + замена вызовов `Send-TelegramMessage` для событий мониторинга.
- Heartbeat и daily report — отдельные типы в SAC. - Heartbeat и daily report — отдельные типы в SAC.
- **Команды SAC (≥ 2.1.0-SAC):** poll `GET /api/v1/agent/commands?agent_instance_id=…` каждые `$SacCommandPollIntervalSec` (по умолчанию 60 с); типы `qwinsta`, `logoff`. Ответ: `POST /api/v1/agent/commands/{uuid}/result`. Учётные данные доменного admin приходят в `run_as` (на SAC — `SAC_WIN_ADMIN_*`). Подробнее: [agent-control-plane.md](agent-control-plane.md). - **Команды SAC (≥ 2.1.0-SAC):** poll `GET /api/v1/agent/commands?agent_instance_id=…` каждые `$SacCommandPollIntervalSec` (по умолчанию 60 с); типы `qwinsta`, `logoff`. Ответ: `POST /api/v1/agent/commands/{uuid}/result`. Учётные данные доменного admin приходят в `run_as` (на SAC — `SAC_WIN_ADMIN_*`). Подробнее: [agent-control-plane.md](agent-control-plane.md).
- При `UseSAC=exclusive` суточный отчёт может формироваться **на SAC** (`generated_by: sac` в `details`), если агент за день не прислал `report.daily.*` — см. `SAC_DAILY_REPORT_*`, job `python -m app.jobs.daily_report`, timer `sac-daily-report.timer`. - При `UseSAC=exclusive` суточный отчёт может формироваться **на SAC** (`generated_by: sac` в `details`), если агент за день не прислал `report.daily.*` — см. `SAC_DAILY_REPORT_*`, job `python -m app.jobs.daily_report`, timer `sac-daily-report.timer`.
- **Единый шаблон отчёта** (SSH / Windows): агенты `ssh-monitor` ≥ 1.2.8-SAC, `RDP-login-monitor` ≥ 1.2.21-SAC и SAC используют одинаковые секции в `report_body` / `details.stats`. - **Единый шаблон отчёта** (SSH / Windows): агенты `ssh-monitor` ≥ 1.2.8-SAC, `RDP-login-monitor` ≥ 1.2.21-SAC и SAC используют одинаковые секции в `report_body` / `details.stats`.
- **Только SAC, без отчёта с агента:** на агенте `DAILY_REPORT_ENABLED=0` (ssh) или `$DailyReportEnabled = $false` (RDP); на SAC `SAC_DAILY_REPORT_ENABLED=true`, `SAC_DAILY_REPORT_SKIP_IF_AGENT_SENT=true`. - **Только SAC, без отчёта с агента:** на агенте `DAILY_REPORT_ENABLED=0` (ssh) или `$DailyReportEnabled = $false` (RDP); на SAC `SAC_DAILY_REPORT_ENABLED=true`, `SAC_DAILY_REPORT_SKIP_IF_AGENT_SENT=true`.
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "sac-ui", "name": "sac-ui",
"private": true, "private": true,
"version": "0.9.10", "version": "0.10.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+1 -1
View File
@@ -1,4 +1,4 @@
/** Fallback до загрузки /health; при релизе держите в sync с backend/app/version.py */ /** Fallback до загрузки /health; при релизе держите в sync с backend/app/version.py */
export const APP_NAME = "Security Alert Center"; export const APP_NAME = "Security Alert Center";
export const APP_VERSION = "0.9.13"; export const APP_VERSION = "0.10.0";
export const APP_VERSION_LABEL = `${APP_NAME} v.${APP_VERSION}`; export const APP_VERSION_LABEL = `${APP_NAME} v.${APP_VERSION}`;