diffs, önce/sonra metnini veya birleşik bir yamayı salt okunur bir fark yapıtına dönüştüren, isteğe bağlı bir paketlenmiş Plugin aracıdır. Ayrıca sistem isteminin başına kısa aracı yönergeleri ekler ve daha kapsamlı talimatlar için tamamlayıcı bir Skills paketiyle birlikte gelir.
Girdi: before + after metni veya birleşik bir patch (birbirini dışlar).
Çıktı: tuval sunumu için bir Gateway görüntüleyici URL’si, ileti teslimi için işlenmiş bir PNG/PDF dosya yolu veya her ikisi.
Hızlı başlangıç
1
Plugin'i yükleyin
2
Plugin'i etkinleştirin
3
Bir mod seçin
- view
- file
- both
Önceliği tuvale veren akışlar: aracılar
diffs öğesini mode: "view" ile çağırır ve details.viewerUrl öğesini canvas present ile açar.Yerleşik sistem yönergelerini devre dışı bırakma
Aracı koruyup sistem isteminin başına eklenen yönergeleri kaldırmak içinplugins.entries.diffs.hooks.allowPromptInjection değerini false olarak ayarlayın:
before_prompt_build kancasını engeller. Hem yönergeleri hem de aracı devre dışı bırakmak için bunun yerine Plugin’i devre dışı bırakın.
Araç girdisi başvurusu
Belirtilmedikçe tüm alanlar isteğe bağlıdır.string
Özgün metin.
patch atlandığında after ile birlikte gereklidir.string
Güncellenmiş metin.
patch atlandığında before ile birlikte gereklidir.string
Birleşik fark metni.
before ve after ile birbirini dışlar.string
Önce/sonra modu için görüntülenecek dosya adı.
string
Önce/sonra modu için dil geçersiz kılma ipucu. Bilinmeyen değerler ve varsayılan görüntüleyici kümesinin dışındaki diller, Diff Viewer Language Pack Plugin’i yüklü olmadığı sürece düz metne geri döner.
string
Görüntüleyici başlığını geçersiz kılar.
"view" | "file" | "both"
Çıktı modu. Varsayılan olarak Plugin’in
defaults.mode değerini (both) kullanır. Kullanımdan kaldırılmış diğer ad: "image", "file" ile aynı şekilde davranır."light" | "dark"
Görüntüleyici teması. Varsayılan olarak Plugin’in
defaults.theme değerini kullanır."unified" | "split"
Fark düzeni. Varsayılan olarak Plugin’in
defaults.layout değerini kullanır.boolean
Tam bağlam kullanılabilir olduğunda değişmemiş bölümleri genişletir. Yalnızca çağrı başına seçenektir (Plugin varsayılan anahtarı değildir).
"png" | "pdf"
İşlenmiş dosya biçimi. Varsayılan olarak Plugin’in
defaults.fileFormat değerini kullanır."standard" | "hq" | "print"
PNG/PDF işleme için kalite önayarı.
number
Cihaz ölçeğini geçersiz kılar (
1-4).number
CSS pikseli cinsinden en fazla işleme genişliği (
640-2400).number
varsayılan:"1800"
Görüntüleyici ve bağımsız dosya çıktıları için saniye cinsinden yapıt TTL’si. En fazla
21600.string
Görüntüleyici URL kaynağını geçersiz kılar. Plugin’in
viewerBaseUrl değerini geçersiz kılar. http veya https olmalıdır; sorgu/karması içeremez.Doğrulama ve sınırlar
Doğrulama ve sınırlar
before/after: her biri en fazla 512 KiB.patch: en fazla 2 MiB.path: en fazla 2048 bayt.lang: en fazla 128 bayt.title: en fazla 1024 bayt.- Yama karmaşıklığı sınırı: en fazla 128 dosya ve toplam 120000 satır.
patchöğesininbefore/afterile birlikte kullanılması reddedilir.- İşlenmiş dosya güvenlik sınırları (PNG ve PDF):
fileQuality: "standard": en fazla 8 MP (8,000,000 işlenmiş piksel).fileQuality: "hq": en fazla 14 MP.fileQuality: "print": en fazla 24 MP.- PDF ayrıca 50 sayfayla sınırlandırılır.
Sözdizimi vurgulama
Yerleşik diller: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 ve toml.
Yaygın diğer adlar (js, ts, bash, md, yml, c++, dockerfile, rb, kt, ps1 vb.) bu dillere normalleştirilir.
Daha fazla dil (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 ve diğerleri) için Diff Viewer Language Pack Plugin’ini yükleyin:
Çıktı ayrıntıları sözleşmesi
Tüm başarılı sonuçlarchanged içerir: özdeş önce/sonra girdisi yapıt oluşturmadan false döndürür; işlenmiş sonuçlar true döndürür.
Görüntüleyici alanları (view ve both modları)
Görüntüleyici alanları (view ve both modları)
changedartifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(kullanılabilir olduğundaagentId,sessionId,messageChannel,agentAccountId)
Dosya alanları (file ve both modları)
Dosya alanları (file ve both modları)
changedartifactIdexpiresAtfilePathpath(ileti aracı uyumluluğu içinfilePathile aynı değer)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Daraltılmış değişmemiş bölümler
Görüntüleyici,N unmodified lines gibi satırlar gösterir. Genişletme denetimleri yalnızca işlenmiş farkta genişletilebilir bağlam verileri olduğunda görünür (önce/sonra girdisinde yaygındır). Birçok birleşik yama, parçalarında bağlam gövdelerini içermez; bu nedenle satır genişletme denetimi olmadan görünebilir — bu beklenen bir durumdur, hata değildir. expandUnchanged yalnızca genişletilebilir bağlam bulunduğunda geçerlidir.
Çok dosyalı gezinme
Birden fazla dosyaya dokunan yamalar, değiştirilen dosyaların özet kartıyla başlar: toplam+N / -N sayıları, dosya başına sayılar, eklendi/silindi/yeniden adlandırıldı rozetleri ve her dosyaya atlayan bağlantı bağlantıları. İşlenmiş PNG/PDF dosyaları dosya başına başlık sayılarını korur, ancak statik dosyada işlevsiz oldukları için etkileşimli görünüm geçişlerini kaldırır.
Plugin varsayılanları
Plugin genelindeki varsayılanları~/.openclaw/openclaw.json içinde ayarlayın:
defaults anahtarları: fontFamily, fontSize, lineSpacing, layout, showLineNumbers, diffIndicators, wordWrap, background, theme, fileFormat, fileQuality, fileScale, fileMaxWidth, mode, ttlSeconds. Açık araç çağrısı parametreleri bunları geçersiz kılar.
Kalıcı görüntüleyici URL yapılandırması
string
Bir araç çağrısı
baseUrl değerini geçmediğinde, döndürülen görüntüleyici bağlantıları için Plugin’in sahip olduğu geri dönüş değeri. http veya https olmalıdır; sorgu/karması içeremez.Güvenlik yapılandırması
boolean
varsayılan:"false"
false: geri döngü dışındaki görüntüleyici rotası istekleri reddedilir. true: belirteçli yol geçerliyse uzak görüntüleyicilere izin verilir.Yapıt yaşam döngüsü ve depolama
- Görüntüleyici HTML’si ve meta veriler, Diffs plugin blob ad alanı altındaki paylaşılan
state/openclaw.sqliteveritabanında bulunur. HTML gzip ile sıkıştırılır; SQLite rastgele URL belirtecinin kendisini değil, yalnızca SHA-256 karmasını depolar. - İşlenen PNG/PDF dosyaları, kanal teslimi bir dosya yolu gerektirdiğinden
$TMPDIR/openclaw-diffsaltında geçici somutlaştırmalar olarak kalır. Bunların süre sonu meta verilerinin sahibi SQLite’tır; hiçbir JSON yan dosyası yazılmaz. - Varsayılan yapıt TTL’si: 30 dakika. Kabul edilen azami TTL: 6 saat.
- Temizleme, her yapıt oluşturma çağrısından sonra fırsat buldukça çalışır. Önce süresi dolmuş SQLite satırları, ardından bunlara karşılık gelen PNG/PDF dizinleri silinir.
- Yedek bir tarama, satırı olmayan ve 24 saatten eski geçici klasörleri kaldırır. Eski
meta.json,file-meta.jsonveviewer.htmlönbellekleri içe aktarılmaz veya okunmaz.
Görüntüleyici URL’si ve ağ davranışı
Görüntüleyici rotası:/plugins/diffs/view/{artifactId}/{token}
Görüntüleyici varlıkları:
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.js(yalnızca fark bir dil paketi dili kullandığında)
baseUrl yol öneki de varlık isteklerine aktarılır.
URL çözümleme sırası: araç çağrısı baseUrl (katı doğrulamanın ardından) -> plugin viewerBaseUrl -> varsayılan geri döngü 127.0.0.1. Gateway bağlama modu custom ise ve gateway.customBindHost ayarlanmışsa geri döngü yerine bu ana makine kullanılır.
baseUrl kuralları: http:// veya https:// olmalıdır; sorgu ve karma reddedilir; kaynak ile isteğe bağlı temel yola izin verilir.
Güvenlik modeli
Görüntüleyici sağlamlaştırma
Görüntüleyici sağlamlaştırma
- Varsayılan olarak yalnızca geri döngü.
- Katı kimlik ve belirteç kalıbı doğrulamasına sahip belirteçli görüntüleyici yolları.
- Görüntüleyici yanıtı CSP’si:
default-src 'none'; betikler/varlıklar yalnızca aynı kaynaktan; dışarıya yönelikconnect-srcyoktur. - Uzak erişim etkinleştirildiğinde uzak isabet etmeme hız sınırlaması: 60 saniyede 40 hata, 60 saniyelik kilitlemeyi tetikler (
429 Too Many Requests).
Dosya işleme sağlamlaştırması
Dosya işleme sağlamlaştırması
- Ekran görüntüsü tarayıcısı istek yönlendirmesi varsayılan olarak reddeder.
- Yalnızca
http://127.0.0.1/plugins/diffs/assets/*kaynağındaki yerel görüntüleyici varlıklarına izin verilir. - Harici ağ istekleri engellenir.
Dosya modu için tarayıcı gereksinimleri
mode: "file" ve mode: "both", Chromium uyumlu bir tarayıcı gerektirir.
Çözümleme sırası:
1
Yapılandırma
OpenClaw yapılandırmasındaki
browser.executablePath.2
Ortam değişkenleri
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
3
Platform yedeği
Chrome, Chromium, Edge ve Brave için yaygın kurulum yolları ve
PATH aramaları.Diff PNG/PDF rendering requires a Chromium-compatible browser.... Chrome, Chromium, Edge veya Brave’i yükleyerek ya da yukarıdaki yürütülebilir dosya yolu seçeneklerinden birini ayarlayarak düzeltin.
Sorun giderme
Girdi doğrulama hataları
Girdi doğrulama hataları
Provide patch or both before and after text.— hembeforehem deafterdeğerlerini ekleyin veyapatchsağlayın.Provide either patch or before/after input, not both.— girdi modlarını karıştırmayın.Invalid baseUrl: ...— isteğe bağlı yola sahip, sorgu/karması olmayan birhttp(s)kaynağı kullanın.{field} exceeds maximum size (...)— yük boyutunu azaltın.- Büyük yama reddi — yama dosyası sayısını veya toplam satır sayısını azaltın.
Görüntüleyici erişilebilirliği
Görüntüleyici erişilebilirliği
- Görüntüleyici URL’si varsayılan olarak
127.0.0.1olarak çözümlenir. - Uzak erişim için plugin
viewerBaseUrldeğerini ayarlayın, her çağrıdabaseUrliletin veyagateway.bind=customdeğerinigateway.customBindHostile kullanın. - Aynı ana makinedeki bir proxy için (örneğin Tailscale Serve)
gateway.trustedProxiesgeri döngüyü içeriyorsa iletilen istemci IP’si üst bilgileri bulunmayan ham geri döngü görüntüleyici istekleri tasarım gereği kapalı biçimde başarısız olur. - Bu proxy topolojisinde bir ek için
mode: "file"/"both"kullanmayı tercih edin veya paylaşılabilir bir görüntüleyici bağlantısı içinsecurity.allowRemoteViewerile birlikte pluginviewerBaseUrl/bir proxybaseUrldeğerini bilinçli olarak etkinleştirin. security.allowRemoteViewerseçeneğini yalnızca harici görüntüleyici erişimi amaçlandığında etkinleştirin.
Değiştirilmemiş satırlar satırında genişletme düğmesi yok
Değiştirilmemiş satırlar satırında genişletme düğmesi yok
Genişletilebilir bağlam içermeyen yama girdisi için beklenen davranıştır; görüntüleyici hatası değildir.
Yapıt bulunamadı
Yapıt bulunamadı
- Yapıtın süresi TTL nedeniyle doldu.
- Belirteç veya yol değişti.
- Temizleme eski verileri kaldırdı.
Operasyonel rehberlik
- Canvas’taki yerel etkileşimli incelemeler için
mode: "view"kullanmayı tercih edin. - Ek gerektiren giden sohbet kanalları için
mode: "file"kullanmayı tercih edin. - Dağıtımınız uzak görüntüleyici URL’leri gerektirmedikçe
allowRemoteViewerseçeneğini devre dışı tutun. - Hassas farklar için açıkça kısa bir
ttlSecondsayarlayın. - Gerekli olmadığında fark girdisinde gizli bilgiler göndermekten kaçının.
- Kanalınız görüntüleri yoğun biçimde sıkıştırıyorsa (örneğin Telegram veya WhatsApp), PDF çıktısını (
fileFormat: "pdf") tercih edin.
Fark işleme motoru Diffs tarafından desteklenmektedir.