Tools
Farklar
diffs, kısa yerleşik sistem yönergelerine ve değişiklik içeriğini aracıların kullanımı için salt okunur bir diff yapıtına dönüştüren eşlik eden bir skill’e sahip isteğe bağlı bir plugin aracıdır.
Şunlardan birini kabul eder:
beforeveaftermetni- unified
patch
Şunları döndürebilir:
- canvas sunumu için Gateway görüntüleyici URL’si
- ileti teslimi için işlenmiş dosya yolu (PNG veya PDF)
- tek çağrıda iki çıktı birden
Etkinleştirildiğinde plugin, sistem istemi alanına kısa kullanım yönergeleri ekler ve aracının daha kapsamlı talimatlara ihtiyaç duyduğu durumlar için ayrıntılı bir skill de sunar.
Hızlı başlangıç
Install the plugin
openclaw plugins install diffs
Enable the plugin
{
plugins: {
entries: {
diffs: {
enabled: true,
},
},
},
}
Pick a mode
view
Canvas öncelikli akışlar: aracılar diffs aracını mode: "view" ile çağırır ve details.viewerUrl değerini canvas present ile açar.
file
Sohbet dosyası teslimi: aracılar diffs aracını mode: "file" ile çağırır ve details.filePath değerini message ile, path veya filePath kullanarak gönderir.
both
Birleşik: aracılar tek çağrıda iki yapıtı da almak için diffs aracını mode: "both" ile çağırır.
Yerleşik sistem yönergelerini devre dışı bırakma
diffs aracını etkin tutup yerleşik sistem istemi yönergelerini devre dışı bırakmak istiyorsanız plugins.entries.diffs.hooks.allowPromptInjection değerini false olarak ayarlayın:
{
plugins: {
entries: {
diffs: {
enabled: true,
hooks: {
allowPromptInjection: false,
},
},
},
},
}
Bu, plugin’i, aracı ve eşlik eden skill’i kullanılabilir tutarken diffs plugin’inin before_prompt_build hook’unu engeller.
Hem yönergeleri hem de aracı devre dışı bırakmak istiyorsanız bunun yerine plugin’i devre dışı bırakın.
Tipik aracı iş akışı
Call diffs
Aracı, girdilerle birlikte diffs aracını çağırır.
Read details
Aracı yanıttaki details alanlarını okur.
Present
Aracı ya details.viewerUrl değerini canvas present ile açar, ya details.filePath değerini message ile path veya filePath kullanarak gönderir ya da ikisini birden yapar.
Girdi örnekleri
Before and after
{
"before": "# Hello\n\nOne",
"after": "# Hello\n\nTwo",
"path": "docs/example.md",
"mode": "view"
}
Patch
{
"patch": "diff --git a/src/example.ts b/src/example.ts\n--- a/src/example.ts\n+++ b/src/example.ts\n@@ -1 +1 @@\n-const x = 1;\n+const x = 2;\n",
"mode": "both"
}
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.
patchstringUnified diff metni. before ve after ile karşılıklı olarak dışlayıcıdır.
pathstringbefore ve after modu için görüntüleme dosya adı.
langstringbefore ve after modu için dil geçersiz kılma ipucu. Bilinmeyen değerler düz metne geri döner.
titlestringGörüntüleyici başlığı geçersiz kılma.
mode"view" | "file" | "both"Çı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.
theme"light" | "dark"Görüntüleyici teması. Varsayılan olarak plugin varsayılanı defaults.theme kullanılır.
layout"unified" | "split"Diff yerleşimi. Varsayılan olarak plugin varsayılanı defaults.layout kullanılır.
expandUnchangedbooleanTam bağlam kullanılabilir olduğunda değişmeyen 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 varsayılanı defaults.fileFormat kullanılır.
fileQuality"standard" | "hq" | "print"PNG veya PDF işleme için kalite ön ayarı.
fileScalenumberCihaz ölçeği geçersiz kılma (1-4).
fileMaxWidthnumberCSS pikseli cinsinden en fazla işleme genişliği (640-2400).
ttlSecondsnumberGö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ğı geçersiz kılma. Plugin viewerBaseUrl değerini geçersiz kılar. http veya https olmalıdır, sorgu/hash içeremez.
Legacy input aliases
Geriye dönük uyumluluk için hâlâ kabul edilir:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Validation and limits
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ık 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.
Çıktı ayrıntıları sözleşmesi
Araç, yapılandırılmış meta verileri details altında döndürür.
Viewer fields
Görüntüleyici oluşturan modlar için paylaşılan alanlar:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(kullanılabildiğindeagentId,sessionId,messageChannel,agentAccountId)
File fields
PNG veya PDF işlendiğinde dosya alanları:
artifactIdexpiresAtfilePathpath(filePathile aynı değer, ileti aracı uyumluluğu için)fileBytesfileFormatfileQualityfileScalefileMaxWidth
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 davranışı özeti:
| Mod | Döndürülen |
|---|---|
"view" |
Yalnızca görüntüleyici alanları. |
"file" |
Yalnızca dosya alanları, görüntüleyici yapıtı yok. |
"both" |
Görüntüleyici alanları ve dosya alanları. Dosya işleme başarısız olursa görüntüleyici yine fileError ve imageError takma adıyla döner. |
Daraltılmış değişmeyen bölümler
- Görüntüleyici
N unmodified linesgibi satırlar gösterebilir. - Bu satırlardaki genişletme kontrolleri koşulludur ve her girdi türü için garanti edilmez.
- Genişletme kontrolleri, işlenmiş diff genişletilebilir bağlam verisine sahip olduğunda görünür; bu, before ve after girdileri için tipiktir.
- Birçok unified patch girdisinde, atlanan bağlam gövdeleri ayrıştırılmış patch hunk’larında bulunmaz; bu nedenle satır genişletme kontrolleri 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:
{
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",
},
},
},
},
},
}
Desteklenen varsayılanlar:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmode
Açık araç parametreleri bu varsayılanları geçersiz kılar.
Kalıcı görüntüleyici URL yapılandırması
viewerBaseUrlstringBir araç çağrısı baseUrl geçirmediğ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/hash içeremez.
{
plugins: {
entries: {
diffs: {
enabled: true,
config: {
viewerBaseUrl: "https://gateway.example.com/openclaw",
},
},
},
},
}
Güvenlik yapılandırması
security.allowRemoteViewerbooleanfalse: görüntüleyici rotalarına yapılan local loopback dışı istekler reddedilir. true: token’lı 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
- Yapıtlar temp alt klasörü altında depolanır:
$TMPDIR/openclaw-diffs. - Görüntüleyici yapıt meta verileri şunları içerir:
- rastgele yapıt kimliği (20 hex karakter)
- rastgele token (48 hex karakter)
createdAtveexpiresAt- depolanan
viewer.htmlyolu
- Belirtilmediğinde varsayılan yapıt TTL’si 30 dakikadır.
- Kabul edilen en fazla görüntüleyici TTL’si 6 saattir.
- Temizleme, yapıt oluşturulduktan sonra fırsat buldukça çalışır.
- Süresi dolmuş yapıtlar silinir.
- Geri dönüş temizliği, meta veri eksik olduğunda 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}
Görüntüleyici varlıkları:
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js
Görüntüleyici belgesi bu varlıkları görüntüleyici URL’sine göre çözümler; bu nedenle isteğe bağlı baseUrl yol öneki 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 kullanılır. - İki geçersiz kılma da yoksa görüntüleyici URL’si varsayılan olarak loopback
127.0.0.1olur. - Gateway bind modu
customise vegateway.customBindHostayarlanmışsa o host kullanılır.
baseUrl kuralları:
http://veyahttps://olmalıdır.- Sorgu ve hash reddedilir.
- Kaynak ve isteğe bağlı taban yoluna izin verilir.
Güvenlik modeli
Görüntüleyici güçlendirme
- Varsayılan olarak yalnızca loopback.
- Katı kimlik ve belirteç doğrulamasıyla belirteçli görüntüleyici yolları.
- Görüntüleyici yanıt CSP'si:
default-src 'none'- betikler ve varlıklar yalnızca kendinden
- giden
connect-srcyok
- Uzak erişim etkinleştirildiğinde uzak ıskalama sınırlaması:
- 60 saniyede 40 hata
- 60 saniye kilitleme (
429 Too Many Requests)
Dosya işleme güçlendirme
- 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/*konumundaki 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ı:
Yapılandırma
OpenClaw yapılandırmasında browser.executablePath.
Ortam değişkenleri
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Platform yedeği
Platform komutu/yol keşfi yedeği.
Yaygın hata metni:
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Chrome, Chromium, Edge veya Brave kurarak ya da yukarıdaki çalıştırılabilir yol seçeneklerinden birini ayarlayarak düzeltin.
Sorun giderme
Girdi doğrulama hataları
Provide patch or both before and after text.— hembeforehem deafterekleyin ya dapatchsağ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)kaynağı kullanın, sorgu/hash kullanmayı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.1adresine çözümlenir. - Uzak erişim senaryoları için şunlardan birini yapın:
- Plugin
viewerBaseUrldeğerini ayarlayın, veya - her araç çağrısında
baseUrlgeçirin, veya gateway.bind=customvegateway.customBindHostkullanın
- Plugin
gateway.trustedProxies, aynı ana makine proxy'si için loopback içeriyorsa (örneğin Tailscale Serve), iletilmiş istemci-IP üst bilgileri olmayan 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 eke ihtiyacınız olduğunda
mode: "file"veyamode: "both"tercih edin, veya - paylaşılabilir bir görüntüleyici URL'sine ihtiyacınız olduğunda bilinçli olarak
security.allowRemoteVieweretkinleştirin ve PluginviewerBaseUrldeğerini ayarlayın ya da proxy/genelbaseUrlgeçirin
- yalnızca bir eke ihtiyacınız olduğunda
security.allowRemoteViewerdeğerini yalnı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
Yama girdisi için yama genişletilebilir bağlam taşımadığında bu olabilir. Bu beklenen bir durumdur ve görüntüleyici hatasına işaret etmez.
Artefakt bulunamadı
- Artefakt TTL nedeniyle süresi doldu.
- Belirteç veya yol değişti.
- Temizleme eski verileri kaldırdı.
Operasyonel rehberlik
- Tuvalde yerel etkileşimli incelemeler için
mode: "view"tercih edin. - Ek gerektiren 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ışı kalsın. - Hassas diff'ler 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ı (
fileFormat: "pdf") tercih edin.