Documentation Index
Fetch the complete documentation index at: https://openclaw.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
diffs 是一个可选插件工具,带有简短的内置系统指导,以及一个配套技能,可将变更内容转换为供代理使用的只读 diff 产物。
它接受以下任一输入:
before和after文本- 一个统一的
patch
- 用于画布展示的网关查看器 URL
- 用于消息传递的已渲染文件路径(PNG 或 PDF)
- 在一次调用中同时返回两种输出
快速开始
禁用内置系统指导
如果你想保留diffs 工具启用,但禁用其内置的 system-prompt 指导,请将 plugins.entries.diffs.hooks.allowPromptInjection 设为 false:
before_prompt_build 钩子,同时保留插件、工具和配套技能可用。
如果你想同时禁用指导和工具,请改为禁用插件。
典型代理工作流
输入示例
- Before and after
- Patch
工具输入参考
除非另有说明,所有字段都是可选的。原始文本。当省略
patch 时,需与 after 一起提供。更新后的文本。当省略
patch 时,需与 before 一起提供。统一 diff 文本。与
before 和 after 互斥。before 和 after 模式下显示的文件名。
before 和 after 模式下的语言覆盖提示。未知值会回退为纯文本。
查看器标题覆盖。
输出模式。默认使用插件默认值
defaults.mode。已弃用别名:"image" 的行为与 "file" 相同,并且为了向后兼容仍可接受。查看器主题。默认使用插件默认值
defaults.theme。diff 布局。默认使用插件默认值
defaults.layout。当完整上下文可用时展开未更改部分。仅限每次调用的选项(不是插件默认键)。
渲染文件格式。默认使用插件默认值
defaults.fileFormat。PNG 或 PDF 渲染的质量预设。
设备缩放覆盖值(
1-4)。CSS 像素中的最大渲染宽度(
640-2400)。查看器和独立文件输出的产物 TTL(秒)。最大 21600。
查看器 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 页。
输出详情契约
该工具会在details 下返回结构化元数据。
查看器字段
查看器字段
为创建查看器的模式提供的共享字段:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(在可用时包含agentId、sessionId、messageChannel、agentAccountId)
文件字段
文件字段
当渲染 PNG 或 PDF 时的文件字段:
artifactIdexpiresAtfilePathpath(与filePath相同的值,用于 message 工具兼容性)fileBytesfileFormatfileQualityfileScalefileMaxWidth
兼容别名
兼容别名
也会为现有调用方返回:
format(与fileFormat相同的值)imagePath(与filePath相同的值)imageBytes(与fileBytes相同的值)imageQuality(与fileQuality相同的值)imageScale(与fileScale相同的值)imageMaxWidth(与fileMaxWidth相同的值)
| 模式 | 返回内容 |
|---|---|
"view" | 仅返回查看器字段。 |
"file" | 仅返回文件字段,不返回查看器产物。 |
"both" | 返回查看器字段和文件字段。如果文件渲染失败,仍会返回查看器,并附带 fileError 和 imageError 别名。 |
折叠的未更改部分
- 查看器可以显示如
N unmodified lines这样的行。 - 这些行上的展开控件是有条件出现的,并不保证对每种输入类型都存在。
- 当渲染后的 diff 具有可展开的上下文数据时,会显示展开控件,这在 before 和 after 输入中较为常见。
- 对于许多统一 patch 输入,解析后的 patch hunk 中并不存在省略的上下文正文,因此该行可能在没有展开控件的情况下出现。这是预期行为。
expandUnchanged仅在存在可展开上下文时生效。
插件默认值
在~/.openclaw/openclaw.json 中设置插件级默认值:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmode
持久化查看器 URL 配置
当工具调用未传入
baseUrl 时,插件拥有的返回查看器链接的后备值。必须是 http 或 https,且不能包含 query/hash。安全配置
false:会拒绝对 viewer 路由的非回环请求。true:如果带 token 的路径有效,则允许远程 viewer。资源生命周期和存储
- Artifacts 存储在临时子文件夹下:
$TMPDIR/openclaw-diffs。 - Viewer artifact 元数据包含:
- 随机 artifact ID(20 位十六进制字符)
- 随机 token(48 位十六进制字符)
createdAt和expiresAt- 存储的
viewer.html路径
- 未指定时,默认 artifact TTL 为 30 分钟。
- 接受的最大 viewer TTL 为 6 小时。
- 清理会在 artifact 创建后机会性运行。
- 已过期的 artifacts 会被删除。
- 当元数据缺失时,回退清理会移除超过 24 小时的陈旧文件夹。
Viewer URL 和网络行为
Viewer 路由:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js
baseUrl 路径前缀也会同时保留给这两种资源请求。
URL 构造行为:
- 如果提供了工具调用的
baseUrl,则会在严格验证后使用它。 - 否则,如果配置了插件
viewerBaseUrl,则会使用它。 - 若两者都未覆盖,viewer URL 默认指向回环地址
127.0.0.1。 - 如果 gateway 绑定模式为
custom且设置了gateway.customBindHost,则使用该主机。
baseUrl 规则:
- 必须是
http://或https://。 - 查询和 hash 会被拒绝。
- 允许 origin 加上可选的 base path。
安全模型
Viewer 加固
Viewer 加固
- 默认仅允许回环。
- 带 token 的 viewer 路径,且对 ID 和 token 进行严格验证。
- Viewer 响应的 CSP:
default-src 'none'- 脚本和资源仅允许来自 self
- 不允许外发
connect-src
- 启用远程访问时的远程 miss 限流:
- 每 60 秒 40 次失败
- 60 秒锁定(
429 Too Many Requests)
文件渲染加固
文件渲染加固
- 截图浏览器请求路由采用默认拒绝策略。
- 仅允许来自
http://127.0.0.1/plugins/diffs/assets/*的本地 viewer 资源。 - 外部网络请求被阻止。
文件模式的浏览器要求
mode: "file" 和 mode: "both" 需要兼容 Chromium 的浏览器。
解析顺序:
常见失败文本:
Diff PNG/PDF rendering requires a Chromium-compatible browser...
故障排查
输入验证错误
输入验证错误
Provide patch or both before and after text.— 需要提供patch,或者同时提供before和after文本。Provide either patch or before/after input, not both.— 请只使用一种输入模式,不要同时使用两者。Invalid baseUrl: ...— 使用带可选路径的http(s)origin,不要包含 query/hash。{field} exceeds maximum size (...)— 减少负载大小。- 大型 patch 被拒绝 — 减少 patch 的文件数量或总行数。
Viewer 可访问性
Viewer 可访问性
- Viewer URL 默认解析为
127.0.0.1。 - 对于远程访问场景,请选择以下任一方式:
- 设置插件
viewerBaseUrl,或 - 在工具调用时传入
baseUrl,或 - 使用
gateway.bind=custom和gateway.customBindHost
- 设置插件
- 如果
gateway.trustedProxies为同主机代理(例如 Tailscale Serve)包含了回环地址,那么缺少转发客户端 IP 头的原始回环 viewer 请求会按设计失败并被关闭。 - 对于这种代理拓扑:
- 如果只需要附件,优先使用
mode: "file"或mode: "both",或 - 当你需要可分享的 viewer URL 时,显式启用
security.allowRemoteViewer,并设置插件viewerBaseUrl或传入代理/公共baseUrl
- 如果只需要附件,优先使用
- 只有在你确实打算让外部访问 viewer 时,才启用
security.allowRemoteViewer。
未修改行 row 没有展开按钮
未修改行 row 没有展开按钮
当 patch 输入不包含可展开的上下文时,可能会出现这种情况。这是预期行为,并不表示 viewer 出现故障。
未找到 Artifact
未找到 Artifact
- Artifact 已因 TTL 过期。
- Token 或路径已更改。
- 清理操作已移除陈旧数据。
操作指南
- 在 canvas 中进行本地交互式审查时,优先使用
mode: "view"。 - 对于需要附件的外发聊天渠道,优先使用
mode: "file"。 - 除非你的部署需要远程 viewer URL,否则保持
allowRemoteViewer为禁用状态。 - 对于敏感 diff,设置明确且较短的
ttlSeconds。 - 在不需要时,避免在 diff 输入中发送敏感信息。
- 如果你的渠道会严重压缩图片(例如 Telegram 或 WhatsApp),优先使用 PDF 输出(
fileFormat: "pdf")。
Diff 渲染引擎由 Diffs 提供支持。