# dsh-plugin-manager
> **Каждый плагин наконец говорит сам за себя** — китайские названия, понятные описания, включение/выключение в один клик и редактирование заметок прямо в интерфейсе для DeepSeek Harness.
[](../../LICENSE)
[](https://github.com/deepseek-ai/deepseek-harness)
[](https://github.com/2768651338/dsh-plugin-manager/releases)
[](https://www.typescriptlang.org)
[](https://react.dev)

**Настройки → Плагины → Менеджер плагинов** · 165 плагинов в каталоге, один клик для переключения, заметки редактируются на месте.
[**English**](../README.md) · [**中文**](README_ZH.md) · [**Español**](README_ES.md) · [**日本語**](README_JA.md) · [**Deutsch**](README_DE.md) · [**Português**](README_PT.md) · [**한국어**](README_KO.md)
> ⚠️ Этот перевод может отставать от английской версии. Разделы само-проверки для каталога (Совместимость, Быстрый старт, Конфигурация, Права и данные, Устранение неполадок, Безопасность) ориентируются на [английскую версию](../README.md).
---
> 🆕 **2026-08-14 · v0.3.0** — Доступно редактирование заметок в интерфейсе: нажмите **Редактировать заметки** на любой карточке, чтобы переименовать плагин или переписать его описание, не трогая `catalog.json`.
>
> 🔧 **v0.2.x** — Исправлены 404 эндпоинтов при tsx-запуске из исходников (строгая регистрация `./typert`) и доступ к инъекции cordis (канал `ctx.get`).
---
## Зачем это нужно
| Боль | Раньше | С этим плагином |
|------|--------|-----------------|
| Список плагинов ни о чём не говорит | Только английские имена модулей, непонятно, что делает каждая строка | Китайское название + описание в одну строку + категория для каждого плагина |
| Переключение вручную | Ручная правка `cordis.patch.yml` (легко сломать) | Переключатель в один клик, хирургические построчные правки, горячая перезагрузка за ~1 с |
| Неизвестные плагины остаются загадкой | Только запасной текст | Добавляйте собственные заметки прямо в интерфейсе |
| Ничто не защищено от случайного клика | Можно отключить любую строку | Системные строки заблокированы, строки с `!!js` помечены |
## Установка
```bash
# Вариант 1: установка из GitHub (рекомендуется, тот же механизм bundle, что у dsh-navbar)
dsh plugin --profile web add github:2768651338/dsh-plugin-manager#main
# Вариант 2: установка из zip (скачайте со страницы Releases)
# распакуйте в путь без пробелов, затем:
dsh plugin --profile web add file:/<каталог-распаковки>/dsh-plugin-manager
# Вариант 3: локальная сборка (клонируйте репозиторий)
pnpm build # tsc + tsdown → lib/index.js (хостовая половина) и lib/client.js (браузерная половина)
dsh plugin --profile web add file:./dsh-plugin-manager
```
> Затем **перезапустите DeepSeek Harness** и один раз нажмите **Ctrl+F5**. Откройте *Настройки → Плагины → Менеджер плагинов*.
> Артефакты `lib/` закоммичены — установка из GitHub не требует локальной сборки.
## Возможности
| Возможность | Описание |
|-------------|----------|
| 📚 Китайский каталог | 130+ встроенных записей (название / описание / категория) с запасным вариантом и настройкой для каждого плагина |
| 🔘 Переключатель в один клик | Пишет в `~/.dsh/cordis.patch.yml` (глобальный слой); HMR-наблюдатель DSH применяет изменения за ~1 секунду; включение пишет явное `disabled: false`, перекрывающее нижние слои |
| ✏️ Заметки в интерфейсе | «Редактировать заметки» на карточке меняет китайское название/описание (`~/.dsh/plugin-manager/catalog.json`) с восстановлением по умолчанию в один клик |
| 🛡️ Защита | Строки загрузки/транспорта/оболочки настроек заблокированы как «Системные»; строки с `!!js`-выражениями помечены «Управляется выражением» |
| 🔍 Поиск и фильтр | Поиск по названию/описанию/модулю, фильтр по категории, сводка включённых |
## Как это работает
| Половина | Файл | Роль |
|----------|------|------|
| Хост | `lib/index.js` | Регистрирует cordis-сервис `pluginManager` (Typert-удалённый): `list` / `setEnabled` / `setOverride` / `removeOverride`. Переключатели используют хирургическое редактирование патч-файла — комментарии и `!!js`-выражения сохраняются; перед записью файл перечитывается для слияния параллельных правок. |
| Хост | `lib/typert.host.js` | Экспортирует `./typert`; typert-loader регистрирует его как **строгие определения вызовов**. Ключевое исправление: при tsx-запуске из исходников шлюз и внешний плагин могут держать две копии typert-protocol — маркеры декораторов невидимы между копиями (симптом: каждый вызов возвращает 404). Строгая регистрация идёт через общий реестр и обходит проблему идентичности экземпляра модуля. |
| Браузер | `lib/client.js` | Монтирует удалённое пространство имён `pluginManager` через канал `ctx.get()` без инъекции (избегает взаимоблокировки самомонтирования) и регистрирует вкладку в слоте `settings.plugins.tab`. |
> Зависимости времени выполнения: `@deepseek-ai/cordis` и `@deepseek-ai/dsh-typert-protocol` разрешаются через запасные ссылки `profiles/node_modules` DSH — дополнительных загрузок pnpm не требуется.
## Свои заметки
Нажмите **Редактировать заметки** на любой карточке. Сохранение с двумя пустыми полями удаляет настройку плагина. Опытные пользователи могут по-прежнему редактировать `~/.dsh/plugin-manager/catalog.json` напрямую:
```json
{
"@dsh-external/dsh-navbar": { "name": "对话导航条", "desc": "对话区右缘的消息节点导航" }
}
```
Приоритет: файл переопределений > встроенный каталог > английское короткое имя.
## Структура проекта
```text
src/
index.ts хостовая половина: PluginManagerGateway (list / setEnabled / setOverride / removeOverride)
patch-file.ts хирургический редактор патч-файла (чистые функции)
catalog.ts встроенный каталог + набор системной защиты
types.ts общие типы данных
typert-host.ts артефакт строгой регистрации эндпоинтов (./typert)
client/
index.ts браузерная половина: монтирует удалённое пространство имён + регистрирует вкладку
remote.ts клиентский удалённый артефакт (строгие zod-кодеки)
PluginManagerTab.tsx интерфейс вкладки (список / переключатели / заметки)
locales.ts словари zh/en
cordis.patch.yml патч bundle (вставляет строку plugin-manager)
lib/ собранные артефакты (закоммичены; установка из GitHub пропускает сборку)
tests/ смоук- / сквозные тесты
```
## Тесты
```bash
node tests/patch-file.smoke.mjs # 9 смоук-тестов редактора патчей
node tests/host-gateway.e2e.mjs # сквозные тесты хостового шлюза (включая содержимое файла переопределений)
node tests/claims.e2e.mjs # регистрация эндпоинтов под обычным node и tsx-запуском
```
> Абсолютные пути в тестовых скриптах указывают на локальную установку DSH и нужны только для разработки; на поведение в рантайме они не влияют.
## Примечания
- Отключение браузерных плагинов (ui-* / client-*) полностью применяется только после обновления страницы;
- При ручной правке патч-файла сохраняйте структуру блоков строк (дефис `- ` в колонке 0);
- Удаление: `dsh plugin --profile web remove @2768651338/dsh-plugin-manager`.
---
## История звёзд
Лицензия MIT © [2768651338](https://github.com/2768651338)
Создано на основе публичного механизма плагинов DeepSeek Harness — не аффилировано с DeepSeek.