File size: 2,175 Bytes
b30b7c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Service worker INERTE (a propósito).
//
// Antes cacheaba ficheros de modelo interceptando las peticiones a HuggingFace,
// pero eso ROMPÍA la carga del ONNX: el fichero de pesos externos
// `model_q4.onnx_data` fallaba con ERR_FAILED al re-fetchearlo → el modelo no
// cargaba. Resultó que el SW era INNECESARIO: el cacheo ya lo hacen
//   - transformers.js con su propia Cache Storage (modelo ONNX «healed»), y
//   - litert.js con blob cache-first en Cache Storage (Gemma .litertlm),
// y `navigator.storage.persist()` evita que el navegador los desaloje.
//
// Así que este SW ya NO intercepta nada (el navegador gestiona todas las
// peticiones de forma nativa). Se mantiene registrado solo para REEMPLAZAR
// limpiamente al SW anterior que sí interceptaba y rompía la carga.
self.addEventListener('install', () => self.skipWaiting());
self.addEventListener('activate', e => e.waitUntil(self.clients.claim()));

// Permite vaciar la caché de modelos desde Ajustes (sin tocar el blob de Gemma
// salvo que se pida). NO hay handler de 'fetch' → cero interceptación.
self.addEventListener('message', e => {
  if (e.data === 'clear-models') {
    caches.delete('elffuss-models-v1').then(() => e.source && e.source.postMessage('models-cleared'));
  }
});

// Botón «▶ Ejecutar» en la notificación de mejoras del cerebro CEO: las
// notificaciones normales (new Notification()) no soportan acciones, las que
// pasan por el SW (registration.showNotification) sí. Al pulsar, avisamos a
// la pestaña (postMessage) para que mande la propuesta a la cola real.
self.addEventListener('notificationclick', event => {
  const action = event.action; // 'execute' | 'open' | '' (clic en el cuerpo)
  const data = event.notification.data || {};
  event.notification.close();
  event.waitUntil((async () => {
    const clientsList = await self.clients.matchAll({ type: 'window', includeUncontrolled: true });
    const client = clientsList[0];
    if (client) {
      client.postMessage({ type: 'notif-action', action, md: data.md });
      client.focus?.();
    } else if (self.clients.openWindow) {
      await self.clients.openWindow('/');
    }
  })());
});