@almadar/runtime 2.6.0 → 2.6.2

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.
@@ -1,6 +1,6 @@
1
1
  import { Router } from 'express';
2
- import { I as IEventBus, f as RuntimeEvent, e as EventListener, U as Unsubscribe, T as TraitDefinition, R as RuntimeConfig, h as TransitionObserver, g as TraitState, i as TransitionResult, d as Effect, E as EffectHandlers } from './types-DYcUvi4H.js';
3
- import { EventPayload, EntityRow, OrbitalSchema, Orbital, Trait } from '@almadar/core';
2
+ import { I as IEventBus, f as RuntimeEvent, e as EventListener, U as Unsubscribe, T as TraitDefinition, R as RuntimeConfig, h as TransitionObserver, g as TraitState, i as TransitionResult, E as EffectHandlers } from './types-DYcUvi4H.js';
3
+ import { EventPayload, EntityRow, OrbitalSchema, Orbital, Trait, OrbitalDefinition, Entity, TraitTick } from '@almadar/core';
4
4
 
5
5
  /**
6
6
  * EventBus - Platform-Agnostic Pub/Sub Implementation
@@ -575,75 +575,23 @@ declare function parseNamespacedEvent(eventName: string): {
575
575
  * @packageDocumentation
576
576
  */
577
577
 
578
- /**
579
- * Simplified OrbitalSchema for runtime registration
580
- * (Subset of full OrbitalSchema - just what's needed for execution)
581
- */
582
- interface RuntimeOrbitalSchema {
583
- name: string;
584
- version?: string;
585
- orbitals: RuntimeOrbital[];
586
- }
587
- interface RuntimeOrbital {
588
- name: string;
589
- entity: {
590
- name: string;
591
- fields?: Array<{
592
- name: string;
593
- type: string;
594
- relation?: {
595
- entity?: string;
596
- cardinality?: string;
597
- onDelete?: string;
598
- };
599
- }>;
600
- /** Pre-defined entity instances to seed on registration */
601
- instances?: Array<EntityRow>;
602
- };
603
- traits: RuntimeTrait[];
604
- }
605
- /**
606
- * Tick definition for scheduled effects
607
- */
608
- interface RuntimeTraitTick {
609
- /** Unique name for this tick */
610
- name: string;
611
- /** Interval in milliseconds, or cron expression string */
612
- interval: number | string;
613
- /** Guard condition (S-expression) - tick only executes if guard passes */
614
- guard?: unknown;
615
- /** Effects to execute when tick fires */
616
- effects: Effect[];
617
- /** Filter to specific entity IDs (optional) */
618
- appliesTo?: string[];
619
- }
620
- interface RuntimeTrait {
621
- name: string;
622
- states: Array<{
623
- name: string;
624
- isInitial?: boolean;
625
- }>;
626
- transitions: Array<{
627
- from: string;
628
- to: string;
629
- event: string;
630
- guard?: unknown;
631
- effects?: Effect[];
632
- }>;
633
- listens?: Array<{
634
- event: string;
635
- triggers: string;
636
- payloadMapping?: EventPayload;
637
- }>;
638
- emits?: string[];
639
- /** Scheduled ticks for this trait */
640
- ticks?: RuntimeTraitTick[];
641
- }
578
+ /** @deprecated Use OrbitalSchema from @almadar/core */
579
+ type RuntimeOrbitalSchema = OrbitalSchema;
580
+ /** @deprecated Use OrbitalDefinition from @almadar/core */
581
+ type RuntimeOrbital = OrbitalDefinition;
582
+ /** @deprecated Use Trait from @almadar/core */
583
+ type RuntimeTrait = Trait;
584
+ /** @deprecated Use TraitTick from @almadar/core */
585
+ type RuntimeTraitTick = TraitTick;
642
586
  /**
643
587
  * Registered orbital with runtime state
644
588
  */
645
589
  interface RegisteredOrbital {
646
- schema: RuntimeOrbital;
590
+ schema: OrbitalDefinition;
591
+ /** Resolved entity (never a string ref at runtime) */
592
+ entity: Entity;
593
+ /** Resolved inline traits (string refs filtered out) */
594
+ traits: Trait[];
647
595
  manager: StateMachineManager;
648
596
  entityData: Map<string, EntityRow>;
649
597
  }
@@ -694,8 +642,12 @@ interface EffectResult {
694
642
  action?: string;
695
643
  /** Entity type affected (for persist/set/ref/deref/swap) */
696
644
  entityType?: string;
697
- /** Result data from the effect */
698
- data?: EntityRow;
645
+ /** Result data from the effect (entity row for CRUD, summary for batch) */
646
+ data?: EntityRow | {
647
+ operations: EntityRow[];
648
+ completedCount: number;
649
+ totalCount: number;
650
+ };
699
651
  /** Whether the effect succeeded */
700
652
  success: boolean;
701
653
  /** Error message if failed */
@@ -784,13 +736,13 @@ declare class OrbitalServerRuntime {
784
736
  *
785
737
  * For explicit preprocessing control, use `registerWithPreprocess()`.
786
738
  */
787
- register(schema: RuntimeOrbitalSchema): Promise<void>;
739
+ register(schema: OrbitalSchema): Promise<void>;
788
740
  /**
789
741
  * Register an OrbitalSchema synchronously (for backward compatibility).
790
742
  * Note: This version doesn't wait for instance seeding to complete.
791
743
  * Use async register() for guaranteed instance seeding.
792
744
  */
793
- registerSync(schema: RuntimeOrbitalSchema): void;
745
+ registerSync(schema: OrbitalSchema): void;
794
746
  /**
795
747
  * Register an OrbitalSchema with preprocessing to resolve `uses` imports.
796
748
  *
@@ -820,7 +772,7 @@ declare class OrbitalServerRuntime {
820
772
  * }
821
773
  * ```
822
774
  */
823
- registerWithPreprocess(schema: RuntimeOrbitalSchema, options?: {
775
+ registerWithPreprocess(schema: OrbitalSchema, options?: {
824
776
  sourcePath?: string;
825
777
  }): Promise<{
826
778
  success: boolean;
@@ -1,4 +1,4 @@
1
1
  import 'express';
2
- export { v as EffectResult, L as LoaderConfig, O as OrbitalEventRequest, c as OrbitalEventResponse, w as OrbitalServerRuntime, d as OrbitalServerRuntimeConfig, P as PersistenceAdapter, R as RegisteredOrbital, i as RuntimeOrbital, j as RuntimeOrbitalSchema, k as RuntimeTrait, x as RuntimeTraitTick, y as createOrbitalServerRuntime } from './OrbitalServerRuntime-B-QeKtKd.js';
2
+ export { v as EffectResult, L as LoaderConfig, O as OrbitalEventRequest, c as OrbitalEventResponse, w as OrbitalServerRuntime, d as OrbitalServerRuntimeConfig, P as PersistenceAdapter, R as RegisteredOrbital, i as RuntimeOrbital, j as RuntimeOrbitalSchema, k as RuntimeTrait, x as RuntimeTraitTick, y as createOrbitalServerRuntime } from './OrbitalServerRuntime-BlR7TM23.js';
3
3
  import './types-DYcUvi4H.js';
4
4
  import '@almadar/core';
@@ -1,6 +1,7 @@
1
1
  import { EventBus, createUnifiedLoader, preprocessSchema, StateMachineManager, createContextFromBindings, EffectExecutor } from './chunk-ESNML4B4.js';
2
2
  import { Router } from 'express';
3
3
  import { evaluateGuard, evaluate } from '@almadar/evaluator';
4
+ import { isInlineTrait } from '@almadar/core';
4
5
  import { faker } from '@faker-js/faker';
5
6
  import * as fs from 'fs';
6
7
  import * as net from 'net';
@@ -744,10 +745,11 @@ var OrbitalServerRuntime = class {
744
745
  * Register a single orbital
745
746
  */
746
747
  async registerOrbitalAsync(orbital) {
747
- const traitDefs = (orbital.traits || []).map((t) => {
748
- const stateMachine = t.stateMachine;
749
- const states = t.states || stateMachine?.states || [];
750
- const transitions = t.transitions || stateMachine?.transitions || [];
748
+ const inlineTraits = (orbital.traits || []).filter(isInlineTrait);
749
+ const traitDefs = inlineTraits.map((t) => {
750
+ const sm = t.stateMachine;
751
+ const states = sm?.states || [];
752
+ const transitions = sm?.transitions || [];
751
753
  return {
752
754
  name: t.name,
753
755
  states,
@@ -756,12 +758,15 @@ var OrbitalServerRuntime = class {
756
758
  };
757
759
  });
758
760
  const manager = new StateMachineManager(traitDefs);
761
+ const entityRef = orbital.entity;
762
+ const entity = typeof entityRef === "string" ? { name: entityRef, fields: [] } : entityRef;
759
763
  this.orbitals.set(orbital.name, {
760
764
  schema: orbital,
765
+ entity,
766
+ traits: inlineTraits,
761
767
  manager,
762
768
  entityData: /* @__PURE__ */ new Map()
763
769
  });
764
- const entity = orbital.entity;
765
770
  if (entity?.name && entity.instances && Array.isArray(entity.instances)) {
766
771
  const instances = entity.instances;
767
772
  if (instances.length > 0) {
@@ -822,7 +827,7 @@ var OrbitalServerRuntime = class {
822
827
  }
823
828
  this.listenerCleanups = [];
824
829
  for (const [orbitalName, registered] of this.orbitals) {
825
- for (const trait of registered.schema.traits || []) {
830
+ for (const trait of registered.traits) {
826
831
  if (!trait.listens) continue;
827
832
  for (const listener of trait.listens) {
828
833
  const cleanup = this.eventBus.on(listener.event, async (event) => {
@@ -861,7 +866,7 @@ var OrbitalServerRuntime = class {
861
866
  setupTicks() {
862
867
  this.cleanupTicks();
863
868
  for (const [orbitalName, registered] of this.orbitals) {
864
- for (const trait of registered.schema.traits || []) {
869
+ for (const trait of registered.traits || []) {
865
870
  if (!trait.ticks || trait.ticks.length === 0) continue;
866
871
  for (const tick of trait.ticks) {
867
872
  this.registerTick(orbitalName, trait.name, tick, registered);
@@ -932,7 +937,7 @@ var OrbitalServerRuntime = class {
932
937
  * Execute a tick for all applicable entities
933
938
  */
934
939
  async executeTick(orbitalName, traitName, tick, registered) {
935
- const entityType = registered.schema.entity.name;
940
+ const entityType = registered.entity.name;
936
941
  const emittedEvents = [];
937
942
  try {
938
943
  let entities = await this.persistence.list(entityType);
@@ -1059,7 +1064,7 @@ var OrbitalServerRuntime = class {
1059
1064
  let entityData = {};
1060
1065
  if (entityId) {
1061
1066
  const stored = await this.persistence.getById(
1062
- registered.schema.entity.name,
1067
+ registered.entity.name,
1063
1068
  entityId
1064
1069
  );
1065
1070
  if (stored) {
@@ -1095,9 +1100,8 @@ var OrbitalServerRuntime = class {
1095
1100
  }
1096
1101
  }
1097
1102
  const refTypes = /* @__PURE__ */ new Set();
1098
- for (const trait of registered.schema.traits || []) {
1099
- const sm = trait.stateMachine;
1100
- const transitions = sm?.transitions ?? trait.transitions ?? [];
1103
+ for (const trait of registered.traits) {
1104
+ const transitions = trait.stateMachine?.transitions ?? [];
1101
1105
  for (const trans of transitions) {
1102
1106
  for (const eff of trans.effects ?? []) {
1103
1107
  if (Array.isArray(eff) && eff[0] === "ref" && typeof eff[1] === "string") {
@@ -1140,7 +1144,7 @@ var OrbitalServerRuntime = class {
1140
1144
  * Execute effects from a transition
1141
1145
  */
1142
1146
  async executeEffects(registered, traitName, effects, payload, entityData, entityId, emittedEvents, fetchedData, clientEffects, effectResults, user) {
1143
- const entityType = registered.schema.entity.name;
1147
+ const entityType = registered.entity.name;
1144
1148
  let bindingsRef = null;
1145
1149
  let contextRef = null;
1146
1150
  const handlers = {
@@ -1574,8 +1578,8 @@ var OrbitalServerRuntime = class {
1574
1578
  */
1575
1579
  validateRelationCardinality(entityType, data) {
1576
1580
  for (const [, registered] of this.orbitals) {
1577
- if (registered.schema.entity.name !== entityType) continue;
1578
- for (const field of registered.schema.entity.fields ?? []) {
1581
+ if (registered.entity.name !== entityType) continue;
1582
+ for (const field of registered.entity.fields ?? []) {
1579
1583
  if (field.type !== "relation") continue;
1580
1584
  const value = data[field.name];
1581
1585
  if (value === void 0 || value === null) continue;
@@ -1609,13 +1613,13 @@ var OrbitalServerRuntime = class {
1609
1613
  */
1610
1614
  async enforceOnDeleteRules(entityType, deletedId) {
1611
1615
  for (const [, registered] of this.orbitals) {
1612
- const schema = registered.schema;
1613
- const fields = schema.entity.fields ?? [];
1616
+ const entity = registered.entity;
1617
+ const fields = entity.fields ?? [];
1614
1618
  for (const field of fields) {
1615
1619
  if (field.type !== "relation") continue;
1616
1620
  if (field.relation?.entity !== entityType) continue;
1617
1621
  const onDelete = field.relation.onDelete || "restrict";
1618
- const referringEntityType = schema.entity.name;
1622
+ const referringEntityType = entity.name;
1619
1623
  const allRecords = await this.persistence.list(referringEntityType);
1620
1624
  const affectedRecords = allRecords.filter((record) => {
1621
1625
  const fkValue = record[field.name];
@@ -1673,8 +1677,8 @@ var OrbitalServerRuntime = class {
1673
1677
  visited.add(entityType);
1674
1678
  let entityFields;
1675
1679
  for (const [, registered] of this.orbitals) {
1676
- if (registered.schema.entity.name === entityType) {
1677
- entityFields = registered.schema.entity.fields;
1680
+ if (registered.entity.name === entityType) {
1681
+ entityFields = registered.entity.fields;
1678
1682
  break;
1679
1683
  }
1680
1684
  }
@@ -1728,17 +1732,31 @@ var OrbitalServerRuntime = class {
1728
1732
  const populatedFieldName = includeField.endsWith("Id") ? includeField.slice(0, -2) : includeField;
1729
1733
  for (const entity of entities) {
1730
1734
  const fkValue = entity[foreignKeyField];
1731
- const entityRecord = entity;
1732
1735
  if (cardinality === "one" || cardinality === "many-to-one") {
1733
1736
  if (typeof fkValue === "string" && relatedEntities.has(fkValue)) {
1734
- entityRecord[populatedFieldName] = relatedEntities.get(fkValue);
1737
+ Object.defineProperty(entity, populatedFieldName, {
1738
+ value: relatedEntities.get(fkValue),
1739
+ writable: true,
1740
+ enumerable: true,
1741
+ configurable: true
1742
+ });
1735
1743
  }
1736
1744
  } else {
1737
1745
  if (Array.isArray(fkValue)) {
1738
1746
  const fkIds = fkValue.filter((id) => typeof id === "string");
1739
- entityRecord[populatedFieldName] = fkIds.map((id) => relatedEntities.get(id)).filter(Boolean);
1747
+ Object.defineProperty(entity, populatedFieldName, {
1748
+ value: fkIds.map((id) => relatedEntities.get(id)).filter(Boolean),
1749
+ writable: true,
1750
+ enumerable: true,
1751
+ configurable: true
1752
+ });
1740
1753
  } else if (typeof fkValue === "string" && relatedEntities.has(fkValue)) {
1741
- entityRecord[populatedFieldName] = [relatedEntities.get(fkValue)];
1754
+ Object.defineProperty(entity, populatedFieldName, {
1755
+ value: [relatedEntities.get(fkValue)],
1756
+ writable: true,
1757
+ enumerable: true,
1758
+ configurable: true
1759
+ });
1742
1760
  }
1743
1761
  }
1744
1762
  }
@@ -1767,8 +1785,8 @@ var OrbitalServerRuntime = class {
1767
1785
  const orbitals = Array.from(this.orbitals.entries()).map(
1768
1786
  ([name, reg]) => ({
1769
1787
  name,
1770
- entity: reg.schema.entity?.name,
1771
- traits: (reg.schema.traits || []).map((t) => t.name)
1788
+ entity: reg.entity?.name,
1789
+ traits: (reg.traits || []).map((t) => t.name)
1772
1790
  })
1773
1791
  );
1774
1792
  res.json({ success: true, orbitals });
@@ -1788,12 +1806,12 @@ var OrbitalServerRuntime = class {
1788
1806
  success: true,
1789
1807
  orbital: {
1790
1808
  name: orbitalName,
1791
- entity: registered.schema.entity,
1792
- traits: (registered.schema.traits || []).map((t) => ({
1809
+ entity: registered.entity,
1810
+ traits: registered.traits.map((t) => ({
1793
1811
  name: t.name,
1794
1812
  currentState: states[t.name],
1795
- states: (t.states || []).map((s) => s.name),
1796
- events: [...new Set((t.transitions || []).map((tr) => tr.event))]
1813
+ states: (t.stateMachine?.states || []).map((s) => s.name),
1814
+ events: [...new Set((t.stateMachine?.transitions || []).map((tr) => tr.event))]
1797
1815
  }))
1798
1816
  }
1799
1817
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MockPersistenceAdapter.ts","../src/createOsHandlers.ts","../src/OrbitalServerRuntime.ts"],"names":[],"mappings":"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","file":"OrbitalServerRuntime.js","sourcesContent":["/**\n * MockPersistenceAdapter - In-memory data store with faker-based mock generation\n *\n * Provides a stateful mock data layer that implements PersistenceAdapter.\n * Uses @faker-js/faker for realistic data generation based on field types.\n *\n * @packageDocumentation\n */\n\nimport { faker } from '@faker-js/faker';\nimport type { PersistenceAdapter } from './OrbitalServerRuntime.js';\nimport type { EntityRow } from './types.js';\nimport type { FieldValue } from '@almadar/core';\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 /** Pre-authored instance data from the schema (used instead of faker generation) */\n seedData?: EntityRow[];\n}\n\nexport interface MockPersistenceConfig {\n /** Seed for deterministic generation */\n seed?: number;\n /** Default number of records to generate per entity */\n defaultSeedCount?: number;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n// ============================================================================\n// MockPersistenceAdapter\n// ============================================================================\n\n/**\n * In-memory mock data store with CRUD operations and faker-based seeding.\n */\nexport class MockPersistenceAdapter implements PersistenceAdapter {\n private stores: Map<string, Map<string, EntityRow>> = new Map();\n private schemas: Map<string, EntitySchema> = new Map();\n private idCounters: Map<string, number> = new Map();\n private config: MockPersistenceConfig;\n\n constructor(config: MockPersistenceConfig = {}) {\n this.config = {\n defaultSeedCount: 6,\n debug: false,\n ...config,\n };\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, EntityRow> {\n const normalized = entityName.toLowerCase();\n if (!this.stores.has(normalized)) {\n this.stores.set(normalized, new Map());\n this.idCounters.set(normalized, 0);\n }\n return this.stores.get(normalized)!;\n }\n\n private nextId(entityName: string): string {\n const normalized = entityName.toLowerCase();\n const counter = (this.idCounters.get(normalized) ?? 0) + 1;\n this.idCounters.set(normalized, counter);\n return `${this.capitalizeFirst(entityName)} Id ${counter}`;\n }\n\n // ============================================================================\n // Schema & Seeding\n // ============================================================================\n\n /**\n * Register an entity schema and seed mock data.\n * If the schema has seedData, those instances are used directly.\n * Otherwise, random mock data is generated with faker.\n */\n registerEntity(schema: EntitySchema, seedCount?: number): void {\n const normalized = schema.name.toLowerCase();\n this.schemas.set(normalized, schema);\n\n if (schema.seedData && schema.seedData.length > 0) {\n // Seed with actual pre-authored instances\n this.seedFromInstances(schema.name, schema.seedData);\n } else {\n const count = seedCount ?? this.config.defaultSeedCount ?? 6;\n this.seed(schema.name, schema.fields, count);\n }\n }\n\n /**\n * Seed an entity with pre-authored instance data.\n */\n seedFromInstances(entityName: string, instances: EntityRow[]): void {\n const store = this.getStore(entityName);\n\n if (this.config.debug) {\n console.log(`[MockPersistence] Seeding ${instances.length} ${entityName} from schema instances...`);\n }\n\n for (const instance of instances) {\n const id = (instance.id as string) || this.nextId(entityName);\n const now = new Date().toISOString();\n const item: EntityRow = {\n ...instance,\n id,\n createdAt: instance.createdAt as string || now,\n updatedAt: now,\n };\n store.set(id, item);\n }\n }\n\n /**\n * Seed an entity with mock data.\n */\n seed(entityName: string, fields: EntityField[], count: number): void {\n const store = this.getStore(entityName);\n const normalized = entityName.toLowerCase();\n\n if (this.config.debug) {\n 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 ): EntityRow {\n const id = this.nextId(entityName);\n const now = new Date().toISOString();\n const item: EntityRow = {\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): FieldValue {\n // Handle default values\n if (field.default !== undefined) {\n if (field.default === '@now') {\n return new Date().toISOString();\n }\n return field.default as FieldValue;\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 return [];\n case 'object':\n return null;\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: EntityRow\n ): Promise<{ id: string }> {\n const store = this.getStore(entityType);\n const id = this.nextId(entityType);\n const now = new Date().toISOString();\n\n const 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: EntityRow\n ): Promise<void> {\n const store = this.getStore(entityType);\n const existing = store.get(id);\n\n if (!existing) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n\n const updated = {\n ...existing,\n ...data,\n id, // Preserve original ID\n updatedAt: new Date().toISOString(),\n };\n\n store.set(id, updated);\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n const store = this.getStore(entityType);\n if (!store.has(id)) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n store.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string\n ): Promise<EntityRow | null> {\n const store = this.getStore(entityType);\n return store.get(id) ?? null;\n }\n\n async list(entityType: string): Promise<Array<EntityRow>> {\n const store = this.getStore(entityType);\n return Array.from(store.values());\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n /**\n * Clear all data for an entity.\n */\n clear(entityName: string): void {\n const normalized = entityName.toLowerCase();\n this.stores.delete(normalized);\n this.idCounters.delete(normalized);\n }\n\n /**\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 * OS Trigger Handlers — Server-Side Only\n *\n * Provides Node.js implementations for all 8 os/* operators.\n * Used by OrbitalServerRuntime (interpreted path).\n *\n * NOT exported from the main index.ts because it imports Node.js-only modules.\n * Import directly: import { createOsHandlers } from '@almadar/runtime/createOsHandlers';\n *\n * @packageDocumentation\n */\n\nimport * as fs from \"fs\";\nimport * as net from \"net\";\nimport { execSync } from \"child_process\";\nimport type { EventPayload } from './types.js';\nimport type { EffectHandlers } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface OsHandlerContext {\n /** Emit an event on the EventBus */\n emitEvent: (type: string, payload: EventPayload) => void;\n /** Working directory for file watching (defaults to process.cwd()) */\n cwd?: string;\n}\n\nexport interface OsHandlerResult {\n handlers: Partial<EffectHandlers>;\n cleanup: () => void;\n}\n\n// ============================================================================\n// Glob Matching (minimal, no external dependency)\n// ============================================================================\n\nfunction globToRegex(glob: string): RegExp {\n let regex = \"\";\n let i = 0;\n while (i < glob.length) {\n const c = glob[i];\n if (c === \"*\") {\n if (glob[i + 1] === \"*\") {\n // ** matches any path segment\n regex += \".*\";\n i += 2;\n if (glob[i] === \"/\") i++; // skip trailing slash\n continue;\n }\n // * matches anything except /\n regex += \"[^/]*\";\n } else if (c === \"?\") {\n regex += \"[^/]\";\n } else if (c === \".\") {\n regex += \"\\\\.\";\n } else if (c === \"/\" || c === \"-\" || c === \"_\") {\n regex += c;\n } else if (/[{}()[\\]^$+|\\\\]/.test(c)) {\n regex += \"\\\\\" + c;\n } else {\n regex += c;\n }\n i++;\n }\n return new RegExp(\"^\" + regex + \"$\");\n}\n\n// ============================================================================\n// Cron Parsing (5-field standard: min hour day month weekday)\n// ============================================================================\n\ninterface CronFields {\n minute: Set<number>;\n hour: Set<number>;\n day: Set<number>;\n month: Set<number>;\n weekday: Set<number>;\n}\n\nfunction parseCronField(field: string, min: number, max: number): Set<number> {\n const values = new Set<number>();\n for (const part of field.split(\",\")) {\n if (part === \"*\") {\n for (let i = min; i <= max; i++) values.add(i);\n } else if (part.includes(\"/\")) {\n const [range, stepStr] = part.split(\"/\");\n const step = parseInt(stepStr, 10);\n const start = range === \"*\" ? min : parseInt(range, 10);\n for (let i = start; i <= max; i += step) values.add(i);\n } else if (part.includes(\"-\")) {\n const [lo, hi] = part.split(\"-\").map(Number);\n for (let i = lo; i <= hi; i++) values.add(i);\n } else {\n values.add(parseInt(part, 10));\n }\n }\n return values;\n}\n\nfunction parseCron(expression: string): CronFields {\n const parts = expression.trim().split(/\\s+/);\n if (parts.length !== 5) {\n throw new Error(`Invalid cron expression (expected 5 fields): ${expression}`);\n }\n return {\n minute: parseCronField(parts[0], 0, 59),\n hour: parseCronField(parts[1], 0, 23),\n day: parseCronField(parts[2], 1, 31),\n month: parseCronField(parts[3], 1, 12),\n weekday: parseCronField(parts[4], 0, 6),\n };\n}\n\nfunction cronMatches(fields: CronFields, date: Date): boolean {\n return (\n fields.minute.has(date.getMinutes()) &&\n fields.hour.has(date.getHours()) &&\n fields.day.has(date.getDate()) &&\n fields.month.has(date.getMonth() + 1) &&\n fields.weekday.has(date.getDay())\n );\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createOsHandlers(ctx: OsHandlerContext): OsHandlerResult {\n const cwd = ctx.cwd ?? process.cwd();\n\n // Resource tracking for cleanup\n const watchers: fs.FSWatcher[] = [];\n const intervals: ReturnType<typeof setInterval>[] = [];\n const signalHandlers: Array<{ signal: NodeJS.Signals; handler: () => void }> = [];\n let httpWatchActive = false;\n\n // Debounce configuration: { eventType: ms }\n const debounceConfig = new Map<string, number>();\n const debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function debouncedEmit(eventType: string, payload: EventPayload): void {\n const ms = debounceConfig.get(eventType);\n if (ms !== undefined && ms > 0) {\n const existing = debounceTimers.get(eventType);\n if (existing) clearTimeout(existing);\n debounceTimers.set(\n eventType,\n setTimeout(() => {\n debounceTimers.delete(eventType);\n ctx.emitEvent(eventType, payload);\n }, ms),\n );\n } else {\n ctx.emitEvent(eventType, payload);\n }\n }\n\n // ============================================================================\n // Handler Implementations\n // ============================================================================\n\n const handlers: Partial<EffectHandlers> = {\n osWatchFiles: (glob: string, options: { recursive?: boolean; debounce?: number }) => {\n const recursive = (options.recursive as boolean) !== false;\n const pattern = globToRegex(glob);\n\n try {\n const watcher = fs.watch(cwd, { recursive }, (_event, filename) => {\n if (filename && pattern.test(filename)) {\n debouncedEmit(\"OS_FILE_MODIFIED\", {\n file: filename,\n glob,\n cwd,\n });\n }\n });\n watchers.push(watcher);\n } catch (err) {\n console.warn(\"[os/watch-files] Failed to start watcher:\", err);\n }\n },\n\n osWatchProcess: (name: string, subcommand?: string) => {\n const searchTerm = subcommand ? `${name} ${subcommand}` : name;\n let wasRunning = false;\n\n const interval = setInterval(() => {\n let isRunning = false;\n try {\n const result = execSync(`pgrep -f \"${searchTerm}\" 2>/dev/null`, {\n encoding: \"utf-8\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n isRunning = result.trim().length > 0;\n } catch {\n isRunning = false;\n }\n\n if (isRunning && !wasRunning) {\n debouncedEmit(\"OS_PROCESS_STARTED\", { process: name, subcommand: subcommand ?? null });\n } else if (!isRunning && wasRunning) {\n debouncedEmit(\"OS_PROCESS_EXITED\", { process: name, subcommand: subcommand ?? null });\n }\n wasRunning = isRunning;\n }, 2000);\n\n intervals.push(interval);\n },\n\n osWatchPort: (port: number, protocol: string) => {\n if (protocol !== \"tcp\") {\n console.warn(`[os/watch-port] Only TCP is supported, got: ${protocol}`);\n return;\n }\n\n let wasOpen = false;\n\n const interval = setInterval(() => {\n const socket = new net.Socket();\n socket.setTimeout(1000);\n\n socket.on(\"connect\", () => {\n socket.destroy();\n if (!wasOpen) {\n wasOpen = true;\n debouncedEmit(\"OS_PORT_OPENED\", { port, protocol });\n }\n });\n\n socket.on(\"error\", () => {\n socket.destroy();\n if (wasOpen) {\n wasOpen = false;\n debouncedEmit(\"OS_PORT_CLOSED\", { port, protocol });\n }\n });\n\n socket.on(\"timeout\", () => {\n socket.destroy();\n if (wasOpen) {\n wasOpen = false;\n debouncedEmit(\"OS_PORT_CLOSED\", { port, protocol });\n }\n });\n\n socket.connect(port, \"127.0.0.1\");\n }, 3000);\n\n intervals.push(interval);\n },\n\n osWatchHttp: (urlPattern: string, method?: string) => {\n // HTTP interception requires monkey-patching Node.js module exports (read-only in TS types).\n // The compiled path (backend.rs) generates untyped inline code that handles this.\n // For the interpreted runtime, log a warning.\n if (!httpWatchActive) {\n httpWatchActive = true;\n console.warn(\n `[os/watch-http] HTTP interception is only supported in compiled mode. ` +\n `Pattern: ${urlPattern}${method ? `, method: ${method}` : \"\"}`,\n );\n }\n },\n\n osWatchCron: (expression: string) => {\n let fields: CronFields;\n try {\n fields = parseCron(expression);\n } catch (err) {\n console.warn(\"[os/watch-cron] Invalid expression:\", err);\n return;\n }\n\n let lastFired = -1;\n\n const interval = setInterval(() => {\n const now = new Date();\n const minuteKey = now.getFullYear() * 1e8 + now.getMonth() * 1e6 +\n now.getDate() * 1e4 + now.getHours() * 100 + now.getMinutes();\n\n if (minuteKey !== lastFired && cronMatches(fields, now)) {\n lastFired = minuteKey;\n debouncedEmit(\"OS_CRON_FIRE\", {\n expression,\n firedAt: now.toISOString(),\n });\n }\n }, 1000);\n\n intervals.push(interval);\n },\n\n osWatchSignal: (signal: string) => {\n const sig = signal.toUpperCase() as NodeJS.Signals;\n const handler = () => {\n debouncedEmit(`OS_SIGNAL_${sig}`, { signal: sig });\n };\n\n try {\n process.on(sig, handler);\n signalHandlers.push({ signal: sig, handler });\n } catch (err) {\n console.warn(`[os/watch-signal] Cannot listen for ${sig}:`, err);\n }\n },\n\n osWatchEnv: (variable: string) => {\n let lastValue = process.env[variable];\n\n const interval = setInterval(() => {\n const current = process.env[variable];\n if (current !== lastValue) {\n const previous = lastValue;\n lastValue = current;\n debouncedEmit(\"OS_ENV_CHANGED\", {\n variable,\n value: current ?? null,\n previous: previous ?? null,\n });\n }\n }, 1000);\n\n intervals.push(interval);\n },\n\n osDebounce: (ms: number, eventType: string) => {\n debounceConfig.set(eventType, ms);\n },\n };\n\n // ============================================================================\n // Cleanup\n // ============================================================================\n\n function cleanup(): void {\n for (const w of watchers) {\n try { w.close(); } catch { /* already closed */ }\n }\n watchers.length = 0;\n\n for (const i of intervals) {\n clearInterval(i);\n }\n intervals.length = 0;\n\n for (const { signal, handler } of signalHandlers) {\n try { process.removeListener(signal, handler); } catch { /* noop */ }\n }\n signalHandlers.length = 0;\n\n httpWatchActive = false;\n\n // Clear pending debounce timers\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n }\n\n return { handlers, cleanup };\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 { evaluate, evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n EntityRow,\n EventPayload,\n} from \"./types.js\";\nimport type { FieldValue } from \"@almadar/core\";\nimport { MockPersistenceAdapter } from \"./MockPersistenceAdapter.js\";\nimport {\n preprocessSchema,\n type PreprocessedSchema,\n type EntitySharingMap,\n type EventNamespaceMap,\n} from \"./UsesIntegration.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n} from \"./loader/index.js\";\nimport { createOsHandlers, type OsHandlerResult } from \"./createOsHandlers.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; relation?: { entity?: string; cardinality?: string; onDelete?: string } }>;\n /** Pre-defined entity instances to seed on registration */\n instances?: Array<EntityRow>;\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?: EventPayload;\n }>;\n emits?: string[];\n /** Scheduled ticks for this trait */\n ticks?: RuntimeTraitTick[];\n}\n\n/**\n * Registered orbital with runtime state\n */\nexport interface RegisteredOrbital {\n schema: RuntimeOrbital;\n manager: StateMachineManager;\n entityData: Map<string, EntityRow>; // entityId -> data\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: EventPayload;\n entityId?: string;\n /** User context for @user bindings (from Firebase auth) */\n user?: {\n uid: string;\n email?: string;\n displayName?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Response from event processing\n */\nexport interface OrbitalEventResponse {\n success: boolean;\n transitioned: boolean;\n states: Record<string, string>;\n emittedEvents: Array<{ event: string; payload?: unknown }>;\n /** Entity data fetched by `fetch` effects - keyed by entity type */\n data?: { [entityType: string]: EntityRow | EntityRow[] };\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' | 'ref' | 'deref' | 'swap' | 'atomic';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set/ref/deref/swap) */\n entityType?: string;\n /** Result data from the effect */\n data?: EntityRow;\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: EntityRow,\n ): Promise<{ id: string }>;\n update(\n entityType: string,\n id: string,\n data: EntityRow,\n ): Promise<void>;\n delete(entityType: string, id: string): Promise<void>;\n getById(\n entityType: string,\n id: string,\n ): Promise<EntityRow | null>;\n list(entityType: string): Promise<Array<EntityRow>>;\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, EntityRow>>();\n private idCounter = 0;\n\n async create(\n entityType: string,\n data: EntityRow,\n ): Promise<{ id: string }> {\n // Use provided ID if it exists, otherwise generate one\n const id = (data.id as string) || `${entityType}-${++this.idCounter}`;\n if (!this.data.has(entityType)) {\n this.data.set(entityType, new Map());\n }\n this.data.get(entityType)!.set(id, { ...data, id });\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: EntityRow,\n ): Promise<void> {\n const collection = this.data.get(entityType);\n if (collection?.has(id)) {\n const existing = collection.get(id)!;\n collection.set(id, { ...existing, ...data });\n }\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n this.data.get(entityType)?.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string,\n ): Promise<EntityRow | null> {\n return this.data.get(entityType)?.get(id) || null;\n }\n\n async list(entityType: string): Promise<Array<EntityRow>> {\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 protected orbitals = new Map<string, RegisteredOrbital>();\n private eventBus: EventBus;\n private config: OrbitalServerRuntimeConfig;\n private persistence: PersistenceAdapter;\n private listenerCleanups: Array<() => void> = [];\n private tickBindings: TickBinding[] = [];\n private loader: SchemaLoader | null = null;\n private preprocessedCache = new Map<string, PreprocessedSchema>();\n private entitySharingMap: EntitySharingMap = {};\n private eventNamespaceMap: EventNamespaceMap = {};\n private osHandlers: OsHandlerResult | null = null;\n\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 // Auto-wire OS handlers (server-side only)\n this.osHandlers = createOsHandlers({\n emitEvent: (type, payload) => this.eventBus.emit(type, payload),\n });\n // Merge OS handlers under user-provided handlers (user can override)\n this.config.effectHandlers = {\n ...this.osHandlers.handlers,\n ...this.config.effectHandlers,\n };\n }\n\n // ==========================================================================\n // 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 async register(schema: RuntimeOrbitalSchema): Promise<void> {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema: ${schema.name}`);\n }\n\n // Register all orbitals (await to ensure instance seeding completes)\n for (const orbital of schema.orbitals) {\n await this.registerOrbitalAsync(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n }\n\n /**\n * Register an OrbitalSchema synchronously (for backward compatibility).\n * Note: This version doesn't wait for instance seeding to complete.\n * Use async register() for guaranteed instance seeding.\n */\n registerSync(schema: RuntimeOrbitalSchema): void {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema (sync): ${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 async registerOrbitalAsync(orbital: RuntimeOrbital): Promise<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 const entity = orbital.entity;\n \n // Seed entity instances from schema if they exist\n if (entity?.name && entity.instances && Array.isArray(entity.instances)) {\n const instances = entity.instances;\n if (instances.length > 0) {\n console.log(`[OrbitalRuntime] Seeding ${instances.length} instances for ${entity.name} from schema`);\n \n // Seed each instance (await to ensure they're created)\n const results = await Promise.all(\n instances.map(async (instance) => {\n try {\n const result = await this.persistence.create(entity.name, instance);\n console.log(`[OrbitalRuntime] Seeded instance: ${instance.id || 'no-id'}`);\n return result;\n } catch (err) {\n console.error(`[OrbitalRuntime] Failed to seed instance ${instance.id}:`, err);\n return null;\n }\n })\n );\n \n const successCount = results.filter(r => r !== null).length;\n console.log(`[OrbitalRuntime] Seeded ${successCount}/${instances.length} ${entity.name} instances from schema`);\n }\n } else if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n // Fall back to mock data generation if no instances defined\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] No instances in schema, generating mock data for ${entity?.name}`);\n }\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 if (this.config.debug) {\n console.log(`[OrbitalRuntime] Seeded mock data for entity: ${entity.name}, count: ${this.persistence.count(entity.name)}`);\n }\n }\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 * Register a single orbital (sync wrapper for backward compatibility)\n */\n private registerOrbital(orbital: RuntimeOrbital): void {\n // Create a synchronous version by using a promise that we don't await\n // For truly async registration, use the async register() method\n this.registerOrbitalAsync(orbital).catch((err) => {\n console.error(`[OrbitalRuntime] Failed to register orbital:`, err);\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 EventPayload)[key] = (\n event.payload as EventPayload\n )[field];\n } else {\n (mappedPayload as EventPayload)[key] = expr as string;\n }\n }\n }\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as EventPayload,\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: { [entityType: string]: EntityRow | EntityRow[] } = {};\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 // Clean up OS handlers (close file watchers, intervals, signal listeners)\n if (this.osHandlers) {\n this.osHandlers.cleanup();\n this.osHandlers = null;\n }\n }\n\n // ==========================================================================\n // 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: { [entityType: string]: EntityRow | EntityRow[] } = {};\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 EventPayload | undefined)?._activeTraits as string[] | undefined;\n // Remove _activeTraits from payload before processing (internal use only)\n const cleanPayload = payload ? { ...payload } : undefined;\n if (cleanPayload) {\n delete (cleanPayload as EventPayload & { _activeTraits?: unknown })._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: EntityRow = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.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 // After all effects execute, auto-fetch entity types that have ref effects and were mutated\n const persistedTypes = new Set<string>();\n for (const er of effectResults) {\n if ((er.effect === 'persist' || er.effect === 'set' || er.effect === 'swap') && er.success && er.entityType) {\n persistedTypes.add(er.entityType as string);\n }\n }\n // Scan traits for ref effects to know which entity types are ref'd\n const refTypes = new Set<string>();\n for (const trait of registered.schema.traits || []) {\n const sm = (trait as { stateMachine?: { transitions?: Array<{ effects?: unknown[] }> } }).stateMachine;\n const transitions = (sm?.transitions ?? trait.transitions ?? []) as Array<{ effects?: unknown[] }>;\n for (const trans of transitions) {\n for (const eff of trans.effects ?? []) {\n if (Array.isArray(eff) && eff[0] === 'ref' && typeof eff[1] === 'string') {\n refTypes.add(eff[1]);\n }\n }\n }\n }\n // Only re-fetch entity types that were both mutated AND have ref subscribers\n for (const mutatedEntityType of persistedTypes) {\n if (refTypes.has(mutatedEntityType)) {\n try {\n const fresh = await this.persistence.list(mutatedEntityType);\n fetchedData[mutatedEntityType] = fresh;\n } catch { /* ignore */ }\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: EventPayload | undefined,\n entityData: EntityRow,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: unknown }>,\n fetchedData: { [entityType: string]: EntityRow | EntityRow[] },\n clientEffects: Array<unknown>,\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n ): Promise<void> {\n const entityType = registered.schema.entity.name;\n\n // Forward refs - assigned after construction, used by fetch/atomic handlers\n let bindingsRef: BindingContext | null = null;\n let contextRef: EffectContext | null = null;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload) => {\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 as FieldValue });\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value: value as FieldValue },\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value: value as FieldValue },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n // ----------------------------------------------------------------\n // Batch mode: [\"persist\", \"batch\", [...operations]]\n // Each operation: [\"create\", \"collection\", {...data}],\n // [\"update\", \"collection\", \"id\", {...data}],\n // [\"delete\", \"collection\", \"id\"]\n // ----------------------------------------------------------------\n if (action === 'batch') {\n const operations = (data as EntityRow | undefined)?.operations as unknown[] | undefined;\n if (!Array.isArray(operations) || operations.length === 0) {\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n success: false,\n error: 'Batch requires a non-empty operations array',\n });\n return;\n }\n\n const batchResults: Array<EntityRow> = [];\n // Track completed ops for rollback on failure (best-effort)\n const completed: Array<{ action: string; entityType: string; id?: string }> = [];\n let batchFailed = false;\n let batchError = '';\n\n for (const op of operations) {\n if (!Array.isArray(op) || op.length < 2) {\n batchFailed = true;\n batchError = `Invalid batch operation format: ${JSON.stringify(op)}`;\n break;\n }\n\n const [opAction, opEntityType, ...opRest] = op as [string, string, ...unknown[]];\n\n try {\n switch (opAction) {\n case 'create': {\n const createData = (opRest[0] as EntityRow) || {};\n const { id: newId } = await this.persistence.create(opEntityType, createData);\n batchResults.push({ action: 'create', entityType: opEntityType, id: newId, ...createData });\n completed.push({ action: 'create', entityType: opEntityType, id: newId });\n break;\n }\n case 'update': {\n const updateId = opRest[0] as string;\n const updateData = (opRest[1] as EntityRow) || {};\n await this.persistence.update(opEntityType, updateId, updateData);\n const updated = await this.persistence.getById(opEntityType, updateId);\n batchResults.push({ action: 'update', entityType: opEntityType, id: updateId, ...(updated || updateData) });\n completed.push({ action: 'update', entityType: opEntityType, id: updateId });\n break;\n }\n case 'delete': {\n const deleteId = opRest[0] as string;\n // Snapshot before delete for potential rollback info\n await this.persistence.delete(opEntityType, deleteId);\n batchResults.push({ action: 'delete', entityType: opEntityType, id: deleteId, deleted: true });\n completed.push({ action: 'delete', entityType: opEntityType, id: deleteId });\n break;\n }\n default:\n batchFailed = true;\n batchError = `Unknown batch operation action: ${opAction}`;\n break;\n }\n } catch (err) {\n batchFailed = true;\n batchError = `Batch operation [${opAction}, ${opEntityType}] failed: ${err instanceof Error ? err.message : String(err)}`;\n break;\n }\n\n if (batchFailed) break;\n }\n\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n data: {\n operations: batchResults,\n completedCount: completed.length,\n totalCount: operations.length,\n } as unknown as EntityRow,\n success: !batchFailed,\n ...(batchFailed ? { error: batchError } : {}),\n });\n return;\n }\n\n // ----------------------------------------------------------------\n // Single operation mode: create / update / delete\n // ----------------------------------------------------------------\n const type = targetEntityType || entityType;\n let resultData: EntityRow | undefined;\n\n try {\n // Validate relation cardinality before create/update\n if (action === 'create' || action === 'update') {\n this.validateRelationCardinality(type, data || {});\n }\n\n switch (action) {\n case \"create\": {\n const { id } = await this.persistence.create(type, data || {});\n resultData = { id, ...(data || {}) };\n break;\n }\n case \"update\":\n if (data?.id || entityId) {\n const updateId = (data?.id as string) || entityId!;\n await this.persistence.update(type, updateId, data || {});\n // Return the updated entity\n const updated = await this.persistence.getById(type, updateId);\n resultData = updated || { id: updateId, ...(data || {}) };\n }\n break;\n case \"delete\":\n if (data?.id || entityId) {\n const deleteId = (data?.id as string) || entityId!;\n // Enforce onDelete relation rules before deleting\n await this.enforceOnDeleteRules(type, deleteId);\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n\n 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 EntityRow | undefined,\n success: true,\n });\n\n return result;\n } catch (err) {\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n let result: EntityRow | EntityRow[] | null = null;\n\n if (options?.id) {\n // Single entity fetch\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations([entity], fetchEntityType, options.include);\n }\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n result = entity;\n }\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 // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations(entities, fetchEntityType, options.include);\n }\n\n fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n\n // Sync fetched data into bindings so @EntityName.field resolves\n // in subsequent render-ui effects\n if (bindingsRef && result) {\n const records = Array.isArray(result) ? result : [result];\n if (records.length > 0) {\n const merged = Object.assign([...records], records[0]);\n bindingsRef[fetchEntityType] = merged;\n if (fetchEntityType === entityType) {\n bindingsRef.entity = merged;\n }\n }\n }\n\n return result;\n } catch (error) {\n console.error(`[OrbitalRuntime] Fetch error for ${fetchEntityType}:`, error);\n return null;\n }\n },\n\n // Resource operators: ref, deref, swap, watch, atomic\n\n ref: async (refEntityType, options) => {\n // ref is identical to fetch on the server: query persistence, populate fetchedData\n try {\n return await handlers.fetch!(refEntityType, options);\n } catch (error) {\n console.error(`[OrbitalRuntime] ref error for ${refEntityType}:`, error);\n return null;\n }\n },\n\n deref: async (derefEntityType, options) => {\n // deref is identical to fetch on the server: one-shot read\n try {\n let result: EntityRow | EntityRow[] | null = null;\n\n if (options?.id) {\n const entity = await this.persistence.getById(derefEntityType, options.id);\n if (entity) {\n fetchedData[derefEntityType] = [entity];\n result = entity;\n }\n } else {\n const entities = await this.persistence.list(derefEntityType);\n fetchedData[derefEntityType] = entities;\n result = entities;\n }\n\n // Sync into bindings like fetch does\n if (bindingsRef && result) {\n const records = Array.isArray(result) ? result : [result];\n if (records.length > 0) {\n const merged = Object.assign([...records], records[0]);\n bindingsRef[derefEntityType] = merged;\n if (derefEntityType === entityType) {\n bindingsRef.entity = merged;\n }\n }\n }\n\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: true,\n });\n\n return result;\n } catch (error) {\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n swap: async (swapEntityType, swapEntityId, transform) => {\n // Read-modify-write: read entity, apply transform S-expression, write back\n try {\n const current = await this.persistence.getById(swapEntityType, swapEntityId);\n if (!current) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: `Entity ${swapEntityType}/${swapEntityId} not found`,\n });\n return null;\n }\n\n // Evaluate the transform S-expression with @current binding\n const ctx = createContextFromBindings({\n current,\n entity: entityData,\n payload,\n });\n\n let newData: EntityRow;\n if (Array.isArray(transform)) {\n // S-expression transform: evaluate with @current bound to the entity\n const result = evaluate(\n transform as Parameters<typeof evaluate>[0],\n ctx,\n );\n // The result should be a record (the transformed entity)\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n newData = result as EntityRow;\n } else {\n // If transform returned a non-object, treat it as a partial update\n newData = current;\n }\n } else if (typeof transform === 'object' && transform !== null) {\n // Plain object merge: simple field updates\n newData = { ...current, ...(transform as EntityRow) };\n } else {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: 'swap! transform must be an S-expression or object',\n });\n return null;\n }\n\n // Write back (without version check for now, full OCC in future pass)\n await this.persistence.update(swapEntityType, swapEntityId, newData);\n\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n data: { id: swapEntityId, ...newData },\n success: true,\n });\n\n return newData;\n } catch (error) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n watch: (_watchEntityType, _watchOptions) => {\n // Watch is a no-op on server. Client subscribes to real-time updates.\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] watch is a no-op on server: ${_watchEntityType}`);\n }\n },\n\n atomic: async (atomicEffects) => {\n // Execute inner effects sequentially. If any fails, mark all as failed.\n // Full transaction/rollback support is a future enhancement.\n let atomicFailed = false;\n let atomicError = '';\n\n const atomicExecutor = new EffectExecutor({\n handlers,\n bindings: bindingsRef ?? {},\n context: contextRef ?? { traitName, state: 'unknown', transition: 'unknown' },\n debug: this.config.debug,\n });\n\n for (const innerEffect of atomicEffects) {\n if (atomicFailed) break;\n try {\n await atomicExecutor.execute(innerEffect);\n } catch (err) {\n atomicFailed = true;\n atomicError = err instanceof Error ? err.message : String(err);\n }\n }\n\n if (atomicFailed) {\n // Mark the atomic block as failed\n effectResults.push({\n effect: 'atomic',\n success: false,\n error: `Atomic block failed: ${atomicError}`,\n });\n } else {\n effectResults.push({\n effect: 'atomic',\n success: true,\n data: { innerCount: atomicEffects.length },\n });\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n 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 // Build binding context with @entity AND @EntityName aliases.\n // @entity is the standard binding root. @EntityName (e.g., @SpriteEntity)\n // is used by some behaviors for explicit entity references in render-ui patterns.\n // The compiled app resolves @EntityName at compile time; the interpreter\n // needs it in the runtime binding context.\n //\n // NOTE: fetchedData is populated by fetch effects DURING execution.\n // The syncFetchedBindings() helper is called from the fetch handler\n // to update bindings after each fetch, so render-ui effects that\n // run after fetch see the correct @EntityName.field values.\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n // Add initial named entity binding\n if (entityType) {\n bindings[entityType] = entityData;\n }\n\n // Wire forward refs so fetch/atomic handlers can access bindings and context\n bindingsRef = bindings;\n\n const context: EffectContext = {\n traitName,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n contextRef = context;\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n });\n\n await executor.executeAll(effects);\n }\n\n // ==========================================================================\n // Relation Population\n // ==========================================================================\n\n /**\n * Populate relation fields on entities\n *\n * For each field in `include`, find the relation field configuration and\n * fetch the related entity, attaching it to the parent entity.\n *\n * @param entities - Entities to populate\n * @param entityType - Entity type name\n * @param include - Relation field names to populate\n */\n /**\n * Validate that relation field values match their declared cardinality.\n * Called before create/update to ensure data integrity.\n */\n private validateRelationCardinality(\n entityType: string,\n data: EntityRow,\n ): void {\n // Find the entity schema\n for (const [, registered] of this.orbitals) {\n if (registered.schema.entity.name !== entityType) continue;\n\n for (const field of registered.schema.entity.fields ?? []) {\n if (field.type !== 'relation') continue;\n const value = data[field.name];\n if (value === undefined || value === null) continue;\n\n const cardinality = field.relation?.cardinality || 'one';\n\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n // Single cardinality: value must be a string, not an array\n if (Array.isArray(value)) {\n throw new Error(\n `Cardinality violation: ${entityType}.${field.name} has cardinality '${cardinality}' but received an array. Expected a single string ID.`\n );\n }\n } else if (cardinality === 'many' || cardinality === 'many-to-many' || cardinality === 'one-to-many') {\n // Many cardinality: value must be an array of strings\n if (typeof value === 'string') {\n // Auto-correct: wrap single string in array (permissive)\n data[field.name] = [value];\n } else if (Array.isArray(value)) {\n // Validate all elements are strings\n const nonStrings = value.filter((v: unknown) => typeof v !== 'string');\n if (nonStrings.length > 0) {\n throw new Error(\n `Cardinality violation: ${entityType}.${field.name} has cardinality '${cardinality}' but array contains non-string values.`\n );\n }\n }\n }\n }\n break;\n }\n }\n\n /**\n * Enforce onDelete rules for relation fields pointing to the entity being deleted.\n * Scans all registered entities for relation fields targeting the given entity type,\n * finds records referencing the ID being deleted, and applies cascade/nullify/restrict.\n */\n private async enforceOnDeleteRules(\n entityType: string,\n deletedId: string,\n ): Promise<void> {\n for (const [, registered] of this.orbitals) {\n const schema = registered.schema;\n const fields = schema.entity.fields ?? [];\n\n for (const field of fields) {\n if (field.type !== 'relation') continue;\n if (field.relation?.entity !== entityType) continue;\n\n const onDelete = field.relation.onDelete || 'restrict';\n const referringEntityType = schema.entity.name;\n\n // Find all records in the referring entity that reference the deleted ID\n const allRecords = await this.persistence.list(referringEntityType);\n const affectedRecords = allRecords.filter(record => {\n const fkValue = record[field.name];\n if (typeof fkValue === 'string') return fkValue === deletedId;\n if (Array.isArray(fkValue)) return fkValue.includes(deletedId);\n return false;\n });\n\n if (affectedRecords.length === 0) continue;\n\n switch (onDelete) {\n case 'restrict':\n throw new Error(\n `Cannot delete ${entityType} ${deletedId}: ${affectedRecords.length} ${referringEntityType} record(s) reference it via ${field.name}. Rule: restrict.`\n );\n\n case 'cascade':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId) {\n await this.persistence.delete(referringEntityType, recordId);\n }\n }\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Cascade deleted ${affectedRecords.length} ${referringEntityType} records`);\n }\n break;\n\n case 'nullify':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId) {\n const update: EntityRow = {};\n const fkValue = record[field.name];\n if (Array.isArray(fkValue)) {\n update[field.name] = fkValue.filter((id: unknown) => id !== deletedId);\n } else {\n update[field.name] = null;\n }\n await this.persistence.update(referringEntityType, recordId, update);\n }\n }\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Nullified ${field.name} on ${affectedRecords.length} ${referringEntityType} records`);\n }\n break;\n }\n }\n }\n }\n\n private async populateRelations(\n entities: EntityRow[],\n entityType: string,\n include: string[],\n depth: number = 0,\n visited: Set<string> = new Set(),\n ): Promise<void> {\n // Circular reference protection: stop if depth exceeded or entity type already visited\n const maxDepth = 2;\n if (depth >= maxDepth || visited.has(entityType)) {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Skipping populateRelations for ${entityType}: depth=${depth}, visited=${visited.has(entityType)}`);\n }\n return;\n }\n visited.add(entityType);\n // Find the orbital that owns this entity type\n let entityFields: Array<{ name: string; type: string; relation?: { entity?: string; cardinality?: string; onDelete?: string } }> | undefined;\n\n for (const [, registered] of this.orbitals) {\n if (registered.schema.entity.name === entityType) {\n entityFields = registered.schema.entity.fields;\n break;\n }\n }\n\n if (!entityFields) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No entity definition found for ${entityType}`);\n }\n return;\n }\n\n // Process each include field\n for (const includeField of include) {\n // Find the relation field (check both \"fieldName\" and \"fieldNameId\" patterns)\n const relationField = entityFields.find(f => {\n if (f.type !== 'relation') return false;\n // Match \"company\" against \"company\" or \"companyId\"\n return f.name === includeField ||\n f.name === `${includeField}Id` ||\n f.name.replace(/Id$/, '') === includeField;\n });\n\n if (!relationField?.relation?.entity) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No relation field found for '${includeField}' on ${entityType}`);\n }\n continue;\n }\n\n const foreignKeyField = relationField.name;\n const relatedEntityType = relationField.relation.entity;\n const cardinality = relationField.relation.cardinality || 'one';\n\n // Collect all foreign key IDs to batch fetch\n // Handles both single ID (string) and array of IDs (string[]) for many cardinalities\n const foreignKeyIds = new Set<string>();\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n if (fkValue && typeof fkValue === 'string') {\n foreignKeyIds.add(fkValue);\n } else if (Array.isArray(fkValue)) {\n for (const id of fkValue) {\n if (id && typeof id === 'string') {\n foreignKeyIds.add(id);\n }\n }\n }\n }\n\n if (foreignKeyIds.size === 0) continue;\n\n // Batch fetch all related entities\n const relatedEntities = new Map<string, EntityRow>();\n for (const fkId of foreignKeyIds) {\n try {\n const related = await this.persistence.getById(relatedEntityType, fkId);\n if (related) {\n relatedEntities.set(fkId, related);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(`[OrbitalRuntime] Error fetching related ${relatedEntityType}:`, error);\n }\n }\n }\n\n // Attach related entities to parent entities\n // Use the base name without \"Id\" suffix for the populated field\n const populatedFieldName = includeField.endsWith('Id')\n ? includeField.slice(0, -2)\n : includeField;\n\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n // Population assigns related EntityRow objects to fields at runtime.\n // These won't match the strict FieldValue type, so cast at the boundary.\n const entityRecord = entity as Record<string, unknown>;\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n // Single FK: attach the related object directly\n if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n entityRecord[populatedFieldName] = relatedEntities.get(fkValue);\n }\n } else {\n // Many cardinality: FK is an array of IDs, resolve each to the full object\n if (Array.isArray(fkValue)) {\n const fkIds = (fkValue as FieldValue[]).filter((id): id is string => typeof id === 'string');\n entityRecord[populatedFieldName] = fkIds\n .map(id => relatedEntities.get(id))\n .filter(Boolean);\n } else if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n // Fallback: single ID with many cardinality, wrap in array\n entityRecord[populatedFieldName] = [relatedEntities.get(fkValue)];\n }\n }\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Populated '${populatedFieldName}' on ${entities.length} ${entityType} entities`);\n }\n }\n }\n\n // ==========================================================================\n // Express Router\n // ==========================================================================\n\n /**\n * Create Express router for orbital API endpoints\n *\n * All data access goes through trait events with guards.\n * No direct CRUD routes - use events with `fetch` effects.\n *\n * Routes:\n * - GET / - List registered orbitals\n * - GET /:orbital - Get orbital info and current states\n * - POST /:orbital/events - Send event to orbital (includes data from `fetch` effects)\n */\n router(): 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?: OrbitalEventRequest[\"user\"] }).firebaseUser;\n const user = firebaseUser ? {\n ...firebaseUser,\n displayName: (firebaseUser.name as string | undefined) ?? firebaseUser.displayName,\n } : undefined;\n\n const result = await this.processOrbitalEvent(orbitalName, {\n ...req.body,\n user,\n });\n res.json(result);\n } catch (error) {\n next(error);\n }\n },\n );\n\n // No direct CRUD routes - all data access goes through events\n // This ensures guards are always evaluated for both reads and writes\n\n return router;\n }\n\n // ==========================================================================\n // Direct API (for programmatic use)\n // ==========================================================================\n\n /**\n * Get the event bus for manual event emission\n */\n getEventBus(): EventBus {\n return this.eventBus;\n }\n\n /**\n * Get state for a specific orbital/trait\n */\n getState(\n orbitalName: string,\n traitName?: string,\n ): TraitState | Record<string, TraitState> | undefined {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) return undefined;\n\n if (traitName) {\n return registered.manager.getState(traitName);\n }\n\n // Return all states for the orbital\n const states: Record<string, TraitState> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state;\n }\n return states;\n }\n\n /**\n * List registered orbitals\n */\n listOrbitals(): string[] {\n return Array.from(this.orbitals.keys());\n }\n\n /**\n * Check if an orbital is registered\n */\n hasOrbital(name: string): boolean {\n return this.orbitals.has(name);\n }\n\n /**\n * Get information about active ticks\n */\n getActiveTicks(): Array<{\n orbital: string;\n trait: string;\n tick: string;\n interval: number | string;\n hasGuard: boolean;\n }> {\n return this.tickBindings.map((binding) => ({\n orbital: binding.orbitalName,\n trait: binding.traitName,\n tick: binding.tick.name,\n interval: binding.tick.interval,\n hasGuard: !!binding.tick.guard,\n }));\n }\n}\n\n/**\n * Factory function to create a runtime instance\n */\nexport function createOrbitalServerRuntime(\n config?: OrbitalServerRuntimeConfig,\n): OrbitalServerRuntime {\n return new OrbitalServerRuntime(config);\n}\n"]}
1
+ {"version":3,"sources":["../src/MockPersistenceAdapter.ts","../src/createOsHandlers.ts","../src/OrbitalServerRuntime.ts"],"names":[],"mappings":"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","file":"OrbitalServerRuntime.js","sourcesContent":["/**\n * MockPersistenceAdapter - In-memory data store with faker-based mock generation\n *\n * Provides a stateful mock data layer that implements PersistenceAdapter.\n * Uses @faker-js/faker for realistic data generation based on field types.\n *\n * @packageDocumentation\n */\n\nimport { faker } from '@faker-js/faker';\nimport type { PersistenceAdapter } from './OrbitalServerRuntime.js';\nimport type { EntityRow } from './types.js';\nimport type { FieldValue } from '@almadar/core';\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 /** Pre-authored instance data from the schema (used instead of faker generation) */\n seedData?: EntityRow[];\n}\n\nexport interface MockPersistenceConfig {\n /** Seed for deterministic generation */\n seed?: number;\n /** Default number of records to generate per entity */\n defaultSeedCount?: number;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n// ============================================================================\n// MockPersistenceAdapter\n// ============================================================================\n\n/**\n * In-memory mock data store with CRUD operations and faker-based seeding.\n */\nexport class MockPersistenceAdapter implements PersistenceAdapter {\n private stores: Map<string, Map<string, EntityRow>> = new Map();\n private schemas: Map<string, EntitySchema> = new Map();\n private idCounters: Map<string, number> = new Map();\n private config: MockPersistenceConfig;\n\n constructor(config: MockPersistenceConfig = {}) {\n this.config = {\n defaultSeedCount: 6,\n debug: false,\n ...config,\n };\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, EntityRow> {\n const normalized = entityName.toLowerCase();\n if (!this.stores.has(normalized)) {\n this.stores.set(normalized, new Map());\n this.idCounters.set(normalized, 0);\n }\n return this.stores.get(normalized)!;\n }\n\n private nextId(entityName: string): string {\n const normalized = entityName.toLowerCase();\n const counter = (this.idCounters.get(normalized) ?? 0) + 1;\n this.idCounters.set(normalized, counter);\n return `${this.capitalizeFirst(entityName)} Id ${counter}`;\n }\n\n // ============================================================================\n // Schema & Seeding\n // ============================================================================\n\n /**\n * Register an entity schema and seed mock data.\n * If the schema has seedData, those instances are used directly.\n * Otherwise, random mock data is generated with faker.\n */\n registerEntity(schema: EntitySchema, seedCount?: number): void {\n const normalized = schema.name.toLowerCase();\n this.schemas.set(normalized, schema);\n\n if (schema.seedData && schema.seedData.length > 0) {\n // Seed with actual pre-authored instances\n this.seedFromInstances(schema.name, schema.seedData);\n } else {\n const count = seedCount ?? this.config.defaultSeedCount ?? 6;\n this.seed(schema.name, schema.fields, count);\n }\n }\n\n /**\n * Seed an entity with pre-authored instance data.\n */\n seedFromInstances(entityName: string, instances: EntityRow[]): void {\n const store = this.getStore(entityName);\n\n if (this.config.debug) {\n console.log(`[MockPersistence] Seeding ${instances.length} ${entityName} from schema instances...`);\n }\n\n for (const instance of instances) {\n const id = (instance.id as string) || this.nextId(entityName);\n const now = new Date().toISOString();\n const item: EntityRow = {\n ...instance,\n id,\n createdAt: instance.createdAt as string || now,\n updatedAt: now,\n };\n store.set(id, item);\n }\n }\n\n /**\n * Seed an entity with mock data.\n */\n seed(entityName: string, fields: EntityField[], count: number): void {\n const store = this.getStore(entityName);\n const normalized = entityName.toLowerCase();\n\n if (this.config.debug) {\n 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 ): EntityRow {\n const id = this.nextId(entityName);\n const now = new Date().toISOString();\n const item: EntityRow = {\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): FieldValue {\n // Handle default values\n if (field.default !== undefined) {\n if (field.default === '@now') {\n return new Date().toISOString();\n }\n return field.default as FieldValue;\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 return [];\n case 'object':\n return null;\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: EntityRow\n ): Promise<{ id: string }> {\n const store = this.getStore(entityType);\n const id = this.nextId(entityType);\n const now = new Date().toISOString();\n\n const 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: EntityRow\n ): Promise<void> {\n const store = this.getStore(entityType);\n const existing = store.get(id);\n\n if (!existing) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n\n const updated = {\n ...existing,\n ...data,\n id, // Preserve original ID\n updatedAt: new Date().toISOString(),\n };\n\n store.set(id, updated);\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n const store = this.getStore(entityType);\n if (!store.has(id)) {\n throw new Error(`Entity ${entityType} with id ${id} not found`);\n }\n store.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string\n ): Promise<EntityRow | null> {\n const store = this.getStore(entityType);\n return store.get(id) ?? null;\n }\n\n async list(entityType: string): Promise<Array<EntityRow>> {\n const store = this.getStore(entityType);\n return Array.from(store.values());\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n /**\n * Clear all data for an entity.\n */\n clear(entityName: string): void {\n const normalized = entityName.toLowerCase();\n this.stores.delete(normalized);\n this.idCounters.delete(normalized);\n }\n\n /**\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 * OS Trigger Handlers — Server-Side Only\n *\n * Provides Node.js implementations for all 8 os/* operators.\n * Used by OrbitalServerRuntime (interpreted path).\n *\n * NOT exported from the main index.ts because it imports Node.js-only modules.\n * Import directly: import { createOsHandlers } from '@almadar/runtime/createOsHandlers';\n *\n * @packageDocumentation\n */\n\nimport * as fs from \"fs\";\nimport * as net from \"net\";\nimport { execSync } from \"child_process\";\nimport type { EventPayload } from './types.js';\nimport type { EffectHandlers } from \"./types.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface OsHandlerContext {\n /** Emit an event on the EventBus */\n emitEvent: (type: string, payload: EventPayload) => void;\n /** Working directory for file watching (defaults to process.cwd()) */\n cwd?: string;\n}\n\nexport interface OsHandlerResult {\n handlers: Partial<EffectHandlers>;\n cleanup: () => void;\n}\n\n// ============================================================================\n// Glob Matching (minimal, no external dependency)\n// ============================================================================\n\nfunction globToRegex(glob: string): RegExp {\n let regex = \"\";\n let i = 0;\n while (i < glob.length) {\n const c = glob[i];\n if (c === \"*\") {\n if (glob[i + 1] === \"*\") {\n // ** matches any path segment\n regex += \".*\";\n i += 2;\n if (glob[i] === \"/\") i++; // skip trailing slash\n continue;\n }\n // * matches anything except /\n regex += \"[^/]*\";\n } else if (c === \"?\") {\n regex += \"[^/]\";\n } else if (c === \".\") {\n regex += \"\\\\.\";\n } else if (c === \"/\" || c === \"-\" || c === \"_\") {\n regex += c;\n } else if (/[{}()[\\]^$+|\\\\]/.test(c)) {\n regex += \"\\\\\" + c;\n } else {\n regex += c;\n }\n i++;\n }\n return new RegExp(\"^\" + regex + \"$\");\n}\n\n// ============================================================================\n// Cron Parsing (5-field standard: min hour day month weekday)\n// ============================================================================\n\ninterface CronFields {\n minute: Set<number>;\n hour: Set<number>;\n day: Set<number>;\n month: Set<number>;\n weekday: Set<number>;\n}\n\nfunction parseCronField(field: string, min: number, max: number): Set<number> {\n const values = new Set<number>();\n for (const part of field.split(\",\")) {\n if (part === \"*\") {\n for (let i = min; i <= max; i++) values.add(i);\n } else if (part.includes(\"/\")) {\n const [range, stepStr] = part.split(\"/\");\n const step = parseInt(stepStr, 10);\n const start = range === \"*\" ? min : parseInt(range, 10);\n for (let i = start; i <= max; i += step) values.add(i);\n } else if (part.includes(\"-\")) {\n const [lo, hi] = part.split(\"-\").map(Number);\n for (let i = lo; i <= hi; i++) values.add(i);\n } else {\n values.add(parseInt(part, 10));\n }\n }\n return values;\n}\n\nfunction parseCron(expression: string): CronFields {\n const parts = expression.trim().split(/\\s+/);\n if (parts.length !== 5) {\n throw new Error(`Invalid cron expression (expected 5 fields): ${expression}`);\n }\n return {\n minute: parseCronField(parts[0], 0, 59),\n hour: parseCronField(parts[1], 0, 23),\n day: parseCronField(parts[2], 1, 31),\n month: parseCronField(parts[3], 1, 12),\n weekday: parseCronField(parts[4], 0, 6),\n };\n}\n\nfunction cronMatches(fields: CronFields, date: Date): boolean {\n return (\n fields.minute.has(date.getMinutes()) &&\n fields.hour.has(date.getHours()) &&\n fields.day.has(date.getDate()) &&\n fields.month.has(date.getMonth() + 1) &&\n fields.weekday.has(date.getDay())\n );\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createOsHandlers(ctx: OsHandlerContext): OsHandlerResult {\n const cwd = ctx.cwd ?? process.cwd();\n\n // Resource tracking for cleanup\n const watchers: fs.FSWatcher[] = [];\n const intervals: ReturnType<typeof setInterval>[] = [];\n const signalHandlers: Array<{ signal: NodeJS.Signals; handler: () => void }> = [];\n let httpWatchActive = false;\n\n // Debounce configuration: { eventType: ms }\n const debounceConfig = new Map<string, number>();\n const debounceTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function debouncedEmit(eventType: string, payload: EventPayload): void {\n const ms = debounceConfig.get(eventType);\n if (ms !== undefined && ms > 0) {\n const existing = debounceTimers.get(eventType);\n if (existing) clearTimeout(existing);\n debounceTimers.set(\n eventType,\n setTimeout(() => {\n debounceTimers.delete(eventType);\n ctx.emitEvent(eventType, payload);\n }, ms),\n );\n } else {\n ctx.emitEvent(eventType, payload);\n }\n }\n\n // ============================================================================\n // Handler Implementations\n // ============================================================================\n\n const handlers: Partial<EffectHandlers> = {\n osWatchFiles: (glob: string, options: { recursive?: boolean; debounce?: number }) => {\n const recursive = (options.recursive as boolean) !== false;\n const pattern = globToRegex(glob);\n\n try {\n const watcher = fs.watch(cwd, { recursive }, (_event, filename) => {\n if (filename && pattern.test(filename)) {\n debouncedEmit(\"OS_FILE_MODIFIED\", {\n file: filename,\n glob,\n cwd,\n });\n }\n });\n watchers.push(watcher);\n } catch (err) {\n console.warn(\"[os/watch-files] Failed to start watcher:\", err);\n }\n },\n\n osWatchProcess: (name: string, subcommand?: string) => {\n const searchTerm = subcommand ? `${name} ${subcommand}` : name;\n let wasRunning = false;\n\n const interval = setInterval(() => {\n let isRunning = false;\n try {\n const result = execSync(`pgrep -f \"${searchTerm}\" 2>/dev/null`, {\n encoding: \"utf-8\",\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n isRunning = result.trim().length > 0;\n } catch {\n isRunning = false;\n }\n\n if (isRunning && !wasRunning) {\n debouncedEmit(\"OS_PROCESS_STARTED\", { process: name, subcommand: subcommand ?? null });\n } else if (!isRunning && wasRunning) {\n debouncedEmit(\"OS_PROCESS_EXITED\", { process: name, subcommand: subcommand ?? null });\n }\n wasRunning = isRunning;\n }, 2000);\n\n intervals.push(interval);\n },\n\n osWatchPort: (port: number, protocol: string) => {\n if (protocol !== \"tcp\") {\n console.warn(`[os/watch-port] Only TCP is supported, got: ${protocol}`);\n return;\n }\n\n let wasOpen = false;\n\n const interval = setInterval(() => {\n const socket = new net.Socket();\n socket.setTimeout(1000);\n\n socket.on(\"connect\", () => {\n socket.destroy();\n if (!wasOpen) {\n wasOpen = true;\n debouncedEmit(\"OS_PORT_OPENED\", { port, protocol });\n }\n });\n\n socket.on(\"error\", () => {\n socket.destroy();\n if (wasOpen) {\n wasOpen = false;\n debouncedEmit(\"OS_PORT_CLOSED\", { port, protocol });\n }\n });\n\n socket.on(\"timeout\", () => {\n socket.destroy();\n if (wasOpen) {\n wasOpen = false;\n debouncedEmit(\"OS_PORT_CLOSED\", { port, protocol });\n }\n });\n\n socket.connect(port, \"127.0.0.1\");\n }, 3000);\n\n intervals.push(interval);\n },\n\n osWatchHttp: (urlPattern: string, method?: string) => {\n // HTTP interception requires monkey-patching Node.js module exports (read-only in TS types).\n // The compiled path (backend.rs) generates untyped inline code that handles this.\n // For the interpreted runtime, log a warning.\n if (!httpWatchActive) {\n httpWatchActive = true;\n console.warn(\n `[os/watch-http] HTTP interception is only supported in compiled mode. ` +\n `Pattern: ${urlPattern}${method ? `, method: ${method}` : \"\"}`,\n );\n }\n },\n\n osWatchCron: (expression: string) => {\n let fields: CronFields;\n try {\n fields = parseCron(expression);\n } catch (err) {\n console.warn(\"[os/watch-cron] Invalid expression:\", err);\n return;\n }\n\n let lastFired = -1;\n\n const interval = setInterval(() => {\n const now = new Date();\n const minuteKey = now.getFullYear() * 1e8 + now.getMonth() * 1e6 +\n now.getDate() * 1e4 + now.getHours() * 100 + now.getMinutes();\n\n if (minuteKey !== lastFired && cronMatches(fields, now)) {\n lastFired = minuteKey;\n debouncedEmit(\"OS_CRON_FIRE\", {\n expression,\n firedAt: now.toISOString(),\n });\n }\n }, 1000);\n\n intervals.push(interval);\n },\n\n osWatchSignal: (signal: string) => {\n const sig = signal.toUpperCase() as NodeJS.Signals;\n const handler = () => {\n debouncedEmit(`OS_SIGNAL_${sig}`, { signal: sig });\n };\n\n try {\n process.on(sig, handler);\n signalHandlers.push({ signal: sig, handler });\n } catch (err) {\n console.warn(`[os/watch-signal] Cannot listen for ${sig}:`, err);\n }\n },\n\n osWatchEnv: (variable: string) => {\n let lastValue = process.env[variable];\n\n const interval = setInterval(() => {\n const current = process.env[variable];\n if (current !== lastValue) {\n const previous = lastValue;\n lastValue = current;\n debouncedEmit(\"OS_ENV_CHANGED\", {\n variable,\n value: current ?? null,\n previous: previous ?? null,\n });\n }\n }, 1000);\n\n intervals.push(interval);\n },\n\n osDebounce: (ms: number, eventType: string) => {\n debounceConfig.set(eventType, ms);\n },\n };\n\n // ============================================================================\n // Cleanup\n // ============================================================================\n\n function cleanup(): void {\n for (const w of watchers) {\n try { w.close(); } catch { /* already closed */ }\n }\n watchers.length = 0;\n\n for (const i of intervals) {\n clearInterval(i);\n }\n intervals.length = 0;\n\n for (const { signal, handler } of signalHandlers) {\n try { process.removeListener(signal, handler); } catch { /* noop */ }\n }\n signalHandlers.length = 0;\n\n httpWatchActive = false;\n\n // Clear pending debounce timers\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n }\n\n return { handlers, cleanup };\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 { evaluate, evaluateGuard } from \"@almadar/evaluator\";\nimport type {\n TraitDefinition,\n TraitState,\n EffectHandlers,\n BindingContext,\n EffectContext,\n Effect,\n EntityRow,\n EventPayload,\n} from \"./types.js\";\nimport type {\n FieldValue,\n OrbitalSchema,\n OrbitalDefinition,\n Entity,\n Trait,\n TraitTick,\n} from \"@almadar/core\";\nimport { isInlineTrait } from \"@almadar/core\";\nimport { MockPersistenceAdapter } from \"./MockPersistenceAdapter.js\";\nimport {\n preprocessSchema,\n type PreprocessedSchema,\n type EntitySharingMap,\n type EventNamespaceMap,\n} from \"./UsesIntegration.js\";\nimport {\n type SchemaLoader,\n createUnifiedLoader,\n} from \"./loader/index.js\";\nimport { createOsHandlers, type OsHandlerResult } from \"./createOsHandlers.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\n// Uses OrbitalSchema, OrbitalDefinition, Trait, TraitTick from @almadar/core directly.\n// No redundant runtime-specific types.\n\n/** @deprecated Use OrbitalSchema from @almadar/core */\nexport type RuntimeOrbitalSchema = OrbitalSchema;\n/** @deprecated Use OrbitalDefinition from @almadar/core */\nexport type RuntimeOrbital = OrbitalDefinition;\n/** @deprecated Use Trait from @almadar/core */\nexport type RuntimeTrait = Trait;\n/** @deprecated Use TraitTick from @almadar/core */\nexport type RuntimeTraitTick = TraitTick;\n\n/**\n * Registered orbital with runtime state\n */\nexport interface RegisteredOrbital {\n schema: OrbitalDefinition;\n /** Resolved entity (never a string ref at runtime) */\n entity: Entity;\n /** Resolved inline traits (string refs filtered out) */\n traits: Trait[];\n manager: StateMachineManager;\n entityData: Map<string, EntityRow>; // entityId -> data\n}\n\n/**\n * Event sent from client to server\n */\nexport interface OrbitalEventRequest {\n event: string;\n payload?: EventPayload;\n entityId?: string;\n /** User context for @user bindings (from Firebase auth) */\n user?: {\n uid: string;\n email?: string;\n displayName?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * Response from event processing\n */\nexport interface OrbitalEventResponse {\n success: boolean;\n transitioned: boolean;\n states: Record<string, string>;\n emittedEvents: Array<{ event: string; payload?: unknown }>;\n /** Entity data fetched by `fetch` effects - keyed by entity type */\n data?: { [entityType: string]: EntityRow | EntityRow[] };\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' | 'ref' | 'deref' | 'swap' | 'atomic';\n /** Action performed (e.g., 'create', 'update', 'delete' for persist) */\n action?: string;\n /** Entity type affected (for persist/set/ref/deref/swap) */\n entityType?: string;\n /** Result data from the effect (entity row for CRUD, summary for batch) */\n data?: EntityRow | { operations: EntityRow[]; completedCount: number; totalCount: number };\n /** Whether the effect succeeded */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Loader configuration for resolving `uses` imports\n */\nexport interface LoaderConfig {\n /** Base path for schema files */\n basePath: string;\n /** Standard library path (filesystem or URL) */\n stdLibPath?: string;\n /** Scoped package paths */\n scopedPaths?: Record<string, string>;\n /** Custom loader instance (overrides basePath/stdLibPath) */\n loader?: SchemaLoader;\n}\n\n/**\n * Runtime configuration\n */\nexport interface OrbitalServerRuntimeConfig {\n /** Enable debug logging */\n debug?: boolean;\n /** Custom effect handlers (for integrating with your data layer) */\n effectHandlers?: Partial<EffectHandlers>;\n /** Persistence adapter for entity data */\n persistence?: PersistenceAdapter;\n /**\n * Data mode:\n * - 'mock': Use faker-generated mock data (default for preview)\n * - 'real': Use actual persistence layer\n */\n mode?: 'mock' | 'real';\n /** Seed for deterministic mock data generation */\n mockSeed?: number;\n /** Number of mock records to generate per entity */\n mockSeedCount?: number;\n /**\n * Loader configuration for resolving `uses` imports.\n * Required when using `registerWithPreprocess` or `autoPreprocess`.\n */\n loaderConfig?: LoaderConfig;\n /**\n * Automatically preprocess schemas on register() to resolve `uses` imports.\n * Requires `loaderConfig` to be set.\n * Default: false\n */\n autoPreprocess?: boolean;\n /**\n * Apply event namespacing to imported traits.\n * Default: true\n */\n namespaceEvents?: boolean;\n}\n\n/**\n * Adapter for persisting entity data\n */\nexport interface PersistenceAdapter {\n create(\n entityType: string,\n data: EntityRow,\n ): Promise<{ id: string }>;\n update(\n entityType: string,\n id: string,\n data: EntityRow,\n ): Promise<void>;\n delete(entityType: string, id: string): Promise<void>;\n getById(\n entityType: string,\n id: string,\n ): Promise<EntityRow | null>;\n list(entityType: string): Promise<Array<EntityRow>>;\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, EntityRow>>();\n private idCounter = 0;\n\n async create(\n entityType: string,\n data: EntityRow,\n ): Promise<{ id: string }> {\n // Use provided ID if it exists, otherwise generate one\n const id = (data.id as string) || `${entityType}-${++this.idCounter}`;\n if (!this.data.has(entityType)) {\n this.data.set(entityType, new Map());\n }\n this.data.get(entityType)!.set(id, { ...data, id });\n return { id };\n }\n\n async update(\n entityType: string,\n id: string,\n data: EntityRow,\n ): Promise<void> {\n const collection = this.data.get(entityType);\n if (collection?.has(id)) {\n const existing = collection.get(id)!;\n collection.set(id, { ...existing, ...data });\n }\n }\n\n async delete(entityType: string, id: string): Promise<void> {\n this.data.get(entityType)?.delete(id);\n }\n\n async getById(\n entityType: string,\n id: string,\n ): Promise<EntityRow | null> {\n return this.data.get(entityType)?.get(id) || null;\n }\n\n async list(entityType: string): Promise<Array<EntityRow>> {\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 protected orbitals = new Map<string, RegisteredOrbital>();\n private eventBus: EventBus;\n private config: OrbitalServerRuntimeConfig;\n private persistence: PersistenceAdapter;\n private listenerCleanups: Array<() => void> = [];\n private tickBindings: TickBinding[] = [];\n private loader: SchemaLoader | null = null;\n private preprocessedCache = new Map<string, PreprocessedSchema>();\n private entitySharingMap: EntitySharingMap = {};\n private eventNamespaceMap: EventNamespaceMap = {};\n private osHandlers: OsHandlerResult | null = null;\n\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 // Auto-wire OS handlers (server-side only)\n this.osHandlers = createOsHandlers({\n emitEvent: (type, payload) => this.eventBus.emit(type, payload),\n });\n // Merge OS handlers under user-provided handlers (user can override)\n this.config.effectHandlers = {\n ...this.osHandlers.handlers,\n ...this.config.effectHandlers,\n };\n }\n\n // ==========================================================================\n // 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 async register(schema: OrbitalSchema): Promise<void> {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema: ${schema.name}`);\n }\n\n // Register all orbitals (await to ensure instance seeding completes)\n for (const orbital of schema.orbitals) {\n await this.registerOrbitalAsync(orbital);\n }\n\n // Set up cross-orbital event listeners\n this.setupEventListeners();\n\n // Set up scheduled ticks\n this.setupTicks();\n }\n\n /**\n * Register an OrbitalSchema synchronously (for backward compatibility).\n * Note: This version doesn't wait for instance seeding to complete.\n * Use async register() for guaranteed instance seeding.\n */\n registerSync(schema: OrbitalSchema): void {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Registering schema (sync): ${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: OrbitalSchema,\n options?: { sourcePath?: string }\n ): Promise<{\n success: boolean;\n entitySharing?: EntitySharingMap;\n eventNamespaces?: EventNamespaceMap;\n warnings?: string[];\n errors?: string[];\n }> {\n // Check if preprocessing is possible\n if (!this.loader && !this.config.loaderConfig) {\n return {\n success: false,\n errors: ['Loader not configured. Set loaderConfig in OrbitalServerRuntimeConfig.'],\n };\n }\n\n // Ensure loader is initialized\n if (!this.loader && this.config.loaderConfig) {\n this.loader = this.config.loaderConfig.loader ?? createUnifiedLoader({\n basePath: this.config.loaderConfig.basePath,\n stdLibPath: this.config.loaderConfig.stdLibPath,\n scopedPaths: this.config.loaderConfig.scopedPaths,\n });\n }\n\n // Check cache\n const cacheKey = `${schema.name}:${schema.version || '1.0.0'}`;\n const cached = this.preprocessedCache.get(cacheKey);\n if (cached) {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Using cached preprocessed schema: ${schema.name}`);\n }\n this.register(cached.schema);\n this.entitySharingMap = { ...this.entitySharingMap, ...cached.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...cached.eventNamespaces };\n return {\n success: true,\n entitySharing: cached.entitySharing,\n eventNamespaces: cached.eventNamespaces,\n warnings: cached.warnings,\n };\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Preprocessing schema: ${schema.name}`);\n }\n\n // Preprocess schema\n const result = await preprocessSchema(schema, {\n basePath: this.config.loaderConfig?.basePath || '.',\n stdLibPath: this.config.loaderConfig?.stdLibPath,\n scopedPaths: this.config.loaderConfig?.scopedPaths,\n loader: this.loader!,\n namespaceEvents: this.config.namespaceEvents,\n });\n\n if (!result.success) {\n return {\n success: false,\n errors: result.errors,\n };\n }\n\n // Cache the result\n this.preprocessedCache.set(cacheKey, result.data);\n\n // Store sharing maps\n this.entitySharingMap = { ...this.entitySharingMap, ...result.data.entitySharing };\n this.eventNamespaceMap = { ...this.eventNamespaceMap, ...result.data.eventNamespaces };\n\n // Register the preprocessed schema\n this.register(result.data.schema);\n\n return {\n success: true,\n entitySharing: result.data.entitySharing,\n eventNamespaces: result.data.eventNamespaces,\n warnings: result.data.warnings,\n };\n }\n\n /**\n * Get entity sharing information for registered orbitals.\n * Useful for determining entity isolation and collection names.\n */\n getEntitySharing(): EntitySharingMap {\n return { ...this.entitySharingMap };\n }\n\n /**\n * Get event namespace mapping for registered orbitals.\n * Useful for debugging cross-orbital event routing.\n */\n getEventNamespaces(): EventNamespaceMap {\n return { ...this.eventNamespaceMap };\n }\n\n /**\n * Clear the preprocessing cache.\n */\n clearPreprocessCache(): void {\n this.preprocessedCache.clear();\n }\n\n /**\n * Register a single orbital\n */\n private async registerOrbitalAsync(orbital: OrbitalDefinition): Promise<void> {\n // Convert traits to TraitDefinition - filter to inline traits only (skip string refs)\n const inlineTraits = (orbital.traits || []).filter(isInlineTrait);\n const traitDefs: TraitDefinition[] = inlineTraits.map((t: Trait) => {\n const sm = t.stateMachine;\n const states = sm?.states || [];\n const transitions = sm?.transitions || [];\n\n return {\n name: t.name,\n states: states as TraitDefinition['states'],\n transitions: transitions as TraitDefinition['transitions'],\n listens: t.listens,\n };\n });\n\n const manager = new StateMachineManager(traitDefs);\n\n const entityRef = orbital.entity;\n const entity: Entity = typeof entityRef === 'string'\n ? { name: entityRef, fields: [] } // Fallback for string refs\n : entityRef;\n\n this.orbitals.set(orbital.name, {\n schema: orbital,\n entity,\n traits: inlineTraits,\n manager,\n entityData: new Map(),\n });\n\n // Seed entity instances from schema if they exist\n if (entity?.name && entity.instances && Array.isArray(entity.instances)) {\n const instances = entity.instances;\n if (instances.length > 0) {\n console.log(`[OrbitalRuntime] Seeding ${instances.length} instances for ${entity.name} from schema`);\n \n // Seed each instance (await to ensure they're created)\n const results = await Promise.all(\n instances.map(async (instance) => {\n try {\n const result = await this.persistence.create(entity.name, instance);\n console.log(`[OrbitalRuntime] Seeded instance: ${instance.id || 'no-id'}`);\n return result;\n } catch (err) {\n console.error(`[OrbitalRuntime] Failed to seed instance ${instance.id}:`, err);\n return null;\n }\n })\n );\n \n const successCount = results.filter(r => r !== null).length;\n console.log(`[OrbitalRuntime] Seeded ${successCount}/${instances.length} ${entity.name} instances from schema`);\n }\n } else if (this.config.mode === 'mock' && this.persistence instanceof MockPersistenceAdapter) {\n // Fall back to mock data generation if no instances defined\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] No instances in schema, generating mock data for ${entity?.name}`);\n }\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 if (this.config.debug) {\n console.log(`[OrbitalRuntime] Seeded mock data for entity: ${entity.name}, count: ${this.persistence.count(entity.name)}`);\n }\n }\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 * Register a single orbital (sync wrapper for backward compatibility)\n */\n private registerOrbital(orbital: OrbitalDefinition): void {\n // Create a synchronous version by using a promise that we don't await\n // For truly async registration, use the async register() method\n this.registerOrbitalAsync(orbital).catch((err) => {\n console.error(`[OrbitalRuntime] Failed to register orbital:`, err);\n });\n }\n\n /**\n * Set up event listeners for cross-orbital communication\n */\n private setupEventListeners(): void {\n // Clean up existing listeners\n for (const cleanup of this.listenerCleanups) {\n cleanup();\n }\n this.listenerCleanups = [];\n\n // For each orbital's traits with `listens`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.traits) {\n if (!trait.listens) continue;\n\n for (const listener of trait.listens) {\n 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 EventPayload)[key] = (\n event.payload as EventPayload\n )[field];\n } else {\n (mappedPayload as EventPayload)[key] = expr as string;\n }\n }\n }\n\n // Trigger the mapped event\n await this.processOrbitalEvent(orbitalName, {\n event: listener.triggers,\n payload: mappedPayload as EventPayload,\n });\n });\n\n this.listenerCleanups.push(cleanup);\n }\n }\n }\n }\n\n /**\n * Set up scheduled ticks for all traits\n */\n private setupTicks(): void {\n // Clean up existing ticks\n this.cleanupTicks();\n\n // For each orbital's traits with `ticks`\n for (const [orbitalName, registered] of this.orbitals) {\n for (const trait of registered.traits || []) {\n if (!trait.ticks || trait.ticks.length === 0) continue;\n\n for (const tick of trait.ticks) {\n this.registerTick(orbitalName, trait.name, tick, registered);\n }\n }\n }\n\n if (this.config.debug && this.tickBindings.length > 0) {\n 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.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: { [entityType: string]: EntityRow | EntityRow[] } = {};\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 // Clean up OS handlers (close file watchers, intervals, signal listeners)\n if (this.osHandlers) {\n this.osHandlers.cleanup();\n this.osHandlers = null;\n }\n }\n\n // ==========================================================================\n // 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: { [entityType: string]: EntityRow | EntityRow[] } = {};\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 EventPayload | undefined)?._activeTraits as string[] | undefined;\n // Remove _activeTraits from payload before processing (internal use only)\n const cleanPayload = payload ? { ...payload } : undefined;\n if (cleanPayload) {\n delete (cleanPayload as EventPayload & { _activeTraits?: unknown })._activeTraits;\n }\n\n // Get entity data if entityId provided\n let entityData: EntityRow = {};\n if (entityId) {\n const stored = await this.persistence.getById(\n registered.entity.name,\n entityId,\n );\n if (stored) {\n entityData = stored;\n }\n }\n\n // 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 // After all effects execute, auto-fetch entity types that have ref effects and were mutated\n const persistedTypes = new Set<string>();\n for (const er of effectResults) {\n if ((er.effect === 'persist' || er.effect === 'set' || er.effect === 'swap') && er.success && er.entityType) {\n persistedTypes.add(er.entityType as string);\n }\n }\n // Scan traits for ref effects to know which entity types are ref'd\n const refTypes = new Set<string>();\n for (const trait of registered.traits) {\n const transitions = trait.stateMachine?.transitions ?? [];\n for (const trans of transitions) {\n for (const eff of trans.effects ?? []) {\n if (Array.isArray(eff) && eff[0] === 'ref' && typeof eff[1] === 'string') {\n refTypes.add(eff[1]);\n }\n }\n }\n }\n // Only re-fetch entity types that were both mutated AND have ref subscribers\n for (const mutatedEntityType of persistedTypes) {\n if (refTypes.has(mutatedEntityType)) {\n try {\n const fresh = await this.persistence.list(mutatedEntityType);\n fetchedData[mutatedEntityType] = fresh;\n } catch { /* ignore */ }\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: EventPayload | undefined,\n entityData: EntityRow,\n entityId: string | undefined,\n emittedEvents: Array<{ event: string; payload?: unknown }>,\n fetchedData: { [entityType: string]: EntityRow | EntityRow[] },\n clientEffects: Array<unknown>,\n effectResults: EffectResult[],\n user?: OrbitalEventRequest[\"user\"],\n ): Promise<void> {\n const entityType = registered.entity.name;\n\n // Forward refs - assigned after construction, used by fetch/atomic handlers\n let bindingsRef: BindingContext | null = null;\n let contextRef: EffectContext | null = null;\n\n const handlers: EffectHandlers = {\n emit: (event, eventPayload) => {\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 as FieldValue });\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value: value as FieldValue },\n success: true,\n });\n } catch (err) {\n effectResults.push({\n effect: 'set',\n entityType,\n data: { id, field, value: value as FieldValue },\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n },\n\n persist: async (action, targetEntityType, data) => {\n // ----------------------------------------------------------------\n // Batch mode: [\"persist\", \"batch\", [...operations]]\n // Each operation: [\"create\", \"collection\", {...data}],\n // [\"update\", \"collection\", \"id\", {...data}],\n // [\"delete\", \"collection\", \"id\"]\n // ----------------------------------------------------------------\n if (action === 'batch') {\n const operations = (data as EntityRow | undefined)?.operations as unknown[] | undefined;\n if (!Array.isArray(operations) || operations.length === 0) {\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n success: false,\n error: 'Batch requires a non-empty operations array',\n });\n return;\n }\n\n const batchResults: Array<EntityRow> = [];\n // Track completed ops for rollback on failure (best-effort)\n const completed: Array<{ action: string; entityType: string; id?: string }> = [];\n let batchFailed = false;\n let batchError = '';\n\n for (const op of operations) {\n if (!Array.isArray(op) || op.length < 2) {\n batchFailed = true;\n batchError = `Invalid batch operation format: ${JSON.stringify(op)}`;\n break;\n }\n\n const [opAction, opEntityType, ...opRest] = op as [string, string, ...unknown[]];\n\n try {\n switch (opAction) {\n case 'create': {\n const createData = (opRest[0] as EntityRow) || {};\n const { id: newId } = await this.persistence.create(opEntityType, createData);\n batchResults.push({ action: 'create', entityType: opEntityType, id: newId, ...createData });\n completed.push({ action: 'create', entityType: opEntityType, id: newId });\n break;\n }\n case 'update': {\n const updateId = opRest[0] as string;\n const updateData = (opRest[1] as EntityRow) || {};\n await this.persistence.update(opEntityType, updateId, updateData);\n const updated = await this.persistence.getById(opEntityType, updateId);\n batchResults.push({ action: 'update', entityType: opEntityType, id: updateId, ...(updated || updateData) });\n completed.push({ action: 'update', entityType: opEntityType, id: updateId });\n break;\n }\n case 'delete': {\n const deleteId = opRest[0] as string;\n // Snapshot before delete for potential rollback info\n await this.persistence.delete(opEntityType, deleteId);\n batchResults.push({ action: 'delete', entityType: opEntityType, id: deleteId, deleted: true });\n completed.push({ action: 'delete', entityType: opEntityType, id: deleteId });\n break;\n }\n default:\n batchFailed = true;\n batchError = `Unknown batch operation action: ${opAction}`;\n break;\n }\n } catch (err) {\n batchFailed = true;\n batchError = `Batch operation [${opAction}, ${opEntityType}] failed: ${err instanceof Error ? err.message : String(err)}`;\n break;\n }\n\n if (batchFailed) break;\n }\n\n effectResults.push({\n effect: 'persist',\n action: 'batch',\n data: {\n operations: batchResults,\n completedCount: completed.length,\n totalCount: operations.length,\n },\n success: !batchFailed,\n ...(batchFailed ? { error: batchError } : {}),\n });\n return;\n }\n\n // ----------------------------------------------------------------\n // Single operation mode: create / update / delete\n // ----------------------------------------------------------------\n const type = targetEntityType || entityType;\n let resultData: EntityRow | undefined;\n\n try {\n // Validate relation cardinality before create/update\n if (action === 'create' || action === 'update') {\n this.validateRelationCardinality(type, data || {});\n }\n\n switch (action) {\n case \"create\": {\n const { id } = await this.persistence.create(type, data || {});\n resultData = { id, ...(data || {}) };\n break;\n }\n case \"update\":\n if (data?.id || entityId) {\n const updateId = (data?.id as string) || entityId!;\n await this.persistence.update(type, updateId, data || {});\n // Return the updated entity\n const updated = await this.persistence.getById(type, updateId);\n resultData = updated || { id: updateId, ...(data || {}) };\n }\n break;\n case \"delete\":\n if (data?.id || entityId) {\n const deleteId = (data?.id as string) || entityId!;\n // Enforce onDelete relation rules before deleting\n await this.enforceOnDeleteRules(type, deleteId);\n await this.persistence.delete(type, deleteId);\n resultData = { id: deleteId, deleted: true };\n }\n break;\n }\n\n 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 EntityRow | undefined,\n success: true,\n });\n\n return result;\n } catch (err) {\n effectResults.push({\n effect: 'call-service',\n action: `${service}.${action}`,\n success: false,\n error: err instanceof Error ? err.message : String(err),\n });\n return null;\n }\n },\n\n fetch: async (fetchEntityType, options) => {\n try {\n let result: EntityRow | EntityRow[] | null = null;\n\n if (options?.id) {\n // Single entity fetch\n const entity = await this.persistence.getById(fetchEntityType, options.id);\n if (entity) {\n // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations([entity], fetchEntityType, options.include);\n }\n // Always store as array for consistent access via FetchedDataContext\n fetchedData[fetchEntityType] = [entity];\n result = entity;\n }\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 // Populate relations if include specified\n if (options?.include && options.include.length > 0) {\n await this.populateRelations(entities, fetchEntityType, options.include);\n }\n\n fetchedData[fetchEntityType] = entities;\n result = entities;\n }\n\n // Sync fetched data into bindings so @EntityName.field resolves\n // in subsequent render-ui effects\n if (bindingsRef && result) {\n const records = Array.isArray(result) ? result : [result];\n if (records.length > 0) {\n const merged = Object.assign([...records], records[0]);\n bindingsRef[fetchEntityType] = merged;\n if (fetchEntityType === entityType) {\n bindingsRef.entity = merged;\n }\n }\n }\n\n return result;\n } catch (error) {\n console.error(`[OrbitalRuntime] Fetch error for ${fetchEntityType}:`, error);\n return null;\n }\n },\n\n // Resource operators: ref, deref, swap, watch, atomic\n\n ref: async (refEntityType, options) => {\n // ref is identical to fetch on the server: query persistence, populate fetchedData\n try {\n return await handlers.fetch!(refEntityType, options);\n } catch (error) {\n console.error(`[OrbitalRuntime] ref error for ${refEntityType}:`, error);\n return null;\n }\n },\n\n deref: async (derefEntityType, options) => {\n // deref is identical to fetch on the server: one-shot read\n try {\n let result: EntityRow | EntityRow[] | null = null;\n\n if (options?.id) {\n const entity = await this.persistence.getById(derefEntityType, options.id);\n if (entity) {\n fetchedData[derefEntityType] = [entity];\n result = entity;\n }\n } else {\n const entities = await this.persistence.list(derefEntityType);\n fetchedData[derefEntityType] = entities;\n result = entities;\n }\n\n // Sync into bindings like fetch does\n if (bindingsRef && result) {\n const records = Array.isArray(result) ? result : [result];\n if (records.length > 0) {\n const merged = Object.assign([...records], records[0]);\n bindingsRef[derefEntityType] = merged;\n if (derefEntityType === entityType) {\n bindingsRef.entity = merged;\n }\n }\n }\n\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: true,\n });\n\n return result;\n } catch (error) {\n effectResults.push({\n effect: 'deref',\n entityType: derefEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n swap: async (swapEntityType, swapEntityId, transform) => {\n // Read-modify-write: read entity, apply transform S-expression, write back\n try {\n const current = await this.persistence.getById(swapEntityType, swapEntityId);\n if (!current) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: `Entity ${swapEntityType}/${swapEntityId} not found`,\n });\n return null;\n }\n\n // Evaluate the transform S-expression with @current binding\n const ctx = createContextFromBindings({\n current,\n entity: entityData,\n payload,\n });\n\n let newData: EntityRow;\n if (Array.isArray(transform)) {\n // S-expression transform: evaluate with @current bound to the entity\n const result = evaluate(\n transform as Parameters<typeof evaluate>[0],\n ctx,\n );\n // The result should be a record (the transformed entity)\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n newData = result as EntityRow;\n } else {\n // If transform returned a non-object, treat it as a partial update\n newData = current;\n }\n } else if (typeof transform === 'object' && transform !== null) {\n // Plain object merge: simple field updates\n newData = { ...current, ...(transform as EntityRow) };\n } else {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: 'swap! transform must be an S-expression or object',\n });\n return null;\n }\n\n // Write back (without version check for now, full OCC in future pass)\n await this.persistence.update(swapEntityType, swapEntityId, newData);\n\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n data: { id: swapEntityId, ...newData },\n success: true,\n });\n\n return newData;\n } catch (error) {\n effectResults.push({\n effect: 'swap',\n entityType: swapEntityType,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n },\n\n watch: (_watchEntityType, _watchOptions) => {\n // Watch is a no-op on server. Client subscribes to real-time updates.\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] watch is a no-op on server: ${_watchEntityType}`);\n }\n },\n\n atomic: async (atomicEffects) => {\n // Execute inner effects sequentially. If any fails, mark all as failed.\n // Full transaction/rollback support is a future enhancement.\n let atomicFailed = false;\n let atomicError = '';\n\n const atomicExecutor = new EffectExecutor({\n handlers,\n bindings: bindingsRef ?? {},\n context: contextRef ?? { traitName, state: 'unknown', transition: 'unknown' },\n debug: this.config.debug,\n });\n\n for (const innerEffect of atomicEffects) {\n if (atomicFailed) break;\n try {\n await atomicExecutor.execute(innerEffect);\n } catch (err) {\n atomicFailed = true;\n atomicError = err instanceof Error ? err.message : String(err);\n }\n }\n\n if (atomicFailed) {\n // Mark the atomic block as failed\n effectResults.push({\n effect: 'atomic',\n success: false,\n error: `Atomic block failed: ${atomicError}`,\n });\n } else {\n effectResults.push({\n effect: 'atomic',\n success: true,\n data: { innerCount: atomicEffects.length },\n });\n }\n },\n\n // Client-side effects - collect for forwarding to client\n renderUI: (slot, pattern, props, priority) => {\n 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 // Build binding context with @entity AND @EntityName aliases.\n // @entity is the standard binding root. @EntityName (e.g., @SpriteEntity)\n // is used by some behaviors for explicit entity references in render-ui patterns.\n // The compiled app resolves @EntityName at compile time; the interpreter\n // needs it in the runtime binding context.\n //\n // NOTE: fetchedData is populated by fetch effects DURING execution.\n // The syncFetchedBindings() helper is called from the fetch handler\n // to update bindings after each fetch, so render-ui effects that\n // run after fetch see the correct @EntityName.field values.\n const bindings: BindingContext = {\n entity: entityData,\n payload,\n state: state?.currentState || \"unknown\",\n user, // @user bindings from Firebase auth\n };\n\n // Add initial named entity binding\n if (entityType) {\n bindings[entityType] = entityData;\n }\n\n // Wire forward refs so fetch/atomic handlers can access bindings and context\n bindingsRef = bindings;\n\n const context: EffectContext = {\n traitName,\n state: state?.currentState || \"unknown\",\n transition: \"unknown\",\n entityId,\n };\n contextRef = context;\n\n const executor = new EffectExecutor({\n handlers,\n bindings,\n context,\n debug: this.config.debug,\n });\n\n await executor.executeAll(effects);\n }\n\n // ==========================================================================\n // Relation Population\n // ==========================================================================\n\n /**\n * Populate relation fields on entities\n *\n * For each field in `include`, find the relation field configuration and\n * fetch the related entity, attaching it to the parent entity.\n *\n * @param entities - Entities to populate\n * @param entityType - Entity type name\n * @param include - Relation field names to populate\n */\n /**\n * Validate that relation field values match their declared cardinality.\n * Called before create/update to ensure data integrity.\n */\n private validateRelationCardinality(\n entityType: string,\n data: EntityRow,\n ): void {\n // Find the entity schema\n for (const [, registered] of this.orbitals) {\n if (registered.entity.name !== entityType) continue;\n\n for (const field of registered.entity.fields ?? []) {\n if (field.type !== 'relation') continue;\n const value = data[field.name];\n if (value === undefined || value === null) continue;\n\n const cardinality = field.relation?.cardinality || 'one';\n\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n // Single cardinality: value must be a string, not an array\n if (Array.isArray(value)) {\n throw new Error(\n `Cardinality violation: ${entityType}.${field.name} has cardinality '${cardinality}' but received an array. Expected a single string ID.`\n );\n }\n } else if (cardinality === 'many' || cardinality === 'many-to-many' || cardinality === 'one-to-many') {\n // Many cardinality: value must be an array of strings\n if (typeof value === 'string') {\n // Auto-correct: wrap single string in array (permissive)\n data[field.name] = [value];\n } else if (Array.isArray(value)) {\n // Validate all elements are strings\n const nonStrings = value.filter((v: unknown) => typeof v !== 'string');\n if (nonStrings.length > 0) {\n throw new Error(\n `Cardinality violation: ${entityType}.${field.name} has cardinality '${cardinality}' but array contains non-string values.`\n );\n }\n }\n }\n }\n break;\n }\n }\n\n /**\n * Enforce onDelete rules for relation fields pointing to the entity being deleted.\n * Scans all registered entities for relation fields targeting the given entity type,\n * finds records referencing the ID being deleted, and applies cascade/nullify/restrict.\n */\n private async enforceOnDeleteRules(\n entityType: string,\n deletedId: string,\n ): Promise<void> {\n for (const [, registered] of this.orbitals) {\n const entity = registered.entity;\n const fields = entity.fields ?? [];\n\n for (const field of fields) {\n if (field.type !== 'relation') continue;\n if (field.relation?.entity !== entityType) continue;\n\n const onDelete = field.relation.onDelete || 'restrict';\n const referringEntityType = entity.name;\n\n // Find all records in the referring entity that reference the deleted ID\n const allRecords = await this.persistence.list(referringEntityType);\n const affectedRecords = allRecords.filter(record => {\n const fkValue = record[field.name];\n if (typeof fkValue === 'string') return fkValue === deletedId;\n if (Array.isArray(fkValue)) return fkValue.includes(deletedId);\n return false;\n });\n\n if (affectedRecords.length === 0) continue;\n\n switch (onDelete) {\n case 'restrict':\n throw new Error(\n `Cannot delete ${entityType} ${deletedId}: ${affectedRecords.length} ${referringEntityType} record(s) reference it via ${field.name}. Rule: restrict.`\n );\n\n case 'cascade':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId) {\n await this.persistence.delete(referringEntityType, recordId);\n }\n }\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Cascade deleted ${affectedRecords.length} ${referringEntityType} records`);\n }\n break;\n\n case 'nullify':\n for (const record of affectedRecords) {\n const recordId = record.id as string;\n if (recordId) {\n const update: EntityRow = {};\n const fkValue = record[field.name];\n if (Array.isArray(fkValue)) {\n update[field.name] = fkValue.filter((id: unknown) => id !== deletedId);\n } else {\n update[field.name] = null;\n }\n await this.persistence.update(referringEntityType, recordId, update);\n }\n }\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Nullified ${field.name} on ${affectedRecords.length} ${referringEntityType} records`);\n }\n break;\n }\n }\n }\n }\n\n private async populateRelations(\n entities: EntityRow[],\n entityType: string,\n include: string[],\n depth: number = 0,\n visited: Set<string> = new Set(),\n ): Promise<void> {\n // Circular reference protection: stop if depth exceeded or entity type already visited\n const maxDepth = 2;\n if (depth >= maxDepth || visited.has(entityType)) {\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Skipping populateRelations for ${entityType}: depth=${depth}, visited=${visited.has(entityType)}`);\n }\n return;\n }\n visited.add(entityType);\n // Find the orbital that owns this entity type\n let entityFields: Array<{ name: string; type: string; relation?: { entity?: string; cardinality?: string; onDelete?: string } }> | undefined;\n\n for (const [, registered] of this.orbitals) {\n if (registered.entity.name === entityType) {\n entityFields = registered.entity.fields;\n break;\n }\n }\n\n if (!entityFields) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No entity definition found for ${entityType}`);\n }\n return;\n }\n\n // Process each include field\n for (const includeField of include) {\n // Find the relation field (check both \"fieldName\" and \"fieldNameId\" patterns)\n const relationField = entityFields.find(f => {\n if (f.type !== 'relation') return false;\n // Match \"company\" against \"company\" or \"companyId\"\n return f.name === includeField ||\n f.name === `${includeField}Id` ||\n f.name.replace(/Id$/, '') === includeField;\n });\n\n if (!relationField?.relation?.entity) {\n if (this.config.debug) {\n console.warn(`[OrbitalRuntime] No relation field found for '${includeField}' on ${entityType}`);\n }\n continue;\n }\n\n const foreignKeyField = relationField.name;\n const relatedEntityType = relationField.relation.entity;\n const cardinality = relationField.relation.cardinality || 'one';\n\n // Collect all foreign key IDs to batch fetch\n // Handles both single ID (string) and array of IDs (string[]) for many cardinalities\n const foreignKeyIds = new Set<string>();\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n if (fkValue && typeof fkValue === 'string') {\n foreignKeyIds.add(fkValue);\n } else if (Array.isArray(fkValue)) {\n for (const id of fkValue) {\n if (id && typeof id === 'string') {\n foreignKeyIds.add(id);\n }\n }\n }\n }\n\n if (foreignKeyIds.size === 0) continue;\n\n // Batch fetch all related entities\n const relatedEntities = new Map<string, EntityRow>();\n for (const fkId of foreignKeyIds) {\n try {\n const related = await this.persistence.getById(relatedEntityType, fkId);\n if (related) {\n relatedEntities.set(fkId, related);\n }\n } catch (error) {\n if (this.config.debug) {\n console.error(`[OrbitalRuntime] Error fetching related ${relatedEntityType}:`, error);\n }\n }\n }\n\n // Attach related entities to parent entities\n // Use the base name without \"Id\" suffix for the populated field\n const populatedFieldName = includeField.endsWith('Id')\n ? includeField.slice(0, -2)\n : includeField;\n\n for (const entity of entities) {\n const fkValue = entity[foreignKeyField];\n // Population attaches related EntityRow objects to the entity at runtime.\n // This mutates beyond the EntityRow type, so we use Object.defineProperty.\n if (cardinality === 'one' || cardinality === 'many-to-one') {\n if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n Object.defineProperty(entity, populatedFieldName, {\n value: relatedEntities.get(fkValue),\n writable: true, enumerable: true, configurable: true,\n });\n }\n } else {\n if (Array.isArray(fkValue)) {\n const fkIds = (fkValue as string[]).filter((id): id is string => typeof id === 'string');\n Object.defineProperty(entity, populatedFieldName, {\n value: fkIds.map(id => relatedEntities.get(id)).filter(Boolean),\n writable: true, enumerable: true, configurable: true,\n });\n } else if (typeof fkValue === 'string' && relatedEntities.has(fkValue)) {\n Object.defineProperty(entity, populatedFieldName, {\n value: [relatedEntities.get(fkValue)],\n writable: true, enumerable: true, configurable: true,\n });\n }\n }\n }\n\n if (this.config.debug) {\n console.log(`[OrbitalRuntime] Populated '${populatedFieldName}' on ${entities.length} ${entityType} entities`);\n }\n }\n }\n\n // ==========================================================================\n // Express Router\n // ==========================================================================\n\n /**\n * Create Express router for orbital API endpoints\n *\n * All data access goes through trait events with guards.\n * No direct CRUD routes - use events with `fetch` effects.\n *\n * Routes:\n * - GET / - List registered orbitals\n * - GET /:orbital - Get orbital info and current states\n * - POST /:orbital/events - Send event to orbital (includes data from `fetch` effects)\n */\n router(): 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.entity?.name,\n traits: (reg.traits || []).map((t) => t.name),\n }),\n );\n res.json({ success: true, orbitals });\n });\n\n // Get orbital info\n router.get(\"/:orbital\", (req: Request, res: Response) => {\n const orbitalName = req.params.orbital as string;\n const registered = this.orbitals.get(orbitalName);\n if (!registered) {\n res.status(404).json({ success: false, error: \"Orbital not found\" });\n return;\n }\n\n const states: Record<string, string> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state.currentState;\n }\n\n res.json({\n success: true,\n orbital: {\n name: orbitalName,\n entity: registered.entity,\n traits: registered.traits.map((t) => ({\n name: t.name,\n currentState: states[t.name],\n states: (t.stateMachine?.states || []).map((s) => s.name),\n events: [...new Set((t.stateMachine?.transitions || []).map((tr) => tr.event))],\n })),\n },\n });\n });\n\n // Send event to orbital - this is the ONLY data access point\n // All reads go through `fetch` effects with guard enforcement\n // All writes go through `persist` effects with guard enforcement\n router.post(\n \"/:orbital/events\",\n async (req: Request, res: Response, next: NextFunction) => {\n try {\n const orbitalName = req.params.orbital as string;\n // Extract user from request (set by authenticateFirebase middleware)\n const firebaseUser = (req as Request & { firebaseUser?: OrbitalEventRequest[\"user\"] }).firebaseUser;\n const user = firebaseUser ? {\n ...firebaseUser,\n displayName: (firebaseUser.name as string | undefined) ?? firebaseUser.displayName,\n } : undefined;\n\n const result = await this.processOrbitalEvent(orbitalName, {\n ...req.body,\n user,\n });\n res.json(result);\n } catch (error) {\n next(error);\n }\n },\n );\n\n // No direct CRUD routes - all data access goes through events\n // This ensures guards are always evaluated for both reads and writes\n\n return router;\n }\n\n // ==========================================================================\n // Direct API (for programmatic use)\n // ==========================================================================\n\n /**\n * Get the event bus for manual event emission\n */\n getEventBus(): EventBus {\n return this.eventBus;\n }\n\n /**\n * Get state for a specific orbital/trait\n */\n getState(\n orbitalName: string,\n traitName?: string,\n ): TraitState | Record<string, TraitState> | undefined {\n const registered = this.orbitals.get(orbitalName);\n if (!registered) return undefined;\n\n if (traitName) {\n return registered.manager.getState(traitName);\n }\n\n // Return all states for the orbital\n const states: Record<string, TraitState> = {};\n for (const [name, state] of registered.manager.getAllStates()) {\n states[name] = state;\n }\n return states;\n }\n\n /**\n * List registered orbitals\n */\n listOrbitals(): string[] {\n return Array.from(this.orbitals.keys());\n }\n\n /**\n * Check if an orbital is registered\n */\n hasOrbital(name: string): boolean {\n return this.orbitals.has(name);\n }\n\n /**\n * Get information about active ticks\n */\n getActiveTicks(): Array<{\n orbital: string;\n trait: string;\n tick: string;\n interval: number | string;\n hasGuard: boolean;\n }> {\n return this.tickBindings.map((binding) => ({\n orbital: binding.orbitalName,\n trait: binding.traitName,\n tick: binding.tick.name,\n interval: binding.tick.interval,\n hasGuard: !!binding.tick.guard,\n }));\n }\n}\n\n/**\n * Factory function to create a runtime instance\n */\nexport function createOrbitalServerRuntime(\n config?: OrbitalServerRuntimeConfig,\n): OrbitalServerRuntime {\n return new OrbitalServerRuntime(config);\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { B as BindingContext, P as PatternProps, E as EffectHandlers, a as EffectContext, b as ExecutionEnvironment, c as EffectResult, T as TraitDefinition } from './types-DYcUvi4H.js';
2
2
  export { d as Effect, e as EventListener, H as HANDLER_MANIFEST, I as IEventBus, R as RuntimeConfig, f as RuntimeEvent, g as TraitState, h as TransitionObserver, i as TransitionResult, U as Unsubscribe } from './types-DYcUvi4H.js';
3
- export { E as EntitySharingMap, a as EventBus, b as EventNamespaceMap, O as OrbitalEventRequest, c as OrbitalEventResponse, d as OrbitalServerRuntimeConfig, P as PersistenceAdapter, e as PreprocessOptions, f as PreprocessResult, g as PreprocessedSchema, h as ProcessEventOptions, R as RegisteredOrbital, i as RuntimeOrbital, j as RuntimeOrbitalSchema, k as RuntimeTrait, S as StateMachineManager, l as createInitialTraitState, m as findInitialState, n as findTransition, o as getIsolatedCollectionName, p as getNamespacedEvent, q as isNamespacedEvent, r as normalizeEventKey, s as parseNamespacedEvent, t as preprocessSchema, u as processEvent } from './OrbitalServerRuntime-B-QeKtKd.js';
3
+ export { E as EntitySharingMap, a as EventBus, b as EventNamespaceMap, O as OrbitalEventRequest, c as OrbitalEventResponse, d as OrbitalServerRuntimeConfig, P as PersistenceAdapter, e as PreprocessOptions, f as PreprocessResult, g as PreprocessedSchema, h as ProcessEventOptions, R as RegisteredOrbital, i as RuntimeOrbital, j as RuntimeOrbitalSchema, k as RuntimeTrait, S as StateMachineManager, l as createInitialTraitState, m as findInitialState, n as findTransition, o as getIsolatedCollectionName, p as getNamespacedEvent, q as isNamespacedEvent, r as normalizeEventKey, s as parseNamespacedEvent, t as preprocessSchema, u as processEvent } from './OrbitalServerRuntime-BlR7TM23.js';
4
4
  import { EvaluationContext } from '@almadar/evaluator';
5
5
  export { EvaluationContext, createMinimalContext } from '@almadar/evaluator';
6
6
  import { EventPayload, EntityRow } from '@almadar/core';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/runtime",
3
- "version": "2.6.0",
3
+ "version": "2.6.2",
4
4
  "description": "Interpreted runtime for Almadar orbital applications (OrbitalServerRuntime)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -53,7 +53,7 @@
53
53
  "vitest": "^2.1.0",
54
54
  "eslint": "10.0.0",
55
55
  "@typescript-eslint/parser": "8.56.0",
56
- "@almadar/eslint-plugin": ">=2.3.0"
56
+ "@almadar/eslint-plugin": ">=2.7.0"
57
57
  },
58
58
  "repository": {
59
59
  "type": "git",