Files
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
..

Kotej web

La misma comparación que la app de macOS, pero en el navegador — y sin subir nada. Los ficheros se leen en el propio dispositivo con las APIs del navegador; no hay backend al que mandarlos.

https://kotej.alexandre-vazquez.cloud

Qué hace igual que el escritorio

  • Carpetas, ficheros y archivos (ZIP, JAR, EAR, y ZIPs con cualquier extensión), navegables como carpetas, incluso anidados
  • Comparación binaria, de texto (con tolerancias) y semántica: JSON por estructura y XML canónico, con los hermanos repetidos tratados como conjunto
  • Diff lado a lado con los caracteres exactos que cambian, y distinguiendo espacios / comentarios / contenido
  • Pestañas, filtros, búsqueda, navegación entre diferencias y texto pegado
  • Inglés y español, según el idioma del navegador

De un EAR sólo se lee la cola del fichero para listarlo, y las entradas se descomprimen bajo demanda; comparar dos idénticas no llega a leerlas, porque el CRC32 del directorio central ya lo resuelve.

Desarrollo

npm install
npm run dev      # servidor de desarrollo
npm test         # tests del motor (los mismos casos que el motor Swift)
npm run build    # bundle de producción

La prueba de navegador corre contra un build servido:

npm run build && npx vite preview --port 4173 &
npm run smoke

Despliegue

./deploy.sh — build, empaquetado y copia al LXC 142; NPM pone el TLS delante.