# dynamic-loader

Статус: отключен по умолчанию. Локальный `apply`/`rollback` больше не возвращают успех, потому что durable install/enable/disable behavior принадлежит OMP plugin manager.

## Назначение

`dynamic-loader` сейчас является read-only viewer для локального `catalog/`. Он показывает catalog entries и preview manifest, но не включает, не откатывает, не устанавливает и не удаляет plugins.

## Почему он есть в проекте

Проекту нужна plugin loader surface, но правильный data plane уже есть в OMP: package install/link/uninstall, runtime lockfile, project overrides, feature selection, plugin path discovery, marketplace registries, cache invalidation and extension/tool/hook/command loading. До порта этой functionality локальный каталог можно только читать.

## Пользовательская поверхность

- Пользователь вызывает `/extensions`, чтобы увидеть список локальных catalog entries в виджете `extensions`.
- Агент вызывает `dynamicLoader` с `action: "list"` или `action: "preview"`, чтобы прочитать catalog manifest.
- `dynamicLoader` с `action: "apply"` или `action: "rollback"` возвращает `isError=true` с `owner: "omp-plugin-manager"` и `ported: false`.

## Как работает по коду

Entrypoint `extensions/dynamic-loader/index.ts` регистрирует command `extensions` и tool `dynamicLoader`. Функция `listCatalog` читает `catalog/<kind>/<id>/manifest.json`, парсит JSON manifest и возвращает entries с id вида `<kind>/<id>`. Ошибки чтения каталога пока превращаются в пустой список.

`preview` возвращает manifest и details с `applyEnabled: false`. `apply` и `rollback` не пишут `.pi`, не меняют lockfile, не отправляют dev events и не делают вид, что extension был включен.

- Entrypoint: `./extensions/dynamic-loader/index.ts`
- Manifest: `extensions/dynamic-loader/manifest.json`
- Commands: `extensions`
- Tools: `dynamicLoader`
- Hooks: none
- Permissions: fs.read=`catalog`, fs.write=none, subprocess=none, network=none, browser=false, models=false, ui=`setWidget`
- State: none; extension только читает catalog manifests.
- Review: status=reviewed, source=wrapper-first, reviewedBy=miloc-pi, reviewedAt=2026-06-01, risk=high

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

Это не installer и не marketplace manager. Он не знает OMP plugin runtime config, не пишет `omp-plugins.lock.json`, не читает project overrides, не запускает `bun install`, не управляет enabled features and settings и не инвалидирует plugin roots cache.

## Решение

Решение: `OMP-port-backlog`, read-only locally. Следующий шаг — портировать или тонко упаковать OMP `PluginManager`, plugin loader and `MarketplaceManager` вместо локального fake apply.
