diffs è uno strumento Plugin opzionale con una breve guida di sistema integrata e una Skill associata che trasforma il contenuto delle modifiche in un artefatto diff di sola lettura per gli agenti.
Accetta alternativamente:
- testo
beforeeafter - una
patchunificata
- un URL del visualizzatore Gateway per la presentazione su canvas
- un percorso di file renderizzato (PNG o PDF) per la consegna dei messaggi
- entrambi gli output in una sola chiamata
Avvio rapido
Disabilitare la guida di sistema integrata
Se vuoi mantenere abilitato lo strumentodiffs ma disabilitare la sua guida integrata nel prompt di sistema, imposta plugins.entries.diffs.hooks.allowPromptInjection su false:
before_prompt_build del Plugin diffs mantenendo disponibili il Plugin, lo strumento e la Skill associata.
Se vuoi disabilitare sia la guida sia lo strumento, disabilita invece il Plugin.
Flusso di lavoro tipico dell’agente
Esempi di input
- Before and after
- Patch
Riferimento dell’input dello strumento
Tutti i campi sono opzionali, salvo diversa indicazione.Testo originale. Obbligatorio con
after quando patch è omesso.Testo aggiornato. Obbligatorio con
before quando patch è omesso.Testo diff unificato. Mutuamente esclusivo con
before e after.Nome file visualizzato per la modalità before e after.
Suggerimento di override della lingua per la modalità before e after. I valori sconosciuti e le lingue al di fuori del set predefinito del visualizzatore ripiegano sul testo normale, a meno che il Plugin
Diff Viewer Language Pack non sia installato.
Override del titolo del visualizzatore.
Modalità di output. Il valore predefinito è il valore predefinito del Plugin
defaults.mode. Alias deprecato: "image" si comporta come "file" ed è ancora accettato per compatibilità all’indietro.Tema del visualizzatore. Il valore predefinito è il valore predefinito del Plugin
defaults.theme.Layout del diff. Il valore predefinito è il valore predefinito del Plugin
defaults.layout.Espande le sezioni non modificate quando il contesto completo è disponibile. Opzione solo per singola chiamata (non una chiave predefinita del Plugin).
Formato del file renderizzato. Il valore predefinito è il valore predefinito del Plugin
defaults.fileFormat.Preset di qualità per il rendering PNG o PDF.
Override della scala del dispositivo (
1-4).Larghezza massima di rendering in pixel CSS (
640-2400).TTL dell’artefatto in secondi per gli output del visualizzatore e dei file autonomi. Massimo 21600.
Override dell’origine dell’URL del visualizzatore. Sovrascrive
viewerBaseUrl del Plugin. Deve essere http o https, senza query/hash.Legacy input aliases
Legacy input aliases
Ancora accettati per compatibilità all’indietro:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Validation and limits
Validation and limits
beforeeaftermassimo 512 KiB ciascuno.patchmassimo 2 MiB.pathmassimo 2048 byte.langmassimo 128 byte.titlemassimo 1024 byte.- Limite di complessità della patch: massimo 128 file e 120000 righe totali.
patchinsieme abeforeoafterviene rifiutato.- Limiti di sicurezza per i file renderizzati (si applicano a PNG e PDF):
fileQuality: "standard": massimo 8 MP (8.000.000 pixel renderizzati).fileQuality: "hq": massimo 14 MP (14.000.000 pixel renderizzati).fileQuality: "print": massimo 24 MP (24.000.000 pixel renderizzati).- Anche il PDF ha un massimo di 50 pagine.
Evidenziazione della sintassi
OpenClaw include l’evidenziazione della sintassi per linguaggi comuni di sorgente, configurazione e documentazione: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 e toml.
Alias comuni come js, ts, bash, md, yml, c++, dockerfile, rb, kt e ps1 sono normalizzati a quei linguaggi predefiniti.
Installa il Plugin Diff Viewer Language Pack per evidenziare altri linguaggi:
Contratto dei dettagli di output
Lo strumento restituisce metadati strutturati sottodetails.
Campi del visualizzatore
Campi del visualizzatore
Campi condivisi per le modalità che creano un visualizzatore:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountIdquando disponibile)
Campi file
Campi file
Campi file quando viene renderizzato PNG o PDF:
artifactIdexpiresAtfilePathpath(stesso valore difilePath, per compatibilità con lo strumento di messaggistica)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Alias di compatibilità
Alias di compatibilità
Restituiti anche per i chiamanti esistenti:
format(stesso valore difileFormat)imagePath(stesso valore difilePath)imageBytes(stesso valore difileBytes)imageQuality(stesso valore difileQuality)imageScale(stesso valore difileScale)imageMaxWidth(stesso valore difileMaxWidth)
| Modalità | Cosa viene restituito |
|---|---|
"view" | Solo campi del visualizzatore. |
"file" | Solo campi file, nessun artefatto del visualizzatore. |
"both" | Campi del visualizzatore più campi file. Se il rendering del file non riesce, il visualizzatore viene comunque restituito con fileError e l’alias imageError. |
Sezioni invariate compresse
- Il visualizzatore può mostrare righe come
N unmodified lines. - I controlli di espansione su tali righe sono condizionali e non garantiti per ogni tipo di input.
- I controlli di espansione vengono visualizzati quando il diff renderizzato contiene dati di contesto espandibili, cosa tipica per input prima e dopo.
- Per molti input patch unificati, i corpi del contesto omessi non sono disponibili negli hunk della patch analizzata, quindi la riga può comparire senza controlli di espansione. Questo è il comportamento previsto.
expandUnchangedsi applica solo quando esiste un contesto espandibile.
Valori predefiniti del Plugin
Imposta i valori predefiniti a livello di Plugin in~/.openclaw/openclaw.json:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmodettlSeconds
Configurazione URL persistente del visualizzatore
Fallback di proprietà del Plugin per i link del visualizzatore restituiti quando una chiamata dello strumento non passa
baseUrl. Deve essere http o https, senza query/hash.Configurazione di sicurezza
false: le richieste non-loopback alle route del visualizzatore vengono negate. true: i visualizzatori remoti sono consentiti se il percorso tokenizzato è valido.Ciclo di vita e archiviazione degli artefatti
- Gli artefatti sono archiviati nella sottocartella temporanea:
$TMPDIR/openclaw-diffs. - I metadati dell’artefatto del visualizzatore contengono:
- ID artefatto casuale (20 caratteri esadecimali)
- token casuale (48 caratteri esadecimali)
createdAtedexpiresAt- percorso
viewer.htmlarchiviato
- La TTL predefinita dell’artefatto è di 30 minuti quando non specificata.
- La TTL massima accettata per il visualizzatore è di 6 ore.
- La pulizia viene eseguita in modo opportunistico dopo la creazione dell’artefatto.
- Gli artefatti scaduti vengono eliminati.
- La pulizia di fallback rimuove le cartelle obsolete più vecchie di 24 ore quando mancano i metadati.
URL del visualizzatore e comportamento di rete
Route del visualizzatore:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.jsquando il diff usa una lingua del Diff Viewer Language Pack
baseUrl facoltativo viene preservato anche per entrambe le richieste di asset.
Comportamento di costruzione dell’URL:
- Se viene fornito
baseUrldella tool-call, viene usato dopo una validazione rigorosa. - Altrimenti, se è configurato
viewerBaseUrldel Plugin, viene usato. - Senza nessuna delle due sostituzioni, l’URL del visualizzatore usa per impostazione predefinita il loopback
127.0.0.1. - Se la modalità di bind del Gateway è
customegateway.customBindHostè impostato, viene usato quell’host.
baseUrl:
- Deve essere
http://ohttps://. - Query e hash vengono rifiutati.
- Sono consentiti origin più percorso base facoltativo.
Modello di sicurezza
Irrigidimento del visualizzatore
Irrigidimento del visualizzatore
- Solo loopback per impostazione predefinita.
- Percorsi del visualizzatore tokenizzati con validazione rigorosa di ID e token.
- CSP della risposta del visualizzatore:
default-src 'none'- script e asset solo da self
- nessun
connect-srcin uscita
- Throttling dei miss remoti quando l’accesso remoto è abilitato:
- 40 errori ogni 60 secondi
- lockout di 60 secondi (
429 Too Many Requests)
Irrigidimento del rendering dei file
Irrigidimento del rendering dei file
- L’instradamento delle richieste del browser per screenshot è deny-by-default.
- Sono consentiti solo asset locali del visualizzatore da
http://127.0.0.1/plugins/diffs/assets/*. - Le richieste di rete esterne sono bloccate.
Requisiti del browser per la modalità file
mode: "file" e mode: "both" richiedono un browser compatibile con Chromium.
Ordine di risoluzione:
Variabili d'ambiente
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Risoluzione dei problemi
Errori di validazione dell'input
Errori di validazione dell'input
Provide patch or both before and after text.— includi siabeforesiaafter, oppure forniscipatch.Provide either patch or before/after input, not both.— non mescolare le modalità di input.Invalid baseUrl: ...— usa un originhttp(s)con percorso facoltativo, senza query/hash.{field} exceeds maximum size (...)— riduci la dimensione del payload.- Rifiuto di patch di grandi dimensioni — riduci il numero di file della patch o le righe totali.
Accessibilità del visualizzatore
Accessibilità del visualizzatore
- L’URL del visualizzatore si risolve in
127.0.0.1per impostazione predefinita. - Per scenari di accesso remoto:
- imposta
viewerBaseUrldel Plugin, oppure - passa
baseUrlper ogni tool call, oppure - usa
gateway.bind=customegateway.customBindHost
- imposta
- Se
gateway.trustedProxiesinclude loopback per un proxy sullo stesso host (ad esempio Tailscale Serve), le richieste raw al visualizzatore su loopback senza intestazioni client-IP inoltrate falliscono chiuse per progettazione. - Per quella topologia proxy:
- preferisci
mode: "file"omode: "both"quando ti serve solo un allegato, oppure - abilita intenzionalmente
security.allowRemoteViewere impostaviewerBaseUrldel Plugin o passa unbaseUrlproxy/pubblico quando ti serve un URL del visualizzatore condivisibile
- preferisci
- Abilita
security.allowRemoteViewersolo quando intendi consentire l’accesso esterno al visualizzatore.
La riga delle righe non modificate non ha pulsante di espansione
La riga delle righe non modificate non ha pulsante di espansione
Questo può accadere per l’input patch quando la patch non contiene contesto espandibile. È previsto e non indica un errore del visualizzatore.
Artefatto non trovato
Artefatto non trovato
- Artefatto scaduto a causa della TTL.
- Token o percorso modificato.
- La pulizia ha rimosso dati obsoleti.
Indicazioni operative
- Preferisci
mode: "view"per revisioni interattive locali nel canvas. - Preferisci
mode: "file"per canali chat in uscita che richiedono un allegato. - Mantieni
allowRemoteViewerdisabilitato salvo che il tuo deployment richieda URL del visualizzatore remoti. - Imposta
ttlSecondsbrevi espliciti per diff sensibili. - Evita di inviare segreti nell’input del diff quando non necessario.
- Se il tuo canale comprime le immagini in modo aggressivo (ad esempio Telegram o WhatsApp), preferisci l’output PDF (
fileFormat: "pdf").
Motore di rendering dei diff basato su Diffs.