Задача: на общем удалённом Mac перед merge связать openclaw gateway status в JSON, openclaw doctor и lsof на 18789 плюс короткий HTTP-зонд, без ложных зелёных статусов. Официальный ритм: JSON для диффов, doctor для среды, портовый отпечаток для гонок процессов; prefetch даёт тёплый шлюз и честную сводку. См. onboard CI, validate, prefetch RAG. Главная, цены, покупка, помощь — без входа.

Три типичных провала ворот до порта 18789

  • JSON зелёный, HTTP мёртв: без curl и lsof пропустите падение слушателя или другой loopback.
  • Конкуренция за 18789: старый job или продовый launchd; PR-smoke и прод не делят один порт.
  • nvm vs системный Node: shim в SSH и бинарь в plist расходятся, doctor даёт флаппинг.

Матрица сигналов: status JSON, doctor, lsof на 18789

JSON — автоматизация и диффы между коммитами, doctor — версии Node и целостность CLI, lsof — гонки за портом и чужие процессы. Тяжёлый prefetch и длинные загрузки вынесите в отдельный шаг до ворот, чтобы очередь merge не простаивала.

Вопрос gateway status JSON doctor + lsof 18789
Жив ли слушатель Даёт структурированное состояние для скриптов и вебхука сводки. lsof -nP -iTCP:18789 -sTCP:LISTEN показывает PID и команду; doctor подтверждает CLI и пути.
Согласованность с демоном Сравните поля версии и домашних каталогов между коммитами. Сверьте PID с ожидаемым Label launchd или временным инстансом job.
После смены токена или маршрута Повторите JSON и сохраните артефакт для диффа. Повторите doctor; при подозрении на залипание сделайте короткий рестарт и снова снимите lsof.

Чеклист предпосылок для launchd и CI

  • Node без nvm: абсолютные which node и which openclaw = как в plist ProgramArguments.
  • OPENCLAW_HOME для PR отдельно от прода и порта по умолчанию.
  • CI=true и флаги из openclaw gateway status --help без браузера.
  • Prefetch npm и моделей до статуса, иначе таймауты врут.
  • Артефакты без токенов и сырого export.

Пошаговый сценарий ворот

Один неинтерактивный шаг, общий лог через tee для последующего grep и тикета команды целиком. Шесть позиций ниже.

1
Зафиксировать рантайм и пути

Версии до установок; несовместимый Node — fail fast.

node -v
command -v node
command -v openclaw
npm prefix -g
2
Экспорт безголового CI

CI=true, при необходимости TERM=dumb.

export CI=true
3
Снять JSON статуса шлюза

Флаги JSON из --help; ниже пример файла и pretty-print если JSON.

openclaw gateway status > gateway-status.json
python3 -m json.tool gateway-status.json 2>/dev/null | tee gateway-status.pretty.log || cp gateway-status.json gateway-status.pretty.log
4
doctor и config validate

validate — схема, doctor — среда.

openclaw doctor 2>&1 | tee -a openclaw-gate.log
openclaw config validate 2>&1 | tee -a openclaw-gate.log
5
Отпечаток порта 18789

PID и команда против ожидаемого Label или smoke.

lsof -nP -iTCP:18789 -sTCP:LISTEN | tee lsof-18789.txt
6
HTTP-зонд и артефакты

curl с таймаутом; путь health по версии шлюза. Один пакет файлов для вебхука.

curl -fsS --max-time 5 http://127.0.0.1:18789/health | tee curl-health.txt

Критерии здоровья «зелёный прогон»

  • gateway-status.json валиден; поля согласованы с CLI и OPENCLAW_HOME job.
  • openclaw doctor и config validate с кодом ноль.
  • lsof-18789.txt пуст или показывает ожидаемый smoke.
  • curl-health.txt в таймауте с ожидаемым кодом; при fail приложите JSON и lsof вместе.

Типовые сообщения и что проверить

Симптом / строка лога Вероятная причина Действие
EADDRINUSE 18789 Чужой слушатель. lsof, убрать smoke, не трогать прод Label в PR.
JSON ок, curl fail HTTP умер или другой loopback. Рестарт, один артефакт с JSON и curl.
openclaw не найден в plist nvm PATH не у launchd. Абсолютный путь и PATH в plist.
doctor и Node Несовместимая ветка. Системный Node, prefetch снова.

FAQ

Дублируйте вопросы в JSON-LD FAQPage и шаги в HowTo внутри <head> для расширенных результатов поиска.

Почему JSON зелёный, а curl падает?

Кэш метаданных; добавьте HTTP-зонд и lsof рядом с JSON.

Продовый Label launchd в PR?

Нет — гонка за порт; отдельный OPENCLAW_HOME и smoke.

Дрейф PATH из-за nvm?

Абсолютный openclaw в plist и PATH в EnvironmentVariables.

Зачем prefetch?

Тёплый кеш снимает холодные таймауты; сводка вебхука честнее.

Prefetch и одна сводка для CI

Prefetch перед gateway status стабилизирует health и JSON между коммитами на удалённом Mac. Один каталог артефакта с JSON, логом doctor и validate, lsof и curl даёт короткую сводку вебхуку без повторного подъёма шлюза и ускоряет разбор инцидентов, потому что человек и автоматика смотрят на один и тот же набор файлов.

Итоговый чеклист перед merge

  • Абсолютные пути node и openclaw согласованы с plist.
  • JSON, doctor, validate, lsof, curl — один архив с хешем коммита.
  • Prefetch сделан или явно пропущен в MR.
  • Нет секретов в артефактах.
  • При конфликте 18789 указан Label или smoke.

Краткий итог

Связывайте JSON статуса, doctor, lsof на 18789 и короткий HTTP-зонд; prefetch и один пакет артефактов дают стабильную сводку CI.

Выделенный Apple Silicon под шлюз и ворота: главная, цены, покупка, помощь; каталог — блог (чтение без входа).

Стабильный OpenClaw шлюз на удалённом Mac

Закрепите узел под prefetch, JSON-статус и doctor; перейдите на главную, в тарифы, покупку или центр помощи без авторизации.