# Inventory Debug API

Глобальный объект `__mcInv` доступен в DevTools сразу после монтирования `InventoryProvider`.

## Быстрый старт

```js
// Текущее состояние инвентаря
__mcInv.state

// Все сессии (провайдер + коннектор)
__mcInv.getStates()

// Лог событий
__mcInv.getLogs()

// Последние N событий
__mcInv.getLogs().slice(-20)

// Экспорт для сравнения / передачи
copy(JSON.stringify(__mcInv.exportLogs(), null, 2))

// Очистить буфер
__mcInv.clearLogs()
```

## События

| Событие | Источник | Когда |
|---|---|---|
| `connector.mount` | mineflayer-connector | Коннектор создан |
| `connector.unmount` | mineflayer-connector | Коннектор уничтожен |
| `provider.mount` | inventory-provider | Провайдер смонтирован |
| `provider.unmount` | inventory-provider | Провайдер размонтирован |
| `connector.windowOpen` | inventory-provider | Открыто новое окно |
| `connector.windowUpdate` | inventory-provider | Слоты обновились от сервера |
| `connector.windowClose` | inventory-provider | Окно закрыто |
| `connector.playerUpdate` | inventory-provider | Обновился инвентарь игрока |
| `connector.heldItemChange` | inventory-provider | Изменился предмет в руке |
| `ui.action` | inventory-provider | Пользователь инициировал действие |
| `ui.drag.optimisticUpdate` | inventory-provider | Drag завершён, применён оптимистичный апдейт |
| `connector.action.start` | mineflayer-connector | Начало отправки пакета |
| `connector.action.success` | mineflayer-connector | Пакет успешно отправлен |
| `connector.action.failure` | mineflayer-connector | Ошибка при отправке |
| `connector.action.skipped` | mineflayer-connector | Действие пропущено (нет нужного хендлера) |
| `connector.action.ignored` | mineflayer-connector | Неизвестный тип действия |
| `connector.helperIntent` | mineflayer-connector | Вызов mineflayer-хелпера (bot.clickWindow и др.) |
| `connector.packetWrite` | mineflayer-connector | Прямая запись пакета через `_client.write` |

## Фильтрация логов

```js
// Только ошибки
__mcInv.getLogs().filter(e => e.event === 'connector.action.failure')

// Только действия пользователя
__mcInv.getLogs().filter(e => e.event.startsWith('ui.'))

// Конкретное окно
__mcInv.getLogs().filter(e => e.windowType === 'enchanting_table')

// Пакеты конкретного типа
__mcInv.getLogs().filter(e => e.event === 'connector.packetWrite' && e.data?.packet === 'window_click')
```

## Ограничения

- Буфер хранит последние **1000** записей. При активном геймплее старые события вытесняются — используйте `exportLogs()` своевременно.
- `__mcInv.state` всегда показывает состояние последней созданной сессии (обычно `inventory-provider`). Для состояния коннектора используйте `getStates()`.
