Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
diffs é uma ferramenta opcional de plugin com orientação de sistema curta integrada e uma Skills complementar que transforma conteúdo de alterações em um artefato de diff somente leitura para agentes.
Ela aceita:
- texto
beforeeafter - um
patchunificado
- uma URL do visualizador do Gateway para apresentação em canvas
- um caminho de arquivo renderizado (PNG ou PDF) para entrega por mensagem
- ambas as saídas em uma única chamada
Início rápido
Desabilitar a orientação de sistema integrada
Se quiser manter a ferramentadiffs habilitada, mas desabilitar sua orientação integrada de prompt de sistema, defina plugins.entries.diffs.hooks.allowPromptInjection como false:
before_prompt_build do plugin diffs, mantendo o plugin, a ferramenta e a Skills complementar disponíveis.
Se quiser desabilitar tanto a orientação quanto a ferramenta, desabilite o plugin.
Fluxo de trabalho típico do agente
Exemplos de entrada
- Antes e depois
- Patch
Referência de entrada da ferramenta
Todos os campos são opcionais, salvo indicação em contrário.Texto original. Obrigatório com
after quando patch é omitido.Texto atualizado. Obrigatório com
before quando patch é omitido.Texto de diff unificado. Mutuamente exclusivo com
before e after.Nome de arquivo exibido para o modo antes e depois.
Dica de substituição de idioma para o modo antes e depois. Valores desconhecidos voltam para texto simples.
Substituição do título do visualizador.
Modo de saída. O padrão é o padrão do plugin
defaults.mode. Alias obsoleto: "image" se comporta como "file" e ainda é aceito para compatibilidade retroativa.Tema do visualizador. O padrão é o padrão do plugin
defaults.theme.Layout do diff. O padrão é o padrão do plugin
defaults.layout.Expande seções inalteradas quando o contexto completo está disponível. Opção apenas por chamada (não é uma chave padrão do plugin).
Formato do arquivo renderizado. O padrão é o padrão do plugin
defaults.fileFormat.Predefinição de qualidade para renderização em PNG ou PDF.
Substituição da escala do dispositivo (
1-4).Largura máxima de renderização em pixels CSS (
640-2400).TTL do artefato em segundos para saídas de visualizador e arquivo autônomo. Máximo 21600.
Substituição da origem da URL do visualizador. Substitui
viewerBaseUrl do plugin. Deve ser http ou https, sem consulta/hash.Aliases de entrada legados
Aliases de entrada legados
Ainda aceitos para compatibilidade retroativa:
format->fileFormatimageFormat->fileFormatimageQuality->fileQualityimageScale->fileScaleimageMaxWidth->fileMaxWidth
Validação e limites
Validação e limites
beforeeaftertêm no máximo 512 KiB cada.patchtem no máximo 2 MiB.pathtem no máximo 2048 bytes.langtem no máximo 128 bytes.titletem no máximo 1024 bytes.- Limite de complexidade de patch: máximo de 128 arquivos e 120000 linhas no total.
patchjunto combeforeouafteré rejeitado.- Limites de segurança do arquivo renderizado (aplicam-se a PNG e PDF):
fileQuality: "standard": máximo de 8 MP (8.000.000 pixels renderizados).fileQuality: "hq": máximo de 14 MP (14.000.000 pixels renderizados).fileQuality: "print": máximo de 24 MP (24.000.000 pixels renderizados).- PDF também tem um máximo de 50 páginas.
Contrato de detalhes de saída
A ferramenta retorna metadados estruturados emdetails.
Campos do visualizador
Campos do visualizador
Campos compartilhados para modos que criam um visualizador:
artifactIdviewerUrlviewerPathtitleexpiresAtinputKindfileCountmodecontext(agentId,sessionId,messageChannel,agentAccountIdquando disponível)
Campos de arquivo
Campos de arquivo
Campos de arquivo quando PNG ou PDF é renderizado:
artifactIdexpiresAtfilePathpath(mesmo valor defilePath, para compatibilidade com a ferramenta de mensagem)fileBytesfileFormatfileQualityfileScalefileMaxWidth
Aliases de compatibilidade
Aliases de compatibilidade
Também retornados para chamadores existentes:
format(mesmo valor defileFormat)imagePath(mesmo valor defilePath)imageBytes(mesmo valor defileBytes)imageQuality(mesmo valor defileQuality)imageScale(mesmo valor defileScale)imageMaxWidth(mesmo valor defileMaxWidth)
| Modo | O que é retornado |
|---|---|
"view" | Apenas campos do visualizador. |
"file" | Apenas campos de arquivo, sem artefato de visualizador. |
"both" | Campos do visualizador mais campos de arquivo. Se a renderização do arquivo falhar, o visualizador ainda retorna com fileError e o alias imageError. |
Seções inalteradas recolhidas
- O visualizador pode mostrar linhas como
N unmodified lines. - Controles de expansão nessas linhas são condicionais e não são garantidos para todo tipo de entrada.
- Controles de expansão aparecem quando o diff renderizado tem dados de contexto expansíveis, o que é típico para entrada antes e depois.
- Para muitas entradas de patch unificado, os corpos de contexto omitidos não estão disponíveis nos hunks do patch analisado, portanto a linha pode aparecer sem controles de expansão. Esse é o comportamento esperado.
expandUnchangedse aplica apenas quando há contexto expansível.
Padrões do plugin
Defina padrões para todo o plugin em~/.openclaw/openclaw.json:
fontFamilyfontSizelineSpacinglayoutshowLineNumbersdiffIndicatorswordWrapbackgroundthemefileFormatfileQualityfileScalefileMaxWidthmodettlSeconds
Configuração persistente da URL do visualizador
Fallback pertencente ao plugin para links de visualizador retornados quando uma chamada de ferramenta não passa
baseUrl. Deve ser http ou https, sem consulta/hash.Configuração de segurança
false: solicitações que não são local loopback para rotas do visualizador são negadas. true: visualizadores remotos são permitidos se o caminho tokenizado for válido.Ciclo de vida e armazenamento de artefatos
- Artefatos são armazenados na subpasta temporária:
$TMPDIR/openclaw-diffs. - Os metadados do artefato do visualizador contêm:
- ID de artefato aleatório (20 caracteres hexadecimais)
- token aleatório (48 caracteres hexadecimais)
createdAteexpiresAt- caminho
viewer.htmlarmazenado
- O TTL padrão do artefato é 30 minutos quando não especificado.
- O TTL máximo aceito do visualizador é 6 horas.
- A limpeza é executada de forma oportunista após a criação do artefato.
- Artefatos expirados são excluídos.
- A limpeza de fallback remove pastas obsoletas com mais de 24 horas quando os metadados estão ausentes.
URL do visualizador e comportamento de rede
Rota do visualizador:/plugins/diffs/view/{artifactId}/{token}
/plugins/diffs/assets/viewer.js/plugins/diffs/assets/viewer-runtime.js
baseUrl também é preservado para ambas as solicitações de ativos.
Comportamento de construção de URL:
- Se
baseUrlda chamada de ferramenta for fornecido, ele será usado após validação rigorosa. - Caso contrário, se
viewerBaseUrldo plugin estiver configurado, ele será usado. - Sem nenhuma das substituições, a URL do visualizador usa por padrão o local loopback
127.0.0.1. - Se o modo de bind do gateway for
customegateway.customBindHostestiver definido, esse host será usado.
baseUrl:
- Deve ser
http://ouhttps://. - Consulta e hash são rejeitados.
- Origem mais caminho base opcional é permitido.
Modelo de segurança
Reforço de segurança do visualizador
Reforço de segurança do visualizador
- Apenas loopback por padrão.
- Caminhos do visualizador tokenizados com validação rigorosa de ID e token.
- CSP da resposta do visualizador:
default-src 'none'- scripts e ativos somente da própria origem
- sem
connect-srcde saída
- Limitação de falhas remotas quando o acesso remoto está habilitado:
- 40 falhas a cada 60 segundos
- bloqueio de 60 segundos (
429 Too Many Requests)
Reforço de segurança da renderização de arquivos
Reforço de segurança da renderização de arquivos
- O roteamento de solicitações do navegador para captura de tela é negar por padrão.
- Somente ativos locais do visualizador de
http://127.0.0.1/plugins/diffs/assets/*são permitidos. - Solicitações de rede externas são bloqueadas.
Requisitos de navegador para o modo de arquivo
mode: "file" e mode: "both" precisam de um navegador compatível com Chromium.
Ordem de resolução:
Variáveis de ambiente
OPENCLAW_BROWSER_EXECUTABLE_PATHBROWSER_EXECUTABLE_PATHPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH
Diff PNG/PDF rendering requires a Chromium-compatible browser...
Solução de problemas
Erros de validação de entrada
Erros de validação de entrada
Provide patch or both before and after text.— incluabeforeeafter, ou forneçapatch.Provide either patch or before/after input, not both.— não misture modos de entrada.Invalid baseUrl: ...— use origemhttp(s)com caminho opcional, sem query/hash.{field} exceeds maximum size (...)— reduza o tamanho do payload.- Rejeição de patch grande — reduza a contagem de arquivos do patch ou o total de linhas.
Acessibilidade do visualizador
Acessibilidade do visualizador
- A URL do visualizador resolve para
127.0.0.1por padrão. - Para cenários de acesso remoto:
- defina
viewerBaseUrldo plugin, ou - passe
baseUrlpor chamada de ferramenta, ou - use
gateway.bind=customegateway.customBindHost
- defina
- Se
gateway.trustedProxiesincluir loopback para um proxy no mesmo host (por exemplo, Tailscale Serve), solicitações brutas de loopback ao visualizador sem cabeçalhos de IP de cliente encaminhados falham fechadas por design. - Para essa topologia de proxy:
- prefira
mode: "file"oumode: "both"quando você só precisar de um anexo, ou - habilite intencionalmente
security.allowRemoteViewere definaviewerBaseUrldo plugin ou passe umbaseUrlde proxy/público quando precisar de uma URL compartilhável do visualizador
- prefira
- Habilite
security.allowRemoteViewersomente quando você pretender acesso externo ao visualizador.
A linha de linhas não modificadas não tem botão de expansão
A linha de linhas não modificadas não tem botão de expansão
Isso pode acontecer para entrada de patch quando o patch não carrega contexto expansível. Isso é esperado e não indica falha do visualizador.
Artefato não encontrado
Artefato não encontrado
- O artefato expirou devido ao TTL.
- O token ou caminho mudou.
- A limpeza removeu dados obsoletos.
Orientação operacional
- Prefira
mode: "view"para revisões interativas locais no canvas. - Prefira
mode: "file"para canais de chat de saída que precisam de um anexo. - Mantenha
allowRemoteViewerdesabilitado, a menos que sua implantação exija URLs remotas do visualizador. - Defina
ttlSecondscurtos e explícitos para diffs sensíveis. - Evite enviar segredos na entrada de diff quando não for necessário.
- Se seu canal comprime imagens agressivamente (por exemplo, Telegram ou WhatsApp), prefira saída em PDF (
fileFormat: "pdf").
Mecanismo de renderização de diffs desenvolvido por Diffs.