Документация
Рабочий локальный интерфейс
Приложение находится в ui/app/; сервер src/ui/server.ts предоставляет его через ahub ui. Исходный ui/mockups/ остаётся визуальным ориентиром; обе версии используют ui/app/base.css. Рабочие assets самостоятельны.
Сервер вызывает существующий сборщик статуса и общий сервис src/core/import-plan.ts. CLI использует те же планировщик и запись. Внутренние планы содержат секреты; браузеру отправляется только явно разрешённая публичная проекция.
Пошаговый первый запуск
Overview разделяет Set up shared Hub и необязательный Connect project memory. Общий Hub настраивается из любой папки: глобальные MCP, навыки и правила с индексом. Заголовок выбирает проверенный проект, стартовую папку или общие знания; переключение сбрасывает планы. Подключение проекта отдельно показывает память, контекст и hooks. Пути хранилища и проекта подписаны раздельно. Результат перечисляет завершённые, неизменённые, пропущенные и заблокированные этапы, восстановление этапов, undo запуска и reset первого baseline. См. быстрый старт.
POST /api/quick/preview принимает только clients и prefer. POST /api/project/connect/preview принимает clients и automation; проект определяется текущим выбором проверенной сервером привязки либо стартовой папкой. Соответствующие маршруты /apply используют закрытые одноразовые previewId и revision. План общего Hub нельзя применить через проектный маршрут. Неизвестные и чужие области отклоняются. ID действуют пять минут; запись защищают общий guard UI и блокировки этапов. Внутренние планы с исходными данными не выдаются. Сценарии поэтапные, не единая транзакция.
API
| Маршрут | Назначение |
|---|---|
GET /api/state | Статус Hub и клиентов, очищенные описания реестра, известный Markdown, выбранный проект, время обновления и токен сессии |
GET /api/skill?name=…&source=… | Навык из обнаруженного каталога Hub или клиента, не произвольный путь |
POST /api/import/preview | План импорта MCP без записи; принимает item, prefer, overwrite |
POST /api/import/apply | Применение по непрозрачному id с перестроением и проверкой ревизии |
POST /api/sync/preview | Preview доставки MCP включённым клиентам или одному client; действия и команды CLI |
POST /api/sync/apply | Применение по id с копиями, владением, проверками и откатом |
POST /api/doctor/run | Фоновая задача проверки подключений: name, client, timeout; ответ 202 с ID |
GET /api/doctor/<id> | Получение промежуточных результатов и итогового отчёта |
POST /api/doctor/cancel | Отмена задачи по ID и остановка процессов проверок |
POST требует JSON и X-Agent-Hub-Token из /api/state. Host должен совпадать с локальным адресом; чужие origin и site отклоняются. Статика разрешена по списку, ответы не кешируются, CSP ограничена. Ошибки парсеров и subprocess не передаются как есть: они могут содержать секреты.
Планы одноразовые, действуют пять минут и ограничены по числу. Импорт и sync сериализуются в процессе UI. CLI и UI используют одну файловую блокировку для импорта, sync, restore и init; слияние doctor-отчётов тоже защищено. Ревизия включает определения, реестр, значения окружения и параметры. Импорт сохраняет закрытые хеши рассмотренных вариантов и выбранного Hub-описания, без значений секретов. Sync может заменить именно эти варианты после выбора источника; поздние правки конфликтуют. Перед атомарной заменой проверяется каждый файл. Внешние клиенты блокировку не соблюдают: запись между последней проверкой и rename остаётся ограничением.
UI поддерживает импорт, preview доставки, защищённые записи MCP, фильтрацию и просмотр документов. Проверки подключений выполняются фоном с прогрессом, отменой и очищенным общим кешем. Навыки, общий контекст и репозитории используют планы контента. Редактирование документов, запуск агентов и индекс сессий не реализованы. Недоступные функции объясняются, а не изображают рабочие действия с примерами данных.
Следующие шаги
Пройдите рабочее испытание, затем релизные проверки. Доставка контекста и шаблоны реализованы; точная область — в контенте. Sync и restore находятся в src/core/sync.ts, config-edit.ts и restore.ts; планировщик общий для CLI и UI. Поля stdio и политики инструментов Codex следуют официальной документации.
Задачи doctor
src/core/doctor.ts планирует ограниченные пробы и сохраняет отчёт. Изолированный worker использует официальный SDK через ahub mcp run и перечисляет инструменты без вызова. Родитель ограничивает общее время и завершает группу процессов на macOS/Linux, включая упрямых потомков. Ошибки классифицируются фиксированными сообщениями; исходные логи не покидают worker.
HTTP отвечает сразу, результаты опрашиваются отдельно. В одном UI работает одна задача doctor. Закрытие сервера отменяет задачи и ждёт очистку; их число ограничено. Общий отчёт CLI/UI — state/doctor.json; новая ревизия реестра или секретов делает старый результат устаревшим. Время проверки видно. Это доказательство соединения и обнаружения инструментов, отдельно от конфигурации и здоровья внешнего API.
Доступность внешнего сервиса
health: {name, url} включает общую ограниченную readiness-пробу. Отдельная интеграция сохраняет пресет n8n для конфигураций с N8N_API_URL. DoctorResult.service возвращает ready, unavailable либо unknown, фиксированное пояснение и необязательный HTTP-код. URL, тело ответа и секреты исключены. MCP оценивается независимо: рабочий MCP при выключенном n8n получает предупреждение, детали и счётчик. Повторная проба обновляет кеш и убирает восстановившиеся предупреждения. Сбой не удаляет и не отключает конфигурацию.
Проба — GET без авторизации к базовому URL плюс /healthz/readiness, без userinfo, query, fragment, API-заголовков и перенаправлений. 401/403/404 и redirect означают неизвестность: ingress может скрывать endpoint. Права API и выполнение workflow не проверяются.
Управляемые операции контента
POST /api/content/preview принимает skills-import, skills-sync, context-sync, init-repo либо project-disconnect. Возвращаются действия, пути, ревизия и команды, но не тексты правил и памяти. POST /api/content/apply потребляет ID, перестраивает план и применяет под блокировкой. Защиты Host/Origin/token и пять минут одноразового preview сохраняются. Все записи контента сериализуются с импортом и sync MCP.
В UI есть Skills import/delivery, доставка Instructions/Memory и Prepare repository на Repos & tasks. Init-repo привязан к выбранному проверенному проекту либо стартовой папке. QA-harness подставляет временные цели и для контента, и для MCP, не используя настоящие клиентские папки разработчика.
Доказательства и выбор проекта
Overview различает совпадение настроек, актуальные, устаревшие и отсутствующие проверки MCP, установку hooks и наблюдавшиеся timestamps. Настроенный hook не считается наблюдённым. Число переданных фактов и пустые подтверждения не доказывают качество знаний. Метрика памяти считает канонические записи отдельно от Markdown-документов. Неподключённые папки используют общую область.
POST /api/project/select принимает зарегистрированный ID, @current либо null для общих знаний. Проверяет Git-идентичность checkout, заменяет привязанную сессию памяти и сбрасывает планы настройки, импорта, контента и доставки. Произвольные пути запрещены. Направления отдельных MCP и навыков открывают точный импорт источника либо доставку Hub с явной заменой только выбранной записи.