diffs — необязательный инструмент Plugin с краткими встроенными системными указаниями и сопутствующим Skill, который превращает содержимое изменений в доступный только для чтения артефакт diff для агентов.
Он принимает:
- текст
beforeиafter - унифицированный
patch
- URL просмотрщика Gateway для представления на canvas
- путь к отрендеренному файлу (PNG или PDF) для доставки в сообщении
- оба результата за один вызов
Быстрый старт
Отключение встроенных системных указаний
Если вы хотите оставить инструментdiffs включенным, но отключить его встроенные указания для системного промпта, установите plugins.entries.diffs.hooks.allowPromptInjection в false:
before_prompt_build плагина diffs, сохраняя доступными сам плагин, инструмент и сопутствующий Skill.
Если вы хотите отключить и указания, и инструмент, отключите плагин.
Типичный рабочий процесс агента
Примеры входных данных
- До и после
- Patch
Справочник входных данных инструмента
Все поля необязательны, если не указано иное.Исходный текст. Обязательно вместе с
after, если patch не указан.Обновленный текст. Обязательно вместе с
before, если patch не указан.Текст унифицированного diff. Взаимоисключается с
before и 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.Устаревшие псевдонимы входных данных
Устаревшие псевдонимы входных данных
По-прежнему принимаются для обратной совместимости:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Валидация и ограничения
Валидация и ограничения
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 языкового пакета просмотрщика различий, чтобы подсвечивать другие языки:
Контракт сведений вывода
Инструмент возвращает структурированные метаданные вdetails.
Поля просмотрщика
Поля просмотрщика
Общие поля для режимов, создающих просмотрщик:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountId, если доступны)
Поля файла
Поля файла
Поля файла при рендеринге PNG или PDF:
artifactIdexpiresAtfilePathpath(то же значение, что иfilePath, для совместимости с инструментом сообщений)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Псевдонимы совместимости
Псевдонимы совместимости
Также возвращаются для существующих вызывающих сторон:
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, без строки запроса/хэша.Конфигурация безопасности
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:
- Если в tool-call предоставлен
baseUrl, он используется после строгой проверки. - Иначе, если настроен
viewerBaseUrlплагина, используется он. - Без любого из этих переопределений URL просмотрщика по умолчанию указывает на loopback
127.0.0.1. - Если режим привязки Gateway равен
customи заданgateway.customBindHost, используется этот хост.
baseUrl:
- Должен быть
http://илиhttps://. - Query и hash отклоняются.
- Разрешены origin плюс необязательный базовый путь.
Модель безопасности
Viewer hardening
Viewer hardening
- По умолчанию только loopback.
- Токенизированные пути просмотрщика со строгой проверкой ID и токена.
- CSP ответа просмотрщика:
default-src 'none'- скрипты и ресурсы только из self
- без исходящих
connect-src
- Ограничение удаленных промахов при включенном удаленном доступе:
- 40 сбоев за 60 секунд
- блокировка на 60 секунд (
429 Too Many Requests)
File rendering hardening
File rendering hardening
- Маршрутизация запросов браузера для скриншотов по умолчанию запрещающая.
- Разрешены только локальные ресурсы просмотрщика из
http://127.0.0.1/plugins/diffs/assets/*. - Внешние сетевые запросы блокируются.
Требования браузера для файлового режима
mode: "file" и mode: "both" требуют Chromium-совместимый браузер.
Порядок разрешения:
Environment variables
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Устранение неполадок
Input validation errors
Input validation errors
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 (...)— уменьшите размер полезной нагрузки.- Отклонение большого patch — уменьшите количество файлов patch или общее число строк.
Viewer accessibility
Viewer accessibility
- URL просмотрщика по умолчанию разрешается в
127.0.0.1. - Для сценариев удаленного доступа:
- задайте
viewerBaseUrlплагина, или - передайте
baseUrlдля каждого вызова инструмента, или - используйте
gateway.bind=customиgateway.customBindHost
- задайте
- Если
gateway.trustedProxiesвключает loopback для прокси на том же хосте (например, Tailscale Serve), необработанные loopback-запросы просмотрщика без перенаправленных заголовков client-IP завершаются отказом по замыслу. - Для такой топологии прокси:
- предпочитайте
mode: "file"илиmode: "both", когда вам нужно только вложение, или - намеренно включите
security.allowRemoteViewerи задайтеviewerBaseUrlплагина либо передайте прокси/публичныйbaseUrl, когда нужен URL просмотрщика, которым можно поделиться
- предпочитайте
- Включайте
security.allowRemoteViewerтолько если вам намеренно нужен внешний доступ к просмотрщику.
Unmodified-lines row has no expand button
Unmodified-lines row has no expand button
Artifact not found
Artifact not found
- Срок действия артефакта истек из-за TTL.
- Токен или путь изменился.
- Очистка удалила устаревшие данные.
Эксплуатационные рекомендации
- Предпочитайте
mode: "view"для локальных интерактивных ревью в canvas. - Предпочитайте
mode: "file"для исходящих чат-каналов, которым нужно вложение. - Оставляйте
allowRemoteViewerотключенным, если вашему развертыванию не требуются URL удаленного просмотрщика. - Задавайте явный короткий
ttlSecondsдля чувствительных diff. - Избегайте отправки секретов во входных данных diff, когда это не требуется.
- Если ваш канал агрессивно сжимает изображения (например, Telegram или WhatsApp), предпочитайте вывод PDF (
fileFormat: "pdf").
Движок рендеринга diff работает на Diffs.