Add two optional windowed frontends over the same local state the TUI and web console read: `enodia-sentinel gui` (stdlib tkinter) and `enodia-sentinel gui-qt` (PySide6, new `[qt]` extra). Both share `gui/model.py`, a GUI-free presentation model over `tui.collect_model`, so every formatter is unit-testable without a display server. Only `app.py` and `qt_app.py` import GUI libraries, enforced by import-guard tests mirroring the tray applet's boundary. Tabs cover status, alerts, incidents, posture, integrity, response plans, and the event tail, plus daemon-control buttons via systemctl. Response plans are display-only; the GUIs never execute containment commands. Core runtime dependencies stay empty. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JX86xeoBJVBb16qHkDf53K
40 lines
1.4 KiB
TOML
40 lines
1.4 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=61"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "enodia-sentinel"
|
|
version = "0.7.0"
|
|
description = "Linux IDS/IPS/EDR platform — detection, explicit prevention workflows, integrity, anti-rootkit checks, and forensic snapshots"
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
license = { text = "GPL-3.0-or-later" }
|
|
authors = [{ name = "Enodia" }]
|
|
keywords = ["security", "edr", "ids", "ips", "hids", "detection", "prevention", "linux", "forensics", "response"]
|
|
classifiers = [
|
|
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
|
"Operating System :: POSIX :: Linux",
|
|
"Programming Language :: Python :: 3",
|
|
"Topic :: Security",
|
|
]
|
|
# Zero runtime dependencies — stdlib only, by design (a system security
|
|
# daemon should not pull in a dependency tree it has to trust and update).
|
|
dependencies = []
|
|
|
|
[project.scripts]
|
|
enodia-sentinel = "enodia_sentinel.cli:main"
|
|
enodia-sentinel-tui = "enodia_sentinel.tui:main"
|
|
enodia-sentinel-tray = "enodia_sentinel.tray.app:main"
|
|
enodia-sentinel-gui = "enodia_sentinel.gui.app:main"
|
|
enodia-sentinel-gui-qt = "enodia_sentinel.gui.qt_app:main"
|
|
|
|
[project.optional-dependencies]
|
|
dev = ["pytest"]
|
|
tray = ["pystray", "Pillow"]
|
|
qt = ["PySide6"]
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["enodia_sentinel*"]
|
|
|
|
[tool.setuptools.package-data]
|
|
enodia_sentinel = ["static/*.html"]
|