alexandrev-tibco 83d61df13b Exportar la comparación en un formato pensado para pegar a un LLM
Pedido: poder llevar la comparativa a una sesión abierta con un modelo para que
la use. Eso, y no un informe para imprimir, decide el formato: los ficheros
iguales se resumen en una linea en vez de listarse, los binarios solo se
mencionan, y las diferencias van en diff unificado, que los modelos leen de
forma nativa. Lo que se omite se dice en voz alta — un informe que se deja la
mitad en silencio es peor que ninguno, porque se lee como completo.

Las cabeceras `--- a/ +++ b/` cuestan dos lineas y convierten cada bloque en un
parche de verdad, asi que el modelo puede devolverlo por `git apply` en vez de
reescribir el cambio a mano. Que lo sea de verdad esta comprobado ejecutando
git sobre la salida en 10 escenarios (sin salto final, insercion al principio,
borrado al final...); dos fallos aparecieron asi: interlineaba `-` y `+` en vez
de agrupar, y contaba la linea fantasma que deja el ultimo `\n`.

Implementado en los dos motores (Swift y TypeScript) con la misma semantica, y
verificado que producen el mismo texto **byte a byte** para un mismo caso.
Tambien hay salida JSON, para alimentar una herramienta en vez de una charla.

UI en las dos apps: copiar al portapapeles primero (que es el gesto real), y
guardar/descargar despues. En web, si el portapapeles se niega, se descarga y
se avisa: un fallo silencioso ahi acaba en pegar contenido viejo sin saberlo.

De paso, un bug que esto destapó: el menu contextual de la web se cerraba en
`pointerdown`, quitando los botones antes de que su click llegara — ninguna
accion del menu funcionaba (tampoco "Set as base" ni "Expand all"). El smoke
test nunca habia pulsado una; ahora si.

Closes #9

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015hEAYuHRKMYz9sSa9zmbzz
2026-08-02 09:19:59 +02:00
2026-07-27 17:24:05 +02:00

Kotej

Comparador de ficheros, carpetas y artefactos (ZIP/JAR/EAR/WAR) para macOS. Ligero, sin dependencias externas y con el motor aislado del interfaz.

Qué lo diferencia

  • Los archivos son carpetas. Un JAR, un EAR o un WAR se abren y comparan como si fueran directorios, incluido anidado (EAR → JAR → clases).
  • Comparación semántica. Dos JSON o dos XML que significan lo mismo no se marcan como distintos aunque cambie el orden de claves, los atributos o el formato. Y puedes exigir byte a byte cuando lo necesites.
  • Rápido por diseño. La comparación es por niveles: el directorio central de un ZIP ya trae CRC32 y tamaño de cada entrada, así que dos JAR idénticos se resuelven sin descomprimir nada. Solo se lee el contenido que hace falta.

Modos de comparación

Modo Cuándo
Byte a byte Exactitud total; cualquier bit distinto cuenta
Texto Tolera fin de línea, espacios finales, mayúsculas o líneas en blanco (configurable)
Semántica JSON/XML equivalentes canónicamente, aunque los bytes difieran

Por defecto cada fichero usa el modo que le corresponde según su tipo (JSON/XML → semántica, texto → texto, resto → binaria).

Integración con Finder

Con la app instalada, activa la extensión en Ajustes del Sistema → General → Elementos de inicio y extensiones → Extensiones de Finder → Kotej. Después, en el menú contextual del Finder:

  • Selecciona dos elementos → Comparar los 2 elementos con Kotej
  • O selecciona uno → Seleccionar para comparar, y en otro → Comparar con “…”

También responde a kotej://compare?left=/ruta/a&right=/ruta/b, que abre la comparación en una pestaña.

Pestañas

Cada pestaña es una comparación independiente, con su propio estado y opciones. ⌘T abre una, ⌘W la cierra. Una comparación que llega desde el Finder reutiliza la pestaña actual si está vacía, y si no abre otra: nunca pisa lo que estabas comparando.

Estado

  • Motor (KotejEngine): lector ZIP propio, escaneo de árboles, archivos anidados, comparación por niveles, comparadores binario/texto/JSON/XML y diff de líneas.
  • App SwiftUI: pestañas (varias comparaciones en una ventana), comparación vacía con arrastrar y soltar, árbol side-by-side, filtro "solo diferencias", diff de fichero y resumen.
  • Idiomas: sigue el del sistema, con inglés y español incluidos.
  • Extensión de Finder.
  • Licencia por decidir; CLI para CI pendiente.

Desarrollo

swift test
S
Description
Kotej — comparador macOS estilo Beyond Compare: ZIP/JAR/EAR como carpetas, comparacion semantica JSON/XML, motor sin dependencias
Readme 1.6 MiB
Languages
Swift 53.2%
TypeScript 39.8%
CSS 4.2%
JavaScript 2.3%
Shell 0.4%
Other 0.1%