LocalLens
Setup

Rodar o app no navegador

Suba o servidor Bun e converse com brains pela UI.

O app no navegador é a contraparte mais duradoura da CLI. Mantém os brains por aí, suporta vários ao mesmo tempo e te dá uma thread de chat por brain.

Subir o servidor

PORT=4180 bun run dev

Você deve ver:

LocalLens is running at http://localhost:4180

Sem PORT, o servidor escuta na 3000. Abra http://localhost:4180 em qualquer navegador moderno.

Passando pela demo

  1. Digite um nome de brain. Algo como Sample brain.

  2. Clique em Choose folder. O file picker do navegador abre. Selecione examples/sample-brain do repositório.

  3. Clique em Create and index. A UI faz stream do progresso enquanto os arquivos são lidos, chunked e embedados.

  4. Quando o brain aparecer como indexed na sidebar, digite uma pergunta no input de chat. Por exemplo:

    Why does LocalLens use QWEN3_1_7B_INST_Q4?

  5. Aperte Send. A resposta vem em stream com citações [1], [2], e a lista de fontes no rodapé linka cada uma de volta para o arquivo.

O que tem por trás da UI

O app do navegador é HTML, JS e CSS puros em src/ui/. Conversa com o servidor Bun em src/server.ts por uma pequena API JSON:

MethodPathBodyReturns
GET/api/health{ ok: true, name: "LocalLens" }
GET/api/brains{ brains: Brain[] }
POST/api/brains/from-filesCreateBrainFromFilesInput{ brain: Brain }
POST/api/brains/:id/chat{ question: string }ChatAnswer
DELETE/api/brains/:id204 No Content

Toda rota chega em LocalLensApp em src/locallens.ts.

Escolher uma pasta no navegador

A API <input type="file" webkitdirectory> dá ao navegador o conteúdo da pasta mas não o caminho absoluto. O LocalLens guarda o brain com um caminho virtual tipo browser://my-folder para você ainda saber de onde veio.

Parar o servidor

Ctrl+C dispara o handler de SIGINT em src/server.ts. Ele chama app.close() e desmonta o QVAC limpo:

process.on("SIGINT", async () => {
  await app.close();
  process.exit(0);
});

On this page