@almadar/runtime 6.9.2 → 6.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{OrbitalServerRuntime-CzUrdroI.d.ts → OrbitalServerRuntime-BNRZpSZm.d.ts} +55 -47
- package/dist/OrbitalServerRuntime.d.ts +3 -3
- package/dist/OrbitalServerRuntime.js +1852 -1
- package/dist/OrbitalServerRuntime.js.map +1 -1
- package/dist/ServerBridge.d.ts +1 -1
- package/dist/{chunk-VUXJJPIQ.js → chunk-R6Y4IJ7I.js} +1219 -3063
- package/dist/chunk-R6Y4IJ7I.js.map +1 -0
- package/dist/createOsHandlers.d.ts +1 -1
- package/dist/createOsHandlers.js +6 -2
- package/dist/createOsHandlers.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/{types-CjvQG_33.d.ts → types-cuy5gd29.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-VUXJJPIQ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"OrbitalServerRuntime.js"}
|
|
1
|
+
{"version":3,"sources":["../src/OrbitalServerRuntime.ts"],"names":["fieldName","wantedTrait"],"mappings":"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","file":"OrbitalServerRuntime.js","sourcesContent":["/**\n * OrbitalServerRuntime - Dynamic Server-Side Orbital Execution\n *\n * This runtime takes an OrbitalSchema and dynamically:\n * 1. Registers all orbitals and their traits\n * 2. Creates Express routes for trait communication\n * 3. Executes state machines server-side\n * 4. Handles cross-orbital event propagation\n *\n * This is the \"interpreted\" mode - no compilation needed.\n * The compiler generates equivalent static code for production.\n *\n * @example\n * ```typescript\n * import { OrbitalServerRuntime } from '@kflow-builder/shared/runtime';\n * import express from 'express';\n *\n * const app = express();\n * const runtime = new OrbitalServerRuntime();\n *\n * // Register schema (can be loaded from file, API, etc.)\n * runtime.register(orbitalSchema);\n *\n * // Mount orbital routes\n * app.use('/api/orbitals', runtime.router());\n *\n * // Client can now:\n * // POST /api/orbitals/:orbital/events - Send event to orbital\n * // GET /api/orbitals/:orbital/state - Get current state\n * // GET /api/orbitals - List registered orbitals\n * ```\n *\n * @packageDocumentation\n */\n\n// `express` is Node-only (HTTP router, no browser equivalent). Importing\n// the named `Router` at top-level baked the module into the dist bundle,\n// where Vite/rollup's stricter named-import resolution choked because\n// `__vite-browser-external` doesn't expose `Router`. Solution: type-only\n// import here, load the runtime value inside `router()` via the\n// eval-require helper below — invisible to bundler static analysis.\nimport type {\n Router as ExpressRouter,\n Request,\n Response,\n NextFunction,\n} from \"express\";\nimport { EventBus } from \"./EventBus.js\";\nimport {\n StateMachineManager,\n processEvent,\n createInitialTraitState,\n} from \"./StateMachineCore.js\";\nimport { EffectExecutor } from \"./EffectExecutor.js\";\nimport { createLogger } from '@almadar/logger';\n// Same treatment for `LocalPersistenceAdapter` (uses `fs`, `path`) and\n// `createOsHandlers` (uses `fs`, `net`, `child_process`). The runtime\n// auto-wires both in the constructor's Node-only branch — guarded by\n// `isNodeEnv()` — and the eval-require keeps the imports out of the\n// browser bundle entirely.\nimport type { LocalPersistenceAdapter as LocalPersistenceAdapterType } from \"./LocalPersistenceAdapter.js\";\nimport type {\n createOsHandlers as CreateOsHandlersFn,\n OsHandlerResult,\n} from \"./createOsHandlers.js\";\nimport {\n validateEventPayload,\n formatPayloadValidationError,\n type PayloadValidationFailure,\n} from \"./PayloadValidator.js\";\n\n/**\n * Synchronous Node-only require, hidden from bundler static analysis.\n *\n * Bundlers (tsup, Vite/rollup, webpack) walk imports statically. The two\n * indirections below — `(0, eval)('require')` and the namespace import of\n * `'module'` resolved by property access — keep the dist bundle free of\n * any reference to `fs`, `net`, `child_process`, or `express`, so any\n * browser bundler can consume `OrbitalServerRuntime.js` without a\n * polyfill / stub / fallback chain.\n *\n * Why both paths:\n * - `eval('require')` works in CommonJS Node (returns the runtime require).\n * - In ESM Node, `require` isn't a global, so the eval returns undefined.\n * We fall back to `createRequire(import.meta.url)` from the `'module'`\n * built-in, which IS the canonical ESM-Node way to synchronously load\n * a Node module.\n *\n * Every call site is guarded by `isNodeEnv()` upstream so the browser\n * never reaches this. In browsers the namespace import of `'module'`\n * resolves to an empty stub via the package.json `browser` field; the\n * function is never invoked, so the empty-stub never matters.\n */\nimport * as nodeModule from 'module';\nlet _resolvedNodeRequire: NodeRequire | null = null;\nfunction nodeRequire<T = unknown>(modulePath: string): T {\n if (!_resolvedNodeRequire) {\n const evalRequire = (0, eval)('typeof require !== \"undefined\" ? require : null') as NodeRequire | null;\n if (evalRequire) {\n _resolvedNodeRequire = evalRequire;\n } else {\n const createReq = (nodeModule as { createRequire?: (url: string | URL) => NodeRequire }).createRequire;\n if (typeof createReq !== 'function') {\n throw new Error(\n '[OrbitalServerRuntime] No synchronous require available. This branch is Node-only — invoking it from a browser indicates an isNodeEnv() guard regression upstream.',\n );\n }\n _resolvedNodeRequire = createReq(import.meta.url);\n }\n }\n return _resolvedNodeRequire(modulePath) as T;\n}\n\n/**\n * Pick the module-spec extension to use with `nodeRequire`. In Vitest /\n * source mode, `import.meta.url` ends in `.ts` and the dist `.js` files\n * don't exist; in production dist runs, the spec must be `.js`. Detecting\n * via `import.meta.url` keeps both paths working without test-mode flags.\n */\nconst _nodeRequireExt = import.meta.url.endsWith('.ts') ? '.ts' : '.js';\n\nconst effectLog = createLogger(\"almadar:runtime:effects\");\nconst busLog = createLogger(\"almadar:runtime:bus\");\n// Render-ui-side observability for the runtime path. Lit up via\n// `ALMADAR_DEBUG=almadar:runtime:render-ui` (or `localStorage.ALMADAR_DEBUG`\n// in the browser). Tracks every render-ui clientEffect push so we can tell\n// when the runtime re-fires `render-ui` for the modal slot during a typing\n// session — the suspected reason form fields snap back to pre-fill on the\n// runtime path while the compiled path holds them stable.\nconst renderLog = createLogger(\"almadar:runtime:render-ui\");\n// Gap #11 (Almadar_Std_Verification.md): cross-orbital cascade tracing.\n// Logs per processOrbitalEvent entry and per emit so the runtime-verify\n// console capture shows which orbital's traits actually fired during a\n// dispatch. Pairs with the UI-side `almadar:runtime:cross-orbital` channel\n// in OrbPreview / ServerBridge / SlotsContext.\nconst xOrbitalLog = createLogger(\"almadar:runtime:cross-orbital\");\nconst persistLog = createLogger(\"almadar:runtime:persist\");\nconst registerLog = createLogger(\"almadar:runtime:register\");\nconst dynamicLog = createLogger(\"almadar:runtime:dynamic\");\n// Note: `LocalPersistenceAdapter` is re-exported from `index.ts`, not from\n// here. Keeping a value re-export here would force tsup to inline the\n// adapter into `OrbitalServerRuntime.js`'s bundle, defeating the\n// type-only-import-plus-eval-require strategy described above.\nimport {\n interpolateProps,\n createContextFromBindings,\n} from \"./BindingResolver.js\";\nimport { evaluate, evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n EntityRow,\n EventPayload,\n EvaluationContextExtensions,\n RuntimeRenderPattern,\n} from \"./types.js\";\nimport { collectDeclaredConfigDefaults } from \"./config-defaults.js\";\n// Backward-compat: `collectDeclaredConfigDefaults` used to live here. The package\n// index now re-exports it from the browser-safe `./config-defaults.js` (so it\n// doesn't drag this node-only module into a browser bundle), but keep the\n// original export site for existing importers (tests, server consumers).\nexport { collectDeclaredConfigDefaults };\nimport type {\n FieldValue,\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n EntityField,\n Trait,\n TraitTick,\n TraitConfig,\n TraitConfigValue,\n BusEventSource,\n PatternConfig,\n ResolvedPatternProps,\n SExpr,\n} from \"@almadar/core\";\n\n/**\n * Client-side effect tuple shipped in `OrbitalEventResponse.clientEffects`.\n * Restricted to the three effect kinds the client knows how to apply to the\n * UI: render-ui (slot mutation), navigate (route change), notify (toast).\n * Server-only effects (persist, set, fetch, ...) execute on the server and\n * surface their results via `effectResults` and `emittedEvents`, not here.\n *\n * Shape note: the wire form is broader than `RenderUIEffect` /\n * `NavigateEffect` / `NotifyEffect` from `@almadar/core/types/effect.ts` in\n * two places — the runtime appends an interpolated `props` object plus an\n * optional `priority` slot to render-ui (slot 4 + 5), and `navigate` /\n * `notify` may surface their optional argument as `undefined` rather than\n * absent. The local union spells those variants out explicitly so consumers\n * (ServerBridge.tsx parser, debugger inspector) get accurate completions\n * instead of `unknown[]`.\n *\n * `slot` is a plain `string` in this wire shape (not `UISlot`'s literal\n * union) because the runtime forwards the raw string from the trait's\n * `(render-ui slot ...)` SExpr without re-validating against the registry —\n * registry validation lives in `orbital validate` / `lolo` parse, not here.\n */\nexport type ClientRenderUITuple =\n | ['render-ui', string, PatternConfig | null]\n | ['render-ui', string, PatternConfig | null, ResolvedPatternProps]\n | ['render-ui', string, PatternConfig | null, ResolvedPatternProps | undefined, number | undefined];\n\nexport type ClientNavigateTuple =\n | ['navigate', string]\n | ['navigate', string, Record<string, string> | undefined];\n\nexport type ClientNotifyTuple =\n | ['notify', string, string | SExpr | undefined]\n | ['notify', string, string | SExpr | undefined, { type?: string }];\n\nexport type ClientEffectTuple =\n | ClientRenderUITuple\n | ClientNavigateTuple\n | ClientNotifyTuple;\nimport { isInlineTrait, isEntityCall } from \"@almadar/core\";\nimport { MockPersistenceAdapter } from \"./MockPersistenceAdapter.js\";\nimport {\n preprocessSchema,\n type PreprocessedSchema,\n type EntitySharingMap,\n type EventNamespaceMap,\n} from \"./UsesIntegration.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n} from \"./loader/index.js\";\n// `createOsHandlers` is type-imported at the top of this file and value-\n// loaded via `nodeRequire` inside the constructor's Node-only branch.\n// Removed the value-import here so the dist bundle has no static\n// reference to `./createOsHandlers.js` and its fs/net/child_process\n// imports vanish from the browser-side dependency graph.\n\n// Node-detection helper. Used to guard call sites of express, fs/path/net,\n// and child_process — those modules are stubbed by the package.json `browser`\n// field in browser bundles, so calling them would crash. Browser consumers\n// (e.g. `<BrowserPlayground>` from @almadar/ui in mock mode) skip these\n// paths entirely.\nfunction isNodeEnv(): boolean {\n return typeof process !== \"undefined\" && Boolean(process.versions?.node);\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n// Uses OrbitalSchema, OrbitalDefinition, Trait, TraitTick from @almadar/core directly.\n// No redundant runtime-specific types.\n\n/** @deprecated Use OrbitalSchema from @almadar/core */\nexport type RuntimeOrbitalSchema = OrbitalSchema;\n/** @deprecated Use OrbitalDefinition from @almadar/core */\nexport type RuntimeOrbital = OrbitalDefinition;\n/** @deprecated Use Trait from @almadar/core */\nexport type RuntimeTrait = Trait;\n/** @deprecated Use TraitTick from @almadar/core */\nexport type RuntimeTraitTick = TraitTick;\n\n/**\n * Registered orbital with runtime state\n */\nexport interface RegisteredOrbital {\n schema: OrbitalDefinition;\n /** Resolved entity (never a string ref at runtime) */\n entity: Entity;\n /** Resolved inline traits (string refs filtered out) */\n traits: Trait[];\n /**\n * Call-site `config: { ... }` attached to each trait ref, keyed by trait\n * name. Used to populate the `@config.X` binding when running that trait's\n * effects. Preserved from the preprocessed schema's trait-ref wrapper\n * (`{ ref, config, linkedEntity, _resolved }`) before the wrapper is\n * unwrapped to its inline form.\n */\n configByTrait: Map<string, TraitConfig>;\n manager: StateMachineManager;\n entityData: Map<string, EntityRow>; // entityId -> data\n /**\n * Per-trait scalar state set by `(set @entity.X Y)`. Mirrors compiled's\n * `state.fields`. The trait's `@entity` binding resolves from this map\n * during effect interpolation. Initial empty; mutated only by the `set`\n * effect handler. No implicit seeding from persistence.\n */\n traitFieldStates: Map<string, EntityRow>;\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: EventPayload;\n entityId?: string;\n /** User context for @user bindings (from Firebase auth) */\n user?: {\n uid: string;\n email?: string;\n displayName?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Response from event processing\n */\nexport interface OrbitalEventResponse {\n success: boolean;\n transitioned: boolean;\n states: Record<string, string>;\n /**\n * Events emitted during processing, in declaration order. Payloads are\n * typed against `@almadar/core`'s `EventPayload` — the recursive record of\n * primitive + nested EventPayload values the state machine already uses\n * internally. Kept as the single source of truth for emit-payload shape.\n *\n * Each entry carries a `source: BusEventSource` so the client-side\n * ServerBridge can re-broadcast on the qualified `UI:Orbital.Trait.EVENT`\n * bus key. Without source the re-broadcast skips the entry and downstream\n * listeners (e.g. ContactBrowse waiting for ContactLoaded after a fetch)\n * never fire — the dashboard-layout that ContactLoaded renders disappears.\n */\n emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }>;\n /** Client-side effects to execute (render-ui, navigate, notify) */\n clientEffects?: ClientEffectTuple[];\n /**\n * Same effects as `clientEffects`, paired with the producing trait name.\n * Consumers that need per-trait attribution (e.g. `<TraitFrame>` resolving\n * `@trait.X` bindings) read from this field; legacy consumers ignore it\n * and continue with the flat `clientEffects` array unchanged.\n *\n * Same length and ordering as `clientEffects`; entries are 1:1 by index.\n */\n clientEffectsByTrait?: Array<{ traitName: string; effect: ClientEffectTuple }>;\n /** Results from server-side effects (persist, call-service, set) */\n effectResults?: EffectResult[];\n error?: string;\n}\n\n/**\n * Result of a server-side effect execution.\n * Closes the circuit by returning effect outcomes to the client.\n */\nexport interface EffectResult {\n /** Effect type that was executed */\n effect: 'persist' | 'call-service' | 'set' | 'ref' | 'deref' | 'swap' | 'atomic';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set/ref/deref/swap) */\n entityType?: string;\n /** Result data from the effect (entity row for CRUD, summary for batch) */\n data?: EntityRow | { operations: EntityRow[]; completedCount: number; totalCount: number };\n /** Whether the effect succeeded */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Loader configuration for resolving `uses` imports\n */\nexport interface LoaderConfig {\n /** Base path for schema files */\n basePath: string;\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n /** Custom loader instance (overrides basePath/stdLibPath) */\n loader?: SchemaLoader;\n}\n\n/**\n * Runtime configuration\n */\nexport interface OrbitalServerRuntimeConfig {\n /** Enable debug logging */\n debug?: boolean;\n /** Custom effect handlers (for integrating with your data layer) */\n effectHandlers?: Partial<EffectHandlers>;\n /** Persistence adapter for entity data */\n persistence?: PersistenceAdapter;\n /**\n * Data mode:\n * - 'mock': Use faker-generated mock data (default for preview)\n * - 'real': Use actual persistence layer\n */\n mode?: 'mock' | 'real';\n /** Seed for deterministic mock data generation */\n mockSeed?: number;\n /** Number of mock records to generate per entity */\n mockSeedCount?: number;\n /**\n * Loader configuration for resolving `uses` imports.\n * Required when using `registerWithPreprocess` or `autoPreprocess`.\n */\n loaderConfig?: LoaderConfig;\n /**\n * Automatically preprocess schemas on register() to resolve `uses` imports.\n * Requires `loaderConfig` to be set.\n * Default: false\n */\n autoPreprocess?: boolean;\n /**\n * Apply event namespacing to imported traits.\n * Default: true\n */\n namespaceEvents?: boolean;\n /**\n * Root directory for `persistence: \"local\"` entities.\n * Default: ~/.orb/data/\n */\n localStorageRoot?: string;\n /**\n * Additional fields to spread onto every EvaluationContext.\n * Use this to inject module contexts (e.g., { agent: AgentContext }).\n * The evaluator dispatches agent/* operators to ctx.agent.\n */\n contextExtensions?: EvaluationContextExtensions;\n}\n\n/**\n * Adapter for persisting entity data\n */\n// `PersistenceAdapter` + `InMemoryPersistence` live in their own browser-safe\n// module so the in-browser mock runtime can reuse the same storage contract\n// without pulling in this server-only module's express dependency. Re-exported\n// here so existing `import { PersistenceAdapter } from './OrbitalServerRuntime'`\n// call sites keep working.\nexport type { PersistenceAdapter } from \"./PersistenceAdapter.js\";\nexport { InMemoryPersistence } from \"./PersistenceAdapter.js\";\nimport type { PersistenceAdapter } from \"./PersistenceAdapter.js\";\nimport { InMemoryPersistence } from \"./PersistenceAdapter.js\";\n\n// ============================================================================\n// OrbitalServerRuntime\n// ============================================================================\n\n/**\n * Check whether a schema needs preprocessing (has `uses` declarations or\n * un-inlined cross-orbital trait references).\n *\n * Cross-orbital refs are trait entries like\n * `{ ref: \"Modal.traits.ModalRecordModal\", ... }` with no inline\n * `stateMachine`. If these aren't resolved before `register()` runs, the\n * trait binder produces an empty state machine and all interactions\n * targeting the trait are silently dropped.\n */\n/**\n * Walk a trait's DECLARED config schema (`{ icon: { type, default }, ... }`)\n * and collect a flat `{ icon: <default>, ... }` map of just the default\n * values. Used to seed the `@config.X` binding context with the atom's\n * own declared defaults before any call-site override is applied. Mirrors\n * the compiled path's `DEFAULT_<TRAIT>_CONFIG` constant emitted by\n * backend.rs's Solution-1 plumbing.\n *\n * Returns `undefined` when the trait has no config schema or none of its\n * fields declare a default — keeps the caller's existing fast-path.\n */\n/**\n * Structural shape that both `@almadar/core`'s `Trait` and\n * `ResolvedTrait` satisfy: a `config?` map keyed by field name whose\n * values either carry a `default` (the declared-schema form loaded\n * from `.orb`) or are bare values (the runtime-resolved form).\n *\n * Widening to a structural parameter lets callers from the resolved\n * side (e.g., `@almadar/ui`'s `useTraitStateMachine`) pass their own\n * `ResolvedTrait` without an `as unknown as` cast.\n */\n/**\n * Read the `default` from each field of a trait's declared\n * `config { }` schema and return the flat `{ key: default, ... }`\n * map. Used to seed `@config.X` binding context with the atom's\n * own declared defaults before any call-site override is applied.\n *\n * Mirrors the compiled path's `DEFAULT_<TRAIT>_CONFIG` constant\n * emitted by `backend.rs` Solution-1.\n */\nfunction needsPreprocessing(schema: OrbitalSchema): boolean {\n for (const orbital of schema.orbitals) {\n const uses = (orbital as { uses?: unknown[] }).uses;\n if (Array.isArray(uses) && uses.length > 0) {\n return true;\n }\n const traits = (orbital as { traits?: unknown[] }).traits ?? [];\n for (const t of traits) {\n if (!t || typeof t !== 'object') continue;\n const obj = t as { ref?: unknown; stateMachine?: unknown };\n if (\n typeof obj.ref === 'string' &&\n obj.ref.includes('.') &&\n !obj.stateMachine\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Internal tick binding for tracking active ticks\n */\ninterface TickBinding {\n orbitalName: string;\n traitName: string;\n tick: RuntimeTraitTick;\n timerId: ReturnType<typeof setInterval>;\n}\n\nexport class OrbitalServerRuntime {\n protected orbitals = new Map<string, RegisteredOrbital>();\n private eventBus: EventBus;\n private config: OrbitalServerRuntimeConfig;\n private persistence: PersistenceAdapter;\n private listenerCleanups: Array<() => void> = [];\n private tickBindings: TickBinding[] = [];\n private loader: SchemaLoader | null = null;\n private preprocessedCache = new Map<string, PreprocessedSchema>();\n private entitySharingMap: EntitySharingMap = {};\n private eventNamespaceMap: EventNamespaceMap = {};\n private osHandlers: OsHandlerResult | null = null;\n private localPersistence: PersistenceAdapter | null = null;\n private resolvedSchema: OrbitalSchema | null = null;\n\n constructor(config: OrbitalServerRuntimeConfig = {}) {\n this.config = {\n mode: 'mock', // Default to mock mode for preview\n autoPreprocess: false,\n namespaceEvents: true,\n ...config,\n };\n this.eventBus = new EventBus();\n\n // Initialize loader only if a fully-configured one was handed in, or if\n // stdLibPath is explicitly set. Otherwise leave null so ensureLoader()\n // can lazily construct one with the auto-detected @almadar/std path —\n // passing only basePath here would build a loader without stdLibPath\n // and then short-circuit ensureLoader's proper lookup.\n if (config.loaderConfig?.loader) {\n this.loader = config.loaderConfig.loader;\n } else if (config.loaderConfig?.stdLibPath) {\n this.loader = createUnifiedLoader({\n basePath: config.loaderConfig.basePath,\n stdLibPath: config.loaderConfig.stdLibPath,\n scopedPaths: config.loaderConfig.scopedPaths,\n });\n }\n\n // Use MockPersistenceAdapter for mock mode, otherwise use provided or InMemoryPersistence\n if (this.config.mode === 'mock' && !config.persistence) {\n this.persistence = new MockPersistenceAdapter({\n seed: config.mockSeed,\n defaultSeedCount: config.mockSeedCount ?? 6,\n debug: config.debug,\n });\n if (config.debug) {\n persistLog.debug('mock:init', { adapter: 'MockPersistenceAdapter' });\n }\n } else {\n this.persistence = config.persistence || new InMemoryPersistence();\n }\n\n // Initialize local persistence adapter for persistence: \"local\" entities.\n // Node-only — eval-require so the dist bundle has no static reference\n // to `./LocalPersistenceAdapter.js` (and its `fs`/`path` imports).\n if (config.localStorageRoot && isNodeEnv()) {\n const { LocalPersistenceAdapter } = nodeRequire<{ LocalPersistenceAdapter: new (root: string) => LocalPersistenceAdapterType }>(`./LocalPersistenceAdapter${_nodeRequireExt}`);\n this.localPersistence = new LocalPersistenceAdapter(config.localStorageRoot);\n }\n\n // Auto-wire OS handlers (server-side only). Same eval-require trick —\n // `./createOsHandlers.js` pulls fs/net/child_process and would otherwise\n // poison the browser-side dependency graph.\n if (isNodeEnv()) {\n const { createOsHandlers } = nodeRequire<{ createOsHandlers: typeof CreateOsHandlersFn }>(`./createOsHandlers${_nodeRequireExt}`);\n this.osHandlers = createOsHandlers({\n emitEvent: (type, payload) => this.eventBus.emit(type, payload),\n });\n } else {\n this.osHandlers = { handlers: {}, cleanup: () => {} };\n }\n // Merge OS handlers under user-provided handlers (user can override)\n this.config.effectHandlers = {\n ...this.osHandlers.handlers,\n ...this.config.effectHandlers,\n };\n }\n\n /**\n * Lazily construct a default loader when the caller didn't provide one\n * but `register()` needs to preprocess. Looks for `@almadar/std` in the\n * nearest `node_modules` so cross-orbital `std/behaviors/<name>` imports\n * resolve to the tiered registry on disk.\n *\n * Node only — browsers should receive already-preprocessed schemas from\n * their server.\n */\n private async ensureLoader(): Promise<void> {\n if (this.loader) return;\n if (typeof process === 'undefined' || !process.versions?.node) {\n // Not Node — can't read the filesystem. Bail silently; the caller's\n // debug log in register() explains the skip.\n return;\n }\n try {\n const [{ fileURLToPath }, path, fs] = await Promise.all([\n import('node:url'),\n import('node:path'),\n import('node:fs'),\n ]);\n // Use ESM resolution (import.meta.resolve) because @almadar/std's\n // exports field only declares the `import` condition, which createRequire\n // (CJS conditions) can't match. Walk up from the resolved main entry\n // to the package root — robust against `exports` restrictions that\n // don't expose `./package.json` directly.\n const mainEntryUrl = import.meta.resolve('@almadar/std');\n const mainEntry = fileURLToPath(mainEntryUrl);\n let stdLibPath = path.dirname(mainEntry);\n while (stdLibPath !== path.dirname(stdLibPath)) {\n if (fs.existsSync(path.join(stdLibPath, 'package.json'))) {\n const pkg = JSON.parse(\n fs.readFileSync(path.join(stdLibPath, 'package.json'), 'utf-8'),\n ) as { name?: string };\n if (pkg.name === '@almadar/std') break;\n }\n stdLibPath = path.dirname(stdLibPath);\n }\n const basePath =\n this.config.loaderConfig?.basePath ?? process.cwd();\n this.loader = createUnifiedLoader({\n basePath,\n stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n });\n if (this.config.debug) {\n registerLog.debug('loader:constructed', { basePath, stdLibPath });\n }\n } catch (err) {\n if (this.config.debug) {\n registerLog.warn('loader:construct-failed', { error: err instanceof Error ? err : String(err) });\n }\n }\n }\n\n // ==========================================================================\n // Schema Registration\n // ==========================================================================\n\n /**\n * Register an OrbitalSchema for execution.\n *\n * Auto-preprocesses the schema when it contains `uses` declarations or\n * unresolved cross-orbital trait references (e.g. a trait with\n * `ref: \"Modal.traits.ModalRecordModal\"` and no inline `stateMachine`).\n * Without preprocessing, those refs arrive empty at the state machine and\n * button clicks silently do nothing — see Phase 9.5.H.\n *\n * Preprocessing needs a loader. If `loaderConfig` is set, that loader is\n * used. Otherwise, a default loader is constructed that points at\n * `<cwd>` (for `basePath`) and the nearest `node_modules/@almadar/std` (for\n * `stdLibPath`), which matches how every caller in this monorepo has the\n * std registry on disk.\n */\n async register(schema: OrbitalSchema): Promise<void> {\n if (this.config.debug) {\n registerLog.debug('register:schema', { name: schema.name });\n }\n\n // Auto-preprocess if the schema has unresolved imports and we have (or\n // can construct) a loader. This replaces the old autoPreprocess flag,\n // which was off by default and led to silent failures when a consumer\n // forgot to enable it.\n if (needsPreprocessing(schema)) {\n await this.ensureLoader();\n if (this.loader) {\n if (this.config.debug) {\n registerLog.debug('register:auto-preprocessing', { name: schema.name });\n }\n const result = await preprocessSchema(schema, {\n basePath: this.config.loaderConfig?.basePath || process.cwd(),\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader,\n namespaceEvents: this.config.namespaceEvents,\n });\n if (!result.success) {\n throw new Error(\n `Schema preprocessing failed: ${result.errors.join('; ')}`,\n );\n }\n schema = result.data.schema;\n this.entitySharingMap = {\n ...this.entitySharingMap,\n ...result.data.entitySharing,\n };\n this.eventNamespaceMap = {\n ...this.eventNamespaceMap,\n ...result.data.eventNamespaces,\n };\n } else if (this.config.debug) {\n registerLog.warn('register:no-loader', { name: schema.name });\n }\n }\n\n // Register all orbitals (await to ensure instance seeding completes)\n for (const orbital of schema.orbitals) {\n await this.registerOrbitalAsync(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n\n // Stash the post-preprocessing schema so HTTP layers (e.g. a playground\n // server's /api/schema handler) can serve the fully-resolved copy instead\n // of re-reading the raw .orb from disk. See getResolvedSchema().\n this.resolvedSchema = schema;\n }\n\n /**\n * Register an OrbitalSchema synchronously (for backward compatibility).\n * Note: This version doesn't wait for instance seeding to complete.\n * Use async register() for guaranteed instance seeding.\n */\n registerSync(schema: OrbitalSchema): void {\n if (this.config.debug) {\n registerLog.debug('register:schema-sync', { name: schema.name });\n }\n\n for (const orbital of schema.orbitals) {\n this.registerOrbital(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n\n this.resolvedSchema = schema;\n }\n\n /**\n * Returns the schema that this runtime is currently executing, post-\n * preprocessing. Safe to expose from an HTTP `/api/schema` endpoint — every\n * cross-orbital trait ref will have an inline `stateMachine` already, which\n * is what the browser's `schema-to-ir` resolver needs to wire button clicks\n * back to state transitions.\n *\n * Returns `null` if `register()` hasn't run yet.\n */\n getResolvedSchema(): OrbitalSchema | null {\n return this.resolvedSchema;\n }\n\n /**\n * One-call entry point: read an `.orb` file from disk, parse it, preprocess\n * cross-orbital imports, and register the result. Callers never touch raw\n * `.orb` bytes — `register()` handles preprocessing internally.\n *\n * Node only. Browsers must receive already-resolved schemas from their\n * server (see `getResolvedSchema()`).\n */\n async registerFromFile(path: string): Promise<void> {\n if (typeof process === 'undefined' || !process.versions?.node) {\n throw new Error(\n 'registerFromFile is Node-only. Browsers should receive resolved schemas from their server.',\n );\n }\n const { readFile } = await import('node:fs/promises');\n const raw = await readFile(path, 'utf-8');\n let schema: OrbitalSchema;\n try {\n schema = JSON.parse(raw) as OrbitalSchema;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n throw new Error(`registerFromFile: ${path} is not valid JSON: ${msg}`);\n }\n await this.register(schema);\n }\n\n /**\n * Register an OrbitalSchema with preprocessing to resolve `uses` imports.\n *\n * This method:\n * 1. Loads all external orbitals referenced in `uses` declarations\n * 2. Expands entity/trait/page references to inline definitions\n * 3. Builds entity sharing and event namespace maps\n * 4. Caches the preprocessed result\n * 5. Registers the resolved schema\n *\n * @param schema - Schema with potential `uses` declarations\n * @param options - Optional preprocessing options\n * @returns Preprocessing result with entity sharing info\n *\n * @example\n * ```typescript\n * const runtime = new OrbitalServerRuntime({\n * loaderConfig: {\n * basePath: '/schemas',\n * stdLibPath: '/std',\n * },\n * });\n *\n * const result = await runtime.registerWithPreprocess(schema);\n * if (result.success) {\n * console.log('Registered with', Object.keys(result.entitySharing).length, 'orbitals');\n * }\n * ```\n */\n async registerWithPreprocess(\n schema: OrbitalSchema,\n options?: { sourcePath?: string }\n ): Promise<{\n success: boolean;\n entitySharing?: EntitySharingMap;\n eventNamespaces?: EventNamespaceMap;\n warnings?: string[];\n errors?: string[];\n }> {\n // Check if preprocessing is possible\n if (!this.loader && !this.config.loaderConfig) {\n return {\n success: false,\n errors: ['Loader not configured. Set loaderConfig in OrbitalServerRuntimeConfig.'],\n };\n }\n\n // Ensure loader is initialized\n if (!this.loader && this.config.loaderConfig) {\n this.loader = this.config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: this.config.loaderConfig.basePath,\n stdLibPath: this.config.loaderConfig.stdLibPath,\n scopedPaths: this.config.loaderConfig.scopedPaths,\n });\n }\n\n // Check cache\n const cacheKey = `${schema.name}:${schema.version || '1.0.0'}`;\n const cached = this.preprocessedCache.get(cacheKey);\n if (cached) {\n if (this.config.debug) {\n registerLog.debug('preprocess:cache-hit', { name: schema.name });\n }\n this.register(cached.schema);\n this.entitySharingMap = { ...this.entitySharingMap, ...cached.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...cached.eventNamespaces };\n return {\n success: true,\n entitySharing: cached.entitySharing,\n eventNamespaces: cached.eventNamespaces,\n warnings: cached.warnings,\n };\n }\n\n if (this.config.debug) {\n registerLog.debug('preprocess:start', { name: schema.name });\n }\n\n // Preprocess schema\n const result = await preprocessSchema(schema, {\n basePath: this.config.loaderConfig?.basePath || '.',\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader!,\n namespaceEvents: this.config.namespaceEvents,\n });\n\n if (!result.success) {\n return {\n success: false,\n errors: result.errors,\n };\n }\n\n // Cache the result\n this.preprocessedCache.set(cacheKey, result.data);\n\n // Store sharing maps\n this.entitySharingMap = { ...this.entitySharingMap, ...result.data.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...result.data.eventNamespaces };\n\n // Register the preprocessed schema\n this.register(result.data.schema);\n\n return {\n success: true,\n entitySharing: result.data.entitySharing,\n eventNamespaces: result.data.eventNamespaces,\n warnings: result.data.warnings,\n };\n }\n\n /**\n * Get entity sharing information for registered orbitals.\n * Useful for determining entity isolation and collection names.\n */\n getEntitySharing(): EntitySharingMap {\n return { ...this.entitySharingMap };\n }\n\n /**\n * Get event namespace mapping for registered orbitals.\n * Useful for debugging cross-orbital event routing.\n */\n getEventNamespaces(): EventNamespaceMap {\n return { ...this.eventNamespaceMap };\n }\n\n /**\n * Clear the preprocessing cache.\n */\n clearPreprocessCache(): void {\n this.preprocessedCache.clear();\n }\n\n /**\n * Register a single orbital\n */\n private async registerOrbitalAsync(orbital: OrbitalDefinition): Promise<void> {\n // Unwrap preprocessed ref-traits: `preprocessSchema` keeps entries with\n // `config` or `linkedEntity` wrapped as `{ ref, linkedEntity, _resolved }`\n // (see UsesIntegration.ts:209-222) — the `_resolved` field carries the\n // fully inlined trait. `isInlineTrait` excludes anything with a `ref`\n // key, so without this unwrap every preprocessed atom would be dropped\n // and only the layout-owner survives (see Almadar_Std_Gaps.md §3.1b).\n // Unwrap preprocessed ref-traits while capturing their call-site `config`\n // for later binding-context injection. The wrapper has shape\n // `{ ref, name?, config?, linkedEntity?, _resolved: Trait }`; we keep the\n // config keyed by the resolved trait name so effects can read `@config.X`.\n const configByTrait = new Map<string, TraitConfig>();\n const unwrapped = (orbital.traits || []).map((t) => {\n if (t && typeof t === 'object' && 'ref' in t && '_resolved' in t) {\n const wrapper = t as {\n _resolved: Trait;\n config?: TraitConfig;\n };\n const inner = wrapper._resolved;\n if (wrapper.config && inner?.name) {\n configByTrait.set(inner.name, wrapper.config);\n }\n return inner;\n }\n return t;\n });\n const inlineTraits = unwrapped.filter(isInlineTrait);\n const traitDefs: TraitDefinition[] = inlineTraits.map((t: Trait) => {\n const sm = t.stateMachine;\n const states = sm?.states || [];\n const transitions = sm?.transitions || [];\n\n return {\n name: t.name,\n states: states as TraitDefinition['states'],\n transitions: transitions as TraitDefinition['transitions'],\n listens: t.listens,\n };\n });\n\n const manager = new StateMachineManager(traitDefs, {\n contextExtensions: this.config.contextExtensions,\n });\n\n // Bind each trait's call-site config to the manager so `@config.X`\n // resolves inside guard expressions at runtime. The orbital's\n // `configByTrait` map was just built above from the trait-ref\n // wrapper config blocks; thread those through to the SMM so\n // mode-aware guards (e.g. std-modal's \"OPEN requires row when\n // mode=edit\") work end-to-end on the runtime path. No-op for\n // traits with no call-site config supplied.\n for (const [traitName, traitConfig] of configByTrait) {\n manager.setTraitConfig(traitName, traitConfig);\n }\n\n const entityRef = orbital.entity;\n let entity: Entity;\n if (typeof entityRef === 'string') {\n entity = { name: entityRef, fields: [] }; // Fallback for string refs\n } else if (isEntityCall(entityRef)) {\n // EntityCall (Phase F): synthesize Entity placeholder from the call shape.\n // The compiler's inline phase produces a fully resolved Entity in OIR;\n // this branch is the runtime fallback when an unresolved EntityCall reaches us.\n const fallbackName = entityRef.name ?? entityRef.extends.replace(/\\.entity$/, '');\n entity = {\n name: fallbackName,\n fields: entityRef.fields ?? [],\n ...(entityRef.persistence ? { persistence: entityRef.persistence } : {}),\n ...(entityRef.collection ? { collection: entityRef.collection } : {}),\n };\n } else {\n entity = entityRef;\n }\n\n this.orbitals.set(orbital.name, {\n schema: orbital,\n entity,\n traits: inlineTraits,\n configByTrait,\n manager,\n entityData: new Map(),\n traitFieldStates: new Map(),\n });\n\n // Seed entity instances from schema if they exist\n if (entity?.name && entity.instances && Array.isArray(entity.instances)) {\n const instances = entity.instances;\n if (instances.length > 0) {\n persistLog.debug('seed:start', { entity: entity.name, count: instances.length });\n\n // Seed each instance (await to ensure they're created)\n const results = await Promise.all(\n instances.map(async (instance) => {\n try {\n const result = await this.persistence.create(entity.name, instance);\n persistLog.debug('seed:instance', { entity: entity.name, id: instance.id ?? 'no-id' });\n return result;\n } catch (err) {\n persistLog.error('seed:instance-error', {\n entity: entity.name,\n id: instance.id,\n error: err instanceof Error ? err : String(err),\n });\n return null;\n }\n })\n );\n\n const successCount = results.filter(r => r !== null).length;\n persistLog.debug('seed:done', { entity: entity.name, success: successCount, total: instances.length });\n }\n } else if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n // Fall back to mock data generation if no instances defined\n if (this.config.debug) {\n persistLog.debug('mock:generate', { entity: entity?.name });\n }\n if (entity?.name && entity.fields) {\n const fields = entity.fields\n .filter((f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n )\n ;\n this.persistence.registerEntity({ name: entity.name, fields });\n if (this.config.debug) {\n persistLog.debug('mock:seeded', { entity: entity.name, count: this.persistence.count(entity.name) });\n }\n }\n }\n\n // Gap #22 — register + mock-seed auxiliary entities. These are imported\n // atom entities surfaced when a trait reference omits the `-> Entity`\n // rebind at the molecule's call site, registered on the resolved\n // schema's `auxiliaryEntities` field by the inline phase. Without this\n // block, `(fetch SearchResult ...)` from a trait whose linkedEntity is\n // an imported atom hits an unregistered persistence entry and returns\n // empty, breaking the entity-as-UI-state contract those slim atoms rely\n // on. Mock-mode seeding mirrors the primary entity branch above.\n const auxiliaryEntities = orbital.auxiliaryEntities;\n if (\n auxiliaryEntities !== undefined &&\n auxiliaryEntities.length > 0 &&\n this.config.mode === 'mock' &&\n this.persistence instanceof MockPersistenceAdapter\n ) {\n for (const auxRef of auxiliaryEntities) {\n // EntityRef is a union of string | EntityCall | Entity. The\n // inline phase populates auxiliaryEntities with inline Entity\n // objects (string/EntityCall forms get resolved before this\n // branch fires), but narrow defensively to keep the type\n // checker happy and to skip unresolved forms gracefully.\n if (typeof auxRef === 'string' || isEntityCall(auxRef)) continue;\n const auxEntity: Entity = auxRef;\n if (!auxEntity.name || !auxEntity.fields) continue;\n const auxFields = auxEntity.fields\n .filter((f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n )\n ;\n this.persistence.registerEntity({ name: auxEntity.name, fields: auxFields });\n if (this.config.debug) {\n persistLog.debug('mock:seeded-auxiliary', {\n entity: auxEntity.name,\n count: this.persistence.count(auxEntity.name),\n });\n }\n }\n }\n\n if (this.config.debug) {\n registerLog.debug('register:orbital', {\n name: orbital.name,\n traitCount: (orbital.traits || []).length,\n });\n }\n }\n\n /**\n * Register a single orbital (sync wrapper for backward compatibility)\n */\n private registerOrbital(orbital: OrbitalDefinition): void {\n // Create a synchronous version by using a promise that we don't await\n // For truly async registration, use the async register() method\n this.registerOrbitalAsync(orbital).catch((err) => {\n registerLog.error('register:failed', {\n name: orbital.name,\n error: err instanceof Error ? err : String(err),\n });\n });\n }\n\n /**\n * Set up event listeners for cross-orbital communication\n */\n private setupEventListeners(): void {\n // Clean up existing listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n // For each orbital's traits with `listens`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.traits) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n // Split `listener.event` into { bareEvent, source }.\n // The .lolo parser encodes `Source EVENT`, `Orbital.Source EVENT`,\n // or `* EVENT` as `\"Source.EVENT\"`, `\"Orbital.Source.EVENT\"`,\n // `\"*.EVENT\"` respectively. If the explicit `listener.source` field\n // is present (new core schema), use it directly; otherwise parse the\n // legacy concatenated form so migrated and unmigrated schemas both work.\n const { bareEvent, matcher } = parseListenSource(listener, orbitalName);\n\n // Subscribe under the bare event key. Source filtering happens\n // inside the handler closure so a single key can serve many\n // listeners with different scopes.\n const cleanup = this.eventBus.on(bareEvent, async (event) => {\n // Source filter: skip if the emit doesn't match our declared scope.\n if (!matcher(event.source)) return;\n if (this.config.debug) {\n xOrbitalLog.debug('listen:received', () => ({\n receiverOrbital: orbitalName,\n receiverTrait: trait.name,\n event: listener.event,\n sourceOrbital: event.source?.orbital ?? '?',\n sourceTrait: event.source?.trait ?? '?',\n }));\n }\n\n // Apply payload mapping\n let mappedPayload = event.payload;\n if (listener.payloadMapping && event.payload) {\n mappedPayload = {};\n for (const [key, expr] of Object.entries(\n listener.payloadMapping,\n )) {\n if (typeof expr === \"string\" && expr.startsWith(\"@payload.\")) {\n const field = expr.slice(\"@payload.\".length);\n (mappedPayload as EventPayload)[key] = (\n event.payload as EventPayload\n )[field];\n } else {\n (mappedPayload as EventPayload)[key] = expr as string;\n }\n }\n }\n\n // Forward entityId so the triggered trait can bind @entity.*\n // against the right row. Without this, cross-trait listens\n // auto-wiring would always dispatch with entityData={} and\n // every @entity.id would resolve to undefined.\n //\n // Priority (checked against the MAPPED payload first so the\n // schema's payloadMapping takes effect, then the raw emit\n // payload for listens without a mapping):\n // 1. mapped or raw payload.entityId\n // 2. mapped or raw payload.orbitalName (convention: the\n // OrbitalProcess entity uses orbitalName as its id)\n const raw = event.payload as EventPayload | undefined;\n const mapped = mappedPayload as EventPayload | undefined;\n const pickId = (field: string): string | undefined =>\n (mapped?.[field] as string | undefined) ??\n (raw?.[field] as string | undefined);\n const forwardedEntityId = pickId(\"entityId\") ?? pickId(\"orbitalName\");\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as EventPayload,\n entityId: forwardedEntityId,\n });\n });\n\n this.listenerCleanups.push(cleanup);\n }\n }\n }\n }\n\n /**\n * Set up scheduled ticks for all traits\n */\n private setupTicks(): void {\n // Clean up existing ticks\n this.cleanupTicks();\n\n // For each orbital's traits with `ticks`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.traits || []) {\n if (!trait.ticks || trait.ticks.length === 0) continue;\n\n for (const tick of trait.ticks) {\n this.registerTick(orbitalName, trait.name, tick, registered);\n }\n }\n }\n\n if (this.config.debug && this.tickBindings.length > 0) {\n registerLog.debug('register:ticks', { count: this.tickBindings.length });\n }\n }\n\n /**\n * Register a single tick\n */\n private registerTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): void {\n // Determine interval in milliseconds\n let intervalMs: number;\n if (typeof tick.interval === \"number\") {\n intervalMs = tick.interval;\n } else if (typeof tick.interval === \"string\") {\n // Parse cron-like interval strings (e.g., '5s', '1m', '1h')\n intervalMs = this.parseIntervalString(tick.interval);\n } else {\n intervalMs = 1000; // Default to 1 second\n }\n\n if (this.config.debug) {\n registerLog.debug('register:tick', {\n orbital: orbitalName,\n trait: traitName,\n tick: tick.name,\n intervalMs,\n });\n }\n\n const timerId = setInterval(async () => {\n await this.executeTick(orbitalName, traitName, tick, registered);\n }, intervalMs);\n\n this.tickBindings.push({\n orbitalName,\n traitName,\n tick,\n timerId,\n });\n }\n\n /**\n * Parse interval string to milliseconds\n * Supports: '5s', '1m', '1h', '30000' (ms)\n */\n private parseIntervalString(interval: string): number {\n const match = interval.match(/^(\\d+)(ms|s|m|h)?$/);\n if (!match) {\n registerLog.warn('register:tick-invalid-interval', { interval, defaultMs: 1000 });\n return 1000;\n }\n\n const value = parseInt(match[1], 10);\n const unit = match[2] || \"ms\";\n\n switch (unit) {\n case \"ms\":\n return value;\n case \"s\":\n return value * 1000;\n case \"m\":\n return value * 60 * 1000;\n case \"h\":\n return value * 60 * 60 * 1000;\n default:\n return value;\n }\n }\n\n /**\n * Execute a tick for all applicable entities\n */\n private async executeTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): Promise<void> {\n const entityType = registered.entity.name;\n const emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }> = [];\n\n try {\n // Get all entities (or filtered by appliesTo)\n let entities = await this.persistence.list(entityType);\n\n if (tick.appliesTo && tick.appliesTo.length > 0) {\n const appliesToSet = new Set(tick.appliesTo);\n entities = entities.filter((e) => appliesToSet.has(e.id as string));\n }\n\n if (this.config.debug && entities.length > 0) {\n effectLog.debug('tick:processing', () => ({\n orbital: orbitalName,\n trait: traitName,\n tick: tick.name,\n entityCount: entities.length,\n }));\n }\n\n for (const entity of entities) {\n // Evaluate guard if present\n if (tick.guard) {\n try {\n const ctx = createContextFromBindings({\n entity,\n payload: {},\n state:\n registered.manager.getState(traitName)?.currentState ||\n \"unknown\",\n }, false, this.config.contextExtensions);\n\n const guardPasses = evaluateGuard(\n tick.guard as Parameters<typeof evaluateGuard>[0],\n ctx,\n );\n\n if (!guardPasses) {\n if (this.config.debug) {\n effectLog.debug('tick:guard-failed', () => ({\n tick: tick.name,\n entityId: typeof entity.id === 'string' ? entity.id : undefined,\n }));\n }\n continue;\n }\n } catch (error) {\n effectLog.error('tick:guard-error', {\n tick: tick.name,\n entityId: typeof entity.id === 'string' ? entity.id : undefined,\n error: error instanceof Error ? error : String(error),\n });\n continue;\n }\n }\n\n // Execute effects for this entity\n if (tick.effects && tick.effects.length > 0) {\n const fetchedData: { [entityType: string]: EntityRow | EntityRow[] } = {};\n const clientEffects: ClientEffectTuple[] = [];\n const tickEffectResults: EffectResult[] = [];\n await this.executeEffects(\n registered,\n traitName,\n tick.effects,\n {}, // No payload for ticks\n entity,\n entity.id as string,\n emittedEvents,\n fetchedData,\n clientEffects,\n tickEffectResults,\n );\n\n if (this.config.debug) {\n effectLog.debug('tick:effects-executed', () => ({\n tick: tick.name,\n entityId: typeof entity.id === 'string' ? entity.id : undefined,\n }));\n }\n }\n }\n } catch (error) {\n effectLog.error('tick:execute-error', {\n tick: tick.name,\n error: error instanceof Error ? error : String(error),\n });\n }\n }\n\n /**\n * Clean up all active ticks\n */\n private cleanupTicks(): void {\n for (const binding of this.tickBindings) {\n clearInterval(binding.timerId);\n }\n this.tickBindings = [];\n }\n\n /**\n * Unregister all orbitals and clean up\n */\n unregisterAll(): void {\n // Clean up ticks\n this.cleanupTicks();\n\n // Clean up event listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n this.orbitals.clear();\n this.eventBus.clear();\n\n // Clear mock persistence so the next registerFromFile re-seeds from\n // the schema instead of inheriting rows the previous walk created.\n // Without this, runtime-verify's state walk keeps every SAVE's\n // persist-create row across test sessions — the grid accumulates\n // \"Mock name\" rows that are never pruned, and empty cards from\n // partial walk-step payloads stay visible forever.\n if (this.persistence instanceof MockPersistenceAdapter) {\n this.persistence.clearAll();\n }\n\n // Clean up OS handlers (close file watchers, intervals, signal listeners)\n if (this.osHandlers) {\n this.osHandlers.cleanup();\n this.osHandlers = null;\n }\n }\n\n /**\n * Reset the mock persistence store to a clean-slate re-seed without\n * unregistering orbitals. Exposed for verifier tools that want to\n * start each test with deterministic seeded rows, not the residue of\n * the previous walk's persist-creates. No-op when the persistence\n * layer is not MockPersistenceAdapter.\n */\n resetMockPersistence(): void {\n if (!(this.persistence instanceof MockPersistenceAdapter)) return;\n busLog.debug('mock:reset:enter', {\n orbitalCount: this.orbitals.size,\n timestamp: new Date().toISOString(),\n });\n this.persistence.clearAll();\n for (const registered of this.orbitals.values()) {\n const entity = registered.entity;\n if (entity?.name && entity.fields) {\n const fields = entity.fields\n .filter((f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n )\n ;\n this.persistence.registerEntity({ name: entity.name, fields });\n }\n }\n }\n\n // ==========================================================================\n // Event Processing\n // ==========================================================================\n\n /**\n * Process an event for an orbital\n */\n async processOrbitalEvent(\n orbitalName: string,\n request: OrbitalEventRequest,\n ): Promise<OrbitalEventResponse> {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n return {\n success: false,\n transitioned: false,\n states: {},\n emittedEvents: [],\n error: `Orbital not found: ${orbitalName}`,\n };\n }\n\n // Trace every server-side event entry. If the runtime path is\n // re-firing render-ui during a typing session, the smoking gun\n // appears here: a `processOrbitalEvent:enter` line per keystroke\n // means something upstream (bus replay, snapshot poll, cascade\n // listener) is triggering a transition cycle the user didn't\n // intend. EventPayload values are typed as `EventPayloadValue`\n // (a recursive union including nested EventPayload) — narrow with\n // typeof checks instead of an unknown cast.\n const payloadRow = request.payload?.['row'];\n const payloadRowAsPayload =\n payloadRow !== null && typeof payloadRow === 'object' && !Array.isArray(payloadRow)\n ? (payloadRow as EventPayload)\n : undefined;\n const payloadRowId = payloadRowAsPayload?.['id'];\n renderLog.debug('processOrbitalEvent:enter', {\n orbital: orbitalName,\n event: request.event,\n hasPayloadRow: payloadRowAsPayload !== undefined,\n payloadRowId: typeof payloadRowId === 'string' || typeof payloadRowId === 'number' ? payloadRowId : undefined,\n entityId: request.entityId,\n });\n busLog.debug('bus:incoming', () => ({\n orbital: orbitalName,\n event: request.event,\n payload: JSON.stringify(request.payload ?? null),\n entityId: request.entityId,\n traitStates: JSON.stringify(\n Array.from(registered.manager.getAllStates().entries()).map(([traitName, state]) => ({\n traitName,\n currentState: state.currentState,\n })),\n ),\n }));\n xOrbitalLog.info('processOrbitalEvent:enter', () => ({\n orbital: orbitalName,\n event: request.event,\n traitsInOrbital: registered.traits.map((t) => t.name).join(','),\n payloadActiveTraits: JSON.stringify(\n (request.payload as EventPayload | undefined)?.['_activeTraits'] ?? null,\n ),\n }));\n\n const { event, payload, entityId, user } = request;\n\n // API-boundary payload validation. Each trait declares a\n // `payloadSchema` per event in its `stateMachine.events` block\n // (lowered from the `.lolo` listens block). A field marked with\n // `!` (e.g. `data : ListItem!`) becomes `required: true`; this\n // check rejects the request when a required field is missing or\n // null. Without this, the persist effect happily writes empty\n // rows for `payload: {}` requests — exactly what produced the\n // junk-card artifact in the verifier's bus-replay coverage walk.\n // The compiled-path generated handler emits the equivalent\n // inline check (per-event required-field list inlined from\n // `OirEvent.payload_required_fields`) so guards behave\n // identically across paths.\n //\n // Use `registered.traits` (already-unwrapped `Trait[]`) instead\n // of `registered.schema.traits` (which holds the unprocessed\n // `TraitRef` wrappers with `_resolved` attached by\n // preprocessSchema). The unwrap was already done in\n // registerOrbitalAsync.\n const validationFailures: PayloadValidationFailure[] = [];\n for (const trait of registered.traits) {\n const eventSchema = trait.stateMachine?.events?.find((e) => e.key === event);\n if (eventSchema?.payloadSchema && eventSchema.payloadSchema.length > 0) {\n validationFailures.push(\n ...validateEventPayload(event, payload, eventSchema.payloadSchema),\n );\n }\n }\n if (validationFailures.length > 0) {\n return {\n success: false,\n transitioned: false,\n states: {},\n emittedEvents: [],\n error: formatPayloadValidationError(validationFailures),\n };\n }\n\n const emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }> = [];\n // Collect data fetched by `fetch` effects\n const fetchedData: { [entityType: string]: EntityRow | EntityRow[] } = {};\n // Collect client-side effects (render-ui, navigate, notify)\n const clientEffects: ClientEffectTuple[] = [];\n // Same effects, paired with their producing trait — populated in lockstep\n // by the helper inside executeEffects so consumers can attribute each\n // effect to the trait that emitted it (used by `<TraitFrame>`).\n const clientEffectsByTrait: Array<{ traitName: string; effect: ClientEffectTuple }> = [];\n // Collect server-side effect results (persist, call-service, set)\n const effectResults: EffectResult[] = [];\n\n // Extract active traits filter from payload (sent by client for page-specific execution)\n const activeTraits = (payload as EventPayload | undefined)?._activeTraits as string[] | undefined;\n // Remove _activeTraits from payload before processing (internal use only)\n const cleanPayload = payload ? { ...payload } : undefined;\n if (cleanPayload) {\n delete (cleanPayload as EventPayload & { _activeTraits?: unknown })._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: EntityRow = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.entity.name,\n entityId,\n );\n if (stored) {\n entityData = stored;\n }\n }\n\n // Build per-trait entity overrides from `traitFieldStates` (mutated by\n // `(set @entity.X Y)` effects). For [runtime] entities with no persistence\n // row, this is the only way `@entity.X` references in guards get resolved\n // to the values prior transitions committed — matches the runtime UI hook\n // behavior so guard outcomes are identical across both paths.\n const entityByTrait: Record<string, EntityRow> = {};\n for (const [name, fields] of registered.traitFieldStates) {\n if (fields && Object.keys(fields).length > 0) {\n entityByTrait[name] = fields;\n }\n }\n\n // Process event through state machine\n const results = registered.manager.sendEvent(\n event,\n cleanPayload,\n entityData,\n entityByTrait,\n );\n\n // Filter results to only active traits (if specified)\n const filteredResults = activeTraits && activeTraits.length > 0\n ? results.filter(({ traitName }) => activeTraits.includes(traitName))\n : results;\n\n if (this.config.debug && activeTraits) {\n busLog.debug('dispatch:filter-traits', () => ({\n total: results.length,\n active: filteredResults.length,\n activeTraits: activeTraits.join(','),\n }));\n }\n\n // Execute effects only for active traits\n for (const { traitName, result } of filteredResults) {\n if (result.effects.length > 0) {\n await this.executeEffects(\n registered,\n traitName,\n result.effects as Effect[],\n cleanPayload,\n entityData,\n entityId,\n emittedEvents,\n fetchedData,\n clientEffects,\n effectResults,\n user,\n clientEffectsByTrait,\n );\n }\n }\n\n // V2 Phase 6: auto-refetch on ref-subscribed entities is gone. The\n // `ref` operator is deprecated; entities flow through explicit fetch+emit\n // listeners now. Downstream re-reads are triggered by the listener wiring\n // in the state machine (listen on the LOADED emit), not by the server\n // re-fetching after every mutation.\n\n // NOTE (VG31-duplicate, 4.10.0): the server-side re-emit that used to\n // live here fanned SAVE/CONFIRM_REMOVE onto the server bus so\n // `setupListeners()` could dispatch cascade triggers (DO_CREATE,\n // DO_DELETE). That was RIGHT when the runtime was server-only, but the\n // runtime playground now has matching cross-trait listens wiring on\n // the CLIENT (@almadar/ui 3.7.0+ useTraitStateMachine). With both\n // sides listening, every SAVE fired DO_CREATE twice — once from the\n // client's re-broadcast → onEventProcessed → server persist, and once\n // from the server's own bus listener → server persist. Two \"Mock\n // name\" rows appeared per click instead of one. Leaving the re-emit\n // out here is safe: the client posts DO_CREATE/DO_DELETE to the\n // server directly via bridge.sendEvent, and the server processes\n // those directly — the server-side listens fan-out is redundant in\n // the playground topology.\n\n // Build current states\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n const response: OrbitalEventResponse = {\n success: true,\n transitioned: results.length > 0,\n states,\n emittedEvents,\n };\n\n // V2 Phase 6: `response.data` is gone. Fetched entities are surfaced via\n // typed emit payloads on `emittedEvents` and through the rendered effect\n // tree instead of a sidecar record bag.\n\n // Include client effects if any\n if (clientEffects.length > 0) {\n response.clientEffects = clientEffects;\n }\n\n // Per-trait attribution sidecar — same effects as `clientEffects`, paired\n // 1:1 with the trait that produced each one.\n if (clientEffectsByTrait.length > 0) {\n response.clientEffectsByTrait = clientEffectsByTrait;\n }\n\n // Include server effect results if any\n if (effectResults.length > 0) {\n response.effectResults = effectResults;\n }\n\n return response;\n }\n\n /**\n * Execute effects from a transition\n */\n private async executeEffects(\n registered: RegisteredOrbital,\n traitName: string,\n effects: Effect[],\n payload: EventPayload | undefined,\n entityData: EntityRow,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }>,\n fetchedData: { [entityType: string]: EntityRow | EntityRow[] },\n clientEffects: ClientEffectTuple[],\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n clientEffectsByTrait?: Array<{ traitName: string; effect: ClientEffectTuple }>,\n ): Promise<void> {\n const entityType = registered.entity.name;\n\n // Push to both the flat `clientEffects` array (legacy wire shape) and the\n // tagged `clientEffectsByTrait` sidecar in lockstep. Closure captures\n // `traitName` from this invocation's scope, so cascade emits — which run\n // through their own executeEffects call with their own traitName —\n // attribute correctly.\n const pushClientEffect = (effect: ClientEffectTuple): void => {\n clientEffects.push(effect);\n clientEffectsByTrait?.push({ traitName, effect });\n };\n\n // Forward refs - assigned after construction, used by fetch/atomic handlers\n let bindingsRef: BindingContext | null = null;\n let contextRef: EffectContext | null = null;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload, source) => {\n if (this.config.debug) {\n busLog.debug('emit:dispatch', () => ({\n event,\n payloadJson: JSON.stringify(eventPayload ?? null),\n sourceOrbital: source?.orbital,\n sourceTrait: source?.trait,\n }));\n }\n // Forward the source stamp to the bus. If the caller didn't supply\n // one (legacy callers), synthesize one from the handler's lexical\n // closure so source-scoped listeners still match.\n const stamp = source ?? {\n orbital: registered.schema.name,\n trait: traitName,\n };\n this.eventBus.emit(event, eventPayload, stamp);\n emittedEvents.push({ event, payload: eventPayload, source: stamp });\n effectLog.debug(\"emit:push\", {\n event,\n cumulativeEmittedCount: emittedEvents.length,\n sourceTrait: stamp.trait,\n sourceOrbital: stamp.orbital,\n });\n xOrbitalLog.info('emit:server', {\n event,\n sourceOrbital: stamp.orbital,\n sourceTrait: stamp.trait,\n dispatchOrbital: registered.schema.name,\n });\n },\n\n set: async (targetId, field, value) => {\n // `(set @entity.X Y)` writes to per-trait scalar state, not\n // persistence. Persistence writes only via explicit\n // `(persist update ...)`. Mirrors compiled's `state.fields` reducer.\n let fieldState = registered.traitFieldStates.get(traitName);\n if (!fieldState) {\n fieldState = {} as EntityRow;\n registered.traitFieldStates.set(traitName, fieldState);\n }\n fieldState[field] = value as FieldValue;\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id: targetId || entityId || '', field, value: value as FieldValue },\n success: true,\n });\n },\n\n persist: async (action, targetEntityType, data) => {\n // ----------------------------------------------------------------\n // Batch mode: [\"persist\", \"batch\", [...operations]]\n // Each operation: [\"create\", \"collection\", {...data}],\n // [\"update\", \"collection\", \"id\", {...data}],\n // [\"delete\", \"collection\", \"id\"]\n // ----------------------------------------------------------------\n if (action === 'batch') {\n const operations = (data as EntityRow | undefined)?.operations as unknown[] | undefined;\n if (!Array.isArray(operations) || operations.length === 0) {\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n success: false,\n error: 'Batch requires a non-empty operations array',\n });\n return;\n }\n\n const batchResults: Array<EntityRow> = [];\n // Track completed ops for rollback on failure (best-effort)\n const completed: Array<{ action: string; entityType: string; id?: string }> = [];\n let batchFailed = false;\n let batchError = '';\n\n for (const op of operations) {\n if (!Array.isArray(op) || op.length < 2) {\n batchFailed = true;\n batchError = `Invalid batch operation format: ${JSON.stringify(op)}`;\n break;\n }\n\n const [opAction, opEntityType, ...opRest] = op as [string, string, ...unknown[]];\n\n try {\n switch (opAction) {\n case 'create': {\n const createData = (opRest[0] as EntityRow) || {};\n const { id: newId } = await this.persistence.create(opEntityType, createData);\n batchResults.push({ action: 'create', entityType: opEntityType, id: newId, ...createData });\n completed.push({ action: 'create', entityType: opEntityType, id: newId });\n break;\n }\n case 'update': {\n const updateId = opRest[0] as string;\n const updateData = (opRest[1] as EntityRow) || {};\n await this.persistence.update(opEntityType, updateId, updateData);\n const updated = await this.persistence.getById(opEntityType, updateId);\n batchResults.push({ action: 'update', entityType: opEntityType, id: updateId, ...(updated || updateData) });\n completed.push({ action: 'update', entityType: opEntityType, id: updateId });\n break;\n }\n case 'delete': {\n const deleteId = opRest[0] as string;\n // Snapshot before delete for potential rollback info\n await this.persistence.delete(opEntityType, deleteId);\n batchResults.push({ action: 'delete', entityType: opEntityType, id: deleteId, deleted: true });\n completed.push({ action: 'delete', entityType: opEntityType, id: deleteId });\n break;\n }\n default:\n batchFailed = true;\n batchError = `Unknown batch operation action: ${opAction}`;\n break;\n }\n } catch (err) {\n batchFailed = true;\n batchError = `Batch operation [${opAction}, ${opEntityType}] failed: ${err instanceof Error ? err.message : String(err)}`;\n break;\n }\n\n if (batchFailed) break;\n }\n\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n data: {\n operations: batchResults,\n completedCount: completed.length,\n totalCount: operations.length,\n },\n success: !batchFailed,\n ...(batchFailed ? { error: batchError } : {}),\n });\n return;\n }\n\n // ----------------------------------------------------------------\n // Single operation mode: create / update / delete\n // ----------------------------------------------------------------\n const type = targetEntityType || entityType;\n let resultData: EntityRow | undefined;\n const sizeBefore = (await this.persistence.list(type)).length;\n\n try {\n // Validate relation cardinality before create/update\n if (action === 'create' || action === 'update') {\n this.validateRelationCardinality(type, data || {});\n }\n\n switch (action) {\n case \"create\": {\n const { id } = await this.persistence.create(type, data || {});\n resultData = { id, ...(data || {}) };\n break;\n }\n case \"update\":\n if (data?.id || entityId) {\n const updateId = (data?.id as string) || entityId!;\n await this.persistence.update(type, updateId, data || {});\n // Return the updated entity\n const updated = await this.persistence.getById(type, updateId);\n resultData = updated || { id: updateId, ...(data || {}) };\n }\n break;\n case \"delete\": {\n // `(persist delete Entity @payload.id)` resolves to a raw\n // id STRING as the 4th arg, not `{id: ...}`. Accept both\n // shapes — the .lolo authoring form is string, and batch\n // callers may pass {id} too — so VG31-delete's cascade\n // doesn't silently no-op when `data` is a scalar id.\n const directId = typeof data === 'string' ? data : undefined;\n const nestedId = typeof data === 'object' && data !== null\n ? (data.id as string | undefined)\n : undefined;\n const deleteId = directId ?? nestedId ?? entityId;\n if (deleteId) {\n // Enforce onDelete relation rules before deleting\n await this.enforceOnDeleteRules(type, deleteId);\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n }\n\n const sizeAfter = (await this.persistence.list(type)).length;\n effectLog.debug(\"persist:store-mutate\", {\n action,\n entityType: type,\n resultId: resultData?.id as string | undefined,\n sizeBefore,\n sizeAfter,\n delta: sizeAfter - sizeBefore,\n });\n\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\n effectLog.error(\"persist:store-mutate-error\", {\n action,\n entityType: type,\n error: err instanceof Error ? err.message : String(err),\n });\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n callService: async (service, action, params) => {\n try {\n let result = null;\n // Custom handlers can override this\n if (this.config.effectHandlers?.callService) {\n result = await this.config.effectHandlers.callService(\n service,\n action,\n params,\n );\n } else if (this.config.mode === 'mock') {\n // Mock mode: return a useful default so service-atom chains\n // (e.g. std-service-stripe createPaymentIntent → PAYMENT_CREATED\n // → confirmPayment → PAYMENT_CONFIRMED) advance instead of\n // stalling at an empty payload. Fields cover the common\n // service-result shapes:\n // - `id` / `clientSecret` for payment-intent style results\n // - `success` / `status` for boolean-ish action results\n // - `result` (object) for actions that wrap a result\n // - echo `params` so consumers reading the request shape see it\n const mockId = `mock_${service}_${action}_${Math.random().toString(36).slice(2, 10)}`;\n const paramsEcho: Partial<EntityRow> = {};\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null || v instanceof Date)) {\n paramsEcho[k] = v;\n }\n }\n }\n result = {\n id: mockId,\n clientSecret: `secret_${mockId}`,\n success: true,\n status: 'succeeded',\n ...paramsEcho,\n } as EntityRow;\n } else {\n effectLog.warn('call-service:not-configured', { service, action });\n }\n\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n data: result as EntityRow | undefined,\n success: true,\n });\n\n return result;\n } catch (err) {\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n xOrbitalLog.info('fetch:enter', () => ({\n entityType: fetchEntityType,\n hasOptions: options !== undefined && options !== null,\n optionsKeys: options ? Object.keys(options).join(',') : '',\n filterType: typeof options?.filter,\n filterIsArray: Array.isArray(options?.filter),\n filterJson: JSON.stringify(options?.filter ?? null).slice(0, 300),\n payloadJson: JSON.stringify(bindingsRef?.payload ?? null).slice(0, 300),\n }));\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n\n if (options?.id) {\n // Single entity fetch\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations([entity], fetchEntityType, options.include);\n }\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n // Collection fetch\n let entities = await this.persistence.list(fetchEntityType);\n\n // Apply filter SExpression if provided. Mirrors\n // ServerEffectHandlers.fetch. Each row is evaluated against\n // the predicate with @entity bound to the row, @payload to\n // the inbound event payload, and @current to the row.\n if (options?.filter !== undefined && options.filter !== null) {\n const predicate = options.filter as SExpr;\n entities = entities.filter((entity) => {\n const ctx = createContextFromBindings(\n { entity, payload: bindingsRef?.payload, current: entity },\n false,\n );\n try {\n return Boolean(evaluate(predicate, ctx));\n } catch (err) {\n effectLog.error('fetch:filter-eval-error', {\n entityType: fetchEntityType,\n error: err instanceof Error ? err : String(err),\n });\n return false;\n }\n });\n }\n\n // Capture total AFTER filter, BEFORE offset/limit — paginating\n // consumers need the count of rows matching the filter, not\n // just the slice length.\n total = entities.length;\n\n // Apply pagination\n if (options?.offset && options.offset > 0) {\n entities = entities.slice(options.offset);\n }\n if (options?.limit && options.limit > 0) {\n entities = entities.slice(0, options.limit);\n }\n\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations(entities, fetchEntityType, options.include);\n }\n\n fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n\n return result === null\n ? null\n : { rows: result, total };\n } catch (error) {\n effectLog.error('fetch:error', {\n entityType: fetchEntityType,\n error: error instanceof Error ? error : String(error),\n });\n return null;\n }\n },\n\n // Resource operators: ref, deref, swap, watch, atomic\n\n ref: async (refEntityType, options) => {\n // ref is identical to fetch on the server: query persistence, populate fetchedData\n try {\n return await handlers.fetch!(refEntityType, options);\n } catch (error) {\n effectLog.error('ref:error', {\n entityType: refEntityType,\n error: error instanceof Error ? error : String(error),\n });\n return null;\n }\n },\n\n deref: async (derefEntityType, options) => {\n // deref is identical to fetch on the server: one-shot read\n try {\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n\n if (options?.id) {\n const entity = await this.persistence.getById(derefEntityType, options.id);\n if (entity) {\n fetchedData[derefEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n const entities = await this.persistence.list(derefEntityType);\n fetchedData[derefEntityType] = entities;\n result = entities;\n total = entities.length;\n }\n\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: true,\n });\n\n return result === null ? null : { rows: result, total };\n } catch (error) {\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n swap: async (swapEntityType, swapEntityId, transform) => {\n // Read-modify-write: read entity, apply transform S-expression, write back\n try {\n const current = await this.persistence.getById(swapEntityType, swapEntityId);\n if (!current) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: `Entity ${swapEntityType}/${swapEntityId} not found`,\n });\n return null;\n }\n\n // Evaluate the transform S-expression with @current binding\n const ctx = createContextFromBindings({\n current,\n entity: entityData,\n payload,\n }, false, this.config.contextExtensions);\n\n let newData: EntityRow;\n if (Array.isArray(transform)) {\n // S-expression transform: evaluate with @current bound to the entity\n const result = evaluate(\n transform as Parameters<typeof evaluate>[0],\n ctx,\n );\n // The result should be a record (the transformed entity)\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n newData = result as EntityRow;\n } else {\n // If transform returned a non-object, treat it as a partial update\n newData = current;\n }\n } else if (typeof transform === 'object' && transform !== null) {\n // Plain object merge: simple field updates\n newData = { ...current, ...(transform as EntityRow) };\n } else {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: 'swap! transform must be an S-expression or object',\n });\n return null;\n }\n\n // Write back (without version check for now, full OCC in future pass)\n await this.persistence.update(swapEntityType, swapEntityId, newData);\n\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n data: { id: swapEntityId, ...newData },\n success: true,\n });\n\n return newData;\n } catch (error) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n watch: (_watchEntityType, _watchOptions) => {\n // Watch is a no-op on server. Client subscribes to real-time updates.\n if (this.config.debug) {\n effectLog.debug('watch:noop-server', { entityType: _watchEntityType });\n }\n },\n\n atomic: async (atomicEffects) => {\n // Execute inner effects sequentially. If any fails, mark all as failed.\n // Full transaction/rollback support is a future enhancement.\n let atomicFailed = false;\n let atomicError = '';\n\n const atomicExecutor = new EffectExecutor({\n handlers,\n bindings: bindingsRef ?? {},\n context: contextRef ?? { traitName, orbitalName: registered.schema.name, state: 'unknown', transition: 'unknown' },\n debug: this.config.debug,\n contextExtensions: this.config.contextExtensions,\n });\n\n for (const innerEffect of atomicEffects) {\n if (atomicFailed) break;\n try {\n await atomicExecutor.execute(innerEffect);\n } catch (err) {\n atomicFailed = true;\n atomicError = err instanceof Error ? err.message : String(err);\n }\n }\n\n if (atomicFailed) {\n // Mark the atomic block as failed\n effectResults.push({\n effect: 'atomic',\n success: false,\n error: `Atomic block failed: ${atomicError}`,\n });\n } else {\n effectResults.push({\n effect: 'atomic',\n success: true,\n data: { innerCount: atomicEffects.length },\n });\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n // Snapshot the resolved row reference (if any) so the log can\n // tell whether successive render-ui pushes for the same slot\n // carry the SAME row object (stable, no remount expected) or a\n // freshly-cloned one (would invalidate Form's normalizedInitialData\n // memo and reset typed values). We read `pattern.entity` because\n // form-section binds the row to `entity: @payload.row`.\n const patternNode: RuntimeRenderPattern | null =\n pattern !== null && typeof pattern === 'object' && !Array.isArray(pattern)\n ? (pattern as RuntimeRenderPattern)\n : null;\n const patternEntity = patternNode?.entity;\n const entityRow: EntityRow | null =\n patternEntity !== null && typeof patternEntity === 'object' && !Array.isArray(patternEntity)\n ? (patternEntity as EntityRow)\n : null;\n const patternTypeRaw = patternNode?.['type'];\n renderLog.debug('renderUI:push', {\n trait: traitName,\n slot,\n patternType: typeof patternTypeRaw === 'string' ? patternTypeRaw : undefined,\n entityRowId: typeof entityRow?.id === 'string' ? entityRow.id : undefined,\n entityIsObject: entityRow !== null,\n });\n pushClientEffect(['render-ui', slot, pattern, props, priority]);\n },\n navigate: (path, params) => {\n pushClientEffect(['navigate', path, params]);\n },\n\n notify: (message, type) => {\n if (this.config.debug) {\n effectLog.info('notify', { type, message });\n }\n // Forward notify to client as a client effect\n pushClientEffect(['notify', message, { type }]);\n },\n\n log: (message, level) => {\n if (level === 'error') {\n dynamicLog.error(message);\n } else if (level === 'warn') {\n dynamicLog.warn(message);\n } else {\n dynamicLog.debug(message);\n }\n },\n\n // Allow custom handlers to override\n ...this.config.effectHandlers,\n };\n\n const state = registered.manager.getState(traitName);\n // Build binding context with @entity AND @EntityName aliases.\n // @entity is the standard binding root. @EntityName (e.g., @SpriteEntity)\n // is used by some behaviors for explicit entity references in render-ui patterns.\n // The compiled app resolves @EntityName at compile time; the interpreter\n // needs it in the runtime binding context.\n //\n // NOTE: fetchedData is populated by fetch effects DURING execution.\n // The syncFetchedBindings() helper is called from the fetch handler\n // to update bindings after each fetch, so render-ui effects that\n // run after fetch see the correct @EntityName.field values.\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n // Call-site `config: { ... }` injection. Reference-resolver captures the\n // trait ref's config block into RegisteredOrbital.configByTrait at\n // registration time (see registerOrbitalAsync). Here we surface it on the\n // binding context so render-ui patterns can read `@config.icon`,\n // `@config.title`, `@config.fields`, etc. — the mechanism that lets a\n // molecule parameterize an imported atom's UI without duplicating the\n // render-ui body.\n // Defaults from the trait's DECLARED config schema must merge BEHIND the\n // call-site override so atoms verified standalone (no consumer override)\n // still see their declared icon/title/fields/mode values. Without this,\n // `@config.icon` resolved to undefined → Icon fell back to \"?\", and\n // `@config.title` rendered as empty. The compiled path's Solution-1 in\n // backend.rs emits `DEFAULT_<TRAIT>_CONFIG` + `mergedConfig`; the runtime\n // path needs the same merge or std-modal/std-confirmation render bare in\n // playground while the compiled bundle renders correctly.\n const traitDef = registered.traits.find((t) => t.name === traitName);\n const declaredDefaults = collectDeclaredConfigDefaults(traitDef);\n const callSiteOverride = registered.configByTrait.get(traitName);\n if (declaredDefaults || callSiteOverride) {\n bindings.config = { ...(declaredDefaults ?? {}), ...(callSiteOverride ?? {}) };\n }\n\n // `@entity` resolves to the per-trait scalar state populated by\n // explicit `(set @entity.X Y)` effects. No implicit seeding from\n // persistence — if the schema author didn't `(set)` a field, it\n // stays undefined and render-ui shows nothing.\n const traitFieldState = registered.traitFieldStates.get(traitName);\n if (traitFieldState) {\n bindings.entity = traitFieldState;\n }\n\n // Add initial named entity binding\n if (entityType) {\n bindings[entityType] = bindings.entity ?? entityData;\n }\n\n // Wire forward refs so fetch/atomic handlers can access bindings and context\n bindingsRef = bindings;\n\n const context: EffectContext = {\n traitName,\n orbitalName: registered.schema.name,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n contextRef = context;\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n contextExtensions: this.config.contextExtensions,\n });\n\n await executor.executeAll(effects);\n }\n\n // ==========================================================================\n // Relation Population\n // ==========================================================================\n\n /**\n * Populate relation fields on entities\n *\n * For each field in `include`, find the relation field configuration and\n * fetch the related entity, attaching it to the parent entity.\n *\n * @param entities - Entities to populate\n * @param entityType - Entity type name\n * @param include - Relation field names to populate\n */\n /**\n * Validate that relation field values match their declared cardinality.\n * Called before create/update to ensure data integrity.\n */\n private validateRelationCardinality(\n entityType: string,\n data: EntityRow,\n ): void {\n // Find the entity schema\n for (const [, registered] of this.orbitals) {\n if (registered.entity.name !== entityType) continue;\n\n for (const field of registered.entity.fields ?? []) {\n if (field.type !== 'relation') continue;\n if (field.name === undefined) continue;\n const fieldName = field.name;\n const value = data[fieldName];\n if (value === undefined || value === null) continue;\n\n const cardinality = field.relation?.cardinality || 'one';\n\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n if (Array.isArray(value)) {\n throw new Error(\n `Cardinality violation: ${entityType}.${fieldName} has cardinality '${cardinality}' but received an array. Expected a single string ID.`\n );\n }\n } else if (cardinality === 'many' || cardinality === 'many-to-many' || cardinality === 'one-to-many') {\n if (typeof value === 'string') {\n data[fieldName] = [value];\n } else if (Array.isArray(value)) {\n const nonStrings = value.filter((v: unknown) => typeof v !== 'string');\n if (nonStrings.length > 0) {\n throw new Error(\n `Cardinality violation: ${entityType}.${fieldName} has cardinality '${cardinality}' but array contains non-string values.`\n );\n }\n }\n }\n }\n break;\n }\n }\n\n /**\n * Enforce onDelete rules for relation fields pointing to the entity being deleted.\n * Scans all registered entities for relation fields targeting the given entity type,\n * finds records referencing the ID being deleted, and applies cascade/nullify/restrict.\n */\n private async enforceOnDeleteRules(\n entityType: string,\n deletedId: string,\n ): Promise<void> {\n for (const [, registered] of this.orbitals) {\n const entity = registered.entity;\n const fields = entity.fields ?? [];\n\n for (const field of fields) {\n if (field.type !== 'relation') continue;\n if (field.relation?.entity !== entityType) continue;\n if (field.name === undefined) continue;\n const fieldName = field.name;\n\n const onDelete = field.relation.onDelete || 'restrict';\n const referringEntityType = entity.name;\n\n const allRecords = await this.persistence.list(referringEntityType);\n const affectedRecords = allRecords.filter(record => {\n const fkValue = record[fieldName];\n if (typeof fkValue === 'string') return fkValue === deletedId;\n if (Array.isArray(fkValue)) return fkValue.includes(deletedId);\n return false;\n });\n\n if (affectedRecords.length === 0) continue;\n\n switch (onDelete) {\n case 'restrict':\n throw new Error(\n `Cannot delete ${entityType} ${deletedId}: ${affectedRecords.length} ${referringEntityType} record(s) reference it via ${field.name}. Rule: restrict.`\n );\n\n case 'cascade':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId) {\n await this.persistence.delete(referringEntityType, recordId);\n }\n }\n if (this.config.debug) {\n persistLog.debug('cascade-delete', {\n count: affectedRecords.length,\n entityType: referringEntityType,\n });\n }\n break;\n\n case 'nullify':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId && field.name !== undefined) {\n const fieldName = field.name;\n const update: EntityRow = {};\n const fkValue = record[fieldName];\n if (Array.isArray(fkValue)) {\n update[fieldName] = fkValue.filter((id: unknown) => id !== deletedId);\n } else {\n update[fieldName] = null;\n }\n await this.persistence.update(referringEntityType, recordId, update);\n }\n }\n if (this.config.debug) {\n persistLog.debug('nullify', {\n field: field.name,\n count: affectedRecords.length,\n entityType: referringEntityType,\n });\n }\n break;\n }\n }\n }\n }\n\n private async populateRelations(\n entities: EntityRow[],\n entityType: string,\n include: string[],\n depth: number = 0,\n visited: Set<string> = new Set(),\n ): Promise<void> {\n // Circular reference protection: stop if depth exceeded or entity type already visited\n const maxDepth = 2;\n if (depth >= maxDepth || visited.has(entityType)) {\n if (this.config.debug) {\n persistLog.debug('populate:skip', {\n entityType,\n depth,\n visited: visited.has(entityType),\n });\n }\n return;\n }\n visited.add(entityType);\n // Find the orbital that owns this entity type\n let entityFields: Array<{ name: string; type: string; relation?: { entity?: string; cardinality?: string; onDelete?: string } }> | undefined;\n\n for (const [, registered] of this.orbitals) {\n if (registered.entity.name === entityType) {\n // EntityField.name is optional in @almadar/core 7+ to match the\n // Rust IR (FieldDefinition.name: Option<String>). For relation\n // population we only care about named top-level fields; nameless\n // nested item descriptors don't carry FK metadata.\n entityFields = registered.entity.fields.filter(\n (f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n );\n break;\n }\n }\n\n if (!entityFields) {\n if (this.config.debug) {\n persistLog.warn('populate:no-entity-def', { entityType });\n }\n return;\n }\n\n // Process each include field\n for (const includeField of include) {\n // Find the relation field (check both \"fieldName\" and \"fieldNameId\" patterns)\n const relationField = entityFields.find(f => {\n if (f.type !== 'relation') return false;\n // Match \"company\" against \"company\" or \"companyId\"\n return f.name === includeField ||\n f.name === `${includeField}Id` ||\n f.name.replace(/Id$/, '') === includeField;\n });\n\n if (!relationField?.relation?.entity) {\n if (this.config.debug) {\n persistLog.warn('populate:no-relation-field', { includeField, entityType });\n }\n continue;\n }\n\n const foreignKeyField = relationField.name;\n const relatedEntityType = relationField.relation.entity;\n const cardinality = relationField.relation.cardinality || 'one';\n\n // Collect all foreign key IDs to batch fetch\n // Handles both single ID (string) and array of IDs (string[]) for many cardinalities\n const foreignKeyIds = new Set<string>();\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n if (fkValue && typeof fkValue === 'string') {\n foreignKeyIds.add(fkValue);\n } else if (Array.isArray(fkValue)) {\n for (const id of fkValue) {\n if (id && typeof id === 'string') {\n foreignKeyIds.add(id);\n }\n }\n }\n }\n\n if (foreignKeyIds.size === 0) continue;\n\n // Batch fetch all related entities\n const relatedEntities = new Map<string, EntityRow>();\n for (const fkId of foreignKeyIds) {\n try {\n const related = await this.persistence.getById(relatedEntityType, fkId);\n if (related) {\n relatedEntities.set(fkId, related);\n }\n } catch (error) {\n if (this.config.debug) {\n persistLog.error('populate:fetch-related-error', {\n entityType: relatedEntityType,\n error: error instanceof Error ? error : String(error),\n });\n }\n }\n }\n\n // Attach related entities to parent entities\n // Use the base name without \"Id\" suffix for the populated field\n const populatedFieldName = includeField.endsWith('Id')\n ? includeField.slice(0, -2)\n : includeField;\n\n // Self-referential relations (target entity === source entity, e.g.\n // ThreadPost.replies : [ThreadPost]) would otherwise attach LIVE store\n // rows that also appear in `entities` and get hydrated themselves —\n // producing mutual object references (A.replies→B, B.replies→A) that make\n // `res.json()` throw \"Converting circular structure to JSON\" → 500. Attach\n // a shallow clone instead, and for the self-referential case neutralize the\n // child's own back-pointer field so hydrated children are leaves (one level\n // of hydration, no cycle).\n const isSelfRef = relatedEntityType === entityType;\n const hydrateClone = (id: string): EntityRow | undefined => {\n const related = relatedEntities.get(id);\n if (!related) return undefined;\n const copy: EntityRow = { ...related };\n if (isSelfRef) copy[foreignKeyField] = [];\n return copy;\n };\n\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n // Population attaches related EntityRow objects to the entity at runtime.\n // This mutates beyond the EntityRow type, so we use Object.defineProperty.\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n Object.defineProperty(entity, populatedFieldName, {\n value: hydrateClone(fkValue),\n writable: true, enumerable: true, configurable: true,\n });\n }\n } else {\n if (Array.isArray(fkValue)) {\n const fkIds = (fkValue as string[]).filter((id): id is string => typeof id === 'string');\n Object.defineProperty(entity, populatedFieldName, {\n value: fkIds.map(hydrateClone).filter(Boolean),\n writable: true, enumerable: true, configurable: true,\n });\n } else if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n Object.defineProperty(entity, populatedFieldName, {\n value: [hydrateClone(fkValue)],\n writable: true, enumerable: true, configurable: true,\n });\n }\n }\n }\n\n if (this.config.debug) {\n persistLog.debug('populate:done', {\n field: populatedFieldName,\n count: entities.length,\n entityType,\n });\n }\n }\n }\n\n // ==========================================================================\n // Express Router\n // ==========================================================================\n\n /**\n * Create Express router for orbital API endpoints\n *\n * All data access goes through trait events with guards.\n * No direct CRUD routes - use events with `fetch` effects.\n *\n * Routes:\n * - GET / - List registered orbitals\n * - GET /:orbital - Get orbital info and current states\n * - POST /:orbital/events - Send event to orbital (includes data from `fetch` effects)\n */\n router(): ExpressRouter {\n if (!isNodeEnv()) {\n throw new Error(\n \"OrbitalServerRuntime.router() is Node-only (uses Express). \" +\n \"For in-browser use, mount <BrowserPlayground> from @almadar/ui instead.\",\n );\n }\n // Eval-require so the dist bundle has no static `import 'express'`\n // — browsers (which never reach this branch anyway) get a clean\n // bundle with zero express references.\n const { Router } = nodeRequire<typeof import('express')>('express');\n const router = Router();\n\n // List orbitals\n router.get(\"/\", (_req: Request, res: Response) => {\n const orbitals = Array.from(this.orbitals.entries()).map(\n ([name, reg]) => ({\n name,\n entity: reg.entity?.name,\n traits: (reg.traits || []).map((t) => t.name),\n }),\n );\n res.json({ success: true, orbitals });\n });\n\n // Get orbital info\n router.get(\"/:orbital\", (req: Request, res: Response) => {\n const orbitalName = req.params.orbital as string;\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n res.status(404).json({ success: false, error: \"Orbital not found\" });\n return;\n }\n\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n res.json({\n success: true,\n orbital: {\n name: orbitalName,\n entity: registered.entity,\n traits: registered.traits.map((t) => ({\n name: t.name,\n currentState: states[t.name],\n states: (t.stateMachine?.states || []).map((s) => s.name),\n events: [...new Set((t.stateMachine?.transitions || []).map((tr) => tr.event))],\n })),\n },\n });\n });\n\n // Send event to orbital - this is the ONLY data access point\n // All reads go through `fetch` effects with guard enforcement\n // All writes go through `persist` effects with guard enforcement\n router.post(\n \"/:orbital/events\",\n async (req: Request, res: Response, next: NextFunction) => {\n try {\n const orbitalName = req.params.orbital as string;\n // Extract user from request (set by authenticateFirebase middleware)\n const firebaseUser = (req as Request & { firebaseUser?: OrbitalEventRequest[\"user\"] }).firebaseUser;\n const user = firebaseUser ? {\n ...firebaseUser,\n displayName: (firebaseUser.name as string | undefined) ?? firebaseUser.displayName,\n } : undefined;\n\n const result = await this.processOrbitalEvent(orbitalName, {\n ...req.body,\n user,\n });\n res.json(result);\n } catch (error) {\n next(error);\n }\n },\n );\n\n // No direct CRUD routes - all data access goes through events\n // This ensures guards are always evaluated for both reads and writes\n\n return router;\n }\n\n // ==========================================================================\n // Direct API (for programmatic use)\n // ==========================================================================\n\n /**\n * Get the event bus for manual event emission\n */\n getEventBus(): EventBus {\n return this.eventBus;\n }\n\n /**\n * Get state for a specific orbital/trait\n */\n getState(\n orbitalName: string,\n traitName?: string,\n ): TraitState | Record<string, TraitState> | undefined {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) return undefined;\n\n if (traitName) {\n return registered.manager.getState(traitName);\n }\n\n // Return all states for the orbital\n const states: Record<string, TraitState> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state;\n }\n return states;\n }\n\n /**\n * List registered orbitals\n */\n listOrbitals(): string[] {\n return Array.from(this.orbitals.keys());\n }\n\n /**\n * Check if an orbital is registered\n */\n hasOrbital(name: string): boolean {\n return this.orbitals.has(name);\n }\n\n /**\n * Get information about active ticks\n */\n getActiveTicks(): Array<{\n orbital: string;\n trait: string;\n tick: string;\n interval: number | string;\n hasGuard: boolean;\n }> {\n return this.tickBindings.map((binding) => ({\n orbital: binding.orbitalName,\n trait: binding.traitName,\n tick: binding.tick.name,\n interval: binding.tick.interval,\n hasGuard: !!binding.tick.guard,\n }));\n }\n}\n\n/**\n * Factory function to create a runtime instance\n */\nexport function createOrbitalServerRuntime(\n config?: OrbitalServerRuntimeConfig,\n): OrbitalServerRuntime {\n return new OrbitalServerRuntime(config);\n}\n\n// ============================================================================\n// Source-scoped listen support\n// ============================================================================\n\n/**\n * Parse a `TraitEventListener`'s event key into its bare event name and a\n * source-matcher predicate.\n *\n * Supports both authoring layers:\n *\n * 1. **New core schema**: `listener.source` is an explicit object describing\n * the scope (`any` / `trait` / `orbital`). Used as-is.\n * 2. **Legacy concatenated string** in `listener.event`:\n * - `\"*.EVENT\"` → `{ kind: \"any\" }`, bare = EVENT\n * - `\"Trait.EVENT\"` → `{ kind: \"trait\", trait: \"Trait\" }`, bare = EVENT\n * - `\"Orbital.Trait.EVENT\"`→ `{ kind: \"orbital\", orbital, trait }`, bare = EVENT\n * - `\"EVENT\"` → `{ kind: \"any\" }`, bare = EVENT (no prefix\n * means \"I don't know where it came from, accept any\").\n *\n * The matcher is invoked on every emit that matches the bare event key; it\n * returns `true` iff the emit's source metadata matches the listener's scope.\n *\n * `listenerOrbital` is the orbital that owns the listener; it's used to\n * resolve intra-orbital trait references for `{ kind: \"trait\" }` scopes.\n */\nfunction parseListenSource(\n listener: { event: string; source?: unknown },\n listenerOrbital: string,\n): {\n bareEvent: string;\n matcher: (source: EventSourceMeta | undefined) => boolean;\n} {\n // 1. Explicit source field from the new core schema (preferred).\n const explicit = (listener as { source?: ListenSourceDescriptor }).source;\n if (explicit && typeof explicit === 'object') {\n return {\n bareEvent: listener.event,\n matcher: buildMatcher(explicit, listenerOrbital),\n };\n }\n\n // 2. Fall back to parsing the legacy concatenated string.\n const key = listener.event;\n const parts = key.split('.');\n if (parts.length === 1) {\n // Bare `EVENT` — no source prefix. Accept any source (this is the\n // safest default; callers who want strict scoping should author the\n // full two-segment form).\n return { bareEvent: key, matcher: () => true };\n }\n\n if (parts.length === 2) {\n const [sourceOrStar, eventName] = parts;\n if (sourceOrStar === '*') {\n return { bareEvent: eventName, matcher: () => true };\n }\n // Single-segment source: intra-orbital trait reference.\n return {\n bareEvent: eventName,\n matcher: buildMatcher(\n { kind: 'trait', trait: sourceOrStar },\n listenerOrbital,\n ),\n };\n }\n\n if (parts.length >= 3) {\n const eventName = parts[parts.length - 1];\n const trait = parts[parts.length - 2];\n const orbital = parts.slice(0, parts.length - 2).join('.');\n return {\n bareEvent: eventName,\n matcher: buildMatcher({ kind: 'orbital', orbital, trait }, listenerOrbital),\n };\n }\n\n // Unreachable given the split above — defensive default.\n return { bareEvent: key, matcher: () => true };\n}\n\n/** Narrow the structured source descriptor into an executable matcher. */\nfunction buildMatcher(\n src: ListenSourceDescriptor,\n listenerOrbital: string,\n): (source: EventSourceMeta | undefined) => boolean {\n if (src.kind === 'any') return () => true;\n if (src.kind === 'trait') {\n const wantedTrait = src.trait;\n return (source) =>\n !!source &&\n source.orbital === listenerOrbital &&\n source.trait === wantedTrait;\n }\n // src.kind === 'orbital'\n const wantedOrbital = src.orbital;\n const wantedTrait = src.trait;\n return (source) =>\n !!source &&\n source.orbital === wantedOrbital &&\n source.trait === wantedTrait;\n}\n\n/** Shape of the structured `source` field on `TraitEventListener`. */\ntype ListenSourceDescriptor =\n | { kind: 'any' }\n | { kind: 'trait'; trait: string }\n | { kind: 'orbital'; orbital: string; trait: string };\n\n/** Shape of `RuntimeEvent.source`. */\ntype EventSourceMeta = {\n orbital?: string;\n trait?: string;\n transition?: string;\n tick?: string;\n};\n"]}
|
package/dist/ServerBridge.d.ts
CHANGED