""" Module: main.py --------------- Hlavní spouštěcí skript pro Robovojtíka. Importuje moduly pro API komunikaci, shellové funkce a uživatelské rozhraní. Zde také definujeme seznam OpenAI funkcí (FUNCTIONS) včetně read_file. """ import argparse import queue import logging import logging.handlers import ui # Definice OpenAI funkcí, které asistent může volat FUNCTIONS = [ { "name": "execute_shell_command", "description": "Spustí shellový příkaz a vrátí jeho výstup.", "parameters": { "type": "object", "properties": { "command": { "type": "string", "description": "Shellový příkaz k vykonání." } }, "required": ["command"], "additionalProperties": False } }, { "name": "create_script", "description": "Vytvoří skript s daným obsahem v souboru a nastaví ho na spustitelný.", "parameters": { "type": "object", "properties": { "file_name": { "type": "string", "description": "Název souboru (nebo cesta), do kterého se skript uloží." }, "content": { "type": "string", "description": "Obsah skriptu, který se má uložit." } }, "required": ["file_name", "content"], "additionalProperties": False } }, { "name": "read_file", "description": "Načte soubor o maximální velikosti 10kB a vrátí jeho obsah (případně zkrácený).", "parameters": { "type": "object", "properties": { "path": { "type": "string", "description": "Cesta k souboru, který se má přečíst." } }, "required": ["path"], "additionalProperties": False } } ] def main(): parser = argparse.ArgumentParser(description="Robovojtík – interaktivní shell asistent") parser.add_argument("--log", action="store_true", help="Zapne logování do souboru robovojtik.log") args = parser.parse_args() listener = None if args.log: import logging.handlers log_queue = queue.Queue(-1) logger = logging.getLogger("robovojtik") logger.setLevel(logging.DEBUG) qh = logging.handlers.QueueHandler(log_queue) logger.addHandler(qh) fh = logging.FileHandler("robovojtik.log", mode="a", encoding="utf-8") fh.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s")) listener = logging.handlers.QueueListener(log_queue, fh) listener.start() logger.debug("Logování zapnuto.") # Předáme seznam FUNCTIONS do UI ui.set_functions(FUNCTIONS) ui.main_ui() if listener: listener.stop() if __name__ == "__main__": main()