# AIbox DSpace

El plugin **AIbox DSpace** es una herramienta desarrollada en JavaScript puro (Vanilla JS) diseñada para integrarse directamente en el frontend de repositorios institucionales basados en **DSpace 7+ (Angular)**. Su propósito es brindar asistencia de Inteligencia Artificial a los usuarios, permitiéndoles analizar, resumir y explorar el contexto de los documentos académicos alojados en el repositorio.

El concepto original de este plugin está inspirado en la herramienta "AIbox Koha" desarrollada por la biblioteca de la Pontificia Università della Santa Croce, y ha sido adaptado y rediseñado desde cero por **MetaBiblioteca SAS** para la arquitectura de DSpace.

---

## ⚙️ ¿Cómo funciona?

El funcionamiento del script se divide en tres fases principales: **Detección, Extracción e Inyección**.

### 1. Detección Inteligente de Vistas (SPA)
Dado que DSpace 7 funciona como una aplicación de página única (Single Page Application o SPA), el navegador no recarga completamente la página cuando el usuario navega entre diferentes recursos. 

Para solucionar esto, el script utiliza un `MutationObserver`. Este componente vigila constantemente los cambios en el documento y determina de manera automática cuándo el usuario ingresa a la vista detallada de un recurso (por ejemplo, rutas que contienen `/items/` o `/entities/publication/`). El sistema espera estratégicamente a que Angular termine de construir la página antes de intervenir, garantizando que no afecte el rendimiento del repositorio.

### 2. Extracción de Metadatos
Una vez que el sistema detecta que el usuario está visualizando un recurso, procede a extraer su información bibliográfica. 

Para asegurar una alta fiabilidad frente a posibles cambios en el diseño visual del tema de DSpace, el script **no lee los textos visibles en la pantalla**. En su lugar, extrae los metadatos directamente desde las etiquetas SEO invisibles (`<meta>`) estándar de **Highwire Press**, las cuales DSpace inyecta en la cabecera del sitio para indexación en Google Scholar.

El sistema recopila de forma transparente:
- Título (`citation_title`)
- Lista completa de autores (`citation_author`)
- Fecha de publicación (`citation_publication_date`)
- Editorial / Institución (`citation_publisher`, `citation_dissertation_institution` o `citation_technical_report_institution`)
- Identificadores (ISBN, ISSN)
- URL directa del recurso

### 3. Inyección de la Interfaz y Ejecución
Con la información recopilada, el script inyecta un panel interactivo ("Inteligencia Artificial") en la barra lateral del repositorio. 

Este panel ofrece un menú desplegable con varios motores de Inteligencia Artificial soportados (tales como Google AI, ChatGPT, Claude y Perplexity) y una serie de botones de acción (por ejemplo, "Generar resumen", "Generar palabras clave", "Redactar biografía del autor", etc.).

Al hacer clic en un botón, el script realiza lo siguiente:
1. Toma una plantilla de texto (Prompt) según la acción seleccionada y el idioma actual del repositorio (inglés o español).
2. Reemplaza las variables de la plantilla (como `$title` o `$authors`) con los metadatos reales extraídos en el paso anterior.
3. Anexa el contexto bibliográfico completo (incluyendo la URL) al final del *prompt*.
4. Redirige al usuario a la Inteligencia Artificial seleccionada en una pestaña nueva, enviando el *prompt* por medio de la URL para que el chat inicie automáticamente con la instrucción precisa.

---

## 🔧 Detalles Técnicos

- **Cero Dependencias:** El script está escrito en JavaScript nativo. No requiere jQuery ni librerías de terceros, lo que resulta en un tiempo de carga y ejecución inmediato (impacto nulo en la latencia).
- **Estilos Heredados:** La interfaz inyectada utiliza las clases CSS nativas de Bootstrap y DSpace (`bg-primary`, `titleSection`, etc.), logrando que el plugin herede automáticamente los colores, fuentes y estilos propios de la institución sin necesidad de configuraciones visuales adicionales.
- **Almacenamiento Local:** Las preferencias del usuario (por ejemplo, el motor de IA seleccionado) se guardan en el `localStorage` del navegador bajo la llave `metaaibox_engine`. De esta manera, el sistema recuerda la elección del usuario mientras continúa navegando por el repositorio.
- **Internacionalización:** Todos los textos y *prompts* generados por el script se adaptan al idioma de la interfaz del usuario al vuelo.

---
**Licencia:** CC BY-SA 4.0
