Di halaman ini

Pengembangan & Implementasi Plugin

Seer menyediakan arsitektur plugin modular yang memungkinkan pengembang memperluas kemampuannya di berbagai bidang. Pilih kemampuan plugin di bawah ini untuk mempelajari spesifikasi pengembangannya:

Plugin Penampil (Viewers)

Plugin penampil memperluas jendela pratinjau spasi. Plugin ini mendukung dua arsitektur implementasi: Plugin Konversi (Convert Plugins) dan Plugin DLL (SDK v3).

Membangun Plugin Penampil dengan Agen AI

Ganti teks placeholder di bawah ini, lalu berikan instruksi lengkap ke agen pengkodean Anda:

Baca dan ikuti panduan pengembangan plugin Seer di https://raw.githubusercontent.com/ccseer/Seer-Plugins/refs/heads/master/plugin_development_guide.md. Perlakukan itu sebagai sumber kebenaran tunggal untuk arsitektur, plugin.json, implementasi, validasi, dan pengemasan. Jika panduan tidak tersedia, hentikan dan laporkan sebelum melanjutkan.

Sebelum melakukan pekerjaan apa pun, periksa Requirement (Persyaratan) di bawah ini. Jika hilang, teks placeholder belum diubah, atau terlalu kabur untuk diimplementasikan, ajukan satu pertanyaan klarifikasi dan tunggu. Jangan mengira-ngira persyaratan yang hilang.

Setelah jelas, pilih Convert atau DLL dan jelaskan alasannya secara singkat, lalu implementasikan plugin yang lengkap dan dapat diinstal di ruang kerja saat ini. Jangan mengubah Seer itu sendiri atau berhenti pada rencana atau cuplikan kode.

Ikuti setiap langkah validasi yang berlaku dalam panduan dan laporkan hasil sebenarnya. Jalankan pengujian pratinjau dalam aplikasi Seer jika memungkinkan; jika tidak, nyatakan secara eksplisit bahwa verifikasi runtime tidak dilakukan.

Requirement: [GANTI PLACEHOLDER INI dengan persyaratan plugin penampil Anda, mis. merender diagram mermaid di pratinjau markdown]

Plugin Konversi (Convert)

Seer memperlakukan plugin konversi sebagai eksekutor baris perintah eksternal. Saat pengguna menekan Spasi pada file yang didukung, Seer meluncurkan program yang dikonfigurasi, meneruskan jalur file melalui placeholder. Program mengonversi file ke dalam format yang didukung secara native oleh Seer (HTML, JSON, TXT, gambar, dll.), yang dimuat dan dirender oleh Seer setelah proses selesai.

Variabel Placeholder

Placeholder Deskripsi Contoh
${output_file} Jalur file output dasar; tambahkan ekstensi target dalam argumen. ${output_file}.html
${no_cache} Menonaktifkan caching konversi dan menyimpan output di direktori hapus otomatis, yang dibersihkan saat jendela pratinjau ditutup. ${no_cache}

Plugin konversi juga menerima placeholder universal (${input_file}, ${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) dan tidak menggunakan token pencocokan ${type_*}, karena mendeklarasikan pencocokannya dalam formats daripada extensions. Keduanya dibahas di bagian bersama Placeholder & Token Pencocokan di bawah ini.

Eksekutabel & Runtime Skrip yang Didukung

  • Skrip: Skrip PowerShell (.ps1, didukung langsung melalui PowerShell). Untuk Python (.py), Node.js (.js), atau batch (.bat), kompilasi menjadi .exe mandiri (mis. dengan PyInstaller) atau sertakan interpreter di dalam paket.
  • Biner Kustom: Eksekutabel CLI mandiri yang dikompilasi dari C/C++, Rust, Go, atau C#.

Contoh 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"
}

Plugin DLL (SDK v3)

Untuk performa rendering maksimal, interaktivitas mendalam, atau tampilan streaming, Seer mendukung pustaka tautan dinamis C++/Qt native yang dimuat langsung ke viewport melalui QPluginLoader.

  • Spesifikasi Teknis: C++17, Qt 6.8, MSVC 2022 (x64), CMake 3.22+.
  • Antarmuka Penting: Mewarisi ViewerBase (implementasi widget) dan mengimplementasikan ViewerPluginInterface (IID "seer.plugin.interface.preview/3").
  • Versi Aplikasi Minimum: Plugin SDK v3 harus mendeklarasikan "appMinVersion": "4.2.9".

Proyek Referensi

Proyek Tujuan
F3DViewer Rendering model 3D dan tampilan panorama
OfficeViewer Dokumen Office dan gambar CAD
FontViewer Pemeriksaan dan rendering glif font
JsonTreeViewer Struktur pohon JSON interaktif berkinerja tinggi
Collections Semua plugin penampil resmi dan komunitas

Plugin Kontrol

Plugin kontrol menambahkan tombol tindakan kustom ke sisi kiri Bilah Kontrol bawah di jendela pratinjau, memungkinkan operasi cepat dan integrasi alat eksternal untuk file atau folder yang aktif.

Membangun Plugin Kontrol dengan Agen AI

Ganti teks placeholder di bawah ini, lalu berikan instruksi lengkap ke agen pengkodean Anda:

Baca dan ikuti panduan pengembangan plugin kontrol Seer di https://raw.githubusercontent.com/ccseer/Seer-Controls/refs/heads/main/plugin_development_guide.md. Perlakukan itu sebagai sumber kebenaran tunggal untuk arsitektur, plugin.json, implementasi, validasi, dan pengemasan. Jika panduan tidak tersedia, hentikan dan laporkan sebelum melanjutkan.

Sebelum melakukan pekerjaan apa pun, periksa Requirement (Persyaratan) di bawah ini. Jika hilang, teks placeholder belum diubah, atau terlalu kabur untuk diimplementasikan, ajukan satu pertanyaan klarifikasi dan tunggu. Jangan mengira-ngira persyaratan yang hilang.

Setelah jelas, implementasikan plugin kontrol lengkap yang dapat diinstal yang mematuhi kontrak proses Canonical v1 di ruang kerja saat ini. Jangan mengubah Seer itu sendiri atau berhenti pada rencana atau cuplikan kode.

Ikuti setiap langkah validasi yang berlaku dalam panduan dan laporkan hasil sebenarnya.

Requirement: [GANTI PLACEHOLDER INI dengan persyaratan plugin kontrol Anda, mis. buka VS Code di direktori saat ini atau salin jalur absolut ke clipboard]

Arsitektur & Kontrak

  • Model Proses: Mengimplementasikan kontrak proses Canonical v1 (backend: "process", capabilities: ["control"]). Seer mengeksekusi helper melalui CLI.
  • Status Pengembalian & Pelaporan Kesalahan:
    • Berhasil: Proses keluar dengan kode 0 (atau cocok dengan success_exit_codes). Jika "close_after_success": true dikonfigurasi, Seer secara otomatis menutup jendela pratinjau setelah eksekusi berhasil.
    • Gagal: Proses keluar dengan kode non-nol. Apa pun yang ditulis ke standar error (stderr) akan ditangkap oleh Seer dan ditampilkan sebagai pemberitahuan kesalahan Toast dalam aplikasi.
  • UI & Interaksi: Plugin kontrol tidak menggambar jendela utama permanen mereka sendiri. Helper pada umumnya menjalankan tugas latar belakang, menyalin teks ke clipboard, atau memanggil dialog sistem Windows native (mis. Buka dengan, Properti, Bagikan).

Placeholder Baris Perintah

Helper kontrol hanya menerima jalur target — ${input_file} ditambah placeholder universal (${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) yang tercantum dalam bagian bersama Placeholder & Token Pencocokan di bawah ini.

${output_dir}, ${output_file}, dan ${no_cache} ditolak dalam manifes kontrol. Kontrol yang memerlukan lokasi sementara harus menyediakannya sendiri: direktori eksekutabelnya sendiri terlebih dahulu, lalu direktori temp sistem.

Contoh plugin.json (Control)

Contoh 1: Tindakan Folder (Terminal Here)

Konfigurasi plugin Terminal Here resmi:

{
  "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
  ]
}

Contoh 2: Tindakan File (Explorer Open With)

Konfigurasi plugin Explorer Open With resmi:

{
  "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
  ]
}

Untuk menutup jendela pratinjau secara otomatis setelah berhasil, atur "close_after_success": true dalam manifes.

Untuk kode sumber plugin kontrol resmi, lihat: ccseer/Seer-Controls.

Plugin Properti

Plugin properti memperluas mesin inspeksi metadata Seer. Saat pengguna menekan Ctrl + I pada file atau folder yang dipratinjau (atau membuka jendela Properti), plugin properti yang cocok mengekstrak dan menampilkan metadata terstruktur serta cakupan/bagan grafis.

Membangun Plugin Properti dengan Agen AI

Ganti teks placeholder di bawah ini, lalu berikan instruksi lengkap ke agen pengkodean Anda:

Baca dan ikuti panduan pengembangan plugin properti Seer di https://raw.githubusercontent.com/ccseer/Seer-Properties/refs/heads/main/plugin_development_guide.md. Perlakukan itu sebagai sumber kebenaran tunggal untuk arsitektur, plugin.json, implementasi, validasi, dan pengemasan. Jika panduan tidak tersedia, hentikan dan laporkan sebelum melanjutkan.

Sebelum melakukan pekerjaan apa pun, periksa Requirement (Persyaratan) di bawah ini. Jika hilang, teks placeholder belum diubah, atau terlalu kabur untuk diimplementasikan, ajukan satu pertanyaan klarifikasi dan tunggu. Jangan mengira-ngira persyaratan yang hilang.

Setelah jelas, implementasikan plugin properti lengkap yang dapat diinstal yang mematuhi kontrak proses Canonical v1 dan spesifikasi Schema 1 JSON di ruang kerja saat ini. Jangan mengubah Seer itu sendiri atau berhenti pada rencana atau cuplikan kode.

Ikuti setiap langkah validasi yang berlaku dalam panduan dan laporkan hasil sebenarnya.

Requirement: [GANTI PLACEHOLDER INI dengan persyaratan plugin properti Anda, mis. ekstrak dan tampilkan parameter codec audio/video terperinci dan bitrate untuk file MP4]

Arsitektur & Kontrak

  • Model Proses: Mengimplementasikan kontrak proses Canonical v1 (backend: "process", capabilities: ["property"], result_schema: 1).
  • Pemanggilan CLI: Host meneruskan: --input "${input_file}" --output "${output_file}" --output-dir "${output_dir}"
  • Publikasi Output:
    • Host memperluas ${output_file} menjadi jalur dasar tanpa ekstensi (mis. <requestDir>/<md5>).
    • Plugin harus menulis hasil JSON-nya ke <output-base>.json (yaitu ${output_file}.json).
    • Lampiran visual (bagan, histogram, vectorscope) harus disimpan ke dalam ${output_dir}.
    • Batasan: ${no_cache} dilarang untuk plugin properti.
  • Kebijakan Kode Keluar:
    • Hasil domain yang diharapkan (mis. file yang tidak ditandatangani, bukan repositori git, metadata kosong) harus keluar dengan kode 0 dan menjelaskan statusnya dalam JSON.
    • Keluar dengan kode non-nol hanya pada kesalahan fatal atau pemanggilan yang tidak valid (keluar non-nol menyebabkan host menghapus direktori permintaan).

Placeholder Baris Perintah

Placeholder Deskripsi Contoh
${output_file} Jalur dasar yang ditetapkan host tanpa ekstensi; hasilnya harus ditulis ke ${output_file}.json. C:\Users\...\request_dir\md5_hash
${output_dir} Direktori permintaan yang ditetapkan host untuk lampiran (bagan, gambar). C:\Users\...\request_dir

Ditambah placeholder universal dan token pencocokan ${type_*} yang tercantum dalam bagian bersama Placeholder & Token Pencocokan di bawah ini. ${no_cache} ditolak untuk plugin properti.

Spesifikasi Result JSON (Schema 1)

File hasil ${output_file}.json harus berupa JSON UTF-8 yang valid yang berisi result_schema: 1 dan objek data:

1. Baris Datar (Flat Rows)

Hanya ketika seluruh hasil berupa satu baris (mis. SHA-256):

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

2. Subgrup dengan Larik Berurutan dari Objek Kunci Tunggal (Bawaan)

Apa pun yang menghasilkan lebih dari satu baris harus dipublikasikan sebagai tepat satu subgrup yang dinamai sesuai plugin — baris longgar di tingkat atas akan bertabrakan dengan baris semua plugin lain, yang ditampilkan Pemeriksa dalam satu daftar. Urutan larik adalah urutan tampilan, jadi ini adalah satu-satunya bentuk yang memungkinkan plugin menentukan urutan kemunculan baris:

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

3. Subgrup dengan Objek Nilai

value juga bisa berupa objek biasa, tetapi barisnya dirender sesuai urutan kunci objek yang diurai, yang tidak dapat dikendalikan plugin. Gunakan hanya jika urutan baris tidak penting:

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

4. Bagan Grafis & Cakupan (Lampiran Gambar)

Simpan bagan PNG yang dihasilkan ke dalam ${output_dir}, dan deklarasikan dengan {"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" } }
      ]
    }
  }
}

Contoh 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
      ]
    }
  }
}

Untuk kode sumber plugin properti resmi, lihat: ccseer/Seer-Properties.


Placeholder & Token Pencocokan

Seer memperluas token ini dalam arguments. Placeholder mana yang boleh digunakan oleh suatu kemampuan divalidasi oleh host saat manifes dimuat — token yang tidak didukung adalah kesalahan pemuatan manifes, bukan peringatan runtime.

Tersedia untuk Setiap Kemampuan

Placeholder Deskripsi Contoh
${input_file} Jalur absolut dari file atau folder yang dipratinjau. C:\Docs\sample.pdf
${use_backslash} Flag opsional untuk memformat pemisah jalur menggunakan garis miring terbalik Windows native (\). ${use_backslash}
${seer_dir} Direktori yang berisi Seer.exe. C:\Program Files\Seer
${seer_exe} Jalur absolut ke Seer.exe. C:\Program Files\Seer\Seer.exe
${seerviewer_exe} Jalur absolut ke SeerViewer.exe. C:\Program Files\Seer\SeerViewer.exe
${7z} Jalur absolut ke 7z.exe yang disertakan dengan Seer. C:\Program Files\Seer\plugins\7z.exe
${theme} Tema Seer saat ini, diperluas menjadi dark atau light. Ini adalah placeholder data dan tidak dapat digunakan sebagai command utuh. dark
${lang} Bahasa Seer saat ini, diperluas dalam format BCP-47 (mis. en, zh-CN). Ini adalah placeholder data dan tidak dapat digunakan sebagai command utuh. en
${screenshot} Jalur absolut ke tangkapan layar PNG sementara dari tampilan saat ini. C:\Users\Username\AppData\Local\Temp\Seer\screenshot\view_1.png

Placeholder Khusus Kemampuan

Placeholder Pratinjau (Preview) Kontrol (Control) Properti (Property)
${output_file} Jalur output dasar; tambahkan ekstensi target, mis. ${output_file}.html Tidak didukung Jalur dasar tanpa ekstensi; hasilnya harus ditulis ke ${output_file}.json
${output_dir} Tidak didukung Tidak didukung Direktori permintaan untuk lampiran (bagan, gambar)
${no_cache} Menonaktifkan caching konversi dan menyimpan output di direktori hapus otomatis Tidak didukung Tidak didukung

Helper Kontrol hanya menerima jalur target. Jika membutuhkan lokasi sementara, ia harus menyediakannya sendiri: direktori eksekutabelnya sendiri terlebih dahulu, lalu direktori temp sistem.

Token Pencocokan extensions

Selain ekstensi standar (mis. ["png", "zip"]), extensions menerima token yang cocok dengan kategori luas. Ini berlaku untuk plugin yang mendeklarasikan extensions (Kontrol dan Properti); plugin Konversi mendeklarasikan formats sebagai gantinya dan tidak menggunakannya.

Token Deskripsi
${type_folder} Mencocokkan direktori dan folder.
${type_file} Mencocokkan semua file (termasuk file tanpa ekstensi).
${type_all} Mencocokkan semuanya (file dan folder).
${type_image} Mencocokkan gambar yang didukung oleh penampil gambar native Seer.
${type_media} Mencocokkan format audio dan video.
${type_web} Mencocokkan file web HTML dan Markdown.
${type_text} Mencocokkan file teks, kode, dan konfigurasi.
${type_pdf} Mencocokkan dokumen PDF.
${type_none} Mencocokkan file di luar kategori di atas (mis. arsip, file eksekusi).

Pengemasan dan Pengujian Dalam Aplikasi

Setelah dikembangkan, plugin harus dikemas ke dalam arsip ZIP standar untuk instalasi. Ini berlaku untuk semua kemampuan plugin.

Standar Pengemasan

  1. Dokumentasi Paket: Setiap paket Kontrol atau Properti mandiri harus menyertakan PACKAGE_README.md (deskripsi ditambah tabel ## Options & Arguments), yang ditempatkan sebagai README.md di root paket.
  2. Tata Letak Root Datar: Untuk paket Kontrol dan Properti (Canonical v1), plugin.json, file eksekutabel/skrip, README.md, dan dependensi runtime harus berada langsung di root arsip. Jangan membungkusnya di dalam folder tambahan, dan jangan pernah mencampur entri datar dan bersarang — host akan menolak arsip dengan root paket yang ambigu.

    Plugin Konversi lama yang diinstal dari katalog online menggunakan tata letak sebaliknya: folder tingkat atas <archive-name>/ yang membungkus file paket. Ikuti panduan plugin Konversi untuk kasus tersebut; kedua tata letak tidak dapat dipertukarkan.

  3. Kompresi Maksimum: 7-Zip dengan kompresi Deflate maksimum direkomendasikan: powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*

Pengujian Lokal Dalam Aplikasi

  1. Buka Pengaturan Seer dan navigasikan ke bagian target:
    • Plugin Penampil: Pengaturan > Plugin -> tab Lokal
    • Plugin Kontrol: Pengaturan > Kontrol
    • Plugin Properti: Pengaturan > Properti
  2. Klik + di bawah daftar dan pilih arsip .zip (atau plugin.json dari folder lokal Anda).
  3. Seer secara otomatis memvalidasi paket dan memuatnya. Verifikasi pengaturan dan klik Oke untuk mengaktifkannya.