diffs is een optionele gebundelde plugintool die voor-/natekst of een uniforme patch omzet in een alleen-lezen diff-artefact. De tool voegt ook korte instructies voor agents vooraan toe aan de systeemprompt en wordt geleverd met een bijbehorende skill voor uitgebreidere instructies.
Invoer: before- en after-tekst, of een uniforme patch (wederzijds uitsluitend).
Uitvoer: een Gateway-viewer-URL voor canvasweergave, een gerenderd PNG-/PDF-bestandspad voor berichtbezorging, of beide.
Snel aan de slag
1
Installeer de plugin
2
Schakel de plugin in
3
Kies een modus
- view
- file
- both
Canvasgerichte flows: agents roepen
diffs aan met mode: "view" en openen details.viewerUrl met canvas present.Ingebouwde systeeminstructies uitschakelen
Stelplugins.entries.diffs.hooks.allowPromptInjection in op false om de tool te behouden, maar de vooraan toegevoegde systeempromptinstructies weg te laten:
before_prompt_build-hook van de plugin geblokkeerd, terwijl de tool en skill beschikbaar blijven. Schakel in plaats daarvan de plugin uit om zowel de instructies als de tool uit te schakelen.
Naslag voor toolinvoer
Alle velden zijn optioneel, tenzij anders vermeld.string
Oorspronkelijke tekst. Vereist met
after wanneer patch is weggelaten.string
Bijgewerkte tekst. Vereist met
before wanneer patch is weggelaten.string
Uniforme diff-tekst. Wederzijds uitsluitend met
before en after.string
Weergavebestandsnaam voor de voor/na-modus.
string
Hint om de taal voor de voor/na-modus te overschrijven. Onbekende waarden en talen buiten de standaardset van de viewer vallen terug op platte tekst, tenzij de plugin Diff Viewer Language Pack is geïnstalleerd.
string
Overschrijving van de viewertitel.
"view" | "file" | "both"
Uitvoermodus. Standaard wordt de pluginstandaard
defaults.mode (both) gebruikt. Verouderde alias: "image" gedraagt zich hetzelfde als "file"."light" | "dark"
Viewerthema. Standaard wordt de pluginstandaard
defaults.theme gebruikt."unified" | "split"
Diff-indeling. Standaard wordt de pluginstandaard
defaults.layout gebruikt.boolean
Vouw ongewijzigde secties uit wanneer de volledige context beschikbaar is. Alleen een optie per aanroep (geen standaardsleutel van de plugin).
"png" | "pdf"
Gerenderde bestandsindeling. Standaard wordt de pluginstandaard
defaults.fileFormat gebruikt."standard" | "hq" | "print"
Kwaliteitsvoorinstelling voor PNG-/PDF-rendering.
number
Overschrijving van de apparaatschaal (
1-4).number
Maximale renderbreedte in CSS-pixels (
640-2400).number
standaard:"1800"
TTL van het artefact in seconden voor de viewer en zelfstandige bestandsuitvoer. Maximaal
21600.string
Overschrijving van de oorsprong van de viewer-URL. Overschrijft pluginwaarde
viewerBaseUrl. Moet http of https zijn, zonder query/hash.Validatie en limieten
Validatie en limieten
before/after: elk maximaal 512 KiB.patch: maximaal 2 MiB.path: maximaal 2048 bytes.lang: maximaal 128 bytes.title: maximaal 1024 bytes.- Limiet voor patchcomplexiteit: maximaal 128 bestanden en in totaal 120000 regels.
patchsamen metbefore/afterwordt geweigerd.- Veiligheidslimieten voor gerenderde bestanden (PNG en PDF):
fileQuality: "standard": maximaal 8 MP (8,000,000 gerenderde pixels).fileQuality: "hq": maximaal 14 MP.fileQuality: "print": maximaal 24 MP.- PDF is daarnaast beperkt tot 50 pagina’s.
Syntaxismarkering
Ingebouwde talen:javascript, typescript, tsx, jsx, json, markdown, yaml, css, html, sh, python, go, rust, java, c, cpp, csharp, php, sql, docker, ruby, swift, kotlin, r, dart, lua, powershell, xml en toml.
Veelgebruikte aliassen (js, ts, bash, md, yml, c++, dockerfile, rb, kt, ps1, enzovoort) worden naar die talen genormaliseerd.
Installeer de plugin Diff Viewer Language Pack voor meer talen (Astro, Vue, Svelte, MDX, GraphQL, Terraform/HCL, Nix, Clojure, Elixir, Haskell, OCaml, Scala, Zig, Solidity, Verilog/VHDL, Fortran, MATLAB, LaTeX, Mermaid, Sass/Less/SCSS, Nginx, Apache, CSV, dotenv, INI, diff en meer):
Contract voor uitvoerdetails
Alle geslaagde resultaten bevattenchanged: identieke voor-/nainvoer retourneert false zonder een artefact te maken; gerenderde resultaten retourneren true.
Viewervelden (modi view en both)
Viewervelden (modi view en both)
changedartifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountIdindien beschikbaar)
Bestandsvelden (modi file en both)
Bestandsvelden (modi file en both)
changedartifactIdexpiresAtfilePathpath(dezelfde waarde alsfilePath, voor compatibiliteit met de berichtentool)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Samengevouwen ongewijzigde secties
De viewer toont rijen zoalsN unmodified lines. Uitvouwbediening verschijnt alleen wanneer de gerenderde diff uitvouwbare contextgegevens bevat (gebruikelijk bij voor-/nainvoer). Bij veel uniforme patches ontbreken contextblokken in de hunks, waardoor de rij zonder uitvouwbediening kan verschijnen — dit is verwacht en geen fout. expandUnchanged is alleen van toepassing wanneer uitvouwbare context bestaat.
Navigatie tussen meerdere bestanden
Patches die meer dan één bestand wijzigen, beginnen met een overzichtskaart van gewijzigde bestanden: totale aantallen+N / -N, aantallen per bestand, badges voor toegevoegd/verwijderd/hernoemd en ankerlinks die naar elk bestand springen. Gerenderde PNG-/PDF-bestanden behouden de aantallen in de bestandskoppen, maar laten de interactieve weergaveschakelaars weg, omdat die bedieningselementen in een statisch bestand niet werken.
Pluginstandaarden
Stel pluginbrede standaardwaarden in via~/.openclaw/openclaw.json:
defaults-sleutels: fontFamily, fontSize, lineSpacing, layout, showLineNumbers, diffIndicators, wordWrap, background, theme, fileFormat, fileQuality, fileScale, fileMaxWidth, mode, ttlSeconds. Expliciete parameters van toolaanroepen overschrijven deze.
Configuratie voor permanente viewer-URL
string
Door de plugin beheerde terugvalwaarde voor geretourneerde viewerlinks wanneer een toolaanroep geen
baseUrl doorgeeft. Moet http of https zijn, zonder query/hash.Beveiligingsconfiguratie
boolean
standaard:"false"
false: aanvragen naar viewerroutes die niet van loopback afkomstig zijn, worden geweigerd. true: externe viewers zijn toegestaan als het pad met token geldig is.Levenscyclus en opslag van artefacten
- Viewer-HTML en metadata bevinden zich in de gedeelde
state/openclaw.sqlite-database onder de blobnaamruimte van de Diffs-plugin. HTML wordt met gzip gecomprimeerd; SQLite slaat alleen een SHA-256-hash van het willekeurige URL-token op, niet het token zelf. - Gerenderde PNG-/PDF-bestanden blijven tijdelijke materialisaties onder
$TMPDIR/openclaw-diffs, omdat levering via een kanaal een bestandspad vereist. SQLite beheert de metadata over hun vervaldatum; er worden geen JSON-nevenbestanden geschreven. - Standaard-TTL voor artefacten: 30 minuten. Maximaal geaccepteerde TTL: 6 uur.
- Opschoning wordt opportunistisch uitgevoerd na elke aanroep voor het maken van een artefact. Verlopen SQLite-rijen worden eerst verwijderd, gevolgd door de bijbehorende PNG-/PDF-map.
- Een fallback-scan verwijdert tijdelijke mappen zonder rij die ouder zijn dan 24 uur. Verouderde caches van
meta.json,file-meta.jsonenviewer.htmlworden niet geïmporteerd of gelezen.
Viewer-URL en netwerkgedrag
Viewer-route:/plugins/diffs/view/{artifactId}/{token}
Viewer-assets:
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.js(alleen wanneer de diff een taal uit een taalpakket gebruikt)
baseUrl ook wordt toegepast op assetaanvragen.
Volgorde voor URL-resolutie: baseUrl van de toolaanroep (na strikte validatie) -> viewerBaseUrl van de plugin -> standaard loopback 127.0.0.1. Als de bindmodus van de Gateway custom is en gateway.customBindHost is ingesteld, wordt die host gebruikt in plaats van loopback.
Regels voor baseUrl: moet http:// of https:// zijn; query en hash worden geweigerd; een origin met een optioneel basispad is toegestaan.
Beveiligingsmodel
Viewer-beveiliging
Viewer-beveiliging
- Standaard alleen via loopback.
- Viewer-paden met tokens en strikte validatie van ID- en tokenpatronen.
- CSP van de viewer-respons:
default-src 'none'; scripts/assets alleen van dezelfde bron; geen uitgaandeconnect-src. - Beperking van externe mislukte pogingen wanneer externe toegang is ingeschakeld: 40 mislukte pogingen binnen 60 seconden activeren een blokkering van 60 seconden (
429 Too Many Requests).
Beveiliging van bestandsrendering
Beveiliging van bestandsrendering
- Routering van browseraanvragen voor schermafbeeldingen weigert standaard alles.
- Alleen lokale viewer-assets van
http://127.0.0.1/plugins/diffs/assets/*zijn toegestaan. - Externe netwerkaanvragen worden geblokkeerd.
Browservereisten voor de bestandsmodus
mode: "file" en mode: "both" vereisen een Chromium-compatibele browser.
Resolutievolgorde:
1
Configuratie
browser.executablePath in de OpenClaw-configuratie.2
Omgevingsvariabelen
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
3
Platformfallback
Gebruikelijke installatiepaden en
PATH-zoekacties voor Chrome, Chromium, Edge en Brave.Diff PNG/PDF rendering requires a Chromium-compatible browser.... Los dit op door Chrome, Chromium, Edge of Brave te installeren, of door een van de bovenstaande opties voor het pad naar het uitvoerbare bestand in te stellen.
Probleemoplossing
Invoervalidatiefouten
Invoervalidatiefouten
Provide patch or both before and after text.— neem zowelbeforealsafterop, of geefpatchop.Provide either patch or before/after input, not both.— combineer geen invoermodi.Invalid baseUrl: ...— gebruik eenhttp(s)-origin met een optioneel pad, zonder query/hash.{field} exceeds maximum size (...)— verklein de payload.- Grote patch geweigerd — verminder het aantal patchbestanden of het totale aantal regels.
Toegankelijkheid van de viewer
Toegankelijkheid van de viewer
- De viewer-URL resolveert standaard naar
127.0.0.1. - Stel voor externe toegang
viewerBaseUrlvan de plugin in, geefbaseUrlper aanroep door, of gebruikgateway.bind=custommetgateway.customBindHost. - Als
gateway.trustedProxiesloopback bevat voor een proxy op dezelfde host (bijvoorbeeld Tailscale Serve), mislukken directe loopback-aanvragen aan de viewer zonder doorgestuurde headers met het client-IP standaard volgens het fail-closed-principe. - Geef voor die proxytopologie de voorkeur aan
mode: "file"/"both"voor een bijlage, of schakel bewustsecurity.allowRemoteViewerin plusviewerBaseUrlvan de plugin/eenbaseUrlvan de proxy voor een deelbare viewer-link. - Schakel
security.allowRemoteVieweralleen in wanneer externe toegang tot de viewer bedoeld is.
Rij met ongewijzigde regels heeft geen uitvouwknop
Rij met ongewijzigde regels heeft geen uitvouwknop
Dit is te verwachten bij patchinvoer zonder uitvouwbare context; het is geen viewer-fout.
Artefact niet gevonden
Artefact niet gevonden
- Artefact is vanwege de TTL verlopen.
- Token of pad is gewijzigd.
- De opschoning heeft verouderde gegevens verwijderd.
Operationele richtlijnen
- Geef de voorkeur aan
mode: "view"voor lokale interactieve reviews in canvas. - Geef de voorkeur aan
mode: "file"voor uitgaande chatkanalen die een bijlage nodig hebben. - Houd
allowRemoteVieweruitgeschakeld, tenzij je implementatie externe viewer-URL’s vereist. - Stel voor gevoelige diffs een expliciete korte
ttlSecondsin. - Vermijd het verzenden van geheimen in diffinvoer wanneer dat niet nodig is.
- Als je kanaal afbeeldingen sterk comprimeert (bijvoorbeeld Telegram of WhatsApp), geef dan de voorkeur aan PDF-uitvoer (
fileFormat: "pdf").
Diff-renderingengine mogelijk gemaakt door Diffs.