На этой странице

Разработка и реализация плагинов

Seer предоставляет модульную архитектуру плагинов, позволяющую разработчикам расширять возможности программы в различных сценариях. Выберите интересующий тип плагина ниже, чтобы ознакомиться со спецификациями разработки:

Плагины просмотра (Viewers)

Плагины просмотра расширяют окно предпросмотра, открываемое клавишей «Пробел». Они поддерживают две архитектуры реализации: Плагины конвертации (Convert) и DLL-плагины (SDK v3).

Создание плагина просмотра с помощью ИИ-агента

Замените заполнитель ниже, затем передайте полную инструкцию вашему агенту кодирования:

Прочитайте и следуйте руководству по разработке плагинов Seer на странице https://raw.githubusercontent.com/ccseer/Seer-Plugins/refs/heads/master/plugin_development_guide.md. Относитесь к нему как к единственному источнику правды для архитектуры, plugin.json, реализации, проверки и упаковки. Если руководство недоступно, остановитесь и сообщите об этом перед продолжением.

Перед выполнением любой работы проверьте Requirement (Требование) ниже. Если оно отсутствует, является неизмененным текстом заполнителя или слишком неясным для реализации, задайте один уточняющий вопрос и подождите. Не додумывайте отсутствующее требование.

После прояснения выберите Convert или DLL и кратко обоснуйте выбор, затем реализуйте полный, устанавливаемый плагин в текущем рабочем пространстве. Не изменяйте сам Seer и не останавливайтесь на плане или фрагментах кода.

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

Requirement: [ЗАМЕНИТЕ ЭТОТ ЗАПОЛНИТЕЛЬ требованием к плагину просмотра, например: отрисовка диаграмм mermaid в предпросмотре markdown]

Плагины конвертации (Convert)

Seer рассматривает плагины конвертации как внешние программы командной строки. Когда пользователь нажимает пробел на поддерживаемом файле, Seer запускает настроенную программу, передавая пути к файлам через плейсхолдеры. Программа конвертирует файл в формат, нативно поддерживаемый Seer (HTML, JSON, TXT, изображения и т. д.), который Seer загружает и отображает после завершения процесса.

Переменные плейсхолдеров

Плейсхолдер Описание Пример
${output_file} Базовый путь к выходному файлу; добавьте целевое расширение в аргументах. ${output_file}.html
${no_cache} Отключает кэширование конвертации и сохраняет вывод в каталог автоматического удаления, очищаемый при закрытии окон предпросмотра. ${no_cache}

Плагины конвертации также принимают универсальные плейсхолдеры (${input_file}, ${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) и не используют токены сопоставления ${type_*, поскольку заявляют поддерживаемые типы в formats, а не в extensions. Оба описаны в общем разделе Плейсхолдеры и токены сопоставления ниже.

Поддерживаемые исполняемые файлы и среды выполнения скриптов

  • Скрипты: Скрипты PowerShell (.ps1, поддерживаются «из коробки» через PowerShell). Для Python (.py), Node.js (.js) или пакетных файлов (.bat) скомпилируйте их в автономный .exe (например, с помощью PyInstaller) или включите интерпретатор в пакет.
  • Пользовательские бинарные файлы: Автономные исполняемые файлы CLI, скомпилированные из C/C++, Rust, Go или C#.

Пример plugin.json (Convert)

{
  "name": "ipynb",
  "version": "1.2.0",
  "type": "convert",
  "roles": [
    "viewer"
  ],
  "entry": "ipynb.ps1",
  "args": [
    "-i",
    "${input_file}",
    "-o",
    "${output_file}.html"
  ],
  "formats": [
    "ipynb"
  ],
  "appMinVersion": "4.1.3",
  "author": "ccseer"
}

DLL-плагины (SDK v3)

Для максимальной производительности отрисовки, глубокой интерактивности или потоковых представлений Seer поддерживает нативные динамические библиотеки C++/Qt, загружаемые напрямую в область просмотра через QPluginLoader.

  • Технические спецификации: C++17, Qt 6.8, MSVC 2022 (x64), CMake 3.22+.
  • Основные интерфейсы: Наследование от ViewerBase (реализация виджета) и реализация ViewerPluginInterface (IID "seer.plugin.interface.preview/3").
  • Минимальная версия приложения: Плагины SDK v3 должны указывать "appMinVersion": "4.2.9".

Ссылочные проекты

Проект Назначение
F3DViewer Рендеринг 3D-моделей и панорамный просмотр
OfficeViewer Документы Office и чертежи CAD
FontViewer Инспекция глифов и рендеринг шрифтов
JsonTreeViewer Высокопроизводительное интерактивное дерево JSON
Collections Все официальные плагины и плагины сообщества

Плагины панели управления

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

Создание плагина панели управления с помощью ИИ-агента

Замените заполнитель ниже, затем передайте полную инструкцию вашему агенту кодирования:

Прочитайте и следуйте руководству по разработке плагинов панели управления Seer на странице https://raw.githubusercontent.com/ccseer/Seer-Controls/refs/heads/main/plugin_development_guide.md. Относитесь к нему как к единственному источнику правды для архитектуры, plugin.json, реализации, проверки и упаковки. Если руководство недоступно, остановитесь и сообщите об этом перед продолжением.

Перед выполнением любой работы проверьте Requirement (Требование) ниже. Если оно отсутствует, является неизмененным текстом заполнителя или слишком неясным для реализации, задайте один уточняющий вопрос и подождите. Не додумывайте отсутствующее требование.

После прояснения реализуйте полный, устанавливаемый плагин панели управления, соответствующий контракту процесса Canonical v1, в текущем рабочем пространстве. Не изменяйте сам Seer и не останавливайтесь на плане или фрагментах кода.

Следуйте каждому применимому шагу проверки в руководстве и сообщите о фактических результатах.

Requirement: [ЗАМЕНИТЕ ЭТОТ ЗАПОЛНИТЕЛЬ требованием к плагину панели управления, например: открыть VS Code в текущей папке или скопировать абсолютный путь в буфер обмена]

Архитектура и контракт

  • Модель процесса: Реализует контракт процесса Canonical v1 (backend: "process", capabilities: ["control"]). Seer запускает вспомогательную программу через CLI.
  • Статус возврата и отчеты об ошибках:
    • Успех: Процесс завершается с кодом 0 (или соответствует success_exit_codes). Если задано "close_after_success": true, Seer автоматически закрывает окно предпросмотра после успешного выполнения.
    • Ошибка: Процесс завершается с ненулевым кодом. Все, что записано в стандартный поток ошибок (stderr), перехватывается Seer и отображается в виде всплывающего уведомления об ошибке (Toast) в приложении.
  • Интерфейс пользователя и взаимодействие: Плагины панели управления не создают собственных постоянных главных окон. Обычно вспомогательные программы выполняют фоновые задачи, копируют текст в буфер обмена или вызывают системные диалоги Windows (например, «Открыть с помощью», «Свойства», «Поделиться»).

Плейсхолдеры командной строки

Вспомогательная программа управления получает только целевой путь — ${input_file} плюс универсальные плейсхолдеры (${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}), перечисленные в общем разделе Плейсхолдеры и токены сопоставления ниже.

Переменные ${output_dir}, ${output_file} и ${no_cache} отклоняются в манифесте плагина управления. Плагину, которому требуется временное хранилище, необходимо определить его самостоятельно: сначала собственный каталог исполняемого файла, затем системный временный каталог.

Примеры plugin.json (Control)

Пример 1: Действие для папки (Terminal Here)

Конфигурация официального плагина Terminal Here:

{
  "schema_version": 1,
  "id": "io.1218.seer.terminal-here",
  "name": "Terminal Here",
  "description": "Opens a terminal window in the current folder.",
  "version": "1.0.0",
  "appMinVersion": "4.5.10",
  "backend": "process",
  "capabilities": [
    "control"
  ],
  "extensions": [
    "${type_folder}"
  ],
  "command": "terminal_here.exe",
  "arguments": [
    "--input",
    "${input_file}"
  ],
  "close_after_success": false,
  "timeout_ms": 150000,
  "success_exit_codes": [
    0
  ]
}

Пример 2: Действие для файла (Explorer Open With)

Конфигурация официального плагина Explorer Open With:

{
  "schema_version": 1,
  "id": "io.1218.seer.explorer-open-with",
  "name": "Open With",
  "description": "Opens the Windows Open With dialog for the current file.",
  "version": "1.1.0",
  "appMinVersion": "4.5.10",
  "backend": "process",
  "capabilities": [
    "control"
  ],
  "extensions": [
    "${type_file}"
  ],
  "command": "shellopenwith.exe",
  "arguments": [
    "--input",
    "${input_file}",
    "${use_backslash}"
  ],
  "timeout_ms": 30000,
  "success_exit_codes": [
    0
  ]
}

Чтобы окно предпросмотра автоматически закрывалось при успехе, укажите "close_after_success": true в манифесте.

Исходный код официальных плагинов управления доступен по адресу: ccseer/Seer-Controls.

Плагины свойств

Плагины свойств расширяют механизм анализа метаданных Seer. Когда пользователь нажимает Ctrl + I для просматриваемого файла или папки (или открывает окно «Свойства»), соответствующие плагины свойств извлекают и отображают структурированные метаданные и графические осциллограммы/диаграммы.

Создание плагина свойств с помощью ИИ-агента

Замените заполнитель ниже, затем передайте полную инструкцию вашему агенту кодирования:

Прочитайте и следуйте руководству по разработке плагинов свойств Seer на странице https://raw.githubusercontent.com/ccseer/Seer-Properties/refs/heads/main/plugin_development_guide.md. Относитесь к нему как к единственному источнику правды для архитектуры, plugin.json, реализации, проверки и упаковки. Если руководство недоступно, остановитесь и сообщите об этом перед продолжением.

Перед выполнением любой работы проверьте Requirement (Требование) ниже. Если оно отсутствует, является неизмененным текстом заполнителя или слишком неясным для реализации, задайте один уточняющий вопрос и подождите. Не додумывайте отсутствующее требование.

После прояснения реализуйте полный, устанавливаемый плагин свойств, соответствующий контракту процесса Canonical v1 и спецификации Schema 1 JSON, в текущем рабочем пространстве. Не изменяйте сам Seer и не останавливайтесь на плане или фрагментах кода.

Следуйте каждому применимому шагу проверки в руководстве и сообщите о фактических результатах.

Requirement: [ЗАМЕНИТЕ ЭТОТ ЗАПОЛНИТЕЛЬ требованием к плагину свойств, например: извлечение и отображение подробных параметров аудио-/видеокодеков и битрейта для файлов MP4]

Архитектура и контракт

  • Модель процесса: Реализует контракт процесса Canonical v1 (backend: "process", capabilities: ["property"], result_schema: 1).
  • Вызов CLI: Хост передает: --input "${input_file}" --output "${output_file}" --output-dir "${output_dir}"
  • Публикация результатов:
    • Хост раскрывает ${output_file} в базовый путь без расширения (например, <requestDir>/<md5>).
    • Плагин обязан записать результат в формате JSON в <output-base>.json (т. е. ${output_file}.json).
    • Графические вложения (диаграммы, гистограммы, векторскопы) должны сохраняться в ${output_dir}.
    • Ограничение: Использование ${no_cache} для плагинов свойств запрещено.
  • Политика кодов выхода:
    • Ожидаемые результаты предметной области (например, неподписанный файл, отсутствие репозитория git, пустые метаданные) должны завершаться с кодом 0 с описанием статуса в JSON.
    • Ненулевой код завершения допустим только при фатальных ошибках или некорректных вызовах (ненулевой выход приводит к очистке каталога запроса хостом).

Плейсхолдеры командной строки

Плейсхолдер Описание Пример
${output_file} Назначенный хостом базовый путь без расширения; результат должен быть записан в ${output_file}.json. C:\Users\...\request_dir\md5_hash
${output_dir} Назначенный хостом каталог запроса для вложений (диаграммы, изображения). C:\Users\...\request_dir

А также универсальные плейсхолдеры, перечисленные в общем разделе Плейсхолдеры и токены сопоставления ниже, где также описаны токены сопоставления ${type_*}. Плейсхолдер ${no_cache} отклоняется для плагинов свойств.

Спецификация формата Result JSON (Schema 1)

Файл результата ${output_file}.json должен быть корректным JSON в кодировке UTF-8, содержащим result_schema: 1 и объект data:

1. Простые строки (Flat Rows)

Только когда весь результат состоит из одной строки (например, SHA-256):

{
  "result_schema": 1,
  "data": {
    "SHA-256": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
  }
}

2. Подгруппа с упорядоченным массивом объектов с одним ключом (по умолчанию)

Все, что даёт более одной строки, должно публиковаться как ровно одна подгруппа, названная по плагину — отдельные строки верхнего уровня конфликтуют со строками всех остальных плагинов, которые инспектор показывает одним списком. Порядок массива — это порядок отображения, поэтому это единственная форма, в которой плагин сам определяет последовательность строк:

{
  "result_schema": 1,
  "data": {
    "Git": {
      "value": [
        { "Repository": "ccseer/Seer-Properties" },
        { "Branch": "main" },
        { "Status": "Clean" }
      ]
    }
  }
}

3. Подгруппа с объектом значения

value может быть и обычным объектом, но его строки отображаются в порядке ключей разобранного объекта, которым плагин управлять не может. Используйте только тогда, когда порядок строк не важен:

{
  "result_schema": 1,
  "data": {
    "Git": {
      "value": {
        "Branch": "main",
        "Status": "Working tree clean"
      }
    }
  }
}

4. Графические диаграммы и осциллограммы (Изображения)

Сохраняйте созданные PNG-диаграммы в ${output_dir} и объявляйте их как {"type": "image", "value": "relative_filename.png"}:

{
  "result_schema": 1,
  "data": {
    "Image Scopes": {
      "value": [
        { "RGB Histogram": { "type": "image", "value": "histogram.png" } },
        { "Luma Waveform": { "type": "image", "value": "waveform.png" } }
      ]
    }
  }
}

Пример plugin.json (Property)

{
  "schema_version": 1,
  "id": "io.1218.seer.git-info",
  "name": "Git Info",
  "description": "Reports repository information for the current folder using Git.",
  "version": "1.0.0",
  "appMinVersion": "4.5.10",
  "backend": "process",
  "capabilities": [
    "property"
  ],
  "extensions": [
    "${type_folder}"
  ],
  "invocations": {
    "property": {
      "command": "git_info.exe",
      "arguments": [
        "--input",
        "${input_file}",
        "--output",
        "${output_file}",
        "--output-dir",
        "${output_dir}"
      ],
      "result_schema": 1,
      "timeout_ms": 30000,
      "success_exit_codes": [
        0
      ]
    }
  }
}

Исходный код официальных плагинов свойств доступен по адресу: ccseer/Seer-Properties.


Плейсхолдеры и токены сопоставления

Seer подставляет эти токены в arguments. Допустимость использования плейсхолдеров конкретной возможностью проверяется хостом при загрузке манифеста — неподдерживаемый токен вызывает ошибку загрузки манифеста, а не предупреждение во время выполнения.

Доступно для всех возможностей

Плейсхолдер Описание Пример
${input_file} Абсолютный путь к просматриваемому файлу или папке. C:\Docs\sample.pdf
${use_backslash} Необязательный флаг для форматирования разделителей пути с обратными слэшами Windows (\). ${use_backslash}
${seer_dir} Каталог, содержащий Seer.exe. C:\Program Files\Seer
${seer_exe} Абсолютный путь к Seer.exe. C:\Program Files\Seer\Seer.exe
${seerviewer_exe} Абсолютный путь к SeerViewer.exe. C:\Program Files\Seer\SeerViewer.exe
${7z} Абсолютный путь к встроенному 7z.exe. C:\Program Files\Seer\plugins\7z.exe
${theme} Текущая тема Seer, раскрывается как dark или light. Это плейсхолдер данных, его нельзя использовать как весь command. dark
${lang} Текущий язык Seer, раскрывается в формате BCP-47 (например, en, zh-CN). Это плейсхолдер данных, его нельзя использовать как весь command. en
${screenshot} Абсолютный путь к временному PNG-скриншоту текущего предпросмотра. C:\Users\Username\AppData\Local\Temp\Seer\screenshot\view_1.png

Специфичные плейсхолдеры для возможностей

Плейсхолдер Просмотр (Preview) Управление (Control) Свойства (Property)
${output_file} Базовый путь вывода; добавьте целевое расширение, например ${output_file}.html Не поддерживается Базовый путь без расширения; результат должен быть записан в ${output_file}.json
${output_dir} Не поддерживается Не поддерживается Каталог запроса для вложений (диаграммы, изображения)
${no_cache} Отключает кэширование и сохраняет вывод в каталог автоматического удаления Не поддерживается Не поддерживается

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

Токены сопоставления extensions

Помимо стандартных расширений (например, ["png", "zip"]), extensions принимает токены, соответствующие широким категориям. Они применимы к плагинам, объявляющим extensions (плагины управления и свойств); плагины конвертации объявляют formats и не используют эти токены.

Токен Описание
${type_folder} Соответствует каталогам и папкам.
${type_file} Соответствует всем файлам (включая файлы без расширения).
${type_all} Соответствует всему (как файлам, так и папкам).
${type_image} Соответствует изображениям, поддерживаемым встроенным просмотрщиком изображений Seer.
${type_media} Соответствует аудио- и видеоформатам.
${type_web} Соответствует веб-файлам, таким как HTML и Markdown.
${type_text} Соответствует текстовым файлам, коду и файлам конфигурации.
${type_pdf} Соответствует документам PDF.
${type_none} Соответствует файлам вне перечисленных категорий (например, архивы, исполняемые программы).

Упаковка и локальное тестирование в приложении

После разработки плагин необходимо упаковать в стандартный ZIP-архив для установки. Это относится ко всем типам плагинов.

Стандарты упаковки

  1. Документация пакета: Каждый отдельный пакет плагина управления или свойств должен содержать файл PACKAGE_README.md (описание плюс таблица ## Options & Arguments), размещенный как README.md в корне архива.
  2. Плоская структура корня: Для пакетов управления и свойств (Canonical v1) файлы plugin.json, исполняемый файл/скрипт, README.md и зависимости среды выполнения должны находиться непосредственно в корне архива. Не помещайте их в дополнительную подпапку и никогда не смешивайте плоские и вложенные записи — хост отклонит архив с неоднозначным корнем пакета.

    Устаревшие плагины конвертации, устанавливаемые из онлайн-каталога, используют противоположную структуру: каталог верхнего уровня <имя-архива>/, содержащий файлы пакета. В этом случае следуйте руководству по плагинам конвертации; эти две структуры не взаимозаменяемы.

  3. Максимальное сжатие: Рекомендуется 7-Zip с максимальным сжатием Deflate: powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*

Локальное тестирование в приложении

  1. Откройте «Настройки» Seer и перейдите в нужный раздел:
    • Плагины просмотра: Настройки > Плагины -> вкладка Локальные
    • Плагины управления: Настройки > Управление
    • Плагины свойств: Настройки > Свойства
  2. Нажмите + под списком и выберите архив .zip (или plugin.json из локальной папки разработки).
  3. Seer автоматически проверит и загрузит пакет. Проверьте параметры и нажмите ОК для активации.