@almadar/runtime 6.50.0 → 6.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { Router } from 'express';
2
- import { I as IEventBus, R as RuntimeEvent, a as EventListener, U as Unsubscribe, T as TraitDefinition, b as RuntimeConfig, c as TransitionObserver, d as TraitState, C as ConfigContext, e as TransitionResult, f as EvaluationContextExtensions, E as EffectHandlers } from './types-CL03tjGU.js';
2
+ import { I as IEventBus, R as RuntimeEvent, a as EventListener, U as Unsubscribe, T as TraitDefinition, b as RuntimeConfig, c as TransitionObserver, d as TraitState, C as ConfigContext, e as TransitionResult, f as EvaluationContextExtensions, E as EffectHandlers } from './types-BcPORH_x.js';
3
3
  import { EventPayload, EventId, EntityRow, UserContext, Orbital, ServiceCallResult, TraitConfig, DeclaredTraitConfig, Entity, OrbitalSchema, Trait, PatternConfig, ResolvedPatternProps, SExpr, BusEventSource, RawUserClaims, OrbitalDefinition, TraitTick } from '@almadar/core';
4
4
 
5
5
  /**
@@ -1,4 +1,4 @@
1
1
  import 'express';
2
- export { F as ClientEffectTuple, G as ClientNavigateTuple, H as ClientNotifyTuple, J as ClientRenderUITuple, K as EffectResult, e as InMemoryPersistence, M as LiveBroadcastItem, N as LoaderConfig, O as OrbitalEventRequest, f as OrbitalEventResponse, Q as OrbitalServerRuntime, g as OrbitalServerRuntimeConfig, P as PersistenceAdapter, R as RegisteredOrbital, l as RuntimeOrbital, m as RuntimeOrbitalSchema, n as RuntimeTrait, T as RuntimeTraitTick, p as collectDeclaredConfigDefaults, V as createOrbitalServerRuntime } from './OrbitalServerRuntime-DD9FKDpN.js';
3
- import './types-CL03tjGU.js';
2
+ export { F as ClientEffectTuple, G as ClientNavigateTuple, H as ClientNotifyTuple, J as ClientRenderUITuple, K as EffectResult, e as InMemoryPersistence, M as LiveBroadcastItem, N as LoaderConfig, O as OrbitalEventRequest, f as OrbitalEventResponse, Q as OrbitalServerRuntime, g as OrbitalServerRuntimeConfig, P as PersistenceAdapter, R as RegisteredOrbital, l as RuntimeOrbital, m as RuntimeOrbitalSchema, n as RuntimeTrait, T as RuntimeTraitTick, p as collectDeclaredConfigDefaults, V as createOrbitalServerRuntime } from './OrbitalServerRuntime-DRvduqA7.js';
3
+ import './types-BcPORH_x.js';
4
4
  import '@almadar/core';
@@ -1,14 +1,14 @@
1
- import { createTickScheduler, EventBus, createUnifiedLoader, MockPersistenceAdapter, InMemoryPersistence, preprocessSchema, normalizeCallSiteConfigToValues, StateMachineManager, parseDurationString, validateEventPayload, formatPayloadValidationError, collectDeclaredConfigDefaults, collectDeclaredEntityDefaults, EffectExecutor } from './chunk-3FYWURKS.js';
2
- export { InMemoryPersistence, collectDeclaredConfigDefaults } from './chunk-3FYWURKS.js';
1
+ import { createTickScheduler, EventBus, createUnifiedLoader, MockPersistenceAdapter, InMemoryPersistence, preprocessSchema, normalizeCallSiteConfigToValues, StateMachineManager, parseDurationString, validateEventPayload, formatPayloadValidationError, collectDeclaredConfigDefaults, collectDeclaredEntityDefaults, EffectExecutor } from './chunk-EHFQOBQH.js';
2
+ export { InMemoryPersistence, collectDeclaredConfigDefaults } from './chunk-EHFQOBQH.js';
3
3
  import { isValidCronExpression } from './chunk-OU3ITB5S.js';
4
- import { createContextFromBindings, resolveCallSitePayloadCaptures, applyRowAccess, checkMutationAccess, accessDeniedMessage } from './chunk-XLMDWRMB.js';
4
+ import { createContextFromBindings, resolveCallSitePayloadCaptures, applyRowAccess, checkMutationAccess, accessDeniedMessage } from './chunk-ORBJ5YEQ.js';
5
5
  import './chunk-T4VDAB4C.js';
6
6
  import './chunk-SCRAHWOC.js';
7
7
  import './chunk-MLKGABMK.js';
8
8
  import { createLogger } from '@almadar/logger';
9
9
  import * as nodeModule from 'module';
10
10
  import { evaluateListenPayloadExpr, evaluateGuard, evaluate } from '@almadar/evaluator';
11
- import { DEFAULT_VIEWER, buildResolvedTraitConfigs, isInlineTrait, isEntityCall, applyListenPayloadMapping, personaFromIdentityRow, normalizeUserContext, isRuntimeEntity } from '@almadar/core';
11
+ import { DEFAULT_VIEWER, buildResolvedTraitConfigs, isInlineTrait, isEntityCall, applyListenPayloadMapping, personaFromIdentityRow, normalizeUserContext, isRuntimeEntity, isPageReference } from '@almadar/core';
12
12
  import { ownerFieldsFromSchema, identityEntityName, entityAccessPolicies } from '@almadar/core/mock';
13
13
 
14
14
  // src/identity/routing.ts
@@ -79,6 +79,22 @@ function needsPreprocessing(schema) {
79
79
  }
80
80
  return false;
81
81
  }
82
+ function inlineNavItems(pages) {
83
+ const items = [];
84
+ for (const page of pages) {
85
+ if (isPageReference(page)) continue;
86
+ const p = page;
87
+ if (typeof p.path === "string" && typeof p.name === "string") {
88
+ items.push({ href: p.path, label: p.name });
89
+ }
90
+ }
91
+ return items;
92
+ }
93
+ function themeDataKey(theme) {
94
+ if (theme === void 0) return "";
95
+ if (typeof theme === "string") return theme;
96
+ return theme.name;
97
+ }
82
98
  var OrbitalServerRuntime = class {
83
99
  orbitals = /* @__PURE__ */ new Map();
84
100
  eventBus;
@@ -1699,6 +1715,14 @@ var OrbitalServerRuntime = class {
1699
1715
  ...callSiteOverride ?? {}
1700
1716
  };
1701
1717
  }
1718
+ const sigilPages = inlineNavItems(registered.schema.pages);
1719
+ if (sigilPages.length > 0) {
1720
+ bindings.pages = sigilPages;
1721
+ }
1722
+ const sigilTheme = themeDataKey(registered.schema.theme);
1723
+ if (sigilTheme) {
1724
+ bindings.currentTheme = sigilTheme;
1725
+ }
1702
1726
  const entityFieldDefaults = collectDeclaredEntityDefaults(registered.entity);
1703
1727
  const traitFieldState = registered.traitFieldStates.get(this.sharedFieldKey(registered, traitName));
1704
1728
  if (entityFieldDefaults || traitFieldState) {
@@ -1,4 +1,4 @@
1
- import { I as IEventBus } from './types-CL03tjGU.js';
1
+ import { I as IEventBus } from './types-BcPORH_x.js';
2
2
  import { EventPayload } from '@almadar/core';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  import { parseCron, cronMinuteKey, cronMatches } from './chunk-OU3ITB5S.js';
2
- import { createContextFromBindings, interpolateValue, deferEntityBindings } from './chunk-XLMDWRMB.js';
2
+ import { createContextFromBindings, interpolateValue, deferEntityBindings } from './chunk-ORBJ5YEQ.js';
3
3
  import { seedRandom, randomArrayElement, randomInt, shuffleArray, randomPastDate } from './chunk-T4VDAB4C.js';
4
4
  import { collectTraitRefsFromValue, collectTraitRefsFromEffects } from './chunk-SCRAHWOC.js';
5
5
  import { createLogger, setNamespaceLevel } from '@almadar/logger';
@@ -4579,12 +4579,13 @@ async function preprocessSchema(schema, options) {
4579
4579
  design: resolvedOrbital.original.design,
4580
4580
  // Gap #22: pass through auxiliary entities so OrbitalServerRuntime's
4581
4581
  // mock-seed branch registers SearchResult / FilterTarget / PagedItem
4582
- // alongside the molecule's primary entity. Without this, an inlined
4583
- // .orb that has `auxiliaryEntities` populated by the Rust inline
4584
- // phase still loses them here, and `(set @entity.searchTerm ...)` /
4585
- // `(fetch SearchResult ...)` from no-rebind imports hit unregistered
4586
- // persistence and silently no-op.
4587
- auxiliaryEntities: resolvedOrbital.original.auxiliaryEntities
4582
+ // alongside the molecule's primary entity and DERIVE them for
4583
+ // no-rebind imported traits. L1-emitted registry .orbs carry no
4584
+ // auxiliaryEntities (only the Rust inline phase adds them, and the
4585
+ // runtime path never runs it), so a trait imported without `-> Entity`
4586
+ // stays bound to its atom's own entity while that entity was never
4587
+ // registered or seeded here — hard zero rows.
4588
+ auxiliaryEntities: deriveAuxiliaryEntities(resolvedOrbital)
4588
4589
  };
4589
4590
  preprocessedOrbitals.push(preprocessedOrbital);
4590
4591
  }
@@ -4602,6 +4603,25 @@ async function preprocessSchema(schema, options) {
4602
4603
  }
4603
4604
  };
4604
4605
  }
4606
+ function deriveAuxiliaryEntities(resolvedOrbital) {
4607
+ const combined = [...resolvedOrbital.original.auxiliaryEntities ?? []];
4608
+ const seen = /* @__PURE__ */ new Set([resolvedOrbital.entity.name]);
4609
+ for (const aux of combined) {
4610
+ if (typeof aux !== "string" && "name" in aux && typeof aux.name === "string") {
4611
+ seen.add(aux.name);
4612
+ }
4613
+ }
4614
+ for (const rt of resolvedOrbital.traits) {
4615
+ if (rt.source.type !== "imported" || rt.linkedEntity) continue;
4616
+ const imported = resolvedOrbital.imports.orbitals.get(rt.source.alias);
4617
+ const entity = imported?.orbital?.entity;
4618
+ if (!entity || typeof entity === "string" || !("fields" in entity) || !entity.name) continue;
4619
+ if (seen.has(entity.name)) continue;
4620
+ seen.add(entity.name);
4621
+ combined.push(entity);
4622
+ }
4623
+ return combined.length > 0 ? combined : void 0;
4624
+ }
4605
4625
  function getIsolatedCollectionName(orbitalName, entitySharing) {
4606
4626
  const info = entitySharing[orbitalName];
4607
4627
  if (!info) {
@@ -170,6 +170,15 @@ function interpolateString(value, ctx) {
170
170
  inFlightConfigRecursions.delete(value);
171
171
  }
172
172
  }
173
+ if (value.startsWith("@config.") && typeof resolved === "string" && resolved.startsWith("@") && isPureBinding(resolved) && !isClientOnlyBinding(resolved) && !inFlightConfigRecursions.has(value)) {
174
+ inFlightConfigRecursions.add(value);
175
+ try {
176
+ bindLog.debug("resolve:config-default-binding", { binding: value, resolvesTo: resolved });
177
+ return interpolateString(resolved, ctx);
178
+ } finally {
179
+ inFlightConfigRecursions.delete(value);
180
+ }
181
+ }
173
182
  return resolved;
174
183
  }
175
184
  if (value.includes("@")) {
@@ -283,6 +292,12 @@ function createContextFromBindings(bindings, strictBindings, contextExtensions)
283
292
  if (bindings.user) {
284
293
  ctx.user = bindings.user;
285
294
  }
295
+ if (bindings.pages) {
296
+ ctx.pages = bindings.pages;
297
+ }
298
+ if (bindings.currentTheme) {
299
+ ctx.currentTheme = bindings.currentTheme;
300
+ }
286
301
  if (bindings.locals) {
287
302
  ctx.locals = bindings.locals;
288
303
  }
@@ -1,4 +1,4 @@
1
- import { E as EffectHandlers } from './types-CL03tjGU.js';
1
+ import { E as EffectHandlers } from './types-BcPORH_x.js';
2
2
  import { EventPayload } from '@almadar/core';
3
3
 
4
4
  /**
@@ -1,2 +1,2 @@
1
- export { accessDeniedMessage, applyRowAccess, checkMutationAccess } from './chunk-XLMDWRMB.js';
1
+ export { accessDeniedMessage, applyRowAccess, checkMutationAccess } from './chunk-ORBJ5YEQ.js';
2
2
  import './chunk-MLKGABMK.js';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { g as RuntimePatternValue, B as BindingContext, f as EvaluationContextExtensions, P as PatternProps, E as EffectHandlers, h as EffectContext, i as ExecutionEnvironment, j as EffectResult, T as TraitDefinition } from './types-CL03tjGU.js';
2
- export { k as BrowserFileMeta, l as BrowserFilePickerOptions, m as BrowserGeolocationOptions, n as BrowserGeolocationPosition, C as ConfigContext, o as Effect, a as EventListener, H as HANDLER_MANIFEST, I as IEventBus, b as RuntimeConfig, R as RuntimeEvent, d as TraitState, c as TransitionObserver, e as TransitionResult, U as Unsubscribe } from './types-CL03tjGU.js';
3
- import { U as UnifiedLoaderOptions, S as SchemaLoader, I as ImportChainLike, L as LoadResult, a as LoadedSchema, b as LoadedOrbital, P as PersistenceAdapter } from './OrbitalServerRuntime-DD9FKDpN.js';
4
- export { E as EntitySharingMap, c as EventBus, d as EventNamespaceMap, e as InMemoryPersistence, O as OrbitalEventRequest, f as OrbitalEventResponse, g as OrbitalServerRuntimeConfig, h as PreprocessOptions, i as PreprocessResult, j as PreprocessedSchema, k as ProcessEventOptions, R as RegisteredOrbital, l as RuntimeOrbital, m as RuntimeOrbitalSchema, n as RuntimeTrait, o as StateMachineManager, p as collectDeclaredConfigDefaults, q as collectDeclaredEntityDefaults, r as createInitialTraitState, s as findInitialState, t as findTransition, u as getIsolatedCollectionName, v as getNamespacedEvent, w as isBrowser, x as isElectron, y as isNamespacedEvent, z as isNode, A as normalizeEventKey, B as parseNamespacedEvent, C as preprocessSchema, D as processEvent } from './OrbitalServerRuntime-DD9FKDpN.js';
1
+ import { g as RuntimePatternValue, B as BindingContext, f as EvaluationContextExtensions, P as PatternProps, E as EffectHandlers, h as EffectContext, i as ExecutionEnvironment, j as EffectResult, T as TraitDefinition } from './types-BcPORH_x.js';
2
+ export { k as BrowserFileMeta, l as BrowserFilePickerOptions, m as BrowserGeolocationOptions, n as BrowserGeolocationPosition, C as ConfigContext, o as Effect, a as EventListener, H as HANDLER_MANIFEST, I as IEventBus, b as RuntimeConfig, R as RuntimeEvent, d as TraitState, c as TransitionObserver, e as TransitionResult, U as Unsubscribe } from './types-BcPORH_x.js';
3
+ import { U as UnifiedLoaderOptions, S as SchemaLoader, I as ImportChainLike, L as LoadResult, a as LoadedSchema, b as LoadedOrbital, P as PersistenceAdapter } from './OrbitalServerRuntime-DRvduqA7.js';
4
+ export { E as EntitySharingMap, c as EventBus, d as EventNamespaceMap, e as InMemoryPersistence, O as OrbitalEventRequest, f as OrbitalEventResponse, g as OrbitalServerRuntimeConfig, h as PreprocessOptions, i as PreprocessResult, j as PreprocessedSchema, k as ProcessEventOptions, R as RegisteredOrbital, l as RuntimeOrbital, m as RuntimeOrbitalSchema, n as RuntimeTrait, o as StateMachineManager, p as collectDeclaredConfigDefaults, q as collectDeclaredEntityDefaults, r as createInitialTraitState, s as findInitialState, t as findTransition, u as getIsolatedCollectionName, v as getNamespacedEvent, w as isBrowser, x as isElectron, y as isNamespacedEvent, z as isNode, A as normalizeEventKey, B as parseNamespacedEvent, C as preprocessSchema, D as processEvent } from './OrbitalServerRuntime-DRvduqA7.js';
5
5
  import { EvaluationContext, SExpressionEvaluator } from '@almadar/evaluator';
6
6
  export { EvaluationContext, createMinimalContext } from '@almadar/evaluator';
7
7
  import { RenderBindingMarker, SExpr, TraitConfigObject, EventPayload, PatternConfig, EntityId, EntityField, EntityRow, EntityPersistence, ServiceParams, EntityAccessPolicies, PayloadField, OrbitalDefinition, OrbitalSchema } from '@almadar/core';
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { EffectExecutor } from './chunk-3FYWURKS.js';
2
- export { EffectExecutor, EventBus, HANDLER_MANIFEST, InMemoryPersistence, MockPersistenceAdapter, StateMachineManager, TickScheduler, buildEmitsFromTraits, collectDeclaredConfigDefaults, collectDeclaredEntityDefaults, createInitialTraitState, createMockPersistence, createTestExecutor, createTickScheduler, createUnifiedLoader, findInitialState, findTransition, formatPayloadValidationError, getIsolatedCollectionName, getNamespacedEvent, isBrowser, isElectron, isNamespacedEvent, isNode, isValidDurationString, normalizeCallSiteConfigToValues, normalizeEventKey, parseDurationString, parseNamespacedEvent, preprocessSchema, processEvent, validateEventPayload, validatePayloadShapes } from './chunk-3FYWURKS.js';
1
+ import { EffectExecutor } from './chunk-EHFQOBQH.js';
2
+ export { EffectExecutor, EventBus, HANDLER_MANIFEST, InMemoryPersistence, MockPersistenceAdapter, StateMachineManager, TickScheduler, buildEmitsFromTraits, collectDeclaredConfigDefaults, collectDeclaredEntityDefaults, createInitialTraitState, createMockPersistence, createTestExecutor, createTickScheduler, createUnifiedLoader, findInitialState, findTransition, formatPayloadValidationError, getIsolatedCollectionName, getNamespacedEvent, isBrowser, isElectron, isNamespacedEvent, isNode, isValidDurationString, normalizeCallSiteConfigToValues, normalizeEventKey, parseDurationString, parseNamespacedEvent, preprocessSchema, processEvent, validateEventPayload, validatePayloadShapes } from './chunk-EHFQOBQH.js';
3
3
  export { cronMatches, cronMinuteKey, isValidCronExpression, parseCron, parseCronField } from './chunk-OU3ITB5S.js';
4
- import { createContextFromBindings, applyRowAccess, checkMutationAccess, accessDeniedMessage } from './chunk-XLMDWRMB.js';
5
- export { CALLSITE_PAYLOAD_PREFIX, applyRowAccess, checkMutationAccess, containsBindings, createContextFromBindings, createMinimalContext, deferEntityBindings, extractBindings, interpolateProps, interpolateValue, resolveCallSitePayloadCaptures } from './chunk-XLMDWRMB.js';
4
+ import { createContextFromBindings, applyRowAccess, checkMutationAccess, accessDeniedMessage } from './chunk-ORBJ5YEQ.js';
5
+ export { CALLSITE_PAYLOAD_PREFIX, applyRowAccess, checkMutationAccess, containsBindings, createContextFromBindings, createMinimalContext, deferEntityBindings, extractBindings, interpolateProps, interpolateValue, resolveCallSitePayloadCaptures } from './chunk-ORBJ5YEQ.js';
6
6
  import './chunk-T4VDAB4C.js';
7
7
  export { PERF_NAMESPACE, RendererContractViolationError, adjustSchemaForMockData, aggregateSlotContent, assertIsMultiSourceSlotManager, assertIsSlotManager, bindEventBus, bindTraitStateGetter, buildMockData, buildOrbitalsByTrait, clearPerf, createSlotSetter, ensureVerificationApi, getOrbitalVerification, perfEnd, perfStart, perfStore, perfTime, prepareSchemaForPreview, pushPerfEntry, validateSlotContent, wrapCallbackForEvent } from './chunk-FOFLEZRJ.js';
8
8
  export { collectEmbeddedTraits, collectTraitRefsFromResolvedTrait } from './chunk-SCRAHWOC.js';
@@ -1,5 +1,5 @@
1
1
  import * as _almadar_core from '@almadar/core';
2
- import { TraitId, EventId, SExpr, TraitEventListener, AgentContext, LlmContext, WorkspaceContext, SessionContext, MemoryContext, TraceContext, IntegrationContext, TraitConfig, EventPayload, BusEvent, EntityRow, FieldValue, ServiceParams, FetchResult, PatternConfig, ResolvedPatternProps, Orbital, ServiceCallResult, BusEventSource, BusEventListener, Unsubscribe as Unsubscribe$1, UserContext } from '@almadar/core';
2
+ import { TraitId, EventId, SExpr, TraitEventListener, AgentContext, LlmContext, WorkspaceContext, SessionContext, MemoryContext, TraceContext, IntegrationContext, TraitConfig, EventPayload, BusEvent, EntityRow, FieldValue, ServiceParams, FetchResult, PatternConfig, ResolvedPatternProps, Orbital, ServiceCallResult, BusEventSource, BusEventListener, Unsubscribe as Unsubscribe$1, UserContext, NavItem } from '@almadar/core';
3
3
 
4
4
  /** Alias for ResolvedPatternProps to avoid breaking internal consumers */
5
5
  type PatternProps = ResolvedPatternProps;
@@ -326,6 +326,18 @@ interface BindingContext {
326
326
  config?: ConfigContext;
327
327
  /** Authenticated viewer behind `@user.x` — ownership (`@user.id`) and role gates. */
328
328
  user?: UserContext;
329
+ /**
330
+ * The host orbital's pages for the `@pages` render sigil (`href`/`label`
331
+ * per inline page). Seeded onto the render binding context only — never
332
+ * present on a guard/tick context. Mirrors the compiler's
333
+ * `OirBindingRoot::Pages`.
334
+ */
335
+ pages?: NavItem[];
336
+ /**
337
+ * The `data-theme` key string for the `@currentTheme` render sigil,
338
+ * derived from the host orbital's `Orbital.theme`. Render-context only.
339
+ */
340
+ currentTheme?: string;
329
341
  /**
330
342
  * Local variables introduced by a `let` form, keyed by bare name and
331
343
  * referenced via `@<name>` (the canonical evaluator convention — same as
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/runtime",
3
- "version": "6.50.0",
3
+ "version": "6.52.0",
4
4
  "description": "Interpreted runtime for Almadar orbital applications (OrbitalServerRuntime)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -57,11 +57,11 @@
57
57
  "access": "public"
58
58
  },
59
59
  "dependencies": {
60
- "@almadar/core": "^10.51.0",
61
- "@almadar/evaluator": "^2.39.0",
60
+ "@almadar/core": "^10.54.0",
61
+ "@almadar/evaluator": "^2.40.0",
62
62
  "@almadar/logger": "^1.11.0",
63
63
  "@almadar/server": "^2.34.0",
64
- "@almadar/std": "^16.163.0"
64
+ "@almadar/std": "^16.167.0"
65
65
  },
66
66
  "peerDependencies": {
67
67
  "express": "^5.0.0"