Tools
Farklar
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ıç
Plugin'i yükleyin
openclaw plugins install diffsPlugin'i etkinleştirin
{ plugins: { entries: { diffs: { enabled: true, }, }, },}Bir mod seçin
view
Ö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.
file
Sohbet dosyası teslimi: aracılar diffs öğesini mode: "file" ile çağırır ve details.filePath öğesini message ile, path veya filePath kullanarak gönderir.
both
Birleşik (varsayılan): aracılar her iki yapıtı tek çağrıda almak için diffs öğesini mode: "both" ile çağırır.
Yerleşik sistem yönergelerini devre dışı bırakma
Aracı koruyup sistem isteminin başına eklenen yönergeleri kaldırmak için plugins.entries.diffs.hooks.allowPromptInjection değerini false olarak ayarlayın:
{ plugins: { entries: { diffs: { enabled: true, hooks: { allowPromptInjection: false, }, }, }, },}Bu, araç ve Skills kullanılabilir durumda kalırken Plugin'in 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.
beforestringÖzgün metin. patch atlandığında after ile birlikte gereklidir.
afterstringGüncellenmiş metin. patch atlandığında before ile birlikte gereklidir.
patchstringBirleşik fark metni. before ve after ile birbirini dışlar.
pathstringÖnce/sonra modu için görüntülenecek dosya adı.
langstringÖ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.
titlestringGörüntüleyici başlığını geçersiz kılar.
mode"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.
theme"light" | "dark"Görüntüleyici teması. Varsayılan olarak Plugin'in defaults.theme değerini kullanır.
layout"unified" | "split"Fark düzeni. Varsayılan olarak Plugin'in defaults.layout değerini kullanır.
expandUnchangedbooleanTam 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).
fileFormat"png" | "pdf"İşlenmiş dosya biçimi. Varsayılan olarak Plugin'in defaults.fileFormat değerini kullanır.
fileQuality"standard" | "hq" | "print"PNG/PDF işleme için kalite önayarı.
fileScalenumberCihaz ölçeğini geçersiz kılar (1-4).
fileMaxWidthnumberCSS pikseli cinsinden en fazla işleme genişliği (640-2400).
ttlSecondsnumberdefault: 1800Görüntüleyici ve bağımsız dosya çıktıları için saniye cinsinden yapıt TTL'si. En fazla 21600.
baseUrlstringGö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
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:
openclaw plugins install clawhub:@openclaw/diffs-language-packPaket olmadan da desteklenmeyen diller okunabilir düz metin olarak işlenir. Üst kaynak kataloğu için Diffs Language Pack Plugin'i ve Shiki dilleri sayfalarına bakın.
Çıktı ayrıntıları sözleşmesi
Tüm başarılı sonuçlar changed 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ı)
changedartifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(kullanılabilir olduğundaagentId,sessionId,messageChannel,agentAccountId)
Dosya alanları (file ve both modları)
changedartifactIdexpiresAtfilePathpath(ileti aracı uyumluluğu içinfilePathile aynı değer)fileBytesfileFormatfileQualityfileScalefileMaxWidth
| Mod | Döndürülen |
|---|---|
"view" |
Yalnızca görüntüleyici alanları. |
"file" |
Yalnızca dosya alanları; görüntüleyici yapıtı yoktur. |
"both" |
Görüntüleyici alanları ve dosya alanları. Dosya işleme başarısız olursa görüntüleyici yine fileError ile döndürülür. |
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:
{ plugins: { entries: { diffs: { enabled: true, config: { defaults: { fontFamily: "Fira Code", fontSize: 15, lineSpacing: 1.6, layout: "unified", showLineNumbers: true, diffIndicators: "bars", wordWrap: true, background: true, theme: "dark", fileFormat: "png", fileQuality: "standard", fileScale: 2, fileMaxWidth: 960, mode: "both", ttlSeconds: 21600, }, }, }, }, },}Desteklenen 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ı
viewerBaseUrlstringBir 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.
{ plugins: { entries: { diffs: { enabled: true, config: { viewerBaseUrl: "https://gateway.example.com/openclaw", }, }, }, },}Güvenlik yapılandırması
security.allowRemoteViewerbooleandefault: falsefalse: 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.
{ plugins: { entries: { diffs: { enabled: true, config: { security: { allowRemoteViewer: false, }, }, }, }, },}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)
Görüntüleyici belgesi bu varlıkları görüntüleyici URL'sine göre çözümler; dolayısıyla isteğe bağlı bir 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
- 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ı
- 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ı:
Yapılandırma
OpenClaw yapılandırmasındaki browser.executablePath.
Ortam değişkenleri
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Platform yedeği
Chrome, Chromium, Edge ve Brave için yaygın kurulum yolları ve PATH aramaları.
Yaygın hata metni: 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ı
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 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
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ı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.