feat(gui): add optional tkinter and Qt6 desktop dashboards
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
This commit is contained in:
parent
9e3575461b
commit
457c7604ba
15 changed files with 1270 additions and 0 deletions
|
|
@ -209,6 +209,8 @@ def main(argv: list[str] | None = None) -> int:
|
|||
rules.add_argument("--json", action="store_true", help="emit JSON")
|
||||
sub.add_parser("web", help="serve the read-only dashboard")
|
||||
sub.add_parser("tui", help="open the terminal dashboard (curses)")
|
||||
sub.add_parser("gui", help="open the desktop dashboard (tkinter)")
|
||||
sub.add_parser("gui-qt", help="open the desktop dashboard (Qt6)")
|
||||
sub.add_parser("triage", help="classify captured alerts as likely-FP vs review")
|
||||
sub.add_parser("fim-baseline", help="build the file-integrity baseline")
|
||||
sub.add_parser("fim-update", help="refresh the FIM baseline (run by the pacman hook)")
|
||||
|
|
@ -281,6 +283,12 @@ def main(argv: list[str] | None = None) -> int:
|
|||
if args.cmd == "tui":
|
||||
from .tui import run as run_tui
|
||||
return run_tui(cfg)
|
||||
if args.cmd == "gui":
|
||||
from .gui.app import main as run_gui
|
||||
return run_gui(cfg=cfg)
|
||||
if args.cmd == "gui-qt":
|
||||
from .gui.qt_app import main as run_gui_qt
|
||||
return run_gui_qt(cfg=cfg)
|
||||
if args.cmd == "triage":
|
||||
return _cmd_triage(cfg)
|
||||
if args.cmd in ("fim-baseline", "fim-update"):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue