Something went wrong. Try again.
a tiny pet with a GPT-2 brain, living in your browser
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394import { cachedBrains, loadBrain, stopBrain, updateStorage } from "./brain.ts";import { CFG } from "./config.ts";import { stopGameControls } from "./game.ts";import { planAlerts } from "./pwa.ts";import { catchUp } from "./simulation.ts";import { cancelSave, fresh, KEY, load } from "./storage.ts";import { brain, emit, store } from "./store.ts";
let releaseTab: (() => void) | null = null;
function requestTab(steal: boolean): Promise<boolean> { if (!navigator.locks) return Promise.resolve(true); return new Promise((resolve) => { navigator.locks .request(KEY, steal ? { steal: true } : { ifAvailable: true }, (lock) => { resolve(!!lock); return lock ? new Promise<void>((release) => { releaseTab = release; }) : undefined; }) .catch(() => { resolve(false); lostTab(); }); });}export async function claimTab(steal: boolean): Promise<boolean> { // A reload can request its new lock before the old document's release reaches // the lock manager. Retry briefly without stealing from another live tab. for (let attempt = 0; attempt < 3; attempt++) { if (await requestTab(steal && attempt === 0)) return true; if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 100)); } return false;}export function lostTab() { store.tabOwned = false; cancelSave(); stopBrain(); stopGameControls(); emit();}export function takeOver() { try { sessionStorage.setItem("tokenling.steal", "1"); } catch { /* optional */ } location.reload();}export async function boot() { let steal = false; try { steal = sessionStorage.getItem("tokenling.steal") === "1"; sessionStorage.removeItem("tokenling.steal"); } catch { /* optional */ } store.tabOwned = await claimTab(steal); store.state = store.tabOwned ? load() : fresh(); if (!store.tabOwned) return; addEventListener("pagehide", () => { void planAlerts(); lostTab(); releaseTab?.(); releaseTab = null; }); addEventListener("pageshow", (event) => { if (event.persisted) location.reload(); }); if (store.badEgg) return; catchUp(); document.addEventListener("visibilitychange", () => { if (document.hidden) stopGameControls(); if (!store.tabOwned) return; if (!document.hidden) { catchUp(); emit(); } void planAlerts(); }); addEventListener("blur", stopGameControls); void planAlerts(); void updateStorage();}export async function resumeBrain() { if (!store.tabOwned || store.badEgg) return; const have = await cachedBrains(); if (store.state.egg && store.state.owner) void loadBrain(CFG.modelId); else if (store.state.pet && have.length && !brain.worker) void loadBrain(have[0]);}