Spaces:
Running
Running
| // 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('/'); | |
| } | |
| })()); | |
| }); | |