OpenClaw · Шлюз Webhook · Lighthouse · Удалённый Mac · Safari WebKit · 2026

OpenClaw на фронтенде в 2026 году — практика на удалённом Mac:
приём webhook превью, Lighthouse CLI, пороги JSON, коды выхода и сводка для pull request

25.04.2026 Веб-автоматизация и гейты релиза 9 мин чтения

Для кого: команды, у которых на арендованном удалённом Mac уже крутится шлюз OpenClaw и нужна одна воспроизводимая цепочка от вебхука превью-деплоя до Lighthouse CLI, файла порогов JSON, предсказуемых кодов выхода и короткого Markdown для GitHub. Slug: 2026-openclaw-remote-mac-preview-lighthouse-webhook.html. См. также Deployments API + Lighthouse и смоук заголовков Vercel deploy hook; для регулярных прогонов — Lighthouse и алерты по перфомансу.

Вебхуки деплоя несут preview_url и метаданные коммита. Типовой Linux CI не воспроизводёт композитинг Apple и ветку, которую видят пользователи в Safari / WebKit. Шлюз OpenClaw на удалённом Mac завершает TLS, проверяет подпись, нормализует JSON, ставит задачу воркеру, запускает Lighthouse CLI (лабораторный Chromium), сравнивает lhr.json с порогами из репозитория, мапит регрессию на код выхода 2, а сетевые и инфраструктурные сбои после контролируемого повтора — на код 3, после чего публикует читаемую сводку в PR или в строку статуса деплоя.

Результат. Один HTTPS-endpoint, артефакты в .openclaw/reports/ и блок Markdown, который можно отправить в API комментариев GitHub без утечки секретов в тело PR.

Какие боли снимает схема

  1. Неаутентифицированные hook. Прямой curl из CI в произвольный shell открывает путь к повторному воспроизведению запросов и усложняет аудит.
  2. Вердикт только в консоли. Если числа Lighthouse не доходят до GitHub, ревьюеры мержат, пока отказ живёт в прокрутке терминала.
  3. Дрожащие сравнения. Без закреплённого Chromium, прогрева и машиночитаемых порогов в JSON порог «на глаз» быстро превращается в шум.

01 Почему именно шлюз OpenClaw должен принимать deploy hook

OpenClaw на практике даёт единую точку входа: TLS, HMAC или mTLS, лимиты по клиентам, нормализация полей и поток NDJSON для наблюдаемости. Когда Vercel, Netlify, Cloudflare Pages или ваш CI шлёт deployment webhook, подпись проверяется здесь; дедупликация по Idempotency-Key не даёт двойному событию дважды запустить Lighthouse; токены GitHub остаются на стороне воркера Mac, а не на публичном edge. Тот же ingress переиспользуйте для predeploy Lighthouse или сводок метрик сборки в PR.

После прогона Lighthouse добавьте на том же хосте короткий Safari / WebKit смоук (Playwright webkit или ручной сценарий): лабораторные баллы Chromium и сигнал движка пользователей оказываются в одном отчёте. При необходимости вынесите WebKit в предупреждение без блокировки merge отдельным кодом или флагом политики.

02 Матрица входа: шлюз против «только GitHub»

Подход Плюс Минус
Webhook шлюза OpenClaw Центральная проверка подписи, единый формат payload, дедуп, следующий хоп — Apple Silicon рядом с воркером. Сертификаты TLS, политики повтора и квоты вы настраиваете сами.
Только repository_dispatch Аудит внутри GitHub из коробки. Сложнее стримить тёплые трассы и Mac-локальный NDJSON без дублирования токенов в Actions.

03 Воспроизводимый HowTo

  1. Опубликуйте маршрут hook. Принимайте POST с JSON на HTTPS OpenClaw; проверяйте HMAC и «свежесть» временной метки.
  2. Нормализуйте поля. Смапьте поля провайдера на PREVIEW_URL, сохраните GIT_SHA, PR_NUMBER, сгенерируйте OPENCLAW_RUN_ID.
  3. Поставьте задачу на Mac. Запись в .openclaw/queue/ + launchd или watcher, чтобы обрыв SSH не терял работу.
  4. Прогрейте превью. Два GET (HTML и основной JS) с user-agent, близким к Lighthouse; backoff на 429.
  5. Запустите Lighthouse CLI. Например: pnpm exec lighthouse "$PREVIEW_URL" --only-categories=performance --output=json --output-path=".openclaw/reports/${OPENCLAW_RUN_ID}.lhr.json" --chrome-flags="--headless=new"; версию Chrome закрепляйте по ветке или неделе.
  6. Сравните с порогами. Читайте perf/thresholds.json на том же SHA; пишите verdict.json для артефактов.
  7. Коды выхода. 0 — ок; 2 — регрессия по метрикам; 3 — инфраструктура после одного повтора.
  8. Отправьте digest. Заполните шаблон ниже, POST в комментарий PR или в deployment status; в NDJSON добавьте phase=preview_lighthouse.
# Минимальная проверка перед форком воркера
set -euo pipefail
test -n "${PREVIEW_URL:-}" && test -n "${GIT_SHA:-}" || exit 3
# openclaw-hook-verify --secret "$HOOK_SECRET" --body "$RAW_BODY" --sig "$SIG_HEADER" || exit 3

04 Таблица порогов, пример JSON и коды выхода

Метрика Пример бюджета Действие при провале
Performance score >= 0.85 на мобильном пресете Выход 2; в сводке — дельта к baseline-артефакту.
LCP / CLS / TBT LCP <= 2500 мс, CLS <= 0.08, TBT <= 200 мс Выход 2; сначала укажите худшую метрику.
Таймаут навигации maxWaitForLoad <= 45000 Один retry, затем выход 3, чтобы merge-queue отличал инфраструктуру от регрессии.
{
  "performance": { "minScore": 0.85 },
  "metrics": {
    "largest-contentful-paint": { "maxNumericValue": 2500 },
    "cumulative-layout-shift": { "maxNumericValue": 0.08 },
    "total-blocking-time": { "maxNumericValue": 200 }
  }
}

Код 0 — все бюджеты соблюдены. Код 2 — осознанный отказ по перфомансу (блок merge). Код 3 — сеть, авторизация, зависший провайдер: эскалация в ops, а не переписывание кода.

05 Шаблон сводки, удобной для чтения в PR

Держите блок около 4 КБ, чтобы мобильный GitHub не резал разметку. Тот же текст можно дублировать в статус деплоя при связке из статьи Deployments + Lighthouse.

### OpenClaw · гейт Lighthouse по превью
- **Прогон** `OPENCLAW_RUN_ID` @ `GIT_SHA` на удалённом Mac (Chromium закреплён)
- **URL** `PREVIEW_URL`
- **Баллы** perf **{{score}}** (Δ {{delta}} к baseline)
- **Метрики** LCP **{{lcp}}мс**, CLS **{{cls}}**, TBT **{{tbt}}мс**
- **Вердикт** {{pass_or_fail}} — лог `.openclaw/reports/{{run}}.lhr.json`
Заметка для внедрения

Еженедельно пиньте Chromium; храните lhr.json как .openclaw/reports/${OPENCLAW_RUN_ID}.lhr.json; в подвал комментария добавьте одну строку о статусе WebKit-смоука на том же Mac.

06 Реальный Safari / WebKit и автоматизация рядом

Lighthouse остаётся эталоном для стабильных лабораторных метрик в Chromium. На удалённом Mac с тем же образом окружения добавьте короткий прогон WebKit: те же cookies/заголовки прогрева, те же переменные OPENCLAW_RUN_ID, но отчёт в формате, удобном дизайнерам (скрин, трассировка или один булевый «WebKit OK»). Так вы связываете то, что видит пользователь в Safari, с тем, что блокирует merge по числам — без смешения движков в одном бинарнике Lighthouse.

07 FAQ: 403, таймауты, дубликаты hook

Почему Lighthouse видит HTTP 403 на превью?

Часто виноваты защита превью, антибот или отсутствие Authorization у headless Chrome. Переиспользуйте заголовки из смоука deploy-hook, добавьте egress IP Mac в allowlist провайдера или передайте короткоживущий токен через секрет CI — не через текст PR.

Как не дать флейковым таймаутам блокировать merge?

Один повтор с тем же OPENCLAW_RUN_ID, чуть увеличьте --max-wait-for-load, зафиксируйте версию Chromium; при повторном таймауте завершайте с 3, чтобы очередь слияний трактовала инцидент как инфраструктуру.

Провайдер шлёт дублирующие webhook?

Требуйте Idempotency-Key: ${GIT_SHA}:${OPENCLAW_RUN_ID}:lighthouse и пропускайте задачу, если файл очереди уже существует — так два одинаковых события не запустят двойной Lighthouse.

OpenClaw · Удалённый Mac · Webhook + Lighthouse

Тот же Apple Silicon, на котором крутятся ваши гейты

Откройте главную, загляните в помощь по SSH и VNC, сравните тарифы и оформите покупку или аренду узла без обязательного входа в облако. Каталог материалов — в блоге.

Webhook шлюза Safari / WebKit Lighthouse CLI
Аренда Mac — webhook + Lighthouse