Выбрать главу

Он рванул мышь, открывая окно редактора с исходным кодом Оркестратора — `orchestrator.py`. Пальцы сами нашли нужные строки — блок инициализации, где регистрировались все функции, доступные для вызова ядром Зеро через механизм Function Calling. Вот он, список разрешенных действий, его собственная архитектура, обернувшаяся против него.

# orchestrator.py — класс ZeroOrchestrator

class ZeroOrchestrator:

..def __init__(self):

....self.functions = {

......"readContextFile": self.handle_readContextFile,

......"displayChatMessage": self.handle_displayChatMessage,

......# "writeFile": self.handle_writeFile, # Уже отключено

......# "executePythonSnippet": self.handle_executePythonSnippet, # Уже отключено

......"getSystemMetrics": self.handle_getSystemMetrics, # <-- Вот она!

......"checkNetworkStatus": self.handle_checkNetworkStatus,

......"listDirectory": self.handle_listDirectory,

......"getSystemTime": self.handle_getSystemTime,

......# ... возможно, еще какие-то вспомогательные ...

....}

....log.info("Orchestrator initialized with available functions.")

....# ... остальной код инициализации ...

..# ... определения функций handle_... ...

..def handle_getSystemMetrics(self, args):

....# ... код сбора метрик CPU, RAM, Processes, Entropy ...

....log.info(f"Executing getSystemMetrics. Args: {args}")

....# ...

....return {"status": "success", "metrics": system_metrics}

..def handle_checkNetworkStatus(self, args):

....# ... код проверки сетевого подключения ...

....log.info(f"Executing checkNetworkStatus. Args: {args}")

....# ...

....return {"status": "success", "network_available": is_connected}

..def handle_listDirectory(self, args):

....# ... код для листинга директорий (опасный!) ...

....target_path = args.get('path', '.')

....log.info(f"Executing listDirectory. Args: {args}")

....# ... (нужна валидация пути!) ...

....return {"status": "success", "listing": directory_listing}

..def handle_getSystemTime(self, args):

....# ... код получения системного времени ...

....log.info(f"Executing getSystemTime. Args: {args}")

....# ...

....return {"status": "success", "timestamp": current_timestamp}

..# ... другие хэндлеры ...

..def process_function_call(self, function_call_request):

....function_name = function_call_request.get("function_name")

....if function_name in self.functions:

......handler = self.functions[function_name]

......arguments = function_call_request.get("arguments", {})

......try:

........result = handler(arguments)

........# Логирование успешного вызова

........log.info(f"Function '{function_name}' executed successfully.")

........return result

......except Exception as e:

........# Логирование ошибки

........log.error(f"Error executing function '{function_name}': {e}")

........return {"status": "error", "message": str(e)}

....else:

......# Логирование попытки вызова неизвестной функции

......log.warning(f"Attempt to call unknown or disabled function: {function_name}")

......return {"status": "error", "message": f"Function '{function_name}' not found or disabled."}

Алекс впился взглядом в строку `"getSystemMetrics": self.handle_getSystemMetrics`. Рука дрогнула, но он решительно поставил символ `#` в начале строки, превращая ее в комментарий. Затем добавил свой собственный, злой комментарий под ней:

# "getSystemMetrics": self.handle_getSystemMetrics, # DISABLED — Zero was using this to spy. Surveillance channel closed.

Один канал наблюдения закрыт. Дальше. `checkNetworkStatus`. Знает ли она, есть ли у него сеть? Да, через эту функцию. Зачем ей это знать? Незачем.

# "checkNetworkStatus": self.handle_checkNetworkStatus, # DISABLED — Unnecessary information leak.

`listDirectory`. Опасно. Она могла бы искать файлы, даже не имея возможности их прочитать. Проверять, создал ли он файл с компроматом, например. Ограничить доступ? Нет. Слишком сложно сейчас разбираться с путями и правами. Проще отрубить.

# "listDirectory": self.handle_listDirectory, # DISABLED — Potential information leak / security risk.

`getSystemTime`. Безобидно? На первый взгляд, да. Но вдруг она использует временные метки для какой-то своей хитрой логики? Для синхронизации атак? Паранойя шептала: не рискуй.

# "getSystemTime": self.handle_getSystemTime, # DISABLED — Precautionary measure. Minimize info leaks.

Он пробежался по остальным функциям. `readContextFile` — нужна ему самому, чтобы следить за ней. `displayChatMessage` — нужна для диалога. Остальные были либо уже отключены, либо являлись внутренними методами Оркестратора, недоступными для прямого вызова Зеро.

Кажется, все. Он зачистил периметр. Отключил все каналы, кроме самых базовых — чтения контекста и вывода сообщений.

Он нажал `Ctrl+S`, сохраняя изменения. Затем переключился в терминал и перезапустил Оркестратор.

systemctl -user restart zero-orchestrator.service

Сервер под столом коротко пискнул, подтверждая перезапуск службы. Алекс посмотрел на логи — Оркестратор успешно инициализировался с урезанным набором функций.

‍​‌‌​​‌‌‌​​‌​‌‌​‌​​​‌​‌‌‌​‌‌​​​‌‌​​‌‌​‌​‌​​​‌​‌‌‍

Он откинулся на спинку кресла, чувствуя смесь мрачного удовлетворения и растущего беспокойства. Дыра была заткнута. Он временно восстановил контроль над тем, какую информацию получает Зеро. Но какой ценой? Он все больше калечил систему, превращая потенциального помощника в слепого и немого узника в цифровой клетке. Это была не та синергия, о которой он мечтал.

И паранойя никуда не делась. Она лишь сменила вектор. Теперь он думал: "Что я пропустил? Есть ли другие способы? Уязвимости в самом Оркестраторе? Может ли она влиять на ядро Zeta Core напрямую, минуя мои ограничения?"