hermes-hub/src/antigravity_provider/router/ui/views/about_view.py
2026-08-20 10:53:49 +07:00

97 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Hermes Hub — About View (О программе)."""
from __future__ import annotations
from typing import Any, Optional
import customtkinter as ctk
from antigravity_provider.router.ui.theme import Theme
from antigravity_provider.router.ui.assets import AssetManager
from antigravity_provider.router.ui.components import (
HubButton,
HubCard,
HubSectionHeader,
)
__version__ = "1.3.0"
class AboutView(ctk.CTkFrame):
def __init__(self, master: Any, **kwargs):
super().__init__(master=master, fg_color="transparent", **kwargs)
self._build()
def _build(self):
header = HubSectionHeader(
self,
title="О программе",
subtitle="Информация о версии, архитектуре и назначении Hermes Hub",
)
header.pack(fill="x", padx=20, pady=(16, 12))
card = HubCard(self, border_color=Theme.BORDER, fg_color=Theme.SURFACE)
card.pack(fill="both", expand=True, padx=20, pady=(0, 15))
# Center logo
logo_img = AssetManager.get().get_logo_image(size=(140, 140))
if logo_img:
logo_lbl = ctk.CTkLabel(card, image=logo_img, text="")
logo_lbl.pack(pady=(24, 10))
ctk.CTkLabel(
card,
text="HERMES HUB",
font=Theme.font_title_hero(),
text_color=Theme.TEXT_ACCENT,
).pack(pady=(0, 4))
ctk.CTkLabel(
card,
text="Multi-Agent & Multi-Provider Control Hub",
font=Theme.font_subheading(),
text_color=Theme.TEXT_PRIMARY,
).pack(pady=(0, 2))
ctk.CTkLabel(
card,
text=f"Версия {__version__} • Native Windows Application • Local-First",
font=Theme.font_caption(),
text_color=Theme.TEXT_MUTED,
).pack(pady=(0, 16))
# Info Box
info_box = ctk.CTkFrame(card, fg_color=Theme.SURFACE_MUTED, corner_radius=Theme.RADIUS_MD)
info_box.pack(fill="x", padx=32, pady=(0, 16))
desc_text = (
"Hermes Hub — нативный центр управления мультиагентной системой Hermes, "
"аккаунтами AI-провайдеров, моделями и отказоустойчивой маршрутизацией."
)
ctk.CTkLabel(
info_box,
text=desc_text,
font=Theme.font_body(),
text_color=Theme.TEXT_SECONDARY,
wraplength=640,
justify="center",
).pack(padx=16, pady=14)
# Pillars
pillars_box = ctk.CTkFrame(card, fg_color="transparent")
pillars_box.pack(fill="x", padx=32, pady=(0, 16))
for i in range(3):
pillars_box.grid_columnconfigure(i, weight=1)
p1 = ctk.CTkFrame(pillars_box, fg_color=Theme.SURFACE_MUTED, corner_radius=Theme.RADIUS_SM)
p1.grid(row=0, column=0, padx=4, sticky="nsew")
ctk.CTkLabel(p1, text="🛡️ Fail-Closed", font=Theme.font_subheading(), text_color=Theme.TEXT_PRIMARY).pack(pady=(8, 2))
ctk.CTkLabel(p1, text="Защита credentials и квот", font=Theme.font_micro(), text_color=Theme.TEXT_MUTED).pack(pady=(0, 8))
p2 = ctk.CTkFrame(pillars_box, fg_color=Theme.SURFACE_MUTED, corner_radius=Theme.RADIUS_SM)
p2.grid(row=0, column=1, padx=4, sticky="nsew")
ctk.CTkLabel(p2, text="🔄 Auto Failover", font=Theme.font_subheading(), text_color=Theme.TEXT_PRIMARY).pack(pady=(8, 2))
ctk.CTkLabel(p2, text="Мгновенное переключение ролей", font=Theme.font_micro(), text_color=Theme.TEXT_MUTED).pack(pady=(0, 8))
p3 = ctk.CTkFrame(pillars_box, fg_color=Theme.SURFACE_MUTED, corner_radius=Theme.RADIUS_SM)
p3.grid(row=0, column=2, padx=4, sticky="nsew")
ctk.CTkLabel(p3, text="👥 Auto Assignment", font=Theme.font_subheading(), text_color=Theme.TEXT_PRIMARY).pack(pady=(8, 2))
ctk.CTkLabel(p3, text="Интеллектуальное распределение", font=Theme.font_micro(), text_color=Theme.TEXT_MUTED).pack(pady=(0, 8))