Ir al contenido principal

apply_diff

La herramienta apply_diff realiza cambios precisos y quirúrgicos en los archivos especificando exactamente qué contenido reemplazar. Utiliza múltiples estrategias sofisticadas para encontrar y aplicar cambios mientras mantiene el formato y la estructura adecuados del código.

Parámetros

La herramienta acepta estos parámetros:

  • path (requerido): La ruta del archivo a modificar, relativa al directorio de trabajo actual.
  • diff (requerido): El bloque de búsqueda/reemplazo que define los cambios. Los números de línea son obligatorios dentro del formato de contenido diff para todas las estrategias implementadas actualmente.

Nota: Aunque el sistema está diseñado para ser extensible con diferentes estrategias de diff, todas las estrategias implementadas actualmente requieren que los números de línea se especifiquen dentro del propio contenido diff usando el marcador :start_line:.

Qué Hace

Esta herramienta aplica cambios dirigidos a archivos existentes usando estrategias sofisticadas para localizar y reemplazar contenido con precisión. A diferencia de la búsqueda y reemplazo simple, utiliza algoritmos de coincidencia inteligentes (incluida la coincidencia difusa) que se adaptan a diferentes tipos de contenido y tamaños de archivo, con mecanismos de respaldo para ediciones complejas.

¿Cuándo se usa?

  • Cuando AI Cockpit Reasoning necesita realizar cambios precisos en el código existente sin reescribir archivos completos.
  • Al refactorizar secciones específicas de código mientras se mantiene el contexto circundante.
  • Al corregir errores en el código existente con precisión quirúrgica.
  • Al implementar mejoras de características que modifican solo ciertas partes de un archivo.

Características Principales

  • Utiliza coincidencia difusa inteligente con umbrales de confianza configurables (típicamente 0.8-1.0).
  • Proporciona contexto alrededor de las coincidencias usando BUFFER_LINES (predeterminado 40).
  • Emplea un enfoque de ventana deslizante para buscar en archivos grandes.
  • Preserva automáticamente el formato del código y la indentación.
  • Combina coincidencias superpuestas para mejorar la puntuación de confianza.
  • Muestra los cambios en una vista de diferencias para revisión y edición del usuario antes de aplicar.
  • Realiza seguimiento de errores consecutivos por archivo (consecutiveMistakeCountForApplyDiff) para prevenir fallos repetidos.
  • Valida el acceso a archivos contra las reglas de .aicockpitcodeignore.
  • Maneja ediciones de múltiples líneas de manera efectiva.

Limitaciones

  • Funciona mejor con secciones de código únicas y distintivas para una identificación confiable.
  • El rendimiento puede variar con archivos muy grandes o patrones de código altamente repetitivos.
  • La coincidencia difusa podría ocasionalmente seleccionar ubicaciones incorrectas si el contenido es ambiguo.
  • Cada estrategia de diff tiene requisitos de formato específicos.
  • Las ediciones complejas pueden requerir una selección cuidadosa de estrategia o revisión manual.

Cómo Funciona

Cuando se invoca la herramienta apply_diff, sigue este proceso:

  1. Validación de Parámetros: Valida los parámetros requeridos path y diff.
  2. Verificación de AI CockpitCodeIgnore: Valida si la ruta del archivo de destino está permitida por las reglas de .aicockpitcodeignore.
  3. Análisis del Archivo: Carga el contenido del archivo de destino.
  4. Búsqueda de Coincidencias: Utiliza los algoritmos de la estrategia seleccionada (exacta, difusa, ventanas deslizantes) para localizar el contenido de destino, considerando umbrales de confianza y contexto (BUFFER_LINES).
  5. Preparación de Cambios: Genera los cambios propuestos, preservando la indentación.
  6. Interacción con el Usuario:
    • Muestra los cambios en una vista de diferencias.
    • Permite al usuario revisar y potencialmente editar los cambios propuestos.
    • Espera la aprobación o rechazo del usuario.
  7. Aplicación de Cambios: Si se aprueba, aplica los cambios (potencialmente incluyendo ediciones del usuario) al archivo.
  8. Manejo de Errores: Si ocurren errores (p. ej., fallo de coincidencia, aplicación parcial), incrementa el consecutiveMistakeCountForApplyDiff para el archivo e informa el tipo de fallo.
  9. Retroalimentación: Devuelve el resultado, incluyendo cualquier retroalimentación del usuario o detalles de error.

Estrategia de Diff

AI Cockpit Reasoning utiliza esta estrategia para aplicar diffs:

MultiSearchReplaceDiffStrategy

Un formato de búsqueda/reemplazo mejorado que admite múltiples cambios en una sola solicitud. Los números de línea son obligatorios para cada bloque de búsqueda.

  • Mejor para: Múltiples cambios distintos donde los números de línea son conocidos o pueden estimarse.
  • Requiere: Coincidencia exacta para el contenido del bloque SEARCH, incluyendo espacios en blanco e indentación. El marcador :start_line: es obligatorio dentro de cada bloque SEARCH. Los marcadores dentro del contenido deben escaparse (\).

Formato de ejemplo para el bloque <diff>:

    // Lógica de cálculo actualizada con registro
console.log(`Calculando para el valor: ${value}`);
const result = value * 0.95; // Factor ajustado
return result;

const defaultTimeout = 10000; // Tiempo de espera aumentado