diffs, değişiklik içeriğini ajanlar için salt okunur bir diff yapıtına dönüştüren kısa yerleşik sistem rehberliği ve eşlik eden bir skill içeren isteğe bağlı bir Plugin aracıdır.
Şunlardan birini kabul eder:
beforeveaftermetni- birleşik bir
patch
- canvas sunumu için bir Gateway görüntüleyici URL’si
- ileti teslimi için işlenmiş bir dosya yolu (PNG veya PDF)
- tek çağrıda her iki çıktı
Hızlı başlangıç
Yerleşik sistem rehberliğini devre dışı bırakma
diffs aracını etkin tutmak ancak yerleşik sistem istemi rehberliğini devre dışı bırakmak istiyorsanız plugins.entries.diffs.hooks.allowPromptInjection değerini false olarak ayarlayın:
before_prompt_build hook’unu engellerken Plugin’i, aracı ve eşlik eden skill’i kullanılabilir tutar.
Hem rehberliği hem de aracı devre dışı bırakmak istiyorsanız bunun yerine Plugin’i devre dışı bırakın.
Tipik ajan iş akışı
Girdi örnekleri
- Öncesi ve sonrası
- Patch
Araç girdisi başvurusu
Belirtilmediği sürece tüm alanlar isteğe bağlıdır.Özgün metin.
patch atlandığında after ile birlikte gereklidir.Güncellenmiş metin.
patch atlandığında before ile birlikte gereklidir.Birleşik diff metni.
before ve after ile birlikte kullanılamaz.Öncesi ve sonrası modu için görüntülenecek dosya adı.
Öncesi ve sonrası modu için dil geçersiz kılma ipucu. Varsayılan görüntüleyici kümesi dışındaki bilinmeyen değerler ve diller,
Diff Viewer Language Pack Plugin’i yüklü değilse düz metne geri döner.
Görüntüleyici başlığını geçersiz kılma.
Çıktı modu. Varsayılan olarak Plugin varsayılanı
defaults.mode kullanılır. Kullanımdan kaldırılmış takma ad: "image", "file" gibi davranır ve geriye dönük uyumluluk için hâlâ kabul edilir.Görüntüleyici teması. Varsayılan olarak Plugin varsayılanı
defaults.theme kullanılır.Diff düzeni. Varsayılan olarak Plugin varsayılanı
defaults.layout kullanılır.Tam bağlam kullanılabilir olduğunda değişmemiş bölümleri genişletin. Yalnızca çağrı başına seçenektir (Plugin varsayılan anahtarı değildir).
İşlenmiş dosya biçimi. Varsayılan olarak Plugin varsayılanı
defaults.fileFormat kullanılır.PNG veya PDF işleme için kalite ön ayarı.
Cihaz ölçeği geçersiz kılma (
1-4).CSS pikseli cinsinden en yüksek işleme genişliği (
640-2400).Görüntüleyici ve bağımsız dosya çıktıları için saniye cinsinden yapıt TTL’si. En fazla 21600.
Görüntüleyici URL kaynak noktasını geçersiz kılma. Plugin
viewerBaseUrl değerini geçersiz kılar. http veya https olmalıdır, sorgu/hash içeremez.Eski girdi takma adları
Eski girdi takma adları
Geriye dönük uyumluluk için hâlâ kabul edilir:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Doğrulama ve sınırlar
Doğrulama ve sınırlar
beforeveafterher biri en fazla 512 KiB olabilir.patchen fazla 2 MiB olabilir.pathen fazla 2048 bayt olabilir.langen fazla 128 bayt olabilir.titleen fazla 1024 bayt olabilir.- Patch karmaşıklığı üst sınırı: en fazla 128 dosya ve toplam 120000 satır.
patchilebeforeveyaafterbirlikte reddedilir.- İşlenmiş dosya güvenlik sınırları (PNG ve PDF için geçerlidir):
fileQuality: "standard": en fazla 8 MP (8.000.000 işlenmiş piksel).fileQuality: "hq": en fazla 14 MP (14.000.000 işlenmiş piksel).fileQuality: "print": en fazla 24 MP (24.000.000 işlenmiş piksel).- PDF için ayrıca en fazla 50 sayfa sınırı vardır.
Sözdizimi vurgulama
OpenClaw, yaygın kaynak, yapılandırma ve dokümantasyon dilleri için sözdizimi vurgulama içerir: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.
js, ts, bash, md, yml, c++, dockerfile, rb, kt ve ps1 gibi yaygın takma adlar bu varsayılan dillere normalleştirilir.
Diğer dilleri vurgulamak için Diff Viewer Language Pack Plugin’ini yükleyin:
Çıktı ayrıntıları sözleşmesi
Araç, yapılandırılmış meta verileridetails altında döndürür.
Viewer fields
Viewer fields
Görüntüleyici oluşturan modlar için paylaşılan alanlar:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(kullanılabilir olduğundaagentId,sessionId,messageChannel,agentAccountId)
File fields
File fields
PNG veya PDF işlendiğinde dosya alanları:
artifactIdexpiresAtfilePathpath(mesaj aracı uyumluluğu içinfilePathile aynı değer)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Compatibility aliases
Compatibility aliases
Mevcut çağıranlar için ayrıca döndürülür:
format(fileFormatile aynı değer)imagePath(filePathile aynı değer)imageBytes(fileBytesile aynı değer)imageQuality(fileQualityile aynı değer)imageScale(fileScaleile aynı değer)imageMaxWidth(fileMaxWidthile aynı değer)
| Mod | Döndürülenler |
|---|---|
"view" | Yalnızca görüntüleyici alanları. |
"file" | Yalnızca dosya alanları, görüntüleyici artifact’ı yok. |
"both" | Görüntüleyici alanları artı dosya alanları. Dosya işleme başarısız olursa, görüntüleyici yine fileError ve imageError alias’ı ile döner. |
Daraltılmış değiştirilmemiş bölümler
- Görüntüleyici
N unmodified linesgibi satırlar gösterebilir. - Bu satırlardaki genişletme denetimleri koşulludur ve her giriş türü için garanti edilmez.
- Genişletme denetimleri, işlenen diff genişletilebilir bağlam verilerine sahip olduğunda görünür; bu, önceki ve sonraki girişler için tipiktir.
- Birçok unified patch girişinde, atlanan bağlam gövdeleri ayrıştırılmış patch hunk’larında bulunmaz; bu nedenle satır genişletme denetimleri olmadan görünebilir. Bu beklenen davranıştır.
expandUnchangedyalnızca genişletilebilir bağlam mevcut olduğunda uygulanır.
Plugin varsayılanları
Plugin genelindeki varsayılanları~/.openclaw/openclaw.json içinde ayarlayın:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmodettlSeconds
Kalıcı görüntüleyici URL yapılandırması
Bir araç çağrısı
baseUrl iletmediğinde döndürülen görüntüleyici bağlantıları için Plugin’e ait fallback. http veya https olmalıdır, sorgu/hash olmamalıdır.Güvenlik yapılandırması
false: görüntüleyici rotalarına local loopback olmayan istekler reddedilir. true: token’laştırılmış yol geçerliyse uzak görüntüleyicilere izin verilir.Artifact yaşam döngüsü ve depolama
- Yapıtlar geçici alt klasör altında saklanır:
$TMPDIR/openclaw-diffs. - Görüntüleyici yapıt meta verileri şunları içerir:
- rastgele yapıt kimliği (20 onaltılık karakter)
- rastgele token (48 onaltılık karakter)
createdAtveexpiresAt- saklanan
viewer.htmlyolu
- Belirtilmediğinde varsayılan yapıt TTL değeri 30 dakikadır.
- Kabul edilen en yüksek görüntüleyici TTL değeri 6 saattir.
- Temizleme, yapıt oluşturulduktan sonra fırsat buldukça çalışır.
- Süresi dolmuş yapıtlar silinir.
- Meta veriler eksik olduğunda yedek temizleme, 24 saatten eski bayat klasörleri kaldırır.
Görüntüleyici URL’si ve ağ davranışı
Görüntüleyici rotası:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js- diff, Diff Viewer Language Pack içindeki bir dili kullandığında
/plugins/diffs-language-pack/assets/viewer.js
baseUrl yol öneki, her iki varlık isteği için de korunur.
URL oluşturma davranışı:
- Araç çağrısı
baseUrlsağlanırsa, sıkı doğrulamadan sonra kullanılır. - Aksi halde Plugin
viewerBaseUrlyapılandırılmışsa, o kullanılır. - Her iki geçersiz kılma da yoksa, görüntüleyici URL’si varsayılan olarak loopback
127.0.0.1değerini kullanır. - Gateway bağlama modu
customise vegateway.customBindHostayarlanmışsa, bu ana makine kullanılır.
baseUrl kuralları:
http://veyahttps://olmalıdır.- Sorgu ve hash reddedilir.
- Origin ile isteğe bağlı temel yola izin verilir.
Güvenlik modeli
Görüntüleyici sertleştirme
Görüntüleyici sertleştirme
- Varsayılan olarak yalnızca loopback.
- Sıkı kimlik ve token doğrulamasıyla tokenlaştırılmış görüntüleyici yolları.
- Görüntüleyici yanıtı CSP:
default-src 'none'- betikler ve varlıklar yalnızca self kaynağından
- dışa giden
connect-srcyok
- Uzak erişim etkinleştirildiğinde uzak kaçırmaları sınırlama:
- 60 saniyede 40 hata
- 60 saniyelik kilitleme (
429 Too Many Requests)
Dosya işleme sertleştirme
Dosya işleme sertleştirme
- Ekran görüntüsü tarayıcı isteği yönlendirmesi varsayılan olarak reddeder.
- Yalnızca
http://127.0.0.1/plugins/diffs/assets/*adresindeki 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üm sırası:
Ortam değişkenleri
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Sorun giderme
Girdi doğrulama hataları
Girdi doğrulama hataları
Provide patch or both before and after text.— hembeforehem deafterekleyin 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ı yollahttp(s)origin kullanın; sorgu/hash kullanmayın.{field} exceeds maximum size (...)— yük boyutunu azaltın.- Büyük patch reddi — patch 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.1değerine çözümlenir. - Uzak erişim senaryolarında şunlardan birini yapın:
- Plugin
viewerBaseUrlayarlayın veya - araç çağrısı başına
baseUrlgeçin veya gateway.bind=customvegateway.customBindHostkullanın
- Plugin
gateway.trustedProxies, aynı ana makinedeki bir proxy için loopback içeriyorsa (örneğin Tailscale Serve), iletilmiş istemci IP başlıkları olmadan ham loopback görüntüleyici istekleri tasarım gereği kapalı başarısız olur.- Bu proxy topolojisi için:
- yalnızca bir ek gerektiğinde
mode: "file"veyamode: "both"tercih edin ya da - paylaşılabilir bir görüntüleyici URL’sine ihtiyaç duyduğunuzda bilinçli olarak
security.allowRemoteVieweretkinleştirin ve PluginviewerBaseUrlayarlayın ya da bir proxy/genelbaseUrlgeçin
- yalnızca bir ek gerektiğinde
security.allowRemoteVieweryalnızca harici görüntüleyici erişimi amaçladığınızda 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
Patch genişletilebilir bağlam taşımadığında bu durum patch girdisi için gerçekleşebilir. Bu beklenen bir durumdur ve görüntüleyici hatasına işaret etmez.
Yapıt bulunamadı
Yapıt bulunamadı
- Yapıtın süresi TTL nedeniyle doldu.
- Token veya yol değişti.
- Temizleme bayat verileri kaldırdı.
Operasyonel rehberlik
- Canvas içinde yerel etkileşimli incelemeler için
mode: "view"tercih edin. - Ek gerektiren dışa giden sohbet kanalları için
mode: "file"tercih edin. - Dağıtımınız uzak görüntüleyici URL’leri gerektirmedikçe
allowRemoteViewerdevre dışı bırakılmış kalsın. - Hassas diffs için açık ve kısa
ttlSecondsayarlayın. - Gerekli olmadığında diff girdisinde gizli bilgiler göndermekten kaçının.
- Kanalınız görüntüleri agresif biçimde sıkıştırıyorsa (örneğin Telegram veya WhatsApp), PDF çıktısını tercih edin (
fileFormat: "pdf").
Diff işleme motoru Diffs tarafından sağlanır.