diffs adalah alat Plugin opsional dengan panduan sistem bawaan singkat dan Skills pendamping yang mengubah konten perubahan menjadi artefak diff baca-saja untuk agen.
Alat ini menerima salah satu dari:
- teks
beforedanafter patchterpadu
- URL penampil Gateway untuk presentasi kanvas
- path file yang dirender (PNG atau PDF) untuk pengiriman pesan
- kedua output dalam satu panggilan
Mulai cepat
Nonaktifkan panduan sistem bawaan
Jika Anda ingin tetap mengaktifkan alatdiffs tetapi menonaktifkan panduan system-prompt bawaannya, atur plugins.entries.diffs.hooks.allowPromptInjection ke false:
before_prompt_build milik Plugin diffs sambil tetap menyediakan Plugin, alat, dan Skills pendamping.
Jika Anda ingin menonaktifkan panduan sekaligus alatnya, nonaktifkan Plugin sebagai gantinya.
Alur kerja agen umum
Contoh input
- Sebelum dan sesudah
- Patch
Referensi input alat
Semua bidang bersifat opsional kecuali dinyatakan lain.Teks asli. Wajib bersama
after saat patch tidak disertakan.Teks yang diperbarui. Wajib bersama
before saat patch tidak disertakan.Teks diff terpadu. Saling eksklusif dengan
before dan after.Nama file tampilan untuk mode sebelum dan sesudah.
Petunjuk penggantian bahasa untuk mode sebelum dan sesudah. Nilai yang tidak dikenal dan bahasa di luar set penampil default kembali ke teks biasa kecuali Plugin Diff Viewer Language Pack diinstal.
Penggantian judul penampil.
Mode output. Default-nya adalah default Plugin
defaults.mode. Alias yang tidak digunakan lagi: "image" berperilaku seperti "file" dan masih diterima untuk kompatibilitas mundur.Tema penampil. Default-nya adalah default Plugin
defaults.theme.Tata letak diff. Default-nya adalah default Plugin
defaults.layout.Perluas bagian yang tidak berubah saat konteks penuh tersedia. Opsi per panggilan saja (bukan kunci default Plugin).
Format file yang dirender. Default-nya adalah default Plugin
defaults.fileFormat.Preset kualitas untuk rendering PNG atau PDF.
Penggantian skala perangkat (
1-4).Lebar render maksimum dalam piksel CSS (
640-2400).TTL artefak dalam detik untuk output penampil dan file mandiri. Maks 21600.
Penggantian origin URL penampil. Mengganti Plugin
viewerBaseUrl. Harus berupa http atau https, tanpa query/hash.Alias input lama
Alias input lama
Masih diterima untuk kompatibilitas mundur:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Validasi dan batas
Validasi dan batas
beforedanaftermasing-masing maksimal 512 KiB.patchmaksimal 2 MiB.pathmaksimal 2048 byte.langmaksimal 128 byte.titlemaksimal 1024 byte.- Batas kompleksitas patch: maksimal 128 file dan total 120000 baris.
patchbersamabeforeatauafterditolak.- Batas keamanan file yang dirender (berlaku untuk PNG dan PDF):
fileQuality: "standard": maksimal 8 MP (8.000.000 piksel yang dirender).fileQuality: "hq": maksimal 14 MP (14.000.000 piksel yang dirender).fileQuality: "print": maksimal 24 MP (24.000.000 piksel yang dirender).- PDF juga memiliki maksimum 50 halaman.
Penyorotan sintaks
OpenClaw menyertakan penyorotan sintaks untuk bahasa sumber, konfigurasi, dan dokumentasi umum: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, dan toml.
Alias umum seperti js, ts, bash, md, yml, c++, dockerfile, rb, kt, dan ps1 dinormalisasi ke bahasa default tersebut.
Instal Plugin Diff Viewer Language Pack untuk menyorot bahasa lain:
Kontrak detail output
Alat ini mengembalikan metadata terstruktur di bawahdetails.
Kolom viewer
Kolom viewer
Kolom bersama untuk mode yang membuat viewer:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountIdsaat tersedia)
Kolom file
Kolom file
Kolom file saat PNG atau PDF dirender:
artifactIdexpiresAtfilePathpath(nilai yang sama denganfilePath, untuk kompatibilitas alat pesan)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Alias kompatibilitas
Alias kompatibilitas
Juga dikembalikan untuk pemanggil yang sudah ada:
format(nilai yang sama denganfileFormat)imagePath(nilai yang sama denganfilePath)imageBytes(nilai yang sama denganfileBytes)imageQuality(nilai yang sama denganfileQuality)imageScale(nilai yang sama denganfileScale)imageMaxWidth(nilai yang sama denganfileMaxWidth)
| Mode | Yang dikembalikan |
|---|---|
"view" | Hanya kolom viewer. |
"file" | Hanya kolom file, tanpa artefak viewer. |
"both" | Kolom viewer ditambah kolom file. Jika rendering file gagal, viewer tetap dikembalikan dengan alias fileError dan imageError. |
Bagian tidak berubah yang diciutkan
- Viewer dapat menampilkan baris seperti
N unmodified lines. - Kontrol perluas pada baris tersebut bersifat kondisional dan tidak dijamin untuk setiap jenis input.
- Kontrol perluas muncul saat diff yang dirender memiliki data konteks yang dapat diperluas, yang lazim untuk input sebelum dan sesudah.
- Untuk banyak input patch terpadu, isi konteks yang dihilangkan tidak tersedia dalam hunk patch yang diurai, sehingga baris dapat muncul tanpa kontrol perluas. Ini adalah perilaku yang diharapkan.
expandUnchangedhanya berlaku saat konteks yang dapat diperluas tersedia.
Default Plugin
Tetapkan default di seluruh Plugin dalam~/.openclaw/openclaw.json:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmodettlSeconds
Konfigurasi URL viewer persisten
Fallback milik Plugin untuk tautan viewer yang dikembalikan saat panggilan alat tidak meneruskan
baseUrl. Harus berupa http atau https, tanpa query/hash.Konfigurasi keamanan
false: permintaan non-loopback ke rute viewer ditolak. true: viewer jarak jauh diizinkan jika path bertoken valid.Siklus hidup dan penyimpanan artefak
- Artefak disimpan di bawah subfolder temp:
$TMPDIR/openclaw-diffs. - Metadata artefak penampil berisi:
- ID artefak acak (20 karakter hex)
- token acak (48 karakter hex)
createdAtdanexpiresAt- path
viewer.htmlyang tersimpan
- TTL artefak default adalah 30 menit jika tidak ditentukan.
- TTL penampil maksimum yang diterima adalah 6 jam.
- Pembersihan berjalan secara oportunistis setelah artefak dibuat.
- Artefak yang kedaluwarsa dihapus.
- Pembersihan fallback menghapus folder usang yang lebih lama dari 24 jam jika metadata tidak ada.
URL penampil dan perilaku jaringan
Rute penampil:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.jssaat diff menggunakan bahasa dari Diff Viewer Language Pack
baseUrl opsional juga dipertahankan untuk kedua permintaan aset.
Perilaku konstruksi URL:
- Jika
baseUrlpanggilan alat disediakan, nilai itu digunakan setelah validasi ketat. - Jika tidak, jika
viewerBaseUrlPlugin dikonfigurasi, nilai itu digunakan. - Tanpa salah satu override tersebut, URL penampil default ke loopback
127.0.0.1. - Jika mode bind Gateway adalah
customdangateway.customBindHostdiatur, host tersebut digunakan.
baseUrl:
- Harus berupa
http://atauhttps://. - Query dan hash ditolak.
- Origin plus path dasar opsional diizinkan.
Model keamanan
Viewer hardening
Viewer hardening
- Hanya loopback secara default.
- Path penampil bertoken dengan validasi ID dan token yang ketat.
- CSP respons penampil:
default-src 'none'- skrip dan aset hanya dari self
- tanpa
connect-srckeluar
- Pembatasan miss jarak jauh saat akses jarak jauh diaktifkan:
- 40 kegagalan per 60 detik
- penguncian 60 detik (
429 Too Many Requests)
File rendering hardening
File rendering hardening
- Routing permintaan browser tangkapan layar bersifat tolak-secara-default.
- Hanya aset penampil lokal dari
http://127.0.0.1/plugins/diffs/assets/*yang diizinkan. - Permintaan jaringan eksternal diblokir.
Persyaratan browser untuk mode file
mode: "file" dan mode: "both" memerlukan browser yang kompatibel dengan Chromium.
Urutan resolusi:
Environment variables
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Pemecahan masalah
Input validation errors
Input validation errors
Provide patch or both before and after text.— sertakanbeforedanafter, atau berikanpatch.Provide either patch or before/after input, not both.— jangan mencampur mode input.Invalid baseUrl: ...— gunakan originhttp(s)dengan path opsional, tanpa query/hash.{field} exceeds maximum size (...)— kurangi ukuran payload.- Penolakan patch besar — kurangi jumlah file patch atau total baris.
Viewer accessibility
Viewer accessibility
- URL penampil diselesaikan ke
127.0.0.1secara default. - Untuk skenario akses jarak jauh, salah satu:
- atur
viewerBaseUrlPlugin, atau - teruskan
baseUrlper panggilan alat, atau - gunakan
gateway.bind=customdangateway.customBindHost
- atur
- Jika
gateway.trustedProxiesmenyertakan loopback untuk proxy host yang sama (misalnya Tailscale Serve), permintaan penampil loopback mentah tanpa header IP klien yang diteruskan gagal tertutup sesuai desain. - Untuk topologi proxy tersebut:
- pilih
mode: "file"ataumode: "both"saat Anda hanya membutuhkan lampiran, atau - aktifkan
security.allowRemoteViewersecara sengaja dan aturviewerBaseUrlPlugin atau teruskanbaseUrlproxy/publik saat Anda membutuhkan URL penampil yang dapat dibagikan
- pilih
- Aktifkan
security.allowRemoteViewerhanya saat Anda memang menginginkan akses penampil eksternal.
Artifact not found
Artifact not found
- Artefak kedaluwarsa karena TTL.
- Token atau path berubah.
- Pembersihan menghapus data usang.
Panduan operasional
- Pilih
mode: "view"untuk peninjauan interaktif lokal di canvas. - Pilih
mode: "file"untuk kanal obrolan keluar yang membutuhkan lampiran. - Biarkan
allowRemoteViewerdinonaktifkan kecuali deployment Anda memerlukan URL penampil jarak jauh. - Tetapkan
ttlSecondssingkat yang eksplisit untuk diff sensitif. - Hindari mengirim rahasia dalam input diff jika tidak diperlukan.
- Jika kanal Anda mengompresi gambar secara agresif (misalnya Telegram atau WhatsApp), pilih output PDF (
fileFormat: "pdf").
Mesin rendering diff didukung oleh Diffs.