100 lines
3.0 KiB
Python
100 lines
3.0 KiB
Python
"""
|
||
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()
|