@almadar/runtime 6.9.1 → 6.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{OrbitalServerRuntime-CzUrdroI.d.ts → OrbitalServerRuntime-CvWqVb68.d.ts} +2 -2
- package/dist/OrbitalServerRuntime.d.ts +2 -2
- package/dist/OrbitalServerRuntime.js +1 -1
- package/dist/ServerBridge.d.ts +1 -1
- package/dist/{chunk-6W74ZCFQ.js → chunk-VUXJJPIQ.js} +5 -7
- package/dist/chunk-VUXJJPIQ.js.map +1 -0
- package/dist/createOsHandlers.d.ts +1 -1
- package/dist/createOsHandlers.js +6 -2
- package/dist/createOsHandlers.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/{types-CjvQG_33.d.ts → types-cuy5gd29.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-6W74ZCFQ.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/EventBus.ts","../src/BindingResolver.ts","../src/StateMachineCore.ts","../src/types.ts","../src/EffectExecutor.ts","../src/PayloadValidator.ts","../src/MockPersistenceAdapter.ts","../src/resolver/reference-resolver.ts","../src/loader/schema-loader.ts","../src/loader/http-loader.ts","../src/loader/unified-loader.ts","../src/loader/almadar-studio-config.ts","../src/UsesIntegration.ts","../src/PersistenceAdapter.ts","../src/OrbitalServerRuntime.ts"],"names":["createLogger","effectLog","renderLog","isEntityCall","evaluateGuard","evaluate","fieldName","wantedTrait"],"mappings":"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","file":"chunk-6W74ZCFQ.js","sourcesContent":["/**\n * EventBus - Platform-Agnostic Pub/Sub Implementation\n *\n * Pure TypeScript event bus for cross-trait communication.\n * Works on both client (browser) and server (Node.js).\n *\n * @packageDocumentation\n */\n\nimport { createLogger } from '@almadar/logger';\nimport type { IEventBus, RuntimeEvent, EventListener, Unsubscribe, EventPayload } from './types.js';\n\nconst log = createLogger('almadar:runtime:eventbus');\n\n/**\n * EventBus - Simple pub/sub event bus\n *\n * @example\n * ```typescript\n * const bus = new EventBus({ debug: true });\n *\n * // Subscribe\n * const unsub = bus.on('ORDER_CONFIRMED', (event) => {\n * log.debug('order-confirmed', { orderId: event.payload?.orderId });\n * });\n *\n * // Emit\n * bus.emit('ORDER_CONFIRMED', { orderId: '123' });\n *\n * // Unsubscribe\n * unsub();\n * ```\n */\nexport class EventBus implements IEventBus {\n private listeners: Map<string, Set<EventListener>> = new Map();\n /** Maximum recursion depth before circuit breaker activates (RCG-05) */\n private maxDepth: number;\n /** Current emission depth for circular loop detection */\n private depth: number = 0;\n\n constructor(options: { debug?: boolean; maxDepth?: number } = {}) {\n // `debug` is accepted for backwards-compatibility but is now a no-op;\n // diagnostic output is gated by @almadar/logger (env ALMADAR_DEBUG or\n // globalThis.__ALMADAR_DEBUG__='almadar:runtime:eventbus').\n void options.debug;\n this.maxDepth = options.maxDepth ?? 10;\n }\n\n /**\n * Emit an event to all registered listeners.\n *\n * Includes circuit breaker (RCG-05): if emit is called recursively\n * beyond `maxDepth`, the event is dropped and an error is logged.\n * This prevents infinite loops from circular emit/listen chains.\n */\n emit(\n type: string,\n payload?: EventPayload,\n source?: RuntimeEvent['source']\n ): void {\n // RCG-05: Circuit breaker for circular event loops\n if (this.depth >= this.maxDepth) {\n log.error('circular event loop dropped', { type, depth: this.depth, maxDepth: this.maxDepth });\n return;\n }\n\n const event: RuntimeEvent = {\n type,\n payload,\n timestamp: Date.now(),\n source,\n };\n\n const listeners = this.listeners.get(type);\n const listenerCount = listeners?.size ?? 0;\n\n if (listenerCount > 0) {\n log.debug('emit', { type, listenerCount, depth: this.depth });\n } else {\n log.warn('emit no listeners', { type });\n }\n\n this.depth++;\n try {\n if (listeners) {\n // Copy to avoid mutation during iteration\n const listenersCopy = Array.from(listeners);\n for (const listener of listenersCopy) {\n try {\n listener(event);\n } catch (error) {\n log.error('listener threw', { type, error: error instanceof Error ? error : String(error) });\n }\n }\n }\n\n // Wildcard listeners receive all events\n if (type !== '*') {\n const wildcardListeners = this.listeners.get('*');\n if (wildcardListeners) {\n for (const listener of Array.from(wildcardListeners)) {\n try {\n listener(event);\n } catch (error) {\n log.error('wildcard listener threw', { error: error instanceof Error ? error : String(error) });\n }\n }\n }\n }\n } finally {\n this.depth--;\n }\n }\n\n /**\n * Subscribe to an event type\n */\n on(type: string, listener: EventListener): Unsubscribe {\n if (!this.listeners.has(type)) {\n this.listeners.set(type, new Set());\n }\n\n const listeners = this.listeners.get(type)!;\n listeners.add(listener);\n\n log.debug('subscribe', { type, total: listeners.size });\n\n return () => {\n listeners.delete(listener);\n log.debug('unsubscribe', { type, remaining: listeners.size });\n if (listeners.size === 0) {\n this.listeners.delete(type);\n }\n };\n }\n\n /**\n * Subscribe to ALL events (wildcard listener)\n * Useful for event tracking, logging, debugging\n */\n onAny(listener: EventListener): Unsubscribe {\n return this.on('*', listener);\n }\n\n /**\n * Check if there are listeners for an event type\n */\n hasListeners(type: string): boolean {\n const listeners = this.listeners.get(type);\n return listeners !== undefined && listeners.size > 0;\n }\n\n /**\n * Get all registered event types\n */\n getRegisteredEvents(): string[] {\n return Array.from(this.listeners.keys());\n }\n\n /**\n * Clear all listeners\n */\n clear(): void {\n log.debug('clear', { eventTypeCount: this.listeners.size });\n this.listeners.clear();\n }\n\n /**\n * Get listener count for an event type (for testing)\n */\n getListenerCount(type: string): number {\n return this.listeners.get(type)?.size ?? 0;\n }\n}\n\n/**\n * Create a new EventBus instance\n */\nexport function createEventBus(options?: { debug?: boolean }): IEventBus {\n return new EventBus(options);\n}\n","/**\n * BindingResolver - Platform-Agnostic Binding Resolution\n *\n * Resolves binding references like @entity.field, @payload.value, @state\n * in props and values. Works on both client and server.\n *\n * Uses the shared S-expression evaluator for actual resolution.\n *\n * @packageDocumentation\n */\n\nimport {\n evaluate,\n resolveBinding,\n createMinimalContext,\n type EvaluationContext,\n} from '@almadar/evaluator';\nimport { isKnownOperator } from '@almadar/std';\nimport type { BindingContext, EntityRow, PatternProps, EvaluationContextExtensions } from './types.js';\nimport { createLogger } from '@almadar/logger';\n\nconst bindLog = createLogger('almadar:runtime:bindings');\n// See OrbitalServerRuntime — same `almadar:runtime:render-ui` namespace,\n// instantiated here so interpolation of pattern objects can report\n// whether the resolved row reference matches what arrived in ctx.\nconst renderLog = createLogger('almadar:runtime:render-ui');\n\n// Re-export for convenience\nexport { createMinimalContext, type EvaluationContext };\n\n/**\n * Binding roots whose values only exist in client UI state and therefore\n * cannot be resolved server-side. These bindings round-trip through the\n * server unchanged; the client (`@almadar/ui`) substitutes them at render\n * time.\n *\n * `trait` — `@trait.<TraitName>[.<slot>]` — resolves via `<TraitFrame>` to\n * the referenced trait's current `render-ui` output. See\n * `docs/Almadar_Std_Gaps.md` §3.8.\n */\nexport const CLIENT_ONLY_BINDING_ROOTS: ReadonlySet<string> = new Set(['trait']);\n\n/** Return true when the binding's root segment is reserved for client-only resolution. */\nfunction isClientOnlyBinding(value: string): boolean {\n if (!value.startsWith('@')) return false;\n const afterAt = value.slice(1);\n const firstDot = afterAt.indexOf('.');\n const root = firstDot === -1 ? afterAt : afterAt.slice(0, firstDot);\n return CLIENT_ONLY_BINDING_ROOTS.has(root);\n}\n\n// ============================================================================\n// Main Functions\n// ============================================================================\n\n/**\n * Interpolate binding references in props.\n *\n * @param props - Props object with potential binding references\n * @param ctx - Evaluation context with bindings\n * @returns New props object with resolved values\n *\n * @example\n * ```ts\n * const ctx = createContextFromBindings({ name: 'Project Alpha', count: 42 });\n * const props = {\n * title: '@entity.name',\n * total: ['+', '@entity.count', 10],\n * };\n * const result = interpolateProps(props, ctx);\n * // { title: 'Project Alpha', total: 52 }\n * ```\n */\nexport function interpolateProps(\n props: PatternProps,\n ctx: EvaluationContext\n): PatternProps {\n // Identity-preserving walk: if no key produced a different value\n // from the input, return the ORIGINAL `props` reference instead of\n // a fresh clone. Pre-fix every render-ui evaluation deep-cloned\n // pattern objects (and the resolved entity rows nested inside),\n // which gave Form's `entity` prop a fresh JS reference per pass\n // and silently fired the `[normalizedInitialData]` reset useEffect\n // mid-edit, wiping typed values. The compiled path uses a stable\n // `lastPayload.row` from `useReducer` and never hit this; the\n // runtime path now matches that semantic — pure data passes through\n // by reference, only branches that actually resolve a binding (or\n // an sexpr) yield a new value.\n const result: PatternProps = {};\n let anyChanged = false;\n for (const [key, value] of Object.entries(props)) {\n const interpolated = interpolateValue(value, ctx) as PatternProps[string];\n result[key] = interpolated;\n if (interpolated !== value) anyChanged = true;\n }\n // When a pattern carries an `entity: @payload.row` binding, log\n // whether the resolved row matches the same JS reference still\n // present on ctx.payload.row. Originally added to confirm the\n // clone hypothesis; kept as permanent observability so future\n // regressions of this contract surface immediately.\n const entityBindingRaw = props['entity'];\n const typeBindingRaw = props['type'];\n const patternType = typeof typeBindingRaw === 'string' ? typeBindingRaw : undefined;\n if (typeof entityBindingRaw === 'string') {\n renderLog.debug('interpolateProps:entity', () => {\n const resolvedEntity = result['entity'];\n const resolvedRow: EntityRow | null =\n resolvedEntity !== null && typeof resolvedEntity === 'object' && !Array.isArray(resolvedEntity)\n ? (resolvedEntity as EntityRow)\n : null;\n const ctxRow = ctx.payload['row'];\n const ctxPayloadKeys = Object.keys(ctx.payload).join(',');\n const payloadDataRaw = ctx.payload['data'];\n const payloadDataLen = Array.isArray(payloadDataRaw) ? payloadDataRaw.length : null;\n const ctxEntityRaw = ctx.entity as EntityRow | EntityRow[] | null;\n const ctxEntityLen = Array.isArray(ctxEntityRaw) ? ctxEntityRaw.length : null;\n const resolvedLen = Array.isArray(resolvedEntity) ? resolvedEntity.length : null;\n return {\n patternType,\n entityBinding: entityBindingRaw,\n resolvedIsObject: resolvedRow !== null,\n resolvedIsArray: Array.isArray(resolvedEntity),\n resolvedLen,\n resolvedEqualsCtxRow: ctxRow !== undefined && resolvedRow !== null && resolvedRow === ctxRow,\n resolvedRowId: resolvedRow?.id,\n ctxPayloadKeys,\n ctxPayloadDataLen: payloadDataLen,\n ctxEntityIsArray: Array.isArray(ctxEntityRaw),\n ctxEntityLen,\n };\n });\n }\n if (patternType === 'form-section' || patternType === 'form') {\n bindLog.debug('form-binding', () => {\n const modeRaw = result['mode'];\n const submitRaw = result['submitEvent'];\n const cancelRaw = result['cancelEvent'];\n return {\n patternType,\n mode: typeof modeRaw === 'string' ? modeRaw : undefined,\n submitEvent: typeof submitRaw === 'string' ? submitRaw : undefined,\n cancelEvent: typeof cancelRaw === 'string' ? cancelRaw : undefined,\n entity: JSON.stringify(result['entity'] ?? null),\n fields: JSON.stringify(result['fields'] ?? null),\n };\n });\n }\n return anyChanged ? result : props;\n}\n\n/**\n * Interpolate a single value.\n */\nexport function interpolateValue(value: unknown, ctx: EvaluationContext): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string') {\n return interpolateString(value, ctx);\n }\n\n if (Array.isArray(value)) {\n return interpolateArray(value, ctx);\n }\n\n if (typeof value === 'object') {\n return interpolateProps(value as PatternProps, ctx);\n }\n\n return value;\n}\n\n// ============================================================================\n// String Interpolation\n// ============================================================================\n\n/**\n * Interpolate a string value.\n */\nfunction interpolateString(value: string, ctx: EvaluationContext): unknown {\n // Pure binding - resolve directly\n if (value.startsWith('@') && isPureBinding(value)) {\n // Client-only bindings (currently `@trait.*`) round-trip through\n // the server unchanged — the client's render layer substitutes the\n // referenced trait's current frame via `<TraitFrame>`.\n if (isClientOnlyBinding(value)) {\n bindLog.debug('passthrough:client-only', { binding: value });\n return value;\n }\n const resolved = resolveBinding(value, ctx);\n bindLog.debug('resolve', { binding: value, resolvedType: typeof resolved });\n return resolved;\n }\n\n // Embedded bindings\n if (value.includes('@')) {\n return interpolateEmbeddedBindings(value, ctx);\n }\n\n return value;\n}\n\n/**\n * Check if a string is a pure binding (no embedded text).\n *\n * Accepts bracket-index segments anywhere in the path —\n * `@config.sections[0].bullets`, `@payload.rows[2]`, etc. — so the\n * binding is fully consumed by `resolveBinding` instead of falling\n * through to `interpolateEmbeddedBindings` which would stop at the\n * first `[`, partially resolve, and string-concat the suffix.\n */\nfunction isPureBinding(value: string): boolean {\n return /^@[\\w]+(?:\\[\\d+\\])*(?:\\.[\\w]+(?:\\[\\d+\\])*)*$/.test(value);\n}\n\n/**\n * Interpolate embedded bindings in a string.\n */\nfunction interpolateEmbeddedBindings(value: string, ctx: EvaluationContext): string {\n // Match bindings with optional bracket-index segments\n // (`@config.sections[0].bullets`, `@payload.rows[2]`) so the regex\n // captures the WHOLE binding before delegating to resolveBinding —\n // pre-fix the regex stopped at the first `[`, which left the\n // suffix dangling and string-concatenated junk onto the resolved\n // prefix (the SplitSection `bullets` crash).\n return value.replace(/@[\\w]+(?:\\[\\d+\\])*(?:\\.[\\w]+(?:\\[\\d+\\])*)*/g, (match) => {\n // Client-only bindings round-trip verbatim; see CLIENT_ONLY_BINDING_ROOTS.\n if (isClientOnlyBinding(match)) {\n return match;\n }\n const resolved = resolveBinding(match, ctx);\n return resolved !== undefined ? String(resolved) : match;\n });\n}\n\n// ============================================================================\n// Array Interpolation\n// ============================================================================\n\n/**\n * Interpolate an array value.\n */\nfunction interpolateArray(value: unknown[], ctx: EvaluationContext): unknown {\n if (value.length === 0) {\n // Preserve identity for empty arrays too — same rationale as\n // `interpolateProps` below.\n return value;\n }\n\n // Per-item render lambdas (`[\"fn\", argName, body]`) are\n // structurally SExpressions — `fn` is a registered control-category\n // operator — but they must NOT be evaluated here. The renderer\n // (`@almadar/ui`'s `renderPatternProps`) is the consumer that\n // converts them into React render props at render time, when each\n // row's `arg` is actually known. Evaluating now produces an\n // unserialisable function value that gets stripped to `undefined`\n // when crossing the server bridge, which is exactly the gap that\n // left std-search/std-filter `renderItem` undefined and the\n // Filter atom's chips empty. Preserve the raw array (with deep\n // recursion into the body so nested `@<arg>.*` placeholders and\n // any other inner SExpressions stay intact) instead.\n if (Array.isArray(value) && value.length === 3 && value[0] === 'fn'\n && typeof value[1] === 'string') {\n return value;\n }\n\n if (isSExpression(value)) {\n const result = evaluate(value as Parameters<typeof evaluate>[0], ctx);\n bindLog.debug('sexpr:eval', () => ({\n operator: typeof value[0] === 'string' ? value[0] : '<non-string>',\n argCount: value.length - 1,\n inputJson: JSON.stringify(value).slice(0, 300),\n resultType: typeof result,\n resultJson: typeof result === 'object' && result !== null\n ? JSON.stringify(result).slice(0, 2000)\n : String(result),\n }));\n return result;\n }\n\n // Identity-preserving map: only return a new array if any item\n // actually changed during interpolation. Otherwise the original\n // array reference passes through unchanged. Mirrors\n // `interpolateProps`' identity rule so e.g. an entity-row array\n // (`entity: @payload.data` resolved to `[row1, row2, ...]`)\n // doesn't get cloned every render-ui evaluation. The element type\n // is the input array's own element type — no `unknown` annotation\n // beyond the function's existing public surface.\n const mapped: typeof value = [];\n let anyChanged = false;\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const interpolated = interpolateValue(item, ctx);\n mapped.push(interpolated);\n if (interpolated !== item) anyChanged = true;\n }\n return anyChanged ? mapped : value;\n}\n\n/**\n * Check if an array is an S-expression.\n */\nfunction isSExpression(value: unknown[]): boolean {\n if (value.length === 0) return false;\n\n const first = value[0];\n if (typeof first !== 'string') return false;\n\n if (isKnownOperator(first)) return true;\n if (first.includes('/')) return true;\n if (first === 'lambda' || first === 'let') return true;\n\n return false;\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Check if a value contains any binding references.\n */\nexport function containsBindings(value: unknown): boolean {\n if (typeof value === 'string') {\n return value.includes('@');\n }\n\n if (Array.isArray(value)) {\n return value.some(containsBindings);\n }\n\n if (value !== null && typeof value === 'object') {\n return Object.values(value as PatternProps).some(containsBindings);\n }\n\n return false;\n}\n\n/**\n * Extract all binding references from a value.\n */\nexport function extractBindings(value: unknown): string[] {\n const bindings: string[] = [];\n\n function collect(v: unknown): void {\n if (typeof v === 'string') {\n const matches = v.match(/@[\\w]+(?:\\.[\\w]+)*/g);\n if (matches) {\n bindings.push(...matches);\n }\n } else if (Array.isArray(v)) {\n v.forEach(collect);\n } else if (v !== null && typeof v === 'object') {\n Object.values(v as PatternProps).forEach(collect);\n }\n }\n\n collect(value);\n return [...new Set(bindings)];\n}\n\n/**\n * Create an EvaluationContext from a BindingContext.\n *\n * @param bindings - Binding context with entity, payload, state data\n * @param strictBindings - When true, log warnings for undefined binding paths (RCG-01)\n * @param contextExtensions - Optional fields to spread onto the context (e.g., { agent: AgentContext })\n */\nexport function createContextFromBindings(\n bindings: BindingContext,\n strictBindings?: boolean,\n contextExtensions?: EvaluationContextExtensions,\n): EvaluationContext {\n const ctx = createMinimalContext(\n bindings.entity || {},\n bindings.payload || {},\n bindings.state || 'idle'\n );\n if (strictBindings) {\n ctx.strictBindings = true;\n }\n // Surface the call-site trait config on the context so `@config.X`\n // bindings resolve in render-ui patterns. See OrbitalServerRuntime's\n // executeEffects where `bindings.config` is populated from\n // RegisteredOrbital.configByTrait.\n if (bindings.config) {\n ctx.config = bindings.config;\n }\n // V2 Phase 6: the `@EntityName.field` cross-entity binding path via\n // `ctx.singletons` is gone. Cross-trait data flow routes through the\n // event bus (listen on an `[external]` Event<T> emit and read via\n // `@payload.<field>`). Named bindings are no longer copied into the\n // singleton lookup table.\n // Spread context extensions (e.g., agent: AgentContext) onto the evaluation context.\n // This is how ctx.agent gets populated for agent/* operator dispatch.\n if (contextExtensions) {\n Object.assign(ctx, contextExtensions);\n }\n return ctx;\n}\n","/**\n * StateMachineCore - Platform-Agnostic State Machine Logic\n *\n * Pure TypeScript implementation of trait state machine execution.\n * Extracts the core logic from useTraitStateMachine for use on\n * both client and server.\n *\n * @packageDocumentation\n */\n\nimport type {\n TraitState,\n TraitDefinition,\n TransitionResult,\n BindingContext,\n RuntimeConfig,\n TransitionObserver,\n EntityRow,\n EventPayload,\n ConfigContext,\n EvaluationContextExtensions,\n} from './types.js';\nimport { interpolateValue, createContextFromBindings } from './BindingResolver.js';\nimport { evaluateGuard } from '@almadar/evaluator';\nimport { createLogger } from '@almadar/logger';\n\nconst smLog = createLogger('almadar:runtime:sm');\n\n// ============================================================================\n// Core Functions\n// ============================================================================\n\n/**\n * Find the initial state for a trait definition.\n */\nexport function findInitialState(trait: TraitDefinition): string {\n // Guard against missing or empty states array\n if (!trait.states || trait.states.length === 0) {\n smLog.warn('trait-has-no-states', { trait: trait.name });\n return 'unknown';\n }\n const markedInitial = trait.states.find((s) => s.isInitial)?.name;\n const firstState = trait.states[0]?.name;\n return markedInitial || firstState || 'unknown';\n}\n\n/**\n * Create initial trait state for a trait definition.\n */\nexport function createInitialTraitState(trait: TraitDefinition): TraitState {\n return {\n traitName: trait.name,\n currentState: findInitialState(trait),\n previousState: null,\n lastEvent: null,\n context: {},\n };\n}\n\n/**\n * Find every transition matching the current state + event key (in\n * declaration order). Used by `processEvent` to disambiguate guarded\n * sibling transitions: when several transitions share the same\n * `from`/`event` and differ by guard (e.g. retry under attempts<3 vs\n * give-up under attempts>=3), the runtime must consider all of them and\n * pick the first whose guard passes.\n */\nexport function findMatchingTransitions(\n trait: TraitDefinition,\n currentState: string,\n eventKey: string\n): TraitDefinition['transitions'] {\n if (!trait.transitions || trait.transitions.length === 0) {\n return [];\n }\n return trait.transitions.filter((t) => {\n if (Array.isArray(t.from)) {\n return t.from.includes(currentState) && t.event === eventKey;\n }\n return t.from === currentState && t.event === eventKey;\n });\n}\n\n/**\n * Find a matching transition from the current state for the given event.\n *\n * **Guard-unaware**: returns the first transition matching `from` /\n * `event` regardless of any attached guard. Use `findMatchingTransitions`\n * when multiple sibling transitions share the same `from`/`event` and\n * disambiguate by guard.\n */\nexport function findTransition(\n trait: TraitDefinition,\n currentState: string,\n eventKey: string\n): TraitDefinition['transitions'][0] | undefined {\n return findMatchingTransitions(trait, currentState, eventKey)[0];\n}\n\n/**\n * Normalize event key - strip UI: prefix if present.\n */\nexport function normalizeEventKey(eventKey: string): string {\n if (!eventKey) return '';\n return eventKey.startsWith('UI:') ? eventKey.slice(3) : eventKey;\n}\n\n// ============================================================================\n// State Machine Processor\n// ============================================================================\n\n/**\n * Options for processing an event through the state machine.\n */\nexport interface ProcessEventOptions {\n /** Current trait state */\n traitState: TraitState;\n /** Trait definition */\n trait: TraitDefinition;\n /** Event key to process */\n eventKey: string;\n /** Event payload */\n payload?: EventPayload;\n /** Entity data for binding resolution */\n entityData?: EntityRow;\n /**\n * Trait config for `@config.X` resolution inside guard expressions.\n * Surfaced on the EvaluationContext so guards can write mode-aware\n * predicates — e.g. std-modal's OPEN can require `@payload.row` only\n * when `@config.mode === \"edit\"`. The validator (sigil_context.rs)\n * allows `@config` in guard context as of v3.12.0; this field is\n * the runtime side of the same contract. Threaded by the caller\n * (typically `OrbitalServerRuntime.processEvent` reading from the\n * trait's `RegisteredOrbital.configByTrait`).\n */\n config?: ConfigContext;\n /**\n * Guard evaluation error handling mode. (RCG-02)\n * - \"permissive\": Guard errors allow the transition (default, backwards-compatible)\n * - \"strict\": Guard errors block the transition\n */\n guardMode?: \"strict\" | \"permissive\";\n /**\n * When true, log warnings when bindings resolve to undefined. (RCG-01)\n */\n strictBindings?: boolean;\n /**\n * Additional fields to spread onto EvaluationContext for guard evaluation.\n * Used to inject module contexts (e.g., { agent: AgentContext }).\n */\n contextExtensions?: EvaluationContextExtensions;\n}\n\n/**\n * Process an event through a trait's state machine.\n *\n * This is a pure function that:\n * 1. Finds matching transitions\n * 2. Evaluates guards\n * 3. Returns the transition result (but does not execute effects)\n *\n * @returns TransitionResult with effects to execute\n *\n * @example\n * ```ts\n * const result = processEvent({\n * traitState: { traitName: 'Cart', currentState: 'empty', ... },\n * trait: cartTraitDefinition,\n * eventKey: 'ADD_ITEM',\n * payload: { productId: '123' },\n * });\n *\n * if (result.executed) {\n * // Execute effects\n * for (const effect of result.effects) {\n * effectExecutor.execute(effect);\n * }\n * // Update state\n * traitState.currentState = result.newState;\n * }\n * ```\n */\nexport function processEvent(options: ProcessEventOptions): TransitionResult {\n const {\n traitState, trait, eventKey, payload, entityData,\n config,\n guardMode = 'permissive',\n strictBindings = false,\n contextExtensions,\n } = options;\n const normalizedEvent = normalizeEventKey(eventKey);\n\n // Find every transition matching from/event so we can pick the first\n // whose guard passes. This supports the standard \"retry vs give-up\"\n // pattern where two transitions share from/event and differ by guard\n // (e.g. attempts<3 → idle vs attempts>=3 → failed).\n const candidates = findMatchingTransitions(trait, traitState.currentState, normalizedEvent);\n\n if (candidates.length === 0) {\n smLog.debug('noTransition', { trait: trait.name, event: normalizedEvent, currentState: traitState.currentState });\n return {\n executed: false,\n newState: traitState.currentState,\n previousState: traitState.currentState,\n effects: [],\n };\n }\n\n // Try each candidate in declaration order; pick the first whose\n // guard passes (or that has no guard). Guard errors fall through to\n // the next candidate in permissive mode, block in strict mode.\n let lastFailedGuardTransition: TraitDefinition['transitions'][0] | undefined;\n\n for (const transition of candidates) {\n smLog.debug('processEvent', { trait: trait.name, event: normalizedEvent, currentState: traitState.currentState, to: transition.to });\n\n if (!transition.guard) {\n // Unguarded transition wins immediately.\n return {\n executed: true,\n newState: transition.to,\n previousState: traitState.currentState,\n effects: transition.effects || [],\n transition: {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n },\n };\n }\n\n const ctx = createContextFromBindings({\n entity: entityData,\n payload,\n state: traitState.currentState,\n // Surface call-site config so `@config.X` resolves inside\n // guard expressions (matches the validator's allowed sigil\n // list as of v3.12.0). createContextFromBindings already\n // propagates `bindings.config` to ctx.config when present —\n // we just need to pass it through here.\n config,\n }, strictBindings, contextExtensions);\n\n try {\n const guardPasses = evaluateGuard(\n transition.guard as Parameters<typeof evaluateGuard>[0],\n ctx\n );\n smLog.debug('guard:evaluate', { trait: trait.name, event: normalizedEvent, guardResult: guardPasses });\n if (guardPasses) {\n return {\n executed: true,\n newState: transition.to,\n previousState: traitState.currentState,\n effects: transition.effects || [],\n transition: {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n },\n guardResult: true,\n };\n }\n // Guard failed — try the next candidate.\n lastFailedGuardTransition = transition;\n } catch (error) {\n if (guardMode === 'strict') {\n // RCG-02: In strict mode, guard errors block the transition\n smLog.error('guard-error-blocks-transition', {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n error: error instanceof Error ? error : String(error),\n });\n return {\n executed: false,\n newState: traitState.currentState,\n previousState: traitState.currentState,\n effects: [],\n transition: {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n },\n guardResult: false,\n };\n }\n // Permissive mode: log and allow (treat as guard pass).\n smLog.error('guard-evaluation-error', {\n error: error instanceof Error ? error : String(error),\n });\n return {\n executed: true,\n newState: transition.to,\n previousState: traitState.currentState,\n effects: transition.effects || [],\n transition: {\n from: traitState.currentState,\n to: transition.to,\n event: normalizedEvent,\n },\n guardResult: true,\n };\n }\n }\n\n // No candidate's guard passed.\n return {\n executed: false,\n newState: traitState.currentState,\n previousState: traitState.currentState,\n effects: [],\n transition: lastFailedGuardTransition\n ? {\n from: traitState.currentState,\n to: lastFailedGuardTransition.to,\n event: normalizedEvent,\n }\n : undefined,\n guardResult: false,\n };\n}\n\n// ============================================================================\n// State Machine Manager\n// ============================================================================\n\n/**\n * Stateful manager for multiple trait state machines.\n *\n * Platform-agnostic - can be used directly on server or wrapped\n * in a React hook on client.\n *\n * @example\n * ```ts\n * const manager = new StateMachineManager([cartTrait, userTrait]);\n *\n * // Process event\n * const results = manager.sendEvent('ADD_ITEM', { productId: '123' });\n *\n * // Get current states\n * const cartState = manager.getState('Cart');\n * ```\n */\n/** Entry in a per-trait event queue. */\nexport interface QueuedEvent {\n eventKey: string;\n payload?: EventPayload;\n entityData?: EntityRow;\n /** Per-trait entity overrides (see `sendEvent` doc). */\n entityByTrait?: Record<string, EntityRow>;\n}\n\n/**\n * Default scope used when an event arrives without a specific entityId.\n * Single-entity orbitals (the common case for UI traits) all share this\n * scope, so the public API stays identical to the pre-multi-entity world.\n */\nconst SINGLETON_SCOPE = '__singleton__';\n\nfunction scopeOf(entityData?: EntityRow): string {\n const id = entityData && (entityData['id'] as string | undefined);\n return id ?? SINGLETON_SCOPE;\n}\n\nfunction compositeKey(traitName: string, scope: string): string {\n return `${traitName}::${scope}`;\n}\n\nexport class StateMachineManager {\n private traits: Map<string, TraitDefinition> = new Map();\n /**\n * Per-trait call-site config, surfaced to guard expressions so\n * `@config.X` resolves at runtime. Populated by the orbital's\n * registration step (see `OrbitalServerRuntime.registerOrbital`'s\n * `configByTrait` projection). Empty for atom-scope traits whose\n * call-site config wasn't supplied — guards that read `@config.X`\n * in that case will see `undefined` and short-circuit accordingly.\n */\n private traitConfigs: Map<string, ConfigContext> = new Map();\n /**\n * State map keyed by `${traitName}::${entityId | __singleton__}`.\n *\n * Each entity instance of an orbital gets its own copy of every\n * trait's state machine. This is what enables N parallel subagents\n * (one OrbitalProcess row per dispatched orbital) to all run their\n * own Build/Validate/Fix cycle without colliding on shared trait\n * state — the original cause of GAP-AGB-2.\n *\n * Initial state is created lazily on first event for each scope, so\n * adding a trait does not pre-allocate state for every potential\n * entity (and there's no need to know entity ids up front).\n */\n private states: Map<string, TraitState> = new Map();\n private config: RuntimeConfig;\n private observer?: TransitionObserver;\n\n // Actor-model queues, also keyed by `${traitName}::${entityId}` so\n // each entity gets its own actor loop and concurrent subagents do\n // not serialize through a shared queue.\n private queues: Map<string, QueuedEvent[]> = new Map();\n private processing: Set<string> = new Set();\n\n constructor(\n traits: TraitDefinition[] = [],\n config: RuntimeConfig = {},\n observer?: TransitionObserver\n ) {\n this.config = config;\n this.observer = observer;\n for (const trait of traits) {\n this.addTrait(trait);\n }\n }\n\n /**\n * Set the transition observer for runtime verification.\n * Wire this to `verificationRegistry.recordTransition()` to enable\n * automatic verification tracking.\n */\n setObserver(observer: TransitionObserver): void {\n this.observer = observer;\n }\n\n /**\n * Add a trait to the manager.\n */\n addTrait(trait: TraitDefinition): void {\n this.traits.set(trait.name, trait);\n // Lazy: state for each entity scope is created on first event.\n }\n\n /**\n * Bind the call-site config for a trait so guard `@config.X`\n * resolves at runtime. Typically called by the orbital\n * registration step right after `addTrait`. Idempotent; passing\n * `undefined` clears the binding.\n */\n setTraitConfig(traitName: string, config: ConfigContext | undefined): void {\n if (config === undefined) {\n this.traitConfigs.delete(traitName);\n } else {\n this.traitConfigs.set(traitName, config);\n }\n }\n\n /**\n * Remove a trait from the manager.\n */\n removeTrait(traitName: string): void {\n this.traits.delete(traitName);\n // Drop every per-entity state row for this trait.\n const prefix = `${traitName}::`;\n for (const key of [...this.states.keys()]) {\n if (key.startsWith(prefix)) this.states.delete(key);\n }\n for (const key of [...this.queues.keys()]) {\n if (key.startsWith(prefix)) this.queues.delete(key);\n }\n for (const key of [...this.processing]) {\n if (key.startsWith(prefix)) this.processing.delete(key);\n }\n }\n\n /**\n * Get-or-init the state row for a (trait, entityId) pair.\n * Returns undefined if the trait isn't registered.\n */\n private getOrInitState(\n traitName: string,\n scope: string\n ): TraitState | undefined {\n const trait = this.traits.get(traitName);\n if (!trait) return undefined;\n const key = compositeKey(traitName, scope);\n let state = this.states.get(key);\n if (!state) {\n state = createInitialTraitState(trait);\n this.states.set(key, state);\n }\n return state;\n }\n\n /**\n * Get current state for a trait.\n *\n * For single-entity orbitals, omit `entityId` — returns the singleton\n * scope. For multi-entity orbitals (e.g. agent OrbitalSubagent), pass\n * the entity row id to look up that specific instance's state.\n */\n getState(traitName: string, entityId?: string): TraitState | undefined {\n const scope = entityId ?? SINGLETON_SCOPE;\n const key = compositeKey(traitName, scope);\n const existing = this.states.get(key);\n if (existing) return existing;\n // Lazy init for read-then-no-event scenarios (e.g. ticks).\n return this.getOrInitState(traitName, scope);\n }\n\n /**\n * Get a flat traitName→state map. For multi-entity orbitals this\n * returns one entry per trait collapsed onto the singleton scope (or\n * the first observed scope if singleton is empty). Use\n * `getAllStatesByScope()` to get the full per-entity view.\n */\n getAllStates(): Map<string, TraitState> {\n const out = new Map<string, TraitState>();\n for (const traitName of this.traits.keys()) {\n const singleton = this.states.get(compositeKey(traitName, SINGLETON_SCOPE));\n if (singleton) {\n out.set(traitName, singleton);\n continue;\n }\n // Fall back to the first observed entity scope for this trait.\n for (const [key, state] of this.states) {\n if (key.startsWith(`${traitName}::`)) {\n out.set(traitName, state);\n break;\n }\n }\n }\n return out;\n }\n\n /**\n * Get every per-entity state row, grouped by trait. Useful for\n * inspecting parallel subagent state.\n */\n getAllStatesByScope(): Map<string, Map<string, TraitState>> {\n const grouped = new Map<string, Map<string, TraitState>>();\n for (const [key, state] of this.states) {\n const sep = key.indexOf('::');\n if (sep < 0) continue;\n const traitName = key.slice(0, sep);\n const scope = key.slice(sep + 2);\n let bucket = grouped.get(traitName);\n if (!bucket) {\n bucket = new Map();\n grouped.set(traitName, bucket);\n }\n bucket.set(scope, state);\n }\n return grouped;\n }\n\n /**\n * Check if a trait can handle an event from its current state.\n */\n canHandleEvent(traitName: string, eventKey: string, entityId?: string): boolean {\n const trait = this.traits.get(traitName);\n const state = this.getOrInitState(traitName, entityId ?? SINGLETON_SCOPE);\n if (!trait || !state) return false;\n\n return !!findTransition(trait, state.currentState, normalizeEventKey(eventKey));\n }\n\n /**\n * Send an event to all traits.\n *\n * `entityByTrait` lets callers supply per-trait entity rows for guard\n * evaluation when traits accumulate scalar state via `(set @entity.X)`\n * effects across transitions. The runtime UI hook builds this map from\n * its `traitFieldStatesRef` before each dispatch so guards reading\n * `@entity.X` see prior step writes — required for [runtime] entities\n * that have no persistence row to reload.\n *\n * @returns Array of transition results (one per trait that had a matching transition)\n */\n sendEvent(\n eventKey: string,\n payload?: EventPayload,\n entityData?: EntityRow,\n entityByTrait?: Record<string, EntityRow>\n ): Array<{ traitName: string; result: TransitionResult }> {\n const results: Array<{ traitName: string; result: TransitionResult }> = [];\n const scope = scopeOf(entityData);\n\n for (const [traitName, trait] of this.traits) {\n const traitState = this.getOrInitState(traitName, scope);\n if (!traitState) continue;\n const key = compositeKey(traitName, scope);\n\n const perTraitEntity = entityByTrait?.[traitName] ?? entityData;\n\n const result = processEvent({\n traitState,\n trait,\n eventKey,\n payload,\n entityData: perTraitEntity,\n config: this.traitConfigs.get(traitName),\n guardMode: this.config.guardMode,\n strictBindings: this.config.strictBindings,\n contextExtensions: this.config.contextExtensions,\n });\n\n if (result.executed) {\n // Update state for THIS entity's scope only — concurrent\n // entities of the same trait keep independent state.\n this.states.set(key, {\n ...traitState,\n currentState: result.newState,\n previousState: result.previousState,\n lastEvent: normalizeEventKey(eventKey),\n context: { ...traitState.context, ...payload } as ConfigContext,\n });\n\n results.push({ traitName, result });\n\n // Notify observer (for verificationRegistry wiring)\n if (this.observer && result.transition) {\n this.observer.onTransition({\n traitName,\n from: result.transition.from,\n to: result.transition.to,\n event: result.transition.event,\n guardResult: result.guardResult,\n // Effects will be traced when executed — placeholder here\n effects: [],\n });\n }\n }\n }\n\n return results;\n }\n\n // ========================================================================\n // Actor-Model Queue API (opt-in, does not affect sendEvent)\n // ========================================================================\n\n /**\n * Enqueue an event into every trait's per-trait queue.\n *\n * Events are not processed immediately. Call `drainQueue()` for each\n * trait to process them sequentially (actor-model guarantee: one event\n * at a time per trait, effects fully awaited before the next event).\n */\n enqueueEvent(\n eventKey: string,\n payload?: EventPayload,\n entityData?: EntityRow,\n entityByTrait?: Record<string, EntityRow>\n ): void {\n const scope = scopeOf(entityData);\n for (const [traitName] of this.traits) {\n const key = compositeKey(traitName, scope);\n const queue = this.queues.get(key) ?? [];\n queue.push({ eventKey, payload, entityData, entityByTrait });\n this.queues.set(key, queue);\n }\n }\n\n /**\n * Drain a single (trait, entity) pair's event queue, processing\n * events sequentially. Pass `entityId` to drain a specific entity\n * instance; omit it to drain the singleton scope.\n */\n async drainQueue(\n traitName: string,\n executeEffects: (\n traitName: string,\n result: TransitionResult,\n payload?: EventPayload\n ) => Promise<void>,\n entityId?: string\n ): Promise<void> {\n const scope = entityId ?? SINGLETON_SCOPE;\n const key = compositeKey(traitName, scope);\n if (this.processing.has(key)) return;\n this.processing.add(key);\n\n const queue = this.queues.get(key) ?? [];\n while (queue.length > 0) {\n const entry = queue.shift()!;\n const trait = this.traits.get(traitName);\n const traitState = this.getOrInitState(traitName, scope);\n if (!trait || !traitState) continue;\n\n const perTraitEntity =\n entry.entityByTrait?.[traitName] ?? entry.entityData;\n\n const result = processEvent({\n traitState,\n trait,\n eventKey: entry.eventKey,\n payload: entry.payload,\n entityData: perTraitEntity,\n config: this.traitConfigs.get(traitName),\n guardMode: this.config.guardMode,\n strictBindings: this.config.strictBindings,\n contextExtensions: this.config.contextExtensions,\n });\n\n if (result.executed) {\n this.states.set(key, {\n ...traitState,\n currentState: result.newState,\n previousState: result.previousState,\n lastEvent: normalizeEventKey(entry.eventKey),\n context: { ...traitState.context, ...entry.payload } as ConfigContext,\n });\n\n if (this.observer && result.transition) {\n this.observer.onTransition({\n traitName,\n from: result.transition.from,\n to: result.transition.to,\n event: result.transition.event,\n guardResult: result.guardResult,\n effects: [],\n });\n }\n\n // Await effects before processing the next event in this trait's queue\n await executeEffects(traitName, result, entry.payload);\n }\n }\n\n this.processing.delete(key);\n }\n\n /**\n * Check whether a trait's queue is currently being drained.\n */\n isProcessing(traitName: string, entityId?: string): boolean {\n return this.processing.has(compositeKey(traitName, entityId ?? SINGLETON_SCOPE));\n }\n\n /**\n * Get the number of pending events in a trait's queue.\n */\n getQueueLength(traitName: string, entityId?: string): number {\n return this.queues.get(compositeKey(traitName, entityId ?? SINGLETON_SCOPE))?.length ?? 0;\n }\n\n /**\n * Reset a trait to its initial state.\n *\n * If `entityId` is provided, resets only that entity's scope.\n * Otherwise resets every entity scope known for the trait.\n */\n resetTrait(traitName: string, entityId?: string): void {\n const trait = this.traits.get(traitName);\n if (!trait) return;\n if (entityId) {\n this.states.set(compositeKey(traitName, entityId), createInitialTraitState(trait));\n return;\n }\n const prefix = `${traitName}::`;\n for (const key of [...this.states.keys()]) {\n if (key.startsWith(prefix)) {\n this.states.set(key, createInitialTraitState(trait));\n }\n }\n }\n\n /**\n * Reset all traits to initial states (every entity scope).\n */\n resetAll(): void {\n for (const [traitName, trait] of this.traits) {\n const prefix = `${traitName}::`;\n for (const key of [...this.states.keys()]) {\n if (key.startsWith(prefix)) {\n this.states.set(key, createInitialTraitState(trait));\n }\n }\n }\n }\n}\n","/**\n * Unified Runtime Types\n *\n * Platform-agnostic interfaces for trait execution on client or server.\n *\n * @packageDocumentation\n */\n\nimport type {\n EntityRow,\n EventPayload,\n FetchResult,\n ServiceParams,\n ResolvedPatternProps,\n AgentContext,\n BusEvent,\n BusEventSource,\n BusEventListener,\n Unsubscribe as CoreUnsubscribe,\n PatternConfig,\n} from '@almadar/core';\n\n// ============================================================================\n// Runtime Data Types (re-exported from @almadar/core)\n// ============================================================================\n\nexport type { EntityRow, EventPayload, FetchResult, ServiceParams };\n\n/** Alias for ResolvedPatternProps to avoid breaking internal consumers */\nexport type PatternProps = ResolvedPatternProps;\n\n/**\n * Value a render-ui pattern prop can carry AFTER interpolation. Mirrors\n * `FieldValue` but extends with `RuntimeRenderPattern` so nested pattern\n * configs (children, slot props that are themselves render-ui nodes)\n * round-trip without an `unknown` escape hatch.\n */\nexport type RuntimePatternValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | EntityRow\n | EntityRow[]\n | readonly RuntimePatternValue[]\n | RuntimeRenderPattern;\n\n/**\n * Shape of a render-ui pattern AFTER interpolation, as the runtime hands\n * it to `EffectHandlers.renderUI`. Different from `ResolvedPatternProps`\n * (`@almadar/core`) because the post-interpolation pattern carries\n * resolved EntityRow values (e.g. `{ entity: <row> }` from `@payload.row`)\n * not just primitives. Used by render-ui observability helpers to narrow\n * safely without `unknown` casts.\n */\nexport interface RuntimeRenderPattern {\n readonly [prop: string]: RuntimePatternValue;\n}\n\n/**\n * Configuration context.\n *\n * Re-export of `TraitConfig` from `@almadar/core` for the runtime's binding\n * and state-machine layers. Supports scalar, array, and nested-object values\n * so `config.fields = [\"name\", \"description\"]` and similar authoring shapes\n * flow through the binding context without type widening.\n */\nimport type { TraitConfig } from '@almadar/core';\nexport type ConfigContext = TraitConfig;\n\n// ============================================================================\n// Event Bus Types\n// ============================================================================\n\n/**\n * Event structure for cross-trait communication.\n * Re-export of `BusEvent` from `@almadar/core` so runtime + ui + codegen\n * all agree on the bus envelope shape. `RuntimeEvent` is kept as a type\n * alias for anyone importing by the old name.\n */\nexport type RuntimeEvent = BusEvent;\nexport type EventListener = BusEventListener;\nexport type Unsubscribe = CoreUnsubscribe;\n\n/**\n * Event bus interface for pub/sub communication\n */\nexport interface IEventBus {\n /** Emit an event */\n emit(type: string, payload?: EventPayload, source?: BusEventSource): void;\n /** Subscribe to an event */\n on(type: string, listener: EventListener): Unsubscribe;\n /** Subscribe to ALL events (wildcard listener) */\n onAny(listener: EventListener): Unsubscribe;\n /** Check if there are listeners for an event */\n hasListeners(type: string): boolean;\n /** Get all registered event types */\n getRegisteredEvents(): string[];\n /** Clear all listeners */\n clear(): void;\n}\n\n// ============================================================================\n// State Machine Types\n// ============================================================================\n\n/**\n * State of a single trait's state machine\n */\nexport interface TraitState {\n /** Trait name */\n traitName: string;\n /** Current state name */\n currentState: string;\n /** Previous state (null if initial) */\n previousState: string | null;\n /** Last event that caused a transition */\n lastEvent: string | null;\n /** Custom context data */\n context: ConfigContext;\n}\n\n/**\n * Result of processing an event through a state machine\n */\nexport interface TransitionResult {\n /** Whether a transition was executed */\n executed: boolean;\n /** New state after transition (same as current if not executed) */\n newState: string;\n /** Previous state before transition */\n previousState: string;\n /** Effects to execute (empty if guard failed or no transition found) */\n effects: unknown[];\n /** The transition that was executed (undefined if none) */\n transition?: {\n from: string;\n to: string;\n event: string;\n };\n /** Guard evaluation result (undefined if no guard) */\n guardResult?: boolean;\n}\n\n/**\n * Minimal trait definition for state machine processing\n */\nexport interface TraitDefinition {\n name: string;\n states: Array<{ name: string; isInitial?: boolean }>;\n transitions: Array<{\n from: string | string[];\n to: string;\n event: string;\n guard?: unknown;\n effects?: unknown[];\n /** Compensating transition when effects fail (RCG-04) */\n onEffectError?: {\n to: string;\n effects?: unknown[];\n };\n }>;\n /** Cross-trait event listeners (optional) */\n listens?: Array<{\n event: string;\n triggers: string;\n payloadMapping?: EventPayload;\n }>;\n}\n\n// ============================================================================\n// Effect Handler Types\n// ============================================================================\n\n/**\n * Effect handlers interface - platform-specific implementations\n *\n * Client: React hooks, DOM, router\n * Server: Express, database, integrators\n */\nexport interface EffectHandlers {\n /**\n * Emit an event to the event bus.\n *\n * `source` carries the emitter's identity (orbital + trait) so that\n * source-scoped listeners (`TraitName EVENT -> TRIGGER` and\n * `Orbital.TraitName EVENT -> TRIGGER` in .lolo) can filter incoming\n * events by their originating trait. Omitted when the emit is\n * synthesized by a non-trait context (e.g. test harness).\n */\n emit: (event: string, payload?: EventPayload, source?: RuntimeEvent['source']) => void;\n\n /** Persist data (create/update/delete/batch) */\n persist: (\n action: 'create' | 'update' | 'delete' | 'batch',\n entityType: string,\n data?: EntityRow\n ) => Promise<void>;\n\n /** Set a field value on an entity */\n set: (entityId: string, field: string, value: unknown) => void;\n\n /** Call an external service */\n callService: (\n service: string,\n action: string,\n params?: ServiceParams\n ) => Promise<unknown>;\n\n /** Fetch entity data (server only) - returns data for client-side rendering.\n *\n * Always returns a `FetchResult` (`{rows, total}`) on success. `total`\n * is the count of rows matching the `filter` BEFORE `offset`/`limit`\n * are applied so a paginating caller can compute totalPages without\n * a second round-trip. Single-id fetches return `total: 1`. `null`\n * means \"not found / failed\".\n */\n fetch?: (\n entityType: string,\n options?: {\n id?: string;\n filter?: unknown;\n limit?: number;\n offset?: number;\n /** Relation fields to include (populate) in the response */\n include?: string[];\n }\n ) => Promise<FetchResult | null>;\n\n /** Spawn a new entity instance */\n spawn?: (entityType: string, props?: EntityRow) => void;\n\n /** Despawn (delete) an entity instance */\n despawn?: (entityId: string) => void;\n\n // Platform-specific handlers (optional)\n\n /** Render UI to a slot (client only). `pattern` is the post-interpolation\n * `PatternConfig` from the trait's `(render-ui slot pattern)` SExpr, or\n * `null` when the trait clears the slot (`render-ui slot null`). */\n renderUI?: (\n slot: string,\n pattern: PatternConfig | null,\n props?: PatternProps,\n priority?: number\n ) => void;\n\n /** Navigate to a route (client only) */\n navigate?: (path: string, params?: { [key: string]: string }) => void;\n\n /** Show a notification (client: toast, server: log) */\n notify?: (message: string, type: 'success' | 'error' | 'warning' | 'info') => void;\n\n /** Log a message */\n log?: (message: string, level?: 'log' | 'warn' | 'error', data?: unknown) => void;\n\n // Resource operators (ref/deref/swap!/watch/atomic)\n\n /** Ref: declarative data subscription (server: same as fetch) */\n ref?: (\n entityType: string,\n options?: {\n id?: string;\n filter?: unknown;\n limit?: number;\n offset?: number;\n include?: string[];\n }\n ) => Promise<FetchResult | null>;\n\n /** Deref: one-shot data read (server: same as fetch) */\n deref?: (\n entityType: string,\n options?: {\n id?: string;\n filter?: unknown;\n }\n ) => Promise<FetchResult | null>;\n\n /** Swap!: atomic read-modify-write on an entity */\n swap?: (\n entityType: string,\n entityId: string,\n transform: unknown,\n ) => Promise<EntityRow | null>;\n\n /** Watch: client-side reactive subscription (no-op on server) */\n watch?: (\n entityType: string,\n options?: { id?: string; filter?: unknown; limit?: number },\n ) => void;\n\n /** Atomic: execute inner effects as a transaction */\n atomic?: (\n effects: unknown[],\n ) => Promise<void>;\n\n // === Composition handlers (compile-time, optional) ===\n /** Compose multiple orbitals into one schema. Compile-time only. */\n composeBehaviors?: (config: { appName: string; orbitals: unknown[]; layoutStrategy?: string; eventWiring?: unknown[]; entityMappings?: Record<string, string> }) => Promise<unknown> | unknown;\n /** Apply cross-orbital event wiring. Compile-time only. */\n applyEventWiring?: (orbitals: unknown[], wiring: unknown[]) => Promise<unknown[]> | unknown[];\n /** Auto-detect layout strategy. Compile-time only. */\n detectLayoutStrategy?: (orbitals: unknown[], wiring?: unknown[]) => Promise<string> | string;\n /** Left-to-right behavior pipeline. Compile-time only. */\n pipeBehaviors?: (seed: unknown, ...steps: Array<(prev: unknown) => unknown>) => Promise<unknown> | unknown;\n\n // OS trigger handlers (server-side only)\n //\n // Each handler may accept an optional `emit` config — when present, the\n // handler fires `emit.on_message` in place of the hardcoded event name\n // (e.g. `OS_FILE_MODIFIED`). Hardcoded fallback is preserved so existing\n // schemas without `emit:` keep working.\n /** Watch file system for changes matching glob pattern */\n osWatchFiles?: (\n glob: string,\n options: { recursive?: boolean; debounce?: number },\n emit?: OsEmitConfig,\n ) => void;\n /** Monitor a process by name */\n osWatchProcess?: (name: string, subcommand?: string, emit?: OsEmitConfig) => void;\n /** Monitor a port for open/close */\n osWatchPort?: (port: number, protocol: string, emit?: OsEmitConfig) => void;\n /** Intercept HTTP responses matching pattern */\n osWatchHttp?: (urlPattern: string, method?: string, emit?: OsEmitConfig) => void;\n /** Register a cron schedule */\n osWatchCron?: (expression: string, emit?: OsEmitConfig) => void;\n /** Register an OS signal handler */\n osWatchSignal?: (signal: string, emit?: OsEmitConfig) => void;\n /** Watch an environment variable for changes */\n osWatchEnv?: (variable: string, emit?: OsEmitConfig) => void;\n /** Configure debounce for an OS event type */\n osDebounce?: (ms: number, eventType: string) => void;\n}\n\n/**\n * Author-configured `emit:` block threaded into `os/watch-*` handlers.\n * Narrower than @almadar/core's `EmitConfig` — only the keys streaming\n * operators meaningfully fire.\n */\nexport type OsEmitConfig = Pick<import('@almadar/core').EmitConfig, 'on_message' | 'failure'>;\n\n// ============================================================================\n// Binding Context Types\n// ============================================================================\n\n/**\n * Context for resolving bindings like @entity.field, @payload.value\n */\nexport interface BindingContext {\n /** Current entity data */\n entity?: EntityRow;\n /** Event payload data */\n payload?: EventPayload;\n /** Current state name */\n state?: string;\n /** Trait-level state/config */\n config?: ConfigContext;\n /** Additional custom bindings */\n [key: string]: unknown;\n}\n\n// ============================================================================\n// Effect Types\n// ============================================================================\n\n/**\n * S-expression effect array\n * First element is the operator, rest are arguments\n */\nexport type Effect = [string, ...unknown[]];\n\n/**\n * Effect execution context\n */\nexport interface EffectContext {\n /** Trait name */\n traitName: string;\n /** Orbital that owns the firing trait. Used to stamp the source\n * metadata on emits so source-scoped listens (`TraitName EVENT` for\n * intra-orbital, `Orbital.TraitName EVENT` for cross-orbital) can\n * filter by emitter identity. */\n orbitalName?: string;\n /** Current state */\n state: string;\n /** Transition description */\n transition: string;\n /** Linked entity name */\n linkedEntity?: string;\n /** Entity ID (if available) */\n entityId?: string;\n}\n\n// ============================================================================\n// Effect Result Types (RCG-04)\n// ============================================================================\n\n/**\n * Result of executing a single effect, with status tracking.\n */\nexport interface EffectResult {\n /** Effect operator (e.g., \"persist\", \"render-ui\") */\n type: string;\n /** Effect arguments */\n args: unknown[];\n /** Whether the effect executed successfully */\n status: \"executed\" | \"failed\" | \"skipped\";\n /** Error message if failed */\n error?: string;\n /** Execution duration in milliseconds */\n durationMs?: number;\n}\n\n// ============================================================================\n// Runtime Configuration (RCG-01, RCG-02, RCG-05)\n// ============================================================================\n\n/**\n * Runtime configuration for strictness and safety modes.\n *\n * These options control how the runtime handles edge cases:\n * - `strictBindings`: Log warnings when bindings resolve to undefined (RCG-01)\n * - `guardMode`: Control whether guard errors block or allow transitions (RCG-02)\n * - `maxEventDepth`: Prevent infinite event loops (RCG-05)\n */\nexport interface RuntimeConfig {\n /**\n * When true, log warnings when bindings like @entity.field resolve to undefined.\n * Helps detect typos and missing fields early. (RCG-01)\n * @default false\n */\n strictBindings?: boolean;\n\n /**\n * Guard evaluation error handling mode. (RCG-02)\n * - \"permissive\": Guard errors allow the transition (current default behavior)\n * - \"strict\": Guard errors block the transition\n * @default \"permissive\"\n */\n guardMode?: \"strict\" | \"permissive\";\n\n /**\n * Maximum event emission depth before triggering circuit breaker. (RCG-05)\n * Prevents infinite loops from circular emit/listen chains.\n * @default 10\n */\n maxEventDepth?: number;\n\n /**\n * Additional fields to spread onto every EvaluationContext.\n * Used to inject module contexts (e.g., { agent: AgentContext }).\n * The evaluator dispatches agent/* operators to ctx.agent.\n */\n contextExtensions?: EvaluationContextExtensions;\n}\n\n/**\n * Typed extensions that get spread onto every EvaluationContext.\n * Each field here corresponds to an optional field on EvaluationContext.\n */\nexport interface EvaluationContextExtensions {\n /** Agent context for agent/* operators (memory, LLM, tools, session) */\n agent?: AgentContext;\n}\n\n// ============================================================================\n// Handler Manifest Types (RCG-03)\n// ============================================================================\n\n/**\n * Execution context for handler manifest validation.\n * Defines which effect handlers should be available in each environment.\n */\nexport type ExecutionEnvironment = \"client\" | \"server\" | \"test\" | \"ssr\";\n\n// ============================================================================\n// Transition Observer Types (Verification Registry Wiring)\n// ============================================================================\n\n/**\n * Observer interface for recording transition and effect traces.\n * Implement this to wire in the verificationRegistry or other monitoring tools.\n *\n * The runtime calls these hooks automatically when transitions execute and\n * effects complete, enabling runtime verification without tight coupling.\n */\nexport interface TransitionObserver {\n /**\n * Called after a transition is processed (whether or not it executed).\n */\n onTransition(trace: {\n traitName: string;\n from: string;\n to: string;\n event: string;\n guardResult?: boolean;\n effects: Array<{\n type: string;\n args: unknown[];\n status: \"executed\" | \"failed\" | \"skipped\";\n error?: string;\n durationMs?: number;\n }>;\n }): void;\n}\n\n/**\n * Maps execution environments to their available effect handlers.\n */\nexport const HANDLER_MANIFEST: Record<ExecutionEnvironment, string[]> = {\n client: [\"render-ui\", \"render\", \"navigate\", \"notify\", \"emit\", \"set\", \"log\", \"ref\", \"deref\", \"watch\"],\n server: [\"persist\", \"fetch\", \"call-service\", \"emit\", \"set\", \"spawn\", \"despawn\", \"log\", \"ref\", \"deref\", \"swap!\", \"atomic\", \"os/watch-files\", \"os/watch-process\", \"os/watch-port\", \"os/watch-http\", \"os/watch-cron\", \"os/watch-signal\", \"os/watch-env\", \"os/debounce\"],\n test: [\n \"render-ui\", \"render\", \"navigate\", \"notify\", \"emit\", \"set\",\n \"persist\", \"fetch\", \"call-service\", \"spawn\", \"despawn\", \"log\",\n \"ref\", \"deref\", \"swap!\", \"watch\", \"atomic\",\n ],\n ssr: [\"render-ui\", \"render\", \"fetch\", \"emit\", \"set\", \"log\", \"ref\", \"deref\"],\n};\n","/**\n * EffectExecutor - Platform-Agnostic Effect Dispatch\n *\n * Routes S-expression effects to appropriate handlers.\n * Platform-specific adapters provide handler implementations.\n *\n * @packageDocumentation\n */\n\nimport type { EmitConfig, FetchOptions, PatternConfig } from '@almadar/core';\nimport type {\n EffectHandlers,\n Effect,\n EffectContext,\n EffectResult,\n ExecutionEnvironment,\n} from './types.js';\nimport { HANDLER_MANIFEST } from './types.js';\nimport { interpolateValue, createContextFromBindings } from './BindingResolver.js';\nimport type { BindingContext, EntityRow, EventPayload, FetchResult, ServiceParams, PatternProps, EvaluationContextExtensions } from './types.js';\nimport { createLogger } from '@almadar/logger';\n\nconst effectLog = createLogger('almadar:runtime:effects');\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Full executor options with handlers and context.\n */\nexport interface EffectExecutorOptions {\n /** Effect handlers (platform-specific) */\n handlers: EffectHandlers;\n /** Binding context for resolving @entity.field references */\n bindings: BindingContext;\n /** Effect execution context (trait name, state, etc.) */\n context: EffectContext;\n /** Enable debug logging */\n debug?: boolean;\n /** When true, log warnings when bindings resolve to undefined (RCG-01) */\n strictBindings?: boolean;\n /** Additional fields to spread onto EvaluationContext (e.g., { agent: AgentContext }) */\n contextExtensions?: EvaluationContextExtensions;\n}\n\n// ============================================================================\n// Effect Parsing\n// ============================================================================\n\n/**\n * Parse an effect into operator and arguments.\n */\nfunction parseEffect(effect: unknown): { operator: string; args: unknown[] } | null {\n if (!Array.isArray(effect) || effect.length === 0) {\n return null;\n }\n\n const [operator, ...args] = effect;\n if (typeof operator !== 'string') {\n return null;\n }\n\n return { operator, args };\n}\n\n/**\n * Resolve all bindings in effect arguments.\n */\nfunction resolveArgs(\n args: unknown[],\n bindings: BindingContext,\n strictBindings?: boolean,\n contextExtensions?: EvaluationContextExtensions,\n): unknown[] {\n const ctx = createContextFromBindings(bindings, strictBindings, contextExtensions);\n return args.map((arg) => interpolateValue(arg, ctx));\n}\n\n// ============================================================================\n// Effect Executor\n// ============================================================================\n\n/**\n * EffectExecutor - Routes effects to handlers.\n *\n * @example\n * ```ts\n * const executor = new EffectExecutor({\n * handlers: {\n * emit: (event, payload) => eventBus.emit(event, payload),\n * persist: async (action, entity, data) => { ... },\n * set: (id, field, value) => { ... },\n * callService: async (service, action, params) => { ... },\n * },\n * bindings: { entity: { name: 'Product' }, payload: { id: '123' } },\n * context: { traitName: 'Cart', state: 'active', transition: 'idle->active' },\n * });\n *\n * // Execute a single effect\n * executor.execute(['emit', 'ITEM_ADDED', { count: 1 }]);\n *\n * // Execute multiple effects\n * executor.executeAll([\n * ['set', 'item', 'quantity', 5],\n * ['emit', 'QUANTITY_UPDATED'],\n * ]);\n * ```\n */\nexport class EffectExecutor {\n private handlers: EffectHandlers;\n private bindings: BindingContext;\n private context: EffectContext;\n private debug: boolean;\n private strictBindings: boolean;\n private contextExtensions?: EvaluationContextExtensions;\n\n constructor(options: EffectExecutorOptions) {\n this.handlers = options.handlers;\n this.bindings = options.bindings;\n this.context = options.context;\n this.debug = options.debug ?? false;\n this.strictBindings = options.strictBindings ?? false;\n this.contextExtensions = options.contextExtensions;\n }\n\n // ==========================================================================\n // Handler Manifest Validation (RCG-03)\n // ==========================================================================\n\n /**\n * Validate that all effect types used in a schema have handlers registered.\n * Call this at runtime startup to catch missing handler setup immediately.\n *\n * @param usedEffectTypes - Effect operator names used in the loaded schemas\n * @param environment - Execution environment for context-aware error messages\n * @returns Array of missing handler errors (empty if all handlers are available)\n *\n * @example\n * ```ts\n * const missing = EffectExecutor.validateHandlers(\n * ['persist', 'render-ui', 'fetch'],\n * executor.getRegisteredHandlers(),\n * 'client'\n * );\n * if (missing.length > 0) {\n * console.error('Missing handlers:', missing);\n * }\n * ```\n */\n static validateHandlers(\n usedEffectTypes: string[],\n registeredHandlers: string[],\n environment?: ExecutionEnvironment\n ): string[] {\n const errors: string[] = [];\n const expectedHandlers = environment\n ? HANDLER_MANIFEST[environment]\n : undefined;\n\n for (const effectType of usedEffectTypes) {\n if (!registeredHandlers.includes(effectType)) {\n let message = `Effect \"${effectType}\" is used in schema but no handler is registered.`;\n if (expectedHandlers && !expectedHandlers.includes(effectType)) {\n message += ` Effect \"${effectType}\" is not expected in \"${environment}\" environment.`;\n }\n errors.push(message);\n }\n }\n\n return errors;\n }\n\n /**\n * Get list of effect operators that have handlers registered.\n */\n getRegisteredHandlers(): string[] {\n const registered: string[] = [];\n const handlerMap: { [op: string]: ((...args: never[]) => unknown) | undefined } = {\n 'emit': this.handlers.emit,\n 'persist': this.handlers.persist,\n 'set': this.handlers.set,\n 'call-service': this.handlers.callService,\n 'fetch': this.handlers.fetch,\n 'spawn': this.handlers.spawn,\n 'despawn': this.handlers.despawn,\n 'render-ui': this.handlers.renderUI,\n 'render': this.handlers.renderUI,\n 'navigate': this.handlers.navigate,\n 'notify': this.handlers.notify,\n 'log': this.handlers.log,\n 'ref': this.handlers.ref,\n 'deref': this.handlers.deref,\n 'swap!': this.handlers.swap,\n 'watch': this.handlers.watch,\n 'atomic': this.handlers.atomic,\n 'behavior/compose': this.handlers.composeBehaviors,\n 'behavior/wire': this.handlers.applyEventWiring,\n 'behavior/detect-layout': this.handlers.detectLayoutStrategy,\n 'behavior/pipe': this.handlers.pipeBehaviors,\n };\n for (const [name, handler] of Object.entries(handlerMap)) {\n if (handler) {\n registered.push(name);\n }\n }\n // Compound operators are always available\n registered.push('do', 'when');\n return registered;\n }\n\n /**\n * Execute a single effect.\n */\n async execute(effect: unknown): Promise<void> {\n const parsed = parseEffect(effect);\n if (!parsed) {\n if (this.debug) {\n effectLog.warn('invalid-effect-format', () => ({ effectJson: JSON.stringify(effect ?? null) }));\n }\n return;\n }\n\n const { operator, args } = parsed;\n\n // Compound operators ('do', 'when') contain nested effects as arguments.\n // Skip resolveArgs for these — each nested effect will be resolved\n // individually when this.execute() recurses into it via dispatch().\n const isCompound = operator === 'do' || operator === 'when';\n\n // `set` with an `@entity.<field>` path literal uses that first arg as a\n // binding PATH, not as a value to resolve. Skip interpolating args[0] so\n // dispatch('set', ...) can parse the field name from the path. This\n // applies to both the bare 3-elem form AND the 4-elem form with a\n // trailing `emit:` options object (added by close-the-circuit Stage 2).\n // The purely positional 4-elem form (entityId, field, value) falls\n // through the normal resolve path below.\n const isSetPathForm =\n operator === 'set' &&\n args.length >= 2 &&\n typeof args[0] === 'string' &&\n (args[0] as string).startsWith('@entity.');\n\n // Resource-fetch operators carry a `filter` SExpression in args[1]\n // that the handler evaluates per-row against the fetched collection.\n // Pre-interpolation collapses it to a single constant boolean (e.g.\n // `(or (= \"active\" \"\") (= (object/get @entity \"status\") \"active\"))`\n // becomes literal `true` or `false` against the OUTER trait's bound\n // entity), so the handler then applies the same constant to every\n // row — no narrowing. Preserve the filter SExpression verbatim;\n // resolve the rest of the options object normally.\n const isFetchLike =\n (operator === 'fetch' ||\n operator === 'ref' ||\n operator === 'deref' ||\n operator === 'os/watch-collection' ||\n operator === 'os/watch') &&\n args.length >= 2 &&\n args[1] !== null &&\n typeof args[1] === 'object' &&\n !Array.isArray(args[1]);\n\n let resolvedArgs: unknown[];\n if (isCompound) {\n resolvedArgs = args;\n } else if (isSetPathForm) {\n const ctx = createContextFromBindings(this.bindings, this.strictBindings, this.contextExtensions);\n // Preserve args[0] (the @entity.<path> literal); resolve the rest.\n resolvedArgs = [args[0], ...args.slice(1).map((a) => interpolateValue(a, ctx))];\n } else if (isFetchLike) {\n const ctx = createContextFromBindings(this.bindings, this.strictBindings, this.contextExtensions);\n const opts = args[1] as FetchOptions;\n const resolvedOpts: FetchOptions = {\n ...(opts.id !== undefined && { id: interpolateValue(opts.id, ctx) as string }),\n ...(opts.filter !== undefined && { filter: opts.filter }),\n ...(opts.limit !== undefined && { limit: interpolateValue(opts.limit, ctx) as number }),\n ...(opts.offset !== undefined && { offset: interpolateValue(opts.offset, ctx) as number }),\n ...(opts.include !== undefined && { include: interpolateValue(opts.include, ctx) as string[] }),\n ...(opts.emit !== undefined && { emit: interpolateValue(opts.emit, ctx) as FetchOptions['emit'] }),\n };\n resolvedArgs = [\n interpolateValue(args[0], ctx),\n resolvedOpts,\n ...args.slice(2).map((a) => interpolateValue(a, ctx)),\n ];\n } else {\n resolvedArgs = resolveArgs(args, this.bindings, this.strictBindings, this.contextExtensions);\n }\n\n effectLog.debug('execute', { operator, argCount: resolvedArgs.length, context: this.context.traitName });\n\n if (this.debug) {\n effectLog.debug('executing', () => ({ operator, argsJson: JSON.stringify(resolvedArgs) }));\n }\n\n try {\n await this.dispatch(operator, resolvedArgs);\n effectLog.debug('execute:result', { operator, success: true });\n } catch (error) {\n effectLog.error('execute:error', {\n operator,\n error: error instanceof Error ? error : String(error),\n });\n throw error;\n }\n }\n\n /**\n * Execute multiple effects in sequence.\n */\n async executeAll(effects: unknown[]): Promise<void> {\n for (const effect of effects) {\n await this.execute(effect);\n }\n }\n\n /**\n * Execute multiple effects in parallel.\n */\n async executeParallel(effects: unknown[]): Promise<void> {\n await Promise.all(effects.map((effect) => this.execute(effect)));\n }\n\n // ==========================================================================\n // Effect Execution with Results (RCG-04)\n // ==========================================================================\n\n /**\n * Execute effects and return detailed results for each.\n * Enables compensating transitions by reporting which effects failed.\n *\n * Unlike `executeAll`, this method does NOT throw on effect errors.\n * Instead, it captures errors in the returned `EffectResult[]` array.\n */\n async executeWithResults(effects: unknown[]): Promise<EffectResult[]> {\n const results: EffectResult[] = [];\n\n for (const effect of effects) {\n const parsed = parseEffect(effect);\n if (!parsed) {\n results.push({\n type: 'unknown',\n args: [],\n status: 'skipped',\n error: 'Invalid effect format',\n });\n continue;\n }\n\n const start = Date.now();\n const { operator, args: rawArgs } = parsed;\n const isCompound = operator === 'do' || operator === 'when';\n const resolvedArgs = isCompound\n ? rawArgs\n : resolveArgs(rawArgs, this.bindings, this.strictBindings, this.contextExtensions);\n\n try {\n await this.dispatch(operator, resolvedArgs);\n results.push({\n type: operator,\n args: resolvedArgs,\n status: 'executed',\n durationMs: Date.now() - start,\n });\n } catch (error) {\n const errorMessage = error instanceof Error\n ? error.message\n : String(error);\n results.push({\n type: operator,\n args: resolvedArgs,\n status: 'failed',\n error: errorMessage,\n durationMs: Date.now() - start,\n });\n }\n }\n\n return results;\n }\n\n // ==========================================================================\n // `emit:` config extraction — close-the-circuit on async/reactive ops.\n //\n // `fetch`, `persist`, `call-service`, `set`, `ref`, `os/watch-*` may carry\n // an `emit:` key in their options object. After the effect's work finishes,\n // the runtime fires the author-configured bus event so downstream state\n // machines can branch on success/failure without stitching async/sequence.\n //\n // See `docs/Almadar_Std_Gaps.md` §3.1 and the emit-config plan for the\n // semantics. The compiled-path shell does the same work in generated JS.\n // ==========================================================================\n\n private extractEmitConfig(rawOpt: unknown): EmitConfig | undefined {\n if (!rawOpt || typeof rawOpt !== 'object' || Array.isArray(rawOpt)) {\n return undefined;\n }\n const obj = rawOpt as { emit?: unknown };\n const emitBlock = obj.emit;\n if (!emitBlock || typeof emitBlock !== 'object' || Array.isArray(emitBlock)) {\n return undefined;\n }\n // Narrow to the known-keys shape so we don't need a Record index.\n // Resolver accepts both snake_case and camelCase; mirror that here.\n const block = emitBlock as {\n success?: unknown;\n failure?: unknown;\n on_change?: unknown;\n onChange?: unknown;\n on_message?: unknown;\n onMessage?: unknown;\n };\n const asStr = (v: unknown): string | undefined =>\n typeof v === 'string' ? v : undefined;\n return {\n success: asStr(block.success),\n failure: asStr(block.failure),\n on_change: asStr(block.on_change) ?? asStr(block.onChange),\n on_message: asStr(block.on_message) ?? asStr(block.onMessage),\n };\n }\n\n /** Build the source metadata stamp for an emit fired from this trait. */\n private sourceStamp(): import('./types.js').RuntimeEvent['source'] {\n return {\n orbital: this.context.orbitalName,\n trait: this.context.traitName,\n transition: this.context.transition,\n };\n }\n\n private emitSuccess(\n emit: EmitConfig | undefined,\n key: 'success' | 'on_change' | 'on_message',\n payload: unknown,\n ): void {\n const eventName = emit?.[key];\n if (eventName) {\n this.handlers.emit(eventName, payload as EventPayload | undefined, this.sourceStamp());\n }\n }\n\n private emitFailure(\n emit: EmitConfig | undefined,\n err: unknown,\n ): void {\n if (!emit?.failure) return;\n const error = err instanceof Error ? err.message : String(err);\n this.handlers.emit(emit.failure, { error } as EventPayload, this.sourceStamp());\n }\n\n /**\n * Narrow the generic emit config into the `os/watch-*` handler surface\n * (only `on_message` + `failure` are meaningful for streaming ops).\n * Returns `undefined` when neither field is set so handlers can test\n * with a single `if (emit)` guard.\n */\n private osEmit(\n emit: EmitConfig | undefined,\n ): import('./types.js').OsEmitConfig | undefined {\n if (!emit || (!emit.on_message && !emit.failure)) return undefined;\n return {\n on_message: emit.on_message,\n failure: emit.failure,\n };\n }\n\n // ==========================================================================\n // Effect Dispatch\n // ==========================================================================\n\n private async dispatch(operator: string, args: unknown[]): Promise<void> {\n switch (operator) {\n // === Universal Effects ===\n\n case 'emit': {\n const event = args[0] as string;\n const payload = args[1] as EventPayload | undefined;\n this.handlers.emit(event, payload, this.sourceStamp());\n break;\n }\n\n case 'set': {\n // Two accepted forms (operators.json declares maxArity:2 → 3-elem canonical;\n // 4-elem historically accepted for back-compat with consumers that resolve\n // the entity id externally):\n // 3-elem: ['set', '@entity.<field>', value] — parse the field out of the path\n // 4-elem: ['set', entityId, field, value] — caller supplies entity id + field\n // +emit: ['set', '@entity.<field>', value, { emit: {...} }]\n // bindings.entity is EntityRow | undefined from @almadar/core —\n // use it directly instead of casting to a record.\n const entity: EntityRow | undefined = this.bindings.entity;\n let entityId: string | undefined;\n let field: string;\n let value: unknown;\n let emitCfg: EmitConfig | undefined;\n\n // Distinguish path-based (`@entity.<field>`) from explicit 4-elem forms.\n // The path form's 3rd arg may carry `emit:` options; the 4-elem\n // form's 4th arg may carry the same. `args.length` alone is\n // ambiguous once `emit:` arrives, so use the path prefix as the\n // discriminator.\n if (typeof args[0] === 'string' && (args[0] as string).startsWith('@entity.')) {\n const path = args[0] as string;\n field = path.slice('@entity.'.length);\n value = args[1];\n emitCfg = this.extractEmitConfig(args[2]);\n entityId = typeof entity?.['id'] === 'string' ? (entity['id'] as string) : undefined;\n // Auto-seed entity.id from @payload.id when the trait's\n // entity context is empty. Row-click patterns (e.g.\n // std-confirmation's REQUEST) open a modal for a specific\n // row, then `(set @entity.pendingId @payload.id)` to\n // remember which one — but the trait's entity starts\n // empty, so the old \"bail with missing-entity-id\" path\n // silently dropped the set and every subsequent\n // `@entity.*` read returned undefined. Compiled path\n // already has this implicit contract (server dispatches\n // with the payload's row identified). Mirror it here so\n // runtime and compiled render the same @entity.* values.\n if (!entityId) {\n const payload = this.bindings.payload;\n const payloadId = payload && typeof payload === 'object' && 'id' in payload\n ? (payload as EventPayload).id\n : undefined;\n if (typeof payloadId === 'string') {\n entityId = payloadId;\n // Seed a minimal entity so follow-up reads in the\n // same transition (and the mirror write below)\n // see a real row.\n if (!entity) {\n this.bindings.entity = { id: payloadId } as EntityRow;\n } else {\n entity['id'] = payloadId;\n }\n effectLog.debug('set:auto-seed-entity-id', { path, id: payloadId });\n } else {\n // No persistable entity id (and the payload\n // doesn't carry one — typical for instance-scoped\n // notification traits whose SHOW payload is\n // `{ message, notificationType }`, and for\n // [runtime] entities like wizards that accumulate\n // scalar state across transitions). Update the\n // in-memory binding AND still dispatch through\n // handlers.set so the per-trait scalar-state\n // wrapper in useTraitStateMachine populates\n // `traitFieldStatesRef` — guards in subsequent\n // sendEvent calls read `@entity.X` from there.\n // Without the handlers.set call, the wrapper\n // never runs and step-skip guards always fail.\n effectLog.debug('set:in-memory-mirror-only', { path });\n if (!entity) {\n this.bindings.entity = {} as EntityRow;\n }\n (this.bindings.entity as EntityRow)[field] =\n value as EntityRow[string];\n this.handlers.set(entityId ?? '', field, value);\n this.emitSuccess(emitCfg, 'success', value);\n break;\n }\n }\n } else {\n entityId = args[0] as string;\n field = args[1] as string;\n value = args[2];\n emitCfg = this.extractEmitConfig(args[3]);\n }\n\n this.handlers.set(entityId, field, value);\n // Mirror the write into the in-memory bindings so later\n // effects in the same transition (and any `when`/`if`\n // guards evaluated against @entity.*) observe the new\n // value. Without this, a transition that increments a\n // counter and then conditionally emits on the counter\n // reads the pre-increment value.\n //\n // Match by id when both sides have one. When the\n // in-memory entity is \"rowless\" (id-less), still mirror —\n // a path-form set against the singleton in-memory entity\n // is the only one that landed here without an id, and\n // dropping the mirror would let the compiled vs runtime\n // paths diverge on the very next render.\n if (entity && (entity['id'] === entityId || !entity['id'])) {\n // EntityRow indexes to FieldValue; the effect's value is\n // runtime-shaped `unknown`. The set handler above already\n // persisted the real type-checked write — this mirror\n // write is for in-memory binding reads only.\n entity[field] = value as EntityRow[string];\n }\n // set is synchronous — fire success immediately with the new value.\n this.emitSuccess(emitCfg, 'success', value);\n break;\n }\n\n case 'persist': {\n const action = args[0] as 'create' | 'update' | 'delete' | 'batch';\n // Optional trailing options object carrying `emit:` — detected\n // by having an `emit` key, never by position (so inline data\n // payloads for create/update are not mistaken for options).\n const last = args[args.length - 1];\n const emitCfg = last && typeof last === 'object' && !Array.isArray(last) && 'emit' in (last as object)\n ? this.extractEmitConfig(last)\n : undefined;\n effectLog.debug('persist:dispatch', {\n action,\n argCount: args.length,\n argTypes: args.map((a) => Array.isArray(a) ? 'array' : a === null ? 'null' : typeof a).join(','),\n traitName: this.context.traitName,\n transition: this.context.transition,\n });\n effectLog.debug('persist:emit-config', {\n action,\n hasEmitCfg: emitCfg !== undefined,\n success: emitCfg?.success,\n failure: emitCfg?.failure,\n });\n try {\n if (action === 'batch') {\n // Batch mode: [\"persist\", \"batch\", [...operations]]\n const operations = args[1] as unknown[];\n await this.handlers.persist('batch', '', { operations } as EntityRow);\n effectLog.debug('persist:success', {\n action,\n entityType: 'batch',\n opCount: operations.length,\n willEmit: emitCfg?.success,\n });\n this.emitSuccess(emitCfg, 'success', operations);\n effectLog.debug('persist:emit-fired', { action, eventName: emitCfg?.success });\n } else {\n const entityType = args[1] as string;\n const data = args[2] as EntityRow | undefined;\n await this.handlers.persist(action, entityType, data);\n // persist() returns void — best available success payload\n // is the data that went in, which matches the interpreted\n // runtime's existing @entity reactivity contract.\n const dataId = typeof data === 'string'\n ? data\n : (data && typeof data === 'object' ? ((data as { id?: unknown }).id as string | undefined) : undefined);\n effectLog.debug('persist:success', {\n action,\n entityType,\n dataId,\n willEmit: emitCfg?.success,\n });\n this.emitSuccess(emitCfg, 'success', data);\n effectLog.debug('persist:emit-fired', { action, eventName: emitCfg?.success });\n }\n } catch (err) {\n effectLog.error('persist:error', {\n action,\n entityType: action === 'batch' ? 'batch' : (args[1] as string),\n error: err instanceof Error ? err.message : String(err),\n });\n this.emitFailure(emitCfg, err);\n throw err;\n }\n break;\n }\n\n case 'call-service': {\n const service = args[0] as string;\n const action = args[1] as string;\n const params = args[2] as ServiceParams | undefined;\n // Optional trailing options object carrying `emit:` at args[3].\n const emitCfg = this.extractEmitConfig(args[3]);\n try {\n const result = await this.handlers.callService(service, action, params);\n this.emitSuccess(emitCfg, 'success', result);\n } catch (err) {\n this.emitFailure(emitCfg, err);\n throw err;\n }\n break;\n }\n\n case 'fetch': {\n if (this.handlers.fetch) {\n const entityType = args[0] as string;\n const rawOpt = args[1];\n // Support both shorthand ['fetch', 'Entity', 'id-value']\n // and full options ['fetch', 'Entity', { id: 'id-value', emit: {...} }]\n const options = typeof rawOpt === 'string'\n ? { id: rawOpt }\n : rawOpt as {\n id?: string;\n filter?: unknown;\n limit?: number;\n offset?: number;\n include?: string[];\n } | undefined;\n const emitCfg = this.extractEmitConfig(rawOpt);\n try {\n const result = await this.handlers.fetch(entityType, options);\n // Authors read fetched records via `@payload.data`. The\n // sibling `totalCount` is the pre-pagination row count so\n // paginating consumers can compute totalPages without a\n // second round-trip. `result === null` means \"not found\";\n // emit success with `data: null, totalCount: 0` so the\n // payload shape stays stable.\n const payload: EventPayload = result\n ? { data: result.rows, totalCount: result.total }\n : { data: null, totalCount: 0 };\n this.emitSuccess(emitCfg, 'success', payload);\n } catch (err) {\n this.emitFailure(emitCfg, err);\n throw err;\n }\n } else {\n this.logUnsupported('fetch');\n }\n break;\n }\n\n // === Resource Operators ===\n\n case 'ref': {\n const refEntityType = args[0] as string;\n const rawRefOpt = args[1];\n const refOptions = typeof rawRefOpt === 'string'\n ? { id: rawRefOpt }\n : rawRefOpt as {\n id?: string;\n filter?: unknown;\n limit?: number;\n offset?: number;\n include?: string[];\n } | undefined;\n const refEmitCfg = this.extractEmitConfig(rawRefOpt);\n try {\n let result: FetchResult | null = null;\n if (this.handlers.ref) {\n result = await this.handlers.ref(refEntityType, refOptions);\n } else if (this.handlers.fetch) {\n result = await this.handlers.fetch(refEntityType, refOptions);\n } else {\n this.logUnsupported('ref');\n }\n // Interpreted runtime fires `on_change` once on the initial\n // subscribe. Match fetch's payload shape so paginating\n // subscribers receive the same {data, totalCount} contract.\n const refPayload: EventPayload = result\n ? { data: result.rows, totalCount: result.total }\n : { data: null, totalCount: 0 };\n this.emitSuccess(refEmitCfg, 'on_change', refPayload);\n } catch (err) {\n this.emitFailure(refEmitCfg, err);\n throw err;\n }\n break;\n }\n\n case 'deref': {\n const derefEntityType = args[0] as string;\n const rawDerefOpt = args[1];\n const derefOptions = typeof rawDerefOpt === 'string'\n ? { id: rawDerefOpt }\n : rawDerefOpt as {\n id?: string;\n filter?: unknown;\n } | undefined;\n if (this.handlers.deref) {\n await this.handlers.deref(derefEntityType, derefOptions);\n } else if (this.handlers.fetch) {\n await this.handlers.fetch(derefEntityType, derefOptions);\n } else {\n this.logUnsupported('deref');\n }\n break;\n }\n\n case 'swap!': {\n if (this.handlers.swap) {\n const swapEntityType = args[0] as string;\n const swapEntityId = args[1] as string;\n const swapTransform = args[2];\n await this.handlers.swap(swapEntityType, swapEntityId, swapTransform);\n } else {\n this.logUnsupported('swap!');\n }\n break;\n }\n\n case 'watch': {\n if (this.handlers.watch) {\n const watchEntityType = args[0] as string;\n const watchOptions = args[1] as { id?: string; filter?: unknown; limit?: number } | undefined;\n this.handlers.watch(watchEntityType, watchOptions);\n } else {\n // Watch is a no-op on server - just log in debug mode\n if (this.debug) {\n effectLog.debug('watch:noop-server', { entityType: typeof args[0] === 'string' ? args[0] : undefined });\n }\n }\n break;\n }\n\n case 'atomic': {\n if (this.handlers.atomic) {\n const atomicEffects = args as unknown[];\n await this.handlers.atomic(atomicEffects);\n } else {\n // Fallback: execute inner effects sequentially\n const atomicEffects = args as unknown[];\n for (const inner of atomicEffects) {\n await this.execute(inner);\n }\n }\n break;\n }\n\n case 'spawn': {\n if (this.handlers.spawn) {\n const entityType = args[0] as string;\n const props = args[1] as EntityRow | undefined;\n this.handlers.spawn(entityType, props);\n } else {\n this.logUnsupported('spawn');\n }\n break;\n }\n\n case 'despawn': {\n if (this.handlers.despawn) {\n const entityId = args[0] as string;\n this.handlers.despawn(entityId);\n } else {\n this.logUnsupported('despawn');\n }\n break;\n }\n\n case 'log': {\n if (this.handlers.log) {\n const message = args[0] as string;\n const level = args[1] as 'log' | 'warn' | 'error' | undefined;\n const data = args[2];\n this.handlers.log(message, level, data);\n } else {\n effectLog.debug('log:fallback', () => ({\n message: typeof args[0] === 'string' ? args[0] : JSON.stringify(args[0] ?? null),\n extraJson: JSON.stringify(args.slice(1)),\n }));\n }\n break;\n }\n\n // === Client-Only Effects ===\n\n case 'render-ui':\n case 'render': {\n if (this.handlers.renderUI) {\n const slot = args[0] as string;\n // The render-ui SExpr's pattern slot carries either a\n // resolved `PatternConfig` (post-interpolation) or `null`\n // when the trait is clearing the slot. Anything else is\n // a schema bug — runtime keeps the type narrow so\n // downstream renderers don't have to re-validate.\n const patternRaw = args[1];\n const pattern: PatternConfig | null =\n patternRaw === null\n ? null\n : (patternRaw as PatternConfig);\n const props = args[2] as PatternProps | undefined;\n const priority = args[3] as number | undefined;\n this.handlers.renderUI(slot, pattern, props, priority);\n } else {\n this.logUnsupported('render-ui');\n }\n break;\n }\n\n case 'navigate': {\n if (this.handlers.navigate) {\n const path = args[0] as string;\n const params = args[1] as { [key: string]: string } | undefined;\n this.handlers.navigate(path, params);\n } else {\n this.logUnsupported('navigate');\n }\n break;\n }\n\n case 'notify': {\n if (this.handlers.notify) {\n const message = args[0] as string;\n const type = (args[1] as 'success' | 'error' | 'warning' | 'info') || 'info';\n this.handlers.notify(message, type);\n } else {\n const category = typeof args[1] === 'string' ? args[1] : 'info';\n const message = typeof args[0] === 'string' ? args[0] : JSON.stringify(args[0] ?? null);\n effectLog.info('notify', { category, message });\n }\n break;\n }\n\n // === Compound Effects ===\n\n case 'do': {\n // Sequential execution of nested effects\n const nestedEffects = args as unknown[];\n for (const nested of nestedEffects) {\n await this.execute(nested);\n }\n break;\n }\n\n case 'when': {\n // Conditional effect: ['when', condition, thenEffect, elseEffect?]\n // Only the condition needs binding resolution — then/else are\n // nested effects that will be resolved when execute() recurses.\n const ctx = createContextFromBindings(this.bindings, false, this.contextExtensions);\n const condition = interpolateValue(args[0], ctx);\n const thenEffect = args[1];\n const elseEffect = args[2];\n\n if (condition) {\n await this.execute(thenEffect);\n } else if (elseEffect) {\n await this.execute(elseEffect);\n }\n break;\n }\n\n // OS trigger operators (server-side only)\n //\n // Each may carry `emit:` inside a trailing options object. The\n // executor extracts it and passes it to the handler so the\n // hardcoded fallback name (e.g. OS_CRON_FIRE) is replaced by the\n // author-configured event.\n case 'os/watch-files': {\n if (this.handlers.osWatchFiles) {\n const glob = args[0] as string;\n // options may carry emit: — strip it before passing to the handler.\n const rawOptions = args[1] as\n | { recursive?: boolean; debounce?: number; emit?: unknown }\n | undefined;\n const emitCfg = this.extractEmitConfig(rawOptions);\n const options = rawOptions\n ? { recursive: rawOptions.recursive, debounce: rawOptions.debounce }\n : {};\n this.handlers.osWatchFiles(glob, options, this.osEmit(emitCfg));\n } else {\n this.logUnsupported('os/watch-files');\n }\n break;\n }\n case 'os/watch-process': {\n if (this.handlers.osWatchProcess) {\n const emitCfg = this.extractEmitConfig(args[2]);\n this.handlers.osWatchProcess(\n args[0] as string,\n args[1] as string | undefined,\n this.osEmit(emitCfg),\n );\n } else {\n this.logUnsupported('os/watch-process');\n }\n break;\n }\n case 'os/watch-port': {\n if (this.handlers.osWatchPort) {\n const emitCfg = this.extractEmitConfig(args[2]);\n this.handlers.osWatchPort(\n args[0] as number,\n (args[1] as string) ?? 'tcp',\n this.osEmit(emitCfg),\n );\n } else {\n this.logUnsupported('os/watch-port');\n }\n break;\n }\n case 'os/watch-http': {\n if (this.handlers.osWatchHttp) {\n const emitCfg = this.extractEmitConfig(args[2]);\n this.handlers.osWatchHttp(\n args[0] as string,\n args[1] as string | undefined,\n this.osEmit(emitCfg),\n );\n } else {\n this.logUnsupported('os/watch-http');\n }\n break;\n }\n case 'os/watch-cron': {\n if (this.handlers.osWatchCron) {\n const emitCfg = this.extractEmitConfig(args[1]);\n this.handlers.osWatchCron(args[0] as string, this.osEmit(emitCfg));\n } else {\n this.logUnsupported('os/watch-cron');\n }\n break;\n }\n case 'os/watch-signal': {\n if (this.handlers.osWatchSignal) {\n const emitCfg = this.extractEmitConfig(args[1]);\n this.handlers.osWatchSignal(args[0] as string, this.osEmit(emitCfg));\n } else {\n this.logUnsupported('os/watch-signal');\n }\n break;\n }\n case 'os/watch-env': {\n if (this.handlers.osWatchEnv) {\n const emitCfg = this.extractEmitConfig(args[1]);\n this.handlers.osWatchEnv(args[0] as string, this.osEmit(emitCfg));\n } else {\n this.logUnsupported('os/watch-env');\n }\n break;\n }\n case 'os/debounce': {\n if (this.handlers.osDebounce) {\n this.handlers.osDebounce(args[0] as number, args[1] as string);\n } else {\n this.logUnsupported('os/debounce');\n }\n break;\n }\n\n // === Composition operators (compile-time, optional) ===\n\n case 'behavior/compose': {\n if (this.handlers.composeBehaviors) {\n const config = args[0] as { appName: string; orbitals: unknown[]; layoutStrategy?: string; eventWiring?: unknown[]; entityMappings?: Record<string, string> };\n await this.handlers.composeBehaviors(config);\n } else {\n this.logUnsupported('behavior/compose');\n }\n break;\n }\n\n case 'behavior/wire': {\n if (this.handlers.applyEventWiring) {\n const wireOrbitals = args[0] as unknown[];\n const wireEntries = args[1] as unknown[];\n await this.handlers.applyEventWiring(wireOrbitals, wireEntries);\n } else {\n this.logUnsupported('behavior/wire');\n }\n break;\n }\n\n case 'behavior/detect-layout': {\n if (this.handlers.detectLayoutStrategy) {\n const layoutOrbitals = args[0] as unknown[];\n const layoutWiring = args[1] as unknown[] | undefined;\n await this.handlers.detectLayoutStrategy(layoutOrbitals, layoutWiring);\n } else {\n this.logUnsupported('behavior/detect-layout');\n }\n break;\n }\n\n case 'behavior/pipe': {\n if (this.handlers.pipeBehaviors) {\n const [pipeSeed, ...pipeSteps] = args;\n await this.handlers.pipeBehaviors(\n pipeSeed,\n ...(pipeSteps as Array<(prev: unknown) => unknown>),\n );\n } else {\n this.logUnsupported('behavior/pipe');\n }\n break;\n }\n\n default: {\n if (this.debug) {\n effectLog.warn('unknown-operator', { operator });\n }\n }\n }\n }\n\n private logUnsupported(operator: string): void {\n if (this.debug) {\n effectLog.warn('unsupported-on-platform', { operator });\n }\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a minimal EffectExecutor for testing or simple scenarios.\n */\nexport function createTestExecutor(\n overrides: Partial<EffectHandlers> = {}\n): EffectExecutor {\n const noopAsync = async () => { };\n const noop = () => { };\n\n return new EffectExecutor({\n handlers: {\n emit: overrides.emit ?? noop,\n persist: overrides.persist ?? noopAsync,\n set: overrides.set ?? noop,\n callService: overrides.callService ?? (async () => ({})),\n ...overrides,\n },\n bindings: {},\n context: {\n traitName: 'TestTrait',\n state: 'test',\n transition: 'test->test',\n },\n debug: true,\n });\n}\n","/**\n * PayloadValidator - Cross-Trait Payload Shape Validation (RCG-10)\n *\n * Validates that listener `payloadMapping` references match the emitter's\n * payload field names. Catches mismatches like `@payload.task_id` when the\n * emitter defines `taskId`.\n *\n * @packageDocumentation\n */\n\nimport type { PayloadField } from '@almadar/core';\nimport type { TraitDefinition, EventPayload } from './types.js';\n\n// ============================================================================\n// Per-Request Payload Validation\n// ============================================================================\n\n/**\n * Per-event payload-validation error. Returned by `validateEventPayload`\n * when a request body doesn't match the trait's listens schema for the\n * dispatched event. Caller (HTTP handler in either path) translates\n * this into a 400 response.\n */\nexport interface PayloadValidationFailure {\n readonly event: string;\n readonly field: string;\n readonly reason: 'missing' | 'null' | 'wrong-type';\n readonly expectedType?: string;\n}\n\n/**\n * Validate an incoming event payload against its trait's declared\n * `stateMachine.events[i].payloadSchema`. Currently checks the\n * `required: true` flag against undefined/null values — i.e. enforces\n * the `!` author marker at the API boundary so the persist effect\n * never sees a missing-but-required field.\n *\n * Returns an empty array if the payload is valid; one entry per\n * violation otherwise. Pass through if the event has no schema\n * (e.g. INIT, untyped emits) — coverage walks of unschemaed events\n * stay legal.\n *\n * Both the runtime path (`OrbitalServerRuntime.processOrbitalEvent`)\n * and the compiled-path generated handlers call this with the same\n * arguments so guards behave identically across the two paths.\n *\n * Uses `@almadar/core`'s `PayloadField` directly — that's the type\n * the IR's `Event.payloadSchema` carries (open `type: string`,\n * matching the Rust validator's acceptance of entity-name references\n * like `ListItem`). No parallel runtime type.\n */\nexport function validateEventPayload(\n eventKey: string,\n payload: EventPayload | undefined,\n schema: ReadonlyArray<PayloadField> | undefined,\n): PayloadValidationFailure[] {\n if (!schema || schema.length === 0) return [];\n const failures: PayloadValidationFailure[] = [];\n for (const field of schema) {\n if (!field.required) continue;\n const value = payload?.[field.name];\n if (value === undefined) {\n failures.push({ event: eventKey, field: field.name, reason: 'missing', expectedType: field.type });\n continue;\n }\n if (value === null) {\n failures.push({ event: eventKey, field: field.name, reason: 'null', expectedType: field.type });\n }\n }\n return failures;\n}\n\n/**\n * Format a validation failure into a human-readable error string for\n * the API response body.\n */\nexport function formatPayloadValidationError(failures: ReadonlyArray<PayloadValidationFailure>): string {\n if (failures.length === 0) return '';\n const parts = failures.map((f) =>\n `${f.field} (${f.reason}${f.expectedType ? `, expected ${f.expectedType}` : ''})`,\n );\n return `Payload validation failed for event '${failures[0].event}': ${parts.join('; ')}`;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Emit declaration from a trait.\n */\ninterface EmitDeclaration {\n event: string;\n payloadSchema?: Array<{ name: string; type?: string }>;\n}\n\n/**\n * Payload validation error.\n */\nexport interface PayloadMismatch {\n /** Listening trait name */\n listenerTrait: string;\n /** Emitting trait name */\n emitterTrait: string;\n /** Event name */\n event: string;\n /** The payload field referenced in the listener's payloadMapping */\n referencedField: string;\n /** Available fields from the emitter's payload declaration */\n availableFields: string[];\n}\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/**\n * Validate that all listener payloadMapping references match emitter payload fields.\n *\n * @param traits - All trait definitions in the schema\n * @param emits - Emit declarations per trait (traitName → EmitDeclaration[])\n * @returns Array of payload mismatches (empty if all valid)\n *\n * @example\n * ```ts\n * const mismatches = validatePayloadShapes(traits, emitsMap);\n * for (const m of mismatches) {\n * log.warn('payload-mismatch', {\n * listenerTrait: m.listenerTrait,\n * emitterTrait: m.emitterTrait,\n * event: m.event,\n * referencedField: m.referencedField,\n * availableFields: m.availableFields.join(','),\n * });\n * }\n * ```\n */\nexport function validatePayloadShapes(\n traits: TraitDefinition[],\n emits: Map<string, EmitDeclaration[]>\n): PayloadMismatch[] {\n const mismatches: PayloadMismatch[] = [];\n\n // Build event→emitter lookup: event name → { traitName, payload fields }\n const emitIndex = new Map<string, { traitName: string; fields: string[] }>();\n for (const [traitName, declarations] of emits) {\n for (const decl of declarations) {\n const fields = decl.payloadSchema?.map((p) => p.name) ?? [];\n emitIndex.set(decl.event, { traitName, fields });\n }\n }\n\n // Check each listener's payloadMapping references\n for (const trait of traits) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n const emitter = emitIndex.get(listener.event);\n if (!emitter) continue; // No emitter found — separate validation concern\n\n if (!listener.payloadMapping) continue;\n\n // Extract @payload.X references from payloadMapping values\n const payloadRefs = extractPayloadReferences(listener.payloadMapping);\n\n for (const ref of payloadRefs) {\n if (!emitter.fields.includes(ref)) {\n mismatches.push({\n listenerTrait: trait.name,\n emitterTrait: emitter.traitName,\n event: listener.event,\n referencedField: ref,\n availableFields: emitter.fields,\n });\n }\n }\n }\n }\n\n return mismatches;\n}\n\n/**\n * Extract payload field references from a payloadMapping object.\n * Finds all `@payload.fieldName` patterns and returns the field names.\n */\nfunction extractPayloadReferences(mapping: EventPayload): string[] {\n const refs: string[] = [];\n\n function collect(value: unknown): void {\n if (typeof value === 'string') {\n const match = value.match(/^@payload\\.(\\w+)$/);\n if (match) {\n refs.push(match[1]);\n }\n } else if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n value.forEach(collect);\n } else {\n Object.values(value as EventPayload).forEach(collect);\n }\n }\n }\n\n Object.values(mapping).forEach(collect);\n return [...new Set(refs)];\n}\n\n/**\n * Build emit declarations map from trait definitions.\n * Extracts emits from transitions that use the `emit` effect.\n *\n * Note: This is a heuristic — it parses emit effects from transitions.\n * For full accuracy, the schema should include explicit `emits` declarations.\n */\nexport function buildEmitsFromTraits(\n traits: TraitDefinition[],\n explicitEmits?: Map<string, EmitDeclaration[]>\n): Map<string, EmitDeclaration[]> {\n // Start with explicit emits if provided\n const result = new Map<string, EmitDeclaration[]>(explicitEmits ?? []);\n\n for (const trait of traits) {\n if (result.has(trait.name)) continue; // Explicit declarations take precedence\n\n const emitDecls: EmitDeclaration[] = [];\n for (const transition of trait.transitions) {\n if (!transition.effects) continue;\n\n for (const effect of transition.effects) {\n if (!Array.isArray(effect)) continue;\n if (effect[0] === 'emit' && typeof effect[1] === 'string') {\n const event = effect[1] as string;\n // Payload value at the emit call site — used to\n // infer a `payloadSchema` from the runtime literal\n // when an explicit declaration isn't supplied.\n const payloadObj = effect[2] as EventPayload | undefined;\n const payloadSchema = payloadObj\n ? Object.keys(payloadObj).map((name) => ({ name }))\n : undefined;\n\n // Avoid duplicates\n if (!emitDecls.some((d) => d.event === event)) {\n emitDecls.push({ event, payloadSchema });\n }\n }\n }\n }\n\n if (emitDecls.length > 0) {\n result.set(trait.name, emitDecls);\n }\n }\n\n return result;\n}\n","/**\n * MockPersistenceAdapter - In-memory data store with faker-based mock generation\n *\n * Provides a stateful mock data layer that implements PersistenceAdapter.\n * Uses @faker-js/faker for realistic data generation based on field types.\n *\n * @packageDocumentation\n */\n\nimport { faker } from '@faker-js/faker';\nimport type { PersistenceAdapter } from './OrbitalServerRuntime.js';\nimport type { EntityRow } from './types.js';\nimport type { EntityField, FieldValue } from '@almadar/core';\nimport { createLogger } from '@almadar/logger';\n\nconst mockLog = createLogger('almadar:runtime:mock');\n\n/** Default seed used when callers don't provide one. Fixed so re-seeds\n * during hermetic-frame mode produce identical row data each time —\n * matching the compiled path's compile-baked-in mock semantics. */\nconst DEFAULT_MOCK_SEED = 42;\n\n/** Return a deterministic stock-photo URL from Picsum Photos.\n * Free, no API key, seed-stable so the same entity+field always renders\n * the same image across reruns. Used for fields declaring\n * `format: \"image\" | \"avatar\" | \"thumbnail\"` and a few well-known field\n * names (`imageUrl`, `photo`, etc.). */\nfunction picsumUrl(entityName: string, fieldName: string, width = 400, height = 400): string {\n const seed = `${entityName}-${fieldName}-${faker.number.int({ min: 0, max: 1000 })}`;\n return `https://picsum.photos/seed/${encodeURIComponent(seed)}/${width}/${height}`;\n}\n/** Reference timestamp used as `now` for seeded rows. Deterministic so\n * diff observers don't see all rows as \"changed\" between frames just\n * because the wallclock advanced. */\nconst SEED_REFERENCE_TIMESTAMP = '2024-01-01T00:00:00.000Z';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n// EntityField is the canonical discriminated union from @almadar/core\n// (re-exported here so existing consumers don't break). All variant-specific\n// fields (`items`, `properties`, `relation`, `values`, `format`) live on the\n// canonical type — no local shadow shape.\nexport type { EntityField };\n\n/** EntityField narrowed to require `name`. The canonical type makes `name`\n * optional (it's omitted on nested `items` / `properties` descriptors), but\n * the seed loop iterates by name. Callers filter for name-having fields\n * at the registerEntity boundary. */\ntype NamedEntityField = EntityField & { name: string };\n\nexport interface EntitySchema {\n name: string;\n fields: NamedEntityField[];\n /** Pre-authored instance data from the schema (used instead of faker generation) */\n seedData?: EntityRow[];\n}\n\nexport interface MockPersistenceConfig {\n /** Seed for deterministic generation */\n seed?: number;\n /** Default number of records to generate per entity */\n defaultSeedCount?: number;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n// ============================================================================\n// MockPersistenceAdapter\n// ============================================================================\n\n/**\n * In-memory mock data store with CRUD operations and faker-based seeding.\n */\nexport class MockPersistenceAdapter implements PersistenceAdapter {\n private stores: Map<string, Map<string, EntityRow>> = new Map();\n private schemas: Map<string, EntitySchema> = new Map();\n private idCounters: Map<string, number> = new Map();\n private config: MockPersistenceConfig;\n\n constructor(config: MockPersistenceConfig = {}) {\n this.config = {\n defaultSeedCount: 6,\n debug: false,\n ...config,\n // Apply default after spread so an undefined `seed` in the\n // input doesn't overwrite the default.\n seed: config.seed ?? DEFAULT_MOCK_SEED,\n };\n faker.seed(this.config.seed);\n mockLog.debug('mock:adapter:init', { seed: this.config.seed });\n }\n\n /** Re-anchor faker's PRNG to the configured seed. Called before every\n * re-seed loop so identical reseed sequences produce identical rows\n * (timestamps + faker-generated fields). Without this, the first\n * reseed produces row set A, the second produces row set B, and\n * diff observers see all rows as \"changed\" between frames. */\n resetFakerSeed(): void {\n if (this.config.seed !== undefined) {\n faker.seed(this.config.seed);\n }\n }\n\n // ============================================================================\n // Store Management\n // ============================================================================\n\n private getStore(entityName: string): Map<string, EntityRow> {\n const normalized = entityName.toLowerCase();\n if (!this.stores.has(normalized)) {\n this.stores.set(normalized, new Map());\n this.idCounters.set(normalized, 0);\n }\n return this.stores.get(normalized)!;\n }\n\n private nextId(entityName: string): string {\n const normalized = entityName.toLowerCase();\n const counter = (this.idCounters.get(normalized) ?? 0) + 1;\n this.idCounters.set(normalized, counter);\n return `${this.capitalizeFirst(entityName)} Id ${counter}`;\n }\n\n // ============================================================================\n // Schema & Seeding\n // ============================================================================\n\n /**\n * Register an entity schema and seed mock data.\n * If the schema has seedData, those instances are used directly.\n * Otherwise, random mock data is generated with faker.\n */\n registerEntity(schema: EntitySchema, seedCount?: number): void {\n const normalized = schema.name.toLowerCase();\n this.schemas.set(normalized, schema);\n\n if (schema.seedData && schema.seedData.length > 0) {\n // Seed with actual pre-authored instances\n this.seedFromInstances(schema.name, schema.seedData);\n } else {\n const count = seedCount ?? this.config.defaultSeedCount ?? 6;\n this.seed(schema.name, schema.fields, count);\n }\n\n // Phase 9.6.A: re-link relation fields across ALL registered entities.\n // Relations may point at entities registered before OR after this one;\n // a global pass after each registration is cheap (O(rows × fields)) and\n // keeps relation arrays in sync with whichever stores currently exist.\n this.linkRelationFields();\n }\n\n /**\n * Walk every row of every registered entity and fill in `type: \"relation\"`\n * fields with real IDs from the target entity's store. Without this pass,\n * relation fields stay as placeholder `[]` / `\"\"` and `populateRelations`\n * in OrbitalServerRuntime has nothing to hydrate — catalog/preview demos\n * of nested-tree atoms (e.g. std-thread-comments-linear with ThreadPost.\n * replies → [ThreadPost]) render empty reply cards.\n *\n * For self-referential relations, each row gets 2–4 sibling IDs (excluding\n * self). For cross-entity relations, IDs are picked from the target store.\n * The runtime caps recursion at depth=2 in `populateRelations`, so\n * grandparent-of-self cycles render two levels deep then stop.\n */\n linkRelationFields(): void {\n for (const [normalizedName, schema] of this.schemas) {\n const store = this.stores.get(normalizedName);\n if (!store) continue;\n // Narrow to RelationEntityField (with required `relation` config) via the\n // canonical discriminator. The `f is NamedEntityField & { type: \"relation\" }`\n // predicate is what makes `field.relation` typed in the loop below — no\n // record-access casts, no unknown narrowing.\n const relationFields = schema.fields.filter(\n (f): f is NamedEntityField & { type: 'relation'; relation: { entity: string; cardinality?: string; field?: string } } =>\n f.type === 'relation',\n );\n if (relationFields.length === 0) continue;\n for (const row of store.values()) {\n for (const field of relationFields) {\n const targetStore = this.stores.get(field.relation.entity.toLowerCase());\n if (!targetStore || targetStore.size === 0) continue;\n // Eligible IDs: every id in the target store, minus this row's own id\n // (only when target === self entity) so a comment doesn't list itself\n // as its own reply.\n const selfId = row['id'] as string | undefined;\n const sameStore = targetStore === store;\n const eligible: string[] = [];\n for (const id of targetStore.keys()) {\n if (sameStore && id === selfId) continue;\n eligible.push(id);\n }\n if (eligible.length === 0) continue;\n const cardinality = field.relation.cardinality ?? 'many';\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n row[field.name] = faker.helpers.arrayElement(eligible) as FieldValue;\n } else {\n // many / one-to-many / many-to-many → pick 2–4 IDs\n const pickCount = Math.min(eligible.length, faker.number.int({ min: 2, max: 4 }));\n row[field.name] = faker.helpers\n .shuffle(eligible.slice())\n .slice(0, pickCount) as FieldValue;\n }\n }\n }\n }\n }\n\n /**\n * Seed an entity with pre-authored instance data.\n */\n seedFromInstances(entityName: string, instances: EntityRow[]): void {\n const store = this.getStore(entityName);\n\n if (this.config.debug) {\n mockLog.debug('seeding-from-instances', { count: instances.length, entity: entityName });\n }\n\n for (const instance of instances) {\n const id = (instance.id as string) || this.nextId(entityName);\n const item: EntityRow = {\n ...instance,\n id,\n createdAt: instance.createdAt as string || SEED_REFERENCE_TIMESTAMP,\n updatedAt: SEED_REFERENCE_TIMESTAMP,\n };\n store.set(id, item);\n }\n }\n\n /**\n * Seed an entity with mock data.\n */\n seed(entityName: string, fields: EntityField[], count: number): void {\n const store = this.getStore(entityName);\n const normalized = entityName.toLowerCase();\n\n if (this.config.debug) {\n mockLog.debug('seeding', { count, entity: entityName });\n }\n\n const generated: Array<{ id: string; updatedAt: string }> = [];\n for (let i = 0; i < count; i++) {\n const item = this.generateMockItem(normalized, entityName, fields, i + 1);\n store.set(item.id as string, item);\n generated.push({\n id: item.id as string,\n updatedAt: typeof item.updatedAt === 'string' ? item.updatedAt : '',\n });\n }\n mockLog.debug('mock:seed', () => ({ entityName, count, idsAndTimestamps: JSON.stringify(generated) }));\n }\n\n /**\n * Generate a single mock item based on field schemas.\n */\n private generateMockItem(\n normalizedName: string,\n entityName: string,\n fields: EntityField[],\n index: number\n ): EntityRow {\n const id = this.nextId(entityName);\n // Deterministic timestamps: keep updatedAt anchored at the seed\n // reference so re-seeded rows compare identically across hermetic\n // frames. createdAt uses faker (also deterministic with seed) to\n // simulate a realistic creation date.\n const item: EntityRow = {\n id,\n createdAt: faker.date.past({ years: 1 }).toISOString(),\n updatedAt: SEED_REFERENCE_TIMESTAMP,\n };\n\n for (const field of fields) {\n // Skip nameless nested-descriptor fields (canonical EntityField allows\n // `name?` on inner items/properties; the top-level seed loop only\n // iterates real named fields).\n if (!field.name) continue;\n if (field.name === 'id' || field.name === 'createdAt' || field.name === 'updatedAt') {\n continue;\n }\n item[field.name] = this.generateFieldValue(entityName, field, index);\n }\n\n return item;\n }\n\n /** Max nesting depth for recursive array/object schemas (e.g. a Comment\n * entity whose `replies: [Comment]` field references itself). Without\n * this guard, generateArrayValue → generateObjectValue → generateArray…\n * recurses until stack overflow on every recursive type. Three levels\n * is enough to render a useful thread depth (parent → reply → sub-reply)\n * in catalog/preview without blowing the fixture. */\n private static MAX_NESTED_DEPTH = 3;\n\n /**\n * Generate a mock value for a field based on its schema.\n */\n private generateFieldValue(entityName: string, field: EntityField, index: number, depth = 0): FieldValue {\n // Mock-seed default policy: numeric fields preserve their declared\n // default (so `tokenCount : number = 0` stays 0), every other type\n // falls through to faker. Mirrors the gate in the compiled-path\n // codegen (`backend.rs:generate_seed_mock_data`). String/enum/bool/\n // date placeholder defaults like `name = \"\"` would otherwise paint\n // every seeded row with the same literal.\n const fieldTypeLc = field.type.toLowerCase();\n // `values` is on ScalarEntityField + EnumEntityField only. Narrow via\n // the discriminator instead of casting to `unknown` so we keep canonical\n // type safety end-to-end.\n const values = 'values' in field ? field.values : undefined;\n mockLog.debug('field:generate', {\n entityName,\n fieldName: field.name,\n fieldType: fieldTypeLc,\n hasValues: !!values?.length,\n valuesCount: values?.length ?? 0,\n values: values?.length ? values.join(',') : null,\n format: field.format ?? null,\n hasDefault: field.default !== undefined,\n });\n const isNumeric = fieldTypeLc === 'number' || fieldTypeLc === 'integer';\n if (isNumeric && field.default !== undefined) {\n return field.default as FieldValue;\n }\n\n // Always populate seeded fields. The previous 80% heuristic dropped\n // ~20% of optional fields to null to \"exercise the UI's empty path\",\n // but that flaked runtime-verify — a seeded row could silently come\n // out with `name=null` and the DataGrid would render a blank-title\n // card that didn't match any test expectation. Deterministic seed\n // data is more valuable than random-nil stress; callers who want\n // nil-testing should construct that scenario explicitly.\n //\n // Switch on the canonical `field.type` (not the lowercased local var) so\n // each case narrows `field` to its discriminated-union variant — e.g.\n // `case 'array'` gives us `ArrayEntityField` with typed `items`, `case\n // 'relation'` gives `RelationEntityField` with typed `relation`. No\n // `unknown`/record-typed access needed.\n switch (field.type) {\n case 'string':\n return this.generateStringValue(entityName, field, index);\n\n case 'number':\n return faker.number.int({ min: 0, max: 100 });\n\n case 'boolean':\n return faker.datatype.boolean();\n\n case 'date':\n case 'timestamp':\n case 'datetime':\n return this.generateDateValue(field);\n\n case 'enum':\n // After narrowing, field is EnumEntityField with required values. The\n // optional check is defensive in case canonical changes shape.\n if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n return null;\n\n case 'relation':\n // Placeholder — filled in by `linkRelationFields` after the seed pass\n // (target entity's store may not exist yet at field-generation time).\n // many-cardinality → empty array slot; one-cardinality → empty string slot.\n return field.relation?.cardinality === 'one' ? '' : [];\n\n case 'array':\n return this.generateArrayValue(entityName, field, index, depth);\n case 'object':\n return this.generateObjectValue(entityName, field, index, depth);\n\n default:\n // Treat unknown types as strings\n return this.generateStringValue(entityName, field, index);\n }\n }\n\n /**\n * Generate 3–5 elements for an array field. When `items` describes an\n * object shape (the common case for `tiles: [KpiTile]`-style declarations),\n * each element is recursively mock-generated against `items.properties`.\n * When `items` describes a scalar, each element uses the scalar generator\n * for that type. When `items` is missing (legacy `[object] = []` declarations\n * with no element schema), falls back to an empty array — the historical\n * behavior.\n */\n private generateArrayValue(entityName: string, field: EntityField, index: number, depth = 0): FieldValue {\n if (field.type !== 'array' || !field.items) return [];\n // Stop recursing on self-referential types (e.g. Comment.replies: [Comment]).\n // Without this guard, faker would loop forever materialising replies-of-\n // replies-of-replies until the call stack blows.\n if (depth >= MockPersistenceAdapter.MAX_NESTED_DEPTH) return [];\n const count = faker.number.int({ min: 3, max: 5 });\n const out: FieldValue[] = [];\n const elementName = field.name ?? 'item';\n for (let i = 0; i < count; i++) {\n // Synthesize a child EntityField for the element. Each iteration gets a\n // fresh `index` so per-element string generators don't repeat verbatim.\n // The spread preserves the discriminator on `items` (string/object/array/…)\n // so generateFieldValue's switch narrows correctly.\n const elementField = {\n ...field.items,\n name: `${elementName}[${i}]`,\n } as EntityField;\n out.push(this.generateFieldValue(entityName, elementField, index * 10 + i, depth + 1));\n }\n return out as FieldValue;\n }\n\n /**\n * Generate a single object value with each declared property populated\n * by faker. Walks `properties` and recursively delegates to\n * `generateFieldValue` per property so nested objects-of-arrays-of-objects\n * compose correctly.\n */\n private generateObjectValue(entityName: string, field: EntityField, index: number, depth = 0): FieldValue {\n if (!field.properties) return null;\n if (depth >= MockPersistenceAdapter.MAX_NESTED_DEPTH) return null;\n const out: Record<string, FieldValue> = {};\n for (const [propName, propField] of Object.entries(field.properties)) {\n // The nested schema may omit `name` (it's implied by the parent key)\n // — synthesize one so downstream string generators that read `field.name`\n // have something to log against.\n const childField = { ...propField, name: propName } as EntityField;\n out[propName] = this.generateFieldValue(entityName, childField, index, depth + 1);\n }\n return out as FieldValue;\n }\n\n /**\n * Generate a string value based on the field's declared schema metadata.\n * Reads `values` (enum) first, then `format` (email/url/phone/uuid/date/\n * datetime), then falls back to faker.lorem.words. No field-name heuristics\n * — the schema is the source of truth. If a caller needs a real email, they\n * declare `format: \"email\"`; if they need an enum, they declare `values: [...]`.\n */\n private generateStringValue(entityName: string, field: EntityField, _index: number): string {\n // `values` exists on Scalar + Enum variants only. Narrow via canonical\n // discriminator so the access is type-safe without a record cast.\n const values = 'values' in field ? field.values : undefined;\n if (values && values.length > 0) {\n return faker.helpers.arrayElement(values);\n }\n // `field.name` is optional on the canonical EntityField (nested item/\n // property descriptors omit it). Top-level seed loop filters those out,\n // so name is set here in practice — but the type system needs the\n // explicit fallback to satisfy strict-null checks.\n const fieldName = field.name ?? 'field';\n switch (field.format) {\n case 'email': return faker.internet.email();\n case 'url': return faker.internet.url();\n case 'phone': return faker.phone.number();\n case 'uuid': return faker.string.uuid();\n case 'date': return faker.date.recent().toISOString().split('T')[0]!;\n case 'datetime': return faker.date.recent().toISOString();\n case 'image':\n case 'avatar':\n case 'thumbnail':\n return picsumUrl(entityName, fieldName);\n }\n // Field-name fallback for image-bearing string fields. Authors who haven't\n // (yet) annotated `format: \"image\"` still get a real photo from Picsum\n // rather than a `faker.lorem.words(2)` sentence that breaks data-grid\n // imageField rendering. Heuristic is narrow + clearly named.\n const lname = fieldName.toLowerCase();\n if (\n lname === 'image' ||\n lname === 'imageurl' ||\n lname === 'image_url' ||\n lname === 'photo' ||\n lname === 'photourl' ||\n lname === 'photo_url' ||\n lname === 'avatar' ||\n lname === 'avatarurl' ||\n lname === 'avatar_url' ||\n lname === 'thumbnail' ||\n lname === 'thumbnailurl' ||\n lname === 'thumbnail_url' ||\n lname === 'picture' ||\n lname === 'pictureurl' ||\n lname === 'cover' ||\n lname === 'coverurl' ||\n lname === 'banner' ||\n lname === 'bannerurl'\n ) {\n return picsumUrl(entityName, fieldName);\n }\n const value = faker.lorem.words(2);\n mockLog.debug('field:fallback-lorem', () => ({\n entityName,\n fieldName: field.name,\n hasValues: false,\n format: field.format ?? null,\n generated: value,\n }));\n return value;\n }\n\n /**\n * Generate a date value. Uses the field's `format` (date vs datetime) to\n * decide ISO shape; otherwise returns a recent ISO-8601 datetime. No\n * field-name heuristics.\n */\n private generateDateValue(field: EntityField): string {\n const date = faker.date.recent({ days: 30 });\n if (field.format === 'date') return date.toISOString().split('T')[0]!;\n return date.toISOString();\n }\n\n private capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n // ============================================================================\n // PersistenceAdapter Implementation\n // ============================================================================\n\n async create(\n entityType: string,\n data: EntityRow\n ): Promise<{ id: string }> {\n const store = this.getStore(entityType);\n const id = this.nextId(entityType);\n const now = new Date().toISOString();\n\n const withDefaults = this.applyFieldDefaults(entityType, data);\n\n const item = {\n ...withDefaults,\n id,\n createdAt: now,\n updatedAt: now,\n };\n\n store.set(id, item);\n return { id };\n }\n\n /**\n * Fill in any entity-declared field defaults that the caller omitted.\n * SAVE payloads coming from form-section only carry the fields the user\n * edited; persisted rows should still honor `field.default` so downstream\n * row-content probes (VG11f) see a row whose every declared-default field\n * is non-empty. `@now` resolves to the current ISO timestamp.\n */\n private applyFieldDefaults(entityType: string, data: EntityRow): EntityRow {\n const schema = this.schemas.get(entityType.toLowerCase());\n if (!schema) return data;\n const result: EntityRow = { ...data };\n for (const field of schema.fields) {\n if (field.name === 'id' || field.name === 'createdAt' || field.name === 'updatedAt') continue;\n if (result[field.name] !== undefined) continue;\n if (field.default === undefined) continue;\n result[field.name] = field.default === '@now'\n ? new Date().toISOString()\n : (field.default as FieldValue);\n }\n return result;\n }\n\n async update(\n entityType: string,\n id: string,\n data: EntityRow\n ): Promise<void> {\n const store = this.getStore(entityType);\n const existing = store.get(id);\n\n if (!existing) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n\n const updated = {\n ...existing,\n ...data,\n id, // Preserve original ID\n updatedAt: new Date().toISOString(),\n };\n\n store.set(id, updated);\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n const store = this.getStore(entityType);\n if (!store.has(id)) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n store.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string\n ): Promise<EntityRow | null> {\n const store = this.getStore(entityType);\n return store.get(id) ?? null;\n }\n\n async list(entityType: string): Promise<Array<EntityRow>> {\n const store = this.getStore(entityType);\n return Array.from(store.values());\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n /**\n * Clear all data for an entity.\n */\n clear(entityName: string): void {\n const normalized = entityName.toLowerCase();\n this.stores.delete(normalized);\n this.idCounters.delete(normalized);\n }\n\n /** Clear all data + re-anchor faker so the next seed loop reproduces\n * identical rows. Hermetic-frame mode calls this between every step\n * via OrbitalServerRuntime.resetMockPersistence. */\n clearAll(): void {\n this.stores.clear();\n this.idCounters.clear();\n this.resetFakerSeed();\n mockLog.debug('mock:adapter:clearAll', { reanchored: this.config.seed });\n }\n\n /**\n * Get count of items for an entity.\n */\n count(entityName: string): number {\n const store = this.getStore(entityName);\n return store.size;\n }\n}\n\n/**\n * Create a MockPersistenceAdapter instance.\n */\nexport function createMockPersistence(config?: MockPersistenceConfig): MockPersistenceAdapter {\n return new MockPersistenceAdapter(config);\n}\n","/**\n * Reference Resolver\n *\n * Resolves `uses` imports and component references in OrbitalSchema.\n * Handles:\n * - `Alias.entity` entity references\n * - `Alias.traits.TraitName` trait references\n * - `Alias.pages.PageName` page references\n *\n * @packageDocumentation\n */\n\nimport type {\n Orbital,\n OrbitalDefinition,\n EntityRef,\n PageRef,\n PageRefObject,\n Entity,\n Page,\n Trait,\n TraitRef,\n TraitConfig,\n TraitEventListener,\n OrbitalSchema,\n UseDeclaration,\n PatternConfig,\n} from \"@almadar/core\";\nimport {\n isEntityReference,\n isEntityCall,\n isPageReference,\n isPageReferenceString,\n isPageReferenceObject,\n parseEntityRef,\n parsePageRef,\n parseImportedTraitRef,\n} from \"@almadar/core\";\nimport type {\n LoaderOptions,\n} from \"../loader/external-loader.js\";\nimport type {\n SchemaLoader,\n ImportChainLike,\n} from \"../loader/schema-loader.js\";\nimport { createLogger } from '@almadar/logger';\n\nconst refResolverLog = createLogger(\"almadar:runtime:ref-resolver\");\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Resolved imports from `uses` declarations.\n */\nexport interface ResolvedImports {\n /** Map of alias -> loaded orbital */\n orbitals: Map<string, ResolvedImport>;\n}\n\n/**\n * A single resolved import.\n */\nexport interface ResolvedImport {\n /** The alias used for this import */\n alias: string;\n\n /** The original import path */\n from: string;\n\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Absolute source path */\n sourcePath: string;\n}\n\n/**\n * Fully resolved orbital with all references expanded.\n */\nexport interface ResolvedOrbital {\n /** Original orbital name */\n name: string;\n\n /** Resolved entity (always inline after resolution) */\n entity: Entity;\n\n /** Whether entity was referenced from an import */\n entitySource?: {\n alias: string;\n persistence: \"persistent\" | \"runtime\" | \"singleton\";\n };\n\n /** Resolved traits (references expanded) */\n traits: ResolvedTrait[];\n\n /** Resolved pages (references expanded with path overrides applied) */\n pages: ResolvedPage[];\n\n /** Resolved imports */\n imports: ResolvedImports;\n\n /** Original orbital definition */\n original: OrbitalDefinition;\n}\n\n/**\n * Resolved trait with source tracking.\n */\nexport interface ResolvedTrait {\n /** The trait definition */\n trait: Trait;\n\n /** Source of the trait */\n source:\n | { type: \"inline\" }\n | { type: \"local\"; name: string }\n | { type: \"imported\"; alias: string; traitName: string };\n\n /** Linked entity for this trait */\n linkedEntity?: string;\n\n /** Configuration overrides */\n config?: TraitConfig;\n}\n\n/**\n * Resolved page with source tracking.\n */\nexport interface ResolvedPage {\n /** The page definition */\n page: Page;\n\n /** Source of the page */\n source:\n | { type: \"inline\" }\n | { type: \"imported\"; alias: string; pageName: string };\n\n /** Whether path was overridden */\n pathOverridden: boolean;\n\n /** Original path before override */\n originalPath?: string;\n}\n\n/**\n * Resolution options.\n */\nexport interface ResolveOptions extends LoaderOptions {\n /** Map of local trait definitions (name -> trait) */\n localTraits?: Map<string, Trait>;\n\n /** Whether to skip loading external imports (for testing) */\n skipExternalLoading?: boolean;\n\n /** Custom schema loader instance (optional, defaults to ExternalOrbitalLoader) */\n loader?: SchemaLoader;\n}\n\n/**\n * Resolution result.\n */\nexport type ResolveResult<T> =\n | { success: true; data: T; warnings: string[] }\n | { success: false; errors: string[] };\n\n// ============================================================================\n// Call-site event rename\n// ============================================================================\n\n/**\n * Recursively rewrite every event-name prop inside a render-ui config\n * tree. These are the user-dispatchable event keys the client renders\n * on buttons / actions / form handlers — they live at arbitrary nesting\n * depth inside a render-ui's second argument and must track the same\n * rename the state machine does, or the button emits the old key into\n * a machine that only knows the new one (dead-click bug).\n *\n * Rewrites:\n * - `action: \"X\"` on any pattern (button, chip, floating-action, ...)\n * - any prop whose key ends in `Event` with a non-binding string value\n * (`submitEvent`, `cancelEvent`, `selectEvent`, `changeEvent`, ...)\n * - `actions: [{ event: \"X\" }]` and `itemActions: [{ event: \"X\" }]`\n * - `onX: \"EVENT\"` handlers\n *\n * Skips anything that looks like a binding (`@config.X`, `@entity.Y`).\n * Recurses into every nested object/array value without hardcoding\n * slot / child field names — traits using `children`, `content`,\n * `leading`, `trailing`, etc. all get covered automatically.\n */\nfunction renameEventsInRenderUiConfig(\n node: PatternConfig | readonly unknown[] | unknown,\n rename: (k: string | undefined) => string | undefined,\n): PatternConfig | unknown[] | unknown {\n if (node === null || node === undefined) return node;\n if (Array.isArray(node)) {\n return node.map((item) => renameEventsInRenderUiConfig(item, rename));\n }\n if (typeof node !== \"object\") return node;\n\n // Every PatternConfig variant is a string-indexable object — the\n // discriminated union's `type` field picks which pattern's props\n // apply, but Object.entries returns each prop as [string, PropValue].\n // Mapped output preserves every key by re-spreading the node via a\n // shallow iteration, so we never lose the discriminator or untouched\n // props.\n const obj = node as PatternConfig;\n const next: PatternConfig = { ...obj };\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"action\" && typeof value === \"string\" && !value.startsWith(\"@\")) {\n (next as { [k: string]: PatternConfig[keyof PatternConfig] })[key] =\n (rename(value) ?? value) as PatternConfig[keyof PatternConfig];\n continue;\n }\n if (/^on[A-Z]/.test(key) && typeof value === \"string\" && !value.startsWith(\"@\")) {\n (next as { [k: string]: PatternConfig[keyof PatternConfig] })[key] =\n (rename(value) ?? value) as PatternConfig[keyof PatternConfig];\n continue;\n }\n if (key.endsWith(\"Event\") && typeof value === \"string\" && !value.startsWith(\"@\")) {\n (next as { [k: string]: PatternConfig[keyof PatternConfig] })[key] =\n (rename(value) ?? value) as PatternConfig[keyof PatternConfig];\n continue;\n }\n if ((key === \"actions\" || key === \"itemActions\") && Array.isArray(value)) {\n const rewrittenArray = value.map((entry): unknown => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) return entry;\n // Pattern action entries have a shared minimal contract: `event`\n // (required event key), `label`, `icon`, `variant`. Narrow to\n // that shape for the event rewrite; other keys pass through the\n // spread intact.\n const action = entry as { event?: string; [k: string]: unknown };\n if (typeof action.event === \"string\" && !action.event.startsWith(\"@\")) {\n return { ...action, event: rename(action.event) ?? action.event };\n }\n return action;\n });\n (next as { [k: string]: unknown })[key] = rewrittenArray;\n continue;\n }\n (next as { [k: string]: unknown })[key] = renameEventsInRenderUiConfig(value, rename);\n }\n return next;\n}\n\n/**\n * Rewrite event names inside an effects SExpr array. Walks every\n * `(render-ui slot config)` call and passes the config through\n * {@link renameEventsInRenderUiConfig}. Preserves non-render-ui effects\n * unchanged.\n */\nfunction renameEventsInEffects(\n effects: readonly unknown[],\n rename: (k: string | undefined) => string | undefined,\n): unknown[] {\n return effects.map((effect) => {\n if (!Array.isArray(effect)) return effect;\n if (effect[0] === \"render-ui\" && effect.length >= 3) {\n const slot = effect[1];\n const config = effect[2];\n const nextConfig = renameEventsInRenderUiConfig(config, rename);\n return [effect[0], slot, nextConfig, ...effect.slice(3)];\n }\n return effect;\n });\n}\n\n/**\n * Apply a call-site `events: { OLD: NEW, ... }` rename map to a resolved\n * trait's state machine. Rewrites every mention of an old key in:\n * - `stateMachine.transitions[].event` (the trigger)\n * - `stateMachine.transitions[].effects[]` render-ui button / action /\n * itemAction / submitEvent / cancelEvent / onX event-name props\n * - `stateMachine.events[].key` + `.name` (humanized display)\n * - `emits[].event`\n *\n * Does NOT rewrite `listens[].event`: those entries reference OTHER traits'\n * events, not this trait's own events, so the rename doesn't apply.\n *\n * Returns the trait unchanged when `renames` is empty or undefined.\n */\n/**\n * Walk a render-ui pattern config and rewrite every `entity: \"<oldName>\"`\n * string to `entity: \"<newName>\"`. Applied when a molecule pins an\n * imported atom to a different linked entity — the atom declared\n * `entity: \"ModalRecord\"` on its form-section, but at the ref site the\n * molecule said `linkedEntity: \"CartItem\"`, so the runtime needs to see\n * `entity: \"CartItem\"` at render time for schema enrichment\n * (UISlotRenderer looks up `schemaCtx.entities.get(entityName)` to\n * inject field types + enum values for form controls).\n *\n * Without this rewrite, the lookup misses the molecule-level entity and\n * the form renders text inputs for every field — including enum-shaped\n * ones that should be `<Select>`. VG20.\n *\n * Bindings (`@entity.X`, `@payload.X`) are NOT touched; only bare string\n * literals matching `atomLinkedEntity` get rewritten.\n */\nfunction renameEntityInRenderUiConfig(\n node: PatternConfig | readonly unknown[] | unknown,\n oldName: string,\n newName: string,\n): PatternConfig | unknown[] | unknown {\n if (node === null || node === undefined) return node;\n if (Array.isArray(node)) {\n return node.map((item) => renameEntityInRenderUiConfig(item, oldName, newName));\n }\n if (typeof node !== \"object\") return node;\n const obj = node as PatternConfig;\n const next: PatternConfig = { ...obj };\n for (const [key, value] of Object.entries(obj)) {\n if (key === \"entity\" && value === oldName) {\n (next as { [k: string]: unknown })[key] = newName;\n continue;\n }\n (next as { [k: string]: unknown })[key] = renameEntityInRenderUiConfig(value, oldName, newName);\n }\n return next;\n}\n\n/**\n * Walk a trait's effects and rewrite entity-name literals to match the\n * call-site's `linkedEntity` override.\n *\n * The previous version only rewrote `(render-ui ...)` config payloads,\n * with a comment claiming \"other effects use bindings, not string\n * literals\" — which is wrong. Several operators take the entity name\n * as a positional STRING LITERAL argument:\n *\n * - `(fetch <Entity> [options])` — position 1\n * - `(persist <create|update|delete|clear> <Entity> ...)` — position 2\n * - `(ref <Entity|@binding> [options])` — position 1 (string-only)\n * - `(deref <Entity|@binding> [options])` — position 1 (string-only)\n * - `(spawn <Entity> [initialState])` — position 1\n *\n * Without this rewrite, an inlined std-browse atom rebound via\n * `trait FilteredItemBrowse = Browse.traits.BrowseItemBrowse -> FilteredListItem {}`\n * would still call `MockPersistenceAdapter.list(\"BrowseItem\")` — which\n * returns zero rows because only `FilteredListItem` is registered. The\n * data-grid renders empty even though the molecule looks correct in\n * `.lolo`. The compiled-path codegen handles this in Rust at compile\n * time; the runtime must do the equivalent rewrite at registration\n * time.\n *\n * Wrapper operators (`do`, `atomic`, `if`, `when`, `let`, `async/*`)\n * recurse into nested effects so a `(do (fetch X) ...)` block is\n * rewritten end-to-end.\n */\nfunction renameEntityInEffects(\n effects: readonly unknown[],\n oldName: string,\n newName: string,\n): unknown[] {\n return effects.map((effect) => renameEntityInEffect(effect, oldName, newName));\n}\n\n/**\n * Operators that take an entity-name string literal as their FIRST\n * positional argument: `(op \"<Entity>\" ...)`.\n * Source: `@almadar/core/types/effect.ts` (FetchEffect, RefEffect,\n * DerefEffect, SpawnEffect tuple shapes).\n */\nconst ENTITY_AT_POS_1 = new Set([\"fetch\", \"ref\", \"deref\", \"spawn\"]);\n\n/**\n * Wrapper operators where ALL positional args (positions ≥ 1) are\n * nested effects. Recurse into every arg. From the typed effect\n * tuples: DoEffect, AtomicEffect, AsyncRaceEffect, AsyncAllEffect,\n * AsyncSequenceEffect.\n */\nconst ALL_ARGS_ARE_EFFECTS = new Set([\n \"do\",\n \"atomic\",\n \"async/race\",\n \"async/all\",\n \"async/sequence\",\n]);\n\n/**\n * Wrapper operators where position 1 is something other than an\n * effect (a condition expression, a let-binding list, or an\n * async-timing value), and positions ≥ 2 are nested effects.\n * Skipping position 1 is critical so we don't accidentally rewrite\n * a literal value used as a comparison RHS (e.g. `(if (= @entity.foo\n * \"BrowseItem\") ...)` — the string \"BrowseItem\" there is a value\n * being compared, not an entity-name we want to rename).\n *\n * IfEffect / WhenEffect — position 1 is `Expression` (condition).\n * LetEffect — position 1 is `[string, unknown][]` (bindings).\n * AsyncDelay / Debounce / Throttle / Interval — position 1 is duration.\n */\nconst ARGS_FROM_POS_2_ARE_EFFECTS = new Set([\n \"if\",\n \"when\",\n \"let\",\n \"async/delay\",\n \"async/debounce\",\n \"async/throttle\",\n \"async/interval\",\n]);\n\nfunction renameEntityInEffect(\n effect: unknown,\n oldName: string,\n newName: string,\n): unknown {\n if (!Array.isArray(effect) || effect.length === 0) return effect;\n const op = effect[0];\n if (typeof op !== \"string\") return effect;\n\n // `(render-ui slot config)` — recurse into the pattern tree config.\n // Bare `entity: \"<OldName>\"` string-literal props inside the\n // pattern tree get rewritten too.\n if (op === \"render-ui\" && effect.length >= 3) {\n const [, slot, config, ...rest] = effect;\n const nextConfig = renameEntityInRenderUiConfig(config, oldName, newName);\n return [op, slot, nextConfig, ...rest];\n }\n\n // `(persist <op> <Entity> ...)`. Entity at position 2 (after the\n // create/update/delete/clear keyword). Per PersistEffect tuple shape.\n if (op === \"persist\" && effect.length >= 3 && effect[2] === oldName) {\n return [op, effect[1], newName, ...effect.slice(3)];\n }\n\n // Operators with the entity name at position 1.\n if (ENTITY_AT_POS_1.has(op) && effect[1] === oldName) {\n return [op, newName, ...effect.slice(2)];\n }\n\n // Wrappers — recurse into nested effects. Whether to skip position 1\n // depends on the operator's argument structure (see set comments).\n const skipFirstNonEffectArg = ARGS_FROM_POS_2_ARE_EFFECTS.has(op);\n const recurseAll = ALL_ARGS_ARE_EFFECTS.has(op);\n if (recurseAll || skipFirstNonEffectArg) {\n const startIndex = skipFirstNonEffectArg ? 2 : 1;\n return effect.map((arg, i) => {\n if (i < startIndex) return arg;\n if (Array.isArray(arg)) {\n return renameEntityInEffect(arg, oldName, newName);\n }\n return arg;\n });\n }\n\n return effect;\n}\n\n/**\n * Apply a linkedEntity override from a trait-ref call site to an\n * imported atom. When the atom declared `entity: \"ModalRecord\"` inside\n * its render-ui configs and the ref site supplied\n * `linkedEntity: \"CartItem\"`, rewrite every such literal so runtime\n * consumers (EntitySchemaContext lookup, DataService collection binding)\n * see the molecule-level entity name. No-op when either argument is\n * missing or when the names match.\n */\nfunction applyLinkedEntityRename(\n trait: Trait,\n linkedEntity: string | undefined,\n): Trait {\n const atomLinked = trait.linkedEntity;\n if (!linkedEntity || !atomLinked || linkedEntity === atomLinked) return trait;\n const sm = trait.stateMachine;\n if (!sm) return { ...trait, linkedEntity };\n const nextTransitions = (sm.transitions ?? []).map((t) => {\n const nextEffects = t.effects\n ? (renameEntityInEffects(\n t.effects as readonly unknown[],\n atomLinked,\n linkedEntity,\n ) as typeof t.effects)\n : t.effects;\n return { ...t, effects: nextEffects };\n });\n // Observability: structured log fires once per call-site rebind so\n // verifier traces show exactly which trait got which entity rewrite.\n // Especially load-bearing for catching the \"fetch <OldEntity>\" gap\n // that was silently dropping data-grid rows on every embedded atom.\n refResolverLog.info(\"linkedEntity:rename\", {\n trait: trait.name,\n from: atomLinked,\n to: linkedEntity,\n transitionCount: nextTransitions.length,\n });\n return {\n ...trait,\n linkedEntity,\n stateMachine: { ...sm, transitions: nextTransitions },\n } as Trait;\n}\n\nfunction applyEventRenames(\n trait: Trait,\n renames?: { [oldKey: string]: string },\n): Trait {\n if (!renames || Object.keys(renames).length === 0) return trait;\n const rename = (k: string | undefined): string | undefined =>\n k !== undefined && k in renames ? renames[k] : k;\n const sm = trait.stateMachine;\n if (!sm) return trait;\n const nextTransitions = (sm.transitions ?? []).map((t) => {\n const nextEvent = rename(t.event) ?? t.event;\n const nextEffects = t.effects\n ? (renameEventsInEffects(t.effects as readonly unknown[], rename) as typeof t.effects)\n : t.effects;\n return { ...t, event: nextEvent, effects: nextEffects };\n });\n const nextEvents = (sm.events ?? []).map((e) => {\n const newKey = rename(e.key);\n if (newKey === e.key) return e;\n return { ...e, key: newKey ?? e.key };\n });\n const nextEmits = (trait.emits ?? []).map((em) => {\n if (typeof em === \"string\") return rename(em) ?? em;\n const newEvent = rename(em.event);\n return newEvent === em.event ? em : { ...em, event: newEvent ?? em.event };\n });\n return {\n ...trait,\n stateMachine: {\n ...sm,\n transitions: nextTransitions,\n events: nextEvents,\n },\n emits: nextEmits,\n } as Trait;\n}\n\n// ============================================================================\n// Reference Resolver\n// ============================================================================\n\n/**\n * ReferenceResolver - Resolves all references in an orbital.\n */\nexport class ReferenceResolver {\n private loader: SchemaLoader;\n private options: ResolveOptions;\n private localTraits: Map<string, Trait>;\n\n private loaderInitialized = false;\n\n constructor(options: ResolveOptions) {\n this.options = options;\n // Use provided loader; filesystem loader will be created lazily if needed\n this.loader = options.loader as SchemaLoader;\n this.localTraits = options.localTraits ?? new Map();\n }\n\n private async ensureLoader(): Promise<void> {\n if (this.loader || this.loaderInitialized) return;\n this.loaderInitialized = true;\n try {\n const { ExternalOrbitalLoader } = await import(\"../loader/external-loader.js\");\n this.loader = new ExternalOrbitalLoader(this.options);\n } catch {\n // Filesystem loader not available (browser environment)\n }\n }\n\n /**\n * Resolve all references in an orbital.\n */\n async resolve(\n orbital: OrbitalDefinition,\n sourcePath?: string,\n chain?: ImportChainLike\n ): Promise<ResolveResult<ResolvedOrbital>> {\n const errors: string[] = [];\n const warnings: string[] = [];\n const importChain = chain ?? { push: () => null, pop: () => {}, clone() { return this; } } as ImportChainLike;\n\n // Step 1: Resolve imports\n const importsResult = await this.resolveImports(\n orbital.uses ?? [],\n sourcePath,\n importChain\n );\n if (!importsResult.success) {\n return { success: false, errors: importsResult.errors };\n }\n const imports = importsResult.data;\n\n // Step 2: Resolve entity\n const entityResult = this.resolveEntity(orbital.entity, imports);\n if (!entityResult.success) {\n errors.push(...entityResult.errors);\n }\n\n // Step 3: Resolve traits\n const traitsResult = this.resolveTraits(orbital.traits, imports);\n if (!traitsResult.success) {\n errors.push(...traitsResult.errors);\n }\n\n // Step 4: Resolve pages\n const pagesResult = this.resolvePages(orbital.pages, imports);\n if (!pagesResult.success) {\n errors.push(...pagesResult.errors);\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n // At this point all results are successful (errors array is empty)\n // Use type narrowing to access data safely\n if (!entityResult.success || !traitsResult.success || !pagesResult.success) {\n // This should never happen since we checked errors above\n return { success: false, errors: ['Internal error: unexpected failure state'] };\n }\n\n return {\n success: true,\n data: {\n name: orbital.name,\n entity: entityResult.data.entity,\n entitySource: entityResult.data.source,\n traits: traitsResult.data,\n pages: pagesResult.data,\n imports,\n original: orbital,\n },\n warnings,\n };\n }\n\n /**\n * Resolve `uses` declarations to loaded orbitals.\n */\n private async resolveImports(\n uses: UseDeclaration[],\n sourcePath?: string,\n chain?: ImportChainLike\n ): Promise<ResolveResult<ResolvedImports>> {\n const errors: string[] = [];\n const orbitals = new Map<string, ResolvedImport>();\n\n if (this.options.skipExternalLoading) {\n return {\n success: true,\n data: { orbitals },\n warnings: [\"External loading skipped\"],\n };\n }\n\n for (const use of uses) {\n // Check for duplicate aliases\n if (orbitals.has(use.as)) {\n errors.push(`Duplicate import alias: ${use.as}`);\n continue;\n }\n\n // Load the orbital\n await this.ensureLoader();\n if (!this.loader) {\n errors.push(`No loader available to resolve import: ${use.from}`);\n continue;\n }\n const loadResult = await this.loader.loadOrbital(\n use.from,\n undefined,\n sourcePath,\n chain\n );\n\n if (!loadResult.success) {\n errors.push(`Failed to load \"${use.from}\" as \"${use.as}\": ${loadResult.error}`);\n continue;\n }\n\n orbitals.set(use.as, {\n alias: use.as,\n from: use.from,\n orbital: loadResult.data.orbital,\n sourcePath: loadResult.data.sourcePath,\n });\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: { orbitals }, warnings: [] };\n }\n\n /**\n * Resolve entity reference.\n */\n private resolveEntity(\n entityRef: EntityRef,\n imports: ResolvedImports\n ): ResolveResult<{\n entity: Entity;\n source?: { alias: string; persistence: \"persistent\" | \"runtime\" | \"singleton\" };\n }> {\n // EntityCall (Phase F): synthesize a placeholder Entity from the call shape.\n // Full inlining is the compiler's job; this resolver returns the local view.\n if (isEntityCall(entityRef)) {\n const fallbackName =\n entityRef.name ?? entityRef.extends.replace(/\\.entity$/, \"\");\n return {\n success: true,\n data: {\n entity: {\n name: fallbackName,\n fields: entityRef.fields ?? [],\n ...(entityRef.persistence\n ? { persistence: entityRef.persistence }\n : {}),\n ...(entityRef.collection ? { collection: entityRef.collection } : {}),\n },\n },\n warnings: [],\n };\n }\n\n // Inline entity\n if (!isEntityReference(entityRef)) {\n return {\n success: true,\n data: { entity: entityRef },\n warnings: [],\n };\n }\n\n // Reference: \"Alias.entity\"\n const parsed = parseEntityRef(entityRef);\n if (!parsed) {\n return {\n success: false,\n errors: [`Invalid entity reference format: ${entityRef}. Expected \"Alias.entity\"`],\n };\n }\n\n const imported = imports.orbitals.get(parsed.alias);\n if (!imported) {\n return {\n success: false,\n errors: [\n `Unknown import alias in entity reference: ${parsed.alias}. ` +\n `Available aliases: ${Array.from(imports.orbitals.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n // Get entity from imported orbital\n const importedEntity = this.getEntityFromOrbital(imported.orbital);\n if (!importedEntity) {\n return {\n success: false,\n errors: [\n `Imported orbital \"${parsed.alias}\" does not have an inline entity. ` +\n `Entity references cannot be chained.`,\n ],\n };\n }\n\n // Determine persistence type\n const persistence = importedEntity.persistence ?? \"persistent\";\n\n return {\n success: true,\n data: {\n entity: importedEntity,\n source: {\n alias: parsed.alias,\n persistence: persistence as \"persistent\" | \"runtime\" | \"singleton\",\n },\n },\n warnings: [],\n };\n }\n\n /**\n * Get the entity from an orbital (handling EntityRef).\n */\n private getEntityFromOrbital(orbital: Orbital): Entity | null {\n const entityRef = orbital.entity;\n if (typeof entityRef === \"string\") {\n // It's a reference - we don't support chained references\n return null;\n }\n if (isEntityCall(entityRef)) {\n // EntityCall form - synthesize a placeholder Entity from the call shape\n const fallbackName =\n entityRef.name ?? entityRef.extends.replace(/\\.entity$/, \"\");\n return {\n name: fallbackName,\n fields: entityRef.fields ?? [],\n ...(entityRef.persistence\n ? { persistence: entityRef.persistence }\n : {}),\n ...(entityRef.collection ? { collection: entityRef.collection } : {}),\n };\n }\n return entityRef;\n }\n\n /**\n * Resolve trait references.\n */\n private resolveTraits(\n traitRefs: TraitRef[],\n imports: ResolvedImports\n ): ResolveResult<ResolvedTrait[]> {\n const errors: string[] = [];\n const resolved: ResolvedTrait[] = [];\n\n for (const traitRef of traitRefs) {\n const result = this.resolveTraitRef(traitRef, imports);\n if (!result.success) {\n errors.push(...result.errors);\n } else {\n resolved.push(result.data!);\n }\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: resolved, warnings: [] };\n }\n\n /**\n * Resolve a single trait reference.\n */\n private resolveTraitRef(\n traitRef: TraitRef,\n imports: ResolvedImports\n ): ResolveResult<ResolvedTrait> {\n // Case 1: Inline trait definition\n if (typeof traitRef !== \"string\" && \"stateMachine\" in traitRef) {\n return {\n success: true,\n data: {\n trait: traitRef as Trait,\n source: { type: \"inline\" },\n },\n warnings: [],\n };\n }\n\n // Case 2: Reference object { ref: \"...\", name?, config?, linkedEntity?, events?, listens? }\n // `events` is the call-site rename map ({ OLD: NEW, ... }). Every mention\n // of an old key inside the resolved trait's state machine (transition\n // triggers, events list entries, emits) is rewritten to the new key.\n // Without this, buttons in a molecule that dispatch the renamed event\n // (e.g. `ADD_ITEM` instead of the atom's internal `OPEN`) fire into a\n // trait whose state machine still only knows the old trigger, and the\n // transition silently fails to fire.\n //\n // `listens` is the Phase F.7 override: replace the imported trait's\n // `listens` array entirely with the call-site list. Required for\n // ref-based traits that need cross-trait subscription wiring (e.g.\n // CartItemAddItem listening to CartItemCartBrowse.ADD_ITEM); without\n // it the atom's empty listens flow through and the bus subscription\n // is never set up.\n if (typeof traitRef !== \"string\" && \"ref\" in traitRef) {\n const refObj = traitRef as {\n ref: string;\n name?: string;\n config?: TraitConfig;\n linkedEntity?: string;\n events?: { [oldKey: string]: string };\n listens?: TraitEventListener[];\n };\n return this.resolveTraitRefString(\n refObj.ref,\n imports,\n refObj.config,\n refObj.linkedEntity,\n refObj.name,\n refObj.events,\n refObj.listens,\n );\n }\n\n // Case 3: String reference\n if (typeof traitRef === \"string\") {\n return this.resolveTraitRefString(traitRef, imports);\n }\n\n return {\n success: false,\n errors: [`Unknown trait reference format: ${JSON.stringify(traitRef)}`],\n };\n }\n\n /**\n * Resolve a trait reference string.\n */\n private resolveTraitRefString(\n ref: string,\n imports: ResolvedImports,\n config?: TraitConfig,\n linkedEntity?: string,\n overrideName?: string,\n eventRenames?: { [oldKey: string]: string },\n listensOverride?: TraitEventListener[],\n ): ResolveResult<ResolvedTrait> {\n // Check if it's an imported trait reference: \"Alias.traits.TraitName\"\n const parsed = parseImportedTraitRef(ref);\n\n if (parsed) {\n // Imported trait\n const imported = imports.orbitals.get(parsed.alias);\n if (!imported) {\n return {\n success: false,\n errors: [\n `Unknown import alias in trait reference: ${parsed.alias}. ` +\n `Available aliases: ${Array.from(imports.orbitals.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n // Find the trait in the imported orbital\n const trait = this.findTraitInOrbital(imported.orbital, parsed.traitName);\n if (!trait) {\n return {\n success: false,\n errors: [\n `Trait \"${parsed.traitName}\" not found in imported orbital \"${parsed.alias}\". ` +\n `Available traits: ${this.listTraitsInOrbital(imported.orbital).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n // Rename the resolved trait if the call site declared one. Molecules\n // use this to give an imported atom a domain-specific local name\n // (e.g. `std-search`'s `SearchResultSearch` renamed to\n // `FilteredItemSearch` inside `std-filtered-list`). Without the\n // rename, `@trait.FilteredItemSearch` substrings in render-ui\n // patterns would fail to resolve because the trait index keys\n // would still hold the atom's original name.\n const baseTrait: Trait = overrideName\n ? { ...trait, name: overrideName }\n : trait;\n const reboundTrait = applyLinkedEntityRename(baseTrait, linkedEntity);\n const renamedTrait = applyEventRenames(reboundTrait, eventRenames);\n const finalTrait: Trait = listensOverride !== undefined\n ? { ...renamedTrait, listens: listensOverride }\n : renamedTrait;\n if (listensOverride !== undefined) {\n refResolverLog.info(\"listens-override:imported\", {\n trait: finalTrait.name,\n ref,\n atomListens: trait.listens?.length ?? 0,\n callSiteListens: listensOverride.length,\n });\n }\n\n return {\n success: true,\n data: {\n trait: finalTrait,\n source: { type: \"imported\", alias: parsed.alias, traitName: parsed.traitName },\n config,\n linkedEntity,\n },\n warnings: [],\n };\n }\n\n // Local trait (from localTraits map)\n const localTrait = this.localTraits.get(ref);\n if (localTrait) {\n const baseLocal: Trait = overrideName\n ? { ...localTrait, name: overrideName }\n : localTrait;\n const reboundLocal = applyLinkedEntityRename(baseLocal, linkedEntity);\n const renamedLocalTrait = applyEventRenames(reboundLocal, eventRenames);\n const finalLocalTrait: Trait = listensOverride !== undefined\n ? { ...renamedLocalTrait, listens: listensOverride }\n : renamedLocalTrait;\n if (listensOverride !== undefined) {\n refResolverLog.info(\"listens-override:local\", {\n trait: finalLocalTrait.name,\n ref,\n atomListens: localTrait.listens?.length ?? 0,\n callSiteListens: listensOverride.length,\n });\n }\n return {\n success: true,\n data: {\n trait: finalLocalTrait,\n source: { type: \"local\", name: ref },\n config,\n linkedEntity,\n },\n warnings: [],\n };\n }\n\n return {\n success: false,\n errors: [\n `Trait \"${ref}\" not found. ` +\n `For imported traits, use format \"Alias.traits.TraitName\". ` +\n `Local traits available: ${Array.from(this.localTraits.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n /**\n * Find a trait in an orbital by name.\n */\n private findTraitInOrbital(orbital: Orbital, traitName: string): Trait | null {\n for (const traitRef of orbital.traits) {\n // Inline trait\n if (typeof traitRef !== \"string\" && \"stateMachine\" in traitRef) {\n if ((traitRef as Trait).name === traitName) {\n return traitRef as Trait;\n }\n }\n // Reference with name\n if (typeof traitRef !== \"string\" && \"ref\" in traitRef) {\n const refObj = traitRef as { ref?: string; name?: string };\n if (refObj.ref === traitName || refObj.name === traitName) {\n // This is a reference, not an inline definition\n // We can't return it directly - need to look up in local traits\n // For now, skip these\n }\n }\n }\n return null;\n }\n\n /**\n * List trait names in an orbital.\n */\n private listTraitsInOrbital(orbital: Orbital): string[] {\n const names: string[] = [];\n for (const traitRef of orbital.traits) {\n if (typeof traitRef !== \"string\" && \"stateMachine\" in traitRef) {\n names.push((traitRef as Trait).name);\n }\n }\n return names;\n }\n\n /**\n * Resolve page references.\n */\n private resolvePages(\n pageRefs: PageRef[],\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage[]> {\n const errors: string[] = [];\n const resolved: ResolvedPage[] = [];\n\n for (const pageRef of pageRefs) {\n const result = this.resolvePageRef(pageRef, imports);\n if (!result.success) {\n errors.push(...result.errors);\n } else {\n resolved.push(result.data!);\n }\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: resolved, warnings: [] };\n }\n\n /**\n * Resolve a single page reference.\n */\n private resolvePageRef(\n pageRef: PageRef,\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage> {\n // Case 1: Inline page definition\n if (!isPageReference(pageRef)) {\n return {\n success: true,\n data: {\n page: pageRef as Page,\n source: { type: \"inline\" },\n pathOverridden: false,\n },\n warnings: [],\n };\n }\n\n // Case 2: String reference \"Alias.pages.PageName\"\n if (isPageReferenceString(pageRef)) {\n return this.resolvePageRefString(pageRef, imports);\n }\n\n // Case 3: Object reference { ref: \"Alias.pages.PageName\", path?: \"/override\" }\n if (isPageReferenceObject(pageRef)) {\n return this.resolvePageRefObject(pageRef, imports);\n }\n\n return {\n success: false,\n errors: [`Unknown page reference format: ${JSON.stringify(pageRef)}`],\n };\n }\n\n /**\n * Resolve a page reference string.\n */\n private resolvePageRefString(\n ref: string,\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage> {\n const parsed = parsePageRef(ref);\n if (!parsed) {\n return {\n success: false,\n errors: [`Invalid page reference format: ${ref}. Expected \"Alias.pages.PageName\"`],\n };\n }\n\n const imported = imports.orbitals.get(parsed.alias);\n if (!imported) {\n return {\n success: false,\n errors: [\n `Unknown import alias in page reference: ${parsed.alias}. ` +\n `Available aliases: ${Array.from(imports.orbitals.keys()).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n const page = this.findPageInOrbital(imported.orbital, parsed.pageName);\n if (!page) {\n return {\n success: false,\n errors: [\n `Page \"${parsed.pageName}\" not found in imported orbital \"${parsed.alias}\". ` +\n `Available pages: ${this.listPagesInOrbital(imported.orbital).join(\", \") || \"none\"}`,\n ],\n };\n }\n\n return {\n success: true,\n data: {\n page,\n source: { type: \"imported\", alias: parsed.alias, pageName: parsed.pageName },\n pathOverridden: false,\n },\n warnings: [],\n };\n }\n\n /**\n * Resolve a page reference object with optional path override.\n */\n private resolvePageRefObject(\n refObj: PageRefObject,\n imports: ResolvedImports\n ): ResolveResult<ResolvedPage> {\n const baseResult = this.resolvePageRefString(refObj.ref, imports);\n if (!baseResult.success) {\n return baseResult;\n }\n\n const resolved = baseResult.data!;\n\n // Apply path override if provided\n if (refObj.path) {\n const originalPath = resolved.page.path;\n resolved.page = {\n ...resolved.page,\n path: refObj.path,\n };\n resolved.pathOverridden = true;\n resolved.originalPath = originalPath;\n }\n\n return {\n success: true,\n data: resolved,\n warnings: baseResult.warnings,\n };\n }\n\n /**\n * Find a page in an orbital by name.\n */\n private findPageInOrbital(orbital: Orbital, pageName: string): Page | null {\n const pages = orbital.pages;\n if (!pages) return null;\n\n for (const pageRef of pages) {\n // Only look at inline pages (we don't support chained page references)\n if (typeof pageRef !== \"string\" && !(\"ref\" in pageRef)) {\n const page = pageRef as Page;\n if (page.name === pageName) {\n // Return a copy to avoid mutation issues\n return { ...page };\n }\n }\n }\n return null;\n }\n\n /**\n * List page names in an orbital.\n */\n private listPagesInOrbital(orbital: Orbital): string[] {\n const pages = orbital.pages;\n if (!pages) return [];\n\n const names: string[] = [];\n for (const pageRef of pages) {\n if (typeof pageRef !== \"string\" && !(\"ref\" in pageRef)) {\n names.push((pageRef as Page).name);\n }\n }\n return names;\n }\n\n /**\n * Add local traits for resolution.\n */\n addLocalTraits(traits: Trait[]): void {\n for (const trait of traits) {\n this.localTraits.set(trait.name, trait);\n }\n }\n\n /**\n * Clear loader cache.\n */\n clearCache(): void {\n this.loader?.clearCache();\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a reference resolver with sensible defaults.\n */\nexport function createResolver(\n basePath: string,\n options?: Partial<ResolveOptions>\n): ReferenceResolver {\n return new ReferenceResolver({\n basePath,\n ...options,\n });\n}\n\n// ============================================================================\n// Schema Resolution\n// ============================================================================\n\n/**\n * Resolve all references in an OrbitalSchema.\n */\nexport async function resolveSchema(\n schema: OrbitalSchema,\n options: ResolveOptions\n): Promise<ResolveResult<ResolvedOrbital[]>> {\n const resolver = new ReferenceResolver(options);\n const errors: string[] = [];\n const warnings: string[] = [];\n const resolved: ResolvedOrbital[] = [];\n\n // Collect all inline traits from all orbitals for local trait resolution\n for (const orbital of schema.orbitals) {\n const inlineTraits = orbital.traits.filter(\n (t): t is Trait => typeof t !== \"string\" && \"stateMachine\" in t\n );\n resolver.addLocalTraits(inlineTraits);\n }\n\n // Resolve each orbital\n for (const orbital of schema.orbitals) {\n const result = await resolver.resolve(orbital);\n if (!result.success) {\n errors.push(`Orbital \"${orbital.name}\": ${result.errors.join(\", \")}`);\n } else {\n resolved.push(result.data);\n warnings.push(...result.warnings.map((w) => `Orbital \"${orbital.name}\": ${w}`));\n }\n }\n\n if (errors.length > 0) {\n return { success: false, errors };\n }\n\n return { success: true, data: resolved, warnings };\n}\n","/**\n * SchemaLoader Interface\n *\n * Abstract interface for loading OrbitalSchema files from various sources.\n * Implementations exist for:\n * - FileSystemLoader (Node.js) - uses fs module\n * - HttpLoader (Browser) - uses fetch API\n * - UnifiedLoader (Auto-detect) - routes to appropriate loader\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, Orbital } from \"@almadar/core\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of loading a schema.\n */\nexport interface LoadedSchema {\n /** The loaded schema */\n schema: OrbitalSchema;\n\n /** Source path/URL (resolved) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Result of loading a single orbital from a schema.\n */\nexport interface LoadedOrbital {\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Source path/URL (resolved) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Loader result with error handling.\n */\nexport type LoadResult<T> =\n | { success: true; data: T }\n | { success: false; error: string };\n\n/**\n * Base options for all loaders.\n */\nexport interface BaseLoaderOptions {\n /** Base path/URL for resolving relative imports */\n basePath: string;\n\n /** Standard library root path/URL */\n stdLibPath?: string;\n\n /** Scoped package roots (e.g., { \"@game-lib\": \"/path/to/lib\" }) */\n scopedPaths?: Record<string, string>;\n}\n\n/**\n * Options for file system loading.\n */\nexport interface FileSystemLoaderOptions extends BaseLoaderOptions {\n /** Whether to allow paths outside basePath (security) */\n allowOutsideBasePath?: boolean;\n}\n\n/**\n * Options for HTTP loading.\n */\nexport interface HttpLoaderOptions extends BaseLoaderOptions {\n /** Default fetch options */\n fetchOptions?: RequestInit;\n\n /** Request timeout in milliseconds */\n timeout?: number;\n\n /** Whether to use credentials (cookies, auth headers) */\n credentials?: RequestCredentials;\n}\n\n/**\n * Combined options for unified loader.\n */\nexport interface UnifiedLoaderOptions extends BaseLoaderOptions {\n /** File system specific options */\n fileSystem?: Omit<FileSystemLoaderOptions, keyof BaseLoaderOptions>;\n\n /** HTTP specific options */\n http?: Omit<HttpLoaderOptions, keyof BaseLoaderOptions>;\n\n /** Force a specific loader type */\n forceLoader?: \"filesystem\" | \"http\";\n}\n\n/**\n * Loader strategy type for environment-specific loading.\n */\nexport type LoaderStrategy = \"filesystem\" | \"http\" | \"auto\";\n\n// ============================================================================\n// SchemaLoader Interface\n// ============================================================================\n\n/**\n * Abstract interface for schema loaders.\n *\n * All loaders must implement:\n * - load() - Load a schema from an import path\n * - resolvePath() - Resolve an import path to absolute path/URL\n *\n * @example\n * ```typescript\n * // Using FileSystemLoader (Node.js)\n * const loader: SchemaLoader = new FileSystemLoader({ basePath: \"/schemas\" });\n * const result = await loader.load(\"./my-schema.orb\");\n *\n * // Using HttpLoader (Browser)\n * const loader: SchemaLoader = new HttpLoader({ basePath: \"/api/schemas\" });\n * const result = await loader.load(\"./my-schema.orb\");\n *\n * // Using UnifiedLoader (auto-detect)\n * const loader: SchemaLoader = createUnifiedLoader({ basePath: \"/schemas\" });\n * const result = await loader.load(\"./my-schema.orb\");\n * ```\n */\nexport interface SchemaLoader {\n /**\n * Load a schema from an import path.\n *\n * @param importPath - The import path (e.g., \"./health.orb\", \"std/behaviors/game-core\")\n * @param fromPath - The path of the file doing the import (for relative resolution)\n * @param chain - Import chain for circular detection (optional)\n */\n load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedSchema>>;\n\n /**\n * Load a specific orbital from a schema by name.\n *\n * @param importPath - The import path\n * @param orbitalName - The orbital name (optional, defaults to first orbital)\n * @param fromPath - The path of the file doing the import\n * @param chain - Import chain for circular detection (optional)\n */\n loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedOrbital>>;\n\n /**\n * Resolve an import path to an absolute path/URL.\n *\n * @param importPath - The import path\n * @param fromPath - The path of the file doing the import (optional)\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string>;\n\n /**\n * Clear the loader's cache.\n */\n clearCache(): void;\n\n /**\n * Get cache statistics.\n */\n getCacheStats(): { size: number };\n}\n\n/**\n * Interface for import chain (circular detection).\n * This allows different implementations to interoperate.\n */\nexport interface ImportChainLike {\n /**\n * Try to add a path to the chain.\n * @returns Error message if circular, null if OK\n */\n push(absolutePath: string): string | null;\n\n /**\n * Remove the last path from the chain.\n */\n pop(): void;\n\n /**\n * Clone the chain for nested loading.\n */\n clone(): ImportChainLike;\n}\n\n// ============================================================================\n// Environment Detection\n// ============================================================================\n\n/**\n * Detect if running in Electron.\n */\nexport function isElectron(): boolean {\n return typeof process !== \"undefined\" && !!process.versions?.electron;\n}\n\n/**\n * Detect if running in browser (not Electron).\n */\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\" && !isElectron();\n}\n\n/**\n * Detect if running in Node.js (not browser).\n */\nexport function isNode(): boolean {\n return typeof process !== \"undefined\" && !isBrowser();\n}\n\n/**\n * Get the recommended loader strategy for the current environment.\n */\nexport function getDefaultLoaderStrategy(): LoaderStrategy {\n if (isBrowser()) {\n return \"http\";\n }\n return \"filesystem\";\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Schema loader factory function type.\n */\nexport type SchemaLoaderFactory<T extends BaseLoaderOptions = BaseLoaderOptions> = (\n options: T\n) => SchemaLoader;\n","/**\n * HTTP Schema Loader\n *\n * Loads OrbitalSchema files via HTTP/fetch for browser environments.\n * Also works in Node.js with the fetch API.\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, Orbital } from \"@almadar/core\";\nimport { OrbitalSchemaSchema } from \"@almadar/core\";\nimport type {\n SchemaLoader,\n LoadedSchema,\n LoadedOrbital,\n LoadResult,\n HttpLoaderOptions,\n ImportChainLike,\n} from \"./schema-loader.js\";\n\n// ============================================================================\n// Import Chain Implementation\n// ============================================================================\n\n/**\n * Tracks import chains to detect circular imports.\n * Compatible with ImportChainLike interface.\n */\nexport class HttpImportChain implements ImportChainLike {\n private chain: string[] = [];\n\n /**\n * Try to add a path to the chain.\n * @returns Error message if circular, null if OK\n */\n push(absolutePath: string): string | null {\n if (this.chain.includes(absolutePath)) {\n const cycle = [\n ...this.chain.slice(this.chain.indexOf(absolutePath)),\n absolutePath,\n ];\n return `Circular import detected: ${cycle.join(\" -> \")}`;\n }\n this.chain.push(absolutePath);\n return null;\n }\n\n /**\n * Remove the last path from the chain.\n */\n pop(): void {\n this.chain.pop();\n }\n\n /**\n * Clone the chain for nested loading.\n */\n clone(): HttpImportChain {\n const newChain = new HttpImportChain();\n newChain.chain = [...this.chain];\n return newChain;\n }\n}\n\n// ============================================================================\n// Cache\n// ============================================================================\n\n/**\n * Cache for loaded schemas to avoid re-fetching.\n */\nclass HttpLoaderCache {\n private cache = new Map<string, LoadedSchema>();\n\n get(url: string): LoadedSchema | undefined {\n return this.cache.get(url);\n }\n\n set(url: string, schema: LoadedSchema): void {\n this.cache.set(url, schema);\n }\n\n has(url: string): boolean {\n return this.cache.has(url);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n}\n\n// ============================================================================\n// HTTP Loader\n// ============================================================================\n\n/**\n * HttpLoader - Loads OrbitalSchema files via HTTP/fetch.\n *\n * Designed for browser environments where file system access is not available.\n * Uses the fetch API for loading schemas.\n *\n * Path Resolution:\n * - Relative paths: `./health.orb` -> base URL + path\n * - Standard library: `std/behaviors/game-core` -> std lib URL + path\n * - Scoped packages: `@scope/pkg.orb` -> scoped URL + path\n * - Absolute URLs: `https://...` -> used directly\n *\n * @example\n * ```typescript\n * const loader = new HttpLoader({\n * basePath: \"/api/schemas\",\n * stdLibPath: \"https://cdn.example.com/orbital-std\",\n * });\n *\n * // Load from relative path\n * const result = await loader.load(\"./my-schema.orb\");\n *\n * // Load from std library\n * const stdResult = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class HttpLoader implements SchemaLoader {\n private options: Required<\n Pick<HttpLoaderOptions, \"basePath\" | \"stdLibPath\" | \"scopedPaths\">\n > &\n HttpLoaderOptions;\n private cache: HttpLoaderCache;\n\n constructor(options: HttpLoaderOptions) {\n this.options = {\n basePath: options.basePath,\n stdLibPath: options.stdLibPath ?? \"\",\n scopedPaths: options.scopedPaths ?? {},\n fetchOptions: options.fetchOptions,\n timeout: options.timeout ?? 30000,\n credentials: options.credentials ?? \"same-origin\",\n };\n this.cache = new HttpLoaderCache();\n }\n\n /**\n * Load a schema from an import path.\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedSchema>> {\n const importChain = chain ?? new HttpImportChain();\n\n // Resolve to absolute URL\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absoluteUrl = resolveResult.data;\n\n // Check for circular imports\n const circularError = importChain.push(absoluteUrl);\n if (circularError) {\n return { success: false, error: circularError };\n }\n\n try {\n // Check cache\n const cached = this.cache.get(absoluteUrl);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Fetch and parse the schema\n const loadResult = await this.fetchSchema(absoluteUrl);\n if (!loadResult.success) {\n return loadResult;\n }\n\n const loaded: LoadedSchema = {\n schema: loadResult.data,\n sourcePath: absoluteUrl,\n importPath,\n };\n\n // Cache the result\n this.cache.set(absoluteUrl, loaded);\n\n return { success: true, data: loaded };\n } finally {\n importChain.pop();\n }\n }\n\n /**\n * Load a specific orbital from a schema by name.\n */\n async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedOrbital>> {\n const schemaResult = await this.load(importPath, fromPath, chain);\n if (!schemaResult.success) {\n return schemaResult;\n }\n\n const schema = schemaResult.data.schema;\n let orbital: Orbital;\n\n if (orbitalName) {\n const found = schema.orbitals.find(\n (o: Orbital) => o.name === orbitalName\n );\n if (!found) {\n return {\n success: false,\n error: `Orbital \"${orbitalName}\" not found in ${importPath}. Available: ${schema.orbitals.map((o: Orbital) => o.name).join(\", \")}`,\n };\n }\n orbital = found;\n } else {\n // Default to first orbital\n if (schema.orbitals.length === 0) {\n return {\n success: false,\n error: `No orbitals found in ${importPath}`,\n };\n }\n orbital = schema.orbitals[0];\n }\n\n return {\n success: true,\n data: {\n orbital,\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\n /**\n * Resolve an import path to an absolute URL.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\n // Already absolute URL\n if (importPath.startsWith(\"http://\") || importPath.startsWith(\"https://\")) {\n return { success: true, data: importPath };\n }\n\n // Standard library\n if (importPath.startsWith(\"std/\")) {\n return this.resolveStdPath(importPath);\n }\n\n // Scoped packages\n if (importPath.startsWith(\"@\")) {\n return this.resolveScopedPath(importPath);\n }\n\n // Relative paths\n if (importPath.startsWith(\"./\") || importPath.startsWith(\"../\")) {\n return this.resolveRelativePath(importPath, fromPath);\n }\n\n // Default: treat as relative to base path\n return this.resolveRelativePath(`./${importPath}`, fromPath);\n }\n\n /**\n * Resolve a standard library path.\n */\n private resolveStdPath(importPath: string): LoadResult<string> {\n if (!this.options.stdLibPath) {\n return {\n success: false,\n error: `Standard library URL not configured. Cannot load: ${importPath}`,\n };\n }\n\n // std/behaviors/game-core -> stdLibPath/behaviors/game-core.orb\n const relativePath = importPath.slice(4); // Remove \"std/\"\n let absoluteUrl = this.joinUrl(this.options.stdLibPath, relativePath);\n\n // Add .orb extension if not present\n if (!absoluteUrl.endsWith(\".orb\")) {\n absoluteUrl += \".orb\";\n }\n\n return { success: true, data: absoluteUrl };\n }\n\n /**\n * Resolve a scoped package path.\n */\n private resolveScopedPath(importPath: string): LoadResult<string> {\n // Extract scope: @game-lib/enemies.orb -> @game-lib\n const match = importPath.match(/^(@[^/]+)/);\n if (!match) {\n return {\n success: false,\n error: `Invalid scoped package path: ${importPath}`,\n };\n }\n\n const scope = match[1];\n const scopeRoot = this.options.scopedPaths[scope];\n if (!scopeRoot) {\n return {\n success: false,\n error: `Scoped package \"${scope}\" not configured. Available: ${Object.keys(this.options.scopedPaths).join(\", \") || \"none\"}`,\n };\n }\n\n // @game-lib/enemies.orb -> scopeRoot/enemies.orb\n const relativePath = importPath.slice(scope.length + 1); // Remove \"@scope/\"\n let absoluteUrl = this.joinUrl(scopeRoot, relativePath);\n\n // Add .orb extension if not present\n if (!absoluteUrl.endsWith(\".orb\")) {\n absoluteUrl += \".orb\";\n }\n\n return { success: true, data: absoluteUrl };\n }\n\n /**\n * Resolve a relative path.\n */\n private resolveRelativePath(\n importPath: string,\n fromPath?: string\n ): LoadResult<string> {\n const baseUrl = fromPath ? this.getParentUrl(fromPath) : this.options.basePath;\n\n let absoluteUrl = this.joinUrl(baseUrl, importPath);\n\n // Add .orb extension if not present\n if (!absoluteUrl.endsWith(\".orb\")) {\n absoluteUrl += \".orb\";\n }\n\n return { success: true, data: absoluteUrl };\n }\n\n /**\n * Fetch and parse an OrbitalSchema from a URL.\n */\n private async fetchSchema(url: string): Promise<LoadResult<OrbitalSchema>> {\n try {\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(\n () => controller.abort(),\n this.options.timeout\n );\n\n try {\n const response = await fetch(url, {\n ...this.options.fetchOptions,\n credentials: this.options.credentials,\n signal: controller.signal,\n headers: {\n Accept: \"application/json\",\n ...this.options.fetchOptions?.headers,\n },\n });\n\n if (!response.ok) {\n return {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText} for ${url}`,\n };\n }\n\n const text = await response.text();\n\n // Parse JSON\n let data: unknown;\n try {\n data = JSON.parse(text);\n } catch (e) {\n return {\n success: false,\n error: `Invalid JSON in ${url}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n\n // Validate with Zod\n const parseResult = OrbitalSchemaSchema.safeParse(data);\n if (!parseResult.success) {\n const errors = parseResult.error.errors\n .map((e) => ` - ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\");\n return {\n success: false,\n error: `Invalid schema in ${url}:\\n${errors}`,\n };\n }\n\n return { success: true, data: parseResult.data as OrbitalSchema };\n } finally {\n clearTimeout(timeoutId);\n }\n } catch (e) {\n if (e instanceof Error && e.name === \"AbortError\") {\n return {\n success: false,\n error: `Request timeout for ${url} (${this.options.timeout}ms)`,\n };\n }\n return {\n success: false,\n error: `Failed to fetch ${url}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\n }\n\n /**\n * Join URL parts, handling relative paths and trailing slashes.\n */\n private joinUrl(base: string, path: string): string {\n // Handle absolute URLs in path\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path;\n }\n\n // Use URL API if available (browser and modern Node.js)\n if (typeof URL !== \"undefined\") {\n try {\n // Ensure base has a trailing slash for proper resolution\n const baseUrl = base.endsWith(\"/\") ? base : base + \"/\";\n return new URL(path, baseUrl).href;\n } catch {\n // Fall back to string manipulation\n }\n }\n\n // Simple string manipulation fallback\n const normalizedBase = base.endsWith(\"/\") ? base.slice(0, -1) : base;\n const normalizedPath = path.startsWith(\"/\") ? path : \"/\" + path;\n\n // Handle relative path navigation\n if (normalizedPath.startsWith(\"/./\")) {\n return normalizedBase + normalizedPath.slice(2);\n }\n\n // Handle parent directory navigation\n if (normalizedPath.startsWith(\"/../\")) {\n const baseParts = normalizedBase.split(\"/\");\n baseParts.pop(); // Remove last segment\n return baseParts.join(\"/\") + normalizedPath.slice(3);\n }\n\n return normalizedBase + normalizedPath;\n }\n\n /**\n * Get parent URL (directory) from a URL.\n */\n private getParentUrl(url: string): string {\n if (typeof URL !== \"undefined\") {\n try {\n const urlObj = new URL(url);\n const pathParts = urlObj.pathname.split(\"/\");\n pathParts.pop(); // Remove file name\n urlObj.pathname = pathParts.join(\"/\");\n return urlObj.href;\n } catch {\n // Fall back to string manipulation\n }\n }\n\n const lastSlash = url.lastIndexOf(\"/\");\n if (lastSlash !== -1) {\n return url.slice(0, lastSlash);\n }\n return url;\n }\n\n /**\n * Clear the cache.\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Get cache statistics.\n */\n getCacheStats(): { size: number } {\n return { size: this.cache.size };\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create an HTTP loader with sensible defaults.\n */\nexport function createHttpLoader(\n basePath: string,\n options?: Partial<HttpLoaderOptions>\n): HttpLoader {\n return new HttpLoader({\n basePath,\n ...options,\n });\n}\n","/**\n * Unified Schema Loader\n *\n * Auto-detects the environment and routes to the appropriate loader:\n * - FileSystemLoader for Node.js/Electron\n * - HttpLoader for browser\n *\n * Also handles mixed loading scenarios where some imports use filesystem\n * and others use HTTP.\n *\n * @packageDocumentation\n */\n\nimport type {\n SchemaLoader,\n LoadedSchema,\n LoadedOrbital,\n LoadResult,\n UnifiedLoaderOptions,\n ImportChainLike,\n} from \"./schema-loader.js\";\nimport { isElectron, isBrowser, isNode } from \"./schema-loader.js\";\nimport { HttpLoader, HttpImportChain } from \"./http-loader.js\";\n\n// ============================================================================\n// Dynamic Import for FileSystem Loader\n// ============================================================================\n\n// Type for the external loader module (loaded dynamically in Node.js)\ntype ExternalLoaderModule = typeof import(\"./external-loader.js\");\n\nlet externalLoaderModule: ExternalLoaderModule | null = null;\n\n/**\n * Dynamically import the external loader (Node.js only).\n * This avoids bundling fs module in browser builds.\n */\nasync function getExternalLoaderModule(): Promise<ExternalLoaderModule | null> {\n if (externalLoaderModule) {\n return externalLoaderModule;\n }\n\n if (isBrowser()) {\n return null;\n }\n\n try {\n // Dynamic import to avoid bundling fs in browser\n externalLoaderModule = await import(\"./external-loader.js\");\n return externalLoaderModule;\n } catch {\n return null;\n }\n}\n\n// ============================================================================\n// Unified Import Chain\n// ============================================================================\n\n/**\n * Import chain that works with both loaders.\n */\nexport class UnifiedImportChain implements ImportChainLike {\n private chain: string[] = [];\n\n push(path: string): string | null {\n // Normalize path for comparison (handle both file paths and URLs)\n const normalized = this.normalizePath(path);\n if (this.chain.includes(normalized)) {\n const cycle = [\n ...this.chain.slice(this.chain.indexOf(normalized)),\n normalized,\n ];\n return `Circular import detected: ${cycle.join(\" -> \")}`;\n }\n this.chain.push(normalized);\n return null;\n }\n\n pop(): void {\n this.chain.pop();\n }\n\n clone(): UnifiedImportChain {\n const newChain = new UnifiedImportChain();\n newChain.chain = [...this.chain];\n return newChain;\n }\n\n private normalizePath(path: string): string {\n // For URLs, use the full URL\n if (path.startsWith(\"http://\") || path.startsWith(\"https://\")) {\n return path;\n }\n // For file paths, normalize path separators\n return path.replace(/\\\\/g, \"/\");\n }\n}\n\n// ============================================================================\n// Unified Loader\n// ============================================================================\n\n/**\n * UnifiedLoader - Auto-detects environment and routes to appropriate loader.\n *\n * Loading Strategy:\n * - Electron: Uses FileSystemLoader with HTTP fallback for remote URLs\n * - Browser: Uses HttpLoader only (no filesystem access)\n * - Node.js: Uses FileSystemLoader with HTTP for remote URLs\n *\n * Import Type Resolution:\n * - `./local.orb`: FileSystem (Node/Electron) or Error (Browser)\n * - `std/behaviors/x`: FileSystem OR HTTP (configurable)\n * - `@scope/pkg.orb`: FileSystem OR HTTP (configurable)\n * - `https://...`: Always HTTP\n *\n * @example\n * ```typescript\n * const loader = createUnifiedLoader({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\", // or \"https://cdn.example.com/std\"\n * });\n *\n * // Load relative file (uses FileSystem in Node, error in Browser)\n * const local = await loader.load(\"./my-schema.orb\");\n *\n * // Load from URL (always uses HTTP)\n * const remote = await loader.load(\"https://example.com/schema.orb\");\n *\n * // Load from std library (uses configured path type)\n * const std = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class UnifiedLoader implements SchemaLoader {\n private options: UnifiedLoaderOptions;\n private httpLoader: HttpLoader | null = null;\n private fsLoader: SchemaLoader | null = null;\n private fsLoaderInitialized = false;\n private cache = new Map<string, LoadedSchema>();\n\n constructor(options: UnifiedLoaderOptions) {\n this.options = options;\n\n // Initialize HTTP loader (always available)\n this.httpLoader = new HttpLoader({\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n ...options.http,\n });\n }\n\n /**\n * Initialize the filesystem loader if available.\n */\n private async initFsLoader(): Promise<void> {\n if (this.fsLoaderInitialized) {\n return;\n }\n\n this.fsLoaderInitialized = true;\n\n if (this.options.forceLoader === \"http\") {\n return;\n }\n\n const module = await getExternalLoaderModule();\n if (module) {\n this.fsLoader = new module.ExternalOrbitalLoader({\n basePath: this.options.basePath,\n stdLibPath: this.options.stdLibPath,\n scopedPaths: this.options.scopedPaths,\n ...this.options.fileSystem,\n }) as SchemaLoader;\n }\n }\n\n /**\n * Determine which loader to use for an import path.\n */\n private getLoaderForPath(importPath: string): \"http\" | \"filesystem\" {\n // Force loader if configured\n if (this.options.forceLoader) {\n return this.options.forceLoader;\n }\n\n // HTTP URLs always use HTTP loader\n if (importPath.startsWith(\"http://\") || importPath.startsWith(\"https://\")) {\n return \"http\";\n }\n\n // Check if std lib is configured as HTTP\n if (importPath.startsWith(\"std/\") && this.options.stdLibPath) {\n if (\n this.options.stdLibPath.startsWith(\"http://\") ||\n this.options.stdLibPath.startsWith(\"https://\")\n ) {\n return \"http\";\n }\n }\n\n // Check if scoped package is configured as HTTP\n if (importPath.startsWith(\"@\") && this.options.scopedPaths) {\n const match = importPath.match(/^(@[^/]+)/);\n if (match) {\n const scopePath = this.options.scopedPaths[match[1]];\n if (\n scopePath &&\n (scopePath.startsWith(\"http://\") || scopePath.startsWith(\"https://\"))\n ) {\n return \"http\";\n }\n }\n }\n\n // Browser always uses HTTP (no filesystem)\n if (isBrowser()) {\n return \"http\";\n }\n\n // Node.js/Electron use filesystem for local files\n return \"filesystem\";\n }\n\n /**\n * Load a schema from an import path.\n *\n * Note: We delegate chain management to the inner loader (HttpLoader or FsLoader).\n * The inner loader handles circular import detection, so we don't push/pop here.\n * We only use the unified cache to avoid duplicate loads across loaders.\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedSchema>> {\n // Ensure filesystem loader is initialized\n await this.initFsLoader();\n\n const importChain = chain ?? new UnifiedImportChain();\n const loaderType = this.getLoaderForPath(importPath);\n\n // Resolve path first to check cache\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absolutePath = resolveResult.data;\n\n // Check unified cache\n const cached = this.cache.get(absolutePath);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Delegate to appropriate loader - the inner loader handles chain management\n let result: LoadResult<LoadedSchema>;\n\n if (loaderType === \"http\") {\n if (!this.httpLoader) {\n return {\n success: false,\n error: \"HTTP loader not available\",\n };\n }\n result = await this.httpLoader.load(importPath, fromPath, importChain);\n } else {\n if (!this.fsLoader) {\n // Fall back to HTTP if filesystem not available\n if (this.httpLoader) {\n result = await this.httpLoader.load(\n importPath,\n fromPath,\n importChain\n );\n } else {\n return {\n success: false,\n error: `Filesystem loader not available and import \"${importPath}\" cannot be loaded via HTTP. ` +\n `This typically happens when loading local files in a browser environment.`,\n };\n }\n } else {\n result = await this.fsLoader.load(importPath, fromPath, importChain);\n }\n }\n\n // Cache successful results in unified cache\n if (result.success) {\n this.cache.set(absolutePath, result.data);\n }\n\n return result;\n }\n\n /**\n * Load a specific orbital from a schema by name.\n */\n async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChainLike\n ): Promise<LoadResult<LoadedOrbital>> {\n const schemaResult = await this.load(importPath, fromPath, chain);\n if (!schemaResult.success) {\n return schemaResult;\n }\n\n const schema = schemaResult.data.schema;\n\n if (orbitalName) {\n const found = schema.orbitals.find((o) => o.name === orbitalName);\n if (!found) {\n return {\n success: false,\n error: `Orbital \"${orbitalName}\" not found in ${importPath}. Available: ${schema.orbitals.map((o) => o.name).join(\", \")}`,\n };\n }\n return {\n success: true,\n data: {\n orbital: found,\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\n // Default to first orbital\n if (schema.orbitals.length === 0) {\n return {\n success: false,\n error: `No orbitals found in ${importPath}`,\n };\n }\n\n return {\n success: true,\n data: {\n orbital: schema.orbitals[0],\n sourcePath: schemaResult.data.sourcePath,\n importPath,\n },\n };\n }\n\n /**\n * Resolve an import path to an absolute path/URL.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\n const loaderType = this.getLoaderForPath(importPath);\n\n if (loaderType === \"http\" && this.httpLoader) {\n return this.httpLoader.resolvePath(importPath, fromPath);\n }\n\n if (this.fsLoader) {\n return this.fsLoader.resolvePath(importPath, fromPath);\n }\n\n // Fallback to HTTP loader\n if (this.httpLoader) {\n return this.httpLoader.resolvePath(importPath, fromPath);\n }\n\n return {\n success: false,\n error: \"No loader available for path resolution\",\n };\n }\n\n /**\n * Clear all caches.\n */\n clearCache(): void {\n this.cache.clear();\n this.httpLoader?.clearCache();\n this.fsLoader?.clearCache();\n }\n\n /**\n * Get combined cache statistics.\n */\n getCacheStats(): { size: number } {\n let size = this.cache.size;\n if (this.httpLoader) {\n size += this.httpLoader.getCacheStats().size;\n }\n if (this.fsLoader) {\n size += this.fsLoader.getCacheStats().size;\n }\n return { size };\n }\n\n /**\n * Check if filesystem loading is available.\n */\n async hasFilesystemAccess(): Promise<boolean> {\n await this.initFsLoader();\n return this.fsLoader !== null;\n }\n\n /**\n * Get current environment info.\n */\n getEnvironmentInfo(): {\n isElectron: boolean;\n isBrowser: boolean;\n isNode: boolean;\n hasFilesystem: boolean;\n } {\n return {\n isElectron: isElectron(),\n isBrowser: isBrowser(),\n isNode: isNode(),\n hasFilesystem: this.fsLoader !== null,\n };\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a unified loader with sensible defaults.\n *\n * @example\n * ```typescript\n * // Basic usage\n * const loader = createUnifiedLoader({\n * basePath: \"/schemas\",\n * stdLibPath: \"/std\",\n * });\n *\n * // With HTTP std library\n * const loader = createUnifiedLoader({\n * basePath: \"/schemas\",\n * stdLibPath: \"https://cdn.example.com/orbital-std\",\n * });\n *\n * // Force HTTP only (browser-like behavior)\n * const loader = createUnifiedLoader({\n * basePath: \"/api/schemas\",\n * forceLoader: \"http\",\n * });\n * ```\n */\nexport function createUnifiedLoader(\n options: UnifiedLoaderOptions\n): UnifiedLoader {\n return new UnifiedLoader(options);\n}\n\n/**\n * Create a loader appropriate for the current environment.\n *\n * Convenience function that:\n * - In browser: Creates HttpLoader\n * - In Node.js/Electron: Creates UnifiedLoader\n */\nexport async function createAutoLoader(\n options: UnifiedLoaderOptions\n): Promise<SchemaLoader> {\n if (isBrowser()) {\n return new HttpLoader({\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n ...options.http,\n });\n }\n\n const loader = new UnifiedLoader(options);\n await loader.hasFilesystemAccess(); // Trigger initialization\n return loader;\n}\n","/**\n * Almadar Studio Loader Configuration\n *\n * Provides Electron-specific configuration for loading OrbitalSchema files\n * in the Almadar Studio desktop application.\n *\n * Features:\n * - Auto-detect bundled vs downloaded std library\n * - File system access for local .orb files\n * - HTTP fallback for remote schemas\n * - Workspace-relative path resolution\n *\n * @packageDocumentation\n */\n\nimport { createLogger } from '@almadar/logger';\nimport type { UnifiedLoaderOptions } from \"./schema-loader.js\";\nimport { isElectron } from \"./schema-loader.js\";\n\nconst log = createLogger('almadar:runtime:studio-config');\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Almadar Studio configuration options.\n */\nexport interface AlmadarStudioConfig {\n /**\n * Path to the workspace directory (user's project).\n * All relative imports are resolved from here.\n */\n workspacePath: string;\n\n /**\n * Path to bundled std library (in app resources).\n * Used when std library is bundled with the app.\n */\n bundledStdPath?: string;\n\n /**\n * Path to downloaded/cached std library.\n * Used when std library is downloaded on first run.\n */\n downloadedStdPath?: string;\n\n /**\n * URL for downloading std library if not available locally.\n */\n stdLibDownloadUrl?: string;\n\n /**\n * Scoped package paths for local packages.\n * e.g., { \"@my-company\": \"/path/to/packages\" }\n */\n localPackages?: Record<string, string>;\n\n /**\n * URLs for remote scoped packages (HTTP fallback).\n * e.g., { \"@community\": \"https://orbitals.example.com/packages\" }\n */\n remotePackages?: Record<string, string>;\n\n /**\n * Enable verbose logging.\n */\n debug?: boolean;\n}\n\n/**\n * Resolved paths for Almadar Studio.\n */\nexport interface ResolvedAlmadarPaths {\n /** Workspace path (base for relative imports) */\n workspacePath: string;\n\n /** Resolved std library path (bundled or downloaded) */\n stdLibPath: string | null;\n\n /** Whether std library was found locally */\n stdLibAvailable: boolean;\n\n /** Fallback URL for std library if not local */\n stdLibFallbackUrl: string | null;\n\n /** Combined scoped package paths (local + remote) */\n scopedPaths: Record<string, string>;\n}\n\n// ============================================================================\n// Default Paths\n// ============================================================================\n\n/**\n * Default paths for Almadar Studio in different environments.\n */\nexport const ALMADAR_DEFAULTS = {\n /**\n * Default bundled std library path (relative to app resources).\n * In Electron: process.resourcesPath + '/std'\n */\n BUNDLED_STD_SUBPATH: \"std\",\n\n /**\n * Default downloaded std library path (in user data).\n * In Electron: app.getPath('userData') + '/orbital-std'\n */\n DOWNLOADED_STD_SUBPATH: \"orbital-std\",\n\n /**\n * Default std library download URL.\n */\n STD_LIB_DOWNLOAD_URL: \"https://cdn.almadar.dev/orbital-std\",\n\n /**\n * Default remote package registry URL.\n */\n REMOTE_PACKAGE_URL: \"https://registry.almadar.dev/packages\",\n};\n\n// ============================================================================\n// Path Resolution\n// ============================================================================\n\n/**\n * Check if a path exists (works in both Node.js and Electron).\n * Returns false in browser environment.\n */\nasync function pathExists(path: string): Promise<boolean> {\n if (typeof window !== \"undefined\" && !isElectron()) {\n return false;\n }\n\n try {\n // Dynamic import to avoid bundling fs in browser\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n } catch {\n return false;\n }\n}\n\n/**\n * Extended process type for Electron environment.\n */\ninterface ElectronProcess extends NodeJS.Process {\n resourcesPath?: string;\n}\n\n/**\n * Get Electron app paths if available.\n */\nfunction getElectronPaths(): {\n resourcesPath: string | null;\n userDataPath: string | null;\n} {\n if (!isElectron()) {\n return { resourcesPath: null, userDataPath: null };\n }\n\n try {\n // In Electron renderer process\n interface ElectronWindow { electronAPI?: { resourcesPath?: string; userDataPath?: string } }\n if (typeof window !== \"undefined\" && (window as ElectronWindow).electronAPI) {\n const api = (window as ElectronWindow).electronAPI!;\n return {\n resourcesPath: api.resourcesPath || null,\n userDataPath: api.userDataPath || null,\n };\n }\n\n // In Electron main process\n const electronProcess = process as ElectronProcess;\n if (typeof process !== \"undefined\" && electronProcess.resourcesPath) {\n return {\n resourcesPath: electronProcess.resourcesPath,\n userDataPath: null, // Would need app.getPath('userData')\n };\n }\n } catch {\n // Ignore errors\n }\n\n return { resourcesPath: null, userDataPath: null };\n}\n\n/**\n * Resolve std library path, checking bundled first, then downloaded.\n */\nasync function resolveStdLibPath(\n config: AlmadarStudioConfig\n): Promise<{ path: string | null; available: boolean }> {\n // Check explicit bundled path first\n if (config.bundledStdPath) {\n if (await pathExists(config.bundledStdPath)) {\n return { path: config.bundledStdPath, available: true };\n }\n }\n\n // Check explicit downloaded path\n if (config.downloadedStdPath) {\n if (await pathExists(config.downloadedStdPath)) {\n return { path: config.downloadedStdPath, available: true };\n }\n }\n\n // Try Electron default paths\n const electronPaths = getElectronPaths();\n\n if (electronPaths.resourcesPath) {\n const bundledPath = `${electronPaths.resourcesPath}/${ALMADAR_DEFAULTS.BUNDLED_STD_SUBPATH}`;\n if (await pathExists(bundledPath)) {\n return { path: bundledPath, available: true };\n }\n }\n\n if (electronPaths.userDataPath) {\n const downloadedPath = `${electronPaths.userDataPath}/${ALMADAR_DEFAULTS.DOWNLOADED_STD_SUBPATH}`;\n if (await pathExists(downloadedPath)) {\n return { path: downloadedPath, available: true };\n }\n }\n\n // No local std library found\n return { path: null, available: false };\n}\n\n/**\n * Resolve all paths for Almadar Studio configuration.\n */\nexport async function resolveAlmadarPaths(\n config: AlmadarStudioConfig\n): Promise<ResolvedAlmadarPaths> {\n const stdLibResult = await resolveStdLibPath(config);\n\n // Combine local and remote scoped packages\n const scopedPaths: Record<string, string> = {\n ...(config.localPackages || {}),\n ...(config.remotePackages || {}),\n };\n\n return {\n workspacePath: config.workspacePath,\n stdLibPath: stdLibResult.path,\n stdLibAvailable: stdLibResult.available,\n stdLibFallbackUrl: stdLibResult.available\n ? null\n : config.stdLibDownloadUrl || ALMADAR_DEFAULTS.STD_LIB_DOWNLOAD_URL,\n scopedPaths,\n };\n}\n\n// ============================================================================\n// Loader Factory\n// ============================================================================\n\n/**\n * Create UnifiedLoader options for Almadar Studio.\n *\n * @example\n * ```typescript\n * // In Almadar Studio\n * const options = await createAlmadarLoaderOptions({\n * workspacePath: '/Users/dev/my-project',\n * });\n *\n * const loader = createUnifiedLoader(options);\n * const result = await loader.load('./my-schema.orb');\n * ```\n */\nexport async function createAlmadarLoaderOptions(\n config: AlmadarStudioConfig\n): Promise<UnifiedLoaderOptions> {\n const resolved = await resolveAlmadarPaths(config);\n\n if (config.debug) {\n log.debug('resolved-paths', {\n workspacePath: resolved.workspacePath,\n stdLibPath: resolved.stdLibPath,\n stdLibAvailable: resolved.stdLibAvailable,\n stdLibFallbackUrl: resolved.stdLibFallbackUrl,\n scopedPaths: resolved.scopedPaths,\n });\n }\n\n // Determine std library path (local or URL fallback)\n const stdLibPath = resolved.stdLibPath || resolved.stdLibFallbackUrl || undefined;\n\n return {\n basePath: resolved.workspacePath,\n stdLibPath,\n scopedPaths: resolved.scopedPaths,\n fileSystem: {\n allowOutsideBasePath: false, // Security: don't allow path traversal\n },\n http: {\n timeout: 30000,\n credentials: \"omit\", // Don't send cookies to CDN\n },\n };\n}\n\n/**\n * Check if std library needs to be downloaded.\n */\nexport async function needsStdLibDownload(\n config: AlmadarStudioConfig\n): Promise<boolean> {\n const resolved = await resolveAlmadarPaths(config);\n return !resolved.stdLibAvailable;\n}\n\n/**\n * Get the download URL for std library.\n */\nexport function getStdLibDownloadUrl(config: AlmadarStudioConfig): string {\n return config.stdLibDownloadUrl || ALMADAR_DEFAULTS.STD_LIB_DOWNLOAD_URL;\n}\n\n/**\n * Get the target path for downloaded std library.\n */\nexport function getStdLibDownloadTarget(config: AlmadarStudioConfig): string | null {\n if (config.downloadedStdPath) {\n return config.downloadedStdPath;\n }\n\n const electronPaths = getElectronPaths();\n if (electronPaths.userDataPath) {\n return `${electronPaths.userDataPath}/${ALMADAR_DEFAULTS.DOWNLOADED_STD_SUBPATH}`;\n }\n\n return null;\n}\n\n// ============================================================================\n// Workspace Detection\n// ============================================================================\n\n/**\n * Detect workspace from a schema file path.\n * Looks for common project markers (.git, package.json, orbital.config.json).\n */\nexport async function detectWorkspace(schemaPath: string): Promise<string | null> {\n if (typeof window !== \"undefined\" && !isElectron()) {\n return null;\n }\n\n try {\n const path = await import(\"path\");\n const fs = await import(\"fs\");\n\n let current = path.dirname(schemaPath);\n const root = path.parse(current).root;\n\n while (current !== root) {\n // Check for project markers\n const markers = [\n \".git\",\n \"package.json\",\n \"orbital.config.json\",\n \"almadar.config.json\",\n \".orbital\",\n ];\n\n for (const marker of markers) {\n const markerPath = path.join(current, marker);\n if (fs.existsSync(markerPath)) {\n return current;\n }\n }\n\n current = path.dirname(current);\n }\n } catch {\n // Ignore errors\n }\n\n return null;\n}\n","/**\n * Uses Integration for OrbitalServerRuntime\n *\n * Pre-processes OrbitalSchema to resolve `uses` declarations\n * before registration with the runtime.\n *\n * Features:\n * - Resolves all `uses` imports\n * - Expands entity/trait/page references\n * - Handles entity persistence semantics\n * - Applies event namespacing for imported traits\n *\n * @packageDocumentation\n */\n\nimport type { OrbitalSchema, Orbital, OrbitalDefinition, Entity, Page, Trait, TraitRef } from \"@almadar/core\";\nimport {\n isEntityReference,\n isPageReference,\n isPageReferenceString,\n isPageReferenceObject,\n} from \"@almadar/core\";\nimport {\n ReferenceResolver,\n resolveSchema,\n type ResolvedOrbital,\n type ResolveOptions,\n} from \"./resolver/reference-resolver.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n isBrowser,\n} from \"./loader/index.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of pre-processing a schema.\n */\nexport interface PreprocessedSchema {\n /** Schema with all references resolved */\n schema: OrbitalSchema;\n\n /** Entity sharing information (for runtime isolation) */\n entitySharing: EntitySharingMap;\n\n /** Event namespace mapping */\n eventNamespaces: EventNamespaceMap;\n\n /** Warnings from resolution */\n warnings: string[];\n}\n\n/**\n * Map of orbital -> entity sharing info\n */\nexport interface EntitySharingMap {\n [orbitalName: string]: {\n /** The entity name */\n entityName: string;\n /** Persistence type */\n persistence: \"persistent\" | \"runtime\" | \"singleton\";\n /** Whether this entity is shared with other orbitals */\n isShared: boolean;\n /** Source orbital if imported */\n sourceAlias?: string;\n /** Collection name for persistent entities */\n collectionName?: string;\n };\n}\n\n/**\n * Map of trait events to namespaced events\n */\nexport interface EventNamespaceMap {\n [orbitalName: string]: {\n [traitName: string]: {\n /** Original event -> namespaced event */\n emits: Record<string, string>;\n /** Namespaced event -> original event (for listeners) */\n listens: Record<string, string>;\n };\n };\n}\n\n/**\n * Options for preprocessing.\n */\nexport interface PreprocessOptions extends ResolveOptions {\n /** Apply event namespacing to imported traits */\n namespaceEvents?: boolean;\n}\n\n/**\n * Result type for preprocessing.\n */\nexport type PreprocessResult =\n | { success: true; data: PreprocessedSchema }\n | { success: false; errors: string[] };\n\n// ============================================================================\n// Pre-processor\n// ============================================================================\n\n/**\n * Preprocess a schema to resolve all `uses` references.\n *\n * This is the integration point between the new `uses` system and the\n * existing OrbitalServerRuntime. It:\n *\n * 1. Resolves all `uses` declarations\n * 2. Expands entity references to inline definitions\n * 3. Expands trait references to inline definitions\n * 4. Expands page references with path overrides\n * 5. Builds entity sharing map for runtime isolation\n * 6. Builds event namespace map for cross-orbital events\n *\n * @example\n * ```typescript\n * const result = await preprocessSchema(schema, {\n * basePath: \"/project/schemas\",\n * });\n *\n * if (result.success) {\n * // Register the preprocessed schema\n * runtime.register(result.data.schema);\n *\n * // Use entitySharing for isolation decisions\n * if (result.data.entitySharing[\"Level1\"].persistence === \"runtime\") {\n * // Entities are isolated per orbital\n * }\n * }\n * ```\n */\nexport async function preprocessSchema(\n schema: OrbitalSchema,\n options: PreprocessOptions\n): Promise<PreprocessResult> {\n const namespaceEvents = options.namespaceEvents ?? true;\n\n // Resolve all references\n const resolveResult = await resolveSchema(schema, options);\n if (!resolveResult.success) {\n return { success: false, errors: resolveResult.errors };\n }\n\n const resolved = resolveResult.data;\n const warnings = resolveResult.warnings;\n\n // Build preprocessed orbitals\n const preprocessedOrbitals: Orbital[] = [];\n const entitySharing: EntitySharingMap = {};\n const eventNamespaces: EventNamespaceMap = {};\n\n for (const resolvedOrbital of resolved) {\n const orbitalName = resolvedOrbital.name;\n\n // Build entity sharing info\n const persistence = resolvedOrbital.entitySource?.persistence ??\n (resolvedOrbital.entity.persistence as \"persistent\" | \"runtime\" | \"singleton\" | undefined) ??\n \"persistent\";\n\n entitySharing[orbitalName] = {\n entityName: resolvedOrbital.entity.name,\n persistence,\n isShared: persistence !== \"runtime\",\n sourceAlias: resolvedOrbital.entitySource?.alias,\n collectionName: resolvedOrbital.entity.collection,\n };\n\n // Build event namespace map\n eventNamespaces[orbitalName] = {};\n for (const resolvedTrait of resolvedOrbital.traits) {\n const traitName = resolvedTrait.trait.name;\n const namespace: { emits: Record<string, string>; listens: Record<string, string> } = {\n emits: {},\n listens: {},\n };\n\n // Namespace emitted events if the trait is imported\n if (namespaceEvents && resolvedTrait.source.type === \"imported\") {\n const emits = resolvedTrait.trait.emits ?? [];\n for (const emit of emits) {\n const eventName = typeof emit === \"string\" ? emit : emit.event;\n // External events get namespaced: OrbitalName.TraitName.EVENT\n namespace.emits[eventName] = `${orbitalName}.${traitName}.${eventName}`;\n }\n\n const listens = resolvedTrait.trait.listens ?? [];\n for (const listen of listens) {\n // Listening to namespaced events\n namespace.listens[listen.event] = listen.event;\n }\n }\n\n eventNamespaces[orbitalName][traitName] = namespace;\n }\n\n // Build preprocessed orbital with resolved inline definitions\n const preprocessedOrbital: OrbitalDefinition = {\n name: orbitalName,\n description: resolvedOrbital.original.description,\n visual_prompt: resolvedOrbital.original.visual_prompt,\n // Resolved entity (always inline now)\n entity: resolvedOrbital.entity,\n // Resolved traits (inline definitions)\n traits: (resolvedOrbital.traits || []).map((rt) => {\n // If it has config or linkedEntity, wrap in reference object.\n // `rt.trait.name` reflects any call-site rename applied by\n // ReferenceResolver.resolveTraitRefString's `overrideName`, so\n // `ref` and `_resolved.name` stay consistent with whatever local\n // name the molecule/organism declared for the inlined trait.\n if (rt.config || rt.linkedEntity) {\n return {\n ref: rt.trait.name,\n config: rt.config,\n linkedEntity: rt.linkedEntity,\n // Include the resolved trait definition for runtime\n _resolved: rt.trait,\n } as TraitRef;\n }\n // Otherwise return the inline trait\n return rt.trait as TraitRef;\n }),\n // Resolved pages (inline definitions with path overrides applied)\n pages: resolvedOrbital.pages.map((rp) => rp.page),\n // Preserve other fields\n exposes: resolvedOrbital.original.exposes,\n domainContext: resolvedOrbital.original.domainContext,\n design: resolvedOrbital.original.design,\n // Gap #22: pass through auxiliary entities so OrbitalServerRuntime's\n // mock-seed branch registers SearchResult / FilterTarget / PagedItem\n // alongside the molecule's primary entity. Without this, an inlined\n // .orb that has `auxiliaryEntities` populated by the Rust inline\n // phase still loses them here, and `(set @entity.searchTerm ...)` /\n // `(fetch SearchResult ...)` from no-rebind imports hit unregistered\n // persistence and silently no-op.\n auxiliaryEntities: resolvedOrbital.original.auxiliaryEntities,\n };\n\n preprocessedOrbitals.push(preprocessedOrbital);\n }\n\n // Build preprocessed schema\n const preprocessedSchema: OrbitalSchema = {\n ...schema,\n orbitals: preprocessedOrbitals,\n };\n\n return {\n success: true,\n data: {\n schema: preprocessedSchema,\n entitySharing,\n eventNamespaces,\n warnings,\n },\n };\n}\n\n// ============================================================================\n// Entity Isolation Helper\n// ============================================================================\n\n/**\n * Get the collection name for an orbital's entity, considering isolation.\n *\n * - `persistent` entities share the same collection\n * - `runtime` entities get isolated collections per orbital\n * - `singleton` entities share a single-record collection\n */\nexport function getIsolatedCollectionName(\n orbitalName: string,\n entitySharing: EntitySharingMap\n): string {\n const info = entitySharing[orbitalName];\n if (!info) {\n throw new Error(`Unknown orbital: ${orbitalName}`);\n }\n\n if (info.persistence === \"runtime\") {\n // Isolated: use orbital-prefixed collection\n return `${orbitalName}_${info.entityName}`;\n }\n\n // Shared: use the entity's collection name or default\n return info.collectionName || info.entityName.toLowerCase() + \"s\";\n}\n\n// ============================================================================\n// Event Namespacing Helper\n// ============================================================================\n\n/**\n * Get the namespaced event name for an orbital's trait event.\n */\nexport function getNamespacedEvent(\n orbitalName: string,\n traitName: string,\n eventName: string,\n eventNamespaces: EventNamespaceMap\n): string {\n const orbitalNs = eventNamespaces[orbitalName];\n if (!orbitalNs) return eventName;\n\n const traitNs = orbitalNs[traitName];\n if (!traitNs) return eventName;\n\n return traitNs.emits[eventName] || eventName;\n}\n\n/**\n * Check if an event name is namespaced (contains dots).\n */\nexport function isNamespacedEvent(eventName: string): boolean {\n return eventName.includes(\".\");\n}\n\n/**\n * Parse a namespaced event name.\n */\nexport function parseNamespacedEvent(\n eventName: string\n): { orbital?: string; trait?: string; event: string } {\n const parts = eventName.split(\".\");\n if (parts.length === 3) {\n return { orbital: parts[0], trait: parts[1], event: parts[2] };\n }\n if (parts.length === 2) {\n return { trait: parts[0], event: parts[1] };\n }\n return { event: eventName };\n}\n\n// ============================================================================\n// Loader Factory Helper\n// ============================================================================\n\n/**\n * Options for creating a schema preprocessor.\n */\nexport interface CreatePreprocessorOptions {\n /** Base path for schema files */\n basePath: string;\n\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n\n /** Custom loader instance (optional) */\n loader?: SchemaLoader;\n\n /** Apply event namespacing to imported traits */\n namespaceEvents?: boolean;\n}\n\n/**\n * Create a schema preprocessor with automatic loader selection.\n *\n * In browser environments, uses HttpLoader.\n * In Node.js/Electron, uses UnifiedLoader (filesystem + HTTP fallback).\n *\n * @example\n * ```typescript\n * // Server-side (Node.js)\n * const preprocessor = createPreprocessor({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\",\n * });\n *\n * // Browser-side (uses HTTP)\n * const preprocessor = createPreprocessor({\n * basePath: \"/api/schemas\",\n * stdLibPath: \"https://cdn.example.com/orbital-std\",\n * });\n *\n * // Custom loader\n * const preprocessor = createPreprocessor({\n * basePath: \"/schemas\",\n * loader: myCustomLoader,\n * });\n * ```\n */\nexport function createPreprocessor(options: CreatePreprocessorOptions): {\n preprocess: (schema: OrbitalSchema) => Promise<PreprocessResult>;\n loader: SchemaLoader;\n} {\n // Create loader if not provided\n const loader = options.loader ?? createUnifiedLoader({\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n });\n\n const preprocess = (schema: OrbitalSchema) =>\n preprocessSchema(schema, {\n basePath: options.basePath,\n stdLibPath: options.stdLibPath,\n scopedPaths: options.scopedPaths,\n loader,\n namespaceEvents: options.namespaceEvents,\n });\n\n return { preprocess, loader };\n}\n\n/**\n * Preprocess a schema with automatic loader selection.\n *\n * Convenience wrapper around `preprocessSchema` that creates\n * an appropriate loader based on the environment.\n *\n * @example\n * ```typescript\n * const result = await preprocessSchemaAuto(schema, {\n * basePath: \"/schemas\",\n * stdLibPath: \"/std\",\n * });\n * ```\n */\nexport async function preprocessSchemaAuto(\n schema: OrbitalSchema,\n options: Omit<CreatePreprocessorOptions, \"loader\">\n): Promise<PreprocessResult> {\n const { preprocess } = createPreprocessor(options);\n return preprocess(schema);\n}\n","/**\n * PersistenceAdapter — the storage contract for runtime effect handlers.\n *\n * The server-side runtime and the in-browser mock runtime both invoke\n * `fetch` / `persist` / `ref` / `deref` / `swap!` effects against an\n * implementation of this interface. Extracted from\n * `OrbitalServerRuntime.ts` so it can be imported by browser code that\n * cannot depend on the server module (which pulls in express).\n *\n * @packageDocumentation\n */\nimport type { EntityRow } from \"./types.js\";\n\n/**\n * Storage contract for CRUD operations on runtime entity rows.\n *\n * Implementations:\n * - `InMemoryPersistence` (this file) — simple Map-backed store, used by\n * the browser mock runtime and as the default when an adapter is not\n * supplied to `OrbitalServerRuntime`.\n * - `MockPersistenceAdapter` — in-memory with faker-generated seed data\n * for realistic preview content.\n * - `LocalPersistenceAdapter` — localStorage-backed, browser-safe.\n * - Consumer-provided (e.g. Firestore, Postgres) for production servers.\n */\nexport interface PersistenceAdapter {\n create(entityType: string, data: EntityRow): Promise<{ id: string }>;\n update(entityType: string, id: string, data: EntityRow): Promise<void>;\n delete(entityType: string, id: string): Promise<void>;\n getById(entityType: string, id: string): Promise<EntityRow | null>;\n list(entityType: string): Promise<EntityRow[]>;\n}\n\n/**\n * Simple in-memory persistence for dev/testing and offline previews.\n * Keys each entity collection by type, rows by generated string id.\n */\nexport class InMemoryPersistence implements PersistenceAdapter {\n private data = new Map<string, Map<string, EntityRow>>();\n private idCounter = 0;\n\n /**\n * Seed the store with pre-existing rows.\n *\n * Accepts either a plain `Record<entityType, EntityRow[]>` or an iterable\n * of `[entityType, EntityRow[]]` entries. Rows without an `id` get one\n * generated at insert time; rows with an `id` keep it (so re-seeding\n * after a schema rebuild preserves identities used in render bindings).\n */\n seed(seedData: Record<string, EntityRow[]> | Iterable<[string, EntityRow[]]>): void {\n const entries: Iterable<[string, EntityRow[]]> =\n Symbol.iterator in Object(seedData)\n ? (seedData as Iterable<[string, EntityRow[]]>)\n : Object.entries(seedData as Record<string, EntityRow[]>);\n for (const [entityType, rows] of entries) {\n if (!this.data.has(entityType)) {\n this.data.set(entityType, new Map());\n }\n const collection = this.data.get(entityType)!;\n for (const row of rows) {\n const id = (row.id as string) || `${entityType}-${++this.idCounter}`;\n collection.set(id, { ...row, id });\n }\n }\n }\n\n async create(\n entityType: string,\n data: EntityRow,\n ): Promise<{ id: string }> {\n const id = (data.id as string) || `${entityType}-${++this.idCounter}`;\n if (!this.data.has(entityType)) {\n this.data.set(entityType, new Map());\n }\n this.data.get(entityType)!.set(id, { ...data, id });\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: EntityRow,\n ): Promise<void> {\n const collection = this.data.get(entityType);\n if (collection?.has(id)) {\n const existing = collection.get(id)!;\n collection.set(id, { ...existing, ...data });\n }\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n this.data.get(entityType)?.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string,\n ): Promise<EntityRow | null> {\n return this.data.get(entityType)?.get(id) || null;\n }\n\n async list(entityType: string): Promise<EntityRow[]> {\n const collection = this.data.get(entityType);\n return collection ? Array.from(collection.values()) : [];\n }\n\n /**\n * Snapshot the entire store as a plain object (entityType → rows).\n * Useful for feeding a fresh render-time binding layer with the\n * current persistence view.\n */\n snapshot(): Record<string, EntityRow[]> {\n const out: Record<string, EntityRow[]> = {};\n for (const [entityType, collection] of this.data) {\n out[entityType] = Array.from(collection.values());\n }\n return out;\n }\n}\n","/**\n * OrbitalServerRuntime - Dynamic Server-Side Orbital Execution\n *\n * This runtime takes an OrbitalSchema and dynamically:\n * 1. Registers all orbitals and their traits\n * 2. Creates Express routes for trait communication\n * 3. Executes state machines server-side\n * 4. Handles cross-orbital event propagation\n *\n * This is the \"interpreted\" mode - no compilation needed.\n * The compiler generates equivalent static code for production.\n *\n * @example\n * ```typescript\n * import { OrbitalServerRuntime } from '@kflow-builder/shared/runtime';\n * import express from 'express';\n *\n * const app = express();\n * const runtime = new OrbitalServerRuntime();\n *\n * // Register schema (can be loaded from file, API, etc.)\n * runtime.register(orbitalSchema);\n *\n * // Mount orbital routes\n * app.use('/api/orbitals', runtime.router());\n *\n * // Client can now:\n * // POST /api/orbitals/:orbital/events - Send event to orbital\n * // GET /api/orbitals/:orbital/state - Get current state\n * // GET /api/orbitals - List registered orbitals\n * ```\n *\n * @packageDocumentation\n */\n\n// `express` is Node-only (HTTP router, no browser equivalent). Importing\n// the named `Router` at top-level baked the module into the dist bundle,\n// where Vite/rollup's stricter named-import resolution choked because\n// `__vite-browser-external` doesn't expose `Router`. Solution: type-only\n// import here, load the runtime value inside `router()` via the\n// eval-require helper below — invisible to bundler static analysis.\nimport type {\n Router as ExpressRouter,\n Request,\n Response,\n NextFunction,\n} from \"express\";\nimport { EventBus } from \"./EventBus.js\";\nimport {\n StateMachineManager,\n processEvent,\n createInitialTraitState,\n} from \"./StateMachineCore.js\";\nimport { EffectExecutor } from \"./EffectExecutor.js\";\nimport { createLogger } from '@almadar/logger';\n// Same treatment for `LocalPersistenceAdapter` (uses `fs`, `path`) and\n// `createOsHandlers` (uses `fs`, `net`, `child_process`). The runtime\n// auto-wires both in the constructor's Node-only branch — guarded by\n// `isNodeEnv()` — and the eval-require keeps the imports out of the\n// browser bundle entirely.\nimport type { LocalPersistenceAdapter as LocalPersistenceAdapterType } from \"./LocalPersistenceAdapter.js\";\nimport type {\n createOsHandlers as CreateOsHandlersFn,\n OsHandlerResult,\n} from \"./createOsHandlers.js\";\nimport {\n validateEventPayload,\n formatPayloadValidationError,\n type PayloadValidationFailure,\n} from \"./PayloadValidator.js\";\n\n/**\n * Synchronous Node-only require, hidden from bundler static analysis.\n *\n * Bundlers (tsup, Vite/rollup, webpack) walk imports statically. The two\n * indirections below — `(0, eval)('require')` and the namespace import of\n * `'module'` resolved by property access — keep the dist bundle free of\n * any reference to `fs`, `net`, `child_process`, or `express`, so any\n * browser bundler can consume `OrbitalServerRuntime.js` without a\n * polyfill / stub / fallback chain.\n *\n * Why both paths:\n * - `eval('require')` works in CommonJS Node (returns the runtime require).\n * - In ESM Node, `require` isn't a global, so the eval returns undefined.\n * We fall back to `createRequire(import.meta.url)` from the `'module'`\n * built-in, which IS the canonical ESM-Node way to synchronously load\n * a Node module.\n *\n * Every call site is guarded by `isNodeEnv()` upstream so the browser\n * never reaches this. In browsers the namespace import of `'module'`\n * resolves to an empty stub via the package.json `browser` field; the\n * function is never invoked, so the empty-stub never matters.\n */\nimport * as nodeModule from 'module';\nlet _resolvedNodeRequire: NodeRequire | null = null;\nfunction nodeRequire<T = unknown>(modulePath: string): T {\n if (!_resolvedNodeRequire) {\n const evalRequire = (0, eval)('typeof require !== \"undefined\" ? require : null') as NodeRequire | null;\n if (evalRequire) {\n _resolvedNodeRequire = evalRequire;\n } else {\n const createReq = (nodeModule as { createRequire?: (url: string | URL) => NodeRequire }).createRequire;\n if (typeof createReq !== 'function') {\n throw new Error(\n '[OrbitalServerRuntime] No synchronous require available. This branch is Node-only — invoking it from a browser indicates an isNodeEnv() guard regression upstream.',\n );\n }\n _resolvedNodeRequire = createReq(import.meta.url);\n }\n }\n return _resolvedNodeRequire(modulePath) as T;\n}\n\n/**\n * Pick the module-spec extension to use with `nodeRequire`. In Vitest /\n * source mode, `import.meta.url` ends in `.ts` and the dist `.js` files\n * don't exist; in production dist runs, the spec must be `.js`. Detecting\n * via `import.meta.url` keeps both paths working without test-mode flags.\n */\nconst _nodeRequireExt = import.meta.url.endsWith('.ts') ? '.ts' : '.js';\n\nconst effectLog = createLogger(\"almadar:runtime:effects\");\nconst busLog = createLogger(\"almadar:runtime:bus\");\n// Render-ui-side observability for the runtime path. Lit up via\n// `ALMADAR_DEBUG=almadar:runtime:render-ui` (or `localStorage.ALMADAR_DEBUG`\n// in the browser). Tracks every render-ui clientEffect push so we can tell\n// when the runtime re-fires `render-ui` for the modal slot during a typing\n// session — the suspected reason form fields snap back to pre-fill on the\n// runtime path while the compiled path holds them stable.\nconst renderLog = createLogger(\"almadar:runtime:render-ui\");\n// Gap #11 (Almadar_Std_Verification.md): cross-orbital cascade tracing.\n// Logs per processOrbitalEvent entry and per emit so the runtime-verify\n// console capture shows which orbital's traits actually fired during a\n// dispatch. Pairs with the UI-side `almadar:runtime:cross-orbital` channel\n// in OrbPreview / ServerBridge / SlotsContext.\nconst xOrbitalLog = createLogger(\"almadar:runtime:cross-orbital\");\nconst persistLog = createLogger(\"almadar:runtime:persist\");\nconst registerLog = createLogger(\"almadar:runtime:register\");\nconst dynamicLog = createLogger(\"almadar:runtime:dynamic\");\n// Note: `LocalPersistenceAdapter` is re-exported from `index.ts`, not from\n// here. Keeping a value re-export here would force tsup to inline the\n// adapter into `OrbitalServerRuntime.js`'s bundle, defeating the\n// type-only-import-plus-eval-require strategy described above.\nimport {\n interpolateProps,\n createContextFromBindings,\n} from \"./BindingResolver.js\";\nimport { evaluate, evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n EntityRow,\n EventPayload,\n EvaluationContextExtensions,\n RuntimeRenderPattern,\n} from \"./types.js\";\nimport type {\n FieldValue,\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n EntityField,\n Trait,\n TraitTick,\n TraitConfig,\n TraitConfigValue,\n BusEventSource,\n PatternConfig,\n ResolvedPatternProps,\n SExpr,\n} from \"@almadar/core\";\n\n/**\n * Client-side effect tuple shipped in `OrbitalEventResponse.clientEffects`.\n * Restricted to the three effect kinds the client knows how to apply to the\n * UI: render-ui (slot mutation), navigate (route change), notify (toast).\n * Server-only effects (persist, set, fetch, ...) execute on the server and\n * surface their results via `effectResults` and `emittedEvents`, not here.\n *\n * Shape note: the wire form is broader than `RenderUIEffect` /\n * `NavigateEffect` / `NotifyEffect` from `@almadar/core/types/effect.ts` in\n * two places — the runtime appends an interpolated `props` object plus an\n * optional `priority` slot to render-ui (slot 4 + 5), and `navigate` /\n * `notify` may surface their optional argument as `undefined` rather than\n * absent. The local union spells those variants out explicitly so consumers\n * (ServerBridge.tsx parser, debugger inspector) get accurate completions\n * instead of `unknown[]`.\n *\n * `slot` is a plain `string` in this wire shape (not `UISlot`'s literal\n * union) because the runtime forwards the raw string from the trait's\n * `(render-ui slot ...)` SExpr without re-validating against the registry —\n * registry validation lives in `orbital validate` / `lolo` parse, not here.\n */\nexport type ClientRenderUITuple =\n | ['render-ui', string, PatternConfig | null]\n | ['render-ui', string, PatternConfig | null, ResolvedPatternProps]\n | ['render-ui', string, PatternConfig | null, ResolvedPatternProps | undefined, number | undefined];\n\nexport type ClientNavigateTuple =\n | ['navigate', string]\n | ['navigate', string, Record<string, string> | undefined];\n\nexport type ClientNotifyTuple =\n | ['notify', string, string | SExpr | undefined]\n | ['notify', string, string | SExpr | undefined, { type?: string }];\n\nexport type ClientEffectTuple =\n | ClientRenderUITuple\n | ClientNavigateTuple\n | ClientNotifyTuple;\nimport { isInlineTrait, isEntityCall } from \"@almadar/core\";\nimport { MockPersistenceAdapter } from \"./MockPersistenceAdapter.js\";\nimport {\n preprocessSchema,\n type PreprocessedSchema,\n type EntitySharingMap,\n type EventNamespaceMap,\n} from \"./UsesIntegration.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n} from \"./loader/index.js\";\n// `createOsHandlers` is type-imported at the top of this file and value-\n// loaded via `nodeRequire` inside the constructor's Node-only branch.\n// Removed the value-import here so the dist bundle has no static\n// reference to `./createOsHandlers.js` and its fs/net/child_process\n// imports vanish from the browser-side dependency graph.\n\n// Node-detection helper. Used to guard call sites of express, fs/path/net,\n// and child_process — those modules are stubbed by the package.json `browser`\n// field in browser bundles, so calling them would crash. Browser consumers\n// (e.g. `<BrowserPlayground>` from @almadar/ui in mock mode) skip these\n// paths entirely.\nfunction isNodeEnv(): boolean {\n return typeof process !== \"undefined\" && Boolean(process.versions?.node);\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n// Uses OrbitalSchema, OrbitalDefinition, Trait, TraitTick from @almadar/core directly.\n// No redundant runtime-specific types.\n\n/** @deprecated Use OrbitalSchema from @almadar/core */\nexport type RuntimeOrbitalSchema = OrbitalSchema;\n/** @deprecated Use OrbitalDefinition from @almadar/core */\nexport type RuntimeOrbital = OrbitalDefinition;\n/** @deprecated Use Trait from @almadar/core */\nexport type RuntimeTrait = Trait;\n/** @deprecated Use TraitTick from @almadar/core */\nexport type RuntimeTraitTick = TraitTick;\n\n/**\n * Registered orbital with runtime state\n */\nexport interface RegisteredOrbital {\n schema: OrbitalDefinition;\n /** Resolved entity (never a string ref at runtime) */\n entity: Entity;\n /** Resolved inline traits (string refs filtered out) */\n traits: Trait[];\n /**\n * Call-site `config: { ... }` attached to each trait ref, keyed by trait\n * name. Used to populate the `@config.X` binding when running that trait's\n * effects. Preserved from the preprocessed schema's trait-ref wrapper\n * (`{ ref, config, linkedEntity, _resolved }`) before the wrapper is\n * unwrapped to its inline form.\n */\n configByTrait: Map<string, TraitConfig>;\n manager: StateMachineManager;\n entityData: Map<string, EntityRow>; // entityId -> data\n /**\n * Per-trait scalar state set by `(set @entity.X Y)`. Mirrors compiled's\n * `state.fields`. The trait's `@entity` binding resolves from this map\n * during effect interpolation. Initial empty; mutated only by the `set`\n * effect handler. No implicit seeding from persistence.\n */\n traitFieldStates: Map<string, EntityRow>;\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: EventPayload;\n entityId?: string;\n /** User context for @user bindings (from Firebase auth) */\n user?: {\n uid: string;\n email?: string;\n displayName?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Response from event processing\n */\nexport interface OrbitalEventResponse {\n success: boolean;\n transitioned: boolean;\n states: Record<string, string>;\n /**\n * Events emitted during processing, in declaration order. Payloads are\n * typed against `@almadar/core`'s `EventPayload` — the recursive record of\n * primitive + nested EventPayload values the state machine already uses\n * internally. Kept as the single source of truth for emit-payload shape.\n *\n * Each entry carries a `source: BusEventSource` so the client-side\n * ServerBridge can re-broadcast on the qualified `UI:Orbital.Trait.EVENT`\n * bus key. Without source the re-broadcast skips the entry and downstream\n * listeners (e.g. ContactBrowse waiting for ContactLoaded after a fetch)\n * never fire — the dashboard-layout that ContactLoaded renders disappears.\n */\n emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }>;\n /** Client-side effects to execute (render-ui, navigate, notify) */\n clientEffects?: ClientEffectTuple[];\n /**\n * Same effects as `clientEffects`, paired with the producing trait name.\n * Consumers that need per-trait attribution (e.g. `<TraitFrame>` resolving\n * `@trait.X` bindings) read from this field; legacy consumers ignore it\n * and continue with the flat `clientEffects` array unchanged.\n *\n * Same length and ordering as `clientEffects`; entries are 1:1 by index.\n */\n clientEffectsByTrait?: Array<{ traitName: string; effect: ClientEffectTuple }>;\n /** Results from server-side effects (persist, call-service, set) */\n effectResults?: EffectResult[];\n error?: string;\n}\n\n/**\n * Result of a server-side effect execution.\n * Closes the circuit by returning effect outcomes to the client.\n */\nexport interface EffectResult {\n /** Effect type that was executed */\n effect: 'persist' | 'call-service' | 'set' | 'ref' | 'deref' | 'swap' | 'atomic';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set/ref/deref/swap) */\n entityType?: string;\n /** Result data from the effect (entity row for CRUD, summary for batch) */\n data?: EntityRow | { operations: EntityRow[]; completedCount: number; totalCount: number };\n /** Whether the effect succeeded */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Loader configuration for resolving `uses` imports\n */\nexport interface LoaderConfig {\n /** Base path for schema files */\n basePath: string;\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n /** Custom loader instance (overrides basePath/stdLibPath) */\n loader?: SchemaLoader;\n}\n\n/**\n * Runtime configuration\n */\nexport interface OrbitalServerRuntimeConfig {\n /** Enable debug logging */\n debug?: boolean;\n /** Custom effect handlers (for integrating with your data layer) */\n effectHandlers?: Partial<EffectHandlers>;\n /** Persistence adapter for entity data */\n persistence?: PersistenceAdapter;\n /**\n * Data mode:\n * - 'mock': Use faker-generated mock data (default for preview)\n * - 'real': Use actual persistence layer\n */\n mode?: 'mock' | 'real';\n /** Seed for deterministic mock data generation */\n mockSeed?: number;\n /** Number of mock records to generate per entity */\n mockSeedCount?: number;\n /**\n * Loader configuration for resolving `uses` imports.\n * Required when using `registerWithPreprocess` or `autoPreprocess`.\n */\n loaderConfig?: LoaderConfig;\n /**\n * Automatically preprocess schemas on register() to resolve `uses` imports.\n * Requires `loaderConfig` to be set.\n * Default: false\n */\n autoPreprocess?: boolean;\n /**\n * Apply event namespacing to imported traits.\n * Default: true\n */\n namespaceEvents?: boolean;\n /**\n * Root directory for `persistence: \"local\"` entities.\n * Default: ~/.orb/data/\n */\n localStorageRoot?: string;\n /**\n * Additional fields to spread onto every EvaluationContext.\n * Use this to inject module contexts (e.g., { agent: AgentContext }).\n * The evaluator dispatches agent/* operators to ctx.agent.\n */\n contextExtensions?: EvaluationContextExtensions;\n}\n\n/**\n * Adapter for persisting entity data\n */\n// `PersistenceAdapter` + `InMemoryPersistence` live in their own browser-safe\n// module so the in-browser mock runtime can reuse the same storage contract\n// without pulling in this server-only module's express dependency. Re-exported\n// here so existing `import { PersistenceAdapter } from './OrbitalServerRuntime'`\n// call sites keep working.\nexport type { PersistenceAdapter } from \"./PersistenceAdapter.js\";\nexport { InMemoryPersistence } from \"./PersistenceAdapter.js\";\nimport type { PersistenceAdapter } from \"./PersistenceAdapter.js\";\nimport { InMemoryPersistence } from \"./PersistenceAdapter.js\";\n\n// ============================================================================\n// OrbitalServerRuntime\n// ============================================================================\n\n/**\n * Check whether a schema needs preprocessing (has `uses` declarations or\n * un-inlined cross-orbital trait references).\n *\n * Cross-orbital refs are trait entries like\n * `{ ref: \"Modal.traits.ModalRecordModal\", ... }` with no inline\n * `stateMachine`. If these aren't resolved before `register()` runs, the\n * trait binder produces an empty state machine and all interactions\n * targeting the trait are silently dropped.\n */\n/**\n * Walk a trait's DECLARED config schema (`{ icon: { type, default }, ... }`)\n * and collect a flat `{ icon: <default>, ... }` map of just the default\n * values. Used to seed the `@config.X` binding context with the atom's\n * own declared defaults before any call-site override is applied. Mirrors\n * the compiled path's `DEFAULT_<TRAIT>_CONFIG` constant emitted by\n * backend.rs's Solution-1 plumbing.\n *\n * Returns `undefined` when the trait has no config schema or none of its\n * fields declare a default — keeps the caller's existing fast-path.\n */\n/**\n * Structural shape that both `@almadar/core`'s `Trait` and\n * `ResolvedTrait` satisfy: a `config?` map keyed by field name whose\n * values either carry a `default` (the declared-schema form loaded\n * from `.orb`) or are bare values (the runtime-resolved form).\n *\n * Widening to a structural parameter lets callers from the resolved\n * side (e.g., `@almadar/ui`'s `useTraitStateMachine`) pass their own\n * `ResolvedTrait` without an `as unknown as` cast.\n */\n/**\n * Read the `default` from each field of a trait's declared\n * `config { }` schema and return the flat `{ key: default, ... }`\n * map. Used to seed `@config.X` binding context with the atom's\n * own declared defaults before any call-site override is applied.\n *\n * Mirrors the compiled path's `DEFAULT_<TRAIT>_CONFIG` constant\n * emitted by `backend.rs` Solution-1.\n */\nexport function collectDeclaredConfigDefaults(\n trait: { config?: import('@almadar/core').DeclaredTraitConfig } | undefined,\n): TraitConfig | undefined {\n if (!trait) return undefined;\n const schema = trait.config;\n if (!schema || typeof schema !== 'object') return undefined;\n const defaults: Record<string, TraitConfigValue> = {};\n let hasAny = false;\n for (const [key, field] of Object.entries(schema)) {\n if (field && typeof field === 'object' && !Array.isArray(field) && 'default' in field) {\n const def = (field as { default?: TraitConfigValue }).default;\n if (def !== undefined) {\n defaults[key] = def;\n hasAny = true;\n }\n }\n }\n return hasAny ? defaults : undefined;\n}\n\nfunction needsPreprocessing(schema: OrbitalSchema): boolean {\n for (const orbital of schema.orbitals) {\n const uses = (orbital as { uses?: unknown[] }).uses;\n if (Array.isArray(uses) && uses.length > 0) {\n return true;\n }\n const traits = (orbital as { traits?: unknown[] }).traits ?? [];\n for (const t of traits) {\n if (!t || typeof t !== 'object') continue;\n const obj = t as { ref?: unknown; stateMachine?: unknown };\n if (\n typeof obj.ref === 'string' &&\n obj.ref.includes('.') &&\n !obj.stateMachine\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Internal tick binding for tracking active ticks\n */\ninterface TickBinding {\n orbitalName: string;\n traitName: string;\n tick: RuntimeTraitTick;\n timerId: ReturnType<typeof setInterval>;\n}\n\nexport class OrbitalServerRuntime {\n protected orbitals = new Map<string, RegisteredOrbital>();\n private eventBus: EventBus;\n private config: OrbitalServerRuntimeConfig;\n private persistence: PersistenceAdapter;\n private listenerCleanups: Array<() => void> = [];\n private tickBindings: TickBinding[] = [];\n private loader: SchemaLoader | null = null;\n private preprocessedCache = new Map<string, PreprocessedSchema>();\n private entitySharingMap: EntitySharingMap = {};\n private eventNamespaceMap: EventNamespaceMap = {};\n private osHandlers: OsHandlerResult | null = null;\n private localPersistence: PersistenceAdapter | null = null;\n private resolvedSchema: OrbitalSchema | null = null;\n\n constructor(config: OrbitalServerRuntimeConfig = {}) {\n this.config = {\n mode: 'mock', // Default to mock mode for preview\n autoPreprocess: false,\n namespaceEvents: true,\n ...config,\n };\n this.eventBus = new EventBus();\n\n // Initialize loader only if a fully-configured one was handed in, or if\n // stdLibPath is explicitly set. Otherwise leave null so ensureLoader()\n // can lazily construct one with the auto-detected @almadar/std path —\n // passing only basePath here would build a loader without stdLibPath\n // and then short-circuit ensureLoader's proper lookup.\n if (config.loaderConfig?.loader) {\n this.loader = config.loaderConfig.loader;\n } else if (config.loaderConfig?.stdLibPath) {\n this.loader = createUnifiedLoader({\n basePath: config.loaderConfig.basePath,\n stdLibPath: config.loaderConfig.stdLibPath,\n scopedPaths: config.loaderConfig.scopedPaths,\n });\n }\n\n // Use MockPersistenceAdapter for mock mode, otherwise use provided or InMemoryPersistence\n if (this.config.mode === 'mock' && !config.persistence) {\n this.persistence = new MockPersistenceAdapter({\n seed: config.mockSeed,\n defaultSeedCount: config.mockSeedCount ?? 6,\n debug: config.debug,\n });\n if (config.debug) {\n persistLog.debug('mock:init', { adapter: 'MockPersistenceAdapter' });\n }\n } else {\n this.persistence = config.persistence || new InMemoryPersistence();\n }\n\n // Initialize local persistence adapter for persistence: \"local\" entities.\n // Node-only — eval-require so the dist bundle has no static reference\n // to `./LocalPersistenceAdapter.js` (and its `fs`/`path` imports).\n if (config.localStorageRoot && isNodeEnv()) {\n const { LocalPersistenceAdapter } = nodeRequire<{ LocalPersistenceAdapter: new (root: string) => LocalPersistenceAdapterType }>(`./LocalPersistenceAdapter${_nodeRequireExt}`);\n this.localPersistence = new LocalPersistenceAdapter(config.localStorageRoot);\n }\n\n // Auto-wire OS handlers (server-side only). Same eval-require trick —\n // `./createOsHandlers.js` pulls fs/net/child_process and would otherwise\n // poison the browser-side dependency graph.\n if (isNodeEnv()) {\n const { createOsHandlers } = nodeRequire<{ createOsHandlers: typeof CreateOsHandlersFn }>(`./createOsHandlers${_nodeRequireExt}`);\n this.osHandlers = createOsHandlers({\n emitEvent: (type, payload) => this.eventBus.emit(type, payload),\n });\n } else {\n this.osHandlers = { handlers: {}, cleanup: () => {} };\n }\n // Merge OS handlers under user-provided handlers (user can override)\n this.config.effectHandlers = {\n ...this.osHandlers.handlers,\n ...this.config.effectHandlers,\n };\n }\n\n /**\n * Lazily construct a default loader when the caller didn't provide one\n * but `register()` needs to preprocess. Looks for `@almadar/std` in the\n * nearest `node_modules` so cross-orbital `std/behaviors/<name>` imports\n * resolve to the tiered registry on disk.\n *\n * Node only — browsers should receive already-preprocessed schemas from\n * their server.\n */\n private async ensureLoader(): Promise<void> {\n if (this.loader) return;\n if (typeof process === 'undefined' || !process.versions?.node) {\n // Not Node — can't read the filesystem. Bail silently; the caller's\n // debug log in register() explains the skip.\n return;\n }\n try {\n const [{ fileURLToPath }, path, fs] = await Promise.all([\n import('node:url'),\n import('node:path'),\n import('node:fs'),\n ]);\n // Use ESM resolution (import.meta.resolve) because @almadar/std's\n // exports field only declares the `import` condition, which createRequire\n // (CJS conditions) can't match. Walk up from the resolved main entry\n // to the package root — robust against `exports` restrictions that\n // don't expose `./package.json` directly.\n const mainEntryUrl = import.meta.resolve('@almadar/std');\n const mainEntry = fileURLToPath(mainEntryUrl);\n let stdLibPath = path.dirname(mainEntry);\n while (stdLibPath !== path.dirname(stdLibPath)) {\n if (fs.existsSync(path.join(stdLibPath, 'package.json'))) {\n const pkg = JSON.parse(\n fs.readFileSync(path.join(stdLibPath, 'package.json'), 'utf-8'),\n ) as { name?: string };\n if (pkg.name === '@almadar/std') break;\n }\n stdLibPath = path.dirname(stdLibPath);\n }\n const basePath =\n this.config.loaderConfig?.basePath ?? process.cwd();\n this.loader = createUnifiedLoader({\n basePath,\n stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n });\n if (this.config.debug) {\n registerLog.debug('loader:constructed', { basePath, stdLibPath });\n }\n } catch (err) {\n if (this.config.debug) {\n registerLog.warn('loader:construct-failed', { error: err instanceof Error ? err : String(err) });\n }\n }\n }\n\n // ==========================================================================\n // Schema Registration\n // ==========================================================================\n\n /**\n * Register an OrbitalSchema for execution.\n *\n * Auto-preprocesses the schema when it contains `uses` declarations or\n * unresolved cross-orbital trait references (e.g. a trait with\n * `ref: \"Modal.traits.ModalRecordModal\"` and no inline `stateMachine`).\n * Without preprocessing, those refs arrive empty at the state machine and\n * button clicks silently do nothing — see Phase 9.5.H.\n *\n * Preprocessing needs a loader. If `loaderConfig` is set, that loader is\n * used. Otherwise, a default loader is constructed that points at\n * `<cwd>` (for `basePath`) and the nearest `node_modules/@almadar/std` (for\n * `stdLibPath`), which matches how every caller in this monorepo has the\n * std registry on disk.\n */\n async register(schema: OrbitalSchema): Promise<void> {\n if (this.config.debug) {\n registerLog.debug('register:schema', { name: schema.name });\n }\n\n // Auto-preprocess if the schema has unresolved imports and we have (or\n // can construct) a loader. This replaces the old autoPreprocess flag,\n // which was off by default and led to silent failures when a consumer\n // forgot to enable it.\n if (needsPreprocessing(schema)) {\n await this.ensureLoader();\n if (this.loader) {\n if (this.config.debug) {\n registerLog.debug('register:auto-preprocessing', { name: schema.name });\n }\n const result = await preprocessSchema(schema, {\n basePath: this.config.loaderConfig?.basePath || process.cwd(),\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader,\n namespaceEvents: this.config.namespaceEvents,\n });\n if (!result.success) {\n throw new Error(\n `Schema preprocessing failed: ${result.errors.join('; ')}`,\n );\n }\n schema = result.data.schema;\n this.entitySharingMap = {\n ...this.entitySharingMap,\n ...result.data.entitySharing,\n };\n this.eventNamespaceMap = {\n ...this.eventNamespaceMap,\n ...result.data.eventNamespaces,\n };\n } else if (this.config.debug) {\n registerLog.warn('register:no-loader', { name: schema.name });\n }\n }\n\n // Register all orbitals (await to ensure instance seeding completes)\n for (const orbital of schema.orbitals) {\n await this.registerOrbitalAsync(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n\n // Stash the post-preprocessing schema so HTTP layers (e.g. a playground\n // server's /api/schema handler) can serve the fully-resolved copy instead\n // of re-reading the raw .orb from disk. See getResolvedSchema().\n this.resolvedSchema = schema;\n }\n\n /**\n * Register an OrbitalSchema synchronously (for backward compatibility).\n * Note: This version doesn't wait for instance seeding to complete.\n * Use async register() for guaranteed instance seeding.\n */\n registerSync(schema: OrbitalSchema): void {\n if (this.config.debug) {\n registerLog.debug('register:schema-sync', { name: schema.name });\n }\n\n for (const orbital of schema.orbitals) {\n this.registerOrbital(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n\n this.resolvedSchema = schema;\n }\n\n /**\n * Returns the schema that this runtime is currently executing, post-\n * preprocessing. Safe to expose from an HTTP `/api/schema` endpoint — every\n * cross-orbital trait ref will have an inline `stateMachine` already, which\n * is what the browser's `schema-to-ir` resolver needs to wire button clicks\n * back to state transitions.\n *\n * Returns `null` if `register()` hasn't run yet.\n */\n getResolvedSchema(): OrbitalSchema | null {\n return this.resolvedSchema;\n }\n\n /**\n * One-call entry point: read an `.orb` file from disk, parse it, preprocess\n * cross-orbital imports, and register the result. Callers never touch raw\n * `.orb` bytes — `register()` handles preprocessing internally.\n *\n * Node only. Browsers must receive already-resolved schemas from their\n * server (see `getResolvedSchema()`).\n */\n async registerFromFile(path: string): Promise<void> {\n if (typeof process === 'undefined' || !process.versions?.node) {\n throw new Error(\n 'registerFromFile is Node-only. Browsers should receive resolved schemas from their server.',\n );\n }\n const { readFile } = await import('node:fs/promises');\n const raw = await readFile(path, 'utf-8');\n let schema: OrbitalSchema;\n try {\n schema = JSON.parse(raw) as OrbitalSchema;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n throw new Error(`registerFromFile: ${path} is not valid JSON: ${msg}`);\n }\n await this.register(schema);\n }\n\n /**\n * Register an OrbitalSchema with preprocessing to resolve `uses` imports.\n *\n * This method:\n * 1. Loads all external orbitals referenced in `uses` declarations\n * 2. Expands entity/trait/page references to inline definitions\n * 3. Builds entity sharing and event namespace maps\n * 4. Caches the preprocessed result\n * 5. Registers the resolved schema\n *\n * @param schema - Schema with potential `uses` declarations\n * @param options - Optional preprocessing options\n * @returns Preprocessing result with entity sharing info\n *\n * @example\n * ```typescript\n * const runtime = new OrbitalServerRuntime({\n * loaderConfig: {\n * basePath: '/schemas',\n * stdLibPath: '/std',\n * },\n * });\n *\n * const result = await runtime.registerWithPreprocess(schema);\n * if (result.success) {\n * console.log('Registered with', Object.keys(result.entitySharing).length, 'orbitals');\n * }\n * ```\n */\n async registerWithPreprocess(\n schema: OrbitalSchema,\n options?: { sourcePath?: string }\n ): Promise<{\n success: boolean;\n entitySharing?: EntitySharingMap;\n eventNamespaces?: EventNamespaceMap;\n warnings?: string[];\n errors?: string[];\n }> {\n // Check if preprocessing is possible\n if (!this.loader && !this.config.loaderConfig) {\n return {\n success: false,\n errors: ['Loader not configured. Set loaderConfig in OrbitalServerRuntimeConfig.'],\n };\n }\n\n // Ensure loader is initialized\n if (!this.loader && this.config.loaderConfig) {\n this.loader = this.config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: this.config.loaderConfig.basePath,\n stdLibPath: this.config.loaderConfig.stdLibPath,\n scopedPaths: this.config.loaderConfig.scopedPaths,\n });\n }\n\n // Check cache\n const cacheKey = `${schema.name}:${schema.version || '1.0.0'}`;\n const cached = this.preprocessedCache.get(cacheKey);\n if (cached) {\n if (this.config.debug) {\n registerLog.debug('preprocess:cache-hit', { name: schema.name });\n }\n this.register(cached.schema);\n this.entitySharingMap = { ...this.entitySharingMap, ...cached.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...cached.eventNamespaces };\n return {\n success: true,\n entitySharing: cached.entitySharing,\n eventNamespaces: cached.eventNamespaces,\n warnings: cached.warnings,\n };\n }\n\n if (this.config.debug) {\n registerLog.debug('preprocess:start', { name: schema.name });\n }\n\n // Preprocess schema\n const result = await preprocessSchema(schema, {\n basePath: this.config.loaderConfig?.basePath || '.',\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader!,\n namespaceEvents: this.config.namespaceEvents,\n });\n\n if (!result.success) {\n return {\n success: false,\n errors: result.errors,\n };\n }\n\n // Cache the result\n this.preprocessedCache.set(cacheKey, result.data);\n\n // Store sharing maps\n this.entitySharingMap = { ...this.entitySharingMap, ...result.data.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...result.data.eventNamespaces };\n\n // Register the preprocessed schema\n this.register(result.data.schema);\n\n return {\n success: true,\n entitySharing: result.data.entitySharing,\n eventNamespaces: result.data.eventNamespaces,\n warnings: result.data.warnings,\n };\n }\n\n /**\n * Get entity sharing information for registered orbitals.\n * Useful for determining entity isolation and collection names.\n */\n getEntitySharing(): EntitySharingMap {\n return { ...this.entitySharingMap };\n }\n\n /**\n * Get event namespace mapping for registered orbitals.\n * Useful for debugging cross-orbital event routing.\n */\n getEventNamespaces(): EventNamespaceMap {\n return { ...this.eventNamespaceMap };\n }\n\n /**\n * Clear the preprocessing cache.\n */\n clearPreprocessCache(): void {\n this.preprocessedCache.clear();\n }\n\n /**\n * Register a single orbital\n */\n private async registerOrbitalAsync(orbital: OrbitalDefinition): Promise<void> {\n // Unwrap preprocessed ref-traits: `preprocessSchema` keeps entries with\n // `config` or `linkedEntity` wrapped as `{ ref, linkedEntity, _resolved }`\n // (see UsesIntegration.ts:209-222) — the `_resolved` field carries the\n // fully inlined trait. `isInlineTrait` excludes anything with a `ref`\n // key, so without this unwrap every preprocessed atom would be dropped\n // and only the layout-owner survives (see Almadar_Std_Gaps.md §3.1b).\n // Unwrap preprocessed ref-traits while capturing their call-site `config`\n // for later binding-context injection. The wrapper has shape\n // `{ ref, name?, config?, linkedEntity?, _resolved: Trait }`; we keep the\n // config keyed by the resolved trait name so effects can read `@config.X`.\n const configByTrait = new Map<string, TraitConfig>();\n const unwrapped = (orbital.traits || []).map((t) => {\n if (t && typeof t === 'object' && 'ref' in t && '_resolved' in t) {\n const wrapper = t as {\n _resolved: Trait;\n config?: TraitConfig;\n };\n const inner = wrapper._resolved;\n if (wrapper.config && inner?.name) {\n configByTrait.set(inner.name, wrapper.config);\n }\n return inner;\n }\n return t;\n });\n const inlineTraits = unwrapped.filter(isInlineTrait);\n const traitDefs: TraitDefinition[] = inlineTraits.map((t: Trait) => {\n const sm = t.stateMachine;\n const states = sm?.states || [];\n const transitions = sm?.transitions || [];\n\n return {\n name: t.name,\n states: states as TraitDefinition['states'],\n transitions: transitions as TraitDefinition['transitions'],\n listens: t.listens,\n };\n });\n\n const manager = new StateMachineManager(traitDefs, {\n contextExtensions: this.config.contextExtensions,\n });\n\n // Bind each trait's call-site config to the manager so `@config.X`\n // resolves inside guard expressions at runtime. The orbital's\n // `configByTrait` map was just built above from the trait-ref\n // wrapper config blocks; thread those through to the SMM so\n // mode-aware guards (e.g. std-modal's \"OPEN requires row when\n // mode=edit\") work end-to-end on the runtime path. No-op for\n // traits with no call-site config supplied.\n for (const [traitName, traitConfig] of configByTrait) {\n manager.setTraitConfig(traitName, traitConfig);\n }\n\n const entityRef = orbital.entity;\n let entity: Entity;\n if (typeof entityRef === 'string') {\n entity = { name: entityRef, fields: [] }; // Fallback for string refs\n } else if (isEntityCall(entityRef)) {\n // EntityCall (Phase F): synthesize Entity placeholder from the call shape.\n // The compiler's inline phase produces a fully resolved Entity in OIR;\n // this branch is the runtime fallback when an unresolved EntityCall reaches us.\n const fallbackName = entityRef.name ?? entityRef.extends.replace(/\\.entity$/, '');\n entity = {\n name: fallbackName,\n fields: entityRef.fields ?? [],\n ...(entityRef.persistence ? { persistence: entityRef.persistence } : {}),\n ...(entityRef.collection ? { collection: entityRef.collection } : {}),\n };\n } else {\n entity = entityRef;\n }\n\n this.orbitals.set(orbital.name, {\n schema: orbital,\n entity,\n traits: inlineTraits,\n configByTrait,\n manager,\n entityData: new Map(),\n traitFieldStates: new Map(),\n });\n\n // Seed entity instances from schema if they exist\n if (entity?.name && entity.instances && Array.isArray(entity.instances)) {\n const instances = entity.instances;\n if (instances.length > 0) {\n persistLog.debug('seed:start', { entity: entity.name, count: instances.length });\n\n // Seed each instance (await to ensure they're created)\n const results = await Promise.all(\n instances.map(async (instance) => {\n try {\n const result = await this.persistence.create(entity.name, instance);\n persistLog.debug('seed:instance', { entity: entity.name, id: instance.id ?? 'no-id' });\n return result;\n } catch (err) {\n persistLog.error('seed:instance-error', {\n entity: entity.name,\n id: instance.id,\n error: err instanceof Error ? err : String(err),\n });\n return null;\n }\n })\n );\n\n const successCount = results.filter(r => r !== null).length;\n persistLog.debug('seed:done', { entity: entity.name, success: successCount, total: instances.length });\n }\n } else if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n // Fall back to mock data generation if no instances defined\n if (this.config.debug) {\n persistLog.debug('mock:generate', { entity: entity?.name });\n }\n if (entity?.name && entity.fields) {\n const fields = entity.fields\n .filter((f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n )\n ;\n this.persistence.registerEntity({ name: entity.name, fields });\n if (this.config.debug) {\n persistLog.debug('mock:seeded', { entity: entity.name, count: this.persistence.count(entity.name) });\n }\n }\n }\n\n // Gap #22 — register + mock-seed auxiliary entities. These are imported\n // atom entities surfaced when a trait reference omits the `-> Entity`\n // rebind at the molecule's call site, registered on the resolved\n // schema's `auxiliaryEntities` field by the inline phase. Without this\n // block, `(fetch SearchResult ...)` from a trait whose linkedEntity is\n // an imported atom hits an unregistered persistence entry and returns\n // empty, breaking the entity-as-UI-state contract those slim atoms rely\n // on. Mock-mode seeding mirrors the primary entity branch above.\n const auxiliaryEntities = orbital.auxiliaryEntities;\n if (\n auxiliaryEntities !== undefined &&\n auxiliaryEntities.length > 0 &&\n this.config.mode === 'mock' &&\n this.persistence instanceof MockPersistenceAdapter\n ) {\n for (const auxRef of auxiliaryEntities) {\n // EntityRef is a union of string | EntityCall | Entity. The\n // inline phase populates auxiliaryEntities with inline Entity\n // objects (string/EntityCall forms get resolved before this\n // branch fires), but narrow defensively to keep the type\n // checker happy and to skip unresolved forms gracefully.\n if (typeof auxRef === 'string' || isEntityCall(auxRef)) continue;\n const auxEntity: Entity = auxRef;\n if (!auxEntity.name || !auxEntity.fields) continue;\n const auxFields = auxEntity.fields\n .filter((f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n )\n ;\n this.persistence.registerEntity({ name: auxEntity.name, fields: auxFields });\n if (this.config.debug) {\n persistLog.debug('mock:seeded-auxiliary', {\n entity: auxEntity.name,\n count: this.persistence.count(auxEntity.name),\n });\n }\n }\n }\n\n if (this.config.debug) {\n registerLog.debug('register:orbital', {\n name: orbital.name,\n traitCount: (orbital.traits || []).length,\n });\n }\n }\n\n /**\n * Register a single orbital (sync wrapper for backward compatibility)\n */\n private registerOrbital(orbital: OrbitalDefinition): void {\n // Create a synchronous version by using a promise that we don't await\n // For truly async registration, use the async register() method\n this.registerOrbitalAsync(orbital).catch((err) => {\n registerLog.error('register:failed', {\n name: orbital.name,\n error: err instanceof Error ? err : String(err),\n });\n });\n }\n\n /**\n * Set up event listeners for cross-orbital communication\n */\n private setupEventListeners(): void {\n // Clean up existing listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n // For each orbital's traits with `listens`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.traits) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n // Split `listener.event` into { bareEvent, source }.\n // The .lolo parser encodes `Source EVENT`, `Orbital.Source EVENT`,\n // or `* EVENT` as `\"Source.EVENT\"`, `\"Orbital.Source.EVENT\"`,\n // `\"*.EVENT\"` respectively. If the explicit `listener.source` field\n // is present (new core schema), use it directly; otherwise parse the\n // legacy concatenated form so migrated and unmigrated schemas both work.\n const { bareEvent, matcher } = parseListenSource(listener, orbitalName);\n\n // Subscribe under the bare event key. Source filtering happens\n // inside the handler closure so a single key can serve many\n // listeners with different scopes.\n const cleanup = this.eventBus.on(bareEvent, async (event) => {\n // Source filter: skip if the emit doesn't match our declared scope.\n if (!matcher(event.source)) return;\n if (this.config.debug) {\n xOrbitalLog.debug('listen:received', () => ({\n receiverOrbital: orbitalName,\n receiverTrait: trait.name,\n event: listener.event,\n sourceOrbital: event.source?.orbital ?? '?',\n sourceTrait: event.source?.trait ?? '?',\n }));\n }\n\n // Apply payload mapping\n let mappedPayload = event.payload;\n if (listener.payloadMapping && event.payload) {\n mappedPayload = {};\n for (const [key, expr] of Object.entries(\n listener.payloadMapping,\n )) {\n if (typeof expr === \"string\" && expr.startsWith(\"@payload.\")) {\n const field = expr.slice(\"@payload.\".length);\n (mappedPayload as EventPayload)[key] = (\n event.payload as EventPayload\n )[field];\n } else {\n (mappedPayload as EventPayload)[key] = expr as string;\n }\n }\n }\n\n // Forward entityId so the triggered trait can bind @entity.*\n // against the right row. Without this, cross-trait listens\n // auto-wiring would always dispatch with entityData={} and\n // every @entity.id would resolve to undefined.\n //\n // Priority (checked against the MAPPED payload first so the\n // schema's payloadMapping takes effect, then the raw emit\n // payload for listens without a mapping):\n // 1. mapped or raw payload.entityId\n // 2. mapped or raw payload.orbitalName (convention: the\n // OrbitalProcess entity uses orbitalName as its id)\n const raw = event.payload as EventPayload | undefined;\n const mapped = mappedPayload as EventPayload | undefined;\n const pickId = (field: string): string | undefined =>\n (mapped?.[field] as string | undefined) ??\n (raw?.[field] as string | undefined);\n const forwardedEntityId = pickId(\"entityId\") ?? pickId(\"orbitalName\");\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as EventPayload,\n entityId: forwardedEntityId,\n });\n });\n\n this.listenerCleanups.push(cleanup);\n }\n }\n }\n }\n\n /**\n * Set up scheduled ticks for all traits\n */\n private setupTicks(): void {\n // Clean up existing ticks\n this.cleanupTicks();\n\n // For each orbital's traits with `ticks`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.traits || []) {\n if (!trait.ticks || trait.ticks.length === 0) continue;\n\n for (const tick of trait.ticks) {\n this.registerTick(orbitalName, trait.name, tick, registered);\n }\n }\n }\n\n if (this.config.debug && this.tickBindings.length > 0) {\n registerLog.debug('register:ticks', { count: this.tickBindings.length });\n }\n }\n\n /**\n * Register a single tick\n */\n private registerTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): void {\n // Determine interval in milliseconds\n let intervalMs: number;\n if (typeof tick.interval === \"number\") {\n intervalMs = tick.interval;\n } else if (typeof tick.interval === \"string\") {\n // Parse cron-like interval strings (e.g., '5s', '1m', '1h')\n intervalMs = this.parseIntervalString(tick.interval);\n } else {\n intervalMs = 1000; // Default to 1 second\n }\n\n if (this.config.debug) {\n registerLog.debug('register:tick', {\n orbital: orbitalName,\n trait: traitName,\n tick: tick.name,\n intervalMs,\n });\n }\n\n const timerId = setInterval(async () => {\n await this.executeTick(orbitalName, traitName, tick, registered);\n }, intervalMs);\n\n this.tickBindings.push({\n orbitalName,\n traitName,\n tick,\n timerId,\n });\n }\n\n /**\n * Parse interval string to milliseconds\n * Supports: '5s', '1m', '1h', '30000' (ms)\n */\n private parseIntervalString(interval: string): number {\n const match = interval.match(/^(\\d+)(ms|s|m|h)?$/);\n if (!match) {\n registerLog.warn('register:tick-invalid-interval', { interval, defaultMs: 1000 });\n return 1000;\n }\n\n const value = parseInt(match[1], 10);\n const unit = match[2] || \"ms\";\n\n switch (unit) {\n case \"ms\":\n return value;\n case \"s\":\n return value * 1000;\n case \"m\":\n return value * 60 * 1000;\n case \"h\":\n return value * 60 * 60 * 1000;\n default:\n return value;\n }\n }\n\n /**\n * Execute a tick for all applicable entities\n */\n private async executeTick(\n orbitalName: string,\n traitName: string,\n tick: RuntimeTraitTick,\n registered: RegisteredOrbital,\n ): Promise<void> {\n const entityType = registered.entity.name;\n const emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }> = [];\n\n try {\n // Get all entities (or filtered by appliesTo)\n let entities = await this.persistence.list(entityType);\n\n if (tick.appliesTo && tick.appliesTo.length > 0) {\n const appliesToSet = new Set(tick.appliesTo);\n entities = entities.filter((e) => appliesToSet.has(e.id as string));\n }\n\n if (this.config.debug && entities.length > 0) {\n effectLog.debug('tick:processing', () => ({\n orbital: orbitalName,\n trait: traitName,\n tick: tick.name,\n entityCount: entities.length,\n }));\n }\n\n for (const entity of entities) {\n // Evaluate guard if present\n if (tick.guard) {\n try {\n const ctx = createContextFromBindings({\n entity,\n payload: {},\n state:\n registered.manager.getState(traitName)?.currentState ||\n \"unknown\",\n }, false, this.config.contextExtensions);\n\n const guardPasses = evaluateGuard(\n tick.guard as Parameters<typeof evaluateGuard>[0],\n ctx,\n );\n\n if (!guardPasses) {\n if (this.config.debug) {\n effectLog.debug('tick:guard-failed', () => ({\n tick: tick.name,\n entityId: typeof entity.id === 'string' ? entity.id : undefined,\n }));\n }\n continue;\n }\n } catch (error) {\n effectLog.error('tick:guard-error', {\n tick: tick.name,\n entityId: typeof entity.id === 'string' ? entity.id : undefined,\n error: error instanceof Error ? error : String(error),\n });\n continue;\n }\n }\n\n // Execute effects for this entity\n if (tick.effects && tick.effects.length > 0) {\n const fetchedData: { [entityType: string]: EntityRow | EntityRow[] } = {};\n const clientEffects: ClientEffectTuple[] = [];\n const tickEffectResults: EffectResult[] = [];\n await this.executeEffects(\n registered,\n traitName,\n tick.effects,\n {}, // No payload for ticks\n entity,\n entity.id as string,\n emittedEvents,\n fetchedData,\n clientEffects,\n tickEffectResults,\n );\n\n if (this.config.debug) {\n effectLog.debug('tick:effects-executed', () => ({\n tick: tick.name,\n entityId: typeof entity.id === 'string' ? entity.id : undefined,\n }));\n }\n }\n }\n } catch (error) {\n effectLog.error('tick:execute-error', {\n tick: tick.name,\n error: error instanceof Error ? error : String(error),\n });\n }\n }\n\n /**\n * Clean up all active ticks\n */\n private cleanupTicks(): void {\n for (const binding of this.tickBindings) {\n clearInterval(binding.timerId);\n }\n this.tickBindings = [];\n }\n\n /**\n * Unregister all orbitals and clean up\n */\n unregisterAll(): void {\n // Clean up ticks\n this.cleanupTicks();\n\n // Clean up event listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n this.orbitals.clear();\n this.eventBus.clear();\n\n // Clear mock persistence so the next registerFromFile re-seeds from\n // the schema instead of inheriting rows the previous walk created.\n // Without this, runtime-verify's state walk keeps every SAVE's\n // persist-create row across test sessions — the grid accumulates\n // \"Mock name\" rows that are never pruned, and empty cards from\n // partial walk-step payloads stay visible forever.\n if (this.persistence instanceof MockPersistenceAdapter) {\n this.persistence.clearAll();\n }\n\n // Clean up OS handlers (close file watchers, intervals, signal listeners)\n if (this.osHandlers) {\n this.osHandlers.cleanup();\n this.osHandlers = null;\n }\n }\n\n /**\n * Reset the mock persistence store to a clean-slate re-seed without\n * unregistering orbitals. Exposed for verifier tools that want to\n * start each test with deterministic seeded rows, not the residue of\n * the previous walk's persist-creates. No-op when the persistence\n * layer is not MockPersistenceAdapter.\n */\n resetMockPersistence(): void {\n if (!(this.persistence instanceof MockPersistenceAdapter)) return;\n busLog.debug('mock:reset:enter', {\n orbitalCount: this.orbitals.size,\n timestamp: new Date().toISOString(),\n });\n this.persistence.clearAll();\n for (const registered of this.orbitals.values()) {\n const entity = registered.entity;\n if (entity?.name && entity.fields) {\n const fields = entity.fields\n .filter((f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n )\n ;\n this.persistence.registerEntity({ name: entity.name, fields });\n }\n }\n }\n\n // ==========================================================================\n // Event Processing\n // ==========================================================================\n\n /**\n * Process an event for an orbital\n */\n async processOrbitalEvent(\n orbitalName: string,\n request: OrbitalEventRequest,\n ): Promise<OrbitalEventResponse> {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n return {\n success: false,\n transitioned: false,\n states: {},\n emittedEvents: [],\n error: `Orbital not found: ${orbitalName}`,\n };\n }\n\n // Trace every server-side event entry. If the runtime path is\n // re-firing render-ui during a typing session, the smoking gun\n // appears here: a `processOrbitalEvent:enter` line per keystroke\n // means something upstream (bus replay, snapshot poll, cascade\n // listener) is triggering a transition cycle the user didn't\n // intend. EventPayload values are typed as `EventPayloadValue`\n // (a recursive union including nested EventPayload) — narrow with\n // typeof checks instead of an unknown cast.\n const payloadRow = request.payload?.['row'];\n const payloadRowAsPayload =\n payloadRow !== null && typeof payloadRow === 'object' && !Array.isArray(payloadRow)\n ? (payloadRow as EventPayload)\n : undefined;\n const payloadRowId = payloadRowAsPayload?.['id'];\n renderLog.debug('processOrbitalEvent:enter', {\n orbital: orbitalName,\n event: request.event,\n hasPayloadRow: payloadRowAsPayload !== undefined,\n payloadRowId: typeof payloadRowId === 'string' || typeof payloadRowId === 'number' ? payloadRowId : undefined,\n entityId: request.entityId,\n });\n busLog.debug('bus:incoming', () => ({\n orbital: orbitalName,\n event: request.event,\n payload: JSON.stringify(request.payload ?? null),\n entityId: request.entityId,\n traitStates: JSON.stringify(\n Array.from(registered.manager.getAllStates().entries()).map(([traitName, state]) => ({\n traitName,\n currentState: state.currentState,\n })),\n ),\n }));\n xOrbitalLog.info('processOrbitalEvent:enter', () => ({\n orbital: orbitalName,\n event: request.event,\n traitsInOrbital: registered.traits.map((t) => t.name).join(','),\n payloadActiveTraits: JSON.stringify(\n (request.payload as EventPayload | undefined)?.['_activeTraits'] ?? null,\n ),\n }));\n\n const { event, payload, entityId, user } = request;\n\n // API-boundary payload validation. Each trait declares a\n // `payloadSchema` per event in its `stateMachine.events` block\n // (lowered from the `.lolo` listens block). A field marked with\n // `!` (e.g. `data : ListItem!`) becomes `required: true`; this\n // check rejects the request when a required field is missing or\n // null. Without this, the persist effect happily writes empty\n // rows for `payload: {}` requests — exactly what produced the\n // junk-card artifact in the verifier's bus-replay coverage walk.\n // The compiled-path generated handler emits the equivalent\n // inline check (per-event required-field list inlined from\n // `OirEvent.payload_required_fields`) so guards behave\n // identically across paths.\n //\n // Use `registered.traits` (already-unwrapped `Trait[]`) instead\n // of `registered.schema.traits` (which holds the unprocessed\n // `TraitRef` wrappers with `_resolved` attached by\n // preprocessSchema). The unwrap was already done in\n // registerOrbitalAsync.\n const validationFailures: PayloadValidationFailure[] = [];\n for (const trait of registered.traits) {\n const eventSchema = trait.stateMachine?.events?.find((e) => e.key === event);\n if (eventSchema?.payloadSchema && eventSchema.payloadSchema.length > 0) {\n validationFailures.push(\n ...validateEventPayload(event, payload, eventSchema.payloadSchema),\n );\n }\n }\n if (validationFailures.length > 0) {\n return {\n success: false,\n transitioned: false,\n states: {},\n emittedEvents: [],\n error: formatPayloadValidationError(validationFailures),\n };\n }\n\n const emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }> = [];\n // Collect data fetched by `fetch` effects\n const fetchedData: { [entityType: string]: EntityRow | EntityRow[] } = {};\n // Collect client-side effects (render-ui, navigate, notify)\n const clientEffects: ClientEffectTuple[] = [];\n // Same effects, paired with their producing trait — populated in lockstep\n // by the helper inside executeEffects so consumers can attribute each\n // effect to the trait that emitted it (used by `<TraitFrame>`).\n const clientEffectsByTrait: Array<{ traitName: string; effect: ClientEffectTuple }> = [];\n // Collect server-side effect results (persist, call-service, set)\n const effectResults: EffectResult[] = [];\n\n // Extract active traits filter from payload (sent by client for page-specific execution)\n const activeTraits = (payload as EventPayload | undefined)?._activeTraits as string[] | undefined;\n // Remove _activeTraits from payload before processing (internal use only)\n const cleanPayload = payload ? { ...payload } : undefined;\n if (cleanPayload) {\n delete (cleanPayload as EventPayload & { _activeTraits?: unknown })._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: EntityRow = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.entity.name,\n entityId,\n );\n if (stored) {\n entityData = stored;\n }\n }\n\n // Build per-trait entity overrides from `traitFieldStates` (mutated by\n // `(set @entity.X Y)` effects). For [runtime] entities with no persistence\n // row, this is the only way `@entity.X` references in guards get resolved\n // to the values prior transitions committed — matches the runtime UI hook\n // behavior so guard outcomes are identical across both paths.\n const entityByTrait: Record<string, EntityRow> = {};\n for (const [name, fields] of registered.traitFieldStates) {\n if (fields && Object.keys(fields).length > 0) {\n entityByTrait[name] = fields;\n }\n }\n\n // Process event through state machine\n const results = registered.manager.sendEvent(\n event,\n cleanPayload,\n entityData,\n entityByTrait,\n );\n\n // Filter results to only active traits (if specified)\n const filteredResults = activeTraits && activeTraits.length > 0\n ? results.filter(({ traitName }) => activeTraits.includes(traitName))\n : results;\n\n if (this.config.debug && activeTraits) {\n busLog.debug('dispatch:filter-traits', () => ({\n total: results.length,\n active: filteredResults.length,\n activeTraits: activeTraits.join(','),\n }));\n }\n\n // Execute effects only for active traits\n for (const { traitName, result } of filteredResults) {\n if (result.effects.length > 0) {\n await this.executeEffects(\n registered,\n traitName,\n result.effects as Effect[],\n cleanPayload,\n entityData,\n entityId,\n emittedEvents,\n fetchedData,\n clientEffects,\n effectResults,\n user,\n clientEffectsByTrait,\n );\n }\n }\n\n // V2 Phase 6: auto-refetch on ref-subscribed entities is gone. The\n // `ref` operator is deprecated; entities flow through explicit fetch+emit\n // listeners now. Downstream re-reads are triggered by the listener wiring\n // in the state machine (listen on the LOADED emit), not by the server\n // re-fetching after every mutation.\n\n // NOTE (VG31-duplicate, 4.10.0): the server-side re-emit that used to\n // live here fanned SAVE/CONFIRM_REMOVE onto the server bus so\n // `setupListeners()` could dispatch cascade triggers (DO_CREATE,\n // DO_DELETE). That was RIGHT when the runtime was server-only, but the\n // runtime playground now has matching cross-trait listens wiring on\n // the CLIENT (@almadar/ui 3.7.0+ useTraitStateMachine). With both\n // sides listening, every SAVE fired DO_CREATE twice — once from the\n // client's re-broadcast → onEventProcessed → server persist, and once\n // from the server's own bus listener → server persist. Two \"Mock\n // name\" rows appeared per click instead of one. Leaving the re-emit\n // out here is safe: the client posts DO_CREATE/DO_DELETE to the\n // server directly via bridge.sendEvent, and the server processes\n // those directly — the server-side listens fan-out is redundant in\n // the playground topology.\n\n // Build current states\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n const response: OrbitalEventResponse = {\n success: true,\n transitioned: results.length > 0,\n states,\n emittedEvents,\n };\n\n // V2 Phase 6: `response.data` is gone. Fetched entities are surfaced via\n // typed emit payloads on `emittedEvents` and through the rendered effect\n // tree instead of a sidecar record bag.\n\n // Include client effects if any\n if (clientEffects.length > 0) {\n response.clientEffects = clientEffects;\n }\n\n // Per-trait attribution sidecar — same effects as `clientEffects`, paired\n // 1:1 with the trait that produced each one.\n if (clientEffectsByTrait.length > 0) {\n response.clientEffectsByTrait = clientEffectsByTrait;\n }\n\n // Include server effect results if any\n if (effectResults.length > 0) {\n response.effectResults = effectResults;\n }\n\n return response;\n }\n\n /**\n * Execute effects from a transition\n */\n private async executeEffects(\n registered: RegisteredOrbital,\n traitName: string,\n effects: Effect[],\n payload: EventPayload | undefined,\n entityData: EntityRow,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: EventPayload; source?: BusEventSource }>,\n fetchedData: { [entityType: string]: EntityRow | EntityRow[] },\n clientEffects: ClientEffectTuple[],\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n clientEffectsByTrait?: Array<{ traitName: string; effect: ClientEffectTuple }>,\n ): Promise<void> {\n const entityType = registered.entity.name;\n\n // Push to both the flat `clientEffects` array (legacy wire shape) and the\n // tagged `clientEffectsByTrait` sidecar in lockstep. Closure captures\n // `traitName` from this invocation's scope, so cascade emits — which run\n // through their own executeEffects call with their own traitName —\n // attribute correctly.\n const pushClientEffect = (effect: ClientEffectTuple): void => {\n clientEffects.push(effect);\n clientEffectsByTrait?.push({ traitName, effect });\n };\n\n // Forward refs - assigned after construction, used by fetch/atomic handlers\n let bindingsRef: BindingContext | null = null;\n let contextRef: EffectContext | null = null;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload, source) => {\n if (this.config.debug) {\n busLog.debug('emit:dispatch', () => ({\n event,\n payloadJson: JSON.stringify(eventPayload ?? null),\n sourceOrbital: source?.orbital,\n sourceTrait: source?.trait,\n }));\n }\n // Forward the source stamp to the bus. If the caller didn't supply\n // one (legacy callers), synthesize one from the handler's lexical\n // closure so source-scoped listeners still match.\n const stamp = source ?? {\n orbital: registered.schema.name,\n trait: traitName,\n };\n this.eventBus.emit(event, eventPayload, stamp);\n emittedEvents.push({ event, payload: eventPayload, source: stamp });\n effectLog.debug(\"emit:push\", {\n event,\n cumulativeEmittedCount: emittedEvents.length,\n sourceTrait: stamp.trait,\n sourceOrbital: stamp.orbital,\n });\n xOrbitalLog.info('emit:server', {\n event,\n sourceOrbital: stamp.orbital,\n sourceTrait: stamp.trait,\n dispatchOrbital: registered.schema.name,\n });\n },\n\n set: async (targetId, field, value) => {\n // `(set @entity.X Y)` writes to per-trait scalar state, not\n // persistence. Persistence writes only via explicit\n // `(persist update ...)`. Mirrors compiled's `state.fields` reducer.\n let fieldState = registered.traitFieldStates.get(traitName);\n if (!fieldState) {\n fieldState = {} as EntityRow;\n registered.traitFieldStates.set(traitName, fieldState);\n }\n fieldState[field] = value as FieldValue;\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id: targetId || entityId || '', field, value: value as FieldValue },\n success: true,\n });\n },\n\n persist: async (action, targetEntityType, data) => {\n // ----------------------------------------------------------------\n // Batch mode: [\"persist\", \"batch\", [...operations]]\n // Each operation: [\"create\", \"collection\", {...data}],\n // [\"update\", \"collection\", \"id\", {...data}],\n // [\"delete\", \"collection\", \"id\"]\n // ----------------------------------------------------------------\n if (action === 'batch') {\n const operations = (data as EntityRow | undefined)?.operations as unknown[] | undefined;\n if (!Array.isArray(operations) || operations.length === 0) {\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n success: false,\n error: 'Batch requires a non-empty operations array',\n });\n return;\n }\n\n const batchResults: Array<EntityRow> = [];\n // Track completed ops for rollback on failure (best-effort)\n const completed: Array<{ action: string; entityType: string; id?: string }> = [];\n let batchFailed = false;\n let batchError = '';\n\n for (const op of operations) {\n if (!Array.isArray(op) || op.length < 2) {\n batchFailed = true;\n batchError = `Invalid batch operation format: ${JSON.stringify(op)}`;\n break;\n }\n\n const [opAction, opEntityType, ...opRest] = op as [string, string, ...unknown[]];\n\n try {\n switch (opAction) {\n case 'create': {\n const createData = (opRest[0] as EntityRow) || {};\n const { id: newId } = await this.persistence.create(opEntityType, createData);\n batchResults.push({ action: 'create', entityType: opEntityType, id: newId, ...createData });\n completed.push({ action: 'create', entityType: opEntityType, id: newId });\n break;\n }\n case 'update': {\n const updateId = opRest[0] as string;\n const updateData = (opRest[1] as EntityRow) || {};\n await this.persistence.update(opEntityType, updateId, updateData);\n const updated = await this.persistence.getById(opEntityType, updateId);\n batchResults.push({ action: 'update', entityType: opEntityType, id: updateId, ...(updated || updateData) });\n completed.push({ action: 'update', entityType: opEntityType, id: updateId });\n break;\n }\n case 'delete': {\n const deleteId = opRest[0] as string;\n // Snapshot before delete for potential rollback info\n await this.persistence.delete(opEntityType, deleteId);\n batchResults.push({ action: 'delete', entityType: opEntityType, id: deleteId, deleted: true });\n completed.push({ action: 'delete', entityType: opEntityType, id: deleteId });\n break;\n }\n default:\n batchFailed = true;\n batchError = `Unknown batch operation action: ${opAction}`;\n break;\n }\n } catch (err) {\n batchFailed = true;\n batchError = `Batch operation [${opAction}, ${opEntityType}] failed: ${err instanceof Error ? err.message : String(err)}`;\n break;\n }\n\n if (batchFailed) break;\n }\n\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n data: {\n operations: batchResults,\n completedCount: completed.length,\n totalCount: operations.length,\n },\n success: !batchFailed,\n ...(batchFailed ? { error: batchError } : {}),\n });\n return;\n }\n\n // ----------------------------------------------------------------\n // Single operation mode: create / update / delete\n // ----------------------------------------------------------------\n const type = targetEntityType || entityType;\n let resultData: EntityRow | undefined;\n const sizeBefore = (await this.persistence.list(type)).length;\n\n try {\n // Validate relation cardinality before create/update\n if (action === 'create' || action === 'update') {\n this.validateRelationCardinality(type, data || {});\n }\n\n switch (action) {\n case \"create\": {\n const { id } = await this.persistence.create(type, data || {});\n resultData = { id, ...(data || {}) };\n break;\n }\n case \"update\":\n if (data?.id || entityId) {\n const updateId = (data?.id as string) || entityId!;\n await this.persistence.update(type, updateId, data || {});\n // Return the updated entity\n const updated = await this.persistence.getById(type, updateId);\n resultData = updated || { id: updateId, ...(data || {}) };\n }\n break;\n case \"delete\": {\n // `(persist delete Entity @payload.id)` resolves to a raw\n // id STRING as the 4th arg, not `{id: ...}`. Accept both\n // shapes — the .lolo authoring form is string, and batch\n // callers may pass {id} too — so VG31-delete's cascade\n // doesn't silently no-op when `data` is a scalar id.\n const directId = typeof data === 'string' ? data : undefined;\n const nestedId = typeof data === 'object' && data !== null\n ? (data.id as string | undefined)\n : undefined;\n const deleteId = directId ?? nestedId ?? entityId;\n if (deleteId) {\n // Enforce onDelete relation rules before deleting\n await this.enforceOnDeleteRules(type, deleteId);\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n }\n\n const sizeAfter = (await this.persistence.list(type)).length;\n effectLog.debug(\"persist:store-mutate\", {\n action,\n entityType: type,\n resultId: resultData?.id as string | undefined,\n sizeBefore,\n sizeAfter,\n delta: sizeAfter - sizeBefore,\n });\n\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\n effectLog.error(\"persist:store-mutate-error\", {\n action,\n entityType: type,\n error: err instanceof Error ? err.message : String(err),\n });\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n },\n\n callService: async (service, action, params) => {\n try {\n let result = null;\n // Custom handlers can override this\n if (this.config.effectHandlers?.callService) {\n result = await this.config.effectHandlers.callService(\n service,\n action,\n params,\n );\n } else if (this.config.mode === 'mock') {\n // Mock mode: return a useful default so service-atom chains\n // (e.g. std-service-stripe createPaymentIntent → PAYMENT_CREATED\n // → confirmPayment → PAYMENT_CONFIRMED) advance instead of\n // stalling at an empty payload. Fields cover the common\n // service-result shapes:\n // - `id` / `clientSecret` for payment-intent style results\n // - `success` / `status` for boolean-ish action results\n // - `result` (object) for actions that wrap a result\n // - echo `params` so consumers reading the request shape see it\n const mockId = `mock_${service}_${action}_${Math.random().toString(36).slice(2, 10)}`;\n const paramsEcho: Partial<EntityRow> = {};\n if (params) {\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || v === null || v instanceof Date)) {\n paramsEcho[k] = v;\n }\n }\n }\n result = {\n id: mockId,\n clientSecret: `secret_${mockId}`,\n success: true,\n status: 'succeeded',\n ...paramsEcho,\n } as EntityRow;\n } else {\n effectLog.warn('call-service:not-configured', { service, action });\n }\n\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n data: result as EntityRow | undefined,\n success: true,\n });\n\n return result;\n } catch (err) {\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n xOrbitalLog.info('fetch:enter', () => ({\n entityType: fetchEntityType,\n hasOptions: options !== undefined && options !== null,\n optionsKeys: options ? Object.keys(options).join(',') : '',\n filterType: typeof options?.filter,\n filterIsArray: Array.isArray(options?.filter),\n filterJson: JSON.stringify(options?.filter ?? null).slice(0, 300),\n payloadJson: JSON.stringify(bindingsRef?.payload ?? null).slice(0, 300),\n }));\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n\n if (options?.id) {\n // Single entity fetch\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations([entity], fetchEntityType, options.include);\n }\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n // Collection fetch\n let entities = await this.persistence.list(fetchEntityType);\n\n // Apply filter SExpression if provided. Mirrors\n // ServerEffectHandlers.fetch. Each row is evaluated against\n // the predicate with @entity bound to the row, @payload to\n // the inbound event payload, and @current to the row.\n if (options?.filter !== undefined && options.filter !== null) {\n const predicate = options.filter as SExpr;\n entities = entities.filter((entity) => {\n const ctx = createContextFromBindings(\n { entity, payload: bindingsRef?.payload, current: entity },\n false,\n );\n try {\n return Boolean(evaluate(predicate, ctx));\n } catch (err) {\n effectLog.error('fetch:filter-eval-error', {\n entityType: fetchEntityType,\n error: err instanceof Error ? err : String(err),\n });\n return false;\n }\n });\n }\n\n // Capture total AFTER filter, BEFORE offset/limit — paginating\n // consumers need the count of rows matching the filter, not\n // just the slice length.\n total = entities.length;\n\n // Apply pagination\n if (options?.offset && options.offset > 0) {\n entities = entities.slice(options.offset);\n }\n if (options?.limit && options.limit > 0) {\n entities = entities.slice(0, options.limit);\n }\n\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations(entities, fetchEntityType, options.include);\n }\n\n fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n\n return result === null\n ? null\n : { rows: result, total };\n } catch (error) {\n effectLog.error('fetch:error', {\n entityType: fetchEntityType,\n error: error instanceof Error ? error : String(error),\n });\n return null;\n }\n },\n\n // Resource operators: ref, deref, swap, watch, atomic\n\n ref: async (refEntityType, options) => {\n // ref is identical to fetch on the server: query persistence, populate fetchedData\n try {\n return await handlers.fetch!(refEntityType, options);\n } catch (error) {\n effectLog.error('ref:error', {\n entityType: refEntityType,\n error: error instanceof Error ? error : String(error),\n });\n return null;\n }\n },\n\n deref: async (derefEntityType, options) => {\n // deref is identical to fetch on the server: one-shot read\n try {\n let result: EntityRow | EntityRow[] | null = null;\n let total = 0;\n\n if (options?.id) {\n const entity = await this.persistence.getById(derefEntityType, options.id);\n if (entity) {\n fetchedData[derefEntityType] = [entity];\n result = entity;\n total = 1;\n }\n } else {\n const entities = await this.persistence.list(derefEntityType);\n fetchedData[derefEntityType] = entities;\n result = entities;\n total = entities.length;\n }\n\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: true,\n });\n\n return result === null ? null : { rows: result, total };\n } catch (error) {\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n swap: async (swapEntityType, swapEntityId, transform) => {\n // Read-modify-write: read entity, apply transform S-expression, write back\n try {\n const current = await this.persistence.getById(swapEntityType, swapEntityId);\n if (!current) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: `Entity ${swapEntityType}/${swapEntityId} not found`,\n });\n return null;\n }\n\n // Evaluate the transform S-expression with @current binding\n const ctx = createContextFromBindings({\n current,\n entity: entityData,\n payload,\n }, false, this.config.contextExtensions);\n\n let newData: EntityRow;\n if (Array.isArray(transform)) {\n // S-expression transform: evaluate with @current bound to the entity\n const result = evaluate(\n transform as Parameters<typeof evaluate>[0],\n ctx,\n );\n // The result should be a record (the transformed entity)\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n newData = result as EntityRow;\n } else {\n // If transform returned a non-object, treat it as a partial update\n newData = current;\n }\n } else if (typeof transform === 'object' && transform !== null) {\n // Plain object merge: simple field updates\n newData = { ...current, ...(transform as EntityRow) };\n } else {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: 'swap! transform must be an S-expression or object',\n });\n return null;\n }\n\n // Write back (without version check for now, full OCC in future pass)\n await this.persistence.update(swapEntityType, swapEntityId, newData);\n\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n data: { id: swapEntityId, ...newData },\n success: true,\n });\n\n return newData;\n } catch (error) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n watch: (_watchEntityType, _watchOptions) => {\n // Watch is a no-op on server. Client subscribes to real-time updates.\n if (this.config.debug) {\n effectLog.debug('watch:noop-server', { entityType: _watchEntityType });\n }\n },\n\n atomic: async (atomicEffects) => {\n // Execute inner effects sequentially. If any fails, mark all as failed.\n // Full transaction/rollback support is a future enhancement.\n let atomicFailed = false;\n let atomicError = '';\n\n const atomicExecutor = new EffectExecutor({\n handlers,\n bindings: bindingsRef ?? {},\n context: contextRef ?? { traitName, orbitalName: registered.schema.name, state: 'unknown', transition: 'unknown' },\n debug: this.config.debug,\n contextExtensions: this.config.contextExtensions,\n });\n\n for (const innerEffect of atomicEffects) {\n if (atomicFailed) break;\n try {\n await atomicExecutor.execute(innerEffect);\n } catch (err) {\n atomicFailed = true;\n atomicError = err instanceof Error ? err.message : String(err);\n }\n }\n\n if (atomicFailed) {\n // Mark the atomic block as failed\n effectResults.push({\n effect: 'atomic',\n success: false,\n error: `Atomic block failed: ${atomicError}`,\n });\n } else {\n effectResults.push({\n effect: 'atomic',\n success: true,\n data: { innerCount: atomicEffects.length },\n });\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n // Snapshot the resolved row reference (if any) so the log can\n // tell whether successive render-ui pushes for the same slot\n // carry the SAME row object (stable, no remount expected) or a\n // freshly-cloned one (would invalidate Form's normalizedInitialData\n // memo and reset typed values). We read `pattern.entity` because\n // form-section binds the row to `entity: @payload.row`.\n const patternNode: RuntimeRenderPattern | null =\n pattern !== null && typeof pattern === 'object' && !Array.isArray(pattern)\n ? (pattern as RuntimeRenderPattern)\n : null;\n const patternEntity = patternNode?.entity;\n const entityRow: EntityRow | null =\n patternEntity !== null && typeof patternEntity === 'object' && !Array.isArray(patternEntity)\n ? (patternEntity as EntityRow)\n : null;\n const patternTypeRaw = patternNode?.['type'];\n renderLog.debug('renderUI:push', {\n trait: traitName,\n slot,\n patternType: typeof patternTypeRaw === 'string' ? patternTypeRaw : undefined,\n entityRowId: typeof entityRow?.id === 'string' ? entityRow.id : undefined,\n entityIsObject: entityRow !== null,\n });\n pushClientEffect(['render-ui', slot, pattern, props, priority]);\n },\n navigate: (path, params) => {\n pushClientEffect(['navigate', path, params]);\n },\n\n notify: (message, type) => {\n if (this.config.debug) {\n effectLog.info('notify', { type, message });\n }\n // Forward notify to client as a client effect\n pushClientEffect(['notify', message, { type }]);\n },\n\n log: (message, level) => {\n if (level === 'error') {\n dynamicLog.error(message);\n } else if (level === 'warn') {\n dynamicLog.warn(message);\n } else {\n dynamicLog.debug(message);\n }\n },\n\n // Allow custom handlers to override\n ...this.config.effectHandlers,\n };\n\n const state = registered.manager.getState(traitName);\n // Build binding context with @entity AND @EntityName aliases.\n // @entity is the standard binding root. @EntityName (e.g., @SpriteEntity)\n // is used by some behaviors for explicit entity references in render-ui patterns.\n // The compiled app resolves @EntityName at compile time; the interpreter\n // needs it in the runtime binding context.\n //\n // NOTE: fetchedData is populated by fetch effects DURING execution.\n // The syncFetchedBindings() helper is called from the fetch handler\n // to update bindings after each fetch, so render-ui effects that\n // run after fetch see the correct @EntityName.field values.\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n // Call-site `config: { ... }` injection. Reference-resolver captures the\n // trait ref's config block into RegisteredOrbital.configByTrait at\n // registration time (see registerOrbitalAsync). Here we surface it on the\n // binding context so render-ui patterns can read `@config.icon`,\n // `@config.title`, `@config.fields`, etc. — the mechanism that lets a\n // molecule parameterize an imported atom's UI without duplicating the\n // render-ui body.\n // Defaults from the trait's DECLARED config schema must merge BEHIND the\n // call-site override so atoms verified standalone (no consumer override)\n // still see their declared icon/title/fields/mode values. Without this,\n // `@config.icon` resolved to undefined → Icon fell back to \"?\", and\n // `@config.title` rendered as empty. The compiled path's Solution-1 in\n // backend.rs emits `DEFAULT_<TRAIT>_CONFIG` + `mergedConfig`; the runtime\n // path needs the same merge or std-modal/std-confirmation render bare in\n // playground while the compiled bundle renders correctly.\n const traitDef = registered.traits.find((t) => t.name === traitName);\n const declaredDefaults = collectDeclaredConfigDefaults(traitDef);\n const callSiteOverride = registered.configByTrait.get(traitName);\n if (declaredDefaults || callSiteOverride) {\n bindings.config = { ...(declaredDefaults ?? {}), ...(callSiteOverride ?? {}) };\n }\n\n // `@entity` resolves to the per-trait scalar state populated by\n // explicit `(set @entity.X Y)` effects. No implicit seeding from\n // persistence — if the schema author didn't `(set)` a field, it\n // stays undefined and render-ui shows nothing.\n const traitFieldState = registered.traitFieldStates.get(traitName);\n if (traitFieldState) {\n bindings.entity = traitFieldState;\n }\n\n // Add initial named entity binding\n if (entityType) {\n bindings[entityType] = bindings.entity ?? entityData;\n }\n\n // Wire forward refs so fetch/atomic handlers can access bindings and context\n bindingsRef = bindings;\n\n const context: EffectContext = {\n traitName,\n orbitalName: registered.schema.name,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n contextRef = context;\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n contextExtensions: this.config.contextExtensions,\n });\n\n await executor.executeAll(effects);\n }\n\n // ==========================================================================\n // Relation Population\n // ==========================================================================\n\n /**\n * Populate relation fields on entities\n *\n * For each field in `include`, find the relation field configuration and\n * fetch the related entity, attaching it to the parent entity.\n *\n * @param entities - Entities to populate\n * @param entityType - Entity type name\n * @param include - Relation field names to populate\n */\n /**\n * Validate that relation field values match their declared cardinality.\n * Called before create/update to ensure data integrity.\n */\n private validateRelationCardinality(\n entityType: string,\n data: EntityRow,\n ): void {\n // Find the entity schema\n for (const [, registered] of this.orbitals) {\n if (registered.entity.name !== entityType) continue;\n\n for (const field of registered.entity.fields ?? []) {\n if (field.type !== 'relation') continue;\n if (field.name === undefined) continue;\n const fieldName = field.name;\n const value = data[fieldName];\n if (value === undefined || value === null) continue;\n\n const cardinality = field.relation?.cardinality || 'one';\n\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n if (Array.isArray(value)) {\n throw new Error(\n `Cardinality violation: ${entityType}.${fieldName} has cardinality '${cardinality}' but received an array. Expected a single string ID.`\n );\n }\n } else if (cardinality === 'many' || cardinality === 'many-to-many' || cardinality === 'one-to-many') {\n if (typeof value === 'string') {\n data[fieldName] = [value];\n } else if (Array.isArray(value)) {\n const nonStrings = value.filter((v: unknown) => typeof v !== 'string');\n if (nonStrings.length > 0) {\n throw new Error(\n `Cardinality violation: ${entityType}.${fieldName} has cardinality '${cardinality}' but array contains non-string values.`\n );\n }\n }\n }\n }\n break;\n }\n }\n\n /**\n * Enforce onDelete rules for relation fields pointing to the entity being deleted.\n * Scans all registered entities for relation fields targeting the given entity type,\n * finds records referencing the ID being deleted, and applies cascade/nullify/restrict.\n */\n private async enforceOnDeleteRules(\n entityType: string,\n deletedId: string,\n ): Promise<void> {\n for (const [, registered] of this.orbitals) {\n const entity = registered.entity;\n const fields = entity.fields ?? [];\n\n for (const field of fields) {\n if (field.type !== 'relation') continue;\n if (field.relation?.entity !== entityType) continue;\n if (field.name === undefined) continue;\n const fieldName = field.name;\n\n const onDelete = field.relation.onDelete || 'restrict';\n const referringEntityType = entity.name;\n\n const allRecords = await this.persistence.list(referringEntityType);\n const affectedRecords = allRecords.filter(record => {\n const fkValue = record[fieldName];\n if (typeof fkValue === 'string') return fkValue === deletedId;\n if (Array.isArray(fkValue)) return fkValue.includes(deletedId);\n return false;\n });\n\n if (affectedRecords.length === 0) continue;\n\n switch (onDelete) {\n case 'restrict':\n throw new Error(\n `Cannot delete ${entityType} ${deletedId}: ${affectedRecords.length} ${referringEntityType} record(s) reference it via ${field.name}. Rule: restrict.`\n );\n\n case 'cascade':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId) {\n await this.persistence.delete(referringEntityType, recordId);\n }\n }\n if (this.config.debug) {\n persistLog.debug('cascade-delete', {\n count: affectedRecords.length,\n entityType: referringEntityType,\n });\n }\n break;\n\n case 'nullify':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId && field.name !== undefined) {\n const fieldName = field.name;\n const update: EntityRow = {};\n const fkValue = record[fieldName];\n if (Array.isArray(fkValue)) {\n update[fieldName] = fkValue.filter((id: unknown) => id !== deletedId);\n } else {\n update[fieldName] = null;\n }\n await this.persistence.update(referringEntityType, recordId, update);\n }\n }\n if (this.config.debug) {\n persistLog.debug('nullify', {\n field: field.name,\n count: affectedRecords.length,\n entityType: referringEntityType,\n });\n }\n break;\n }\n }\n }\n }\n\n private async populateRelations(\n entities: EntityRow[],\n entityType: string,\n include: string[],\n depth: number = 0,\n visited: Set<string> = new Set(),\n ): Promise<void> {\n // Circular reference protection: stop if depth exceeded or entity type already visited\n const maxDepth = 2;\n if (depth >= maxDepth || visited.has(entityType)) {\n if (this.config.debug) {\n persistLog.debug('populate:skip', {\n entityType,\n depth,\n visited: visited.has(entityType),\n });\n }\n return;\n }\n visited.add(entityType);\n // Find the orbital that owns this entity type\n let entityFields: Array<{ name: string; type: string; relation?: { entity?: string; cardinality?: string; onDelete?: string } }> | undefined;\n\n for (const [, registered] of this.orbitals) {\n if (registered.entity.name === entityType) {\n // EntityField.name is optional in @almadar/core 7+ to match the\n // Rust IR (FieldDefinition.name: Option<String>). For relation\n // population we only care about named top-level fields; nameless\n // nested item descriptors don't carry FK metadata.\n entityFields = registered.entity.fields.filter(\n (f): f is typeof f & { name: string } =>\n typeof f.name === 'string' && f.name.length > 0,\n );\n break;\n }\n }\n\n if (!entityFields) {\n if (this.config.debug) {\n persistLog.warn('populate:no-entity-def', { entityType });\n }\n return;\n }\n\n // Process each include field\n for (const includeField of include) {\n // Find the relation field (check both \"fieldName\" and \"fieldNameId\" patterns)\n const relationField = entityFields.find(f => {\n if (f.type !== 'relation') return false;\n // Match \"company\" against \"company\" or \"companyId\"\n return f.name === includeField ||\n f.name === `${includeField}Id` ||\n f.name.replace(/Id$/, '') === includeField;\n });\n\n if (!relationField?.relation?.entity) {\n if (this.config.debug) {\n persistLog.warn('populate:no-relation-field', { includeField, entityType });\n }\n continue;\n }\n\n const foreignKeyField = relationField.name;\n const relatedEntityType = relationField.relation.entity;\n const cardinality = relationField.relation.cardinality || 'one';\n\n // Collect all foreign key IDs to batch fetch\n // Handles both single ID (string) and array of IDs (string[]) for many cardinalities\n const foreignKeyIds = new Set<string>();\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n if (fkValue && typeof fkValue === 'string') {\n foreignKeyIds.add(fkValue);\n } else if (Array.isArray(fkValue)) {\n for (const id of fkValue) {\n if (id && typeof id === 'string') {\n foreignKeyIds.add(id);\n }\n }\n }\n }\n\n if (foreignKeyIds.size === 0) continue;\n\n // Batch fetch all related entities\n const relatedEntities = new Map<string, EntityRow>();\n for (const fkId of foreignKeyIds) {\n try {\n const related = await this.persistence.getById(relatedEntityType, fkId);\n if (related) {\n relatedEntities.set(fkId, related);\n }\n } catch (error) {\n if (this.config.debug) {\n persistLog.error('populate:fetch-related-error', {\n entityType: relatedEntityType,\n error: error instanceof Error ? error : String(error),\n });\n }\n }\n }\n\n // Attach related entities to parent entities\n // Use the base name without \"Id\" suffix for the populated field\n const populatedFieldName = includeField.endsWith('Id')\n ? includeField.slice(0, -2)\n : includeField;\n\n // Self-referential relations (target entity === source entity, e.g.\n // ThreadPost.replies : [ThreadPost]) would otherwise attach LIVE store\n // rows that also appear in `entities` and get hydrated themselves —\n // producing mutual object references (A.replies→B, B.replies→A) that make\n // `res.json()` throw \"Converting circular structure to JSON\" → 500. Attach\n // a shallow clone instead, and for the self-referential case neutralize the\n // child's own back-pointer field so hydrated children are leaves (one level\n // of hydration, no cycle).\n const isSelfRef = relatedEntityType === entityType;\n const hydrateClone = (id: string): EntityRow | undefined => {\n const related = relatedEntities.get(id);\n if (!related) return undefined;\n const copy: EntityRow = { ...related };\n if (isSelfRef) copy[foreignKeyField] = [];\n return copy;\n };\n\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n // Population attaches related EntityRow objects to the entity at runtime.\n // This mutates beyond the EntityRow type, so we use Object.defineProperty.\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n Object.defineProperty(entity, populatedFieldName, {\n value: hydrateClone(fkValue),\n writable: true, enumerable: true, configurable: true,\n });\n }\n } else {\n if (Array.isArray(fkValue)) {\n const fkIds = (fkValue as string[]).filter((id): id is string => typeof id === 'string');\n Object.defineProperty(entity, populatedFieldName, {\n value: fkIds.map(hydrateClone).filter(Boolean),\n writable: true, enumerable: true, configurable: true,\n });\n } else if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n Object.defineProperty(entity, populatedFieldName, {\n value: [hydrateClone(fkValue)],\n writable: true, enumerable: true, configurable: true,\n });\n }\n }\n }\n\n if (this.config.debug) {\n persistLog.debug('populate:done', {\n field: populatedFieldName,\n count: entities.length,\n entityType,\n });\n }\n }\n }\n\n // ==========================================================================\n // Express Router\n // ==========================================================================\n\n /**\n * Create Express router for orbital API endpoints\n *\n * All data access goes through trait events with guards.\n * No direct CRUD routes - use events with `fetch` effects.\n *\n * Routes:\n * - GET / - List registered orbitals\n * - GET /:orbital - Get orbital info and current states\n * - POST /:orbital/events - Send event to orbital (includes data from `fetch` effects)\n */\n router(): ExpressRouter {\n if (!isNodeEnv()) {\n throw new Error(\n \"OrbitalServerRuntime.router() is Node-only (uses Express). \" +\n \"For in-browser use, mount <BrowserPlayground> from @almadar/ui instead.\",\n );\n }\n // Eval-require so the dist bundle has no static `import 'express'`\n // — browsers (which never reach this branch anyway) get a clean\n // bundle with zero express references.\n const { Router } = nodeRequire<typeof import('express')>('express');\n const router = Router();\n\n // List orbitals\n router.get(\"/\", (_req: Request, res: Response) => {\n const orbitals = Array.from(this.orbitals.entries()).map(\n ([name, reg]) => ({\n name,\n entity: reg.entity?.name,\n traits: (reg.traits || []).map((t) => t.name),\n }),\n );\n res.json({ success: true, orbitals });\n });\n\n // Get orbital info\n router.get(\"/:orbital\", (req: Request, res: Response) => {\n const orbitalName = req.params.orbital as string;\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n res.status(404).json({ success: false, error: \"Orbital not found\" });\n return;\n }\n\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n res.json({\n success: true,\n orbital: {\n name: orbitalName,\n entity: registered.entity,\n traits: registered.traits.map((t) => ({\n name: t.name,\n currentState: states[t.name],\n states: (t.stateMachine?.states || []).map((s) => s.name),\n events: [...new Set((t.stateMachine?.transitions || []).map((tr) => tr.event))],\n })),\n },\n });\n });\n\n // Send event to orbital - this is the ONLY data access point\n // All reads go through `fetch` effects with guard enforcement\n // All writes go through `persist` effects with guard enforcement\n router.post(\n \"/:orbital/events\",\n async (req: Request, res: Response, next: NextFunction) => {\n try {\n const orbitalName = req.params.orbital as string;\n // Extract user from request (set by authenticateFirebase middleware)\n const firebaseUser = (req as Request & { firebaseUser?: OrbitalEventRequest[\"user\"] }).firebaseUser;\n const user = firebaseUser ? {\n ...firebaseUser,\n displayName: (firebaseUser.name as string | undefined) ?? firebaseUser.displayName,\n } : undefined;\n\n const result = await this.processOrbitalEvent(orbitalName, {\n ...req.body,\n user,\n });\n res.json(result);\n } catch (error) {\n next(error);\n }\n },\n );\n\n // No direct CRUD routes - all data access goes through events\n // This ensures guards are always evaluated for both reads and writes\n\n return router;\n }\n\n // ==========================================================================\n // Direct API (for programmatic use)\n // ==========================================================================\n\n /**\n * Get the event bus for manual event emission\n */\n getEventBus(): EventBus {\n return this.eventBus;\n }\n\n /**\n * Get state for a specific orbital/trait\n */\n getState(\n orbitalName: string,\n traitName?: string,\n ): TraitState | Record<string, TraitState> | undefined {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) return undefined;\n\n if (traitName) {\n return registered.manager.getState(traitName);\n }\n\n // Return all states for the orbital\n const states: Record<string, TraitState> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state;\n }\n return states;\n }\n\n /**\n * List registered orbitals\n */\n listOrbitals(): string[] {\n return Array.from(this.orbitals.keys());\n }\n\n /**\n * Check if an orbital is registered\n */\n hasOrbital(name: string): boolean {\n return this.orbitals.has(name);\n }\n\n /**\n * Get information about active ticks\n */\n getActiveTicks(): Array<{\n orbital: string;\n trait: string;\n tick: string;\n interval: number | string;\n hasGuard: boolean;\n }> {\n return this.tickBindings.map((binding) => ({\n orbital: binding.orbitalName,\n trait: binding.traitName,\n tick: binding.tick.name,\n interval: binding.tick.interval,\n hasGuard: !!binding.tick.guard,\n }));\n }\n}\n\n/**\n * Factory function to create a runtime instance\n */\nexport function createOrbitalServerRuntime(\n config?: OrbitalServerRuntimeConfig,\n): OrbitalServerRuntime {\n return new OrbitalServerRuntime(config);\n}\n\n// ============================================================================\n// Source-scoped listen support\n// ============================================================================\n\n/**\n * Parse a `TraitEventListener`'s event key into its bare event name and a\n * source-matcher predicate.\n *\n * Supports both authoring layers:\n *\n * 1. **New core schema**: `listener.source` is an explicit object describing\n * the scope (`any` / `trait` / `orbital`). Used as-is.\n * 2. **Legacy concatenated string** in `listener.event`:\n * - `\"*.EVENT\"` → `{ kind: \"any\" }`, bare = EVENT\n * - `\"Trait.EVENT\"` → `{ kind: \"trait\", trait: \"Trait\" }`, bare = EVENT\n * - `\"Orbital.Trait.EVENT\"`→ `{ kind: \"orbital\", orbital, trait }`, bare = EVENT\n * - `\"EVENT\"` → `{ kind: \"any\" }`, bare = EVENT (no prefix\n * means \"I don't know where it came from, accept any\").\n *\n * The matcher is invoked on every emit that matches the bare event key; it\n * returns `true` iff the emit's source metadata matches the listener's scope.\n *\n * `listenerOrbital` is the orbital that owns the listener; it's used to\n * resolve intra-orbital trait references for `{ kind: \"trait\" }` scopes.\n */\nfunction parseListenSource(\n listener: { event: string; source?: unknown },\n listenerOrbital: string,\n): {\n bareEvent: string;\n matcher: (source: EventSourceMeta | undefined) => boolean;\n} {\n // 1. Explicit source field from the new core schema (preferred).\n const explicit = (listener as { source?: ListenSourceDescriptor }).source;\n if (explicit && typeof explicit === 'object') {\n return {\n bareEvent: listener.event,\n matcher: buildMatcher(explicit, listenerOrbital),\n };\n }\n\n // 2. Fall back to parsing the legacy concatenated string.\n const key = listener.event;\n const parts = key.split('.');\n if (parts.length === 1) {\n // Bare `EVENT` — no source prefix. Accept any source (this is the\n // safest default; callers who want strict scoping should author the\n // full two-segment form).\n return { bareEvent: key, matcher: () => true };\n }\n\n if (parts.length === 2) {\n const [sourceOrStar, eventName] = parts;\n if (sourceOrStar === '*') {\n return { bareEvent: eventName, matcher: () => true };\n }\n // Single-segment source: intra-orbital trait reference.\n return {\n bareEvent: eventName,\n matcher: buildMatcher(\n { kind: 'trait', trait: sourceOrStar },\n listenerOrbital,\n ),\n };\n }\n\n if (parts.length >= 3) {\n const eventName = parts[parts.length - 1];\n const trait = parts[parts.length - 2];\n const orbital = parts.slice(0, parts.length - 2).join('.');\n return {\n bareEvent: eventName,\n matcher: buildMatcher({ kind: 'orbital', orbital, trait }, listenerOrbital),\n };\n }\n\n // Unreachable given the split above — defensive default.\n return { bareEvent: key, matcher: () => true };\n}\n\n/** Narrow the structured source descriptor into an executable matcher. */\nfunction buildMatcher(\n src: ListenSourceDescriptor,\n listenerOrbital: string,\n): (source: EventSourceMeta | undefined) => boolean {\n if (src.kind === 'any') return () => true;\n if (src.kind === 'trait') {\n const wantedTrait = src.trait;\n return (source) =>\n !!source &&\n source.orbital === listenerOrbital &&\n source.trait === wantedTrait;\n }\n // src.kind === 'orbital'\n const wantedOrbital = src.orbital;\n const wantedTrait = src.trait;\n return (source) =>\n !!source &&\n source.orbital === wantedOrbital &&\n source.trait === wantedTrait;\n}\n\n/** Shape of the structured `source` field on `TraitEventListener`. */\ntype ListenSourceDescriptor =\n | { kind: 'any' }\n | { kind: 'trait'; trait: string }\n | { kind: 'orbital'; orbital: string; trait: string };\n\n/** Shape of `RuntimeEvent.source`. */\ntype EventSourceMeta = {\n orbital?: string;\n trait?: string;\n transition?: string;\n tick?: string;\n};\n"]}
|