På den här sidan
Pluginutveckling och implementering
Seer erbjuder en modulär pluginarkitektur som gör det möjligt för utvecklare att utöka dess kapacitet över flera områden. Välj en pluginfunktion nedan för att utforska dess utvecklingsspecifikationer:
Visartillägg (Viewers)
Visartillägg utökar förhandsgranskningsfönstret som aktiveras med mellanslagstangenten. De stöder två implementeringsarkitekturer: Konverteringsplugin (Convert) och DLL-plugin (SDK v3).
Bygg ett visartillägg med en AI-agent
Ersätt platshållaren nedan och ge sedan den fullständiga instruktionen till din kodningsagent:
Läs och följ utvecklingsguiden för Seer-plugin på https://raw.githubusercontent.com/ccseer/Seer-Plugins/refs/heads/master/plugin_development_guide.md. Behandla den som den enda sanningskällan för arkitektur, plugin.json, implementering, validering och paketering. Om guiden inte är tillgänglig, stoppa och rapportera det innan du fortsätter.
Innan du utför något arbete, inspektera Requirement (Krav) nedan. Om det saknas, är oförändrad platshållartext eller är för tvetydigt för att implementeras, ställ en klargörande fråga och vänta. Gissa inte det saknade kravet.
När det är klarlagt, välj Convert eller DLL och motivera valet kort, implementera sedan ett fullständigt, installerbart plugin i den aktuella arbetsytan. Ändra inte Seer i sig och stanna inte vid en plan eller kodutdrag.
Följ varje tillämpligt valideringssteg i guiden och rapportera de faktiska resultaten. Kör ett förhandsgranskningstest i Seer-appen om möjligt; annars ange uttryckligen att ingen körningsverifiering utfördes.
Requirement: [ERSÄTT DENNA PLATSHÅLLARE med ditt krav på visartillägg, t.ex. rendera mermaid-diagram i markdown-förhandsgranskning]
Konverteringsplugin (Convert)
Seer behandlar konverteringsplugin som externa kommandoradsprogram. När en användare trycker på mellanslag på en fil som stöds, startar Seer det konfigurerade programmet och skickar filsökvägar via platshållare. Programmet konverterar filen till ett format som stöds inbyggt av Seer (HTML, JSON, TXT, bilder etc.), vilket Seer läser in och renderar när processen avslutas.
Platshållarvariabler
| Platshållare | Beskrivning | Exempel |
|---|---|---|
${output_file} |
Basutdatasökväg; lägg till önskad filändelse i argumenten. | ${output_file}.html |
${no_cache} |
Inaktiverar cachelagring av konvertering och sparar utdata i katalogen för automatisk radering, som rensas när förhandsgranskningsfönster stängs. | ${no_cache} |
Konverteringsplugin accepterar även de universella platshållarna (${input_file}, ${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) och använder inte ${type_*}-matchningskoder, eftersom de deklarerar sina matchningar i formats snarare än i extensions. Båda beskrivs i det gemensamma avsnittet Platshållare och matchningskoder nedan.
Körbara filer och skriptkörmiljöer som stöds
- Skript: PowerShell-skript (
.ps1, stöds direkt via PowerShell). För Python (.py), Node.js (.js) eller batch (.bat), kompilera till en fristående.exe(t.ex. med PyInstaller) eller paketera tolken i paketet. - Anpassade binärfiler: Fristående CLI-program kompilerade från C/C++, Rust, Go eller C#.
plugin.json-exempel (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-plugin (SDK v3)
För maximal renderingsprestanda, djup interaktivitet eller strömmande vyer stöder Seer inbyggda C++/Qt dynamiska länkbibliotek som läses in direkt i visningsytan via QPluginLoader.
- Tekniska specifikationer: C++17, Qt 6.8, MSVC 2022 (x64), CMake 3.22+.
- Viktiga gränssnitt: Ärv
ViewerBase(widget-implementering) och implementeraViewerPluginInterface(IID"seer.plugin.interface.preview/3"). - Minsta appversion: SDK v3-plugins måste deklarera
"appMinVersion": "4.2.9".
Referensprojekt
| Projekt | Syfte |
|---|---|
| F3DViewer | 3D-modellrendering och panoramavy |
| OfficeViewer | Office-dokument och CAD-ritningar |
| FontViewer | Teckensnittsinspektion och -rendering |
| JsonTreeViewer | Högpresterande interaktivt JSON-träd |
| Collections | Alla officiella plugins och community-plugins |
Kontrolltillägg
Kontrolltillägg lägger till anpassade åtgärdsknappar på vänstra sidan av det nedre kontrollfältet i förhandsgranskningsfönstret, vilket möjliggör snabbåtgärder och integrering med externa verktyg för den aktiva filen eller mappen.
Bygg ett kontrolltillägg med en AI-agent
Ersätt platshållaren nedan och ge sedan den fullständiga instruktionen till din kodningsagent:
Läs och följ utvecklingsguiden för Seer-kontrolltillägg på https://raw.githubusercontent.com/ccseer/Seer-Controls/refs/heads/main/plugin_development_guide.md. Behandla den som den enda sanningskällan för arkitektur, plugin.json, implementering, validering och paketering. Om guiden inte är tillgänglig, stoppa och rapportera det innan du fortsätter.
Innan du utför något arbete, inspektera Requirement (Krav) nedan. Om det saknas, är oförändrad platshållartext eller är för tvetydigt för att implementeras, ställ en klargörande fråga och vänta. Gissa inte det saknade kravet.
När det är klarlagt, implementera ett fullständigt, installerbart kontrolltillägg som följer Canonical v1-processkontraktet i den aktuella arbetsytan. Ändra inte Seer i sig och stanna inte vid en plan eller kodutdrag.
Följ varje tillämpligt valideringssteg i guiden och rapportera de faktiska resultaten.
Requirement: [ERSÄTT DENNA PLATSHÅLLARE med ditt krav på kontrolltillägg, t.ex. öppna VS Code i den aktuella mappen eller kopiera absolut sökväg till urklipp]
Arkitektur & kontrakt
- Processmodell: Implementerar Canonical v1-processkontraktet (
backend: "process",capabilities: ["control"]). Seer kör hjälpprogrammet via CLI. - Returstatus och felrapportering:
- Framgång: Processen avslutas med kod
0(eller matcharsuccess_exit_codes). Om"close_after_success": trueär konfigurerat stänger Seer automatiskt förhandsgranskningsfönstret efter att körningen har lyckats. - Fel: Processen avslutas med en icke-nollkod. Allt som skrivs till standardfel (
stderr) fångas upp av Seer och visas som ett Toast-felmeddelande i appen.
- Framgång: Processen avslutas med kod
- Användargränssnitt & interaktion: Kontrolltillägg ritar inga egna permanenta huvudfönster. Typiska hjälpprogram kör bakgrundsuppgifter, kopierar text till urklipp eller anropar inbyggda systemdialoger i Windows (t.ex. Öppna med, Egenskaper, Dela).
Platshållare för kommandorad
Ett kontrolltillägg tar endast emot målsökvägen — ${input_file} plus de universella platshållarna (${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) som listas i det gemensamma avsnittet Platshållare och matchningskoder nedan.
${output_dir}, ${output_file} och ${no_cache} avvisas i ett manifest för kontrolltillägg. Ett kontrolltillägg som behöver en temporär plats måste fastställa en själv: i första hand sin egen programkatalog, därefter systemets temporära katalog.
plugin.json-exempel (Control)
Exempel 1: Mappåtgärd (Terminal Here)
Konfigurationen för det officiella tillägget 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
]
}
Exempel 2: Filåtgärd (Explorer Open With)
Konfigurationen för det officiella tillägget 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
]
}
För att automatiskt stänga förhandsgranskningsfönstret vid framgång, ställ in "close_after_success": true i manifestet.
Källkoden för officiella kontrolltillägg finns på: ccseer/Seer-Controls.
Egenskapstillägg
Egenskapstillägg utökar Seers motor för granskning av metadata. När en användare trycker Ctrl + I på en förhandsgranskad fil eller mapp (eller öppnar egenskapsfönstret), extraherar och visar matchande egenskapstillägg strukturerade metadata och grafiska oscilloskop/diagram.
Bygg ett egenskapstillägg med en AI-agent
Ersätt platshållaren nedan och ge sedan den fullständiga instruktionen till din kodningsagent:
Läs och följ utvecklingsguiden för Seer-egenskapstillägg på https://raw.githubusercontent.com/ccseer/Seer-Properties/refs/heads/main/plugin_development_guide.md. Behandla den som den enda sanningskällan för arkitektur, plugin.json, implementering, validering och paketering. Om guiden inte är tillgänglig, stoppa och rapportera det innan du fortsätter.
Innan du utför något arbete, inspektera Requirement (Krav) nedan. Om det saknas, är oförändrad platshållartext eller är för tvetydigt för att implementeras, ställ en klargörande fråga och vänta. Gissa inte det saknade kravet.
När det är klarlagt, implementera ett fullständigt, installerbart egenskapstillägg som följer Canonical v1-processkontraktet och specifikationen Schema 1 JSON i den aktuella arbetsytan. Ändra inte Seer i sig och stanna inte vid en plan eller kodutdrag.
Följ varje tillämpligt valideringssteg i guiden och rapportera de faktiska resultaten.
Requirement: [ERSÄTT DENNA PLATSHÅLLARE med ditt krav på egenskapstillägg, t.ex. extrahera och visa detaljerade parametrar för ljud-/videocodec och bithastighet för MP4-filer]
Arkitektur & kontrakt
- Processmodell: Implementerar Canonical v1-processkontraktet (
backend: "process",capabilities: ["property"],result_schema: 1). - CLI-anrop: Värden skickar:
--input "${input_file}" --output "${output_file}" --output-dir "${output_dir}" - Publicering av utdata:
- Värden expanderar
${output_file}till en bassökväg utan filändelse (t.ex.<requestDir>/<md5>). - Tillägget måste skriva sitt JSON-resultat till
<output-base>.json(dvs.${output_file}.json). - Visuella bilagor (diagram, histogram, vektorskop) måste sparas i
${output_dir}. - Begränsning:
${no_cache}är förbjudet för egenskapstillägg.
- Värden expanderar
- Policy för avslutningskoder:
- Förväntade domänresultat (t.ex. osignerad fil, inte ett git-arkiv, tomma metadata) måste avslutas med kod
0och beskriva statusen i JSON. - Avsluta med icke-nollkod endast vid allvarliga fel eller ogiltiga anrop (icke-noll-avslutningar gör att värden rensar förfrågningskatalogen).
- Förväntade domänresultat (t.ex. osignerad fil, inte ett git-arkiv, tomma metadata) måste avslutas med kod
Platshållare för kommandorad
| Platshållare | Beskrivning | Exempel |
|---|---|---|
${output_file} |
Värdtilldelad bassökväg utan filändelse; resultatet måste skrivas till ${output_file}.json. |
C:\Users\...\request_dir\md5_hash |
${output_dir} |
Värdtilldelad förfrågningskatalog för bilagor (diagram, bilder). | C:\Users\...\request_dir |
Samt de universella platshållarna som listas i det gemensamma avsnittet Platshållare och matchningskoder nedan, som även täcker ${type_*}-matchningskoderna. ${no_cache} avvisas för egenskapstillägg.
Specifikation för resultat-JSON (Schema 1)
Resultatfilen ${output_file}.json måste vara giltig UTF-8-JSON innehållande result_schema: 1 och ett data-objekt:
1. Platta rader (Flat Rows)
Endast när hela resultatet är en enda rad (t.ex. SHA-256):
{
"result_schema": 1,
"data": {
"SHA-256": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}
}
2. Undergrupp med en sorterad array av objekter med en nyckel (Standard)
Allt som ger mer än en rad måste publiceras som exakt en undergrupp uppkallad efter plugin-programmet – lösa rader på toppnivå kolliderar med raderna från alla andra plugin-program, som inspektören visar i en enda lista. Arrayens ordning är visningsordningen, så detta är den enda form där plugin-programmet kan bestämma i vilken ordning raderna visas:
{
"result_schema": 1,
"data": {
"Git": {
"value": [
{ "Repository": "ccseer/Seer-Properties" },
{ "Branch": "main" },
{ "Status": "Clean" }
]
}
}
}
3. Undergrupp med ett värdeobjekt
value kan också vara ett vanligt objekt, men dess rader återges i den tolkade objektets nyckelordning, vilket plugin-programmet inte kan styra. Använd det bara när radordningen inte spelar någon roll:
{
"result_schema": 1,
"data": {
"Git": {
"value": {
"Branch": "main",
"Status": "Working tree clean"
}
}
}
}
4. Grafiska diagram & oscilloskop (Bildbilagor)
Spara genererade PNG-diagram i ${output_dir} och deklarera dem med {"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-exempel (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
]
}
}
}
Källkoden för officiella egenskapstillägg finns på: ccseer/Seer-Properties.
Platshållare och matchningskoder
Seer expanderar dessa koder i arguments. Vilka platshållare en kapacitet får använda valideras av värden när manifestet läses in — en kod som inte stöds utgör ett inläsningsfel i manifestet, inte en varning under körning.
Tillgängliga för alla funktioner
| Platshållare | Beskrivning | Exempel |
|---|---|---|
${input_file} |
Absolut sökväg till filen eller mappen som förhandsgranskas. | C:\Docs\sample.pdf |
${use_backslash} |
Valfri flagga för att formatera sökvägsavgränsare med inbyggda Windows-omvända snedstreck (\). |
${use_backslash} |
${seer_dir} |
Katalog som innehåller Seer.exe. |
C:\Program Files\Seer |
${seer_exe} |
Absolut sökväg till Seer.exe. |
C:\Program Files\Seer\Seer.exe |
${seerviewer_exe} |
Absolut sökväg till SeerViewer.exe. |
C:\Program Files\Seer\SeerViewer.exe |
${7z} |
Absolut sökväg till 7z.exe som medföljer Seer. |
C:\Program Files\Seer\plugins\7z.exe |
${theme} |
Aktuellt Seer-tema, expanderas till dark eller light. En dataplatshållare som inte kan användas som hela command. |
dark |
${lang} |
Aktuellt Seer-språk, expanderas i BCP-47-format (t.ex. en, zh-CN). En dataplatshållare som inte kan användas som hela command. |
en |
${screenshot} |
Absolut sökväg till en tillfällig PNG-skärmbild av den aktuella vyn. | C:\Users\Username\AppData\Local\Temp\Seer\screenshot\view_1.png |
Funktionsspecifika platshållare
| Platshållare | Visare (Preview) | Kontroll (Control) | Egenskap (Property) |
|---|---|---|---|
${output_file} |
Basutdatasökväg; lägg till målfiländelse, t.ex. ${output_file}.html |
Stöds inte | Bassökväg utan ändelse; resultatet måste skrivas till ${output_file}.json |
${output_dir} |
Stöds inte | Stöds inte | Förfrågningskatalog för bilagor (diagram, bilder) |
${no_cache} |
Inaktiverar konverteringscache och sparar utdata i katalogen för automatisk radering | Stöds inte | Stöds inte |
Ett kontrolltillägg tar endast emot målsökvägen. Om det behöver en temporär plats måste det hitta en själv: i första hand sin egen programkatalog, därefter systemets temporära katalog.
extensions matchningskoder
Utöver standardändelser (t.ex. ["png", "zip"]), accepterar extensions koder som matchar breda kategorier. Dessa gäller för tillägg som deklarerar extensions (kontroll- och egenskapstillägg); konverteringsplugin deklarerar formats i stället och använder dem inte.
| Kod | Beskrivning |
|---|---|
${type_folder} |
Matchar kataloger och mappar. |
${type_file} |
Matchar alla filer (inklusive filer utan filändelse). |
${type_all} |
Matchar allt (både filer och mappar). |
${type_image} |
Matchar bilder som stöds av Seers inbyggda bildvisare. |
${type_media} |
Matchar ljud- och videoformat. |
${type_web} |
Matchar webbfiler som HTML och Markdown. |
${type_text} |
Matchar text-, kod- och konfigurationsfiler. |
${type_pdf} |
Matchar PDF-dokument. |
${type_none} |
Matchar filer utanför kategorierna ovan (t.ex. arkiv, körbara program). |
Paketering och lokal testning i appen
När tillägget har utvecklats måste det paketeras i ett vanligt ZIP-arkiv för installation. Detta gäller för alla typer av tillägg.
Paketeringsstandarder
- Paketdokumentation: Varje fristående kontroll- eller egenskapspaket bör innehålla en
PACKAGE_README.md(beskrivning plus tabellen## Options & Arguments), som placeras somREADME.mdi paketets rotkatalog. - Platt rotstruktur: För kontroll- och egenskapspaket (Canonical v1) måste
plugin.json, den körbara filen/skriptet,README.mdoch körningsberoenden ligga direkt i arkivets rotkatalog. Paketera dem inte i en extra undermapp, och blanda aldrig platta och kapslade poster — värden avvisar ett arkiv med tvetydig paketrot.Äldre konverteringsplugin som installeras från onlinekatalogen använder den motsatta layouten: en toppmapp
<arkivnamn>/som omsluter paketfilerna. Följ guiden för konverteringsplugin i det fallet; de två layouterna är inte utbytbara. - Maximal komprimering: 7-Zip med maximal Deflate-komprimering rekommenderas:
powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*
Lokal testning i appen
- Öppna Seer-inställningarna och navigera till målsektionen:
- Visartillägg:
Inställningar > Plugins-> fliken Lokala - Kontrolltillägg:
Inställningar > Kontroller - Egenskapstillägg:
Inställningar > Egenskaper
- Visartillägg:
- Klicka på + under listan och välj
.zip-arkivet (ellerplugin.jsonfrån din lokala utvecklingsmapp). - Seer validerar och läser in paketet automatiskt. Verifiera inställningarna och klicka på OK för att aktivera.