# Загрузчик API — `bootstrap.js`

Модуль, который движок выполняет сразу после создания JS-контекста: он строит `$`
и кладёт его в `globalThis`, поэтому `$` существует уже в коде `main.js`.

```js
// main.js — $ уже есть, импортировать не нужно
$.ready(() => { /* мир готов */ });
```

---

## 1. Что делает

1. ставит метку выполнения `globalThis.__r2d_boot_started` (по ней проверка
   видит, что модуль **доехал** до бинарника, а не потерялся при встраивании);
2. вызывает `createApi()`;
3. кладёт результат в `globalThis.$` и `globalThis.nk` (короткий алиас);
4. при ошибке установки запоминает её текст в `globalThis.__r2d_boot_error` и
   пишет в журнал движка — без этого «$ не определён» неотличимо от «модуль не
   загрузился»;
5. экспортирует `$` по умолчанию, поэтому `import $ from 'r2d'` возвращает **тот
   же** объект, а не второй экземпляр.

## 2. Почему именно так

Ошибка внутри `createApi()` уносила контекст, и движок писал только «bootstrap.js
не выставил globalThis.$» — по такому сообщению причину не найти. Теперь текст
исключения виден и в журнале, и в `__r2d_boot_error`.

## 3. Проверка

```bash
# все модули доехали до бинарника и $ в игре есть
python3 tests/agent/highlevel_modules_test.py
```
