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:
- Validação de Parâmetros: Valida os parâmetros obrigatórios
path
ediff
. - Verificação do AI CockpitCodeIgnore: Valida se o caminho do arquivo de destino é permitido pelas regras
.aicockpitcodeignore
. - Análise do Arquivo: Carrega o conteúdo do arquivo de destino.
- 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
). - Preparação da Alteração: Gera as alterações propostas, preservando a indentação.
- 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.
- Aplicação da Alteração: Se aprovado, aplica as alterações (potencialmente incluindo edições do usuário) ao arquivo.
- 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. - 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