Robovojtik/main.py
sinuhet 2e2a18272a Oprava, po které to ale blbne
Po příkazu se ptá stále dokola
2025-03-22 23:24:23 +01:00

100 lines
3.0 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.

"""
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()