# ADR 0002: Доставка компонентов и значений по умолчанию

Status: accepted

## Контекст

Требуется один пакет Pi с восемью компонентами, фиксированными версиями семи компонентов и независимо обновляемым GigaChat. Пользовательские настройки важнее значений набора (ADR 0001).

Pi 0.85.1 загружает ресурсы из `pi.extensions`, но не применяет конфиги из зависимостей. Его установщик сохраняет кешированный список `settings.packages` после npm lifecycle. Штатное обновление пропускает пакет с неизменной версией и не обновляет его транзитивные зависимости.

## Решение

Семь фиксированных компонентов поставляются через `bundleDependencies` и явно перечисленные ресурсы. Сборка адаптирует два компонента: permission-system получает нижний слой значений набора и диалог с отменой по умолчанию; subagents получает значение `maxConcurrent = 1`. Пользовательские слои остаются выше; файлы конфигурации не переписываются. Изменения исходников воспроизводимы и проверяют версию и уникальность места изменения.

Дополнение от 2026-10-02: схема доставки распространяется ещё на четыре фиксированных компонента — recap, elapsed, toggle-skills и mention-skill (всего одиннадцать). Recap получает Qwen через свой штатный конфиг при отсутствии явного выбора модели. Сборка также меняет только встроенное значение default-модели, чтобы штатный `Use default` возвращал Qwen без перезапуска; таймаут сохраняется. При подключении GigaChat самим набором используется экспорт `gigachatProvider`, чтобы standalone-обработчик провайдера не менял выбранную основную модель.

Пересмотр от 2026-10-12: назначения моделей со стороны набора отменены. Datalab Kit не создаёт конфиг recap и не подменяет его встроенную default-модель; сохранённые конфиги не очищаются. При подключении GigaChat вызывается штатная default-точка входа расширения вместо регистрации только `gigachatProvider`. Это сохраняет мастер `/gigachat`, авторизацию, встроенные модели и собственную инициализацию default-модели пакета. Решение принято вместо фильтрации моделей и подавления upstream-обработчиков: набор должен сохранять базовое поведение `pi-gigachat`, а не задавать ему вторую политику. Recap остаётся независимым от основной модели сессии; наследование не входит в изменение.

Пересмотр от 2026-10-14: пользователь согласовал наследование текущей модели основной сессии для recap при отсутствии отдельного выбора. Явный конфиг recap имеет приоритет, а `Use default` немедленно возвращает наследование. При отсутствии текущей модели или её авторизации другая модель автоматически не выбирается. Сборка адаптирует recap 0.4.7: разрешение default-модели через контекст сессии, подпись picker и таймаут 60 секунд. Конфиги пользователя не изменяются. Уровень thinking основной сессии не наследуется и не переключается; отсутствие request-level reasoning оставляет GigaChat в `off`, если параметры провайдера не переопределяют тело запроса. Штатное поведение самого `pi-gigachat` остаётся без изменений.

Дополнительное согласование от 2026-10-14: задержка автоматического recap после бездействия сокращена с 5 до 2 минут. Таймаут отдельного запроса остаётся 60 секунд.

Пересмотр от 2026-10-20: начиная с Datalab Kit 0.1.7 поддерживается строго Pi 0.85.1; три peer-зависимости Pi закреплены на этой версии без диапазонов, как в `pi-gigachat` 0.6.4. Это декларация совместимости, а не runtime-проверка: управляемый установщик Pi отключает разрешение peer-зависимостей. GigaChat закреплён на `0.6.4` в манифесте, lockfile, postinstall и отдельном источнике `npm:@dev-sergeev/pi-gigachat@0.6.4`. Версия для установщика берётся из манифеста набора; запрос `latest` удалён. Прежний незакреплённый источник мигрирует на закреплённый с сохранением фильтров ресурсов; явно выбранные пользователем версии остаются приоритетными. При первой активации расширение восстанавливает запись, которую установщик Pi мог затереть; загрузка не выполняет сетевых запросов. До появления отдельной записи провайдер подключается через расширение набора, после её появления его загружает Pi самостоятельно. Этот пересмотр заменяет прежнее требование независимо обновлять GigaChat до `latest`.

## Последствия и пределы

- Штатное `pi update --extensions` сохраняет GigaChat 0.6.4, даже если реестр публикует более новую версию.
- Pi 0.85.1 по-прежнему может затереть добавленный в postinstall источник; он восстанавливается при первом запуске. Это больше не нарушает требование независимо обновлять GigaChat: такое требование отменено.
- Пакет не патчит установленный Pi и не запускает фоновый процесс изменения настроек.
- Исходные конфиги и явно закреплённые источники пользователя сохраняются.
- Отдельный GigaChat остаётся после удаления набора. Очистка, `-l` и существующие независимые установки других компонентов не определены спецификацией.
