@almadar/runtime 6.30.0 → 6.32.0
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-BkaBvI6-.d.ts → OrbitalServerRuntime-DpAwIrmv.d.ts} +13 -2
- package/dist/OrbitalServerRuntime.d.ts +1 -1
- package/dist/OrbitalServerRuntime.js +5 -7
- package/dist/ServerBridge.js +1 -3
- package/dist/{chunk-PZ5AY32C.js → chunk-MLKGABMK.js} +0 -2
- package/dist/{chunk-U4PL237A.js → chunk-OU3ITB5S.js} +0 -2
- package/dist/{chunk-TGL6XC6E.js → chunk-YFH577FH.js} +3 -5
- package/dist/{createAgentSubstrateHandlers-RUX4RFC6.js → createAgentSubstrateHandlers-G6KSTJPA.js} +1 -3
- package/dist/createOsHandlers.js +2 -4
- package/dist/{external-loader-C2LO5XG3.js → external-loader-OPXVTNC4.js} +1 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -6
- package/package.json +7 -7
- package/dist/OrbitalServerRuntime.js.map +0 -1
- package/dist/ServerBridge.js.map +0 -1
- package/dist/chunk-PZ5AY32C.js.map +0 -1
- package/dist/chunk-TGL6XC6E.js.map +0 -1
- package/dist/chunk-U4PL237A.js.map +0 -1
- package/dist/createAgentSubstrateHandlers-RUX4RFC6.js.map +0 -1
- package/dist/createOsHandlers.js.map +0 -1
- package/dist/external-loader-C2LO5XG3.js.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/OrbitalServerRuntime.ts"],"names":["handle","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 { createTickScheduler, type TickHandle, type TickScheduler } from \"./TickScheduler.js\";\nimport { isValidCronExpression } from \"./cron.js\";\nimport { parseDurationString } from \"./duration.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 `createOsHandlers` (uses `fs`, `net`, `child_process`).\n// The runtime auto-wires it in the constructor's Node-only branch — guarded\n// by `isNodeEnv()` — and the eval-require keeps the import out of the\n// browser bundle entirely.\nimport type {\n createOsHandlers as CreateOsHandlersFn,\n OsHandlerResult,\n} from \"./createOsHandlers.js\";\nimport type {\n createAgentSubstrateHandlers as CreateAgentSubstrateHandlersFn,\n AgentSubstrateHandlerResult,\n SubstrateServices,\n} from \"./createAgentSubstrateHandlers.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\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\");\nimport type { SSEEvent } from '@almadar/server';\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, collectDeclaredEntityDefaults, normalizeCallSiteConfigToValues } 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 is a three-layer merge:\n * declared entity field defaults < persistence entityData < this map.\n * Mutated only by the `set` effect handler.\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 * 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 * Substrate service implementations for effect-position operators\n * (compose/compose-all, behavior/instantiate, validate/validate, etc.).\n * @almadar-io/rabit injects these at runtime; tests can inject mocks.\n */\n substrateServices?: SubstrateServices;\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 handle: TickHandle;\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 // One coalesced clock for every tick this runtime registers — replaces\n // \"one setInterval per tick\" with a single accumulator loop so ticks due\n // in the same pass fire together instead of on independent timers.\n private readonly tickScheduler: TickScheduler = createTickScheduler();\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 osHandlersPromise: Promise<void> | null = null;\n private substrateHandlers: AgentSubstrateHandlerResult | null = null;\n private substrateHandlersPromise: Promise<void> | 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 // OS handlers (fs/net/child_process effects) are wired lazily on the first\n // event via ensureOsHandlers(). They live in the ESM-only\n // `./createOsHandlers.js`; the package is `type: module`, so a synchronous\n // require() of it throws ERR_REQUIRE_ESM in a Node consumer. A dynamic\n // import() loads it cleanly AND keeps it out of the browser graph\n // (isNodeEnv-guarded, lazy chunk) — same goal as the old eval-require, but\n // without the CJS hazard. Default to empty handlers until then.\n this.osHandlers = { handlers: {}, cleanup: () => {} };\n }\n\n /**\n * Lazily wire the OS-level effect handlers (fs/net/child_process), merging\n * them UNDER any user-provided handlers. Deferred out of the constructor\n * because `./createOsHandlers.js` is ESM and `require()`-ing it from a\n * `type: module` package throws ERR_REQUIRE_ESM — so it is dynamic-import()ed\n * here on the first event. Node-only, idempotent (single shared load), and a\n * no-op in the browser (the import never runs behind the isNodeEnv guard).\n */\n private async ensureOsHandlers(): Promise<void> {\n if (!isNodeEnv()) return;\n if (!this.osHandlersPromise) {\n this.osHandlersPromise = (async () => {\n // Literal `.js` specifier: a template literal makes tsup emit a\n // __glob helper keyed by the source `.ts`, which then misses at dist\n // runtime (ext resolves to `.js`) and throws \"Module not found in\n // bundle\". A literal `import()` resolves the real dist `.js` in Node\n // and Vite/vitest maps `.js`→`.ts` source automatically.\n const { createOsHandlers } = (await import('./createOsHandlers.js')) as {\n createOsHandlers: typeof CreateOsHandlersFn;\n };\n this.osHandlers = createOsHandlers({\n emitEvent: (type, payload) => this.eventBus.emit(type, payload),\n });\n this.config.effectHandlers = {\n ...this.osHandlers.handlers,\n ...this.config.effectHandlers,\n };\n })();\n }\n return this.osHandlersPromise;\n }\n\n /**\n * Lazily wire the agent substrate effect handlers (compose/behavior/\n * validate/lolo), merging them UNDER any user-provided handlers.\n * Same deferred-import pattern as ensureOsHandlers.\n */\n private async ensureAgentSubstrateHandlers(): Promise<void> {\n if (!isNodeEnv()) return;\n if (!this.substrateHandlersPromise) {\n this.substrateHandlersPromise = (async () => {\n const { createAgentSubstrateHandlers } = (await import('./createAgentSubstrateHandlers.js')) as {\n createAgentSubstrateHandlers: typeof CreateAgentSubstrateHandlersFn;\n };\n this.substrateHandlers = createAgentSubstrateHandlers({\n emitEvent: (type, payload) => this.eventBus.emit(type, payload),\n services: this.config.substrateServices ?? {},\n });\n this.config.effectHandlers = {\n ...this.substrateHandlers.handlers,\n ...this.config.effectHandlers,\n };\n })();\n }\n return this.substrateHandlersPromise;\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 const normalizedConfig = normalizeCallSiteConfigToValues(wrapper.config);\n if (normalizedConfig && inner?.name) {\n configByTrait.set(inner.name, normalizedConfig);\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 // A cron-shaped string (\"0 9 * * *\") schedules on calendar matches, not\n // a fixed millisecond delay — route it to the scheduler's cron mode\n // instead of forcing it through parseIntervalString (which used to\n // silently default a cron string to 1000ms).\n if (typeof tick.interval === \"string\" && isValidCronExpression(tick.interval)) {\n if (this.config.debug) {\n registerLog.debug('register:tick-cron', {\n orbital: orbitalName,\n trait: traitName,\n tick: tick.name,\n expression: tick.interval,\n });\n }\n const handle = this.tickScheduler.addCron(tick.interval, () => {\n void this.executeTick(orbitalName, traitName, tick, registered);\n });\n this.tickBindings.push({ orbitalName, traitName, tick, handle });\n return;\n }\n\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 a duration string (e.g., '5s', '1m', '1h'). A string that's\n // neither this shape nor a valid cron expression (already checked\n // above) is an authoring mistake — this throws rather than silently\n // defaulting to some fallback ms, so it surfaces loudly instead of\n // ticking at a value the author never wrote.\n intervalMs = parseDurationString(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 handle = this.tickScheduler.add(intervalMs, () => {\n void this.executeTick(orbitalName, traitName, tick, registered);\n });\n\n this.tickBindings.push({\n orbitalName,\n traitName,\n tick,\n handle,\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 binding.handle.stop();\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 if (this.substrateHandlers) {\n this.substrateHandlers.cleanup();\n this.substrateHandlers = 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 * @param onPush - Optional incremental-push callback. Called immediately\n * when an event is emitted or a client effect fires, before the promise\n * resolves. Used by the SSE streaming path to write items to the\n * response as they arrive rather than buffering and flushing at the end.\n */\n async processOrbitalEvent(\n orbitalName: string,\n request: OrbitalEventRequest,\n onPush?: (item: { type: 'event'; data: { event: string; payload?: EventPayload; source?: BusEventSource } } | { type: 'effect'; data: ClientEffectTuple }) => void,\n ): Promise<OrbitalEventResponse> {\n // Wire OS-level + substrate effect handlers before any effect runs.\n await this.ensureOsHandlers();\n await this.ensureAgentSubstrateHandlers();\n\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 onPush,\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 onPush?: (item: { type: 'event'; data: { event: string; payload?: EventPayload; source?: BusEventSource } } | { type: 'effect'; data: ClientEffectTuple }) => void,\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 onPush?.({ type: 'effect', data: 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 const emittedItem = { event, payload: eventPayload, source: stamp };\n emittedEvents.push(emittedItem);\n onPush?.({ type: 'event', data: emittedItem });\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 a three-layer merge (outermost wins):\n // 1. Declared entity field defaults (schema `default:` values) — base\n // 2. entityData from persistence (already in bindings.entity above) — middle\n // 3. Explicit `(set @entity.X Y)` scalar state (traitFieldStates) — top\n // Without layer 1, behaviors that render `@entity.title` on first load\n // (before any event fires a `(set)`) see undefined → blank UI even though\n // the entity schema declares a sensible default. Mirrors the `@config`\n // merge applied above (declared defaults < call-site override). RC-2.\n const entityFieldDefaults = collectDeclaredEntityDefaults(registered.entity);\n const traitFieldState = registered.traitFieldStates.get(traitName);\n if (entityFieldDefaults || traitFieldState) {\n bindings.entity = {\n ...(entityFieldDefaults ?? {}),\n ...(bindings.entity ?? {}),\n ...(traitFieldState ?? {}),\n };\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 const wantsStream =\n req.query['stream'] === 'true' ||\n (req.headers['accept'] ?? '').includes('text/event-stream');\n\n if (!wantsStream) {\n try {\n const orbitalName = req.params.orbital as string;\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 const result = await this.processOrbitalEvent(orbitalName, { ...req.body, user });\n res.json(result);\n } catch (error) {\n next(error);\n }\n return;\n }\n\n // SSE streaming path — true incremental: each emitted event or client\n // effect is written to the stream immediately via onPush as it fires,\n // before processOrbitalEvent resolves. Dynamic import keeps\n // @almadar/server (ESM, Node-only) out of browser bundles.\n const { setupSSE, sendSSEEvent, sendSSEDone, closeSSE } =\n (await import('@almadar/server')) as {\n setupSSE: (res: import('http').ServerResponse) => void;\n sendSSEEvent: (res: import('http').ServerResponse, ev: SSEEvent) => void;\n sendSSEDone: (res: import('http').ServerResponse) => void;\n closeSSE: (res: import('http').ServerResponse) => void;\n };\n setupSSE(res);\n try {\n const orbitalName = req.params.orbital as string;\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, { ...req.body, user }, (item) => {\n sendSSEEvent(res, { type: item.type, data: item.data, timestamp: Date.now() });\n });\n\n sendSSEEvent(res, { type: 'complete', data: result, timestamp: Date.now() });\n sendSSEDone(res);\n closeSSE(res);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n sendSSEEvent(res, { type: 'error', data: { message }, timestamp: Date.now() });\n sendSSEDone(res);\n closeSSE(res);\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.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ServerBridge.ts"],"names":[],"mappings":";;;AAoCA,IAAM,GAAA,GAAM,aAAa,+BAA+B,CAAA;AAyCjD,IAAM,eAAN,MAAmB;AAAA,EAChB,MAAA;AAAA,EACA,KAAA,GAA2B;AAAA,IACjC,SAAA,EAAW,KAAA;AAAA,IACX,eAAA,EAAiB,CAAA;AAAA,IACjB,cAAA,EAAgB;AAAA,GAClB;AAAA,EACQ,eAAkC,EAAC;AAAA,EACnC,SAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EAER,YAAY,MAAA,EAA4B;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,YAAA,EAAc,GAAA;AAAA,MACd,GAAG;AAAA,KACL;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,KAAA,IAAS,KAAA,CAAM,KAAK,UAAU,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAA,GAAgB;AACd,IAAA,IAAI,IAAA,CAAK,MAAM,SAAA,EAAW;AACxB,MAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,mBAAmB,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,sBAAsB,CAAA;AAGvC,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAG1B,IAAA,IAAI,IAAA,CAAK,OAAO,YAAA,EAAc;AAC5B,MAAA,IAAA,CAAK,cAAA,EAAe;AAAA,IACtB,WAAW,IAAA,CAAK,MAAA,CAAO,gBAAgB,IAAA,CAAK,MAAA,CAAO,eAAe,CAAA,EAAG;AACnE,MAAA,IAAA,CAAK,YAAA,EAAa;AAAA,IACpB;AAEA,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,IAAA;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,kBAAkB,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AAEjB,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,YAAA,EAAc;AACrC,MAAA,KAAA,EAAM;AAAA,IACR;AACA,IAAA,IAAA,CAAK,eAAe,EAAC;AAGrB,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,aAAA,CAAc,KAAK,SAAS,CAAA;AAC5B,MAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AAAA,IACnB;AAGA,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AACd,MAAA,IAAA,CAAK,EAAA,GAAK,MAAA;AAAA,IACZ;AAEA,IAAA,IAAA,CAAK,MAAM,SAAA,GAAY,KAAA;AACvB,IAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,qBAAqB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA8B;AAC5B,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,KAAA,EAAM;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAMQ,oBAAA,GAA6B;AACnC,IAAA,MAAM,EAAE,QAAA,EAAU,aAAA,EAAe,cAAA,KAAmB,IAAA,CAAK,MAAA;AAEzD,IAAA,IAAI,aAAA,IAAiB,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AAE7C,MAAA,KAAA,MAAW,aAAa,aAAA,EAAe;AACrC,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,CAAG,SAAA,EAAW,CAAC,KAAA,KAAwB;AAC5D,UAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAAA,QAC5B,CAAC,CAAA;AACD,QAAA,IAAA,CAAK,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,MAC9B;AAAA,IACF,WAAW,cAAA,EAAgB;AAEzB,MAAA,IAAI,mBAAmB,GAAA,EAAK;AAE1B,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,CAAG,GAAA,EAAK,CAAC,KAAA,KAAwB;AAEtD,UAAA,IACE,CAAC,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,IAC5B,CAAC,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,EAChC;AACA,YAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAAA,UAC5B;AAAA,QACF,CAAC,CAAA;AACD,QAAA,IAAA,CAAK,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,MAC9B,CAAA,MAAO;AAEL,QAAA,MAAM,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAC7C,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAA,CAAG,GAAA,EAAK,CAAC,KAAA,KAAwB;AACtD,UAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AACjC,YAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAAA,UAC5B;AAAA,QACF,CAAC,CAAA;AACD,QAAA,IAAA,CAAK,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,KAAA,EAAoC;AAChE,IAAA,MAAM,EAAE,SAAA,EAAW,aAAA,EAAc,GAAI,IAAA,CAAK,MAAA;AAE1C,IAAA,IAAI;AAEF,MAAA,IAAI,aAAA,IAAiB,kBAAkB,WAAA,EAAa;AAElD,QAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,aAAA,EAAe,KAAK,CAAA;AAAA,MACpD,CAAA,MAAO;AAEL,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,aAAA,EAAc;AAC1C,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,UAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AAAA,QACnD;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,eAAA,EAAA;AACX,MAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,iBAAA,EAAoB,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,KAAA,CAAM,SAAA,GAAY,MAAA,CAAO,KAAK,CAAA;AACnC,MAAA,IAAA,CAAK,IAAI,OAAA,EAAS,CAAA,yBAAA,EAA4B,KAAA,CAAM,IAAI,IAAI,KAAK,CAAA;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAc,kBAAA,CACZ,WAAA,EACA,KAAA,EACe;AACf,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,MAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,OAAA,CAAA;AAEvC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,OAAO,KAAA,CAAM,IAAA;AAAA,QACb,SAAS,KAAA,CAAM;AAAA,OAChB;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AAKpC,IAAA,IAAI,MAAA,CAAO,aAAA,IAAiB,MAAA,CAAO,aAAA,CAAc,SAAS,CAAA,EAAG;AAC3D,MAAA,KAAA,MAAW,OAAA,IAAW,OAAO,aAAA,EAAe;AAC1C,QAAA,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,CAAK,CAAA,OAAA,EAAU,QAAQ,KAAK,CAAA,CAAA,EAAI,QAAQ,OAAO,CAAA;AACpE,QAAA,IAAA,CAAK,KAAA,CAAM,cAAA,EAAA;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,aAAA,GAAkD;AAC9D,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,SAAS,CAAA;AACzD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,IAChE;AACA,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,OAAO,IAAA,CAAK,YAAY,EAAC;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAA,GAAqB;AAG3B,IAAA,IAAA,CAAK,GAAA,CAAI,SAAS,qDAAqD,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA,EAMQ,cAAA,GAAuB;AAC7B,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,MAAA;AAG3B,IAAA,MAAM,KAAA,GAAQ,SAAA,CACX,OAAA,CAAQ,QAAA,EAAU,KAAK,CAAA,CACvB,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA,CACzB,OAAA,CAAQ,kBAAA,EAAoB,cAAc,CAAA;AAE7C,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,EAAA,GAAK,IAAI,SAAA,CAAU,KAAK,CAAA;AAE7B,MAAA,IAAA,CAAK,EAAA,CAAG,SAAS,MAAM;AACrB,QAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,qBAAqB,CAAA;AAAA,MACxC,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,SAAA,GAAY,CAAC,GAAA,KAAQ;AAC3B,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAChC,UAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AAEzB,YAAA,IAAA,CAAK,MAAA,CAAO,SAAS,IAAA,CAAK,CAAA,OAAA,EAAU,KAAK,KAAK,CAAA,CAAA,EAAI,KAAK,OAAO,CAAA;AAC9D,YAAA,IAAA,CAAK,KAAA,CAAM,cAAA,EAAA;AACX,YAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,CAAA,uBAAA,EAA0B,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAAA,UAC1D;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,mCAAA,EAAqC,KAAK,CAAA;AAAA,QAC9D;AAAA,MACF,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,OAAA,GAAU,CAAC,KAAA,KAAU;AAC3B,QAAA,IAAA,CAAK,MAAM,SAAA,GAAY,iBAAA;AACvB,QAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,iBAAA,EAAmB,KAAK,CAAA;AAAA,MAC5C,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,QAAA,IAAA,CAAK,GAAA,CAAI,QAAQ,kBAAkB,CAAA;AAAA,MAErC,CAAA;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,4BAAA,EAA8B,KAAK,CAAA;AAAA,IACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAA,CACJ,WAAA,EACA,KAAA,EACA,OAAA,EAMC;AACD,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,MAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,OAAA,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK;AAAA,QACvC,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,SAAS;AAAA,OACxC,CAAA;AAED,MAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,IAM9B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,WAAA,EAInB;AACD,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,IAAA,CAAK,MAAA;AAC3B,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AACvC,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAMlC,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS;AAChC,QAAA,MAAM,SAAiC,EAAC;AACxC,QAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AACvC,UAAA,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA,CAAM,YAAA;AAAA,QAC7B;AACA,QAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AAAA,MACjC;AAEA,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,KAAK,KAAA,EAAM;AAAA,IAC7C,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA,EAAE;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMQ,GAAA,CACN,KAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,CAAO,KAAA,IAAS,UAAU,OAAA,EAAS;AAE7C,IAAA,MAAM,IAAA,GAAO,SAAS,MAAA,GAClB,KACA,IAAA,YAAgB,KAAA,GACd,EAAE,KAAA,EAAO,IAAA,KACT,EAAE,MAAA,EAAQ,OAAO,IAAA,KAAS,QAAA,GAAW,OAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAE;AACvE,IAAA,GAAA,CAAI,KAAK,CAAA,CAAE,OAAA,EAAS,IAAI,CAAA;AAAA,EAC1B;AACF;AAKO,SAAS,mBAAmB,MAAA,EAA0C;AAC3E,EAAA,OAAO,IAAI,aAAa,MAAM,CAAA;AAChC","file":"ServerBridge.js","sourcesContent":["/**\n * ServerBridge - Client-Server Trait Communication\n *\n * Bridges the client EventBus with the server OrbitalRuntime:\n * 1. Forwards specified events from client to server\n * 2. Receives events from server (via polling or WebSocket)\n * 3. Puts server events onto client EventBus\n *\n * This enables cross-orbital communication between client and server traits.\n *\n * @example\n * ```typescript\n * import { ServerBridge } from '@kflow-builder/shared/runtime';\n * import { useEventBus } from './hooks/useEventBus';\n *\n * // In your app initialization\n * const eventBus = useEventBus();\n * const bridge = new ServerBridge({\n * eventBus,\n * serverUrl: '/api/orbitals',\n * // Events to forward from client to server\n * forwardEvents: ['ORDER_PLACED', 'PAYMENT_COMPLETED'],\n * });\n *\n * bridge.connect();\n *\n * // Now when client emits ORDER_PLACED, server traits receive it\n * eventBus.emit('ORDER_PLACED', { orderId: '123' });\n * ```\n *\n * @packageDocumentation\n */\n\nimport { createLogger } from '@almadar/logger';\nimport type { IEventBus, RuntimeEvent, EventPayload } from \"./types.js\";\n\nconst log = createLogger('almadar:runtime:server-bridge');\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ServerBridgeConfig {\n /** Client EventBus to bridge */\n eventBus: IEventBus;\n /** Base URL for orbital server API */\n serverUrl: string;\n /** Events to forward from client to server */\n forwardEvents?: string[];\n /** Forward all events matching pattern (e.g., 'Order*', '*') */\n forwardPattern?: string;\n /** Target orbital for forwarded events (or 'broadcast' for all) */\n targetOrbital?: string;\n /** Enable WebSocket for real-time server events */\n useWebSocket?: boolean;\n /** Polling interval in ms (if not using WebSocket) */\n pollInterval?: number;\n /** Enable debug logging */\n debug?: boolean;\n /** Custom fetch function (for testing or custom auth) */\n fetch?: typeof fetch;\n}\n\nexport interface ServerBridgeState {\n connected: boolean;\n lastError?: string;\n eventsForwarded: number;\n eventsReceived: number;\n}\n\n// ============================================================================\n// ServerBridge\n// ============================================================================\n\n/**\n * Bridges client EventBus with server OrbitalRuntime\n */\nexport class ServerBridge {\n private config: ServerBridgeConfig;\n private state: ServerBridgeState = {\n connected: false,\n eventsForwarded: 0,\n eventsReceived: 0,\n };\n private unsubscribes: Array<() => void> = [];\n private pollTimer?: ReturnType<typeof setInterval>;\n private ws?: WebSocket;\n private fetchFn: typeof fetch;\n\n constructor(config: ServerBridgeConfig) {\n this.config = {\n pollInterval: 5000,\n ...config,\n };\n this.fetchFn = config.fetch || fetch.bind(globalThis);\n }\n\n // ==========================================================================\n // Connection Management\n // ==========================================================================\n\n /**\n * Connect the bridge - start forwarding events\n */\n connect(): void {\n if (this.state.connected) {\n this.log(\"warn\", \"Already connected\");\n return;\n }\n\n this.log(\"info\", \"Connecting bridge...\");\n\n // Subscribe to events to forward\n this.setupEventForwarding();\n\n // Set up server -> client channel\n if (this.config.useWebSocket) {\n this.setupWebSocket();\n } else if (this.config.pollInterval && this.config.pollInterval > 0) {\n this.setupPolling();\n }\n\n this.state.connected = true;\n this.log(\"info\", \"Bridge connected\");\n }\n\n /**\n * Disconnect the bridge\n */\n disconnect(): void {\n // Clean up event subscriptions\n for (const unsub of this.unsubscribes) {\n unsub();\n }\n this.unsubscribes = [];\n\n // Clean up polling\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = undefined;\n }\n\n // Clean up WebSocket\n if (this.ws) {\n this.ws.close();\n this.ws = undefined;\n }\n\n this.state.connected = false;\n this.log(\"info\", \"Bridge disconnected\");\n }\n\n /**\n * Get current bridge state\n */\n getState(): ServerBridgeState {\n return { ...this.state };\n }\n\n // ==========================================================================\n // Event Forwarding (Client -> Server)\n // ==========================================================================\n\n private setupEventForwarding(): void {\n const { eventBus, forwardEvents, forwardPattern } = this.config;\n\n if (forwardEvents && forwardEvents.length > 0) {\n // Forward specific events\n for (const eventType of forwardEvents) {\n const unsub = eventBus.on(eventType, (event: RuntimeEvent) => {\n this.forwardToServer(event);\n });\n this.unsubscribes.push(unsub);\n }\n } else if (forwardPattern) {\n // Forward events matching pattern\n if (forwardPattern === \"*\") {\n // Forward all events\n const unsub = eventBus.on(\"*\", (event: RuntimeEvent) => {\n // Don't forward internal events\n if (\n !event.type.startsWith(\"UI:\") &&\n !event.type.startsWith(\"BRIDGE:\")\n ) {\n this.forwardToServer(event);\n }\n });\n this.unsubscribes.push(unsub);\n } else {\n // Pattern matching (simple prefix match)\n const prefix = forwardPattern.replace(\"*\", \"\");\n const unsub = eventBus.on(\"*\", (event: RuntimeEvent) => {\n if (event.type.startsWith(prefix)) {\n this.forwardToServer(event);\n }\n });\n this.unsubscribes.push(unsub);\n }\n }\n }\n\n private async forwardToServer(event: RuntimeEvent): Promise<void> {\n const { serverUrl, targetOrbital } = this.config;\n\n try {\n // Determine which orbital(s) to send to\n if (targetOrbital && targetOrbital !== \"broadcast\") {\n // Send to specific orbital\n await this.sendEventToOrbital(targetOrbital, event);\n } else {\n // Broadcast to all orbitals\n const orbitals = await this.fetchOrbitals();\n for (const orbital of orbitals) {\n await this.sendEventToOrbital(orbital.name, event);\n }\n }\n\n this.state.eventsForwarded++;\n this.log(\"debug\", `Forwarded event: ${event.type}`);\n } catch (error) {\n this.state.lastError = String(error);\n this.log(\"error\", `Failed to forward event: ${event.type}`, error);\n }\n }\n\n private async sendEventToOrbital(\n orbitalName: string,\n event: RuntimeEvent,\n ): Promise<void> {\n const { serverUrl } = this.config;\n const url = `${serverUrl}/${orbitalName}/events`;\n\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n event: event.type,\n payload: event.payload,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Server returned ${response.status}`);\n }\n\n const result = (await response.json()) as {\n emittedEvents?: Array<{ event: string; payload?: EventPayload }>;\n };\n\n // If server emitted events, put them on client EventBus\n if (result.emittedEvents && result.emittedEvents.length > 0) {\n for (const emitted of result.emittedEvents) {\n this.config.eventBus.emit(`SERVER:${emitted.event}`, emitted.payload);\n this.state.eventsReceived++;\n }\n }\n }\n\n private async fetchOrbitals(): Promise<Array<{ name: string }>> {\n const response = await this.fetchFn(this.config.serverUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch orbitals: ${response.status}`);\n }\n const data = (await response.json()) as { orbitals?: Array<{ name: string }> };\n return data.orbitals || [];\n }\n\n // ==========================================================================\n // Server -> Client (Polling)\n // ==========================================================================\n\n private setupPolling(): void {\n // For now, polling is handled by the response to forwarded events\n // A more sophisticated implementation would poll a /events endpoint\n this.log(\"debug\", \"Polling mode - events received via forward response\");\n }\n\n // ==========================================================================\n // Server -> Client (WebSocket)\n // ==========================================================================\n\n private setupWebSocket(): void {\n const { serverUrl } = this.config;\n\n // Convert HTTP URL to WebSocket URL\n const wsUrl = serverUrl\n .replace(/^http:/, \"ws:\")\n .replace(/^https:/, \"wss:\")\n .replace(/\\/api\\/orbitals$/, \"/ws/orbitals\");\n\n try {\n this.ws = new WebSocket(wsUrl);\n\n this.ws.onopen = () => {\n this.log(\"info\", \"WebSocket connected\");\n };\n\n this.ws.onmessage = (msg) => {\n try {\n const data = JSON.parse(msg.data);\n if (data.type === \"event\") {\n // Server pushed an event - put it on client EventBus\n this.config.eventBus.emit(`SERVER:${data.event}`, data.payload);\n this.state.eventsReceived++;\n this.log(\"debug\", `Received server event: ${data.event}`);\n }\n } catch (error) {\n this.log(\"error\", \"Failed to parse WebSocket message\", error);\n }\n };\n\n this.ws.onerror = (error) => {\n this.state.lastError = \"WebSocket error\";\n this.log(\"error\", \"WebSocket error\", error);\n };\n\n this.ws.onclose = () => {\n this.log(\"info\", \"WebSocket closed\");\n // Could implement reconnection logic here\n };\n } catch (error) {\n this.log(\"error\", \"Failed to create WebSocket\", error);\n }\n }\n\n // ==========================================================================\n // Direct Methods\n // ==========================================================================\n\n /**\n * Send an event directly to a specific orbital (bypassing EventBus)\n */\n async sendEvent(\n orbitalName: string,\n event: string,\n payload?: EventPayload,\n ): Promise<{\n success: boolean;\n states?: Record<string, string>;\n emittedEvents?: Array<{ event: string; payload?: unknown }>;\n error?: string;\n }> {\n const { serverUrl } = this.config;\n const url = `${serverUrl}/${orbitalName}/events`;\n\n try {\n const response = await this.fetchFn(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ event, payload }),\n });\n\n return (await response.json()) as {\n success: boolean;\n states?: Record<string, string>;\n emittedEvents?: Array<{ event: string; payload?: unknown }>;\n error?: string;\n };\n } catch (error) {\n return { success: false, error: String(error) };\n }\n }\n\n /**\n * Get current state of an orbital's traits\n */\n async getOrbitalState(orbitalName: string): Promise<{\n success: boolean;\n states?: Record<string, string>;\n error?: string;\n }> {\n const { serverUrl } = this.config;\n const url = `${serverUrl}/${orbitalName}`;\n\n try {\n const response = await this.fetchFn(url);\n const data = (await response.json()) as {\n success: boolean;\n orbital?: { traits: Array<{ name: string; currentState: string }> };\n error?: string;\n };\n\n if (data.success && data.orbital) {\n const states: Record<string, string> = {};\n for (const trait of data.orbital.traits) {\n states[trait.name] = trait.currentState;\n }\n return { success: true, states };\n }\n\n return { success: false, error: data.error };\n } catch (error) {\n return { success: false, error: String(error) };\n }\n }\n\n // ==========================================================================\n // Utilities\n // ==========================================================================\n\n private log(\n level: \"debug\" | \"info\" | \"warn\" | \"error\",\n message: string,\n data?: unknown,\n ): void {\n if (!this.config.debug && level === \"debug\") return;\n\n const meta = data === undefined\n ? {}\n : data instanceof Error\n ? { error: data }\n : { detail: typeof data === 'string' ? data : JSON.stringify(data) };\n log[level](message, meta);\n }\n}\n\n/**\n * Create a ServerBridge instance\n */\nexport function createServerBridge(config: ServerBridgeConfig): ServerBridge {\n return new ServerBridge(config);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-PZ5AY32C.js"}
|