Pular para o conteúdo principal

apply_diff

A ferramenta apply_diff faz alterações precisas e cirúrgicas em arquivos, especificando exatamente qual conteúdo substituir. Ela usa várias estratégias sofisticadas para encontrar e aplicar alterações, mantendo a formatação e a estrutura do código adequadas.

Parâmetros

A ferramenta aceita estes parâmetros:

  • path (obrigatório): O caminho do arquivo a ser modificado em relação ao diretório de trabalho atual.
  • diff (obrigatório): O bloco de busca/substituição que define as alterações. Os números de linha são obrigatórios no formato de conteúdo do diff para todas as estratégias atualmente implementadas.

Nota: Embora o sistema seja projetado para ser extensível com diferentes estratégias de diff, todas as estratégias atualmente implementadas exigem que os números de linha sejam especificados no próprio conteúdo do diff usando o marcador :start_line:.

O Que Faz

Esta ferramenta aplica alterações direcionadas a arquivos existentes usando estratégias sofisticadas para localizar e substituir o conteúdo com precisão. Diferente da busca e substituição simples, ela usa algoritmos de correspondência inteligentes (incluindo correspondência aproximada) que se adaptam a diferentes tipos de conteúdo e tamanhos de arquivo, com mecanismos de fallback para edições complexas.

Quando é usada?

  • Quando o AI Cockpit Reasoning precisa fazer alterações precisas no código existente sem reescrever arquivos inteiros.
  • Ao refatorar seções específicas do código, mantendo o contexto ao redor.
  • Ao corrigir bugs no código existente com precisão cirúrgúrgica.
  • Ao implementar melhorias de recursos que modificam apenas certas partes de um arquivo.

Principais Características

  • Usa correspondência aproximada inteligente com limites de confiança configuráveis (normalmente 0.8-1.0).
  • Fornece contexto em torno das correspondências usando BUFFER_LINES (padrão 40).
  • Emprega uma abordagem de janela sobreposta para pesquisar arquivos grandes.
  • Preserva a formatação e a indentação do código automaticamente.
  • Combina correspondências sobrepostas para melhorar a pontuação de confiança.
  • Mostra as alterações em uma visualização de diff para revisão e edição do usuário antes de aplicar.
  • Rastreia erros consecutivos por arquivo (consecutiveMistakeCountForApplyDiff) para evitar falhas repetidas.
  • Valida o acesso ao arquivo em relação às regras .aicockpitcodeignore.
  • Lida com edições de várias linhas de forma eficaz.

Limitações

  • Funciona melhor com seções de código únicas e distintas para identificação confiável.
  • O desempenho pode variar com arquivos muito grandes ou padrões de código altamente repetitivos.
  • A correspondência aproximada pode ocasionalmente selecionar locais incorretos se o conteúdo for ambíguo.
  • Cada estratégia de diff tem requisitos de formato específicos.
  • Edições complexas podem exigir uma seleção cuidadosa da estratégia ou revisão manual.

Como Funciona

Quando a ferramenta apply_diff é invocada, ela segue este processo:

  1. Validação de Parâmetros: Valida os parâmetros obrigatórios path e diff.
  2. Verificação do AI CockpitCodeIgnore: Valida se o caminho do arquivo de destino é permitido pelas regras .aicockpitcodeignore.
  3. Análise do Arquivo: Carrega o conteúdo do arquivo de destino.
  4. Encontrando Correspondências: Usa os algoritmos da estratégia selecionada (exata, aproximada, janelas sobrepostas) para localizar o conteúdo de destino, considerando os limites de confiança e o contexto (BUFFER_LINES).
  5. Preparação da Alteração: Gera as alterações propostas, preservando a indentação.
  6. Interação com o Usuário:
    • Exibe as alterações em uma visualização de diff.
    • Permite que o usuário revise и edite potencialmente as alterações propostas.
    • Aguarda a aprovação ou rejeição do usuário.
  7. Aplicação da Alteração: Se aprovado, aplica as alterações (potencialmente incluindo edições do usuário) ao arquivo.
  8. Tratamento de Erros: Se ocorrerem erros (por exemplo, falha na correspondência, aplicação parcial), incrementa o consecutiveMistakeCountForApplyDiff para o arquivo e relata o tipo de falha.
  9. Feedback: Retorna o resultado, incluindo qualquer feedback do usuário ou detalhes do erro.

Estratégia de Diff

O AI Cockpit Reasoning usa esta estratégia para aplicar diffs:

MultiSearchReplaceDiffStrategy

Um formato aprimorado de busca/substituição que suporta várias alterações em uma única solicitação. Os números de linha são obrigatórios para cada bloco de busca.

  • Melhor para: Múltiplas alterações distintas onde os números de linha são conhecidos ou podem ser estimados.
  • Requer: Correspondência exata para o conteúdo do bloco SEARCH, incluindo espaços em branco e indentação. O marcador :start_line: é obrigatório em cada bloco SEARCH. Marcadores dentro do conteúdo devem ser escapados (\).

Formato de exemplo para o bloco <diff>:

    // Lógica de cálculo atualizada сom registro
console.log(`Calculando para o valor: ${value}`);
const result = value * 0.95; // Fator ajustado
return result;

const defaultTimeout = 10000; // Tempo limite aumentado