diffs — це необов’язковий інструмент плагіна з короткими вбудованими системними настановами та супровідною навичкою, яка перетворює вміст змін на артефакт diff лише для читання для агентів.
Він приймає або:
- текст
beforeіafter - уніфікований
patch
- URL переглядача Gateway для презентації canvas
- шлях до відрендереного файлу (PNG або PDF) для доставки повідомлення
- обидва результати в одному виклику
Швидкий старт
Вимкнення вбудованих системних настанов
Якщо потрібно залишити інструментdiffs увімкненим, але вимкнути його вбудовані настанови системного промпта, встановіть plugins.entries.diffs.hooks.allowPromptInjection у false:
before_prompt_build плагіна diffs, залишаючи плагін, інструмент і супровідну навичку доступними.
Якщо потрібно вимкнути і настанови, і інструмент, натомість вимкніть плагін.
Типовий робочий процес агента
Приклади вхідних даних
- Before and after
- Patch
Довідник вхідних даних інструмента
Усі поля необов’язкові, якщо не зазначено інше.Початковий текст. Обов’язковий разом із
after, якщо patch не вказано.Оновлений текст. Обов’язковий разом із
before, якщо patch не вказано.Текст уніфікованого diff. Взаємовиключний із
before і after.Ім’я файлу для відображення в режимі before and after.
Підказка перевизначення мови для режиму before and after. Невідомі значення та мови поза стандартним набором переглядача повертаються до звичайного тексту, якщо не встановлено
плагін Diff Viewer Language Pack.
Перевизначення заголовка переглядача.
Режим виводу. За замовчуванням використовується стандартне значення плагіна
defaults.mode. Застарілий псевдонім: "image" поводиться як "file" і досі приймається для зворотної сумісності.Тема переглядача. За замовчуванням використовується стандартне значення плагіна
defaults.theme.Макет diff. За замовчуванням використовується стандартне значення плагіна
defaults.layout.Розгортати незмінені розділи, коли доступний повний контекст. Лише параметр окремого виклику (не ключ стандартних значень плагіна).
Формат відрендереного файлу. За замовчуванням використовується стандартне значення плагіна
defaults.fileFormat.Пресет якості для рендерингу PNG або PDF.
Перевизначення масштабу пристрою (
1-4).Максимальна ширина рендерингу в CSS-пікселях (
640-2400).TTL артефакту в секундах для вихідних даних переглядача та окремого файлу. Максимум 21600.
Перевизначення origin URL переглядача. Перевизначає
viewerBaseUrl плагіна. Має бути http або https, без query/hash.Legacy input aliases
Legacy input aliases
Досі приймаються для зворотної сумісності:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Validation and limits
Validation and limits
beforeіafter— максимум 512 KiB кожен.patch— максимум 2 MiB.path— максимум 2048 байтів.lang— максимум 128 байтів.title— максимум 1024 байти.- Обмеження складності patch: максимум 128 файлів і 120000 рядків загалом.
patchразом ізbeforeабоafterвідхиляються.- Безпекові обмеження відрендереного файлу (застосовуються до PNG і PDF):
fileQuality: "standard": максимум 8 MP (8,000,000 відрендерених пікселів).fileQuality: "hq": максимум 14 MP (14,000,000 відрендерених пікселів).fileQuality: "print": максимум 24 MP (24,000,000 відрендерених пікселів).- PDF також має максимум 50 сторінок.
Підсвічування синтаксису
OpenClaw містить підсвічування синтаксису для поширених мов вихідного коду, конфігурації та документації: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 і toml.
Поширені псевдоніми, як-от js, ts, bash, md, yml, c++, dockerfile, rb, kt і ps1, нормалізуються до цих стандартних мов.
Установіть Plugin Diff Viewer Language Pack, щоб підсвічувати інші мови:
Контракт деталей виводу
Інструмент повертає структуровані метадані вdetails.
Viewer fields
Viewer fields
Спільні поля для режимів, які створюють переглядач:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountId, коли доступно)
File fields
File fields
Поля файлу, коли відтворюється PNG або PDF:
artifactIdexpiresAtfilePathpath(те саме значення, що йfilePath, для сумісності з інструментом повідомлень)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Compatibility aliases
Compatibility aliases
Також повертаються для наявних викликачів:
format(те саме значення, що йfileFormat)imagePath(те саме значення, що йfilePath)imageBytes(те саме значення, що йfileBytes)imageQuality(те саме значення, що йfileQuality)imageScale(те саме значення, що йfileScale)imageMaxWidth(те саме значення, що йfileMaxWidth)
| Режим | Що повертається |
|---|---|
"view" | Лише поля переглядача. |
"file" | Лише поля файлу, без артефакту переглядача. |
"both" | Поля переглядача разом із полями файлу. Якщо відтворення файлу не вдається, переглядач усе одно повертається з fileError і псевдонімом imageError. |
Згорнуті незмінені розділи
- Переглядач може показувати рядки на кшталт
N unmodified lines. - Елементи керування розгортанням у цих рядках є умовними й не гарантуються для кожного типу вхідних даних.
- Елементи керування розгортанням з’являються, коли відтворений diff має розгортані контекстні дані, що типово для вхідних даних до і після.
- Для багатьох вхідних даних unified patch пропущені тіла контексту недоступні в розібраних hunks патча, тому рядок може з’явитися без елементів керування розгортанням. Це очікувана поведінка.
expandUnchangedзастосовується лише тоді, коли існує розгортаний контекст.
Типові значення Plugin
Задайте типові значення для всього Plugin у~/.openclaw/openclaw.json:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmodettlSeconds
Конфігурація постійної URL-адреси переглядача
Резервний варіант, яким володіє Plugin, для повернених посилань переглядача, коли виклик інструмента не передає
baseUrl. Має бути http або https, без query/hash.Конфігурація безпеки
false: запити не з loopback до маршрутів переглядача відхиляються. true: віддалені переглядачі дозволені, якщо токенізований шлях дійсний.Життєвий цикл і зберігання артефактів
- Артефакти зберігаються в тимчасовій підпапці:
$TMPDIR/openclaw-diffs. - Метадані артефакту переглядача містять:
- випадковий ID артефакту (20 шістнадцяткових символів)
- випадковий токен (48 шістнадцяткових символів)
createdAtіexpiresAt- збережений шлях
viewer.html
- Типовий TTL артефакту становить 30 хвилин, якщо його не вказано.
- Максимально прийнятий TTL переглядача становить 6 годин.
- Очищення запускається за можливості після створення артефакту.
- Прострочені артефакти видаляються.
- Резервне очищення видаляє застарілі папки старші за 24 години, коли метадані відсутні.
URL переглядача та мережева поведінка
Маршрут переглядача:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js/plugins/diffs-language-pack/assets/viewer.js, коли diff використовує мову з Diff Viewer Language Pack
baseUrl також зберігається для обох запитів ресурсів.
Поведінка побудови URL:
- Якщо надано
baseUrlвиклику інструмента, він використовується після суворої перевірки. - Інакше, якщо налаштовано
viewerBaseUrlPlugin, він використовується. - Без жодного перевизначення URL переглядача типово вказує на loopback
127.0.0.1. - Якщо режим прив’язування Gateway дорівнює
customі встановленоgateway.customBindHost, використовується цей хост.
baseUrl:
- Має бути
http://абоhttps://. - Query і hash відхиляються.
- Дозволено origin плюс необов’язковий базовий шлях.
Модель безпеки
Посилення захисту переглядача
Посилення захисту переглядача
- Типово лише loopback.
- Токенізовані шляхи переглядача із суворою перевіркою ID і токена.
- CSP відповіді переглядача:
default-src 'none'- скрипти й ресурси лише з self
- без вихідного
connect-src
- Обмеження віддалених промахів, коли віддалений доступ увімкнено:
- 40 помилок за 60 секунд
- блокування на 60 секунд (
429 Too Many Requests)
Посилення захисту рендерингу файлів
Посилення захисту рендерингу файлів
- Маршрутизація запитів браузера для скриншотів типово забороняє все.
- Дозволено лише локальні ресурси переглядача з
http://127.0.0.1/plugins/diffs/assets/*. - Зовнішні мережеві запити блокуються.
Вимоги браузера для файлового режиму
mode: "file" і mode: "both" потребують Chromium-сумісного браузера.
Порядок розв’язання:
Змінні середовища
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Усунення несправностей
Помилки перевірки вводу
Помилки перевірки вводу
Provide patch or both before and after text.— додайте обидва значенняbeforeіafterабо надайтеpatch.Provide either patch or before/after input, not both.— не змішуйте режими вводу.Invalid baseUrl: ...— використовуйте originhttp(s)з необов’язковим шляхом, без query/hash.{field} exceeds maximum size (...)— зменште розмір payload.- Відхилення великого patch — зменште кількість файлів patch або загальну кількість рядків.
Доступність переглядача
Доступність переглядача
- URL переглядача типово розв’язується в
127.0.0.1. - Для сценаріїв віддаленого доступу:
- задайте
viewerBaseUrlPlugin, або - передайте
baseUrlдля кожного виклику інструмента, або - використовуйте
gateway.bind=customіgateway.customBindHost
- задайте
- Якщо
gateway.trustedProxiesмістить loopback для проксі на тому самому хості (наприклад Tailscale Serve), прямі loopback-запити переглядача без пересланих заголовків client-IP за проєктом завершуються fail closed. - Для такої топології проксі:
- віддавайте перевагу
mode: "file"абоmode: "both", коли потрібне лише вкладення, або - навмисно ввімкніть
security.allowRemoteViewerі задайтеviewerBaseUrlPlugin або передайте проксі/публічнийbaseUrl, коли потрібен URL переглядача, яким можна поділитися
- віддавайте перевагу
- Вмикайте
security.allowRemoteViewerлише тоді, коли ви маєте намір надати зовнішній доступ до переглядача.
Рядок незмінених рядків не має кнопки розгортання
Рядок незмінених рядків не має кнопки розгортання
Це може статися для вводу patch, коли patch не містить контексту, який можна розгорнути. Це очікувано й не вказує на збій переглядача.
Артефакт не знайдено
Артефакт не знайдено
- Термін дії артефакту минув через TTL.
- Токен або шлях змінився.
- Очищення видалило застарілі дані.
Операційні рекомендації
- Віддавайте перевагу
mode: "view"для локальних інтерактивних оглядів у canvas. - Віддавайте перевагу
mode: "file"для вихідних чат-каналів, яким потрібне вкладення. - Тримайте
allowRemoteViewerвимкненим, якщо ваш deployment не потребує віддалених URL переглядача. - Задавайте явний короткий
ttlSecondsдля чутливих diff. - Уникайте надсилання секретів у ввід diff, коли це не потрібно.
- Якщо ваш канал агресивно стискає зображення (наприклад Telegram або WhatsApp), віддавайте перевагу PDF-виводу (
fileFormat: "pdf").
Рушій рендерингу diff працює на основі Diffs.