На цій сторінці

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

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

Плагіни перегляду (Viewers)

Плагіни перегляду розширюють можливості вікна попереднього перегляду за клавішею пробілу. Вони підтримують дві архітектури реалізації: плагіни перетворення (Convert) та плагіни DLL (SDK v3).

Створення плагіна перегляду за допомогою AI-агента

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

Прочитайте та дотримуйтесь інструкцій посібника з розробки плагінів 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 Усі офіційні та створені спільнотою плагіни перегляду

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

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

Створення плагіна панелі керування за допомогою AI-агента

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

Прочитайте та дотримуйтесь інструкцій посібника з розробки плагінів панелі керування 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 на файлі або папці, що переглядається (або відкриває вікно «Властивості»), відповідні плагіни властивостей витягують і відображають структуровані метадані та графічні діаграми/гістограми.

Створення плагіна властивостей за допомогою AI-агента

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

Прочитайте та дотримуйтесь інструкцій посібника з розробки плагінів властивостей 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} відхиляється для плагінів властивостей.

Специфікація вихідного JSON (Schema 1)

Файл результатів ${output_file}.json повинен бути коректним UTF-8 JSON, що містить 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, що постачається разом із Seer. 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

Плейсхолдери для окремих можливостей

Плейсхолдер Перегляд Панель керування Властивості
${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 та залежності часу виконання повинні знаходитися безпосередньо в корені архіву. Не загортайте їх у додаткову папку і ніколи не змішуйте пласкі та вкладені записи — хост відхиляє архів із неоднозначним коренем пакета.

    Застарілі плагіни перетворення, встановлені з онлайн-каталогу, використовують протилежну структуру: папка верхнього рівня <archive-name>/, що містить файли пакета. У цьому випадку дотримуйтесь посібника для плагінів перетворення; ці дві структури не є взаємозамінними.

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

Локальне тестування в додатку

  1. Відкрийте «Налаштування» Seer та перейдіть до відповідного розділу:
    • Плагіни перегляду: Налаштування > Плагіни -> вкладка Локальні
    • Плагіни панелі керування: Налаштування > Панель керування
    • Плагіни властивостей: Налаштування > Властивості
  2. Натисніть + під списком і виберіть архів .zip (або plugin.json із вашої локальної папки).
  3. Seer автоматично перевірить пакет і завантажить його. Перевірте параметри та натисніть OK, щоб активувати його.