Esta guía cubre la instalación del proyecto original en Linux o WSL, incluyendo requisitos, arranque, variables de entorno, tests y problemas habituales de instalación o del entorno.
Requisitos verificados en el código del proyecto:
- Node.js con soporte para:
- módulos ESM (
"type": "module") fetchglobal en Node- runner de tests nativo con
node --test
- módulos ESM (
- npm
- Un entorno donde pueda compilarse o instalarse
sqlite3 - Sistema Linux o WSL
Dependencias declaradas:
expresssqlite3
Comprueba que tienes Node y npm:
node -v
npm -vSi faltan, instálalos desde el gestor de paquetes de tu distribución o con tu gestor de versiones habitual.
Comprueba lo mismo dentro de tu distro WSL:
node -v
npm -vSi vas a usar el selector nativo de PDF de Windows o la integración con Explorer, además necesitas:
- acceso desde WSL a
powershell.exe - acceso desde WSL a
explorer.exe - una ruta compartida de Windows accesible, normalmente
/mnt/c/...
cd /home/norwi/.openclaw/workspace/projects/pdf-tracker
npm installEsto instalará las dependencias del proyecto y dejará listo el backend Express con SQLite.
El proyecto incluye un ejemplo mínimo:
cp .env.example .envContenido actual de .env.example:
PORT=3001Importante: el servidor no carga .env automáticamente porque el proyecto no usa dotenv. En el estado actual del código, estas variables deben exportarse en la shell o pasarse inline al arrancar.
Ejemplo:
PORT=3001 npm startPORT: puerto del servidor, por defecto3001
OPENCLAW_WSL_POWERSHELL: ruta apowershell.exedesde WSLOPENCLAW_WSL_EXPLORER: ruta aexplorer.exedesde WSLOPENCLAW_WSL_PICKER_SCRIPT: ruta al script PowerShell del selector de PDFOPENCLAW_WSL_PICKER_TMP_DIR: directorio temporal compartido para el resultado del selectorOPENCLAW_WSL_PICKER_TIMEOUT_MS: timeout del selector en milisegundos, con mínimo efectivo de250
Valores por defecto relevantes en el código:
OPENCLAW_WSL_POWERSHELL=/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exeOPENCLAW_WSL_EXPLORER=/mnt/c/Windows/explorer.exeOPENCLAW_WSL_PICKER_SCRIPT=<proyecto>/scripts/pick-pdf-windows.ps1OPENCLAW_WSL_PICKER_TMP_DIR=/mnt/c/Windows/TempOPENCLAW_WSL_PICKER_TIMEOUT_MS=15000
cd /home/norwi/.openclaw/workspace/projects/pdf-tracker
npm startnpm run devEn este proyecto ambos scripts ejecutan actualmente el mismo comando:
node src/server.jsUna vez arrancado, abre:
http://localhost:3001
Y comprueba el healthcheck:
curl http://localhost:3001/healthRespuesta esperada similar a:
{"ok":true,"app":"pdf-tracker","dbPath":".../data/pdf-tracker.sqlite"}La base de datos SQLite se crea automáticamente en:
data/pdf-tracker.sqlite
El directorio data/ también se crea automáticamente si no existe.
Para ejecutar toda la suite:
npm testEl proyecto usa el runner nativo de Node:
node --testCobertura observable en los tests incluidos:
- creación y migración de base de datos
- API de alta, listado, filtrado, edición y borrado
GET /health- servido del frontend estático
- parseo y deduplicación de keywords
- normalización de rutas
- integración de utilidades del sistema
- selector nativo de PDF en Linux y WSL
Suele ser un problema del entorno de compilación o de binarios nativos.
Qué revisar:
- versión de Node instalada
- que
npmesté funcionando correctamente - que el entorno tenga herramientas básicas de compilación si el paquete necesita compilarse
- repetir la instalación limpia:
rm -rf node_modules package-lock.json
npm installSi estás en WSL, asegúrate de ejecutar la instalación dentro del propio entorno WSL del proyecto.
El código usa:
const PORT = process.env.PORT || 3001;Así que debes exportar el puerto o pasarlo al arrancar:
PORT=3001 npm startRecuerda que copiar .env no basta por sí solo en este proyecto.
Comprueba:
- que
npm startsiga en ejecución - que
public/index.htmlexista - que puedas acceder a
http://localhost:3001/health
Si /health responde pero / no, revisa el directorio public/.
La app intenta crear automáticamente:
- el directorio
data/ - el fichero
data/pdf-tracker.sqlite
Si falla, revisa permisos de escritura en el directorio del proyecto.
En Linux el backend intenta usar, por este orden:
zenitykdialog
Si ninguno está disponible, la app devolverá un error y tendrás que pegar la ruta manualmente.
Revisa:
- que exista
powershell.exeen la ruta configurada - que exista
explorer.exesi también usas apertura de carpetas - que exista
scripts/pick-pdf-windows.ps1 - que
/mnt/c/Windows/Tempo el directorio configurado sea accesible - que el timeout no sea demasiado bajo
Si aun así falla, puedes seguir usando la app escribiendo la ruta del PDF manualmente.
Es normal si:
- el registro apunta a una URL (
http://,https://,file://) - el entorno no soporta resaltar el fichero de forma nativa
- WSL no puede acceder a
explorer.exe
En Linux, la app puede degradar la acción y abrir solo la carpeta contenedora.
La app tolera rutas como:
D:\Papers\paper.pdf/mnt/d/Papers/paper.pdf
Para integración con Windows, el código convierte rutas /mnt/<unidad>/... a formato Windows cuando es posible.
cd /home/norwi/.openclaw/workspace/projects/pdf-tracker
npm install
PORT=3001 npm start
npm testDespués abre http://localhost:3001.