q / core /state.js
Humuhumu33's picture
Upload folder using huggingface_hub
3365e13 verified
Raw
History Blame Contribute Delete
1.65 kB
// core/state.js — a tiny event bus + the app's shared mutable state. No framework: modules
// subscribe to named events and re-render their own DOM islands. Deliberately minimal — the
// durable truth lives in the κ-object store (Law L3); this is only the session's working set.
export function makeBus() {
const subs = new Map();
return {
on(ev, fn) { if (!subs.has(ev)) subs.set(ev, new Set()); subs.get(ev).add(fn); return () => subs.get(ev)?.delete(fn); },
emit(ev, data) { for (const fn of subs.get(ev) || []) { try { fn(data); } catch (e) { console.error(`[bus:${ev}]`, e); } } },
};
}
export function makeState() {
return {
// model / engine
engine: null, // core/engine.js instance (null until a model loads)
modelIndex: 0, // index into loader.MODELS
loading: false,
gateOk: false, // conscience constitution self-verify
// conversation working set
convId: null, // active conversation id
convKappa: null, // its latest sealed κ
title: "New Chat",
messages: [], // [{ obj (sealed κ-object), id, kappa, ...norm fields, tokenIds }]
chosenChild: new Map(), // parent messageId → chosen child messageId (sibling switch)
streaming: false,
abort: null, // AbortController while generating
// ui
navOpen: window.innerWidth > 900,
panelOpen: false, // the chat is the product — the panel opens on demand
panelTab: "params",
settingsOpen: false,
// preset (the active parameter bundle — LibreChat conversationPreset semantics)
preset: null,
};
}