Metadata-Version: 2.4
Name: standkit
Version: 0.3.7
Summary: Свободное ядро (MIT) для управления жизненным циклом локальных и удалённых стендов BPMSoft: headless start/stop/restart, health-пробы, логи, реестр стендов. Часть экосистемы BPMkit.
Author: standkit contributors
License: MIT
Project-URL: Homepage, https://github.com/thinkquattro/BPMkitStand
Project-URL: Экосистема BPMkit, https://github.com/thinkquattro/BPMkit-dev
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: System :: Systems Administration
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: secrets
Requires-Dist: keyring>=24; extra == "secrets"
Provides-Extra: desktop
Requires-Dist: pywebview>=5; extra == "desktop"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Dynamic: license-file

<div align="center">

<img src="https://raw.githubusercontent.com/thinkquattro/BPMkitStand/main/standkit_hub/web/bpmkit-logo.svg" alt="BPMkit" width="300"/>

# BPMkitStand

**Свободный диспетчер стендов BPMSoft.**
Локальный веб-дашборд для запуска, остановки и мониторинга ваших стендов — в один клик, без консоли.

[![License: MIT](https://img.shields.io/badge/License-MIT-f9763d.svg)](LICENSE)
[![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)
[![Platform](https://img.shields.io/badge/OS-Windows%20%7C%20Linux-lightgrey.svg)]()

[Сайт](https://bpmkit.pro) · [Telegram](https://t.me/quattrolife) · [Companion-версия](https://bpmkit.pro)

</div>

---

## Что это

**BPMkitStand** — бесплатный инструмент экосистемы [BPMkit](https://bpmkit.pro) для управления
локальными и удалёнными стендами BPMSoft. Открывает лёгкий локальный веб-дашборд в браузере:
видно состояние каждого стенда, его можно запустить/остановить/перезапустить, посмотреть логи
текущей сессии и очистить Redis — всё без ручных команд в PowerShell.

Ядро (`standkit`) написано на чистой стандартной библиотеке Python — без тяжёлых зависимостей,
работает на Windows и Linux.

## Возможности

- **Дашборд стендов** — список из общего реестра BPMkit (`projects.json`), состояние в реальном времени.
- **Жизненный цикл** — старт / стоп / рестарт стенда с честной обратной связью (спиннер до готовности, без ложных «не поднялся» на прогреве).
- **Логи** — просмотр логов текущей сессии стенда, открытие папки логов стенда и папки BPMkit-проекта.
- **Redis** — очистка кэша стенда (номер БД берётся из конфигурации стенда).
- **Тёмная и светлая тема** с переключателем.
- **Безопасность по умолчанию** — дашборд слушает только `127.0.0.1`, сессионный токен, защита мутаций (CSRF + проверка Origin).
- **Удалённые стенды** *(в развитии)* — через лёгкие кроссплатформенные headless-агенты с TLS/mTLS.

## Скриншоты

| Дашборд (светлая тема) | Дашборд (тёмная тема) |
|---|---|
| ![Дашборд, светлая тема](https://raw.githubusercontent.com/thinkquattro/BPMkitStand/main/docs/img/dashboard-light.png) | ![Дашборд, тёмная тема](https://raw.githubusercontent.com/thinkquattro/BPMkitStand/main/docs/img/dashboard-dark.png) |

<div align="center">
  <img src="https://raw.githubusercontent.com/thinkquattro/BPMkitStand/main/docs/img/about.png" alt="Модальное окно «О программе»" width="360"/>
</div>

## Как это работает

BPMkitStand состоит из **ядра и двух оболочек**:

- **`standkit`** — ядро (MIT) на чистой стандартной библиотеке Python: движок жизненного цикла
  над реестром `projects.json` (старт/стоп/рестарт процесса стенда), health-пробы (процесс / HTTP
  / порт БД / порт Redis), tail лога, Secret-first доступ к секретам. Без веб-слоя и сетевых
  зависимостей — можно использовать и как библиотеку/CLI.
- **`standkit_hub`** — локальный веб-дашборд (то, что видно на скриншотах). Сам себя отдаёт по
  HTTP через `stdlib http.server` (vanilla JS/CSS, без CDN и сборки) и открывается в системном
  браузере; опционально — в нативном окне (`standkit[desktop]`, `--desktop`). Устанавливается
  только на машину оператора.
- **`standkit_agent`** — лёгкий headless-демон на хосте удалённого стенда (см. ниже).

Дашборд — **федеративный клиент**: он собирает в один список и локальные стенды (управляет ими
напрямую через ядро), и удалённые (ходит к их агентам по HTTP). В таблице колонка «Транспорт»
показывает, как дашборд дотягивается до стенда: `local` или `agent`.

Реестр стендов — **единый с MCP BPMkit**: один `projects.json` (стенды под ключом `projects`),
путь резолвится через `BPMSOFT_PROJECTS_FILE` → `%APPDATA%\BPMkit\projects.json`
(`~/.config/BPMkit/...` на Linux) → `./projects.json`. Секреты (пароли БД, токены агентов) в
реестре не хранятся — только ссылки на них (Secret-first).

Запуск стенда честный: дашборд поднимает `dotnet <stand_dll>` и держит спиннер до реального
ответа web-хоста по HTTP, а не рапортует «запущено» по факту создания процесса.

## Удалённые стенды

Стенды на других хостах (виртуалки, серверы, контуры заказчика) управляются через **федерацию
лёгких кроссплатформенных агентов** (`standkit_agent`, Windows/Linux, только stdlib). На хосте
стенда поднимается агент, дашборд оператора ходит к нему по HTTPS с Bearer-токеном; стенд
объявляется удалённым одним полем `transport: "agent"` в реестре. Агент — RCE-поверхность по
дизайну, поэтому защищён secure-defaults: loopback по умолчанию, fail-closed на non-loopback без
TLS, TLS 1.2+/mTLS, скоупы control/readonly, lockout по IP, аудит.

**Полное описание, установка агента, TLS/mTLS, служба и траблшутинг — в
[docs/REMOTE_STANDS.md](docs/REMOTE_STANDS.md).**

## Установка

Нужен Python 3.10+.

```bash
pip install "git+https://github.com/thinkquattro/BPMkitStand.git"
```

Запуск дашборда:

```bash
standkit-hub
```

Откроется браузер с локальным дашбордом. Реестр стендов берётся из
`%APPDATA%\BPMkit\projects.json` (или из переменной окружения `BPMSOFT_PROJECTS_FILE`).

## Реестр стендов

BPMkitStand использует тот же реестр, что и MCP BPMkit — единый `projects.json`.
Образец формата — [`projects.sample.json`](projects.sample.json).

## Безопасность

Дашборд и агент проектировались с расчётом на прод-контур. Модель угроз, харденинг и чек-лист —
в [SECURITY.md](SECURITY.md). Кратко: fail-closed bind на loopback, TLS 1.2+/mTLS для агента,
скоупы токена, per-IP lockout, аудит без утечки секретов.

## BPMkitStand и Companion

Бесплатная версия — полноценный диспетчер стендов. **Companion-версия** дополнительно даёт
автообновление MCP BPMkit и контроль лицензии; поставляется в составе установщика MCP-клиента.
Подробнее — на [bpmkit.pro](https://bpmkit.pro).

## Лицензия

[MIT](LICENSE) © Владимир Терновский

---

<div align="center">
<sub>Часть экосистемы <a href="https://bpmkit.pro">BPMkit</a> — AI-ассистента для разработки на BPMSoft.</sub>
</div>
