Fix local AI checks and consent caching
Build and publish static assets / publish (push) Failing after 4s

This commit is contained in:
Ein Anderssono
2026-10-19 12:03:41 +02:00
parent 73c0c0b8ba
commit 9a71195d62
3 changed files with 8 additions and 5 deletions
+6 -3
View File
@@ -187,12 +187,15 @@
} }
localStorage.setItem(acceptanceKey(manifest), manifest.license.acceptance_id); localStorage.setItem(acceptanceKey(manifest), manifest.license.acceptance_id);
enabled = true; localStorage.setItem('ai-spel-local-ai-enabled', 'true'); enabled = true; localStorage.setItem('ai-spel-local-ai-enabled', 'true');
if (!('indexedDB' in global)) return 'Ditt godkännande sparades. Webbläsaren saknar lokal lagring som krävs för Gemma, men spelet fungerar utan lokal AI.';
announce('Godkännandet sparades för det här kontot och den här versionen av villkoren. Hämtar nu modellen från static-servern.'); announce('Godkännandet sparades för det här kontot och den här versionen av villkoren. Hämtar nu modellen från static-servern.');
try { await engine(); return 'Tack. Godkännandet sparades på den här enheten och modellen hämtas nu från static-servern.'; } engine().catch(() => {});
catch (_) { return 'Godkännandet sparades. Modellen kunde inte starta just nu; spelet fungerar fortfarande utan lokal AI.'; } return 'Tack. Godkännandet sparades på den här enheten och modellen hämtas nu från static-servern.';
} }
if (normalized === 'lokal ai avvisa villkor') { if (normalized === 'lokal ai avvisa villkor') {
const manifest = await getManifest(); let manifest;
try { manifest = await getManifest(); }
catch (_) { enabled = false; localStorage.setItem('ai-spel-local-ai-enabled', 'false'); return 'Static-servern kunde inte läsa villkorsversionen. Ingen Gemma-modell startas; spelet fungerar utan lokal AI.'; }
localStorage.removeItem(acceptanceKey(manifest)); localStorage.removeItem(acceptanceKey(manifest));
enabled = false; localStorage.setItem('ai-spel-local-ai-enabled', 'false'); enabled = false; localStorage.setItem('ai-spel-local-ai-enabled', 'false');
downloadAbort?.abort(); loadedEngine?.instance.exit?.(); loadedEngine = undefined; downloadAbort?.abort(); loadedEngine?.instance.exit?.(); loadedEngine = undefined;
+1 -1
View File
@@ -130,7 +130,7 @@ for (const file of voiceFiles) {
const downloaded = join(output, 'voices', file.path); const downloaded = join(output, 'voices', file.path);
if ((await stat(downloaded)).size !== file.size) throw new Error(`Missing verified voice file: ${file.path}`); if ((await stat(downloaded)).size !== file.size) throw new Error(`Missing verified voice file: ${file.path}`);
} }
console.log(`Static Piper assets prepared at ${output}`); console.log(`Static voice and local AI assets prepared at ${output}`);
async function downloadVerified(url, destination, expectedSize, expectedSha256) { async function downloadVerified(url, destination, expectedSize, expectedSha256) {
await mkdir(join(destination, '..'), {recursive: true}); await mkdir(join(destination, '..'), {recursive: true});
+1 -1
View File
@@ -16,7 +16,7 @@ test('local assistance includes preflight, bounded continuity, and unsaved offli
assert.match(source, /async function assist\(/); assert.match(source, /async function assist\(/);
assert.match(source, /async function offline\(/); assert.match(source, /async function offline\(/);
assert.match(source, /slice\(-12\)/); assert.match(source, /slice\(-12\)/);
assert.match(source, /Lokalt, osparat förslag/); assert.match(source, /Jag kan inte skapa ett lokalt förslag/);
}); });
test('local diagnostics are opt-in, stored in IndexedDB, exportable, and deletable', () => { test('local diagnostics are opt-in, stored in IndexedDB, exportable, and deletable', () => {