På denne siden

Utvikling og implementering av tillegg

Seer har en modulær arkitektur for programtillegg som lar utviklere utvide funksjonaliteten på tvers av flere områder. Velg en tilleggsfunksjon nedenfor for å utforske utviklingsspesifikasjonene:

Viser-tillegg (Viewers)

Viser-tillegg utvider forhåndsvisningsvinduet som åpnes med mellomromstasten. De støtter to implementeringsarkitekturer: Konverteringstillegg (Convert) og DLL-tillegg (SDK v3).

Bygg et viser-tillegg med en KI-agent

Erstatt plassholderen nedenfor, og gi deretter den fullstendige instruksjonen til kodingsagenten din:

Les og følg Seer-utviklingsveiledningen for tillegg på https://raw.githubusercontent.com/ccseer/Seer-Plugins/refs/heads/master/plugin_development_guide.md. Behandle den som den eneste sannhetskilden for arkitektur, plugin.json, implementering, validering og pakking. Hvis veiledningen ikke er tilgjengelig, stopp og rapporter det før du fortsetter.

Før du gjør noe arbeid, inspiser Requirement (Krav) nedenfor. Hvis det mangler, er uendret plassholdertekst, eller for tvetydig til å implementeres, still ett avklarende spørsmål og vent. Ikke gjett det manglende kravet.

Når det er avklart, velg Convert eller DLL og begrunn valget kort, og implementer deretter et fullstendig, installerbart tillegg i gjeldende arbeidsområde. Ikke endre Seer i seg selv eller stopp ved en plan eller kodeutdrag.

Følg hvert gjeldende valideringstrinn i veiledningen og rapporter de faktiske resultatene. Kjør en forhåndsvisningstest i Seer-appen når det er mulig; ellers oppgi eksplisitt at kjøretidsverifisering ikke ble utført.

Requirement: [ERSTATT DENNE PLASSHOLDEREN med kravet til visertillegget ditt, f.eks. gjengi mermaid-diagrammer i forhåndsvisning av markdown]

Konverteringstillegg (Convert)

Seer behandler konverteringstillegg som eksterne kommandolinje-eksekverere. Når en bruker trykker på mellomromstasten på en støttet fil, starter Seer det konfigurerte programmet og sender filbaner via plassholdere. Programmet konverterer filen til et format som støttes innebygd av Seer (HTML, JSON, TXT, bilder osv.), som Seer laster inn og viser så snart prosessen avsluttes.

Plassholdervariabler

Plassholder Beskrivelse Eksempel
${output_file} Grunnleggende utdatabane; legg til ønsket filtype i argumentene. ${output_file}.html
${no_cache} Deaktiverer konverteringshurtigbufring og lagrer utdata i mappen for automatisk sletting, som tømmes når forhåndsvisningsvinduer lukkes. ${no_cache}

Konverteringstillegg godtar også de universelle plassholderne (${input_file}, ${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) og bruker ikke ${type_*}-samsvarskodene, ettersom de deklarerer samsvar i formats i stedet for extensions. Begge dekkes i den felles delen Plassholdere og samsvarskoder nedenfor.

Støttede kjørbare filer og skriptkjøretider

  • Skript: PowerShell-skript (.ps1, støttes direkte via PowerShell). For Python (.py), Node.js (.js) eller batch (.bat), kompiler til en frittstående .exe (f.eks. med PyInstaller) eller inkluder tolken i pakken.
  • Egendefinerte binærfiler: Frittstående CLI-programmer kompilert fra C/C++, Rust, Go eller C#.

plugin.json-eksempel (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-tillegg (SDK v3)

For maksimal visningsytelse, dyp interaktivitet eller strømmende visninger støtter Seer innfødte C++/Qt dynamiske lenkebiblioteker som lastes direkte inn i visningsområdet via QPluginLoader.

  • Tekniske spesifikasjoner: C++17, Qt 6.8, MSVC 2022 (x64), CMake 3.22+.
  • Viktige grensesnitt: Arv fra ViewerBase (widget-implementering) og implementer ViewerPluginInterface (IID "seer.plugin.interface.preview/3").
  • Minimum appversjon: SDK v3-tillegg må deklarere "appMinVersion": "4.2.9".

Referanseprosjekter

Prosjekt Formål
F3DViewer 3D-modellvisning og panoramavisning
OfficeViewer Office-dokumenter og CAD-tegninger
FontViewer Skrifttypeinspeksjon og -visning
JsonTreeViewer Høyytelses interaktivt JSON-tre
Collections Alle offisielle tillegg og fellesskapstillegg

Kontroll-tillegg

Kontroll-tillegg legger til egendefinerte handlingsknapper på venstre side av den nedre kontrollinjen i forhåndsvisningsvinduet, noe som muliggjør raske handlinger og integrasjon med eksterne verktøy for den aktive filen eller mappen.

Bygg et kontroll-tillegg med en KI-agent

Erstatt plassholderen nedenfor, og gi deretter den fullstendige instruksjonen til kodingsagenten din:

Les og følg Seer-utviklingsveiledningen for kontrolltillegg på https://raw.githubusercontent.com/ccseer/Seer-Controls/refs/heads/main/plugin_development_guide.md. Behandle den som den eneste sannhetskilden for arkitektur, plugin.json, implementering, validering og pakking. Hvis veiledningen ikke er tilgjengelig, stopp og rapporter det før du fortsetter.

Før du gjør noe arbeid, inspiser Requirement (Krav) nedenfor. Hvis det mangler, er uendret plassholdertekst, eller for tvetydig til å implementeres, still ett avklarende spørsmål og vent. Ikke gjett det manglende kravet.

Når det er avklart, implementer et fullstendig, installerbart kontrolltillegg som overholder Canonical v1-prosesskontrakten i gjeldende arbeidsområde. Ikke endre Seer i seg selv eller stopp ved en plan eller kodeutdrag.

Følg hvert gjeldende valideringstrinn i veiledningen og rapporter de faktiske resultatene.

Requirement: [ERSTATT DENNE PLASSHOLDEREN med kravet til kontrolltillegget ditt, f.eks. åpne VS Code i gjeldende mappe eller kopier absolutt bane til utklippstavlen]

Arkitektur og kontrakt

  • Prosessmodell: Implementerer Canonical v1-prosesskontrakten (backend: "process", capabilities: ["control"]). Seer kjører hjelpeprogrammet via CLI.
  • Returstatus og feilrapportering:
    • Vellykket: Prosessen avsluttes med kode 0 (eller samsvarer med success_exit_codes). Hvis "close_after_success": true er konfigurert, lukker Seer automatisk forhåndsvisningsvinduet etter vellykket kjøring.
    • Feil: Prosessen avsluttes med en kode ulik null. Alt som skrives til standardfeil (stderr), fanges opp av Seer og vises som et Toast-feilvarsel i appen.
  • Brukergrensesnitt og interaksjon: Kontroll-tillegg tegner ikke egne permanente hovedvinduer. Vanlige hjelpeprogrammer utfører bakgrunnsoppgaver, kopierer tekst til utklippstavlen eller åpner opprinnelige dialoger i Windows (f.eks. Åpne med, Egenskaper, Del).

Kommandolinje-plassholdere

Et kontroll-tillegg mottar kun målbanen — ${input_file} pluss de universelle plassholderne (${use_backslash}, ${seer_dir}, ${seer_exe}, ${seerviewer_exe}, ${7z}) som er oppført i den felles delen Plassholdere og samsvarskoder nedenfor.

${output_dir}, ${output_file} og ${no_cache} blir avvist i et manifest for kontrolltillegg. Et kontrolltillegg som trenger en midlertidig plassering, må løse dette selv: først sin egen programkatalog, deretter systemets midlertidige mappe.

plugin.json-eksempler (Control)

Eksempel 1: Mappehandling (Terminal Here)

Konfigurasjon for det offisielle Terminal Here-tillegget:

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

Eksempel 2: Filhandling (Explorer Open With)

Konfigurasjon for det offisielle Explorer Open With-tillegget:

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

Hvis du vil lukke forhåndsvisningsvinduet automatisk etter fullført kjøring, setter du "close_after_success": true i manifestet.

For kildekoden til offisielle kontrolltillegg, se: ccseer/Seer-Controls.

Egenskaps-tillegg

Egenskaps-tillegg utvider Seers motor for inspeksjon av metadata. Når en bruker trykker Ctrl + I på en forhåndsvist fil eller mappe (eller åpner egenskapsvinduet), vil samsvarende egenskapstillegg hente ut og vise strukturerte metadata og grafiske oscilloskoper/diagrammer.

Bygg et egenskaps-tillegg med en KI-agent

Erstatt plassholderen nedenfor, og gi deretter den fullstendige instruksjonen til kodingsagenten din:

Les og følg Seer-utviklingsveiledningen for egenskapstillegg på https://raw.githubusercontent.com/ccseer/Seer-Properties/refs/heads/main/plugin_development_guide.md. Behandle den som den eneste sannhetskilden for arkitektur, plugin.json, implementering, validering og pakking. Hvis veiledningen ikke er tilgjengelig, stopp og rapporter det før du fortsetter.

Før du gjør noe arbeid, inspiser Requirement (Krav) nedenfor. Hvis det mangler, er uendret plassholdertekst, eller for tvetydig til å implementeres, still ett avklarende spørsmål og vent. Ikke gjett det manglende kravet.

Når det er avklart, implementer et fullstendig, installerbart egenskapstillegg som overholder Canonical v1-prosesskontrakten og Schema 1 JSON-spesifikasjonen i gjeldende arbeidsområde. Ikke endre Seer i seg selv eller stopp ved en plan eller kodeutdrag.

Følg hvert gjeldende valideringstrinn i veiledningen og rapporter de faktiske resultatene.

Requirement: [ERSTATT DENNE PLASSHOLDEREN med kravet til egenskapstillegget ditt, f.eks. hente ut og vise detaljerte parametere for lyd-/videokodeker og bithastighet for MP4-filer]

Arkitektur og kontrakt

  • Prosessmodell: Implementerer Canonical v1-prosesskontrakten (backend: "process", capabilities: ["property"], result_schema: 1).
  • CLI-kall: Verten sender: --input "${input_file}" --output "${output_file}" --output-dir "${output_dir}"
  • Publisering av utdata:
    • Verten utvider ${output_file} til en basisbane uten filtype (f.eks. <requestDir>/<md5>).
    • Tillegget må skrive sitt JSON-resultat til <output-base>.json (det vil si ${output_file}.json).
    • Visuelle vedlegg (diagrammer, histogrammer, vektorskoper) må lagres i ${output_dir}.
    • Begrensning: ${no_cache} er forbudt for egenskapstillegg.
  • Retningslinjer for returkoder:
    • Forventede domenestatuser (f.eks. usignert fil, ikke et git-arkiv, tomme metadata) må avsluttes med kode 0 og beskrive statusen i JSON.
    • Avslutt med kode ulik null kun ved uopprettelige feil eller ugyldige anrop (avslutning ulik null fører til at verten tømmer forespørselsmappen).

Kommandolinje-plassholdere

Plassholder Beskrivelse Eksempel
${output_file} Vertstildelt basisbane uten filtype; resultatet må skrives til ${output_file}.json. C:\Users\...\request_dir\md5_hash
${output_dir} Vertstildelt forespørselsmappe for vedlegg (diagrammer, bilder). C:\Users\...\request_dir

I tillegg kommer de universelle plassholderne som er oppført i den felles delen Plassholdere og samsvarskoder nedenfor, som også dekker ${type_*}-samsvarskodene. ${no_cache} avvises for egenskapstillegg.

Spesifikasjon for resultat-JSON (Schema 1)

Resultatfilen ${output_file}.json må være gyldig UTF-8 JSON som inneholder result_schema: 1 og et data-objekt:

1. Flate rader (Flat Rows)

Kun når hele resultatet er en enkelt rad (f.eks. SHA-256):

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

2. Undergruppe med sortert matrise av objekter med én nøkkel (Standard)

Alt som produserer mer enn én rad må publiseres som nøyaktig én undergruppe oppkalt etter tillegget – løse rader på toppnivå kolliderer med radene til alle andre tillegg, som inspektøren viser i én liste. Matriserekkefølgen er visningsrekkefølgen, så dette er den eneste formen der tillegget kan bestemme rekkefølgen radene vises i:

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

3. Undergruppe med et verdiobjekt

value kan også være et vanlig objekt, men radene gjengis i nøkkelrekkefølgen til det parsede objektet, som tillegget ikke kan kontrollere. Bruk det bare når radrekkefølgen ikke er viktig:

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

4. Grafiske diagrammer og oscilloskoper (Bildevedlegg)

Lagre genererte PNG-diagrammer i ${output_dir}, og deklarer 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-eksempel (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
      ]
    }
  }
}

For kildekoden til offisielle egenskapstillegg, se: ccseer/Seer-Properties.


Plassholdere og samsvarskoder

Seer utvider disse kodene i arguments. Hvilke plassholdere en funksjon har lov til å bruke, valideres av verten når manifestet lastes inn — en kode som ikke støttes gir en innlastingsfeil for manifestet, ikke en kjøretidsadvarsel.

Tilgjengelig for alle funksjoner

Plassholder Beskrivelse Eksempel
${input_file} Absolutt bane til filen eller mappen som forhåndsvises. C:\Docs\sample.pdf
${use_backslash} Valgfritt flagg for å formatere baneskilletegn med opprinnelige Windows-omvendte skråstreker (\). ${use_backslash}
${seer_dir} Mappe som inneholder Seer.exe. C:\Program Files\Seer
${seer_exe} Absolutt bane til Seer.exe. C:\Program Files\Seer\Seer.exe
${seerviewer_exe} Absolutt bane til SeerViewer.exe. C:\Program Files\Seer\SeerViewer.exe
${7z} Absolutt bane til 7z.exe som følger med Seer. C:\Program Files\Seer\plugins\7z.exe
${theme} Gjeldende Seer-tema, expanderes til dark eller light. En dataplassholder som ikke kan brukes som hele command. dark
${lang} Gjeldende Seer-språk, expanderes i BCP-47-format (f.eks. en, zh-CN). En dataplassholder som ikke kan brukes som hele command. en
${screenshot} Absolutt bane til et midlertidig PNG-skjermbilde av gjeldende visning. C:\Users\Username\AppData\Local\Temp\Seer\screenshot\view_1.png

Funksjonsspesifikke plassholdere

Plassholder Viser (Preview) Kontroll (Control) Egenskap (Property)
${output_file} Grunnleggende utdatabane; legg til ønsket filtype, f.eks. ${output_file}.html Støttes ikke Grunnleggende bane uten filtype; resultatet må skrives til ${output_file}.json
${output_dir} Støttes ikke Støttes ikke Forespørselsmappe for vedlegg (diagrammer, bilder)
${no_cache} Deaktiverer hurtigbufring og lagrer utdata i mappen for automatisk sletting Støttes ikke Støttes ikke

Et kontroll-tillegg mottar kun målbanen. Hvis det trenger en midlertidig lagringsplass, må det finne en selv: først sin egen programkatalog, deretter systemets midlertidige mappe.

extensions samsvarskoder

I tillegg til standard filtyper (f.eks. ["png", "zip"]), godtar extensions koder som matcher brede kategorier. Disse gjelder for tillegg som deklarerer extensions (kontroll- og egenskapstillegg); konverteringstillegg deklarerer formats i stedet og bruker dem ikke.

Kode Beskrivelse
${type_folder} Matcher mapper og kataloger.
${type_file} Matcher alle filer (inkludert filer uten filtype).
${type_all} Matcher alt (både filer og mapper).
${type_image} Matcher bilder som støttes av Seers innebygde bildeviser.
${type_media} Matcher lyd- og videoformater.
${type_web} Matcher nettsidefiler som HTML og Markdown.
${type_text} Matcher tekst-, kode- og konfigurasjonsfiler.
${type_pdf} Matcher PDF-dokumenter.
${type_none} Matcher filer utenfor kategoriene over (f.eks. arkiver, kjørbare filer).

Pakking og testing i appen

Når tillegget er utviklet, må det pakkes i et standard ZIP-arkiv for installasjon. Dette gjelder for alle typer tillegg.

Pakkestandarder

  1. Pakkedokumentasjon: Hver frittstående kontroll- eller egenskapspakke bør inneholde en PACKAGE_README.md (beskrivelse pluss ## Options & Arguments-tabell), plassert som README.md i rotmappen av pakken.
  2. Flat rotstruktur: For kontroll- og egenskapspakker (Canonical v1) må plugin.json, den kjørbare filen/skriptet, README.md og kjøretidsavhengigheter ligge direkte i rotmappen til arkivet. Ikke pakk dem inn i en ekstra undermappe, og bland aldri flate og nestede oppføringer — verten avviser et arkiv med tvetydig pakkerot.

    Eldre konverteringstillegg installert fra nettkatalogen bruker motsatt struktur: en toppmappe <arkivnavn>/ som pakker inn filene. Følg veiledningen for konverteringstillegg for dette tilfellet; de to strukturene kan ikke byttes om.

  3. Maksimal komprimering: 7-Zip med maksimal Deflate-komprimering anbefales: powershell 7z a -tzip -mx=9 my-plugin-1.0.0.zip .\*

Lokal testing i appen

  1. Åpne Seer-innstillingene og gå til målområdet:
    • Viser-tillegg: Innstillinger > Programtillegg -> fanen Lokal
    • Kontroll-tillegg: Innstillinger > Kontroller
    • Egenskaps-tillegg: Innstillinger > Egenskaper
  2. Klikk på + under listen og velg .zip-arkivet (eller plugin.json fra den lokale utviklingsmappen).
  3. Seer validerer og laster automatisk inn pakken. Kontroller innstillingene og klikk på OK for å aktivere.