LocalLens
Estructura del código

Por qué esta estructura

Ocho archivos, a propósito.

LocalLens vive en ocho archivos TypeScript bajo src/. Ocho no es un número mágico — es la división más chica que le da a cada capa una frontera clara sin dejar a ninguna apretujada.

Esta página explica por qué no es un archivo y por qué no son treinta.

Por qué no un solo archivo

Una versión de un solo archivo de LocalLens es tentadora a este tamaño. También está mal, por tres razones:

  1. La integración con QVAC no debería compartir archivo con código de UI. El lifecycle del modelo tiene sus propias preocupaciones — carga lazy, selección de fallback, limpieza de workspace. Enhebrar eso a través de un handler de UI lo enterraría o lo duplicaría.
  2. Los adaptadores de archivos no deberían compartir archivo con inferencia del modelo. El walk de carpeta y la normalización del file picker del navegador son independientes del paso de embedding. Mantenerlos separados te permite cambiar uno sin tocar el otro.
  3. Las fronteras visibles ayudan a los lectores. Alguien que evalúa el codebase o considera una extensión puede leer solo src/qvac.ts para aprender la superficie de QVAC, solo src/files.ts para input, solo src/locallens.ts para workflow. Un monolito los obliga a tener toda la cosa en su cabeza.

Por qué no sobre-arquitecturado

LocalLens deliberadamente no tiene:

  • una jerarquía profunda de carpetas (src/services/rag/qvac/embeddings/…);
  • interfaces abstractas de repositorio o "store";
  • un framework de inyección de dependencias;
  • una abstracción prematura de base de datos vectorial;
  • un sistema de plugins;
  • un pipeline de build a medida más allá de bun build.

Cualquiera de esos sería razonable en una app más grande. Ninguno es un cuello de botella a este tamaño. Solo serían ceremonia que tendrías que leer antes de llegar al código real.

La forma que tiene

ArchivoPosee
domain.tsTipos y AppError.
files.tsDescubrimiento y adaptación de archivos.
rag.tsChunking y el prompt fundamentado.
qvac.tsIntegración con el SDK de QVAC.
store.tsPersistencia local en JSON.
locallens.tsEl workflow del producto (LocalLensApp).
cli.tsInterfaz de terminal.
server.tsInterfaz HTTP.
ui/Interacción del navegador.

La siguiente página expande esto con lo que cada archivo no debería poseer. Las fronteras son más fáciles de defender cuando sabes qué hay del otro lado.

Cuándo agregar un archivo

Agrega un archivo nuevo cuando una pieza de código empieza a tener dos razones para cambiar. Si te encuentras metiendo mano en un módulo para tocar algo no relacionado a su nombre, esa es la señal — separa la cosa no relacionada, y deja que ambos tengan un solo trabajo.

On this page