@almadar/runtime 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/loader/external-loader.ts","../src/EventBus.ts","../src/BindingResolver.ts","../src/StateMachineCore.ts","../src/EffectExecutor.ts","../src/MockPersistenceAdapter.ts","../src/resolver/reference-resolver.ts","../src/loader/schema-loader.ts","../src/loader/index.ts","../src/loader/http-loader.ts","../src/loader/unified-loader.ts","../src/UsesIntegration.ts","../src/OrbitalServerRuntime.ts"],"names":["path","OrbitalSchemaSchema","evaluateGuard"],"mappings":"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","file":"OrbitalServerRuntime.js","sourcesContent":["/**\n * External Orbital Loader\n *\n * Loads external .orb files from various sources:\n * - Local filesystem (relative paths)\n * - Standard library (std/...)\n * - Scoped packages (@name/...)\n *\n * @packageDocumentation\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { Orbital, OrbitalSchema } from \"@almadar/core\";\nimport { OrbitalSchemaSchema } from \"@almadar/core\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Result of loading an orbital.\n */\nexport interface LoadedOrbital {\n /** The loaded orbital */\n orbital: Orbital;\n\n /** Source path (resolved absolute path) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Result of loading an orbital schema (may contain multiple orbitals).\n */\nexport interface LoadedSchema {\n /** The loaded schema */\n schema: OrbitalSchema;\n\n /** Source path (resolved absolute path) */\n sourcePath: string;\n\n /** Original import path */\n importPath: string;\n}\n\n/**\n * Loader options.\n */\nexport interface LoaderOptions {\n /** Base directory for resolving relative imports */\n basePath: string;\n\n /** Standard library root path */\n stdLibPath?: string;\n\n /** Scoped package roots (e.g., { \"@game-lib\": \"/path/to/lib\" }) */\n scopedPaths?: Record<string, string>;\n\n /** Whether to allow paths outside basePath (security) */\n allowOutsideBasePath?: boolean;\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// Circular Import Detection\n// ============================================================================\n\n/**\n * Tracks import chains to detect circular imports.\n */\nexport class ImportChain {\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 = [...this.chain.slice(this.chain.indexOf(absolutePath)), absolutePath];\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(): ImportChain {\n const newChain = new ImportChain();\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-loading.\n */\nexport class LoaderCache {\n private cache = new Map<string, LoadedSchema>();\n\n get(absolutePath: string): LoadedSchema | undefined {\n return this.cache.get(absolutePath);\n }\n\n set(absolutePath: string, schema: LoadedSchema): void {\n this.cache.set(absolutePath, schema);\n }\n\n has(absolutePath: string): boolean {\n return this.cache.has(absolutePath);\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// External Orbital Loader\n// ============================================================================\n\n/**\n * ExternalOrbitalLoader - Loads external .orb files with security and caching.\n *\n * Security Model:\n * - By default, only allows loading from within basePath\n * - std library has its own allowed path\n * - Scoped packages have their own allowed paths\n * - No path traversal outside allowed directories\n *\n * @example\n * ```typescript\n * const loader = new ExternalOrbitalLoader({\n * basePath: \"/project/schemas\",\n * stdLibPath: \"/project/std\",\n * });\n *\n * // Load relative .orb file\n * const result = await loader.load(\"./shared/health.orb\");\n *\n * // Load from std library\n * const stdResult = await loader.load(\"std/behaviors/game-core\");\n * ```\n */\nexport class ExternalOrbitalLoader {\n private options: Required<LoaderOptions>;\n private cache: LoaderCache;\n\n constructor(options: LoaderOptions) {\n this.options = {\n stdLibPath: options.stdLibPath ?? \"\",\n scopedPaths: options.scopedPaths ?? {},\n allowOutsideBasePath: options.allowOutsideBasePath ?? false,\n ...options,\n };\n this.cache = new LoaderCache();\n }\n\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\n */\n async load(\n importPath: string,\n fromPath?: string,\n chain?: ImportChain\n ): Promise<LoadResult<LoadedSchema>> {\n const importChain = chain ?? new ImportChain();\n\n // Resolve the absolute path\n const resolveResult = this.resolvePath(importPath, fromPath);\n if (!resolveResult.success) {\n return resolveResult;\n }\n const absolutePath = resolveResult.data;\n\n // Check for circular imports\n const circularError = importChain.push(absolutePath);\n if (circularError) {\n return { success: false, error: circularError };\n }\n\n try {\n // Check cache\n const cached = this.cache.get(absolutePath);\n if (cached) {\n return { success: true, data: cached };\n }\n\n // Load and parse the file\n const loadResult = await this.loadFile(absolutePath);\n if (!loadResult.success) {\n return loadResult;\n }\n\n const loaded: LoadedSchema = {\n schema: loadResult.data,\n sourcePath: absolutePath,\n importPath,\n };\n\n // Cache the result\n this.cache.set(absolutePath, 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 * @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\n */\n async loadOrbital(\n importPath: string,\n orbitalName?: string,\n fromPath?: string,\n chain?: ImportChain\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((o: Orbital) => o.name === orbitalName);\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 filesystem path.\n */\n resolvePath(importPath: string, fromPath?: string): LoadResult<string> {\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 // Absolute paths (only if allowed)\n if (path.isAbsolute(importPath)) {\n if (!this.options.allowOutsideBasePath) {\n return {\n success: false,\n error: `Absolute paths not allowed: ${importPath}`,\n };\n }\n return { success: true, data: importPath };\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 path 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 absolutePath = path.join(this.options.stdLibPath, relativePath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Validate it's within std library\n const normalizedPath = path.normalize(absolutePath);\n const normalizedStdLib = path.normalize(this.options.stdLibPath);\n if (!normalizedPath.startsWith(normalizedStdLib)) {\n return {\n success: false,\n error: `Path traversal outside std library: ${importPath}`,\n };\n }\n\n return { success: true, data: absolutePath };\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 absolutePath = path.join(scopeRoot, relativePath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Validate it's within scope root\n const normalizedPath = path.normalize(absolutePath);\n const normalizedRoot = path.normalize(scopeRoot);\n if (!normalizedPath.startsWith(normalizedRoot)) {\n return {\n success: false,\n error: `Path traversal outside scoped package: ${importPath}`,\n };\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Resolve a relative path.\n */\n private resolveRelativePath(\n importPath: string,\n fromPath?: string\n ): LoadResult<string> {\n const baseDir = fromPath\n ? path.dirname(fromPath)\n : this.options.basePath;\n\n let absolutePath = path.resolve(baseDir, importPath);\n\n // Add .orb extension if not present\n if (!absolutePath.endsWith(\".orb\")) {\n absolutePath += \".orb\";\n }\n\n // Security check: ensure within base path\n if (!this.options.allowOutsideBasePath) {\n const normalizedPath = path.normalize(absolutePath);\n const normalizedBase = path.normalize(this.options.basePath);\n if (!normalizedPath.startsWith(normalizedBase)) {\n return {\n success: false,\n error: `Path traversal outside base path: ${importPath}. Base: ${this.options.basePath}`,\n };\n }\n }\n\n return { success: true, data: absolutePath };\n }\n\n /**\n * Load and parse an .orb file.\n */\n private async loadFile(absolutePath: string): Promise<LoadResult<OrbitalSchema>> {\n try {\n // Check file exists\n if (!fs.existsSync(absolutePath)) {\n return {\n success: false,\n error: `File not found: ${absolutePath}`,\n };\n }\n\n // Read file\n const content = await fs.promises.readFile(absolutePath, \"utf-8\");\n\n // Parse JSON\n let data: unknown;\n try {\n data = JSON.parse(content);\n } catch (e) {\n return {\n success: false,\n error: `Invalid JSON in ${absolutePath}: ${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 ${absolutePath}:\\n${errors}`,\n };\n }\n\n return { success: true, data: parseResult.data as OrbitalSchema };\n } catch (e) {\n return {\n success: false,\n error: `Failed to load ${absolutePath}: ${e instanceof Error ? e.message : String(e)}`,\n };\n }\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 a loader with sensible defaults.\n */\nexport function createLoader(basePath: string, options?: Partial<LoaderOptions>): ExternalOrbitalLoader {\n return new ExternalOrbitalLoader({\n basePath,\n ...options,\n });\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Parse an import path with optional fragment.\n *\n * @example\n * parseImportPath(\"./health.orb\") // { path: \"./health.orb\", fragment: undefined }\n * parseImportPath(\"./game.orb#Player\") // { path: \"./game.orb\", fragment: \"Player\" }\n */\nexport function parseImportPath(importPath: string): { path: string; fragment?: string } {\n const hashIndex = importPath.indexOf(\"#\");\n if (hashIndex === -1) {\n return { path: importPath };\n }\n return {\n path: importPath.slice(0, hashIndex),\n fragment: importPath.slice(hashIndex + 1),\n };\n}\n","/**\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 type { IEventBus, RuntimeEvent, EventListener, Unsubscribe } from './types.js';\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 * console.log('Order confirmed:', event.payload);\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 private debug: boolean;\n\n constructor(options: { debug?: boolean } = {}) {\n this.debug = options.debug ?? false;\n }\n\n /**\n * Emit an event to all registered listeners\n */\n emit(\n type: string,\n payload?: Record<string, unknown>,\n source?: RuntimeEvent['source']\n ): void {\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 (this.debug) {\n if (listenerCount > 0) {\n console.log(`[EventBus] Emit: ${type} → ${listenerCount} listener(s)`, payload);\n } else {\n console.warn(`[EventBus] Emit: ${type} (NO LISTENERS)`, payload);\n }\n }\n\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 console.error(`[EventBus] Error in listener for '${type}':`, 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 console.error(`[EventBus] Error in wildcard listener:`, error);\n }\n }\n }\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 if (this.debug) {\n console.log(`[EventBus] Subscribed to '${type}', total: ${listeners.size}`);\n }\n\n return () => {\n listeners.delete(listener);\n if (this.debug) {\n console.log(`[EventBus] Unsubscribed from '${type}', remaining: ${listeners.size}`);\n }\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 if (this.debug) {\n console.log(`[EventBus] Clearing all listeners (${this.listeners.size} event types)`);\n }\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 type { BindingContext } from './types.js';\n\n// Re-export for convenience\nexport { createMinimalContext, type EvaluationContext };\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Known S-expression operators for detecting embedded expressions\n */\nconst OPERATORS = new Set([\n // Comparison\n '=', '!=', '<', '>', '<=', '>=',\n // Logic\n 'and', 'or', 'not', 'if',\n // Math\n '+', '-', '*', '/', '%',\n // Array\n 'count', 'first', 'last', 'map', 'filter', 'find', 'some', 'every', 'reduce',\n // String\n 'concat', 'upper', 'lower', 'trim', 'substring', 'split', 'join', 'str',\n // Effects\n 'set', 'emit', 'navigate', 'persist', 'notify', 'render-ui', 'render', 'spawn', 'despawn',\n 'call-service', 'do', 'when', 'increment', 'decrement', 'log',\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: Record<string, unknown>,\n ctx: EvaluationContext\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n result[key] = interpolateValue(value, ctx);\n }\n return result;\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 Record<string, unknown>, 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 return resolveBinding(value, ctx);\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 */\nfunction isPureBinding(value: string): boolean {\n return /^@[\\w]+(?:\\.[\\w]+)*$/.test(value);\n}\n\n/**\n * Interpolate embedded bindings in a string.\n */\nfunction interpolateEmbeddedBindings(value: string, ctx: EvaluationContext): string {\n return value.replace(/@[\\w]+(?:\\.[\\w]+)*/g, (match) => {\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 return [];\n }\n\n if (isSExpression(value)) {\n return evaluate(value as Parameters<typeof evaluate>[0], ctx);\n }\n\n return value.map((item) => interpolateValue(item, ctx));\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 (OPERATORS.has(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 Record<string, unknown>).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 Record<string, unknown>).forEach(collect);\n }\n }\n\n collect(value);\n return [...new Set(bindings)];\n}\n\n/**\n * Create an EvaluationContext from a BindingContext.\n */\nexport function createContextFromBindings(bindings: BindingContext): EvaluationContext {\n return createMinimalContext(\n bindings.entity || {},\n bindings.payload || {},\n bindings.state || 'idle'\n );\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} from './types.js';\nimport { interpolateValue, createContextFromBindings } from './BindingResolver.js';\nimport { evaluateGuard } from '@almadar/evaluator';\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 console.warn(`[StateMachine] Trait \"${trait.name}\" has no states defined, using \"unknown\"`);\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 a matching transition from the current state for the given event.\n */\nexport function findTransition(\n trait: TraitDefinition,\n currentState: string,\n eventKey: string\n): TraitDefinition['transitions'][0] | undefined {\n // Guard against missing transitions array\n if (!trait.transitions || trait.transitions.length === 0) {\n return undefined;\n }\n return trait.transitions.find((t) => {\n // Handle array 'from' (multiple source states)\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 * Normalize event key - strip UI: prefix if present.\n */\nexport function normalizeEventKey(eventKey: string): string {\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?: Record<string, unknown>;\n /** Entity data for binding resolution */\n entityData?: Record<string, unknown>;\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 { traitState, trait, eventKey, payload, entityData } = options;\n const normalizedEvent = normalizeEventKey(eventKey);\n\n // Find transition from current state\n const transition = findTransition(trait, traitState.currentState, normalizedEvent);\n\n if (!transition) {\n return {\n executed: false,\n newState: traitState.currentState,\n previousState: traitState.currentState,\n effects: [],\n };\n }\n\n // Evaluate guard if present\n if (transition.guard) {\n const ctx = createContextFromBindings({\n entity: entityData,\n payload,\n state: traitState.currentState,\n });\n\n try {\n const guardPasses = evaluateGuard(\n transition.guard as Parameters<typeof evaluateGuard>[0],\n ctx\n );\n if (!guardPasses) {\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 } catch (error) {\n // On error, allow transition (fail-open for better UX)\n console.error('[StateMachineCore] Guard evaluation error:', error);\n }\n }\n\n // Transition should execute\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: transition.guard ? true : undefined,\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 */\nexport class StateMachineManager {\n private traits: Map<string, TraitDefinition> = new Map();\n private states: Map<string, TraitState> = new Map();\n\n constructor(traits: TraitDefinition[] = []) {\n for (const trait of traits) {\n this.addTrait(trait);\n }\n }\n\n /**\n * Add a trait to the manager.\n */\n addTrait(trait: TraitDefinition): void {\n this.traits.set(trait.name, trait);\n this.states.set(trait.name, createInitialTraitState(trait));\n }\n\n /**\n * Remove a trait from the manager.\n */\n removeTrait(traitName: string): void {\n this.traits.delete(traitName);\n this.states.delete(traitName);\n }\n\n /**\n * Get current state for a trait.\n */\n getState(traitName: string): TraitState | undefined {\n return this.states.get(traitName);\n }\n\n /**\n * Get all current states.\n */\n getAllStates(): Map<string, TraitState> {\n return new Map(this.states);\n }\n\n /**\n * Check if a trait can handle an event from its current state.\n */\n canHandleEvent(traitName: string, eventKey: string): boolean {\n const trait = this.traits.get(traitName);\n const state = this.states.get(traitName);\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 * @returns Array of transition results (one per trait that had a matching transition)\n */\n sendEvent(\n eventKey: string,\n payload?: Record<string, unknown>,\n entityData?: Record<string, unknown>\n ): Array<{ traitName: string; result: TransitionResult }> {\n const results: Array<{ traitName: string; result: TransitionResult }> = [];\n\n for (const [traitName, trait] of this.traits) {\n const traitState = this.states.get(traitName);\n if (!traitState) continue;\n\n const result = processEvent({\n traitState,\n trait,\n eventKey,\n payload,\n entityData,\n });\n\n if (result.executed) {\n // Update state\n this.states.set(traitName, {\n ...traitState,\n currentState: result.newState,\n previousState: result.previousState,\n lastEvent: normalizeEventKey(eventKey),\n context: { ...traitState.context, ...payload },\n });\n\n results.push({ traitName, result });\n }\n }\n\n return results;\n }\n\n /**\n * Reset a trait to its initial state.\n */\n resetTrait(traitName: string): void {\n const trait = this.traits.get(traitName);\n if (trait) {\n this.states.set(traitName, createInitialTraitState(trait));\n }\n }\n\n /**\n * Reset all traits to initial states.\n */\n resetAll(): void {\n for (const [traitName, trait] of this.traits) {\n this.states.set(traitName, createInitialTraitState(trait));\n }\n }\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 { EffectHandlers, Effect, EffectContext } from './types.js';\nimport { interpolateValue, createContextFromBindings } from './BindingResolver.js';\nimport type { BindingContext } from './types.js';\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}\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): unknown[] {\n const ctx = createContextFromBindings(bindings);\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\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 }\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 console.warn('[EffectExecutor] Invalid effect format:', effect);\n }\n return;\n }\n\n const { operator, args } = parsed;\n const resolvedArgs = resolveArgs(args, this.bindings);\n\n if (this.debug) {\n console.log('[EffectExecutor] Executing:', operator, resolvedArgs);\n }\n\n try {\n await this.dispatch(operator, resolvedArgs);\n } catch (error) {\n console.error('[EffectExecutor] Error executing effect:', operator, error);\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 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 Record<string, unknown> | undefined;\n this.handlers.emit(event, payload);\n break;\n }\n\n case 'set': {\n const [entityId, field, value] = args as [string, string, unknown];\n this.handlers.set(entityId, field, value);\n break;\n }\n\n case 'persist': {\n const action = args[0] as 'create' | 'update' | 'delete';\n const entityType = args[1] as string;\n const data = args[2] as Record<string, unknown> | undefined;\n await this.handlers.persist(action, entityType, data);\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 Record<string, unknown> | undefined;\n await this.handlers.callService(service, action, params);\n break;\n }\n\n case 'fetch': {\n if (this.handlers.fetch) {\n const entityType = args[0] as string;\n const options = args[1] as {\n id?: string;\n filter?: unknown;\n limit?: number;\n offset?: number;\n } | undefined;\n await this.handlers.fetch(entityType, options);\n } else {\n this.logUnsupported('fetch');\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 Record<string, unknown> | 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 console.log(args[0], args.slice(1));\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 const pattern = args[1];\n const props = args[2] as Record<string, unknown> | 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 Record<string, unknown> | 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 console.log(`[Notify:${args[1] || 'info'}] ${args[0]}`);\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 // Condition should already be resolved by binding resolution\n const condition = args[0];\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 default: {\n if (this.debug) {\n console.warn('[EffectExecutor] Unknown operator:', operator);\n }\n }\n }\n }\n\n private logUnsupported(operator: string): void {\n if (this.debug) {\n console.warn(\n `[EffectExecutor] Effect \"${operator}\" not supported on this platform`\n );\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 * 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';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface EntityField {\n name: string;\n type: string;\n required?: boolean;\n values?: string[]; // For enum types\n default?: unknown;\n}\n\nexport interface EntitySchema {\n name: string;\n fields: EntityField[];\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, Record<string, unknown>>> = 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 };\n\n // Set seed for deterministic generation if provided\n if (config.seed !== undefined) {\n faker.seed(config.seed);\n if (this.config.debug) {\n console.log(`[MockPersistence] Using seed: ${config.seed}`);\n }\n }\n }\n\n // ============================================================================\n // Store Management\n // ============================================================================\n\n private getStore(entityName: string): Map<string, Record<string, unknown>> {\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 */\n registerEntity(schema: EntitySchema, seedCount?: number): void {\n const normalized = schema.name.toLowerCase();\n this.schemas.set(normalized, schema);\n\n const count = seedCount ?? this.config.defaultSeedCount ?? 6;\n this.seed(schema.name, schema.fields, count);\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 console.log(`[MockPersistence] Seeding ${count} ${entityName}...`);\n }\n\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 }\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 ): Record<string, unknown> {\n const id = this.nextId(entityName);\n const now = new Date().toISOString();\n const item: Record<string, unknown> = {\n id,\n createdAt: faker.date.past({ years: 1 }).toISOString(),\n updatedAt: now,\n };\n\n for (const field of fields) {\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 /**\n * Generate a mock value for a field based on its schema.\n */\n private generateFieldValue(entityName: string, field: EntityField, index: number): unknown {\n // Handle default values\n if (field.default !== undefined) {\n if (field.default === '@now') {\n return new Date().toISOString();\n }\n return field.default;\n }\n\n // Handle optional fields - 80% chance of having a value\n if (!field.required && Math.random() > 0.8) {\n return null;\n }\n\n const fieldType = field.type.toLowerCase();\n\n switch (fieldType) {\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 if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n return null;\n\n case 'relation':\n return null; // Relations need special handling\n\n case 'array':\n case 'object':\n return field.type === 'array' ? [] : {};\n\n default:\n // Treat unknown types as strings\n return this.generateStringValue(entityName, field, index);\n }\n }\n\n /**\n * Generate a string value based on field name heuristics.\n */\n private generateStringValue(entityName: string, field: EntityField, index: number): string {\n const name = field.name.toLowerCase();\n\n // If field has enum values, use them\n if (field.values && field.values.length > 0) {\n return faker.helpers.arrayElement(field.values);\n }\n\n // Specific fields - use faker for realistic data\n if (name.includes('email')) return faker.internet.email();\n if (name.includes('phone')) return faker.phone.number();\n if (name.includes('address')) return faker.location.streetAddress();\n if (name.includes('city')) return faker.location.city();\n if (name.includes('country')) return faker.location.country();\n if (name.includes('url') || name.includes('website')) return faker.internet.url();\n if (name.includes('avatar') || name.includes('image')) return faker.image.avatar();\n if (name.includes('color')) return faker.color.human();\n if (name.includes('uuid')) return faker.string.uuid();\n if (name.includes('description') || name.includes('bio')) return faker.lorem.paragraph();\n\n // Generic name/title/text fields - use entity-aware readable format\n const entityLabel = this.capitalizeFirst(entityName);\n const fieldLabel = this.capitalizeFirst(field.name);\n return `${entityLabel} ${fieldLabel} ${index}`;\n }\n\n /**\n * Generate a date value based on field name heuristics.\n */\n private generateDateValue(field: EntityField): string {\n const name = field.name.toLowerCase();\n\n let date: Date;\n if (name.includes('created') || name.includes('start') || name.includes('birth')) {\n date = faker.date.past({ years: 2 });\n } else if (name.includes('updated') || name.includes('modified')) {\n date = faker.date.recent({ days: 30 });\n } else if (name.includes('deadline') || name.includes('due') || name.includes('end') || name.includes('expires')) {\n date = faker.date.future({ years: 1 });\n } else {\n date = faker.date.anytime();\n }\n\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: Record<string, unknown>\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 item = {\n ...data,\n id,\n createdAt: now,\n updatedAt: now,\n };\n\n store.set(id, item);\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: Record<string, unknown>\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<Record<string, unknown> | null> {\n const store = this.getStore(entityType);\n return store.get(id) ?? null;\n }\n\n async list(entityType: string): Promise<Array<Record<string, unknown>>> {\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 /**\n * Clear all data.\n */\n clearAll(): void {\n this.stores.clear();\n this.idCounters.clear();\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 OrbitalSchema,\n UseDeclaration,\n} from \"@almadar/core\";\nimport {\n isEntityReference,\n isPageReference,\n isPageReferenceString,\n isPageReferenceObject,\n parseEntityRef,\n parsePageRef,\n parseImportedTraitRef,\n} from \"@almadar/core\";\nimport {\n ExternalOrbitalLoader,\n ImportChain,\n type LoaderOptions,\n} from \"../loader/external-loader.js\";\nimport type {\n SchemaLoader,\n ImportChainLike,\n} from \"../loader/schema-loader.js\";\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?: Record<string, unknown>;\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// 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 constructor(options: ResolveOptions) {\n this.options = options;\n // Use provided loader or create default ExternalOrbitalLoader\n this.loader = options.loader ?? new ExternalOrbitalLoader(options);\n this.localTraits = options.localTraits ?? new Map();\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 ?? new ImportChain();\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 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 // 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 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: \"...\", config: {...} }\n if (typeof traitRef !== \"string\" && \"ref\" in traitRef) {\n const refObj = traitRef as { ref: string; config?: Record<string, unknown>; linkedEntity?: string };\n return this.resolveTraitRefString(refObj.ref, imports, refObj.config, refObj.linkedEntity);\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?: Record<string, unknown>,\n linkedEntity?: string\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 return {\n success: true,\n data: {\n trait,\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 return {\n success: true,\n data: {\n trait: localTrait,\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 * Orbital Loader Module\n *\n * Provides functionality for loading external .orb files from various sources:\n * - FileSystemLoader (Node.js) - ExternalOrbitalLoader\n * - HttpLoader (Browser) - Uses fetch API\n * - UnifiedLoader (Auto-detect) - Routes to appropriate loader\n *\n * @packageDocumentation\n */\n\n// Schema Loader Interface\nexport {\n type SchemaLoader,\n type LoadedSchema,\n type LoadedOrbital,\n type LoadResult,\n type BaseLoaderOptions,\n type FileSystemLoaderOptions,\n type HttpLoaderOptions,\n type UnifiedLoaderOptions,\n type LoaderStrategy,\n type ImportChainLike,\n type SchemaLoaderFactory,\n isElectron,\n isBrowser,\n isNode,\n getDefaultLoaderStrategy,\n} from \"./schema-loader.js\";\n\n// FileSystem Loader (Node.js)\nexport {\n ExternalOrbitalLoader,\n ImportChain,\n LoaderCache,\n createLoader,\n parseImportPath,\n type LoaderOptions,\n // Re-export for backwards compatibility\n type LoadedOrbital as FSLoadedOrbital,\n type LoadedSchema as FSLoadedSchema,\n} from \"./external-loader.js\";\n\n// HTTP Loader (Browser)\nexport {\n HttpLoader,\n HttpImportChain,\n createHttpLoader,\n} from \"./http-loader.js\";\n\n// Unified Loader (Auto-detect)\nexport {\n UnifiedLoader,\n UnifiedImportChain,\n createUnifiedLoader,\n createAutoLoader,\n} from \"./unified-loader.js\";\n\n// Almadar Studio Configuration (Electron)\nexport {\n createAlmadarLoaderOptions,\n resolveAlmadarPaths,\n needsStdLibDownload,\n getStdLibDownloadUrl,\n getStdLibDownloadTarget,\n detectWorkspace,\n ALMADAR_DEFAULTS,\n type AlmadarStudioConfig,\n type ResolvedAlmadarPaths,\n} from \"./almadar-studio-config.js\";\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 unknown 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 * 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 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 };\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 * 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\nimport {\n Router,\n type Request,\n type Response,\n type 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 {\n interpolateProps,\n createContextFromBindings,\n} from \"./BindingResolver.js\";\nimport { evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n} from \"./types.js\";\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\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Simplified OrbitalSchema for runtime registration\n * (Subset of full OrbitalSchema - just what's needed for execution)\n */\nexport interface RuntimeOrbitalSchema {\n name: string;\n version?: string;\n orbitals: RuntimeOrbital[];\n}\n\nexport interface RuntimeOrbital {\n name: string;\n entity: {\n name: string;\n fields?: Array<{ name: string; type: string }>;\n };\n traits: RuntimeTrait[];\n}\n\n/**\n * Tick definition for scheduled effects\n */\nexport interface RuntimeTraitTick {\n /** Unique name for this tick */\n name: string;\n /** Interval in milliseconds, or cron expression string */\n interval: number | string;\n /** Guard condition (S-expression) - tick only executes if guard passes */\n guard?: unknown;\n /** Effects to execute when tick fires */\n effects: Effect[];\n /** Filter to specific entity IDs (optional) */\n appliesTo?: string[];\n}\n\nexport interface RuntimeTrait {\n name: string;\n states: Array<{ name: string; isInitial?: boolean }>;\n transitions: Array<{\n from: string;\n to: string;\n event: string;\n guard?: unknown;\n effects?: Effect[];\n }>;\n listens?: Array<{\n event: string;\n triggers: string;\n payloadMapping?: Record<string, unknown>;\n }>;\n emits?: string[];\n /** Scheduled ticks for this trait */\n ticks?: RuntimeTraitTick[];\n}\n\n/**\n * Registered orbital with runtime state\n */\ninterface RegisteredOrbital {\n schema: RuntimeOrbital;\n manager: StateMachineManager;\n entityData: Map<string, Record<string, unknown>>; // entityId -> data\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: Record<string, unknown>;\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 emittedEvents: Array<{ event: string; payload?: unknown }>;\n /** Entity data fetched by `fetch` effects - keyed by entity type */\n data?: Record<string, Record<string, unknown> | Record<string, unknown>[]>;\n /** Client-side effects to execute (render-ui, navigate, notify) */\n clientEffects?: Array<unknown>;\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';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set) */\n entityType?: string;\n /** Result data from the effect */\n data?: Record<string, unknown>;\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\n/**\n * Adapter for persisting entity data\n */\nexport interface PersistenceAdapter {\n create(\n entityType: string,\n data: Record<string, unknown>,\n ): Promise<{ id: string }>;\n update(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n ): Promise<void>;\n delete(entityType: string, id: string): Promise<void>;\n getById(\n entityType: string,\n id: string,\n ): Promise<Record<string, unknown> | null>;\n list(entityType: string): Promise<Array<Record<string, unknown>>>;\n}\n\n// ============================================================================\n// In-Memory Persistence (Default)\n// ============================================================================\n\n/**\n * Simple in-memory persistence for development/testing\n */\nclass InMemoryPersistence implements PersistenceAdapter {\n private data = new Map<string, Map<string, Record<string, unknown>>>();\n private idCounter = 0;\n\n async create(\n entityType: string,\n data: Record<string, unknown>,\n ): Promise<{ id: string }> {\n const id = `${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: Record<string, unknown>,\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<Record<string, unknown> | null> {\n return this.data.get(entityType)?.get(id) || null;\n }\n\n async list(entityType: string): Promise<Array<Record<string, unknown>>> {\n const collection = this.data.get(entityType);\n return collection ? Array.from(collection.values()) : [];\n }\n}\n\n// ============================================================================\n// OrbitalServerRuntime\n// ============================================================================\n\n/**\n * Dynamic server-side orbital execution runtime\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 private 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\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 if config provided\n if (config.loaderConfig) {\n this.loader = config.loaderConfig.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 console.log('[OrbitalRuntime] Using mock persistence with faker data');\n }\n } else {\n this.persistence = config.persistence || new InMemoryPersistence();\n }\n }\n\n // ==========================================================================\n // Schema Registration\n // ==========================================================================\n\n /**\n * Register an OrbitalSchema for execution.\n *\n * If `autoPreprocess` is enabled in config and schema has `uses` declarations,\n * it will be preprocessed first to resolve imports.\n *\n * For explicit preprocessing control, use `registerWithPreprocess()`.\n */\n register(schema: RuntimeOrbitalSchema): void {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema: ${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\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: RuntimeOrbitalSchema,\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 console.log(`[OrbitalRuntime] Using cached preprocessed schema: ${schema.name}`);\n }\n this.register(cached.schema as unknown as RuntimeOrbitalSchema);\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 console.log(`[OrbitalRuntime] Preprocessing schema: ${schema.name}`);\n }\n\n // Preprocess schema\n const result = await preprocessSchema(schema as unknown as import(\"@almadar/core\").OrbitalSchema, {\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 as unknown as RuntimeOrbitalSchema);\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 registerOrbital(orbital: RuntimeOrbital): void {\n // Convert traits to TraitDefinition - handle both flat and stateMachine structures\n const traitDefs: TraitDefinition[] = orbital.traits.map((t) => {\n // Support both: t.states (flat) and t.stateMachine.states (OrbitalSchema structure)\n const stateMachine = (t as { stateMachine?: { states?: unknown[]; transitions?: unknown[] } }).stateMachine;\n const states = t.states || stateMachine?.states || [];\n const transitions = t.transitions || stateMachine?.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\n this.orbitals.set(orbital.name, {\n schema: orbital,\n manager,\n entityData: new Map(),\n });\n\n // Auto-seed mock data for the entity in mock mode\n console.log(`[OrbitalRuntime] Checking mock seed: mode=${this.config.mode}, isMockAdapter=${this.persistence instanceof MockPersistenceAdapter}`);\n if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n const entity = orbital.entity;\n console.log(`[OrbitalRuntime] Entity:`, entity?.name, 'fields:', entity?.fields?.length);\n if (entity?.name && entity.fields) {\n const fields = entity.fields.map((f: { name: string; type: string; required?: boolean; values?: string[]; default?: unknown }) => ({\n name: f.name,\n type: f.type,\n required: f.required,\n values: f.values,\n default: f.default,\n }));\n this.persistence.registerEntity({ name: entity.name, fields });\n console.log(`[OrbitalRuntime] Seeded mock data for entity: ${entity.name}, count: ${this.persistence.count(entity.name)}`);\n }\n } else {\n console.log(`[OrbitalRuntime] Mock seeding SKIPPED`);\n }\n\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] Registered orbital: ${orbital.name} with ${orbital.traits.length} trait(s)`,\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.schema.traits) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n const cleanup = this.eventBus.on(listener.event, async (event) => {\n if (this.config.debug) {\n console.log(\n `[OrbitalRuntime] ${orbitalName}.${trait.name} received: ${listener.event}`,\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 Record<string, unknown>)[key] = (\n event.payload as Record<string, unknown>\n )[field];\n } else {\n (mappedPayload as Record<string, unknown>)[key] = expr;\n }\n }\n }\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as Record<string, unknown>,\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.schema.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 console.log(\n `[OrbitalRuntime] Registered ${this.tickBindings.length} tick(s)`,\n );\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 console.log(\n `[OrbitalRuntime] Registering tick: ${orbitalName}.${traitName}.${tick.name} (${intervalMs}ms)`,\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 console.warn(\n `[OrbitalRuntime] Invalid interval format: ${interval}, defaulting to 1000ms`,\n );\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.schema.entity.name;\n const emittedEvents: Array<{ event: string; payload?: unknown }> = [];\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 console.log(\n `[OrbitalRuntime] Tick ${orbitalName}.${traitName}.${tick.name}: processing ${entities.length} entities`,\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 });\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 console.log(\n `[OrbitalRuntime] Tick ${tick.name}: guard failed for entity ${entity.id}`,\n );\n }\n continue;\n }\n } catch (error) {\n console.error(\n `[OrbitalRuntime] Tick ${tick.name}: guard evaluation error for entity ${entity.id}:`,\n error,\n );\n continue;\n }\n }\n\n // Execute effects for this entity\n if (tick.effects && tick.effects.length > 0) {\n const fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]> = {};\n const clientEffects: Array<unknown> = [];\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 console.log(\n `[OrbitalRuntime] Tick ${tick.name}: executed effects for entity ${entity.id}`,\n );\n }\n }\n }\n } catch (error) {\n console.error(\n `[OrbitalRuntime] Tick ${tick.name} execution error:`,\n 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\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 const { event, payload, entityId, user } = request;\n const emittedEvents: Array<{ event: string; payload?: unknown }> = [];\n // Collect data fetched by `fetch` effects\n const fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]> = {};\n // Collect client-side effects (render-ui, navigate, notify)\n const clientEffects: Array<unknown> = [];\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 Record<string, unknown> | 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 Record<string, unknown>)._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: Record<string, unknown> = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.schema.entity.name,\n entityId,\n );\n if (stored) {\n entityData = stored;\n }\n }\n\n // Process event through state machine\n const results = registered.manager.sendEvent(event, cleanPayload, entityData);\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 console.log(`[OrbitalRuntime] Filtering traits: ${results.length} total, ${filteredResults.length} active (${activeTraits.join(', ')})`);\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 );\n }\n }\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 // Include fetched data if any\n if (Object.keys(fetchedData).length > 0) {\n response.data = fetchedData;\n }\n\n // Include client effects if any\n if (clientEffects.length > 0) {\n response.clientEffects = clientEffects;\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: Record<string, unknown> | undefined,\n entityData: Record<string, unknown>,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: unknown }>,\n fetchedData: Record<string, Record<string, unknown> | Record<string, unknown>[]>,\n clientEffects: Array<unknown>,\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n ): Promise<void> {\n const entityType = registered.schema.entity.name;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload) => {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Emitting: ${event}`, eventPayload);\n }\n this.eventBus.emit(event, eventPayload);\n emittedEvents.push({ event, payload: eventPayload });\n },\n\n set: async (targetId, field, value) => {\n const id = targetId || entityId;\n if (id) {\n try {\n await this.persistence.update(entityType, id, { [field]: value });\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value },\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n const type = targetEntityType || entityType;\n let resultData: Record<string, unknown> | undefined;\n\n try {\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 if (data?.id || entityId) {\n const deleteId = (data?.id as string) || entityId!;\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n\n effectResults.push({\n effect: 'persist',\n action,\n entityType: type,\n data: resultData,\n success: true,\n });\n } catch (err) {\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 {\n console.warn(\n `[OrbitalRuntime] call-service not configured: ${service}.${action}`,\n );\n }\n\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n data: result as Record<string, unknown> | 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 if (options?.id) {\n // Single entity fetch - wrap in array for consistent data structure\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n }\n return entity;\n } else {\n // Collection fetch\n let entities = await this.persistence.list(fetchEntityType);\n\n // Apply filter if provided (basic implementation - can be extended)\n // TODO: Implement proper filter evaluation using evaluateGuard\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 fetchedData[fetchEntityType] = entities;\n return entities;\n }\n } catch (error) {\n console.error(`[OrbitalRuntime] Fetch error for ${fetchEntityType}:`, error);\n return null;\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n clientEffects.push(['render-ui', slot, pattern, props, priority]);\n },\n navigate: (path, params) => {\n clientEffects.push(['navigate', path, params]);\n },\n\n notify: (message, type) => {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Notification (${type}): ${message}`);\n }\n // Forward notify to client as a client effect\n clientEffects.push(['notify', message, { type }]);\n },\n\n log: (message, level) => {\n const logFn =\n level === \"error\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : console.log;\n logFn(`[OrbitalRuntime] ${message}`);\n },\n\n // Allow custom handlers to override\n ...this.config.effectHandlers,\n };\n\n const state = registered.manager.getState(traitName);\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n const context: EffectContext = {\n traitName,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n });\n\n await executor.executeAll(effects);\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(): Router {\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.schema.entity.name,\n traits: reg.schema.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.schema.entity,\n traits: registered.schema.traits.map((t) => ({\n name: t.name,\n currentState: states[t.name],\n states: t.states.map((s) => s.name),\n events: [...new Set(t.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?: Record<string, unknown> }).firebaseUser;\n const user = firebaseUser ? {\n uid: firebaseUser.uid as string,\n email: firebaseUser.email as string | undefined,\n displayName: firebaseUser.name as string | undefined,\n ...firebaseUser,\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"]}