diffs ist ein optionales Plugin-Tool mit kurzer integrierter Systemanleitung und einem zugehörigen Skill, der Änderungsinhalte in ein schreibgeschütztes Diff-Artefakt für Agenten umwandelt.
Es akzeptiert entweder:
before- undafter-Text- einen vereinheitlichten
patch
- eine Gateway-Viewer-URL für die Canvas-Darstellung
- einen gerenderten Dateipfad (PNG oder PDF) für die Nachrichtenzustellung
- beide Ausgaben in einem Aufruf
Schnellstart
Integrierte Systemanleitung deaktivieren
Wenn Sie das Tooldiffs aktiviert lassen, aber seine integrierte System-Prompt-Anleitung deaktivieren möchten, setzen Sie plugins.entries.diffs.hooks.allowPromptInjection auf false:
before_prompt_build des diffs-Plugins, während Plugin, Tool und zugehöriger Skill verfügbar bleiben.
Wenn Sie sowohl die Anleitung als auch das Tool deaktivieren möchten, deaktivieren Sie stattdessen das Plugin.
Typischer Agenten-Workflow
Eingabebeispiele
- Vorher und nachher
- Patch
Referenz für Tool-Eingaben
Alle Felder sind optional, sofern nicht anders angegeben.Ursprünglicher Text. Erforderlich mit
after, wenn patch weggelassen wird.Aktualisierter Text. Erforderlich mit
before, wenn patch weggelassen wird.Vereinheitlichter Diff-Text. Schließt sich gegenseitig mit
before und after aus.Anzuzeigender Dateiname für den Vorher-und-nachher-Modus.
Hinweis zum Überschreiben der Sprache für den Vorher-und-nachher-Modus. Unbekannte Werte und Sprachen außerhalb des Standard-Viewer-Sets fallen auf Nur-Text zurück, sofern das
Diff Viewer Language Pack plugin nicht installiert ist.
Überschreibung des Viewer-Titels.
Ausgabemodus. Standardmäßig der Plugin-Standardwert
defaults.mode. Veralteter Alias: "image" verhält sich wie "file" und wird aus Gründen der Abwärtskompatibilität weiterhin akzeptiert.Viewer-Theme. Standardmäßig der Plugin-Standardwert
defaults.theme.Diff-Layout. Standardmäßig der Plugin-Standardwert
defaults.layout.Unveränderte Abschnitte erweitern, wenn vollständiger Kontext verfügbar ist. Nur eine Option pro Aufruf (kein Plugin-Standardschlüssel).
Gerendertes Dateiformat. Standardmäßig der Plugin-Standardwert
defaults.fileFormat.Qualitätsvorgabe für PNG- oder PDF-Rendering.
Überschreibung der Geräteskalierung (
1-4).Maximale Renderbreite in CSS-Pixeln (
640-2400).Artefakt-TTL in Sekunden für Viewer- und eigenständige Dateiausgaben. Maximal 21600.
Überschreibung des Ursprungs der Viewer-URL. Überschreibt Plugin-
viewerBaseUrl. Muss http oder https sein, ohne Abfrage/Hash.Legacy-Eingabealiase
Legacy-Eingabealiase
Werden aus Gründen der Abwärtskompatibilität weiterhin akzeptiert:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Validierung und Grenzwerte
Validierung und Grenzwerte
beforeundafterjeweils maximal 512 KiB.patchmaximal 2 MiB.pathmaximal 2048 Byte.langmaximal 128 Byte.titlemaximal 1024 Byte.- Obergrenze für Patch-Komplexität: maximal 128 Dateien und insgesamt 120000 Zeilen.
patchzusammen mitbeforeoderafterwird abgelehnt.- Sicherheitsgrenzwerte für gerenderte Dateien (gelten für PNG und PDF):
fileQuality: "standard": maximal 8 MP (8.000.000 gerenderte Pixel).fileQuality: "hq": maximal 14 MP (14.000.000 gerenderte Pixel).fileQuality: "print": maximal 24 MP (24.000.000 gerenderte Pixel).- PDF hat außerdem ein Maximum von 50 Seiten.
Syntaxhervorhebung
OpenClaw enthält Syntaxhervorhebung für gängige Quellcode-, Konfigurations- und Dokumentationssprachen: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 und toml.
Gängige Aliase wie js, ts, bash, md, yml, c++, dockerfile, rb, kt und ps1 werden auf diese Standardsprachen normalisiert.
Installieren Sie das Diff Viewer Language Pack Plugin, um weitere Sprachen hervorzuheben:
Vertrag für Ausgabedetails
Das Tool gibt strukturierte Metadaten unterdetails zurück.
Viewer fields
Viewer fields
Gemeinsame Felder für Modi, die einen Viewer erstellen:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountId, sofern verfügbar)
File fields
File fields
Dateifelder, wenn PNG oder PDF gerendert wird:
artifactIdexpiresAtfilePathpath(derselbe Wert wiefilePath, für Kompatibilität mit Message-Tools)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Compatibility aliases
Compatibility aliases
Wird für bestehende Aufrufer ebenfalls zurückgegeben:
format(derselbe Wert wiefileFormat)imagePath(derselbe Wert wiefilePath)imageBytes(derselbe Wert wiefileBytes)imageQuality(derselbe Wert wiefileQuality)imageScale(derselbe Wert wiefileScale)imageMaxWidth(derselbe Wert wiefileMaxWidth)
| Modus | Zurückgegebene Werte |
|---|---|
"view" | Nur Viewer-Felder. |
"file" | Nur Dateifelder, kein Viewer-Artefakt. |
"both" | Viewer-Felder plus Dateifelder. Wenn das Datei-Rendering fehlschlägt, wird der Viewer dennoch mit fileError und dem Alias imageError zurückgegeben. |
Eingeklappte unveränderte Abschnitte
- Der Viewer kann Zeilen wie
N unmodified linesanzeigen. - Erweiterungssteuerelemente in diesen Zeilen sind bedingt und nicht für jede Eingabeart garantiert.
- Erweiterungssteuerelemente erscheinen, wenn der gerenderte Diff erweiterbare Kontextdaten enthält, was typisch für Vorher- und Nachher-Eingaben ist.
- Bei vielen Unified-Patch-Eingaben sind ausgelassene Kontextkörper in den geparsten Patch-Hunks nicht verfügbar, sodass die Zeile ohne Erweiterungssteuerelemente erscheinen kann. Dieses Verhalten ist erwartet.
expandUnchangedgilt nur, wenn erweiterbarer Kontext vorhanden ist.
Plugin-Standardeinstellungen
Legen Sie Plugin-weite Standardeinstellungen in~/.openclaw/openclaw.json fest:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmodettlSeconds
Konfiguration persistenter Viewer-URLs
Plugin-eigener Fallback für zurückgegebene Viewer-Links, wenn ein Tool-Aufruf keine
baseUrl übergibt. Muss http oder https sein, ohne Query/Hash.Sicherheitskonfiguration
false: Nicht-loopback-Anfragen an Viewer-Routen werden abgelehnt. true: Remote-Viewer sind zulässig, wenn der tokenisierte Pfad gültig ist.Artefaktlebenszyklus und Speicherung
- Artefakte werden im temporären Unterordner gespeichert:
$TMPDIR/openclaw-diffs. - Viewer-Artefaktmetadaten enthalten:
- zufällige Artefakt-ID (20 Hex-Zeichen)
- zufälliges Token (48 Hex-Zeichen)
createdAtundexpiresAt- gespeicherter
viewer.html-Pfad
- Die Standard-TTL für Artefakte beträgt 30 Minuten, wenn nichts angegeben ist.
- Die maximal akzeptierte Viewer-TTL beträgt 6 Stunden.
- Die Bereinigung läuft opportunistisch nach der Artefakterstellung.
- Abgelaufene Artefakte werden gelöscht.
- Die Fallback-Bereinigung entfernt veraltete Ordner, die älter als 24 Stunden sind, wenn Metadaten fehlen.
Viewer-URL und Netzwerkverhalten
Viewer-Route:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.js, wenn das Diff eine Sprache aus dem Diff Viewer Language Pack verwendet
baseUrl-Pfadpräfix auch für beide Asset-Anfragen beibehalten wird.
Verhalten bei der URL-Erstellung:
- Wenn beim Tool-Aufruf
baseUrlangegeben ist, wird es nach strenger Validierung verwendet. - Andernfalls wird, wenn im Plugin
viewerBaseUrlkonfiguriert ist, dieser Wert verwendet. - Ohne eine der beiden Überschreibungen verwendet die Viewer-URL standardmäßig die Loopback-Adresse
127.0.0.1. - Wenn der Gateway-Bind-Modus
customist undgateway.customBindHostgesetzt ist, wird dieser Host verwendet.
baseUrl-Regeln:
- Muss
http://oderhttps://sein. - Query und Hash werden abgelehnt.
- Origin plus optionaler Basispfad ist erlaubt.
Sicherheitsmodell
Viewer-Härtung
Viewer-Härtung
- Standardmäßig nur Loopback.
- Tokenisierte Viewer-Pfade mit strenger ID- und Token-Validierung.
- CSP der Viewer-Antwort:
default-src 'none'- Skripte und Assets nur von self
- kein ausgehendes
connect-src
- Drosselung von Remote-Fehlschlägen, wenn Remote-Zugriff aktiviert ist:
- 40 Fehlschläge pro 60 Sekunden
- 60 Sekunden Sperre (
429 Too Many Requests)
Härtung des Datei-Renderings
Härtung des Datei-Renderings
- Das Routing von Screenshot-Browseranfragen ist standardmäßig verweigernd.
- Nur lokale Viewer-Assets von
http://127.0.0.1/plugins/diffs/assets/*sind erlaubt. - Externe Netzwerkanfragen werden blockiert.
Browseranforderungen für den Dateimodus
mode: "file" und mode: "both" benötigen einen Chromium-kompatiblen Browser.
Auflösungsreihenfolge:
Umgebungsvariablen
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Fehlerbehebung
Eingabevalidierungsfehler
Eingabevalidierungsfehler
Provide patch or both before and after text.— geben Sie sowohlbeforeals auchafteran oder stellen Siepatchbereit.Provide either patch or before/after input, not both.— mischen Sie die Eingabemodi nicht.Invalid baseUrl: ...— verwenden Sie einehttp(s)-Origin mit optionalem Pfad, ohne Query/Hash.{field} exceeds maximum size (...)— reduzieren Sie die Payload-Größe.- Ablehnung großer Patches — reduzieren Sie die Anzahl der Patch-Dateien oder die Gesamtzahl der Zeilen.
Viewer-Zugänglichkeit
Viewer-Zugänglichkeit
- Die Viewer-URL wird standardmäßig zu
127.0.0.1aufgelöst. - Für Remote-Zugriffsszenarien können Sie entweder:
- im Plugin
viewerBaseUrlsetzen, oder baseUrlpro Tool-Aufruf übergeben, odergateway.bind=customundgateway.customBindHostverwenden
- im Plugin
- Wenn
gateway.trustedProxiesLoopback für einen Same-Host-Proxy enthält (zum Beispiel Tailscale Serve), schlagen rohe Loopback-Viewer-Anfragen ohne weitergeleitete Client-IP-Header absichtlich fail-closed fehl. - Für diese Proxy-Topologie:
- bevorzugen Sie
mode: "file"odermode: "both", wenn Sie nur einen Anhang benötigen, oder - aktivieren Sie bewusst
security.allowRemoteViewerund setzen Sie im PluginviewerBaseUrloder übergeben Sie eine Proxy-/öffentlichebaseUrl, wenn Sie eine teilbare Viewer-URL benötigen
- bevorzugen Sie
- Aktivieren Sie
security.allowRemoteViewernur, wenn Sie externen Viewer-Zugriff beabsichtigen.
Zeile mit unveränderten Zeilen hat keine Aufklappschaltfläche
Zeile mit unveränderten Zeilen hat keine Aufklappschaltfläche
Dies kann bei Patch-Eingaben passieren, wenn der Patch keinen erweiterbaren Kontext enthält. Das ist erwartet und weist nicht auf einen Viewer-Fehler hin.
Artefakt nicht gefunden
Artefakt nicht gefunden
- Artefakt ist wegen TTL abgelaufen.
- Token oder Pfad wurde geändert.
- Bereinigung hat veraltete Daten entfernt.
Operative Leitlinien
- Bevorzugen Sie
mode: "view"für lokale interaktive Reviews im Canvas. - Bevorzugen Sie
mode: "file"für ausgehende Chat-Kanäle, die einen Anhang benötigen. - Lassen Sie
allowRemoteViewerdeaktiviert, sofern Ihre Bereitstellung keine Remote-Viewer-URLs erfordert. - Setzen Sie explizite kurze
ttlSecondsfür sensible Diffs. - Vermeiden Sie es, Secrets in Diff-Eingaben zu senden, wenn dies nicht erforderlich ist.
- Wenn Ihr Kanal Bilder stark komprimiert (zum Beispiel Telegram oder WhatsApp), bevorzugen Sie die PDF-Ausgabe (
fileFormat: "pdf").
Diff-Rendering-Engine powered by Diffs.