npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@airlok/cli

v0.5.0

Published

Выкатка проекта на хостинг airlok из терминала, подключение своего сервера и ИИ-агентов: npx @airlok/cli setup

Readme

@airlok/cli

Выкатка папки проекта на хостинг airlok из терминала — без GitHub и без своего сервера. И подключение своего сервера одной командой, не заходя на него.

npx @airlok/cli login    # вход через браузер
npx @airlok/cli deploy   # собрать и выкатить текущую папку

Нужен Node.js 18.17 или новее. Устанавливать ничего не нужно: npx скачает CLI сам.

ИИ-агенты: один раз и навсегда

npx @airlok/cli setup

Команда входит в airlok (если ещё не вошли) и подключает найденных агентов — Claude Code, Codex, Antigravity, Cursor:

  • прописывает им MCP-сервер airlok с вашим токеном — через него агент видит приложения, статус и лог сборки, логи, переменные, базу, домены и настройки;
  • кладёт навыки: airlok — как выкатывать, разбирать упавшую сборку, проверять сайт и что нельзя делать без вашей просьбы; airlok-yml — как подготовить airlok.yml проекта с полным списком переменных окружения и их описаниями.

После перезапуска агента достаточно сказать «выкати на airlok» или «почему сайт отдаёт 500». Выбрать агентов: --agents claude,codex, без вопросов: --yes. Повторный запуск ничего не дублирует; прежние файлы настроек остаются рядом с суффиксом .airlok-backup. Токен хранится в файлах настроек агентов открытым текстом, отозвать его можно в дашборде: Настройки → токены.

Свой сервер: одна команда с вашего компьютера

npx @airlok/cli server connect root@IP-СЕРВЕРА --letsencrypt

Заходить на сервер не нужно: CLI заводит его в дашборде, ставит airlok по SSH (Docker, nginx, файрвол, агент) и ждёт, когда агент выйдет на связь. То же можно поручить ИИ-агенту — промпт для него есть в дашборде: Серверы → «Добавить».

  • Если сервер ещё не пускает по ключу, CLI создаёт ключ ~/.ssh/airlok_ed25519 и кладёт его на сервер. Пароль от сервера спрашивает сам ssh — один раз и только в настоящем терминале; ИИ-агент попросит вас выполнить команду у себя.
  • Токен агента CLI получает под вашим входом и передаёт на сервер через stdin ssh: он не печатается и не попадает в промпт ИИ-агента.
  • --ssh-keys-only закрывает вход по паролю; CLI сам проверяет вход по ключу новым соединением и подтверждает его.
  • --name — имя в дашборде (по умолчанию — адрес), --port — порт SSH, --email — почта для Let's Encrypt, --json — итог одной строкой. Пользователь не root должен иметь sudo без пароля.
  • Повторный запуск безопасен: если прошлая попытка не дошла до конца, CLI продолжит её с тем же сервером.

Нужен OpenSSH-клиент: на macOS и Linux он есть, на Windows 10/11 — тоже (PowerShell).

Как это работает

  1. login печатает ссылку с кодом. Откройте её, сверьте код и нажмите «Разрешить» — CLI получит токен с правом выкатывать. Токен лежит в ~/.config/airlok/config.json, его видно и можно отозвать в дашборде: Настройки → токены.
  2. deploy спрашивает, в какое приложение выкатывать (или создаёт новое), и запоминает выбор в .airlok/project.json внутри папки. Дальше хватает npx @airlok/cli deploy.
  3. Папка пакуется в архив. В git-репозитории берутся файлы по .gitignore; node_modules, .git, .env* (кроме .env.example) и сборки не уходят никогда — airlok соберёт проект сам. Предел архива — 50 МБ.
  4. CLI показывает этапы сборки и в конце печатает адрес сайта. Если сборка упала — причину и конец лога; код выхода тогда 1.

Проверка проекта

npx @airlok/cli check [папка] [--json]

Показывает, что airlok сделает с проектом, ничего не собирая: стек, команды установки, сборки и запуска, адрес проверки, базу, загрузки и все переменные окружения — и что помешает выкатке, включая опечатки в airlok.yml. Папка пакуется так же, как для deploy, проверяется на сервере airlok тем же кодом, что и сборка, и сразу удаляется. Код выхода 1 — с такими файлами выкатка не пройдёт.

Подсказки в редакторе даёт схема — первая строка airlok.yml:

# yaml-language-server: $schema=https://raw.githubusercontent.com/airlok-sh/airlok/main/schema/airlok.schema.json

Переменные окружения

npx @airlok/cli env list --app shop                  # имена, без значений
npx @airlok/cli env set OPENAI_API_KEY --app shop    # значение спросит, не показывая на экране
printf %s "$VALUE" | npx @airlok/cli env set OPENAI_API_KEY --app shop   # или из stdin
npx @airlok/cli env set --app shop --from .env       # все переменные из файла
npx @airlok/cli env rm OPENAI_API_KEY --app shop

У приложения на своём сервере значения шифруются здесь, на вашем компьютере, под ключ агента этого сервера: airlok хранит только шифротекст и прочитать его не может. CLI печатает отпечаток ключа — тот же агент пишет в журнал сервера (journalctl -u airlok-agent | grep ключ). На сервер значения попадут при следующей выкатке. У приложения на хостинге их шифрует дашборд, и они применяются со следующего запроса к сайту. Если имя приложения есть на нескольких серверах — --app <сервер>/<имя>, хостинг — hosting/<имя>.

Свой домен на своём сервере

npx @airlok/cli domain add shop.example.ru --app shop   # подключить или заменить: покажет A-запись на IP сервера
npx @airlok/cli domain check --app shop                 # проверить DNS сейчас
npx @airlok/cli domain show --app shop                  # что с доменом
npx @airlok/cli domain rm --app shop                    # отключить

У регистратора заводится A-запись домена на IP сервера; airlok проверяет её сам каждую минуту. Когда DNS указывает на сервер, домен включается следующей выкаткой и главнее app.domain в airlok.yml. На хостинге свои домены подключаются в дашборде или через ИИ-агента.

Флаги

| Флаг | Что делает | | --- | --- | | --app <имя> | выкатить в существующее приложение | | --new <имя> | создать приложение и выкатить | | --title <текст> | название выкатки; по умолчанию — последний коммит | | --no-wait | не ждать конца сборки | | --json | итог одной строкой JSON: удобно для скриптов и ИИ-агентов |

CI и ИИ-агенты

Без браузера CLI работает с токеном из переменной окружения:

AIRLOK_TOKEN=airlok_pat_… npx @airlok/cli deploy --app shop --json

Токен с правом выкатывать создаётся в дашборде: Настройки → токены. AIRLOK_URL задаёт адрес дашборда, если он не https://app.airlok.ru.

Разработка

npm test

Зависимостей нет: только стандартная библиотека Node.js.