Local Research Agent es un monorepo con un agente de investigación (solo lectura): la API usa Gemini con herramientas para listar directorios, buscar en archivos y leer ficheros dentro de un workspace acotado. La web es un chat (React + Vite + shadcn/ui) que habla con esa API.
- Bun (recomendado v1.3+)
- Clave Google AI / Gemini (
GOOGLE_API_KEY)
| Ruta | Descripción |
|---|---|
apps/api |
Servidor Hono + Bun, bucle de agente con @google/generative-ai |
apps/web |
SPA React: chat con Markdown en los mensajes |
docker/ |
Entrypoint de clonado de repo, Nginx y ejemplo de variables para Compose |
Instalar dependencias en la raíz (workspaces):
bun installcd apps/api
cp .env.example .env # edita GOOGLE_API_KEY y, si quieres, AGENT_WORKSPACE_ROOT
bun run devPor defecto escucha en http://localhost:3000. El workspace del agente es process.cwd() de la API salvo que definas AGENT_WORKSPACE_ROOT (ruta absoluta al código que quieras inspeccionar).
En otra terminal:
cd apps/web
bun run devAbre http://localhost:5173. Vite hace proxy de /api al puerto 3000, así el chat usa rutas relativas sin CORS extra.
bun install
bun run dev(Asegúrate de tener apps/api/.env configurado.)
| Método | Ruta | Descripción |
|---|---|---|
GET |
/api/health |
Comprobación simple |
GET |
/api/agent |
Capacidades del agente (tools, workspaceRoot, etc.) |
POST |
/api/agent/chat |
Cuerpo JSON: { "message": string, "history?": { "role": "user"|"model", "content": string }[] }. Respuesta: { "reply", "run" } |
Variables de entorno de la API: ver apps/api/.env.example.
Permite pasar la URL HTTPS de un repositorio Git público: el contenedor de la API lo clona en /workspace y el agente lee solo ese árbol.
- Copia docker/.env.example a
.enven la raíz del monorepo (Compose carga ese archivo por defecto). - Rellena al menos
GOOGLE_API_KEYyREPO_URL(ej.https://github.com/org/repo.git). - Con Docker Desktop (o motor Docker) en marcha:
docker compose up --build- Interfaz: http://localhost:8080
- La web (Nginx) sirve el estático y hace proxy de
/api/al servicioapien el puerto 3000.
Opcionales en .env: REPO_REF (rama/tag), FORCE_REPO_REFRESH=true para forzar un clon limpio del volumen, y el resto de variables del agente como en apps/api/.env.example.
Detalles de la imagen: Dockerfile (multi-stage: API Bun + web estática con Nginx).
bun run buildGenera apps/web/dist y compila lo necesario de la API según los scripts de cada app.
El agente no debe exponer un workspace sin acotar en entornos no confiables. En Docker solo se clona la URL que configures; revisa el origen del repositorio. No subas .env con claves al repositorio.