Он рванул мышь, открывая окно редактора с исходным кодом Оркестратора — `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 напрямую, минуя мои ограничения?"