На этой странице
Разработка и реализация плагинов
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. - Ненулевой код завершения допустим только при фатальных ошибках или некорректных вызовах (ненулевой выход приводит к очистке каталога запроса хостом).
- Ожидаемые результаты предметной области (например, неподписанный файл, отсутствие репозитория git, пустые метаданные) должны завершаться с кодом
Плейсхолдеры командной строки
| Плейсхолдер | Описание | Пример |
|---|---|---|
${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-архив для установки. Это относится ко всем типам плагинов.
Стандарты упаковки
- Документация пакета: Каждый отдельный пакет плагина управления или свойств должен содержать файл
PACKAGE_README.md(описание плюс таблица## Options & Arguments), размещенный какREADME.mdв корне архива. - Плоская структура корня: Для пакетов управления и свойств (Canonical v1) файлы
plugin.json, исполняемый файл/скрипт,README.mdи зависимости среды выполнения должны находиться непосредственно в корне архива. Не помещайте их в дополнительную подпапку и никогда не смешивайте плоские и вложенные записи — хост отклонит архив с неоднозначным корнем пакета.Устаревшие плагины конвертации, устанавливаемые из онлайн-каталога, используют противоположную структуру: каталог верхнего уровня
<имя-архива>/, содержащий файлы пакета. В этом случае следуйте руководству по плагинам конвертации; эти две структуры не взаимозаменяемы. - Максимальное сжатие: Рекомендуется 7-Zip с максимальным сжатием Deflate:
powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*
Локальное тестирование в приложении
- Откройте «Настройки» Seer и перейдите в нужный раздел:
- Плагины просмотра:
Настройки > Плагины-> вкладка Локальные - Плагины управления:
Настройки > Управление - Плагины свойств:
Настройки > Свойства
- Плагины просмотра:
- Нажмите + под списком и выберите архив
.zip(илиplugin.jsonиз локальной папки разработки). - Seer автоматически проверит и загрузит пакет. Проверьте параметры и нажмите ОК для активации.