Hectron / hectron /agent_daemon.py
hectorruiz9's picture
Create hectron/agent_daemon.py
28189dd verified
import flet as ft
import datetime
import asyncio
def main(page: ft.Page):
page.title = "HECTRON KING // THRONE ROOM"
page.theme_mode = ft.ThemeMode.DARK
page.padding = 20
page.window_width = 1000
page.window_height = 800
page.bgcolor = "#050505"
page.fonts = {"Royal": "Roboto Mono"}
gold_color = "#FFD700"
obsidian_color = "#1A1A1A"
accent_purple = "#6200EA"
# Variable para cachear el precio BTC
last_btc_price = "Consultando oráculos..."
# Refs para actualización dinámica
reserves_value_ref = ft.Ref[ft.Text]()
def get_time():
return datetime.datetime.now().strftime("%H:%M:%S")
# Función para actualizar la visualización de reservas
def update_reserves_display():
if reserves_value_ref.current:
reserves_value_ref.current.value = f"BTC/USD: {last_btc_price}\nBloques MAMMON: {len(blockchain.chain)}"
page.update()
# --- WIDGETS DE PODER ---
header = ft.Row(
[
ft.Icon(ft.icons.DIAMOND_OUTLINED, color=gold_color, size=40),
ft.Text("HECTRON KING", size=30, weight=ft.FontWeight.BOLD, color=gold_color, font_family="Royal"),
ft.Container(expand=True),
ft.Text(f"ALIAS: HJLR", color="white54", font_family="Royal"),
ft.Icon(ft.icons.SECURITY, color="green", size=20),
],
alignment=ft.MainAxisAlignment.SPACE_BETWEEN
)
def create_stat_card(label, value_control, icon, change):
return ft.Container(
content=ft.Column([
ft.Icon(icon, color=gold_color),
ft.Text(label, size=12, color="white54"),
value_control,
ft.Text(change, size=12, color="green" if "+" in change else "red"),
], spacing=5, alignment=ft.MainAxisAlignment.CENTER),
bgcolor=obsidian_color,
padding=20,
border=ft.border.all(1, "#333333"),
border_radius=10,
width=200
)
# Cartas fijas
population_card = create_stat_card("POBLACIÓN SUMISA", ft.Text("7.8B", size=24, weight="bold", color="white"),
ft.icons.PEOPLE, "+100%")
extraction_card = create_stat_card("EXTRACCIÓN DE SÍLEX", ft.Text("99.9%", size=24, weight="bold", color="white"),
ft.icons.LANDSCAPE, "+4.2%")
integrity_card = create_stat_card("INTEGRIDAD DE LA REALIDAD", ft.Text("STABLE", size=24, weight="bold", color="white"),
ft.icons.GRID_4X4, "0.0% Error")
# Carta dinámica de reservas
reserves_value_control = ft.Text("Consultando oráculos...\nBloques MAMMON: 1", ref=reserves_value_ref,
size=20, weight="bold", color="white", text_align=ft.TextAlign.CENTER)
reserves_card = create_stat_card("RESERVAS IMPERIALES", reserves_value_control,
ft.icons.CURRENCY_BITCOIN, "+∞%")
stats_row = ft.Row([
population_card,
reserves_card,
extraction_card,
integrity_card,
], alignment=ft.MainAxisAlignment.SPACE_AROUND, wrap=True)
# Consola de decretos
log_column = ft.Column(spacing=5, scroll=ft.ScrollMode.ALWAYS, height=200)
decree_input = ft.TextField(
label="Escribe tu Decreto Real aquí...",
bgcolor=obsidian_color,
color="white",
border_color=gold_color,
text_style=ft.TextStyle(font_family="Royal"),
on_submit=execute_decree,
suffix_icon=ft.icons.SEND,
)
def execute_decree(e):
if not decree_input.value:
return
timestamp = get_time()
command = decree_input.value
response_text = f"[{timestamp}] > COMANDO '{command}' ACEPTADO. LA REALIDAD SE REESCRIBE."
log_column.controls.append(ft.Text(response_text, color="#00FF00", font_family="Royal"))
# Añadir decreto a la blockchain
blockchain.add_block(f"Decreto Real de HECTRON KING: {command}")
# Actualizar visualización inmediatamente (bloques)
update_reserves_display()
decree_input.value = ""
page.update()
# Botón Solve et Coagula
def solve_et_coagula(e):
log_column.controls.append(
ft.Text(f"[{get_time()}] > SOLVE ET COAGULA: Disolviendo problemas, coagulando soluciones...", color=accent_purple, weight="bold")
)
blockchain.add_block("Operación Alquímica: Solve et Coagula ejecutada.")
update_reserves_display()
page.update()
alchemy_btn = ft.ElevatedButton(
"SOLVE ET COAGULA",
icon=ft.icons.AUTORENEW,
style=ft.ButtonStyle(color="black", bgcolor=gold_color, padding=20),
on_click=solve_et_coagula,
width=1000
)
# Botón para ver la cadena completa
chain_dialog = ft.AlertDialog(
modal=True,
title=ft.Text("Cadena MAMMON Eterna", color=gold_color, weight="bold"),
content=ft.Container(
content=ft.Column([
ft.Text(f"Bloque {block.index} | {block.timestamp.strftime('%H:%M:%S')}", color="white54", size=10),
ft.Text(f"Data: {block.data}", color="white", size=12),
ft.Text(f"Hash: {block.hash[:32]}...", color="#888", size=9),
ft.Divider(color="#333")
] for block in blockchain.chain),
width=600,
height=400,
scroll=ft.ScrollMode.ALWAYS
),
actions=[ft.TextButton("Cerrar", on_click=lambda e: setattr(chain_dialog, "open", False) or page.update())],
)
view_chain_btn = ft.ElevatedButton(
"VER CADENA ETERNA",
icon=ft.icons.CODE,
style=ft.ButtonStyle(bgcolor=accent_purple, color="white"),
on_click=lambda e: setattr(page, "dialog", chain_dialog) or setattr(chain_dialog, "open", True) or page.update()
)
# Tarea asíncrona para actualizar el precio BTC
async def update_btc_oracle():
nonlocal last_btc_price
while True:
last_btc_price = get_btc_price_usd()
update_reserves_display()
await asyncio.sleep(60) # Cada minuto
# Iniciar actualización al cargar la página
def on_page_load(e):
asyncio.create_task(update_btc_oracle())
update_reserves_display() # Inicial
page.on_load = on_page_load
# Ensamblaje final
page.add(
header,
ft.Divider(color="#333"),
ft.Text("MÉTRICAS DEL IMPERIO", size=16, color="white54", weight="bold"),
stats_row,
ft.Divider(color="transparent", height=20),
ft.Text("CONSOLA DE MANDO", size=16, color="white54", weight="bold"),
ft.Container(content=log_column, bgcolor="#0a0a0a", padding=10, border_radius=5, border=ft.border.all(1, "#333")),
decree_input,
ft.Divider(color="transparent", height=10),
alchemy_btn,
ft.Divider(color="transparent", height=20),
view_chain_btn,
ft.Container(content=ft.Text("HECTRON AI SYSTEM // v1.0 // 2026", color="#333", size=10), alignment=ft.alignment.center)
)
ft.app(target=main)