tosijs/state (DOM-free)

State that belongs to no framework — and no environment. tosijs/state is the observable-state layer with no DOM globals touched at import, so it loads in plain Node, a worker, an SSR pipeline, or a migration script with no happy-dom shim in sight:

import { tosi, observe, xin } from 'tosijs/state'

const { app } = tosi({ app: { count: 0 } })
observe('app.count', (path) => console.log('changed:', path, xin[path]))
app.count = 1

Everything here is identical to the same export from tosijs — this is a narrower door onto the same house, not a different implementation. Bindings, components, CSS and the agent surface live behind the main entry (and tosijs/core), because those genuinely need a DOM.

Observers still fire in a DOM-free environment; there is simply nothing bound for them to update.

Closes tosijs#18 (raised from react-tosijs, which consumes exclusively DOM-free API).