Skip to main content
Glama
EvexU2

evex-agent-messaging

by EvexU2

EVEX Agent Messaging Gateway

Провайдер-нейтральный транспорт MCP для операций Parent Main, Child Main и Role Child. Агенты вызывают этот MCP; они не вызывают Conversation API OpenHands напрямую.

Инструменты

  • create_child: проверяет полную структурированную Mission и чистый детерминированный git checkout, привязывает идентичность Child плюс возможность обратного вызова, затем создаёт один детерминированный Conversation. Провайдер выполняет один раунд без инструментов, восстанавливает и повторно проверяет точную ветку/HEAD после начальной загрузки ACP, и только затем допускает инструменты и передаёт Mission. Никакой вызов Conversation API не происходит, когда отсутствует или не совпадает авторизация checkout. Источники получают только Messaging; только явные Mission по проверке/ремонту могут запрашивать capabilities: ["runtime_environment"].

  • send_to_parent: доставляет структурированный RESULT/NEEDS_INPUT владельцу capability.

  • request_user_decision: доставляет вопрос в формате A/B/C владельцу.

  • cancel_mission / resume_mission: останавливает или возобновляет точную задачу Child.

  • publish_navigation_links: публикует информационные ссылки Issue/Main/Child/PR владельцу.

Capabilities — это компактные непрозрачные ссылки evx1_ HMAC-SHA256. Они связывают владельца, Child, ключ задачи, роль, разрешённое действие и срок действия. Сервер хранит учётные данные OpenHands; они никогда не появляются во входных данных инструментов, выходных данных инструментов или переменных окружения дочерних процессов. Постоянного состояния нет: вызывающие предоставляют стабильный ключ сообщения, а Main дедуплицирует семантические повторы.

Каждый созданный Child получает асинхронный нативный хук Stop. Хук вызывает частную конечную точку /completion-hook с его ограниченной ссылкой; шлюз ожидает терминального нативного состояния и отправляет один стабильный RECOVERY_WAKE, содержащий ограниченный терминальный ответ ассистента, владельцу Main. Это провайдер-нейтральный запасной вариант, когда модель завершает работу без вызова send_to_parent. Повторные хуки используют тот же семантический ключ сообщения и не требуют базы данных, опроса, инструмента чтения или хранилища квитанций.

Доверенный Event Gateway/хост выпускает кратковременную capability Main с помощью main_capability_token(...) и внедряет её в Mission Main. MCP не предоставляет инструмент для выпуска capability агентам.

Parent создаёт или получает только постоянное голое зеркало по адресу /home/openhands/workspace/mirrors/<owner>--<repository>.git. create_child формирует /home/openhands/workspace/delivery/child-<child UUID>, создаёт рабочее дерево точной ветки, если оно отсутствует, и проверяет репозиторий, origin, ветку, HEAD и чистоту перед обращением к Conversation API. Он никогда не клонирует/не получает удалённо, не удаляет, не сбрасывает и не переназначает существующее рабочее дерево.

Related MCP server: handoff-mcp-server

Запуск

Сервер использует кадрирование stdio MCP (заголовки Content-Length):

export EVEX_MESSAGING_SECRET='long-random-secret'
export OPENHANDS_URL='http://openhands:8000'
export OPENHANDS_API_KEY='server-only-key'
export OPENHANDS_PUBLIC_URL='http://openhands.example/canvas'
PYTHONPATH=src python3 -m evex_agent_messaging

Только адаптер читает переменные OpenHands. Поддельный провайдер может быть внедрён в тестах или хостом, встраивающим сервис, поэтому навыки и Mission остаются нейтральными к среде выполнения.

Проверка

python3 -m unittest discover -s tests -p 'test_*.py' -q

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers