Внутреннее устройство ACP

Адаптер ACP оборачивает синхронный AIAgent Hermes в асинхронный сервер JSON-RPC stdio.

Ключевые файлы: реализация

Процесс загрузки

hermes acp / hermes-acp / python -m acp_adapter
  -> acp_adapter.entry.main()
  -> загрузить ~/.hermes/.env
  -> настроить stderr логирование
  -> создать HermesACPAgent
  -> acp.run_agent(agent, use_unstable_protocol=True)

Стандартный вывод зарезервирован для транспортировки ACP JSON-RPC. Человекочитаемые логи направляются в stderr.

Основные компоненты

HermesACPAgent

acp_adapter/server.py реализует протокол агента ACP.

Обязанности:

Менеджер сеансов

acp_adapter/session.py отслеживает активетные сессии ACP.

каждая сессия хранит:

Менеджер потокобезопасен и опор:

Большинство событий

acp_adapter/events.py преобразует колбэки AIAgent в события session_update ACP.

Подключенные колбэки:

Поскольку AIAgent работает в рабочем потоке, ввод-вывод ACP работает в событиях главного цикла, мост использует:

asyncio.run_coroutine_threadsafe(...)

Большинство разрешений

acp_adapter/permissions.py адаптирует запросы на подтверждение символов терминальных операций в запросах разрешений ACP.

Соответствие:

Тайм-ауты и сбои моста по умолчанию приводят к отказу.

Вспомогательные функции инструментов рисования

acp_adapter/tools.py содержит инструменты Hermes с инструментами типа ACP и формирует контент для редактора.

Примеры:

Жизненный цикл сессии

new_session(cwd)
  -> создать SessionState
  -> создать AIAgent(platform="acp", enabled_toolsets=["hermes-acp"])
  -> привязать task_id/session_id к переопределению cwd

prompt(..., session_id)
  -> извлечь текст из блоков контента ACP
  -> сбросить событие отмены
  -> установить колбэки + мост разрешений
  -> запустить AIAgent в ThreadPoolExecutor
  -> обновить историю сессии
  -> отправить финальный фрагмент сообщения агента

Отмена

отмена (session_id):

Разветвление

fork_session() глубоко копирует историю сообщений в новую активную сессию, сохраняя состояние разговора, при этом ответвление получает свой собственный идентификатор сессии и cwd.

Поведение провайдера/аутентификации

ACP не предоставляет собственную хранилищу аутентификации.

Вместо этого он использует рантайм-резольвер Гермес:

Таким образом, ACP рекламирует и использует текущие настроенные провайдера/учетные данные Hermes.

Привязка рабочих директорий

Сессии ACP содержат редактора cwd.

Менеджер сессий привязывает этот cwd к идентификатору сессии ACP через переопределение терминала/файлов в рамках задачи, так что файловые и терминальные инструменты работают относительно рабочей области редактора.

Вызовы аналогичных инструментов

В большинстве случаев идентификаторы инструментов отслеживаются по принципу FIFO для каждого инструмента, а не только один идентификатор имени по имени. Это важно для:

Без очередей события FIFO завершались бы прикреплялись к неправильному вызову инструмента.

Восстановление колбэка разрешений

ACP временно устанавливает временный инструмент колбэков на время выполнения промпта, а затем обеспечивает соблюдение предыдущего колбэка. Это ваша глобальная установка обработчиков разрешений, специально предназначенных для сессии ACP.

Текущие ограничения

Связанные файлы