Saltar al contenido principal

ADR-003: Plugin separado para el proxy del tutor IA (Alcance 3)

Estado: Aceptado | Fecha: 2026-06-22 | Autores: jcarroyos@gmail.com


Contexto

El Alcance 3 tiene dos flujos de datos con direcciones opuestas:

  1. Consulta (pull): un agente IA externo consulta datos del campus (progreso, calificaciones, alertas) para tomar decisiones autonomas. Este flujo esta cubierto por ADR-001, que decide implementar funciones externas de solo lectura dentro de local_pccntr8203403_dashboard.

  2. Conversacion (push): el estudiante envia un mensaje al tutor IA desde Moodle y recibe una respuesta. Este flujo requiere una funcion externa de tipo write con ajax: true, un proxy cURL al servicio externo, rate limiting, sanitizacion de la respuesta HTML y soporte para contexto SCORM.

La decision a tomar es si el flujo conversacional se implementa dentro de local_pccntr8203403_dashboard (junto con la capa de consulta) o en un plugin separado.

Opciones consideradas

Opcion 1: Agregar la funcion al plugin dashboard

  • Ventajas: un solo plugin local para todo el Alcance 3; menos artefactos que desplegar; misma ruta de upgrade.
  • Desventajas: mezcla responsabilidades: el dashboard es una capa de datos de solo lectura (ADR-001/ADR-002), y la funcion del tutor es un proxy de escritura que transmite datos personales a un servicio externo; las dependencias de configuracion (URL del servidor, token, rate limiting, timeout) no tienen relacion con las del dashboard; la capacidad RISK_PERSONAL del tutor contaminaria el perfil de riesgo del dashboard; el privacy provider del tutor (datos enviados al exterior) es fundamentalmente distinto al del dashboard (sin datos personales almacenados).

Opcion 2: Plugin separado local_pccntr8203403_aitutor

  • Ventajas: separacion de responsabilidades (lectura vs. proxy de escritura); configuracion autonoma (URL, token, rate limiting); capacidad propia con perfil de riesgo aislado; privacy provider especifico; se puede instalar, desinstalar o desactivar independientemente del dashboard; el tema consume ambos plugins pero por canales distintos (renderer + layout vs. standard_after_main_region_html()).
  • Desventajas: un plugin adicional que desplegar y mantener; no reutiliza la capa de datos del dashboard (no la necesita: el proxy transmite contexto de APIs core, no de course_stats).

Decision

Opcion elegida: Opcion 2 (plugin separado), porque la funcion de proxy tiene responsabilidades, configuracion, modelo de privacidad y perfil de riesgo distintos a los de la capa de datos del dashboard. La independencia permite activar o desactivar el tutor IA sin afectar el Dashboard de aprendizaje.

Reglas resultantes:

  • local_pccntr8203403_aitutor es el plugin del flujo conversacional (proxy al servicio externo). Su unica funcion externa es send_message.
  • local_pccntr8203403_dashboard continua siendo la capa de datos del Alcance 2, reutilizable por la capa de consulta del Alcance 3 (ADR-001) cuando se construya.
  • La presentacion del Drawer IA vive en theme_cdigital (plantilla, SCSS, AMD), coherente con el patron de ADR-002.
  • Los ajustes de conexion al servicio externo (URL, token, rate limiting, timeout) se administran desde la pagina de configuracion propia del plugin.

Consecuencias

  • El Alcance 3 tendra dos plugins locales: local_pccntr8203403_dashboard (consulta, ADR-001) y local_pccntr8203403_aitutor (conversacion, este ADR). Ambos son independientes y desplegables por separado.
  • Si en el futuro el tutor IA necesita datos de course_stats o academic_alerts para enriquecer el contexto del lado del servidor, el plugin puede importar esas clases sin establecer una dependencia formal en version.php (patron habitual entre plugins local_ en Moodle).