<div align="center">

# Better Plugins Manager

**Более мощный менеджер плагинов для Obsidian.**

Держите vault с большим количеством плагинов быстрым и управляемым: отложенный запуск, пакетные действия, группы и теги, установка из GitHub и управляемая диагностика конфликтов.

<p>
  <a href="../README.md">English</a>
  ·
  <a href="README_CN.md">简体中文</a>
  ·
  <a href="README_JA.md">日本語</a>
  ·
  <a href="README_KO.md">한국어</a>
  ·
  <a href="README_ES.md">Español</a>
  ·
  <a href="README_FR.md">Français</a>
  ·
  <a href="https://github.com/eondrcode/obsidian-manager/releases">Releases</a>
  ·
  <a href="https://ifdian.net/a/eondr">Support</a>
</p>

<p>
  <a href="https://github.com/eondrcode/obsidian-manager/releases">
    <img alt="Latest Release" src="https://img.shields.io/github/v/release/eondrcode/obsidian-manager?style=flat-square&label=release">
  </a>
  <img alt="GitHub Downloads" src="https://img.shields.io/github/downloads/eondrcode/obsidian-manager/total?style=flat-square&label=downloads">
  <img alt="Last Commit" src="https://img.shields.io/github/last-commit/eondrcode/obsidian-manager?style=flat-square&label=last%20commit">
  <img alt="Issues" src="https://img.shields.io/github/issues/eondrcode/obsidian-manager?style=flat-square&label=issues">
  <img alt="Stars" src="https://img.shields.io/github/stars/eondrcode/obsidian-manager?style=flat-square&label=stars">
  <img alt="License" src="https://img.shields.io/github/license/eondrcode/obsidian-manager?style=flat-square&label=license">
</p>

<p>
  <img alt="Obsidian Plugin" src="https://img.shields.io/badge/Obsidian-plugin-7C3AED?style=flat-square&logo=obsidian&logoColor=white">
  <img alt="Minimum Obsidian Version" src="https://img.shields.io/badge/Obsidian-%E2%89%A5%201.5.8-7C3AED?style=flat-square">
  <img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-ready-3178C6?style=flat-square&logo=typescript&logoColor=white">
  <img alt="Platform" src="https://img.shields.io/badge/platform-desktop%20%7C%20mobile-4B5563?style=flat-square">
  <img alt="i18n" src="https://img.shields.io/badge/i18n-7%20languages-0F766E?style=flat-square">
  <img alt="GitHub Source Tracking" src="https://img.shields.io/badge/GitHub-source%20tracking-181717?style=flat-square&logo=github&logoColor=white">
  <a href="https://ifdian.net/a/eondr">
    <img alt="Sponsor on Afdian" src="https://img.shields.io/badge/Afdian-sponsor-946ce6?style=flat-square">
  </a>
</p>

</div>

![Screenshot](img/index.png)

---

## 🎯 Что такое BPM?

**Better Plugins Manager (BPM)** — это центр управления community-плагинами Obsidian, созданный для vault, где используется много плагинов и обычных переключателей включить/выключить уже недостаточно.

BPM помогает сохранить быстрый запуск, организовать плагины по рабочим процессам, устанавливать их из GitHub Releases и изолировать конфликты, когда что-то ломается.

| 🚀 Запуск | 📦 Управление | 🏷️ Организация | 📥 Установка | 🔍 Диагностика |
|----------|---------------|----------------|--------------|----------------|
| Отложенный запуск и самопроверка | Массовое включение/выключение, быстрый поиск и фильтры состояния | Группы, теги, заметки, описания и пользовательские имена | Установка из репозиториев и релизов GitHub | Пошаговая диагностика конфликтов с отчетами |

---

## ✨ Основные функции

BPM организован вокруг пяти вкладок. Каждая вкладка отвечает за один рабочий процесс, поэтому связанные элементы управления находятся вместе, а интерфейс легко просматривать на десктопе и мобильных устройствах.

| Вкладка | Рабочий процесс |
|---------|-----------------|
| 🧩 Plugin View | Управление установленными плагинами, метаданными, фильтрами, запуском и действиями плагина |
| 📥 Install Hub | Установка плагинов или тем из GitHub и управление отслеживаемыми источниками |
| 📦 Transfer Pack | Экспорт, импорт и восстановление пакетов плагинов/тем между vault |
| 🎛️ Ribbon Order | Управление порядком и видимостью иконок Ribbon в Obsidian |
| 🔍 Conflict Diagnosis | Поиск проблем плагинов и создание диагностических отчетов |

### 🧩 Plugin View

Главная вкладка для повседневного управления плагинами.

![Plugin View](img/PluginView.png)

| Область | Что делает |
|---------|------------|
| **Список плагинов** | Показывает установленные community-плагины в компактном, доступном для поиска виде |
| **Массовые действия** | Включает или отключает плагины массово, включая групповые сценарии |
| **Фильтры** | Фильтрация по состоянию, группе, тегу, задержке запуска или ключевому слову |
| **Организация** | Пользовательские имена, описания, заметки, группы и теги |
| **Управление запуском** | Назначение профилей отложенного запуска и отображение поведения запуска в списке |
| **Действия плагина** | Проверка обновлений, загрузка обновлений, перезапуск, временный запуск, открыть настройки, открыть папки, копировать ID, открыть репозиторий, очистить конфиг, скрыть или удалить |
| **Теги BPM** | Плагины, установленные через BPM, автоматически получают `bpm-install`; `bpm-ignore` исключает плагин из управления |

### 📥 Install Hub

Install Hub отвечает за установку из GitHub и источники, которые BPM может отслеживать после установки.

![Install Hub](img/installHub.png)

| Область | Что делает |
|---------|------------|
| **Тип установки** | Переключение между установкой плагина и темы |
| **Ввод репозитория** | Принимает `user/repo` или полный URL GitHub |
| **Выбор release** | Получает GitHub Releases и устанавливает последнюю или выбранную версию |
| **Release notes** | Показывает информацию о релизе перед установкой, если она доступна |
| **Недавние установки** | Сохраняет недавно использованные репозитории для повторной установки |
| **Отслеживание источника** | Может отслеживать установленный репозиторий для проверки, обновления и переустановки |
| **Управление источниками** | Просмотр отслеживаемых источников плагинов/тем, целей обновления, переустановок и метаданных |

### 📦 Transfer Pack

Transfer Pack переносит конфигурации плагинов между vault без ручных списков и чеклистов.

![Transfer Pack](img/transferPack.png)

| Область | Что делает |
|---------|------------|
| **Список экспорта** | Выбор локальных плагинов и тем для JSON-пакета переноса |
| **Конфиги плагинов** | Экспорт выбранных файлов конфигурации плагинов при необходимости |
| **Таксономия** | Экспорт групп, тегов и профилей задержки BPM |
| **Данные layout** | Экспорт порядка менеджера, скрытых элементов и layout Ribbon |
| **Источники** | Экспорт карт GitHub-репозиториев, подписок источников и истории установки |
| **Настройки workspace** | Экспорт стиля, режима задержки, отображения тегов и настроек проверок при запуске |
| **Предпросмотр импорта** | Загрузка пакета и проверка плагинов, тем, источников, конфигов и layout перед применением |
| **Опции восстановления** | Установка отсутствующих плагинов/тем, слияние конфигов, восстановление включенного состояния, применение layout, слияние источников и импорт тем |

### 🎛️ Ribbon Order

Ribbon Order сохраняет предсказуемый порядок левого Ribbon в Obsidian, особенно когда плагины с отложенным запуском регистрируют иконки после старта.

![Ribbon Order](img/ribbonOrder.png)

| Область | Что делает |
|---------|------------|
| **Порядок иконок** | Перетаскивание элементов Ribbon в стабильный порядок |
| **Видимость** | Показ или скрытие отдельных иконок Ribbon |
| **Native sync mode** | Хранит layout Ribbon в данных BPM, не полагаясь на workspace-конфиг Obsidian |
| **Сброс** | Показывает все элементы Ribbon и сортирует их по имени |
| **Подсказка перезагрузки** | Сообщает, когда Obsidian нужно перезагрузить, чтобы показать скрытые при запуске иконки |

### 🔍 Conflict Diagnosis

Conflict Diagnosis пошагово ведет через проверку конфликтов плагинов и хранит проверяемое состояние и результат в одном месте.

![Conflict Diagnosis](img/conflictScan.png)

| Область | Что делает |
|---------|------------|
| **Предварительная проверка** | Проверяет, сохраняется ли проблема при отключении других плагинов |
| **Бинарное сужение** | Делит набор плагинов и уменьшает список подозреваемых |
| **Поиск пары конфликта** | Помогает найти конфликт двух плагинов, включая случаи между группами |
| **Ручная обратная связь** | Просит проверить каждый шаг и указать, сохраняется ли проблема |
| **Управление состоянием** | Отменить предыдущий шаг, перезапустить Obsidian, выйти, восстановить исходное состояние или оставить текущее |
| **Отчет** | Создает Markdown-отчет с найденными плагинами и рекомендуемыми действиями |

---

## 📦 Установка

### Community Plugins

Рекомендуется большинству пользователей.

1. Откройте **Obsidian Settings → Community Plugins**.
2. Найдите **Better Plugins Manager**.
3. Установите и включите плагин.

### Ручная установка

Используйте, если хотите установить GitHub release напрямую.

1. Скачайте [latest release](https://github.com/eondrcode/obsidian-manager/releases).
2. Скопируйте `main.js`, `manifest.json` и `styles.css` в `.obsidian/plugins/better-plugins-manager/`.
3. Перезапустите Obsidian.
4. Включите **Better Plugins Manager** в **Settings → Community Plugins**.

---

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

### Открыть BPM

После включения плагина откройте BPM одним из способов:

- Нажмите иконку BPM в левом Ribbon.
- Запустите **Open the plugin manager** из палитры команд.

### Первые шаги

1. Начните с **Plugin View**, чтобы проверить установленные плагины, фильтры, группы, теги и задержки.
2. Используйте **Install Hub** для установки плагинов или тем из GitHub.
3. Используйте **Transfer Pack** для переноса конфигурации между vault.
4. Используйте **Conflict Diagnosis**, когда нужно изолировать проблему плагинов.

### Подсказки по взаимодействию

- **Левый клик** по основным элементам управления переключает, редактирует, устанавливает, импортирует или запускает действие.
- **Правый клик** по плагину открывает контекстное меню.
- **Наведение** на кнопки панели показывает подсказки; на сенсорных устройствах используйте долгое нажатие, где оно поддерживается.

---

## Безопасность и раскрытие информации

BPM — локальный менеджер плагинов Obsidian, но некоторые функции намеренно используют внешние сервисы или браузерные API:

- **Внешние сетевые запросы**: BPM обращается к GitHub только для видимых пользователю функций управления плагинами: получения метаданных community-плагинов, определения репозиториев, проверки releases, установки или обновления плагинов/тем из GitHub. Эти запросы могут использовать `github.com`, `api.github.com` и `raw.githubusercontent.com`. BPM также открывает страницы репозиториев `github.com` и ссылку на tutorial проекта на `www.bilibili.com` только после нажатия соответствующих кнопок пользователем.
- **Доступ к буферу обмена**: BPM записывает в системный буфер обмена только когда пользователь нажимает **Copy ID** для плагина.
- **Доступ к файлам vault**: BPM читает метаданные плагинов/тем, выбранные файлы конфигурации плагинов, transfer packages и legacy export folders для управления, миграции, резервного копирования, импорта/экспорта и диагностики. BPM не загружает заметки vault на удаленный сервис.
- **Base64-кодирование/декодирование**: BPM использует `btoa`/`atob` во время выполнения только для упаковки и восстановления бинарных/текстовых файлов внутри локальных JSON-данных Transfer Pack. Это не используется для сокрытия API keys, URL, удаленного кода или исполняемых payloads.
- **Ограничения сканирования**: Если каталог плагинов или marketplace сообщает, что malware, obfuscation или network scanning недоступны, проверьте исходный код этого репозитория и release assets перед установкой. BPM намеренно не обфусцирует исходный код.

---
## 🔍 Руководство по Conflict Diagnosis

Используйте **Conflict Diagnosis**, когда проблема появляется после включения community-плагинов и нужно структурированно сузить причину.

### Процесс

1. Откройте вкладку **Conflict Diagnosis** или запустите **Troubleshoot plugin conflicts** из палитры команд.
2. Запустите сессию диагностики. BPM записывает текущее состояние плагинов перед изменениями.
3. Проверяйте vault после каждого шага и выбирайте **Problem Still Exists** или **Problem Gone**.
4. Продолжайте управляемые разделенные тесты, пока BPM не сузит результат до плагина или пары плагинов.
5. Проверьте результат, восстановите исходное состояние или оставьте текущее, затем при необходимости создайте Markdown-отчет.

### Примечания

- Диагностика зависит от вашего ответа на каждом шаге; каждый раз используйте одно и то же тестовое действие.
- Плавающие ошибки, проблемы порядка загрузки, ошибки, зависящие от конфигурации, или конфликты трех и более плагинов могут требовать ручной проверки.
- Можно отменить предыдущий шаг, перезапустить Obsidian во время теста, выйти, восстановить исходное состояние или оставить текущее.

---

## 🛡️ Startup Takeover

Когда включен **Delayed Startup**, BPM проверяет `.obsidian/community-plugins.json`, чтобы Obsidian и BPM не управляли одними и теми же плагинами при запуске.

| Случай | Поведение BPM |
|--------|---------------|
| Нет неуправляемых плагинов | Обычный запуск |
| Обнаружены неуправляемые плагины | Показывает запрос takeover |
| Auto Takeover включен | Автоматически переводит найденные плагины под управление BPM |
| Плагин отмечен `bpm-ignore` | Оставляет его в нативном списке запуска Obsidian |

Takeover сохраняет согласованность отложенного запуска, включенного состояния и записей BPM. После успешного takeover перезапустите Obsidian, чтобы список запуска применился чисто.

---

## 📦 Transfer и legacy export

В текущих версиях используйте **Transfer Pack** для переноса настроек между vault. Он экспортирует и импортирует списки плагинов, темы, выбранные конфиги плагинов, группы, теги, профили задержки, layout, порядок Ribbon, подписки источников, историю установки и настройки workspace.

Старый Markdown/frontmatter export для Obsidian Base сохранен только для совместимости с legacy-данными. Для новых настроек используйте **Transfer Pack**, а не папку Base export.

---

## ⚙️ Настройки

Настройки BPM разделены на отдельные страницы:

| Страница | Что можно настроить |
|----------|---------------------|
| **Basic** | Язык, сохранение фильтров, отложенный запуск, auto takeover, проверки обновлений при запуске, проверки источников, автообновление источников, видимость тегов BPM, порядок Ribbon, команды, debug mode и GitHub token |
| **Main Page Actions** | Какие действия плагина показывать прямо на карточках, а какие оставить в меню правого клика |
| **Style** | Layout списка, стиль элементов, стили групп/тегов и затемнение отключенных плагинов |
| **Groups** | Создание, переименование, изменение цвета и удаление групп |
| **Tags** | Создание, переименование, изменение цвета и удаление тегов |
| **Delay** | Создание и управление профилями отложенного запуска; отображается только при включенном delayed startup |

---

## ⌨️ Команды

| Команда | Доступность | Описание |
|---------|-------------|----------|
| **Open the plugin manager** | Всегда доступна | Открывает основной интерфейс BPM |
| **Troubleshoot plugin conflicts** | Всегда доступна | Запускает workflow диагностики конфликтов |
| **Enable/Disable [Plugin Name]** | Опциональная настройка | Регистрирует команду для прямого переключения каждого плагина |
| **One-click Enable/Disable [Group Name]** | Опциональная настройка | Регистрирует групповые команды для массового переключения |

---

## 📱 Совместимость

| Платформа | Поддержка |
|-----------|-----------|
| Windows / macOS / Linux | ✅ |
| Android | ✅ |
| iOS / iPadOS | ✅ |

Плагин автоматически переключается между desktop/mobile layout в зависимости от платформы.

---

## 🤝 Участие

Issues и PR приветствуются.

- **Bug reports**: приложите логи и шаги воспроизведения.
- **Feature requests**: лучше сначала открыть discussion или issue.

## 🙏 Благодарности

- Функция сортировки Ribbon вдохновлена [Obsidian-ribbon-sort](https://github.com/yunrr/Obsidian-app-ribbon-sorting).

---

## 📄 License

[MIT](../LICENSE)
